/framework/vendor/smarty3/lib/libs/sysplugins/smarty_internal_register.php
PHP | 247 lines | 118 code | 17 blank | 112 comment | 21 complexity | b4a5768fd5ef6d9a765b1e5501bb75d5 MD5 | raw file
1<?php 2 3/** 4* Project: Smarty: the PHP compiling template engine 5* File: smarty_internal_register.php 6* SVN: $Id: $ 7* 8* This library is free software; you can redistribute it and/or 9* modify it under the terms of the GNU Lesser General Public 10* License as published by the Free Software Foundation; either 11* version 2.1 of the License, or (at your option) any later version. 12* 13* This library is distributed in the hope that it will be useful, 14* but WITHOUT ANY WARRANTY; without even the implied warranty of 15* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 16* Lesser General Public License for more details. 17* 18* You should have received a copy of the GNU Lesser General Public 19* License along with this library; if not, write to the Free Software 20* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 21* 22* For questions, help, comments, discussion, etc., please join the 23* Smarty mailing list. Send a blank e-mail to 24* smarty-discussion-subscribe@googlegroups.com 25* 26* @link http://www.smarty.net/ 27* @copyright 2008 New Digital Group, Inc. 28* @author Monte Ohrt <monte at ohrt dot com> 29* @author Uwe Tews 30* @package Smarty 31* @subpackage PluginsInternal 32* @version 3-SVN$Rev: 3286 $ 33*/ 34 35class Smarty_Internal_Register { 36 37 protected $smarty; 38 39 function __construct($smarty) { 40 $this->smarty = $smarty; 41 } 42 43 /** 44 * Registers block function to be used in templates 45 * 46 * @param string $block_tag name of template block 47 * @param string $block_impl PHP function to register 48 * @param boolean $cacheable if true (default) this fuction is cachable 49 * @param array $cache_attr caching attributes if any 50 */ 51 function block($block_tag, $block_impl, $cacheable = true, $cache_attr = array()) 52 { 53 if (isset($this->smarty->registered_plugins['block'][$block_tag])) { 54 throw new Exception("Plugin tag \"{$block_tag}\" already registered"); 55 } elseif (!is_callable($block_impl)) { 56 throw new Exception("Plugin \"{$block_tag}\" not callable"); 57 } else { 58 $this->smarty->registered_plugins['block'][$block_tag] = 59 array($block_impl, $cacheable, $cache_attr); 60 } 61 } 62 63 /** 64 * Registers compiler function 65 * 66 * @param string $compiler_tag of template function 67 * @param string $compiler_impl name of PHP function to register 68 * @param boolean $cacheable if true (default) this fuction is cachable 69 */ 70 function compilerFunction($compiler_tag, $compiler_impl, $cacheable = true) 71 { 72 if (isset($this->smarty->registered_plugins['compiler'][$compiler_tag])) { 73 throw new Exception("Plugin tag \"{$compiler_tag}\" already registered"); 74 } elseif (!is_callable($compiler_impl)) { 75 throw new Exception("Plugin \"{$compiler_tag}\" not callable"); 76 } else { 77 $this->smarty->registered_plugins['compiler'][$compiler_tag] = 78 array($compiler_impl, $cacheable); 79 } 80 } 81 82 /** 83 * Registers custom function to be used in templates 84 * 85 * @param string $function_tag the name of the template function 86 * @param string $function_impl the name of the PHP function to register 87 * @param boolean $cacheable if true (default) this fuction is cachable 88 * @param array $cache_attr caching attributes if any 89 */ 90 function templateFunction($function_tag, $function_impl, $cacheable = true, $cache_attr = array()) 91 { 92 if (isset($this->smarty->registered_plugins['function'][$function_tag])) { 93 throw new Exception("Plugin tag \"{$function_tag}\" already registered"); 94 } elseif (!is_callable($function_impl)) { 95 throw new Exception("Plugin \"{$function_tag}\" not callable"); 96 } else { 97 $this->smarty->registered_plugins['function'][$function_tag] = 98 array($function_impl, $cacheable, $cache_attr); 99 } 100 } 101 102 /** 103 * Registers modifier to be used in templates 104 * 105 * @param string $modifier_name name of template modifier 106 * @param string $modifier_impl name of PHP function to register 107 */ 108 function modifier($modifier_name, $modifier_impl) 109 { 110 if (isset($this->smarty->registered_plugins['modifier'][$modifier_name])) { 111 throw new Exception("Plugin \"{$modifier}\" already registered"); 112 } elseif (!is_callable($modifier_impl)) { 113 throw new Exception("Plugin \"{$modifier}\" not callable"); 114 } else { 115 $this->smarty->registered_plugins['modifier'][$modifier_name] = 116 array($modifier_impl); 117 } 118 } 119 120 /** 121 * Registers object to be used in templates 122 * 123 * @param string $object name of template object 124 * @param object $ &$object_impl the referenced PHP object to register 125 * @param mixed null | array $allowed list of allowed methods (empty = all) 126 * @param boolean $smarty_args smarty argument format, else traditional 127 * @param mixed null | array $block_functs list of methods that are block format 128 */ 129 function templateObject($object_name, $object_impl, $allowed = array(), $smarty_args = true, $block_methods = array()) 130 { 131 // test if allowed methodes callable 132 if (!empty($allowed)) { 133 foreach ((array)$allowed as $method) { 134 if (!is_callable(array($object_impl, $method))) { 135 throw new Exception("Undefined method '$method' in registered object"); 136 } 137 } 138 } 139 // test if block methodes callable 140 if (!empty($block_methods)) { 141 foreach ((array)$block_methods as $method) { 142 if (!is_callable(array($object_impl, $method))) { 143 throw new Exception("Undefined method '$method' in registered object"); 144 } 145 } 146 } 147 // register the object 148 $this->smarty->registered_objects[$object_name] = 149 array($object_impl, (array)$allowed, (boolean)$smarty_args, (array)$block_methods); 150 } 151 152 /** 153 * Registers an output filter function to apply 154 * to a template output 155 * 156 * @param callback $function_name 157 */ 158 function outputFilter($function_name) 159 { 160 $this->smarty->registered_filters['output'][$this->smarty->_get_filter_name($function_name)] = $function_name; 161 } 162 163 /** 164 * Registers a postfilter function to apply 165 * to a compiled template after compilation 166 * 167 * @param callback $function_name 168 */ 169 function postFilter($function_name) 170 { 171 $this->smarty->registered_filters['post'][$this->smarty->_get_filter_name($function_name)] = $function_name; 172 } 173 174 /** 175 * Registers a prefilter function to apply 176 * to a template before compiling 177 * 178 * @param callback $function_name 179 */ 180 function preFilter($function_name) 181 { 182 $this->smarty->registered_filters['pre'][$this->smarty->_get_filter_name($function_name)] = $function_name; 183 } 184 185 /** 186 * Registers a resource to fetch a template 187 * 188 * @param string $resource_type name of resource type 189 * @param array $function_names array of functions to handle resource 190 */ 191 function resource($resource_type, $function_names) 192 { 193 if (count($function_names) == 4) { 194 $this->smarty->_plugins['resource'][$resource_type] = 195 array($function_names, false); 196 } elseif (count($function_names) == 5) { 197 $this->smarty->_plugins['resource'][$resource_type] = 198 array(array(array(&$function_names[0], $function_names[1]), 199 array(&$function_names[0], $function_names[2]), 200 array(&$function_names[0], $function_names[3]), 201 array(&$function_names[0], $function_names[4])), 202 false); 203 } else { 204 throw new Exception("malformed function-list for '$resource_type' in register_resource"); 205 } 206 } 207 208 /** 209 * Registers an output filter function which 210 * runs over any variable output 211 * 212 * @param callback $function_name 213 */ 214 function variableFilter($function_name) 215 { 216 $this->smarty->registered_filters['variable'][$this->smarty->_get_filter_name($function_name)] = $function_name; 217 } 218 219 /** 220 * Registers a default plugin handler 221 * 222 * @param $function_name mixed string | array $plugin class/methode name 223 */ 224 function defaultPluginHandler($function_name) 225 { 226 if (is_callable($function_name)) { 227 $this->smarty->default_plugin_handler_func = $function_name; 228 } else { 229 throw new Exception("Default plugin handler '$function_name' not callable"); 230 } 231 } 232 233 /** 234 * Registers a default template handler 235 * 236 * @param $function_name mixed string | array class/method name 237 */ 238 function defaultTemplateHandler($function_name) 239 { 240 if (is_callable($function_name)) { 241 $this->smarty->default_template_handler_func = $function_name; 242 } else { 243 throw new Exception("Default template handler '$function_name' not callable"); 244 } 245 } 246 247}