diff options
Diffstat (limited to 'smartyplugins/modifier.displayUrl.php')
| -rw-r--r-- | smartyplugins/modifier.displayUrl.php | 102 |
1 files changed, 102 insertions, 0 deletions
diff --git a/smartyplugins/modifier.displayUrl.php b/smartyplugins/modifier.displayUrl.php new file mode 100644 index 0000000..d5c257b --- /dev/null +++ b/smartyplugins/modifier.displayUrl.php @@ -0,0 +1,102 @@ +<?php +/** + * Smarty plugin + * @package Smarty + * @subpackage plugins + */ + +/** + * Smarty plugin + * ------------------------------------------------------------- + * Type: modifier + * Name: displayUrl + * Purpose: give back the display URL + * If the modification is preformed on a string then the (new <lib>)->getDisplayUrl method is called, (this defaults to BitPage if not specified) + * If the modification is preformed on an object then, if <lib> is given, then it is passed as the parameter to (new <lib>)->getDisplayUrl otherwise, the object' getDisplayUrl method is called + * If the modification is preformed on an array then, if <lib> is given, then it is passed as the parameter to (new <lib>)->getDisplayUrl otherwise the following is attempted: + * If the array contains an element display_url it is returned + * If the array contains an element content_type_guid then lib becomes the handler class of the content_type_guid and the array is passed as the parameter to (new <lib>)->getDisplayUrl + * If the array contains an element handler_class then lib becomes the handler_class and the array is passed as the parameter to (new <lib>)->getDisplayUrl + * -- + * If all of the above tests fail then LibertyContent::getDisplayUrl with the argument to the modifier passed as the second argument + * Example: {'My Page'|displayUrl}, {'admin'|displayUrl:BitUser}, {$gContent|displayUrl:MyObject} + * ------------------------------------------------------------- + */ + +function smarty_modifier_displayUrl_findLib(&$lib,$class_only=false) { + global $gLibertySystem; + if (!class_exists($lib)) { + foreach ($gLibertySystem->mContentTypes as $type) { + if ($type['handler_class']==$lib) { + smarty_modifier_displayUrl_loadLib($type); + return true; + } elseif ((!$class_only) && ($type['content_type_guid']==$lib)) { + $lib = $type['handler_class']; + smarty_modifier_displayUrl_loadLib($type); + return true; + } + } + return false; + } + return true; +} + +function smarty_modifier_displayUrl_loadLib($type) { + $path = constant(strtoupper($type['handler_package']).'_PKG_PATH'); + require_once($path.$type['handler_file']); +} + +function smarty_modifier_displayUrl($pMixed, $lib='') { + global $gLibertySystem; + if (is_string($pMixed)) { + if (empty($lib)) $lib ='BitPage'; + if (smarty_modifier_displayUrl_findLib($lib)) { + $call =array($lib, 'getDisplayUrl'); + if (is_callable($call)) { + return call_user_func($call,$pMixed); + } + $i = $lib(); + if (method_exists($i,'getDisplayUrl')) { + return $i->getDisplayUrl($pMixed); + } + } + } elseif (is_object($pMixed)) { + if (!empty($lib)) { + if (smarty_modifier_displayUrl_findLib($lib)) { + $i = $lib(); + return $i->getDisplayUrl($pMixed); + } + } + if (method_exists($pMixed,'getDisplayUrl')) { + return $pMixed->getDisplayUrl(); + } + } elseif (is_array($pMixed)) { + if (!empty($lib)) { + if (smarty_modifier_displayUrl_findLib($lib)) { + $i = new $lib(); + return $i->getDisplayUrl($pMixed); + } + } + if (!empty($pMixed['display_url'])) { + return $pMixed['display_url']; + } + if (!empty($pMixed['content_type_guid'])) { + $type =$gLibertySystem->mContentTypes[$pContentType]; + if (!empty($type)) { + $lib = $type['handler_class']; + smarty_modifier_displayUrl_loadLib($type); + $i = new $lib(); + return $i->getDisplayUrl($pMixed); + } + } + if (!empty($pMixed['handler_class'])) { + $lib= $pMixed['handler_class']; + if (smarty_modifier_displayUrl_findLib($lib,true)) { + $i = $lib(); + return $i->getDisplayUrl($pMixed); + } + } + } + return LibertyContent::getDisplayUrl(null,$pMixed); +} +?> |
