| 
									
										
										
										
											2009-11-06 14:35:00 +00:00
										 |  |  | <?php | 
					
						
							|  |  |  | /** | 
					
						
							|  |  |  | * Smarty Internal Plugin Compile Function
 | 
					
						
							|  |  |  | *  | 
					
						
							|  |  |  | * Compiles the {function} {/function} tags | 
					
						
							|  |  |  | *  | 
					
						
							|  |  |  | * @package Smarty | 
					
						
							|  |  |  | * @subpackage Compiler | 
					
						
							|  |  |  | * @author Uwe Tews  | 
					
						
							|  |  |  | */ | 
					
						
							|  |  |  | /** | 
					
						
							|  |  |  | * Smarty Internal Plugin Compile Function Class | 
					
						
							|  |  |  | */ | 
					
						
							|  |  |  | class Smarty_Internal_Compile_Function extends Smarty_Internal_CompileBase { | 
					
						
							|  |  |  |     /** | 
					
						
							|  |  |  |     * Compiles code for the {function} tag | 
					
						
							|  |  |  |     *  | 
					
						
							|  |  |  |     * @param array $args array with attributes from parser | 
					
						
							|  |  |  |     * @param object $compiler compiler object | 
					
						
							|  |  |  |     * @return boolean true | 
					
						
							|  |  |  |     */ | 
					
						
							|  |  |  |     public function compile($args, $compiler) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         $this->compiler = $compiler; | 
					
						
							|  |  |  |         $this->required_attributes = array('name'); | 
					
						
							|  |  |  |         $this->optional_attributes = array('_any');  | 
					
						
							|  |  |  |         // check and get attributes
 | 
					
						
							|  |  |  |         $_attr = $this->_get_attributes($args); | 
					
						
							| 
									
										
										
										
											2009-12-31 16:38:12 +00:00
										 |  |  |         $save = array($_attr, $compiler->template->extracted_compiled_code, $compiler->template->extract_code, | 
					
						
							|  |  |  |             $compiler->template->has_nocache_code, $compiler->template->required_plugins); | 
					
						
							| 
									
										
										
										
											2009-11-06 14:35:00 +00:00
										 |  |  |         $this->_open_tag('function', $save); | 
					
						
							|  |  |  |         $_name = trim($_attr['name'], "'"); | 
					
						
							| 
									
										
										
										
											2009-12-27 15:06:49 +00:00
										 |  |  |         unset($_attr['name']); | 
					
						
							| 
									
										
										
										
											2009-11-06 14:35:00 +00:00
										 |  |  |         foreach ($_attr as $_key => $_data) { | 
					
						
							|  |  |  |             $compiler->template->properties['function'][$_name]['parameter'][$_key] = $_data; | 
					
						
							|  |  |  |         }  | 
					
						
							|  |  |  |         // make function known for recursive calls
 | 
					
						
							| 
									
										
										
										
											2009-12-31 16:38:12 +00:00
										 |  |  |         $this->compiler->smarty->template_functions[$_name]['compiled'] = '';  | 
					
						
							|  |  |  |         // Init temporay context
 | 
					
						
							|  |  |  |         $compiler->template->required_plugins = array('compiled' => array(), 'cache' => array()); | 
					
						
							| 
									
										
										
										
											2009-11-06 14:35:00 +00:00
										 |  |  |         $compiler->template->extract_code = true; | 
					
						
							|  |  |  |         $compiler->template->extracted_compiled_code = ''; | 
					
						
							|  |  |  |         $compiler->template->has_code = false; | 
					
						
							| 
									
										
										
										
											2009-12-29 20:12:11 +00:00
										 |  |  |         $compiler->template->has_nocache_code = false; | 
					
						
							| 
									
										
										
										
											2009-11-06 14:35:00 +00:00
										 |  |  |         return true; | 
					
						
							|  |  |  |     }  | 
					
						
							|  |  |  | }  | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /** | 
					
						
							|  |  |  | * Smarty Internal Plugin Compile Functionclose Class | 
					
						
							|  |  |  | */ | 
					
						
							|  |  |  | class Smarty_Internal_Compile_Functionclose extends Smarty_Internal_CompileBase { | 
					
						
							|  |  |  |     /** | 
					
						
							|  |  |  |     * Compiles code for the {/function} tag | 
					
						
							|  |  |  |     *  | 
					
						
							|  |  |  |     * @param array $args array with attributes from parser | 
					
						
							|  |  |  |     * @param object $compiler compiler object | 
					
						
							|  |  |  |     * @return boolean true | 
					
						
							|  |  |  |     */ | 
					
						
							|  |  |  |     public function compile($args, $compiler) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         $this->compiler = $compiler; | 
					
						
							| 
									
										
										
										
											2009-12-29 20:12:11 +00:00
										 |  |  |         $this->compiler->has_code = false; | 
					
						
							| 
									
										
										
										
											2009-11-06 14:35:00 +00:00
										 |  |  |         $_attr = $this->_get_attributes($args); | 
					
						
							| 
									
										
										
										
											2009-12-29 20:12:11 +00:00
										 |  |  |         $saved_data = $this->_close_tag(array('function')); | 
					
						
							| 
									
										
										
										
											2009-12-31 16:38:12 +00:00
										 |  |  |         $_name = trim($saved_data[0]['name'], "'");  | 
					
						
							|  |  |  |         // build plugin include code
 | 
					
						
							|  |  |  |         $plugins_string = ''; | 
					
						
							|  |  |  |         if (!empty($compiler->template->required_plugins['compiled'])) { | 
					
						
							|  |  |  |             $plugins_string = '<?php '; | 
					
						
							|  |  |  |             foreach($compiler->template->required_plugins['compiled'] as $plugin_name => $data) { | 
					
						
							|  |  |  |                 $plugin = 'smarty_' . $data['type'] . '_' . $plugin_name; | 
					
						
							|  |  |  |                 $plugins_string .= "if (!is_callable('{$plugin}')) include '{$data['file']}';\n"; | 
					
						
							|  |  |  |             }  | 
					
						
							|  |  |  |             $plugins_string .= '?>'; | 
					
						
							|  |  |  |         }  | 
					
						
							|  |  |  |         if (!empty($compiler->template->required_plugins['cache'])) { | 
					
						
							|  |  |  |             $plugins_string .= "<?php echo '/*%%SmartyNocache:{$compiler->template->properties['nocache_hash']}%%*/<?php "; | 
					
						
							|  |  |  |             foreach($compiler->template->required_plugins['cache'] as $plugin_name => $data) { | 
					
						
							|  |  |  |                 $plugin = 'smarty_' . $data['type'] . '_' . $plugin_name; | 
					
						
							|  |  |  |                 $plugins_string .= "if (!is_callable(\'{$plugin}\')) include \'{$data['file']}\';\n"; | 
					
						
							|  |  |  |             }  | 
					
						
							|  |  |  |             $plugins_string .= "?>/*/%%SmartyNocache:{$compiler->template->properties['nocache_hash']}%%*/';?>\n"; | 
					
						
							|  |  |  |         }  | 
					
						
							|  |  |  |         $compiler->template->properties['function'][$_name]['compiled'] = $plugins_string . $compiler->template->extracted_compiled_code; | 
					
						
							| 
									
										
										
										
											2009-12-29 20:12:11 +00:00
										 |  |  |         $compiler->template->properties['function'][$_name]['nocache_hash'] = $compiler->template->properties['nocache_hash']; | 
					
						
							|  |  |  |         $compiler->template->properties['function'][$_name]['has_nocache_code'] = $compiler->template->has_nocache_code; | 
					
						
							| 
									
										
										
										
											2009-12-31 16:38:12 +00:00
										 |  |  | //        $compiler->template->properties['function'][$_name]['plugins'] = $compiler->template->required_plugins;
 | 
					
						
							|  |  |  |         $this->compiler->smarty->template_functions[$_name] = $compiler->template->properties['function'][$_name]; | 
					
						
							|  |  |  |         // restore old compiler status
 | 
					
						
							| 
									
										
										
										
											2009-11-06 14:35:00 +00:00
										 |  |  |         $compiler->template->extracted_compiled_code = $saved_data[1]; | 
					
						
							|  |  |  |         $compiler->template->extract_code = $saved_data[2]; | 
					
						
							| 
									
										
										
										
											2009-12-29 20:12:11 +00:00
										 |  |  |         $compiler->template->has_nocache_code = $saved_data[3]; | 
					
						
							| 
									
										
										
										
											2009-12-31 16:38:12 +00:00
										 |  |  |         $compiler->template->required_plugins = $saved_data[4]; | 
					
						
							| 
									
										
										
										
											2009-11-06 14:35:00 +00:00
										 |  |  |         return true; | 
					
						
							|  |  |  |     }  | 
					
						
							|  |  |  | }  | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ?>
 |