| 
									
										
										
										
											2009-03-22 16:09:05 +00:00
										 |  |  | <?php | 
					
						
							|  |  |  | /** | 
					
						
							| 
									
										
										
										
											2009-10-31 00:44:58 +00:00
										 |  |  | * Smarty Internal Plugin Compile Block | 
					
						
							| 
									
										
										
										
											2009-03-22 16:09:05 +00:00
										 |  |  | *  | 
					
						
							| 
									
										
										
										
											2009-10-31 00:44:58 +00:00
										 |  |  | * Compiles the {block}{/block} tags | 
					
						
							| 
									
										
										
										
											2009-03-22 16:09:05 +00:00
										 |  |  | *  | 
					
						
							|  |  |  | * @package Smarty | 
					
						
							|  |  |  | * @subpackage Compiler | 
					
						
							|  |  |  | * @author Uwe Tews  | 
					
						
							|  |  |  | */ | 
					
						
							| 
									
										
										
										
											2009-10-31 00:44:58 +00:00
										 |  |  | /** | 
					
						
							|  |  |  | * Smarty Internal Plugin Compile Block Class | 
					
						
							|  |  |  | */ | 
					
						
							|  |  |  | class Smarty_Internal_Compile_Block extends Smarty_Internal_CompileBase { | 
					
						
							|  |  |  |     /** | 
					
						
							|  |  |  |     * Compiles code for the {block} 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('assign');  | 
					
						
							|  |  |  |         // check and get attributes
 | 
					
						
							|  |  |  |         $_attr = $this->_get_attributes($args); | 
					
						
							| 
									
										
										
										
											2009-11-03 18:02:13 +00:00
										 |  |  |         $save = array($_attr, $compiler->template->extracted_compiled_code, $compiler->template->extract_code); | 
					
						
							| 
									
										
										
										
											2009-10-31 00:44:58 +00:00
										 |  |  |         $this->_open_tag('block', $save); | 
					
						
							|  |  |  |         $compiler->template->extract_code = true; | 
					
						
							|  |  |  |         $compiler->template->extracted_compiled_code = ''; | 
					
						
							| 
									
										
										
										
											2009-11-03 18:02:13 +00:00
										 |  |  |         $compiler->template->has_code = false; | 
					
						
							| 
									
										
										
										
											2009-10-31 00:44:58 +00:00
										 |  |  |         return true; | 
					
						
							|  |  |  |     }  | 
					
						
							|  |  |  | }  | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-03-22 16:09:05 +00:00
										 |  |  | /** | 
					
						
							|  |  |  | * Smarty Internal Plugin Compile BlockClose Class | 
					
						
							|  |  |  | */ | 
					
						
							| 
									
										
										
										
											2009-10-31 00:44:58 +00:00
										 |  |  | class Smarty_Internal_Compile_Blockclose extends Smarty_Internal_CompileBase { | 
					
						
							| 
									
										
										
										
											2009-03-22 16:09:05 +00:00
										 |  |  |     /** | 
					
						
							|  |  |  |     * Compiles code for the {/block} tag | 
					
						
							|  |  |  |     *  | 
					
						
							|  |  |  |     * @param array $args array with attributes from parser | 
					
						
							|  |  |  |     * @param object $compiler compiler object | 
					
						
							|  |  |  |     * @return string compiled code | 
					
						
							|  |  |  |     */ | 
					
						
							|  |  |  |     public function compile($args, $compiler) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         $this->compiler = $compiler; | 
					
						
							| 
									
										
										
										
											2009-10-12 14:37:31 +00:00
										 |  |  |         $this->smarty = $compiler->smarty; | 
					
						
							| 
									
										
										
										
											2009-03-22 16:09:05 +00:00
										 |  |  |         $this->compiler->has_code = true;  | 
					
						
							|  |  |  |         // turn off block code extraction
 | 
					
						
							|  |  |  |         $compiler->template->extract_code = false;  | 
					
						
							|  |  |  |         // check and get attributes
 | 
					
						
							|  |  |  |         $this->optional_attributes = array('name'); | 
					
						
							|  |  |  |         $_attr = $this->_get_attributes($args); | 
					
						
							| 
									
										
										
										
											2009-03-28 12:20:53 +00:00
										 |  |  |         $saved_data = $this->_close_tag(array('block'));  | 
					
						
							| 
									
										
										
										
											2009-03-22 16:09:05 +00:00
										 |  |  |         // if name does match to opening tag
 | 
					
						
							| 
									
										
										
										
											2009-03-28 12:20:53 +00:00
										 |  |  |         if (isset($_attr['name']) && $saved_data[0]['name'] != $_attr['name']) { | 
					
						
							|  |  |  |             $this->compiler->trigger_template_error('mismatching name attributes "' . $saved_data[0]['name'] . '" and "' . $_attr['name'] . '"'); | 
					
						
							| 
									
										
										
										
											2009-03-22 16:09:05 +00:00
										 |  |  |         }  | 
					
						
							| 
									
										
										
										
											2009-08-09 22:03:33 +00:00
										 |  |  |         $_name = trim($saved_data[0]['name'], "\"'"); | 
					
						
							| 
									
										
										
										
											2009-10-12 14:37:31 +00:00
										 |  |  |         if (isset($this->smarty->block_data[$_name])) { | 
					
						
							|  |  |  |             if (strpos($this->smarty->block_data[$_name]['compiled'], '%%%%SMARTY_PARENT%%%%') !== false) { | 
					
						
							|  |  |  |                 $_output = str_replace('%%%%SMARTY_PARENT%%%%', $compiler->template->extracted_compiled_code, $this->smarty->block_data[$_name]['compiled']); | 
					
						
							|  |  |  |             } elseif ($this->smarty->block_data[$_name]['mode'] == 'prepend') { | 
					
						
							|  |  |  |                 $_output = $this->smarty->block_data[$_name]['compiled'] . $compiler->template->extracted_compiled_code; | 
					
						
							|  |  |  |             } elseif ($this->smarty->block_data[$_name]['mode'] == 'append') { | 
					
						
							|  |  |  |                 $_output = $compiler->template->extracted_compiled_code . $this->smarty->block_data[$_name]['compiled']; | 
					
						
							|  |  |  |             } elseif (!empty($this->smarty->block_data[$_name])) { | 
					
						
							|  |  |  |                 $_output = $this->smarty->block_data[$_name]['compiled']; | 
					
						
							| 
									
										
										
										
											2009-04-12 22:26:02 +00:00
										 |  |  |             }  | 
					
						
							| 
									
										
										
										
											2009-03-22 16:09:05 +00:00
										 |  |  |         } else { | 
					
						
							|  |  |  |             $_output = $compiler->template->extracted_compiled_code; | 
					
						
							|  |  |  |         }  | 
					
						
							| 
									
										
										
										
											2009-03-28 12:20:53 +00:00
										 |  |  |         $compiler->template->extracted_compiled_code = $saved_data[1]; | 
					
						
							| 
									
										
										
										
											2009-11-03 18:02:13 +00:00
										 |  |  |         $compiler->template->extract_code = $saved_data[2];  | 
					
						
							|  |  |  |         // check for includes in block tags
 | 
					
						
							|  |  |  |         preg_match('/(\<\?php \$_smarty_tpl-\>decodeProperties\(\')(.*)(\'.*\?\>)/', $_output, $matches); | 
					
						
							|  |  |  |         $_output = preg_replace(array('/(\<\?php \$_smarty_tpl-\>decodeProperties\(\')(.*)(\'.*\?\>.*\n)/', '/(\<\?php if\(\!defined\(\'SMARTY_DIR\'\)\))(.*)(\?\>.*\n)/'), '', $_output);  | 
					
						
							|  |  |  |         if (isset($matches[2])) { | 
					
						
							|  |  |  |             $prop = unserialize($matches[2]); | 
					
						
							|  |  |  |             $compiler->template->properties['file_dependency'] = array_merge($compiler->template->properties['file_dependency'], $prop['file_dependency']); | 
					
						
							|  |  |  |         }  | 
					
						
							| 
									
										
										
										
											2009-03-22 16:09:05 +00:00
										 |  |  |         return $_output; | 
					
						
							|  |  |  |     }  | 
					
						
							|  |  |  | }  | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ?>
 |