Changeset 1548
- Timestamp:
- 01/23/07 09:49:45 (2 years ago)
- Location:
- branches/david-execution_flow
- Files:
-
- 2 added
- 27 modified
-
samples/app/config/output_types.xml (modified) (3 diffs)
-
samples/app/modules/Default/views/Error404SuccessView.class.php (modified) (1 diff)
-
samples/app/modules/Default/views/IndexSuccessView.class.php (modified) (1 diff)
-
samples/app/modules/Default/views/LoginInputView.class.php (modified) (1 diff)
-
samples/app/modules/Default/views/LoginSuccessView.class.php (modified) (1 diff)
-
samples/app/modules/Default/views/LogoutSuccessView.class.php (modified) (1 diff)
-
samples/app/modules/Default/views/ModuleDisabledSuccessView.class.php (modified) (1 diff)
-
samples/app/modules/Default/views/SearchEngineSpamSuccessView.class.php (modified) (1 diff)
-
samples/app/modules/Default/views/Secure1SuccessView.class.php (modified) (1 diff)
-
samples/app/modules/Default/views/Secure2SuccessView.class.php (modified) (1 diff)
-
samples/app/modules/Default/views/SecureSuccessView.class.php (modified) (1 diff)
-
samples/app/modules/Default/views/UnavailableSuccessView.class.php (modified) (1 diff)
-
src/buildtools/code_templates/View.class.php.tmpl (modified) (1 diff)
-
src/buildtools/code_templates/config/output_types.xml (modified) (1 diff)
-
src/config/AgaviOutputTypeConfigHandler.class.php (modified) (2 diffs)
-
src/config/defaults/autoload.xml (modified) (1 diff)
-
src/config/xsd/output_types.xsd (modified) (2 diffs)
-
src/controller/AgaviOutputType.class.php (modified) (4 diffs)
-
src/filter/AgaviExecutionFilter.class.php (modified) (2 diffs)
-
src/renderer/AgaviPhpRenderer.class.php (modified) (3 diffs)
-
src/renderer/AgaviPhptalRenderer.class.php (modified) (1 diff)
-
src/renderer/AgaviRenderer.class.php (modified) (4 diffs)
-
src/renderer/AgaviSmartyRenderer.class.php (modified) (1 diff)
-
src/renderer/AgaviXslRenderer.class.php (modified) (1 diff)
-
src/util/AgaviToolkit.class.php (modified) (1 diff)
-
src/view/AgaviFileTemplateLayer.class.php (added)
-
src/view/AgaviStreamTemplateLayer.class.php (added)
-
src/view/AgaviTemplateLayer.class.php (modified) (4 diffs)
-
src/view/AgaviView.class.php (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
branches/david-execution_flow/samples/app/config/output_types.xml
r1475 r1548 12 12 +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~+ 13 13 --> 14 <configurations >14 <configurations xmlns:xi="http://www.w3.org/2001/XInclude"> 15 15 16 16 <configuration context="web"> … … 38 38 </renderer> 39 39 </renderers> 40 <layouts default="default"> 41 <layout name="default"> 42 <layers> 43 <layer name="content" class="AgaviFileTemplateLayer" /> 44 <layer name="decorator" class="AgaviFileTemplateLayer"> 45 <parameters> 46 <parameter name="template">Master</parameter> 47 </parameters> 48 </layer> 49 </layers> 50 </layout> 51 </layouts> 40 52 <parameters> 41 53 <parameter name="Content-Type">text/html; charset=UTF-8</parameter> … … 44 56 45 57 <output_type name="xhtml"> 46 <renderers default="php"> 47 <renderer name="php" class="AgaviPhpRenderer"> 48 <parameters> 49 <parameter name="assigns"> 50 <parameters> 51 <parameter name="routing">r</parameter> 52 <parameter name="request">req</parameter> 53 <parameter name="controller">ctl</parameter> 54 <parameter name="user">usr</parameter> 55 <parameter name="translation_manager">tm</parameter> 56 </parameters> 57 </parameter> 58 </parameters> 59 </renderer> 60 </renderers> 58 <xi:include href="#xpointer(//configurations/configuration[@context='web']/output_types/output_type[@name='html']/renderers)" /> 59 <xi:include href="#xpointer(//configurations/configuration[@context='web']/output_types/output_type[@name='html']/layouts)" /> 61 60 <parameters> 62 61 <parameter name="Content-Type">application/xhtml+xml; charset=UTF-8</parameter> -
branches/david-execution_flow/samples/app/modules/Default/views/Error404SuccessView.class.php
r1505 r1548 26 26 public function execute(AgaviParameterHolder $parameters) 27 27 { 28 // set our template 29 $this->addLayer('content', 'Error404Success'); 30 $this->addLayer('decorator', 'Master'); 28 $this->loadLayout(); 31 29 32 30 // set the content type -
branches/david-execution_flow/samples/app/modules/Default/views/IndexSuccessView.class.php
r1475 r1548 26 26 public function execute(AgaviParameterHolder $parameters) 27 27 { 28 // set our template 29 $this->addLayer('content', 'IndexSuccess'); 30 $this->addLayer('decorator', 'Master'); 28 $this->loadLayout(); 31 29 32 30 // set the content type -
branches/david-execution_flow/samples/app/modules/Default/views/LoginInputView.class.php
r1475 r1548 26 26 public function execute(AgaviParameterHolder $parameters) 27 27 { 28 // set our template 29 $this->addLayer('content', 'LoginInput'); 30 $this->addLayer('decorator', 'Master'); 28 $this->loadLayout(); 31 29 32 30 // set the content type -
branches/david-execution_flow/samples/app/modules/Default/views/LoginSuccessView.class.php
r1475 r1548 56 56 } 57 57 58 // set our template 59 $this->addLayer('content', 'LoginInput'); 60 $this->addLayer('decorator', 'Master'); 58 $this->loadLayout(); 61 59 62 60 // set the content type -
branches/david-execution_flow/samples/app/modules/Default/views/LogoutSuccessView.class.php
r1475 r1548 26 26 public function execute(AgaviParameterHolder $parameters) 27 27 { 28 // set our template 29 $this->addLayer('content', 'LogoutSuccess'); 30 $this->addLayer('decorator', 'Master'); 28 $this->loadLayout(); 31 29 32 30 // set the content type -
branches/david-execution_flow/samples/app/modules/Default/views/ModuleDisabledSuccessView.class.php
r1505 r1548 26 26 public function execute(AgaviParameterHolder $parameters) 27 27 { 28 // set our template 29 $this->addLayer('content', 'Error404Success'); 30 $this->addLayer('decorator', 'Master'); 28 $this->loadLayout(); 31 29 32 30 // set the content type -
branches/david-execution_flow/samples/app/modules/Default/views/SearchEngineSpamSuccessView.class.php
r1475 r1548 10 10 public function execute(AgaviParameterHolder $parameters) 11 11 { 12 // set our template 13 $this->addLayer('content', 'SearchEngineSpamSuccess'); 14 $this->addLayer('decorator', 'Master'); 12 $this->loadLayout(); 15 13 16 14 // set the content type -
branches/david-execution_flow/samples/app/modules/Default/views/Secure1SuccessView.class.php
r1475 r1548 10 10 public function execute(AgaviParameterHolder $parameters) 11 11 { 12 // set our template 13 $this->addLayer('content', 'Secure1Success'); 14 $this->addLayer('decorator', 'Master'); 12 $this->loadLayout(); 15 13 16 14 // set the content type -
branches/david-execution_flow/samples/app/modules/Default/views/Secure2SuccessView.class.php
r1475 r1548 10 10 public function execute(AgaviParameterHolder $parameters) 11 11 { 12 // set our template 13 $this->addLayer('content', 'Secure2Success'); 14 $this->addLayer('decorator', 'Master'); 12 $this->loadLayout(); 15 13 16 14 // set the content type -
branches/david-execution_flow/samples/app/modules/Default/views/SecureSuccessView.class.php
r1505 r1548 26 26 public function execute(AgaviParameterHolder $parameters) 27 27 { 28 // set our template 29 $this->addLayer('content', 'Error404Success'); 30 $this->addLayer('decorator', 'Master'); 28 $this->loadLayout(); 31 29 32 30 // set the content type -
branches/david-execution_flow/samples/app/modules/Default/views/UnavailableSuccessView.class.php
r1505 r1548 26 26 public function execute(AgaviParameterHolder $parameters) 27 27 { 28 // set our template 29 $this->addLayer('content', 'Error404Success'); 30 $this->addLayer('decorator', 'Master'); 28 $this->loadLayout(); 31 29 32 30 // set the content type -
branches/david-execution_flow/src/buildtools/code_templates/View.class.php.tmpl
r908 r1548 9 9 public function execute(AgaviParameterHolder $parameters) 10 10 { 11 // set our template12 $this->setTemplate('%%ACTION_PATH%%%%VIEW%%');13 14 11 // set the title 15 12 $this->setAttribute('_title', '%%ACTION%% Action'); -
branches/david-execution_flow/src/buildtools/code_templates/config/output_types.xml
r1353 r1548 48 48 49 49 <output_type name="html"> 50 <renderer class="AgaviPhpRenderer"> 51 <parameters> 52 <parameter name="assigns"> 53 <parameters> 54 <parameter name="routing">ro</parameter> 55 <parameter name="request">rq</parameter> 56 <parameter name="controller">ct</parameter> 57 <parameter name="user">us</parameter> 58 <parameter name="translation_manager">tm</parameter> 59 </parameters> 60 </parameter> 61 </parameters> 62 </renderer> 50 <renderers default="php"> 51 <renderer name="php" class="AgaviPhpRenderer"> 52 <parameters> 53 <parameter name="assigns"> 54 <parameters> 55 <parameter name="routing">ro</parameter> 56 <parameter name="request">rq</parameter> 57 <parameter name="controller">ct</parameter> 58 <parameter name="user">us</parameter> 59 <parameter name="translation_manager">tm</parameter> 60 </parameters> 61 </parameter> 62 </parameters> 63 </renderer> 64 </renderers> 65 <layouts default="default"> 66 <layout name="default"> 67 <layers> 68 <layer name="content" class="AgaviFileTemplateLayer" /> 69 </layers> 70 </layout> 71 </layouts> 63 72 <parameters> 64 <parameter name="Content-Type">text/html </parameter>73 <parameter name="Content-Type">text/html; charset=UTF-8</parameter> 65 74 </parameters> 66 75 </output_type> -
branches/david-execution_flow/src/config/AgaviOutputTypeConfigHandler.class.php
r1477 r1548 75 75 foreach($cfg->output_types as $outputType) { 76 76 $outputTypeName = $outputType->getAttribute('name'); 77 $data[$outputTypeName] = isset($data[$outputTypeName]) ? $data[$outputTypeName] : array('parameters' => array(), 'default_renderer' => null, 'renderers' => array(), ' exception_template' => null);77 $data[$outputTypeName] = isset($data[$outputTypeName]) ? $data[$outputTypeName] : array('parameters' => array(), 'default_renderer' => null, 'renderers' => array(), 'layouts' => array(), 'default_layout' => null, 'exception_template' => null); 78 78 if(isset($outputType->renderers)) { 79 79 foreach($outputType->renderers as $renderer) { 80 80 $rendererName = $renderer->getAttribute('name'); 81 $data[$outputTypeName]['renderers'][$rendererName] = array('instance' => null, 'class' => null, ' extension' => null, 'parameters' => array());81 $data[$outputTypeName]['renderers'][$rendererName] = array('instance' => null, 'class' => null, 'parameters' => array()); 82 82 $data[$outputTypeName]['renderers'][$rendererName]['class'] = $renderer->getAttribute('class'); 83 $data[$outputTypeName]['renderers'][$rendererName]['extension'] = $renderer->getAttribute('extension');84 83 $data[$outputTypeName]['renderers'][$rendererName]['parameters'] = $this->getItemParameters($renderer, $data[$outputTypeName]['renderers'][$rendererName]['parameters']); 85 84 } 86 85 $data[$outputTypeName]['default_renderer'] = $outputType->renderers->getAttribute('default'); 86 } 87 if(isset($outputType->layouts)) { 88 foreach($outputType->layouts as $layout) { 89 $layoutName = $layout->getAttribute('name'); 90 $data[$outputTypeName]['layouts'][$layoutName] = array('layers' => array()); 91 if(isset($layout->layers)) { 92 foreach($layout->layers as $layer) { 93 $layerName = $layer->getAttribute('name'); 94 $data[$outputTypeName]['layouts'][$layoutName]['layers'][$layerName] = array('class' => null, 'renderer' => null, 'parameters' => array()); 95 $data[$outputTypeName]['layouts'][$layoutName]['layers'][$layerName]['class'] = $layer->getAttribute('class'); 96 if(($rendererName = $layer->getAttribute('renderer')) !== null) { 97 if(!isset($rendererName, $data[$outputTypeName]['renderers'])) { 98 throw new AgaviConfigurationException('Layout "' . $layoutName . '" specifies layer "' . $layerName . '" with non-defined renderer "' . $rendererName . '".'); 99 } 100 $data[$outputTypeName]['layouts'][$layoutName]['layers'][$layerName]['renderer'] = $rendererName; 101 } 102 $data[$outputTypeName]['layouts'][$layoutName]['layers'][$layerName]['parameters'] = $this->getItemParameters($layer, $data[$outputTypeName]['layouts'][$layoutName]['layers'][$layerName]['parameters']); 103 } 104 } 105 } 106 $data[$outputTypeName]['default_layout'] = $outputType->layouts->getAttribute('default'); 87 107 } 88 108 if($outputType->hasAttribute('exception_template')) { … … 101 121 $code[] = implode("\n", array( 102 122 '$ot = new AgaviOutputType();', 103 '$ot->initialize($this->context, ' . var_export($outputType['parameters'], true) . ', ' . var_export($outputTypeName, true) . ', ' . var_export($outputType['renderers'], true) . ', ' . var_export($outputType['default_renderer'], true) . ', ' . var_export($outputType[' exception_template'], true) . ');',123 '$ot->initialize($this->context, ' . var_export($outputType['parameters'], true) . ', ' . var_export($outputTypeName, true) . ', ' . var_export($outputType['renderers'], true) . ', ' . var_export($outputType['default_renderer'], true) . ', ' . var_export($outputType['layouts'], true) . ', ' . var_export($outputType['default_layout'], true) . ', ' . var_export($outputType['exception_template'], true) . ');', 104 124 '$this->outputTypes["' . $outputTypeName . '"] = $ot;', 105 125 )); -
branches/david-execution_flow/src/config/defaults/autoload.xml
r1530 r1548 203 203 <autoload name="AgaviSetValidator">%core.agavi_dir%/validator/AgaviSetValidator.class.php</autoload> 204 204 <autoload name="AgaviStringValidator">%core.agavi_dir%/validator/AgaviStringValidator.class.php</autoload> 205 206 <!-- agavi/view --> 207 <autoload name="AgaviFileTemplateLayer">%core.agavi_dir%/view/AgaviFileTemplateLayer.class.php</autoload> 208 <autoload name="AgaviStreamTemplateLayer">%core.agavi_dir%/view/AgaviStreamTemplateLayer.class.php</autoload> 205 209 </autoloads> 206 210 </configuration> -
branches/david-execution_flow/src/config/xsd/output_types.xsd
r1475 r1548 30 30 <xs:group ref="parameters" /> 31 31 <xs:element name="renderers" type="renderers" minOccurs="0" /> 32 <xs:element name="layouts" type="layouts" minOccurs="0" /> 32 33 </xs:sequence> 33 34 <xs:attribute name="name" type="php_label" use="required" /> … … 47 48 <xs:attribute name="name" type="php_label" use="required" /> 48 49 <xs:attribute name="class" type="php_label" use="required" /> 49 <xs:attribute name="extension" type="xs:string" /> 50 </xs:complexType> 51 52 <xs:complexType name="layouts"> 53 <xs:sequence> 54 <xs:element name="layout" type="layout" maxOccurs="unbounded" /> 55 </xs:sequence> 56 <xs:attribute name="default" type="php_label" use="required" /> 57 </xs:complexType> 58 <xs:complexType name="layout"> 59 <xs:sequence> 60 <xs:element name="layers" type="layers" minOccurs="0" /> 61 </xs:sequence> 62 <xs:attribute name="name" type="php_label" use="required" /> 63 </xs:complexType> 64 65 <xs:complexType name="layers"> 66 <xs:sequence> 67 <xs:element name="layer" type="layer" maxOccurs="unbounded" /> 68 </xs:sequence> 69 </xs:complexType> 70 <xs:complexType name="layer"> 71 <xs:sequence> 72 <xs:group ref="parameters" /> 73 </xs:sequence> 74 <xs:attribute name="name" type="php_label" use="required" /> 75 <xs:attribute name="class" type="php_label" use="required" /> 76 <xs:attribute name="renderer" type="php_label" /> 50 77 </xs:complexType> 51 78 -
branches/david-execution_flow/src/controller/AgaviOutputType.class.php
r1477 r1548 49 49 50 50 /** 51 * @var array An array of configured layouts. 52 */ 53 protected $layouts = array(); 54 55 /** 56 * @var string The name of the default layout, if set. 57 */ 58 protected $defaultLayout = null; 59 60 /** 51 61 * @var string The name of the exception template for this output type. 52 62 */ … … 62 72 * @since 0.11.0 63 73 */ 64 public function initialize(AgaviContext $context, array $parameters, $name, array $renderers, $defaultRenderer, $exceptionTemplate = null)74 public function initialize(AgaviContext $context, array $parameters, $name, array $renderers, $defaultRenderer, array $layouts, $defaultLayout, $exceptionTemplate = null) 65 75 { 66 76 $this->context = $context; … … 73 83 74 84 $this->defaultRenderer = $defaultRenderer; 85 86 $this->layouts = $layouts; 87 88 $this->defaultLayout = $defaultLayout; 75 89 76 90 $this->exceptionTemplate = $exceptionTemplate; … … 151 165 152 166 /** 167 * Get a layout. 168 * 169 * @param The optional name of the layout to fetch. 170 * 171 * @return array An array of layout information. 172 * 173 * @author David Zuelke <dz@bitxtender.com> 174 * @since 0.11.0 175 */ 176 public function getLayout($name = null) 177 { 178 if($name === null) { 179 $name = $this->defaultLayout; 180 } 181 182 if(isset($this->layouts[$name])) { 183 return $this->layouts[$name]; 184 } else { 185 throw new AgaviException('Unknown layout "' . $name . '"'); 186 } 187 } 188 189 /** 153 190 * Get the exception template filename for this renderer. 154 191 * -
branches/david-execution_flow/src/filter/AgaviExecutionFilter.class.php
r1535 r1548 371 371 $output = array(); 372 372 $nextOutput = null; 373 foreach($viewInstance->getLayers() as $layer Name => $layer) {373 foreach($viewInstance->getLayers() as $layer) { 374 374 foreach($layer->getSlots() as $slotName => $slotContainer) { 375 375 $slotResponse = $slotContainer->execute(); … … 383 383 $nextOutput = $layer->getRenderer()->render($layer, $attributes, $output); 384 384 $output = array(); 385 $output[$layer Name] = $nextOutput;385 $output[$layer->getName()] = $nextOutput; 386 386 } 387 387 $response->setContent($nextOutput); -
branches/david-execution_flow/src/renderer/AgaviPhpRenderer.class.php
r1475 r1548 33 33 * including the dot. 34 34 */ 35 protected $ extension = '.php';36 35 protected $defaultExtension = '.php'; 36 37 37 /** 38 * Retrieve the template engine associated with this view. 39 * 40 * Note: This will return null because PHP itself has no engine reference. 41 * 42 * @return null 38 * @var AgaviTemplateLayer Temporary storage for the template layer, 39 * used during rendering. 43 40 */ 44 public function getEngine() 45 { 46 return null; 47 } 48 41 protected $_layer = null; 42 49 43 /** 50 * Reset the engine for re-use 51 * 52 * @author David Zuelke <dz@bitxtender.com> 53 * @since 0.11.0 44 * @var array Temporary storage for the template layer, used during 45 * rendering. 54 46 */ 55 protected function reset() 56 { 57 // nothing needs to be done for PHP 58 } 47 protected $_attributes = null; 48 49 /** 50 * @var array Temporary storage for the template layer, used during 51 * rendering. 52 */ 53 protected $_slots = null; 59 54 60 55 /** … … 67 62 { 68 63 // DO NOT USE VARIABLES IN HERE, THEY MIGHT INTERFERE WITH TEMPLATE VARS 64 $this->_layer = $layer; 65 $this->_attributes =& $attributes; 66 $this->_slots =& $slots; 67 unset($layer, $attributes, $slots); 69 68 70 69 if($this->extractVars) { 71 extract($ attributes, EXTR_REFS | EXTR_PREFIX_INVALID, '_');70 extract($this->_attributes, EXTR_REFS | EXTR_PREFIX_INVALID, '_'); 72 71 } else { 73 ${$this->varName} =& $ attributes;72 ${$this->varName} =& $this->_attributes; 74 73 } 75 74 76 75 if($this->extractSlots === true || ($this->extractVars && $this->extractSlots !== false)) { 77 extract($ slots, EXTR_REFS | EXTR_PREFIX_INVALID, '_');76 extract($this->_slots, EXTR_REFS | EXTR_PREFIX_INVALID, '_'); 78 77 } else { 79 78 if(!isset(${$this->slotsVarName})) { 80 79 ${$this->slotsVarName} = array(); 81 80 } 82 ${$this->slotsVarName} = array_merge(${$this->slotsVarName}, $ slots);81 ${$this->slotsVarName} = array_merge(${$this->slotsVarName}, $this->_slots); 83 82 } 84 83 85 $collisions = array_intersect(array_keys($this->assigns), array_keys($ attributes));84 $collisions = array_intersect(array_keys($this->assigns), array_keys($this->_attributes)); 86 85 if(count($collisions)) { 87 86 throw new AgaviException('Could not import system objects due to variable name collisions ("' . implode('", "', $collisions) . '" already in use).'); 88 87 } 88 unset($collisions); 89 89 90 90 extract($this->assigns); … … 92 92 ob_start();
