Файловый менеджер - Редактировать - /var/www/iplanru/data/old/www/i-plan.ru/administrator/components/com_jumi/plugin_system/jumi.php
Назад
<?php /** * @version $Id: jumi.php 92 2009-02-15 17:08:02Z martin2hajek $ * @package Joomla! 1.5.x, Jumi plugin * @copyright (c) 2009 Martin Hajek * @license http://www.gnu.org/copyleft/gpl.html GNU/GPL * * Usage: {jumi stored_code_source}code_written{/jumi} */ defined('_JEXEC') or die( "Direct Access Is Not Allowed" ); // Import library dependencies jimport( 'joomla.plugin.plugin' ); require_once( dirname( __FILE__ ).DS.'jumi'.DS.'class.jumicoder.php' ); class plgSystemJumi extends JPlugin { var $regex = '%\{jumi\b[^}]?(\S*?)\}([\S\s]*?)\{/jumi\}%'; var $debug; var $pluginParams; function plgSystemJumi( &$subject, $config ) //constuctor { global $mainframe, $_JUMI_ROOT; parent::__construct($subject, $config); //parent::__construct( $subject ); $this->loadLanguage( ); //$option = JRequest::getCmd( 'option' ); JPlugin::loadLanguage('plg_system_jumi', JPATH_ADMINISTRATOR); JPlugin::loadLanguage('plg_system_jumi'); $this->_plugin = JPluginHelper::getPlugin( 'system', 'jumi' ); $this->pluginParams = new JParameter( $this->_plugin->params ); $this->debug = $this->pluginParams->get( 'debug_mode'); //Jumi root for files inclusion is GLOBAL for all Jumi extensions $_JUMI_ROOT = $this->pluginParams->def('jumi_root', JPATH_ROOT); } function onPrepareContent( &$article ) //Articles, Sections desc., Categories desc. { global $mainframe, $_JUMI_ROOT; $nested = $this->pluginParams->get('nested_replace'); //Clear the Jumi code and syntax from the article in the frontend? If yes then clear and end if ($this->getClearing( $this->pluginParams->get( 'clear_code'), $this->getGroupIdFromType($article->usertype) )) { $article->text = preg_replace( $this->regex, '', $article->text ); return true; } $continuesearching = true; //Nesting loop. NO {jumi}{/jumi} in code_written please! while ($continuesearching){ // find all instances of $regex (i.e. jumi syntax) in an article and put them in $result $result = array(); $matches_found = preg_match_all( $this->regex, $article->text, $result, PREG_SET_ORDER ); if ($matches_found) { for ($matchi = 0; $matchi < count($result); $matchi++) { //cycle through all jumi instancies. //Sewing code written and code stored together to output $storage_source = $this->getStorageSource(trim($result[$matchi][1])); //filepathname or record id or "" $code_written = $result[$matchi][2]; //raw code written or "" $output = $this->getOutput($code_written, $storage_source, $this->debug); //Final replacement of $regex (i.e. {jumi ...}...{/jumi}) in $article->text by eval $output ob_start(); eval("?>".$output); $output = str_replace( '$' , '\$' , ob_get_contents()); //fixed joomla bug ob_end_clean(); $article->text = preg_replace($this->regex, $output, $article->text, 1); } if ($nested == 0) { $continuesearching = false; } } else { $continuesearching = false; } } return true; } function onAfterDispatch() //Feeds { global $mainframe; $docu =& JFactory::getDocument(); $docuType = $docu->getType(); //feed, html, pdf if ( $docuType == 'feed' && isset( $docu->items ) ) { // then replace it with some text for ( $i = 0; $i <= count( $docu->items ); $i++ ) { if ( isset( $docu->items[$i]->description ) ) { $docu->items[$i]->description = preg_replace( $this->regex, 'Here is the Jumi feed code', $docu->items[$i]->description, 1 ); } } } } /////////////////////custom methods ////////////////////////////// function getCodeStored($source) { //returns code stored in the database or null. $database = &JFactory::getDBO(); $user = &JFactory::getUser(); $database->setQuery("select custom_script from #__jumi where id = '{$source}' and access <= {$user->gid} and published = 1"); //$database->setQuery("select custom_script from #__jumi where id = $source"); //all records, all users return $database->loadResult(); } function getStorageSource($source) { //returns filepathname or a record id or "" global $_JUMI_ROOT; $storage=trim($source); if ($storage!=""){ if ($id = substr(strchr($storage,"*"),1)) { //if record id return it return (int)$id; } else { // else return filepathname return $GLOBALS['_JUMI_ROOT'].DS.$storage; } } else { // else return "" return ''; } } function getGroupIdFromType($type) { //returns user group id from its type or null $database =& JFactory::getDBO(); $database->setQuery( 'SELECT id FROM #__core_acl_aro_groups WHERE name = "'.$type.'"' ); return $database->loadResult(); } function getOutput($code_written, $storage_source, $debug) { //returns Jumi $output $output = ''; // Jumi output if($code_written == '' && $storage_source == '') { //if nothing to show $output = ($debug == 0) ? '' : '<div style="color:#FF0000;background:#FFFF00;">'.JText::_('ERROR_CONTENT').'</div>'; } else { // buffer code to $output if($code_written != ''){ //if code written $code_written = JumiCoder::cleanRubbish($code_written); $code_written = JumiCoder::decode($code_written, 0); $output .= $code_written; //include code written } if($storage_source != ''){ //if record id or filepathname if(is_int($storage_source)){ //if record id $code_stored = $this->getCodeStored($storage_source); if($code_stored != null){ $output .= $code_stored; //include record } else { $output = ($debug == 0) ? '' : '<div style="color:#FF0000;background:#FFFF00;">'.JText::sprintf('ERROR_RECORD', $storage_source).'</div>'; } } else { //if file if(is_readable($storage_source)) { $output .= file_get_contents($storage_source); //include file } else { $output = ($debug == 0) ? '' : '<div style="color:#FF0000;background:#FFFF00;">'.JText::sprintf('ERROR_FILE', $storage_source).'</div>'; } } } } return $output; } function getClearing($clear_switch, $aagid) { //decides wheather clear (filter out) Jumi syntax from the article or not //aagid: article autor group id switch ($clear_switch) { case '0': $clearing = true; $config = JComponentHelper::getParams( 'com_content' ); $filterGroups = $config->get( 'filter_groups' ); //$params->_registry[_default][data]->filter_groups; $filterType = $config->get( 'filter_type' ); //$params->_registry[_default][data]->filter_type; if ((is_array($filterGroups) && in_array( $aagid, $filterGroups )) || (!is_array($filterGroups) && $aagid == $filterGroups)) { if ($filterType == 'WL') { $clearing = false; } } else { if ($filterType != 'WL') { $clearing = false; } } break; case '1': $clearing = true; break; case '2': $clearing = false; break; default: $clearing = false; } return $clearing; } } ?>
| ver. 1.4 |
Github
|
.
| PHP 5.4.45-1~dotdeb+6.1 | Генерация страницы: 0 |
proxy
|
phpinfo
|
Настройка