| 
									
										
										
										
											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
 | 
					
						
							|  |  |  |         $_template->properties['has_nocache_code'] = $_template->has_nocache_code || !empty($_template->required_plugins['nocache']); | 
					
						
							|  |  |  |         $_template->properties['version'] = Smarty::SMARTY_VERSION; | 
					
						
							|  |  |  |         if (!isset($_template->properties['unifunc'])) { | 
					
						
							|  |  |  |             $_template->properties['unifunc'] = 'content_' . str_replace(array('.', ','), '_', uniqid('', true)); | 
					
						
							|  |  |  |         } | 
					
						
							| 
									
										
										
										
											2015-03-20 00:41:55 +01:00
										 |  |  |         $properties = $_template->properties; | 
					
						
							|  |  |  |         if (!$cache) { | 
					
						
							|  |  |  |             unset($properties['tpl_function']); | 
					
						
							|  |  |  |             if (!empty($_template->compiler->templateProperties)) { | 
					
						
							|  |  |  |                 $properties['tpl_function'] = $_template->compiler->templateProperties['tpl_function']; | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |         } | 
					
						
							| 
									
										
										
										
											2015-01-01 22:59:07 +01:00
										 |  |  |         $output = "<?php\n"; | 
					
						
							|  |  |  |         $output .= "/*%%SmartyHeaderCode:{$_template->properties['nocache_hash']}%%*/\n"; | 
					
						
							|  |  |  |         if ($_template->smarty->direct_access_security) { | 
					
						
							|  |  |  |             $output .= "if(!defined('SMARTY_DIR')) exit('no direct access allowed');\n"; | 
					
						
							|  |  |  |         } | 
					
						
							| 
									
										
										
										
											2015-03-20 00:41:55 +01:00
										 |  |  |         $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-02-12 23:56:43 +01:00
										 |  |  |         $output .= "if (\$_valid && !is_callable('{$_template->properties['unifunc']}')) {\n"; | 
					
						
							|  |  |  |         $output .= "function {$_template->properties['unifunc']} (\$_smarty_tpl) {\n"; | 
					
						
							| 
									
										
										
										
											2015-01-01 22:59:07 +01:00
										 |  |  |         // include code for plugins
 | 
					
						
							|  |  |  |         if (!$cache) { | 
					
						
							|  |  |  |             if (!empty($_template->required_plugins['compiled'])) { | 
					
						
							|  |  |  |                 foreach ($_template->required_plugins['compiled'] as $tmp) { | 
					
						
							|  |  |  |                     foreach ($tmp as $data) { | 
					
						
							|  |  |  |                         $file = addslashes($data['file']); | 
					
						
							|  |  |  |                         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
										 |  |  |                         } | 
					
						
							|  |  |  |                     } | 
					
						
							|  |  |  |                 } | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |             if (!empty($_template->required_plugins['nocache'])) { | 
					
						
							|  |  |  |                 $_template->has_nocache_code = true; | 
					
						
							|  |  |  |                 $output .= "echo '/*%%SmartyNocache:{$_template->properties['nocache_hash']}%%*/<?php \$_smarty = \$_smarty_tpl->smarty; "; | 
					
						
							|  |  |  |                 foreach ($_template->required_plugins['nocache'] as $tmp) { | 
					
						
							|  |  |  |                     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
										 |  |  |                         } | 
					
						
							|  |  |  |                     } | 
					
						
							|  |  |  |                 } | 
					
						
							|  |  |  |                 $output .= "?>/*/%%SmartyNocache:{$_template->properties['nocache_hash']}%%*/';\n"; | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |         } | 
					
						
							| 
									
										
										
										
											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 = '') | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         if (!isset($_template->properties['unifunc'])) { | 
					
						
							|  |  |  |             $_template->properties['unifunc'] = 'content_' . str_replace(array('.', ','), '_', uniqid('', true)); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         $output = "<?php\n"; | 
					
						
							|  |  |  |         $output .= "/*%%SmartyHeaderCode:{$_template->properties['nocache_hash']}%%*/\n"; | 
					
						
							| 
									
										
										
										
											2015-02-12 23:56:43 +01:00
										 |  |  |         $output .= "if (\$_valid && !is_callable('{$_template->properties['unifunc']}')) {\n"; | 
					
						
							| 
									
										
										
										
											2015-01-03 21:32:33 +01:00
										 |  |  |         $output .= "function {$_template->properties['unifunc']} (\$_smarty_tpl) {\n"; | 
					
						
							|  |  |  |         $output .= "?>\n" . $content; | 
					
						
							|  |  |  |         $output .= "<?php\n"; | 
					
						
							|  |  |  |         $output .= "/*/%%SmartyNocache:{$_template->properties['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) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         if (preg_match('/\s*\?>$/', $left) && preg_match('/^<\?php\s+/', $right)) { | 
					
						
							|  |  |  |             $left = preg_replace('/\s*\?>$/', "\n", $left); | 
					
						
							|  |  |  |             $left .= preg_replace('/^<\?php\s+/', '', $right); | 
					
						
							|  |  |  |         } else { | 
					
						
							|  |  |  |             $left .= $right; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         return $left; | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2015-01-01 22:59:07 +01:00
										 |  |  | } |