diff --git a/e107_handlers/shortcode_handler.php b/e107_handlers/shortcode_handler.php index 792738447..c9c6d825e 100644 --- a/e107_handlers/shortcode_handler.php +++ b/e107_handlers/shortcode_handler.php @@ -1,31 +1,39 @@ registered_codes[$code] = array('type' => 'class', 'path' => $path, 'class' => $classFunc); } } + + //register object if required + if(null !== $classObj && !isset($sc->scClasses[$classFunc])) + { + $sc->scClasses[$classFunc] = $classObj; + } } else { @@ -62,19 +85,34 @@ function register_shortcode($classFunc, $codes, $path='', $force=false) } } -function setScVar($scName, $scVar, &$value) +/** + * Add value to already registered SC object + * + * @param string $className + * @param string $scVarName + * @param mixed $value + */ +function setScVar($className, $scVarName, $value) { - $e107 = e107::getInstance(); - $e107->tp->e_sc->scClasses[$scName]->$scVar = $value; + $sc = e107::getScParser(); + if(isset($sc->scClasses[$className])) + { + $sc->scClasses[$className]->$scVarName = $value; + } } -function initShortcodeClass($class) +/** + * Create shortcode object + * + * @param string $class + * @param boolean $force + */ +function initShortcodeClass($class, $force = false) { - $e107 = e107::getInstance(); - $sc = &$e107->tp->e_sc; - if(class_exists($class)) + $sc = e107::getScParser(); + if(class_exists($class, false) && ($force || !isset($sc->scClasses[$class]))) { - $sc->scClasses[$class] = new $class; + $sc->scClasses[$class] = new $class(); } } @@ -158,6 +196,11 @@ class e_shortcode { return in_array($code, $this->registered_codes); } + + function isScClass($className) + { + return isset($this->scClasses[$className]); + } function isOverride($code) { @@ -168,7 +211,13 @@ class e_shortcode { $saveParseSCFiles = $this->parseSCFiles; // In case of nested call $this->parseSCFiles = $useSCFiles; - if(is_array($extraCodes)) + + //object support + if(is_object($extraCodes) && !$this->isScClass(get_class($extraCodes))) + { + register_shortcode($extraCodes, true); + } + elseif(is_array($extraCodes)) { foreach($extraCodes as $sc => $code) { @@ -406,7 +455,7 @@ class e_shortcode { $cur_shortcodes[$cur_sc] .= $line; } - if (preg_match("#^SC_BEGIN (\w*).*#", $line, $matches)) + if (preg_match('#^SC_BEGIN (\w*).*#', $line, $matches)) { $cur_sc = $matches[1]; $cur_shortcodes[$cur_sc] = varset($cur_shortcodes[$cur_sc],'');