| Current Path : /home/zieirix/www/components/com_roksprocket/lib/RokSprocket/PlatformHelper/ |
| Current File : /home/zieirix/www/components/com_roksprocket/lib/RokSprocket/PlatformHelper/Joomla.php |
<?php
/**
* @version $Id: Joomla.php 19249 2014-02-27 19:21:50Z btowles $
* @author RocketTheme http://www.rockettheme.com
* @copyright Copyright (C) 2007 - 2020 RocketTheme, LLC
* @license http://www.gnu.org/licenses/gpl-2.0.html GNU/GPLv2 only
*/
jimport('joomla.application.module.helper');
/**
*
*/
class RokSprocket_PlatformHelper_Joomla implements RokSprocket_PlatformHelper
{
/**
* Replaces the matched tags
*
* @param array An array of matches (see preg_match_all)
*
* @return string
*/
protected static function route(&$matches)
{
$original = $matches[0];
$url = $matches[1];
$url = str_replace('&', '&', $url);
$route = JRoute::_('index.php?' . $url);
return 'href="' . $route;
}
/**
* @return string
*/
public function getCurrentTemplate()
{
$app = JFactory::getApplication();
$template = $app->getTemplate();
return $template;
}
/**
* Get the parameters for the passes in module id
*
* @param $id
*
* @return RokCommon_Registry
*/
public function getModuleParameters($id)
{
/** @var $module JTableModule */
$module = JTable::getInstance('Module', 'JTable', array());
$module->load($id);
$params = new RokCommon_Registry($module->params);
return $params;
}
/**
* @param $callback
* @param $args
* @param $params
* @param $moduleid
*
* @return RokSprocket_ItemCollection|bool
*/
public function getFromCache($callback, $args, $params, $moduleid)
{
$conf = JFactory::getConfig();
if ($conf->get('caching') && $params->get('module_cache', 1)) {
$cache = JFactory::getCache('mod_roksprocket');
$cache->setCaching(true);
$cache->setLifeTime($params->get('cache_time', 900));
$user = JFactory::getUser();
$levels = $user->getAuthorisedViewLevels();
$key = 'mod_roksprocket' . md5(var_export($args, true)) . md5((string)$params) . implode(',', $levels) . '.' . $moduleid;
$return = $cache->get($callback, $args, $key);
} else {
$return = call_user_func_array($callback, $args);
}
return $return;
}
/**
* @param RokSprocket_ItemCollection $items
*
* @param \RokCommon_Registry $parameters
*
* @return RokSprocket_ItemCollection
*/
public function processItemsForEvents(RokSprocket_ItemCollection $items, RokCommon_Registry $parameters)
{
$parameters = new JRegistry((string)$parameters);
if ($parameters->get('run_content_plugins', 'onmodule') == 'oneach') {
// process content plugins
$dispatcher = JDispatcher::getInstance();
JPluginHelper::importPlugin('content');
/** @var $item RokSprocket_Item */
foreach ($items as &$item) {
$article = new stdClass();
$article->text = $item->getText();
$results = $dispatcher->trigger('onContentPrepare', array(
'mod_roksprocket.article',
&$article,
&$parameters,
$item->getOrder()
));
$item->setText($article->text);
}
}
return $items;
}
public function processOutputForEvents($output, RokCommon_Registry $parameters)
{
$parameters = new JRegistry((string)$parameters);
if ($parameters->get('run_content_plugins', 'onmodule') == 'onmodule' || (int)$parameters->get('run_content_plugins', 1) == true) {
// process content plugins
$dispatcher = JDispatcher::getInstance();
JPluginHelper::importPlugin('content');
$article = new stdClass();
$article->text = $output;
$results = $dispatcher->trigger('onContentPrepare', array(
'mod_roksprocket.article',
&$article,
&$parameters,
0
));
$output = $article->text;
}
return $output;
}
/**
* Gets the cache directory for the platform
*
* @return string the absolute path to the cache dir
*/
public function getCacheDir()
{
return JPATH_CACHE . '/mod_roksprocket';
}
/**
* @return string
*/
public function getCacheUrl()
{
return 'cache/mod_roksprocket';
}
/**
* @param $url
*
* @return mixed
*/
public function convertRelativeUrl($url)
{
$base = JURI::base(true) . '/';
$protocols = '[a-zA-Z0-9]+:'; //To check for all unknown protocals (a protocol must contain at least one alpahnumeric fillowed by :
$regex = '#^(?!/|' . $protocols . '|\#|\')#m';
$url = preg_replace($regex, "$base$1", $url);
return $url;
}
/**
* Converting the site URL to fit to the HTTP request
*/
public function cleanup($buffer)
{
$app = JFactory::getApplication();
if ($app->getName() != 'site' || $app->getCfg('sef') == '0') {
return $buffer;
}
//Replace src links
$base = JURI::base(true) . '/';
$regex = '#href="index.php\?([^"]*)#m';
$buffer = preg_replace_callback($regex, array('RokSprocket_PlatformHelper_Joomla', 'route'), $buffer);
$this->checkBuffer($buffer);
$protocols = '[a-zA-Z0-9]+:'; //To check for all unknown protocals (a protocol must contain at least one alpahnumeric fillowed by :
$regex = '#(src|href|poster)="(?!/|' . $protocols . '|\#|\')([^"]*)"#m';
$buffer = preg_replace($regex, "$1=\"$base\$2\"", $buffer);
$this->checkBuffer($buffer);
$regex = '#(onclick="window.open\(\')(?!/|' . $protocols . '|\#)([^/]+[^\']*?\')#m';
$buffer = preg_replace($regex, '$1' . $base . '$2', $buffer);
$this->checkBuffer($buffer);
// ONMOUSEOVER / ONMOUSEOUT
$regex = '#(onmouseover|onmouseout)="this.src=([\']+)(?!/|' . $protocols . '|\#|\')([^"]+)"#m';
$buffer = preg_replace($regex, '$1="this.src=$2' . $base . '$3$4"', $buffer);
$this->checkBuffer($buffer);
// Background image
$regex = '#style\s*=\s*[\'\"](.*):\s*url\s*\([\'\"]?(?!/|' . $protocols . '|\#)([^\)\'\"]+)[\'\"]?\)#m';
$buffer = preg_replace($regex, 'style="$1: url(\'' . $base . '$2$3\')', $buffer);
$this->checkBuffer($buffer);
// OBJECT <param name="xx", value="yy"> -- fix it only inside the <param> tag
$regex = '#(<param\s+)name\s*=\s*"(movie|src|url)"[^>]\s*value\s*=\s*"(?!/|' . $protocols . '|\#|\')([^"]*)"#m';
$buffer = preg_replace($regex, '$1name="$2" value="' . $base . '$3"', $buffer);
$this->checkBuffer($buffer);
// OBJECT <param value="xx", name="yy"> -- fix it only inside the <param> tag
$regex = '#(<param\s+[^>]*)value\s*=\s*"(?!/|' . $protocols . '|\#|\')([^"]*)"\s*name\s*=\s*"(movie|src|url)"#m';
$buffer = preg_replace($regex, '<param value="' . $base . '$2" name="$3"', $buffer);
$this->checkBuffer($buffer);
// OBJECT data="xx" attribute -- fix it only in the object tag
$regex = '#(<object\s+[^>]*)data\s*=\s*"(?!/|' . $protocols . '|\#|\')([^"]*)"#m';
$buffer = preg_replace($regex, '$1data="' . $base . '$2"$3', $buffer);
$this->checkBuffer($buffer);
JResponse::setBody($buffer);
return $buffer;
}
/**
* @param $buffer
*/
private function checkBuffer($buffer)
{
if ($buffer === null) {
switch (preg_last_error()) {
case PREG_BACKTRACK_LIMIT_ERROR:
$message = "PHP regular expression limit reached (pcre.backtrack_limit)";
break;
case PREG_RECURSION_LIMIT_ERROR:
$message = "PHP regular expression limit reached (pcre.recursion_limit)";
break;
case PREG_BAD_UTF8_ERROR:
$message = "Bad UTF8 passed to PCRE function";
break;
default:
$message = "Unknown PCRE error calling PCRE function";
}
JError::raiseError(500, $message);
}
}
}
$app = JFactory::getApplication();
$input = $app->input;
$format = $input->get('format', null, 'word');
if ($format == 'raw') {
/**
* JDocument Module renderer
*
* @package Joomla.Platform
* @subpackage Document
* @since 11.1
*/
class JDocumentRendererModule extends JDocumentRenderer
{
/**
* Renders a module script and returns the results as a string
*
* @param string $module The name of the module to render
* @param array $attribs Associative array of values
* @param string $content If present, module information from the buffer will be used
*
* @return string The output of the script
*
* @since 11.1
*/
public function render($module, $attribs = array(), $content = null)
{
if (!is_object($module)) {
$title = isset($attribs['title']) ? $attribs['title'] : null;
$module = JModuleHelper::getModule($module, $title);
if (!is_object($module)) {
if (is_null($content)) {
return '';
} else {
/**
* If module isn't found in the database but data has been pushed in the buffer
* we want to render it
*/
$tmp = $module;
$module = new stdClass;
$module->params = null;
$module->module = $tmp;
$module->id = 0;
$module->user = 0;
}
}
}
// Get the user and configuration object
// $user = JFactory::getUser();
$conf = JFactory::getConfig();
// Set the module content
if (!is_null($content)) {
$module->content = $content;
}
// Get module parameters
$params = new JRegistry;
$params->loadString($module->params);
// Use parameters from template
if (isset($attribs['params'])) {
$template_params = new JRegistry;
$template_params->loadString(html_entity_decode($attribs['params'], ENT_COMPAT, 'UTF-8'));
$params->merge($template_params);
$module = clone $module;
$module->params = (string)$params;
}
$contents = '';
// Default for compatibility purposes. Set cachemode parameter or use JModuleHelper::moduleCache from within the
// module instead
$cachemode = $params->get('cachemode', 'oldstatic');
if ($params->get('cache', 0) == 1 && $conf->get('caching') >= 1 && $cachemode != 'id' && $cachemode != 'safeuri') {
// Default to itemid creating method and workarounds on
$cacheparams = new stdClass;
$cacheparams->cachemode = $cachemode;
$cacheparams->class = 'JModuleHelper';
$cacheparams->method = 'renderModule';
$cacheparams->methodparams = array($module, $attribs);
$contents = JModuleHelper::ModuleCache($module, $params, $cacheparams);
} else {
$contents = JModuleHelper::renderModule($module, $attribs);
}
return $contents;
}
}
}