Server IP : 195.201.23.43 / Your IP : 3.145.152.98 Web Server : Apache System : Linux webserver2.vercom.be 5.4.0-192-generic #212-Ubuntu SMP Fri Jul 5 09:47:39 UTC 2024 x86_64 User : kdecoratie ( 1041) PHP Version : 7.1.33-63+ubuntu20.04.1+deb.sury.org+1 Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals, MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : ON | Pkexec : ON Directory : /home/kdecoratie/public_html/administrator/components/com_slideshowck/helpers/ |
Upload File : |
<?php /** * @name Slideshow CK * @package com_slideshowck * @copyright Copyright (C) 2019. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt * @author Cedric Keiflin - https://www.template-creator.com - https://www.joomlack.fr */ // No direct access defined('_JEXEC') or die; require_once JPATH_ADMINISTRATOR . '/components/com_slideshowck/helpers/defines.php'; use Slideshowck\CKInput; use Slideshowck\CKFof; use Slideshowck\CKText; /** * Helper Class. */ class SlideshowckHelper { static $cssreplacements; /* * Load the JS and CSS files needed to use CKBox * * Return void */ public static function loadCkbox() { $doc = JFactory::getDocument(); JHtml::_('jquery.framework', true); // $doc->addScript(JUri::root(true) . '/media/jui/js/jquery.min.js'); $doc->addStyleSheet(SLIDESHOWCK_MEDIA_URI . '/assets/ckbox.css'); $doc->addScript(SLIDESHOWCK_MEDIA_URI . '/assets/ckbox.js'); } /* * Load the JS and CSS files needed to use CKBox * * Return void */ // public static function loadCKFramework() { // $doc = JFactory::getDocument(); // $doc->addScript(JUri::root(true) . '/media/jui/js/jquery.min.js'); // $doc->addStyleSheet(SLIDESHOWCK_MEDIA_URI . '/assets/ckframework.css'); // } /* * Load the JS and CSS files needed to use CKBox * * Return void */ /*public static function loadInlineCKFramework() { ?> <script src="<?php echo JUri::root(true) ?>/media/jui/js/jquery.min.js" type="text/javascript"></script> <link rel="stylesheet" href="<?php echo JUri::root(true) ?>/components/com_slideshowck/assets/font-awesome.min.css" type="text/css" /> <link rel="stylesheet" href="<?php echo SLIDESHOWCK_MEDIA_URI ?>/assets/ckframework.css" type="text/css" /> <?php }*/ /** * Convert a hexa decimal color code to its RGB equivalent * * @param string $hexStr (hexadecimal color value) * @param boolean $returnAsString (if set true, returns the value separated by the separator character. Otherwise returns associative array) * @param string $seperator (to separate RGB values. Applicable only if second parameter is true.) * @return array or string (depending on second parameter. Returns False if invalid hex color value) */ static function hex2RGB($hexStr, $opacity) { $hexStr = preg_replace("/[^0-9A-Fa-f]/", '', $hexStr); // Gets a proper hex string $rgbArray = array(); if (strlen($hexStr) == 6) { //If a proper hex code, convert using bitwise operation. No overhead... faster $colorVal = hexdec($hexStr); $rgbArray['red'] = 0xFF & ($colorVal >> 0x10); $rgbArray['green'] = 0xFF & ($colorVal >> 0x8); $rgbArray['blue'] = 0xFF & $colorVal; } elseif (strlen($hexStr) == 3) { //if shorthand notation, need some string manipulations $rgbArray['red'] = hexdec(str_repeat(substr($hexStr, 0, 1), 2)); $rgbArray['green'] = hexdec(str_repeat(substr($hexStr, 1, 1), 2)); $rgbArray['blue'] = hexdec(str_repeat(substr($hexStr, 2, 1), 2)); } else { return false; //Invalid hex color code } $rgbacolor = "rgba(" . $rgbArray['red'] . "," . $rgbArray['green'] . "," . $rgbArray['blue'] . "," . ($opacity / 100) . ")"; return $rgbacolor; } /** * Test if there is already a unit, else add the px * * @param string $value * @return string */ public static function testUnit($value) { if ((stristr($value, 'px')) OR (stristr($value, 'em')) OR (stristr($value, '%'))) { return $value; } if ($value == '') { $value = 0; } return $value . 'px'; } /** * Remove special character */ public static function cleanName($path) { return preg_replace('/[^a-z0-9]/i', '_', $path); } public static function formatPath($p) { return trim(str_replace("\\", "/", $p), "/"); } /** * Get a subtring with the max length setting. * * @param string $text; * @param int $length limit characters showing; * @param string $replacer; * @return tring; */ public static function substring($text, $length = 100, $replacer = '...', $isStrips = true, $stringtags = '') { if($isStrips){ $text = preg_replace('/\<p.*\>/Us','',$text); $text = str_replace('</p>','<br/>',$text); $text = strip_tags($text, $stringtags); } if(function_exists('mb_strlen')){ if (mb_strlen($text) < $length) return $text; $text = mb_substr($text, 0, $length); }else{ if (strlen($text) < $length) return $text; $text = substr($text, 0, $length); } return $text . $replacer; } /* * update the table */ /*public static function createTableOptions() { $sqlsrc = SLIDESHOWCK_PATH . '/sql/updates/2.4.0.sql'; $query = file_get_contents($sqlsrc); $db = JFactory::getDbo(); $db->setQuery($query); if (!$db->execute()) { echo '<p class="alert alert-danger">Error during table options creation</p>'; } else { echo '<p class="alert alert-success">Table options successfully created</p>'; } }*/ /** * Get the name of the style */ public static function getStyleNameById($id) { if (! $id) return ''; // Create a new query object. $db = JFactory::getDbo(); $query = $db->getQuery(true); // Select the required fields from the table. $query->select('a.name'); $query->from($db->quoteName('#__slideshowck_styles') . ' AS a'); $query->where('(a.state IN (0, 1))'); $query->where('a.id = ' . (int)$id); // Reset the query using our newly populated query object. $db->setQuery($query); // Load the results as a list of stdClass objects (see later for more options on retrieving data). $results = $db->loadResult(); return $results; } /** * Create the list of all modules published as Object * * $file string the image path * $x integer the new image width * $y integer the new image height * * @return Boolean True on Success */ static function resizeImage($file, $x, $y = '', $thumbpath = 'th', $thumbsuffix = '_th') { if (!$file) return; $thumbext = explode(".", $file); $thumbext = end($thumbext); $thumbfile = str_replace(basename($file), $thumbpath . "/" . basename($file), $file); $thumbfile = str_replace("." . $thumbext, $thumbsuffix . "." . $thumbext, $thumbfile); $filetmp = JPATH_ROOT . '/' . $file; $filetmp = str_replace("%20", " ", $filetmp); if (! file_exists($filetmp)) return $file; $size = getimagesize($filetmp); if ($size[0] > $size[1] || !$y) // paysage { $y = $x * $size[1] / $size[0]; } else { $x = $y * $size[0] / $size[1]; } if ($size) { if (JFile::exists($thumbfile)) { return $thumbfile; } $thumbfolder = str_replace(basename($file), $thumbpath . "/", $filetmp); if (!JFolder::exists($thumbfolder)) { JFolder::create($thumbfolder); JFile::copy(JPATH_ROOT . '/modules/mod_slideshowck/index.html', $thumbfolder . 'index.html' ); } if ($size['mime'] == 'image/jpeg') { $img_big = imagecreatefromjpeg($filetmp); # On ouvre l'image d'origine $img_new = imagecreate($x, $y); # création de la miniature $img_mini = imagecreatetruecolor($x, $y) or $img_mini = imagecreate($x, $y); // copie de l'image, avec le redimensionnement. imagecopyresized($img_mini, $img_big, 0, 0, 0, 0, $x, $y, $size[0], $size[1]); imagejpeg($img_mini, JPATH_ROOT . '/' . $thumbfile); } elseif ($size['mime'] == 'image/png') { $img_big = imagecreatefrompng($filetmp); # On ouvre l'image d'origine $img_new = imagecreate($x, $y); # création de la miniature $img_mini = imagecreatetruecolor($x, $y) or $img_mini = imagecreate($x, $y); // copie de l'image, avec le redimensionnement. imagecopyresized($img_mini, $img_big, 0, 0, 0, 0, $x, $y, $size[0], $size[1]); imagepng($img_mini, JPATH_ROOT . '/' . $thumbfile); } elseif ($size['mime'] == 'image/gif') { $img_big = imagecreatefromgif($filetmp); # On ouvre l'image d'origine $img_new = imagecreate($x, $y); # création de la miniature $img_mini = imagecreatetruecolor($x, $y) or $img_mini = imagecreate($x, $y); // copie de l'image, avec le redimensionnement. imagecopyresized($img_mini, $img_big, 0, 0, 0, 0, $x, $y, $size[0], $size[1]); imagegif($img_mini, JPATH_ROOT . '/' . $thumbfile); } //echo 'Image redimensionnée !'; } return $thumbfile; } /* * Make empty slide object */ public static function initItem() { $item = new stdClass(); $item->image = null; $item->link = null; $item->title = null; $item->text = null; $item->more = array(); $item->alignment = null; $item->time = null; $item->target = 'default'; $item->video = null; $item->texttype = null; $item->articleid = null; return $item; } /* * Convert an old item to the new convention */ public static function legacyUpdateItem(&$item) { $newItem = self::initItem(); foreach ($newItem as $key => $value) { if (!isset($item->$key)) $item->$key = $value; } $item->image = $item->imgname; $item->link = $item->imglink; $item->time = $item->imgtime; $item->thumb = $item->imgthumb; $item->title = $item->imgtitle; $item->text = strip_tags($item->imgcaption); } /* * Convert an item to the old convention to render in a V1 layout * To call manually in the layout file */ public static function legacyItemForV1Layout(&$item) { $newItem = self::initItem(); foreach ($newItem as $key => $value) { if (!isset($item->$key)) $item->$key = $value; } $item->imgname = $item->image; $item->imglink = $item->link; $item->imgtime = $item->time; $item->imgthumb = $item->imgname; // $item->imgthumb = $item->thumb; $item->imgtitle = $item->title; $item->imgcaption = $item->text; $item->imgalignment = $item->alignment; $item->imgtime = $item->time; $item->imgtarget = $item->target; $item->imgvideo = $item->video; $item->article = null; } /** * Set the correct video link * * $videolink string the video path * * @return string the new video path */ static function setVideolink($videolink) { // youtube if (stristr($videolink, 'youtu.be')) { $videolink = str_replace('youtu.be', 'www.youtube.com/embed', $videolink); } else if (stristr($videolink, 'www.youtube.com') AND !stristr($videolink, 'embed')) { $videolink = str_replace('youtube.com', 'youtube.com/embed', $videolink); } if (strpos($videolink, 'http') !== false) $videolink .= ( stristr($videolink, '?')) ? '&wmode=transparent' : '?wmode=transparent'; return $videolink; } /** * Set the correct video link * * $videolink string the video path * * @return string the new video path */ static function setImageUrl($url) { if (strpos($url, 'http') !== 0) { $url = JUri::root(true) . '/' . trim($url, '/'); } return $url; } /** * Truncates text blocks over the specified character limit and closes * all open HTML tags. The method will optionally not truncate an individual * word, it will find the first space that is within the limit and * truncate at that point. This method is UTF-8 safe. * * @param string $text The text to truncate. * @param integer $length The maximum length of the text. * @param boolean $noSplit Don't split a word if that is where the cutoff occurs (default: true). * @param boolean $allowHtml Allow HTML tags in the output, and close any open tags (default: true). * * @return string The truncated text. * * @since 11.1 */ public static function truncate($text, $length = 0, $noSplit = true, $allowHtml = true) { if ($length == 0) return ''; // Check if HTML tags are allowed. if (!$allowHtml) { // Deal with spacing issues in the input. $text = str_replace('>', '> ', $text); $text = str_replace(array(' ', ' '), ' ', $text); $text = JString::trim(preg_replace('#\s+#mui', ' ', $text)); // Strip the tags from the input and decode entities. $text = strip_tags($text); $text = html_entity_decode($text, ENT_QUOTES, 'UTF-8'); // Remove remaining extra spaces. $text = str_replace(' ', ' ', $text); $text = JString::trim(preg_replace('#\s+#mui', ' ', $text)); } // Truncate the item text if it is too long. if ($length > 0 && JString::strlen($text) > $length) { // Find the first space within the allowed length. $tmp = JString::substr($text, 0, $length); if ($noSplit) { $offset = JString::strrpos($tmp, ' '); if (JString::strrpos($tmp, '<') > JString::strrpos($tmp, '>')) { $offset = JString::strrpos($tmp, '<'); } $tmp = JString::substr($tmp, 0, $offset); // If we don't have 3 characters of room, go to the second space within the limit. if (JString::strlen($tmp) > $length - 3) { $tmp = JString::substr($tmp, 0, JString::strrpos($tmp, ' ')); } } if ($allowHtml) { // Put all opened tags into an array preg_match_all("#<([a-z][a-z0-9]*)\b.*?(?!/)>#i", $tmp, $result); $openedTags = $result[1]; $openedTags = array_diff($openedTags, array("img", "hr", "br")); $openedTags = array_values($openedTags); // Put all closed tags into an array preg_match_all("#</([a-z]+)>#iU", $tmp, $result); $closedTags = $result[1]; $numOpened = count($openedTags); // All tags are closed if (count($closedTags) == $numOpened) { return $tmp . '...'; } $tmp .= '...'; $openedTags = array_reverse($openedTags); // Close tags for ($i = 0; $i < $numOpened; $i++) { if (!in_array($openedTags[$i], $closedTags)) { $tmp .= "</" . $openedTags[$i] . ">"; } else { unset($closedTags[array_search($openedTags[$i], $closedTags)]); } } } $text = $tmp; } return $text; } static function getArticle($item) { // load the content articles file $com_path = JPATH_SITE . '/components/com_content/'; require_once $com_path . 'router.php'; require_once $com_path . 'helpers/route.php'; JModelLegacy::addIncludePath($com_path . '/models', 'ContentModel'); // Access filter $access = !JComponentHelper::getParams('com_content')->get('show_noauth'); $authorised = JAccess::getAuthorisedViewLevels(JFactory::getUser()->get('id')); // Get an instance of the generic articles model $articles = JModelLegacy::getInstance('Articles', 'ContentModel', array('ignore_request' => true)); // Set application parameters in model $app = JFactory::getApplication(); // $appParams = $app->getParams(); $articles->setState('params', JComponentHelper::getParams('com_content')); // $articles->setState('params', $appParams); $articles->setState('filter.published', 1); // $item->slidearticleid = isset($item->slidearticleid) ? $item->slidearticleid : $item->articleid; $articles->setState('filter.article_id', $item->slidearticleid); $items2 = $articles->getItems(); $item->article = $items2[0]; $item->text = $item->article->introtext; // $item->text = JHTML::_('content.prepare', $item->text); $item->title = $item->article->title; // set the item link to the article depending on the user rights if ($access || in_array($item->article->access, $authorised)) { // We know that user has the privilege to view the article $item->slug = $item->article->id . ':' . $item->article->alias; $item->catslug = $item->article->catid ? $item->article->catid . ':' . $item->article->category_alias : $item->article->catid; $item->link = JRoute::_(ContentHelperRoute::getArticleRoute($item->slug, $item->catslug)); } else { $app = JFactory::getApplication(); $menu = $app->getMenu(); $menuitems = $menu->getItems('link', 'index.php?option=com_users&view=login'); if (isset($menuitems[0])) { $Itemid = $menuitems[0]->id; } elseif ($app->input->get('Itemid', 0, 'int') > 0) { $Itemid = $app->input->get('Itemid', 0, 'int'); } $item->link = JRoute::_('index.php?option=com_users&view=login&Itemid=' . $Itemid); } return $item; } /** * List the replacement between the tags and the real final CSS rules */ public static function getCssReplacement() { if (! empty(self::$cssreplacements)) return self::$cssreplacements; self::$cssreplacements = Array( '[container]' => '' ,'[slide]' => '.cameraSlide img' ,'[caption]' => '.camera_caption > div' ,'[title]' => '.camera_caption_title' ,'[text]' => '.camera_caption_desc' ,'[button]' => 'a.camera-button' ,'[buttonhover]' => 'a.camera-button:hover' // ,'[thumbs]' => '.camera_pag_ul li img' ,'[paginationdotthumbs]' => '.camera_pag_ul li img' ); return self::$cssreplacements; } /** * Get the CSS of the style * @id - the style ID */ public static function getStyleLayoutcss($id) { if (! $id) return ''; // Create a new query object. $db = JFactory::getDbo(); $query = $db->getQuery(true); // Select the required fields from the table. $query->select('a.layoutcss'); $query->from($db->quoteName('#__slideshowck_styles') . ' AS a'); $query->where('(a.state IN (0, 1))'); $query->where('a.id = ' . (int)$id); // Reset the query using our newly populated query object. $db->setQuery($query); // Load the results as a list of stdClass objects (see later for more options on retrieving data). $result = $db->loadResult(); self::makeCssReplacement($result); return $result; } public static function makeCssReplacement(&$css) { $cssreplacements = self::getCssReplacement(); foreach ($cssreplacements as $tag => $rep) { $css = str_replace($tag, $rep, $css); } // return $css; } public static function getProMessage() { $html = '<div class="ckinfo"><i class="fas fa-info"></i><a href="https://www.joomlack.fr/en/joomla-extensions/slideshow-ck" target="_blank">' . JText::_('SLIDESHOWCK_ONLY_PRO') . '</a></div>'; return $html; } public static function getProPreview($imgName) { $html = '<div class="ckpropreview">' . '<img src="' . SLIDESHOWCK_MEDIA_URL . '/images/proonly/' . $imgName . '" />' . '<a href="https://www.joomlack.fr/en/joomla-extensions/slideshow-ck" target="_blank">' . JText::_('SLIDESHOWCK_ONLY_PRO') . '</a>' . '</div>'; return $html; } }Private