mirror of
https://github.com/e107inc/e107.git
synced 2025-08-08 15:46:44 +02:00
Shortcode parser: fixed number of errors, e107 method getScObject renamed to getScBatch, added new example of sc handler usage (news), work in progress
This commit is contained in:
@@ -717,7 +717,7 @@ $sql -> db_Mark_Time('Start: Misc resources. Online user tracking, cache');
|
|||||||
$e107cache = e107::getCache(); //TODO - find & replace $e107cache, $e107->ecache
|
$e107cache = e107::getCache(); //TODO - find & replace $e107cache, $e107->ecache
|
||||||
|
|
||||||
//DEPRECATED, BC, call the method only when needed, $e107->override caught by __get()
|
//DEPRECATED, BC, call the method only when needed, $e107->override caught by __get()
|
||||||
$override = e107::getSingleton('override', e_HANDLER.'override_class.php'); //TODO - find & replace $override, $e107->override
|
$override = e107::getSingleton('override', true); //TODO - find & replace $override, $e107->override
|
||||||
|
|
||||||
//DEPRECATED, BC, call the method only when needed, $e107->user_class caught by __get()
|
//DEPRECATED, BC, call the method only when needed, $e107->user_class caught by __get()
|
||||||
$e_userclass = e107::getUserClass(); //TODO - find & replace $e_userclass, $e107->user_class
|
$e_userclass = e107::getUserClass(); //TODO - find & replace $e_userclass, $e107->user_class
|
||||||
|
@@ -14,49 +14,27 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
if (!defined('e107_INIT')) { exit; }
|
if (!defined('e107_INIT')) { exit; }
|
||||||
//include_once(e_HANDLER.'shortcode_handler.php');
|
|
||||||
|
|
||||||
/*
|
/* DEPRECATED
|
||||||
$codes = array(
|
|
||||||
'newstitle', 'newsbody', 'newsicon','newsauthor', 'newscomments',
|
|
||||||
'trackback', 'newsheader', 'newscategory', 'newsdate', 'newscommentlink',
|
|
||||||
'newscommentcount', 'emailicon', 'printicon', 'pdficon', 'newsid', 'adminoptions',
|
|
||||||
'extended', 'captionclass', 'admincaption', 'adminbody', 'newssummary',
|
|
||||||
'newsthumbnail', 'newsimage', 'sticky_icon', 'newstitlelink', 'newscaticon', 'newsinfo'
|
|
||||||
);
|
|
||||||
*/
|
|
||||||
|
|
||||||
$codes = array();
|
|
||||||
/*
|
|
||||||
$tmp = get_class_methods('news_shortcodes');
|
|
||||||
foreach($tmp as $c)
|
|
||||||
{
|
|
||||||
if(strpos($c, 'sc_') === 0)
|
|
||||||
{
|
|
||||||
$codes[] = substr($c, 3);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
unset($tmp);
|
|
||||||
*/
|
|
||||||
register_shortcode('news_shortcodes', TRUE);
|
register_shortcode('news_shortcodes', TRUE);
|
||||||
initShortcodeClass('news_shortcodes');
|
initShortcodeClass('news_shortcodes');
|
||||||
|
*/
|
||||||
|
|
||||||
class news_shortcodes
|
e107::getScParser()->registerShortcode('news_shortcodes', true)
|
||||||
{
|
->initShortcodeClass('news_shortcodes');
|
||||||
var $news_item, $param, $e107;
|
|
||||||
|
|
||||||
function news_shortcodes()
|
class news_shortcodes extends e_shortcode
|
||||||
{
|
{
|
||||||
|
//protected $news_item; - shouldn't be set - see __set/__get methods of e_shortcode & news::render_newsitem()
|
||||||
|
protected $e107;
|
||||||
|
//protected $param; - shouldn't be set - see __set/__get methods of e_shortcode & news::render_newsitem()
|
||||||
|
|
||||||
|
function __construct($eVars = null)
|
||||||
|
{
|
||||||
|
parent::__construct($eVars);
|
||||||
$this->e107 = e107::getInstance();
|
$this->e107 = e107::getInstance();
|
||||||
}
|
}
|
||||||
|
|
||||||
function loadNewsItem()
|
|
||||||
{
|
|
||||||
$e107 = e107::getInstance();
|
|
||||||
$e107->tp->e_sc->scClasses['news_shortcodes']->news_item = getcachedvars('current_news_item');
|
|
||||||
$e107->tp->e_sc->scClasses['news_shortcodes']->param = getcachedvars('current_news_param');
|
|
||||||
}
|
|
||||||
|
|
||||||
function sc_newstitle()
|
function sc_newstitle()
|
||||||
{
|
{
|
||||||
return $this->e107->tp->toHTML($this->news_item['news_title'], TRUE, 'TITLE');
|
return $this->e107->tp->toHTML($this->news_item['news_title'], TRUE, 'TITLE');
|
||||||
|
@@ -158,6 +158,7 @@ class e107
|
|||||||
'e_parse' => '{e_HANDLER}e_parse_class.php',
|
'e_parse' => '{e_HANDLER}e_parse_class.php',
|
||||||
'e_parse_shortcode' => '{e_HANDLER}shortcode_handler.php',
|
'e_parse_shortcode' => '{e_HANDLER}shortcode_handler.php',
|
||||||
'e_ranks' => '{e_HANDLER}e_ranks_class.php',
|
'e_ranks' => '{e_HANDLER}e_ranks_class.php',
|
||||||
|
'e_shortcode' => '{e_HANDLER}shortcode_handler.php',
|
||||||
'e_upgrade' => '{e_HANDLER}e_upgrade_class.php',
|
'e_upgrade' => '{e_HANDLER}e_upgrade_class.php',
|
||||||
'e_user_model' => '{e_HANDLER}user_model.php',
|
'e_user_model' => '{e_HANDLER}user_model.php',
|
||||||
'e_user' => '{e_HANDLER}user_model.php',
|
'e_user' => '{e_HANDLER}user_model.php',
|
||||||
@@ -168,6 +169,7 @@ class e107
|
|||||||
'ecache' => '{e_HANDLER}cache_handler.php',
|
'ecache' => '{e_HANDLER}cache_handler.php',
|
||||||
'news' => '{e_HANDLER}news_class.php',
|
'news' => '{e_HANDLER}news_class.php',
|
||||||
'notify' => '{e_HANDLER}notify_class.php',
|
'notify' => '{e_HANDLER}notify_class.php',
|
||||||
|
'override' => '{e_HANDLER}override_class.php',
|
||||||
'redirection' => '{e_HANDLER}redirection_class.php',
|
'redirection' => '{e_HANDLER}redirection_class.php',
|
||||||
'sitelinks' => '{e_HANDLER}sitelinks_class.php',
|
'sitelinks' => '{e_HANDLER}sitelinks_class.php',
|
||||||
'themeHandler' => '{e_HANDLER}theme_handler.php',
|
'themeHandler' => '{e_HANDLER}theme_handler.php',
|
||||||
@@ -859,12 +861,14 @@ class e107
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Retrieve registered sc object (batch) by class name
|
* Retrieve registered sc object (batch) by class name
|
||||||
|
* Note - '_shortcodes' part of the class is added by the method
|
||||||
|
* <code><?php e107::getScObject('news');</code>
|
||||||
*
|
*
|
||||||
* @return e_shortcode
|
* @return e_shortcode
|
||||||
*/
|
*/
|
||||||
public static function getScObject($className)
|
public static function getScBatch($className)
|
||||||
{
|
{
|
||||||
return self::getScParser($className);
|
return self::getScParser()->getScObject($className.'_shortcodes');
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@@ -2140,7 +2140,9 @@ class e_vars
|
|||||||
*/
|
*/
|
||||||
public function __set($key, $value)
|
public function __set($key, $value)
|
||||||
{
|
{
|
||||||
$this->vars[$key] = $value;
|
// Unset workaround - PHP < 5.1.0
|
||||||
|
if(null === $value) unset($this->vars[$key]);
|
||||||
|
else $this->vars[$key] = $value;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@@ -30,8 +30,7 @@ class news {
|
|||||||
$tp = e107::getParser();
|
$tp = e107::getParser();
|
||||||
$sql = e107::getDb();
|
$sql = e107::getDb();
|
||||||
|
|
||||||
require_once (e_HANDLER."message_handler.php");
|
$emessage = e107::getMessage();
|
||||||
$emessage = eMessage::getInstance();
|
|
||||||
|
|
||||||
$error = false;
|
$error = false;
|
||||||
if(empty($news['news_title']))
|
if(empty($news['news_title']))
|
||||||
@@ -498,15 +497,15 @@ class news {
|
|||||||
|
|
||||||
function render_newsitem($news, $mode = 'default', $n_restrict = '', $NEWS_TEMPLATE = '', $param = array())
|
function render_newsitem($news, $mode = 'default', $n_restrict = '', $NEWS_TEMPLATE = '', $param = array())
|
||||||
{
|
{
|
||||||
global $e107, $tp, $sql, $override, $pref, $ns, $NEWSSTYLE, $NEWSLISTSTYLE, $news_shortcodes, $loop_uid;
|
global $NEWSSTYLE, $NEWSLISTSTYLE;
|
||||||
if ($override_newsitem = $override -> override_check('render_newsitem')) {
|
|
||||||
|
if ($override_newsitem = e107::getSingleton('override', true)->override_check('render_newsitem')) {
|
||||||
$result = call_user_func($override_newsitem, $news, $mode, $n_restrict, $NEWS_TEMPLATE, $param);
|
$result = call_user_func($override_newsitem, $news, $mode, $n_restrict, $NEWS_TEMPLATE, $param);
|
||||||
if ($result == 'return')
|
if ($result == 'return')
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!is_object($e107->tp)) $e107->tp = new e_parse;
|
|
||||||
|
|
||||||
if ($n_restrict == 'userclass')
|
if ($n_restrict == 'userclass')
|
||||||
{
|
{
|
||||||
@@ -587,12 +586,19 @@ class news {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
$loop_uid = $news['news_author'];
|
//$loop_uid = $news['news_author']; - no references found
|
||||||
|
|
||||||
require_once(e_CORE.'shortcodes/batch/news_shortcodes.php');
|
require_once(e_CORE.'shortcodes/batch/news_shortcodes.php');
|
||||||
|
/* DEPRECATED
|
||||||
setScVar('news_shortcodes', 'news_item', $news);
|
setScVar('news_shortcodes', 'news_item', $news);
|
||||||
setScVar('news_shortcodes', 'param', $param);
|
setScVar('news_shortcodes', 'param', $param);
|
||||||
$text = $e107->tp->parseTemplate($NEWS_PARSE, true);
|
*/
|
||||||
|
// Retrieve batch sc object, set required vars
|
||||||
|
e107::getScBatch('news')
|
||||||
|
->setScVar('news_item', $news)
|
||||||
|
->setScVar('param', $param);
|
||||||
|
|
||||||
|
$text = e107::getParser()->parseTemplate($NEWS_PARSE, true);
|
||||||
|
|
||||||
if ($mode == 'return')
|
if ($mode == 'return')
|
||||||
{
|
{
|
||||||
@@ -608,9 +614,7 @@ class news {
|
|||||||
//@TDODO deprecated?
|
//@TDODO deprecated?
|
||||||
function make_xml_compatible($original)
|
function make_xml_compatible($original)
|
||||||
{
|
{
|
||||||
global $e107;
|
$original = e107::getParser()->toHTML($original, TRUE);
|
||||||
if (!is_object($e107->tp)) $e107->tp = new e_parse;
|
|
||||||
$original = $e107->tp->toHTML($original, TRUE);
|
|
||||||
$original = str_replace('£', '&#163;', $original);
|
$original = str_replace('£', '&#163;', $original);
|
||||||
$original = str_replace('©', '(c)', $original);
|
$original = str_replace('©', '(c)', $original);
|
||||||
return htmlspecialchars($original, ENT_COMPAT, CHARSET);
|
return htmlspecialchars($original, ENT_COMPAT, CHARSET);
|
||||||
|
@@ -14,6 +14,17 @@
|
|||||||
|
|
||||||
if (!defined('e107_INIT')) { exit; }
|
if (!defined('e107_INIT')) { exit; }
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @package e107
|
||||||
|
* @subpackage e107_handlers
|
||||||
|
* @version $Id$
|
||||||
|
* @author e107inc
|
||||||
|
*
|
||||||
|
* e_parse_shortcode - shortcode parser/manager, former e_shortcode
|
||||||
|
* e_shortcode - abstract batch class
|
||||||
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* FIXME: to be removed
|
* FIXME: to be removed
|
||||||
*/
|
*/
|
||||||
@@ -207,7 +218,7 @@ class e_parse_shortcode
|
|||||||
{
|
{
|
||||||
if(isset($this->scClasses[$className]))
|
if(isset($this->scClasses[$className]))
|
||||||
{
|
{
|
||||||
return call_user_func(array($this->scClasses[$className], $scFuncName), $param);
|
return $this->scClasses[$className];
|
||||||
}
|
}
|
||||||
// TODO - throw exception?
|
// TODO - throw exception?
|
||||||
return null;
|
return null;
|
||||||
@@ -349,7 +360,7 @@ class e_parse_shortcode
|
|||||||
* Register Core Shortcode Batches.
|
* Register Core Shortcode Batches.
|
||||||
* FIXME - currently loaded all the time (even on front-end)
|
* FIXME - currently loaded all the time (even on front-end)
|
||||||
*
|
*
|
||||||
* @return void
|
* @return e_parse_shortcode
|
||||||
*/
|
*/
|
||||||
function loadCoreShortcodes()
|
function loadCoreShortcodes()
|
||||||
{
|
{
|
||||||
@@ -363,6 +374,7 @@ class e_parse_shortcode
|
|||||||
$this->registerClassMethods($cb, $path);
|
$this->registerClassMethods($cb, $path);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
return $this;
|
||||||
}
|
}
|
||||||
|
|
||||||
function isRegistered($code)
|
function isRegistered($code)
|
||||||
@@ -710,24 +722,47 @@ class e_shortcode
|
|||||||
protected $eVars = null;
|
protected $eVars = null;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Storage for external values
|
* Storage for shortcode values
|
||||||
* @var e_vars
|
* @var e_vars
|
||||||
*/
|
*/
|
||||||
protected $scVars = null;
|
protected $scVars = null;
|
||||||
|
|
||||||
public function __construct($eVars = null)
|
public function __construct($eVars = null)
|
||||||
{
|
{
|
||||||
$this->eVars = $eVars;
|
$this->setVars($eVars);
|
||||||
$this->scVars = new e_vars();
|
$this->scVars = new e_vars();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set external simple parser object
|
||||||
|
*
|
||||||
|
* @param e_vars $eVars
|
||||||
|
* @return e_shortcode
|
||||||
|
*/
|
||||||
|
public function setVars($eVars)
|
||||||
|
{
|
||||||
|
if(null === $eVars) $eVars = new e_vars();
|
||||||
|
$this->eVars = $eVars;
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get external simple parser object
|
||||||
|
*
|
||||||
|
* @return e_vars
|
||||||
|
*/
|
||||||
|
public function getVars()
|
||||||
|
{
|
||||||
|
return $this->eVars;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Add shortcode value
|
* Add shortcode value
|
||||||
* <code>e107::getScObject('class_name')->setScVar('some_property', $some_value);</code>
|
* <code>e107::getScObject('class_name')->setScVar('some_property', $some_value);</code>
|
||||||
*
|
*
|
||||||
* @param string $name
|
* @param string $name
|
||||||
* @param mixed $value
|
* @param mixed $value
|
||||||
* @return e_parse_shortcode
|
* @return e_shortcode
|
||||||
*/
|
*/
|
||||||
public function setScVar($name, $value)
|
public function setScVar($name, $value)
|
||||||
{
|
{
|
||||||
@@ -737,7 +772,7 @@ class e_shortcode
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Retrieve shortcode value
|
* Retrieve shortcode value
|
||||||
* code>$some_value = e107::getScObject('class_name')->getScVar('some_property');</code>
|
* <code>$some_value = e107::getScObject('class_name')->getScVar('some_property');</code>
|
||||||
*
|
*
|
||||||
* @param string $name
|
* @param string $name
|
||||||
* @return mixed
|
* @return mixed
|
||||||
@@ -746,4 +781,77 @@ class e_shortcode
|
|||||||
{
|
{
|
||||||
return $this->scVars->$name;
|
return $this->scVars->$name;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check if shortcode variable is set
|
||||||
|
* <code>if(e107::getScObject('class_name')->issetScVar('some_property'))
|
||||||
|
* {
|
||||||
|
* //do something
|
||||||
|
* }</code>
|
||||||
|
*
|
||||||
|
* @param string $name
|
||||||
|
* @return boolean
|
||||||
|
*/
|
||||||
|
public function issetScVar($name)
|
||||||
|
{
|
||||||
|
return isset($this->scVars->$name);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Unset shortcode value
|
||||||
|
* <code>e107::getScObject('class_name')->unsetScVar('some_property');</code>
|
||||||
|
*
|
||||||
|
* @param string $name
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function unsetScVar($name)
|
||||||
|
{
|
||||||
|
$this->scVars->$name = null;
|
||||||
|
unset($this->scVars->$name);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Magic setter - bind to eVars object
|
||||||
|
*
|
||||||
|
* @param string $name
|
||||||
|
* @param mixed $value
|
||||||
|
*/
|
||||||
|
public function __set($name, $value)
|
||||||
|
{
|
||||||
|
$this->setScVar($name, $value);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Magic getter - bind to eVars object
|
||||||
|
*
|
||||||
|
* @param string $name
|
||||||
|
* @return mixed value or null if key not found
|
||||||
|
*/
|
||||||
|
public function __get($name)
|
||||||
|
{
|
||||||
|
return $this->getScVar($name);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Magic method - bind to eVars object
|
||||||
|
* NOTE: works on PHP 5.1.0+
|
||||||
|
*
|
||||||
|
* @param string $name
|
||||||
|
* @return boolean
|
||||||
|
*/
|
||||||
|
public function __isset($name)
|
||||||
|
{
|
||||||
|
return $this->issetScVar($name);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Magic method - bind to eVars object
|
||||||
|
* NOTE: works on PHP 5.1.0+
|
||||||
|
*
|
||||||
|
* @param string $name
|
||||||
|
*/
|
||||||
|
public function __unset($name)
|
||||||
|
{
|
||||||
|
$this->unsetScVar($name);
|
||||||
|
}
|
||||||
}
|
}
|
Reference in New Issue
Block a user