%PDF- %PDF-
Direktori : /home1/lightco1/luminero.com.au/plugins/system/pagebuilder/ |
Current File : //home1/lightco1/luminero.com.au/plugins/system/pagebuilder/pagebuilder.php |
<?php /** * @version $Id$ * @package JSN_PageBuilder * @author JoomlaShine Team <support@joomlashine.com> * @copyright Copyright (C) 2012 JoomlaShine.com. All Rights Reserved. * @license GNU/GPL v2 or later http://www.gnu.org/licenses/gpl-2.0.html * * Websites: http://www.joomlashine.com * Technical Support: Feedback - http://www.joomlashine.com/contact-us/get-support.html */ // No direct access to this file. defined('_JEXEC') || die('Restricted access'); include_once JPATH_ROOT . '/administrator/components/com_pagebuilder/defines.pagebuilder.php'; jimport('joomla.plugin.plugin'); /** * Plugin system of JSN Pagebuilder * * @package JSN_PageBuilder * @since 1.0.0 */ class plgSystemPagebuilder extends JPlugin { public function onAfterInitialise() { $input = JFactory::getApplication()->input; $option = $input->getString('option', ''); $preview = $input->getString('task', ''); $secretKey = $input->getCmd('secret_key', ''); $config = JFactory::getConfig(); $secret = $config->get('secret'); if (JFactory::getApplication()->isSite() && $option == 'com_pagebuilder' && $preview == 'preview.module') { if (md5($secret) != $secretKey) { die('Restricted access'); } $result = $this->jsnRenderModule($input->getInt('moduleId', 0),$input->getString('showTitle', '')); if ( $result != false){ echo $result; } exit(); } } /** * This method is to load neccessary access * for PageBuilder need * * @return void */ public function onBeforeRender() { // Check if JoomlaShine extension framework is enabled? $framework = JTable::getInstance('Extension'); $framework->load( array( 'element' => 'jsnframework', 'type' => 'plugin', 'folder' => 'system' ) ); // Do nothing if JSN Extension framework not found. if ( !$framework->extension_id ) return; $app = JFactory::getApplication(); $tpl = $app->input->getInt('tp', 0); if ($app->isAdmin() || $tpl) return; // Get requested component, view and task $option = $app->input->getCmd('option', ''); $view = $app->input->getCmd('view', ''); $layout = $app->input->getCmd('layout', ''); $user = JFactory::getUser(); if ($app->isSite() && $option == 'com_content' && $view == 'form' && $layout == 'edit' && $user->get('id') > 0) { return; } $doc = JFactory::getDocument(); if (strtolower(get_class($doc)) != "jdocumenthtml") return; if ($app->isSite() && $option == 'com_k2' && $view == 'item' && $app->input->getInt('id', 0)) { if (file_exists(JPATH_ROOT . '/administrator/components/com_pagebuilder/helpers/shortcode.php')) { if (class_exists('K2HelperUtilities')) { include_once JPATH_ROOT . '/administrator/components/com_pagebuilder/helpers/shortcode.php'; $shortCodeRegex = JSNPagebuilderHelpersShortcode::getShortcodeRegex(); JModelLegacy::addIncludePath(JPATH_ROOT . '/components/com_k2/models'); $K2ModelItem = JModelLegacy::getInstance('k2modelitem'); $k2Item = $K2ModelItem->getData(); if (count($k2Item)) { $metaDescItem = preg_replace("#{(.*?)}(.*?){/(.*?)}#s", '', $k2Item->introtext.' '.$k2Item->fulltext); $metaDescItem = strip_tags($metaDescItem); $k2params = K2HelperUtilities::getParams('com_k2'); $metaDescItem = JSNPagebuilderHelpersShortcode::removeShortCode($metaDescItem, $shortCodeRegex); $metaDescItem = K2HelperUtilities::characterLimit($metaDescItem, $k2params->get('metaDescLimit', 150)); if ($doc->getMetaData('og:description') != null) { $doc->setMetaData('og:description', $metaDescItem); } if ($doc->getDescription() != '') { $doc->setDescription($metaDescItem); } } } } } // Get PageBuilder configuration. $params = JSNConfigHelper::get('com_pagebuilder'); // Check if it's enabled or not. $isEnabled = $params->get('enable_pagebuilder', 1); // Do nothing if PageBuilder not enabled; if ( !$isEnabled ) {} ; // Register autoloaded classes JSN_Loader::register(JSNPB_ADMIN_ROOT . '/helpers' , 'JSNPagebuilderHelpers'); JSN_Loader::register(JSNPB_ADMIN_ROOT . '/helpers/shortcode' , 'JSNPBShortcode'); //JSN_Loader::register(JPATH_ROOT . '/plugins/pagebuilder/' , 'JSNPBShortcode'); //JSN_Loader::register(JPATH_ROOT . '/administrator/components/com_pagebuilder/elements/' , 'JSNPBShortcode'); JSN_Loader::register(JPATH_ROOT . '/plugins/jsnpagebuilder/defaultelements/' , 'JSNPBShortcode'); //load ElementAssets self::loadElementAssets(); /* * Move all css files of PageBuilder * to the end of css list * */ $data = $doc->getHeadData(); $styleSheetList = $data['styleSheets']; $_tmpList = array(); if (count($styleSheetList)) { foreach ($styleSheetList as $cssUrl=>$css) { // Check if the file belongs to PageBuilder if (strpos($cssUrl, 'plugins/pagebuilder/') !== false || strpos( $cssUrl, 'com_pagebuilder') !== false) { $_tmpList[$cssUrl] = $css; unset($styleSheetList[$cssUrl]); } } } $styleSheetList = array_merge($styleSheetList, $_tmpList); $data['styleSheets'] = $styleSheetList; $doc->setHeadData($data); } /** * Check the whole site content then replace found * PageBuilder shortcodes by Elements * * @return Changed HTML format */ public function onAfterRender() { // Get requested component, view and task $app = JFactory::getApplication(); $tpl = $app->input->getInt('tp', 0); $option = $app->input->getCmd('option', ''); $view = $app->input->getCmd('view', ''); $layout = $app->input->getCmd('layout', ''); $user = JFactory::getUser(); // Remove scrollspy jQuery conflict if ($app->isAdmin() && $option == 'com_pagebuilder') { if ( $view == 'configuration') { $html = $app->getBody(); if (preg_match_all("/\\$\('\.subhead'\)\.scrollspy\(\{[^\r\n]+\}\);/", $html, $matches, PREG_SET_ORDER)) { $html = preg_replace("/\\$\('\.subhead'\)\.scrollspy\(\{[^\r\n]+\}\);/", '', $html); $app->setBody($html); } } } if ($app->isAdmin() && $option == 'com_content' && $view == 'article' && $layout == 'edit' && $user->get('id') > 0) { $html = $app->getBody(); $html = preg_replace("#<script src=\"(.*?)\/jquery.ui.sortable.min.js\" type=\"text\/javascript\"></script>#", '', $html); $app->setBody($html); } if ($app->isAdmin() || $tpl) return; $doc = JFactory::getDocument(); if (strtolower(get_class($doc)) != "jdocumenthtml") return; if ($app->isSite() && $option == 'com_content' && $view == 'form' && $layout == 'edit' && $user->get('id') > 0) { return; } // Check if JoomlaShine extension framework is enabled? $framework = JTable::getInstance('Extension'); $framework->load( array( 'element' => 'jsnframework', 'type' => 'plugin', 'folder' => 'system' ) ); // Do nothing if JSN Extension framework not found. if ( !$framework->extension_id ) return; // Require base shorcode element self::requireBaseShortCodeElement(); global $JSNPbElements; $JSNPbElements = new JSNPagebuilderHelpersElements(); // Get PageBuilder configuration. $params = JSNConfigHelper::get('com_pagebuilder'); // Check if it's enabled or not. $isEnabled = $params->get('enable_pagebuilder', 1); // Do nothing if PageBuilder not enabled; if ( !$isEnabled ) {} ; $data = $doc->getHeadData(); /*JHtml::_('jquery.framework'); $doc->addScript( JSNPB_PLG_SYSTEM_ASSETS_URL . 'js/joomlashine.noconflict.js', 'text/javascript'); $doc->addScript( JSNPB_PLG_SYSTEM_ASSETS_URL . '3rd-party/bootstrap3/js/bootstrap.min.js', 'text/javascript' ); JHTML::stylesheet( JSNPB_PLG_SYSTEM_ASSETS_URL . '3rd-party/bootstrap3/css/bootstrap.min.css', 'text/css' ); JHTML::stylesheet( JSNPB_PLG_SYSTEM_ASSETS_URL . 'css/pagebuilder.css', 'text/css' ); JHTML::stylesheet( JSNPB_PLG_SYSTEM_ASSETS_URL . 'css/jsn-gui-frontend.css', 'text/css' ); JHTML::stylesheet( JSNPB_PLG_SYSTEM_ASSETS_URL . 'css/front_end.css', 'text/css' ); JHTML::stylesheet( JSNPB_PLG_SYSTEM_ASSETS_URL . 'css/front_end_responsive.css', 'text/css' );*/ // Store the assets before transforming. $inlineScriptBefore = isset($data['script']['text/javascript']) ? $data['script']['text/javascript'] : ''; $inlineStyleBefore = isset($data['style']['text/css']) ? $data['style']['text/css'] : ''; $scriptsBefore = $data['scripts']; $styleSheetsBefore = $data['styleSheets']; $scriptCount = count($scriptsBefore); $styleSheetCount = count($styleSheetsBefore); // Analyze page content and use PageBuilder to // transform code if Pb structure found. // Get the responsed body $content = $app->getBody(); // preg_replace falsely process $ symobols as commands in text copy. $content = str_replace('$', '$', $content); $content = str_replace('\\\\', 'JSN_PB_BACKSLASHES', $content); $body_content = ''; preg_match("/<body.*\/body>/si", $content, $body_content); if (!isset($body_content[0])) return; $body_content = $body_content[0]; $helper = new JSNPagebuilderHelpersBuilder(); // Transform the content inside body tag only $body_content = $helper->generateShortCode($body_content, false, 'frontend'); // Apply the body content into page content $content = preg_replace("/(<body.*\/body>)/si", $body_content, $content); /* * Arrange the assets loaded from PageBuilder * Because onAfterRender not accept add assets by JFactory::getDocument() * so we need under code to modify document's header */ $data = $doc->getHeadData(); $inlineScriptAfter = isset($data['script']['text/javascript']) ? $data['script']['text/javascript'] : ''; $inlineStyleAfter = isset($data['style']['text/css']) ? $data['style']['text/css'] : ''; $scriptsAfter = $data['scripts']; $styleSheetsAfter = $data['styleSheets']; // Separate assets of page builder. $pbInlineScript = str_replace($inlineScriptBefore, '', $inlineScriptAfter); $pbInlineStyle = str_replace($inlineStyleBefore, '', $inlineStyleAfter); $pbScripts = array_splice($scriptsAfter, $scriptCount); $pbStyleSheets = array_splice($styleSheetsAfter, $styleSheetCount); // Append PageBuilder's assets // Only support css file with type is "text/css" // and js type with type is "text/javascript" // in this period. $pbAssets = array(); if (count($pbStyleSheets)) { foreach ($pbStyleSheets as $css=>$v){ $pbAssets[] = '<link rel="stylesheet" href="' . $css . '" type="text/css" />'; } } if (count($pbScripts)) { foreach ($pbScripts as $js=>$v) { $pbAssets[] = '<script src="' . $js . '" type="text/javascript"></script>'; } } if (trim($pbInlineScript) != '') { $pbAssets[] = '<script type="text/javascript">' . $pbInlineScript . '</script>'; } if (trim($pbInlineStyle) != '') { $pbAssets[] = '<style>' . $pbInlineStyle . '</style>'; } $pbAssets = implode("\n", $pbAssets); // Append assets to content $content = str_replace("</head>", $pbAssets . "</head>", $content); // preg_replace falsely process $ symobols as commands in text copy. $content = str_replace('$', '$', $content); $content = str_replace('JSN_PB_BACKSLASHES', '\\\\', $content); // Render preview for administrator $preview = $app->input->getCmd('preview', ''); if ($option == 'com_content' && $preview == 'preview.module') { if (file_exists(JPATH_ROOT . '/administrator/components/com_pagebuilder/controllers/shortcode.php')) { include_once JPATH_ROOT . '/administrator/components/com_pagebuilder/controllers/shortcode.php'; $shortCode = new JSNPagebuilderControllerShortcode(); $shortCode->preview(); die; } } $app->setBody($content); } private static function loadElementAssets() { //BEGIN compress $app = JFactory::getApplication(); $doc = JFactory::getDocument(); // Require base shorcode element self::requireBaseShortCodeElement(); $JSNPbElements = new JSNPagebuilderHelpersElements(); if ($doc instanceOf JDocumentHTML) { $content = $doc->getBuffer('component'); $check_method = method_exists('JModuleHelper','getModuleList'); if ($check_method) { $modules = JModuleHelper::getModuleList(); } else { $modules = self::getModuleList(); } if (count($modules)) { foreach ($modules as $module) { if (trim($module->content) != '') { $content .= $module->content; } } } $content = str_replace('$', '$', $content); $helper = new JSNPagebuilderHelpersBuilder(); $elementClass = $helper->getShortCodeClassBeforeRender($content); if (!$app->isAdmin()) { JHtml::_('jquery.framework'); $doc->addScript( JSNPB_PLG_SYSTEM_ASSETS_URL . 'js/joomlashine.noconflict.js', 'text/javascript'); $doc->addScript( JSNPB_PLG_SYSTEM_ASSETS_URL . '3rd-party/bootstrap3/js/bootstrap.min.js', 'text/javascript' ); //$doc->addScript( JSNPB_PLG_SYSTEM_ASSETS_URL . '3rd-party/scrollreveal/scrollReveal.js', 'text/javascript' ); $doc->addStyleSheet( JSNPB_PLG_SYSTEM_ASSETS_URL . '3rd-party/bootstrap3/css/bootstrap.min.css', 'text/css' ); $doc->addStyleSheet( JSNPB_PLG_SYSTEM_ASSETS_URL . 'css/pagebuilder.css', 'text/css' ); $doc->addStyleSheet( JSNPB_PLG_SYSTEM_ASSETS_URL . 'css/jsn-gui-frontend.css', 'text/css' ); $doc->addStyleSheet( JSNPB_PLG_SYSTEM_ASSETS_URL . 'css/front_end.css', 'text/css' ); $doc->addStyleSheet( JSNPB_PLG_SYSTEM_ASSETS_URL . 'css/front_end_responsive.css', 'text/css' ); } if (is_array($elementClass) && count($elementClass) > 0) { foreach ($elementClass as $class) { $instance = New $class(); if (method_exists($instance,'load_assets_frontend')) { $instance->load_assets_frontend(); } } } } } private static function requireBaseShortCodeElement() { require_once JSNPB_ADMIN_ROOT . '/libraries/innotheme/shortcode/element.php'; require_once JSNPB_ADMIN_ROOT . '/libraries/innotheme/shortcode/parent.php'; require_once JSNPB_ADMIN_ROOT . '/libraries/innotheme/shortcode/child.php'; } private static function getModuleList() { $app = JFactory::getApplication(); $Itemid = $app->input->getInt('Itemid'); $groups = implode(',', JFactory::getUser()->getAuthorisedViewLevels()); $lang = JFactory::getLanguage()->getTag(); $clientId = (int) $app->getClientId(); $db = JFactory::getDbo(); $query = $db->getQuery(true) ->select('m.id, m.title, m.module, m.position, m.content, m.showtitle, m.params, mm.menuid') ->from('#__modules AS m') ->join('LEFT', '#__modules_menu AS mm ON mm.moduleid = m.id') ->where('m.published = 1') ->join('LEFT', '#__extensions AS e ON e.element = m.module AND e.client_id = m.client_id') ->where('e.enabled = 1'); $date = JFactory::getDate(); $now = $date->toSql(); $nullDate = $db->getNullDate(); $query->where('(m.publish_up = ' . $db->quote($nullDate) . ' OR m.publish_up <= ' . $db->quote($now) . ')') ->where('(m.publish_down = ' . $db->quote($nullDate) . ' OR m.publish_down >= ' . $db->quote($now) . ')') ->where('m.access IN (' . $groups . ')') ->where('m.client_id = ' . $clientId) ->where('(mm.menuid = ' . (int) $Itemid . ' OR mm.menuid <= 0)'); // Filter by language if ($app->isSite() && $app->getLanguageFilter()) { $query->where('m.language IN (' . $db->quote($lang) . ',' . $db->quote('*') . ')'); } $query->order('m.position, m.ordering'); // Set the query $db->setQuery($query); try { $modules = $db->loadObjectList(); } catch (RuntimeException $e) { return array(); } return $modules; } public function jsnRenderModule($moduleId, $showTitle){ self::requireBaseShortCodeElement(); // Register autoloaded classes JSN_Loader::register(JSNPB_ADMIN_ROOT . '/helpers' , 'JSNPagebuilderHelpers'); if (file_exists(JPATH_ROOT . '/plugins/jsnpagebuilder/defaultelements/module/module.php')) { include_once JPATH_ROOT . '/plugins/jsnpagebuilder/defaultelements/module/module.php'; $shortCode = new JSNPBShortcodeModule(); $content = $shortCode->jsn_load_module( (int)$moduleId, '', $style = 'none', $showTitle ); $document = JFactory::getDocument(); $scripts = $document->_scripts; $script = ''; if ( count($scripts) ) { foreach ($scripts as $fileScript => $value) { $script .='<script src="' . $fileScript . '" type="text/javascript"></script>' . "\n"; } } $styleSheets = $document->_styleSheets; $css = ''; if ( count($styleSheets) ) { foreach ($styleSheets as $fileStyle => $value) { $css .='<link rel="stylesheet" href="' . $fileStyle . '" type="text/css">' . "\n"; } } return $script . $css . $content; } return false; } }