| 
									
										
										
										
											2015-10-24 05:02:24 +02:00
										 |  |  | <?php | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /** | 
					
						
							|  |  |  |  * Smarty Extension Loadplugin | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * $smarty->loadPlugin() method | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * @package    Smarty | 
					
						
							|  |  |  |  * @subpackage PluginsInternal | 
					
						
							|  |  |  |  * @author     Uwe Tews | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | class Smarty_Internal_Method_LoadPlugin | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     /** | 
					
						
							|  |  |  |      * Cache of searched plugin files | 
					
						
							|  |  |  |      * | 
					
						
							|  |  |  |      * @var array | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  |     public $plugin_files = array(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /** | 
					
						
							|  |  |  |      * Takes unknown classes and loads plugin files for them | 
					
						
							|  |  |  |      * class name format: Smarty_PluginType_PluginName | 
					
						
							|  |  |  |      * plugin filename format: plugintype.pluginname.php | 
					
						
							|  |  |  |      * | 
					
						
							|  |  |  |      * @param \Smarty $smarty | 
					
						
							|  |  |  |      * @param  string $plugin_name class plugin name to load | 
					
						
							|  |  |  |      * @param  bool   $check       check if already loaded | 
					
						
							|  |  |  |      * | 
					
						
							|  |  |  |      * @return bool|string | 
					
						
							|  |  |  |      * @throws \SmartyException | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  |     public function loadPlugin(Smarty $smarty, $plugin_name, $check) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         // if function or class exists, exit silently (already loaded)
 | 
					
						
							|  |  |  |         if ($check && (is_callable($plugin_name) || class_exists($plugin_name, false))) { | 
					
						
							|  |  |  |             return true; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         if (!preg_match('#^smarty_((internal)|([^_]+))_(.+)$#i', $plugin_name, $match)) { | 
					
						
							|  |  |  |             throw new SmartyException("plugin {$plugin_name} is not a valid name format"); | 
					
						
							|  |  |  |         } | 
					
						
							| 
									
										
										
										
											2016-02-09 01:27:15 +01:00
										 |  |  |         if (!empty($match[ 2 ])) { | 
					
						
							| 
									
										
										
										
											2015-10-24 05:02:24 +02:00
										 |  |  |             $file = SMARTY_SYSPLUGINS_DIR . strtolower($plugin_name) . '.php'; | 
					
						
							| 
									
										
										
										
											2016-02-09 01:27:15 +01:00
										 |  |  |             if (isset($this->plugin_files[ $file ])) { | 
					
						
							|  |  |  |                 if ($this->plugin_files[ $file ] !== false) { | 
					
						
							|  |  |  |                     return $this->plugin_files[ $file ]; | 
					
						
							| 
									
										
										
										
											2015-10-24 05:02:24 +02:00
										 |  |  |                 } else { | 
					
						
							|  |  |  |                     return false; | 
					
						
							|  |  |  |                 } | 
					
						
							|  |  |  |             } else { | 
					
						
							|  |  |  |                 if (is_file($file)) { | 
					
						
							| 
									
										
										
										
											2016-02-09 01:27:15 +01:00
										 |  |  |                     $this->plugin_files[ $file ] = $file; | 
					
						
							| 
									
										
										
										
											2015-10-24 05:02:24 +02:00
										 |  |  |                     require_once($file); | 
					
						
							|  |  |  |                     return $file; | 
					
						
							|  |  |  |                 } else { | 
					
						
							| 
									
										
										
										
											2016-02-09 01:27:15 +01:00
										 |  |  |                     $this->plugin_files[ $file ] = false; | 
					
						
							| 
									
										
										
										
											2015-10-24 05:02:24 +02:00
										 |  |  |                     return false; | 
					
						
							|  |  |  |                 } | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         // plugin filename is expected to be: [type].[name].php
 | 
					
						
							|  |  |  |         $_plugin_filename = "{$match[1]}.{$match[4]}.php"; | 
					
						
							|  |  |  |         $_lower_filename = strtolower($_plugin_filename); | 
					
						
							|  |  |  |         if (isset($this->plugin_files)) { | 
					
						
							| 
									
										
										
										
											2016-02-09 01:27:15 +01:00
										 |  |  |             if (isset($this->plugin_files[ 'plugins_dir' ][ $_lower_filename ])) { | 
					
						
							|  |  |  |                 if (!$smarty->use_include_path || $this->plugin_files[ 'plugins_dir' ][ $_lower_filename ] !== false) { | 
					
						
							|  |  |  |                     return $this->plugin_files[ 'plugins_dir' ][ $_lower_filename ]; | 
					
						
							| 
									
										
										
										
											2015-10-24 05:02:24 +02:00
										 |  |  |                 } | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |             if (!$smarty->use_include_path || $smarty->ext->_getIncludePath->isNewIncludePath($smarty)) { | 
					
						
							| 
									
										
										
										
											2016-02-09 01:27:15 +01:00
										 |  |  |                 unset($this->plugin_files[ 'include_path' ]); | 
					
						
							| 
									
										
										
										
											2015-10-24 05:02:24 +02:00
										 |  |  |             } else { | 
					
						
							| 
									
										
										
										
											2016-02-09 01:27:15 +01:00
										 |  |  |                 if (isset($this->plugin_files[ 'include_path' ][ $_lower_filename ])) { | 
					
						
							|  |  |  |                     return $this->plugin_files[ 'include_path' ][ $_lower_filename ]; | 
					
						
							| 
									
										
										
										
											2015-10-24 05:02:24 +02:00
										 |  |  |                 } | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         $_file_names = array($_plugin_filename); | 
					
						
							|  |  |  |         if ($_lower_filename != $_plugin_filename) { | 
					
						
							|  |  |  |             $_file_names[] = $_lower_filename; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         $_p_dirs = $smarty->getPluginsDir(); | 
					
						
							| 
									
										
										
										
											2016-02-09 01:27:15 +01:00
										 |  |  |         if (!isset($this->plugin_files[ 'plugins_dir' ][ $_lower_filename ])) { | 
					
						
							| 
									
										
										
										
											2015-10-24 05:02:24 +02:00
										 |  |  |             // loop through plugin dirs and find the plugin
 | 
					
						
							|  |  |  |             foreach ($_p_dirs as $_plugin_dir) { | 
					
						
							|  |  |  |                 foreach ($_file_names as $name) { | 
					
						
							|  |  |  |                     $file = $_plugin_dir . $name; | 
					
						
							|  |  |  |                     if (is_file($file)) { | 
					
						
							| 
									
										
										
										
											2016-02-09 01:27:15 +01:00
										 |  |  |                         $this->plugin_files[ 'plugins_dir' ][ $_lower_filename ] = $file; | 
					
						
							| 
									
										
										
										
											2015-10-24 05:02:24 +02:00
										 |  |  |                         require_once($file); | 
					
						
							|  |  |  |                         return $file; | 
					
						
							|  |  |  |                     } | 
					
						
							| 
									
										
										
										
											2016-02-09 01:27:15 +01:00
										 |  |  |                     $this->plugin_files[ 'plugins_dir' ][ $_lower_filename ] = false; | 
					
						
							| 
									
										
										
										
											2015-10-24 05:02:24 +02:00
										 |  |  |                 } | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         if ($smarty->use_include_path) { | 
					
						
							|  |  |  |             foreach ($_file_names as $_file_name) { | 
					
						
							|  |  |  |                 // try PHP include_path
 | 
					
						
							|  |  |  |                 $file = $smarty->ext->_getIncludePath->getIncludePath($_p_dirs, $_file_name, $smarty); | 
					
						
							| 
									
										
										
										
											2016-02-09 01:27:15 +01:00
										 |  |  |                 $this->plugin_files[ 'include_path' ][ $_lower_filename ] = $file; | 
					
						
							| 
									
										
										
										
											2015-10-24 05:02:24 +02:00
										 |  |  |                 if ($file !== false) { | 
					
						
							|  |  |  |                     require_once($file); | 
					
						
							|  |  |  |                     return $file; | 
					
						
							|  |  |  |                 } | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         // no plugin loaded
 | 
					
						
							|  |  |  |         return false; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | } |