diff --git a/e107_handlers/e_parse_class.php b/e107_handlers/e_parse_class.php index b878c28a5..5e6a7e830 100644 --- a/e107_handlers/e_parse_class.php +++ b/e107_handlers/e_parse_class.php @@ -11,9 +11,9 @@ | GNU General Public License (http://gnu.org). | | $Source: /cvs_backup/e107_0.8/e107_handlers/e_parse_class.php,v $ -| $Revision: 1.13 $ -| $Date: 2007-06-07 19:19:37 $ -| $Author: e107steved $ +| $Revision: 1.14 $ +| $Date: 2007-06-13 02:53:21 $ +| $Author: mcfly_e107 $ +----------------------------------------------------------------------------+ */ if (!defined('e107_INIT')) { exit; } @@ -117,6 +117,11 @@ class e_parse $this->e_modSet[$key] = TRUE; } + if (!is_object($this->e_sc)) + { + require_once(e_HANDLER."shortcode_handler.php"); + $this->e_sc = new e_shortcode; + } } function toDB($data, $nostrip = false, $no_encode = false, $original_author = false, $mod = false) @@ -195,11 +200,6 @@ class e_parse function parseTemplate($text, $parseSCFiles = TRUE, $extraCodes = "") { - if (!is_object($this->e_sc)) - { - require_once(e_HANDLER."shortcode_handler.php"); - $this->e_sc = new e_shortcode; - } return $this->e_sc->parseCodes($text, $parseSCFiles, $extraCodes); } diff --git a/e107_handlers/shortcode_handler.php b/e107_handlers/shortcode_handler.php index ad7488d11..78f8e5063 100644 --- a/e107_handlers/shortcode_handler.php +++ b/e107_handlers/shortcode_handler.php @@ -12,16 +12,21 @@ | GNU General Public License (http://gnu.org). | | $Source: /cvs_backup/e107_0.8/e107_handlers/shortcode_handler.php,v $ -| $Revision: 1.6 $ -| $Date: 2007-03-30 13:33:29 $ -| $Author: lisa_ $ +| $Revision: 1.7 $ +| $Date: 2007-06-13 02:53:21 $ +| $Author: mcfly_e107 $ +----------------------------------------------------------------------------+ */ if (!defined('e107_INIT')) { exit; } -if (!isset($tp) || !is_object($tp -> e_sc)) { - $tp->e_sc = new e_shortcode; +function register_shortcode($code, $filename, $function, $force=false) +{ + global $e_shortcodes; + if(!array_key_exists($code, $e_shortcodes) || $force == true) + { + $e_shortcodes[$code] = array('file' => $filename, 'function' => $function); + } } class e_shortcode { @@ -34,16 +39,23 @@ class e_shortcode { { global $pref, $register_sc; + $this->shortcode_functions = array(); if(varset($pref['shortcode_list'],'') != '') { foreach($pref['shortcode_list'] as $path=>$namearray) { foreach($namearray as $code=>$uclass) { - $code = strtoupper($code); - $this->registered_codes[$code]['type'] = 'plugin'; + if($code == 'shortcode_config') + { + include_once(e_PLUGIN.$path.'/shortcode_config.php'); + } + else + { + $code = strtoupper($code); + $this->registered_codes[$code]['type'] = 'plugin'; $this->registered_codes[$code]['path'] = $path; - // $this->registered_codes[$code]['perms'] = $uclass; + } } } } @@ -57,6 +69,7 @@ class e_shortcode { } } + function parseCodes($text, $useSCFiles = TRUE, $extraCodes = '') { $this->parseSCFiles = $useSCFiles; $ret = ''; @@ -78,7 +91,7 @@ class e_shortcode { function doCode($matches) { - global $pref, $e107cache, $menu_pref, $sc_style, $parm, $sql; + global $pref, $e107cache, $menu_pref, $sc_style, $parm, $sql, $e_shortcodes; if(strpos($matches[1], E_NL) !== false) { @@ -95,11 +108,14 @@ class e_shortcode { $parm = ''; } //look for the $sc_mode - if (strpos($code, '|')){ + if (strpos($code, '|')) + { list($code, $sc_mode) = explode("|", $code, 2); $code = trim($code); $sc_mode = trim($sc_mode); - }else{ + } + else + { $sc_mode = ''; } $parm = trim($parm); @@ -111,53 +127,66 @@ class e_shortcode { $db_debug->logCode(2, $code, $parm, ""); } - if (is_array($this->scList) && array_key_exists($code, $this->scList)) + /* Check for shortcode registered with $e_shortcodes */ + if(array_key_exists($code, $e_shortcodes)) { - $shortcode = $this->scList[$code]; + include_once($e_shortcodes[$code]['file']); + if(function_exists($e_shortcodes[$code]['function'])) + { + $ret = call_user_func($e_shortcodes[$code]['function'], $parm); + } } else { - if ($this->parseSCFiles == TRUE) + + if (is_array($this->scList) && array_key_exists($code, $this->scList)) { - if (is_array($this -> registered_codes) && array_key_exists($code, $this->registered_codes)) + $shortcode = $this->scList[$code]; + } + else + { + if ($this->parseSCFiles == TRUE) { - if($this->registered_codes[$code]['type'] == 'plugin') + if (is_array($this -> registered_codes) && array_key_exists($code, $this->registered_codes)) { - $scFile = e_PLUGIN.strtolower($this->registered_codes[$code]['path']).'/'.strtolower($code).'.sc'; + if($this->registered_codes[$code]['type'] == 'plugin') + { + $scFile = e_PLUGIN.strtolower($this->registered_codes[$code]['path']).'/'.strtolower($code).'.sc'; + } + else + { + $scFile = THEME.strtolower($code).'.sc'; + } } else { - $scFile = THEME.strtolower($code).'.sc'; + $scFile = e_FILE."shortcode/".strtolower($code).".sc"; + } + if (file_exists($scFile)) { + $shortcode = file_get_contents($scFile); + $this->scList[$code] = $shortcode; } } - else - { - $scFile = e_FILE."shortcode/".strtolower($code).".sc"; - } - if (file_exists($scFile)) { - $shortcode = file_get_contents($scFile); - $this->scList[$code] = $shortcode; - } } - } + + if (!isset($shortcode)) + { + if(E107_DBG_BBSC) trigger_error("shortcode not found:{".$code."}", E_USER_ERROR); + return $matches[0]; + } - if (!isset($shortcode)) - { - if(E107_DBG_BBSC) trigger_error("shortcode not found:{".$code."}", E_USER_ERROR); - return $matches[0]; - } + if(E107_DBG_SC) + { + echo " sc= ".str_replace(e_FILE."shortcode/","",$scFile)."
"; + } - if(E107_DBG_SC) - { - echo " sc= ".str_replace(e_FILE."shortcode/","",$scFile)."
"; + if(E107_DBG_BBSC) + { + trigger_error("starting shortcode {".$code."}", E_USER_ERROR); + } + $ret = eval($shortcode); } - if(E107_DBG_BBSC) - { - trigger_error("starting shortcode {".$code."}", E_USER_ERROR); - } - $ret = eval($shortcode); - if($ret != '' || is_numeric($ret)) {