| 
									
										
										
										
											2015-01-01 22:59:07 +01:00
										 |  |  | <?php | 
					
						
							|  |  |  | /** | 
					
						
							|  |  |  |  * Smarty Internal Extension | 
					
						
							|  |  |  |  * This file contains the Smarty template extension to create a code frame | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * @package    Smarty | 
					
						
							|  |  |  |  * @subpackage Template | 
					
						
							|  |  |  |  * @author     Uwe Tews | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /** | 
					
						
							|  |  |  |  * Class Smarty_Internal_Extension_CodeFrame | 
					
						
							|  |  |  |  * Create code frame for compiled and cached templates | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | class Smarty_Internal_Extension_CodeFrame | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     /** | 
					
						
							|  |  |  |      * Create code frame for compiled and cached templates | 
					
						
							|  |  |  |      * | 
					
						
							|  |  |  |      * @param Smarty_Internal_Template $_template | 
					
						
							|  |  |  |      * @param  string                  $content optional template content | 
					
						
							|  |  |  |      * @param  bool                    $cache   flag for cache file | 
					
						
							|  |  |  |      * | 
					
						
							|  |  |  |      * @return string | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  |     public static function create(Smarty_Internal_Template $_template, $content = '', $cache = false) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         // build property code
 | 
					
						
							| 
									
										
										
										
											2015-08-09 20:43:04 +02:00
										 |  |  |         $properties['has_nocache_code'] = $_template->compiled->has_nocache_code; | 
					
						
							|  |  |  |         $properties['version'] = Smarty::SMARTY_VERSION; | 
					
						
							|  |  |  |         $properties['unifunc'] = 'content_' . str_replace(array('.', ','), '_', uniqid('', true)); | 
					
						
							| 
									
										
										
										
											2015-08-15 18:32:27 +02:00
										 |  |  |         if (!empty($_template->tpl_function)) { | 
					
						
							|  |  |  |             $properties['tpl_function'] = $_template->tpl_function; | 
					
						
							|  |  |  |         } | 
					
						
							| 
									
										
										
										
											2015-03-20 00:41:55 +01:00
										 |  |  |         if (!$cache) { | 
					
						
							| 
									
										
										
										
											2015-08-09 20:43:04 +02:00
										 |  |  |             $properties['file_dependency'] = $_template->compiled->file_dependency; | 
					
						
							| 
									
										
										
										
											2015-08-18 02:55:53 +02:00
										 |  |  |             $properties['includes'] = $_template->compiled->includes; | 
					
						
							| 
									
										
										
										
											2015-08-09 20:43:04 +02:00
										 |  |  |         } else { | 
					
						
							|  |  |  |             $properties['file_dependency'] = $_template->cached->file_dependency; | 
					
						
							| 
									
										
										
										
											2015-08-15 18:32:27 +02:00
										 |  |  |             $properties['cache_lifetime'] = $_template->cache_lifetime; | 
					
						
							| 
									
										
										
										
											2015-03-20 00:41:55 +01:00
										 |  |  |         } | 
					
						
							| 
									
										
										
										
											2015-01-01 22:59:07 +01:00
										 |  |  |         $output = "<?php\n"; | 
					
						
							| 
									
										
										
										
											2015-08-09 20:43:04 +02:00
										 |  |  |         $output .= "/*%%SmartyHeaderCode:{$_template->compiled->nocache_hash}%%*/\n"; | 
					
						
							|  |  |  |         $output .= "\$_valid = \$_smarty_tpl->decodeProperties(" . var_export($properties, true) . ',' . | 
					
						
							|  |  |  |             ($cache ? 'true' : 'false') . ");\n"; | 
					
						
							| 
									
										
										
										
											2015-02-08 19:57:14 +01:00
										 |  |  |         $output .= "/*/%%SmartyHeaderCode%%*/\n"; | 
					
						
							| 
									
										
										
										
											2015-08-09 20:43:04 +02:00
										 |  |  |         $output .= "if (\$_valid && !is_callable('{$properties['unifunc']}')) {\n"; | 
					
						
							|  |  |  |         $output .= "function {$properties['unifunc']} (\$_smarty_tpl) {\n"; | 
					
						
							| 
									
										
										
										
											2015-01-01 22:59:07 +01:00
										 |  |  |         // include code for plugins
 | 
					
						
							|  |  |  |         if (!$cache) { | 
					
						
							| 
									
										
										
										
											2015-08-09 20:53:32 +02:00
										 |  |  |             if (!empty($_template->compiled->required_plugins['compiled'])) { | 
					
						
							|  |  |  |                 foreach ($_template->compiled->required_plugins['compiled'] as $tmp) { | 
					
						
							| 
									
										
										
										
											2015-01-01 22:59:07 +01:00
										 |  |  |                     foreach ($tmp as $data) { | 
					
						
							|  |  |  |                         $file = addslashes($data['file']); | 
					
						
							| 
									
										
										
										
											2015-08-09 20:43:04 +02:00
										 |  |  |                         if (is_array($data['function'])) { | 
					
						
							| 
									
										
										
										
											2015-01-07 16:45:33 +01:00
										 |  |  |                             $output .= "if (!is_callable(array('{$data['function'][0]}','{$data['function'][1]}'))) require_once '{$file}';\n"; | 
					
						
							| 
									
										
										
										
											2015-01-01 22:59:07 +01:00
										 |  |  |                         } else { | 
					
						
							| 
									
										
										
										
											2015-01-07 16:45:33 +01:00
										 |  |  |                             $output .= "if (!is_callable('{$data['function']}')) require_once '{$file}';\n"; | 
					
						
							| 
									
										
										
										
											2015-01-01 22:59:07 +01:00
										 |  |  |                         } | 
					
						
							|  |  |  |                     } | 
					
						
							|  |  |  |                 } | 
					
						
							|  |  |  |             } | 
					
						
							| 
									
										
										
										
											2015-08-09 20:53:32 +02:00
										 |  |  |             if ($_template->caching && !empty($_template->compiled->required_plugins['nocache'])) { | 
					
						
							|  |  |  |                 $_template->compiled->has_nocache_code = true; | 
					
						
							| 
									
										
										
										
											2015-08-09 20:43:04 +02:00
										 |  |  |                 $output .= "echo '/*%%SmartyNocache:{$_template->compiled->nocache_hash}%%*/<?php \$_smarty = \$_smarty_tpl->smarty; "; | 
					
						
							| 
									
										
										
										
											2015-08-09 20:53:32 +02:00
										 |  |  |                 foreach ($_template->compiled->required_plugins['nocache'] as $tmp) { | 
					
						
							| 
									
										
										
										
											2015-01-01 22:59:07 +01:00
										 |  |  |                     foreach ($tmp as $data) { | 
					
						
							|  |  |  |                         $file = addslashes($data['file']); | 
					
						
							|  |  |  |                         if (is_Array($data['function'])) { | 
					
						
							| 
									
										
										
										
											2015-01-07 16:45:33 +01:00
										 |  |  |                             $output .= addslashes("if (!is_callable(array('{$data['function'][0]}','{$data['function'][1]}'))) require_once '{$file}';\n"); | 
					
						
							| 
									
										
										
										
											2015-01-01 22:59:07 +01:00
										 |  |  |                         } else { | 
					
						
							| 
									
										
										
										
											2015-01-07 16:45:33 +01:00
										 |  |  |                             $output .= addslashes("if (!is_callable('{$data['function']}')) require_once '{$file}';\n"); | 
					
						
							| 
									
										
										
										
											2015-01-01 22:59:07 +01:00
										 |  |  |                         } | 
					
						
							|  |  |  |                     } | 
					
						
							|  |  |  |                 } | 
					
						
							| 
									
										
										
										
											2015-08-09 20:43:04 +02:00
										 |  |  |                 $output .= "?>/*/%%SmartyNocache:{$_template->compiled->nocache_hash}%%*/';\n"; | 
					
						
							| 
									
										
										
										
											2015-01-01 22:59:07 +01:00
										 |  |  |             } | 
					
						
							|  |  |  |         } | 
					
						
							| 
									
										
										
										
											2015-05-13 02:06:33 +02:00
										 |  |  |         $output .= "?>\n"; | 
					
						
							|  |  |  |         $output = self::appendCode($output, $content); | 
					
						
							|  |  |  |         return self::appendCode($output, "<?php }\n}\n?>"); | 
					
						
							| 
									
										
										
										
											2015-01-01 22:59:07 +01:00
										 |  |  |     } | 
					
						
							| 
									
										
										
										
											2015-01-03 21:32:33 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-05-13 02:06:33 +02:00
										 |  |  |     /** | 
					
						
							|  |  |  |      * Create code frame of compiled template function
 | 
					
						
							|  |  |  |      * | 
					
						
							|  |  |  |      * @param \Smarty_Internal_Template $_template | 
					
						
							|  |  |  |      * @param string                    $content | 
					
						
							|  |  |  |      * | 
					
						
							|  |  |  |      * @return string | 
					
						
							|  |  |  |      */ | 
					
						
							| 
									
										
										
										
											2015-01-03 21:32:33 +01:00
										 |  |  |     public static function createFunctionFrame(Smarty_Internal_Template $_template, $content = '') | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         $output = "<?php\n"; | 
					
						
							| 
									
										
										
										
											2015-08-09 20:43:04 +02:00
										 |  |  |         $output .= "/*%%SmartyHeaderCode:{$_template->compiled->nocache_hash}%%*/\n"; | 
					
						
							| 
									
										
										
										
											2015-09-01 02:52:09 +02:00
										 |  |  |         $output .= "/* {$_template->source->type}:{$_template->source->name} */\n"; | 
					
						
							| 
									
										
										
										
											2015-08-09 20:43:04 +02:00
										 |  |  |         $output .= "if (\$_valid && !is_callable('{$_template->compiled->unifunc}')) {\n"; | 
					
						
							|  |  |  |         $output .= "function {$_template->compiled->unifunc} (\$_smarty_tpl) {\n"; | 
					
						
							| 
									
										
										
										
											2015-01-03 21:32:33 +01:00
										 |  |  |         $output .= "?>\n" . $content; | 
					
						
							|  |  |  |         $output .= "<?php\n"; | 
					
						
							| 
									
										
										
										
											2015-08-09 20:43:04 +02:00
										 |  |  |         $output .= "/*/%%SmartyNocache:{$_template->compiled->nocache_hash}%%*/\n"; | 
					
						
							| 
									
										
										
										
											2015-02-12 23:56:43 +01:00
										 |  |  |         $output .= "}\n}\n?>"; | 
					
						
							| 
									
										
										
										
											2015-01-03 21:32:33 +01:00
										 |  |  |         return $output; | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2015-05-13 02:06:33 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |     /** | 
					
						
							|  |  |  |      * Append code segments and remove unneeded ?> <?php transitions
 | 
					
						
							|  |  |  |      * | 
					
						
							|  |  |  |      * @param string $left | 
					
						
							|  |  |  |      * @param string $right | 
					
						
							|  |  |  |      * | 
					
						
							|  |  |  |      * @return string | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  |     public static function appendCode($left, $right) | 
					
						
							|  |  |  |     { | 
					
						
							| 
									
										
										
										
											2015-09-01 02:52:09 +02:00
										 |  |  |         if (preg_match('/\s*\?>[\n]?$/', $left) && preg_match('/^<\?php\s+/', $right)) { | 
					
						
							|  |  |  |             $left = preg_replace('/\s*\?>[\n]?$/', "\n", $left); | 
					
						
							| 
									
										
										
										
											2015-05-13 02:06:33 +02:00
										 |  |  |             $left .= preg_replace('/^<\?php\s+/', '', $right); | 
					
						
							|  |  |  |         } else { | 
					
						
							|  |  |  |             $left .= $right; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         return $left; | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2015-01-01 22:59:07 +01:00
										 |  |  | } |