Changeset 803
- Timestamp:
- 08/10/07 18:08:52 (1 year ago)
- Files:
-
- trunk/config/xml/memphis.xml (added)
- trunk/examples/config/xml/pages/memphis/index.xml (modified) (1 diff)
- trunk/src/main/php/net/stubbles/util/ext/stubPhpToolsClassLoader.php (added)
- trunk/src/main/php/net/stubbles/websites/memphis/stubMemphisConfig.php (added)
- trunk/src/main/php/net/stubbles/websites/memphis/stubMemphisIncludeFilePageElement.php (moved) (moved from trunk/src/main/php/net/stubbles/websites/memphis/stubSimpleHTMLMemphisPageElement.php) (3 diffs)
- trunk/src/main/php/net/stubbles/websites/memphis/stubMemphisProcessor.php (modified) (4 diffs)
- trunk/src/main/php/net/stubbles/websites/memphis/stubMemphisTemplate.php (added)
- trunk/src/main/resources/xjconf/memphis.xml (added)
- trunk/src/main/resources/xjconf/websites.xml (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/examples/config/xml/pages/memphis/index.xml
r267 r803 4 4 xmlns="http://stubbles.net/websites"> 5 5 <page> 6 < memphisElement source="static/index.html" type="net.stubbles.websites.memphis.stubSimpleHTMLMemphisPageElement" />6 <includeFile source="static/index.html" parts="content" /> 7 7 </page> 8 8 </xj:configuration> trunk/src/main/php/net/stubbles/websites/memphis/stubMemphisIncludeFilePageElement.php
r798 r803 1 1 <?php 2 2 /** 3 * Class that represents an page element.3 * Page element for including a complete file as content. 4 4 * 5 5 * @author Frank Kleine <mikey@stubbles.net> … … 7 7 * @subpackage websites_memphis 8 8 */ 9 stubClassLoader::load('net.stubbles.websites.stubAbstractPageElement', 10 'net.stubbles.websites.memphis.stubMemphisPageElement' 11 ); 9 stubClassLoader::load('net.stubbles.websites.memphis.stubMemphisPageElement'); 12 10 /** 13 * Class that represents an page element.11 * Page element for including a complete file as content. 14 12 * 15 13 * @package stubbles 16 14 * @subpackage websites_memphis 17 15 */ 18 class stub SimpleHTMLMemphisPageElement extends stubAbstractPageElement implements stubMemphisPageElement16 class stubMemphisIncludeFilePageElement extends stubMemphisPageElement 19 17 { 20 18 /** … … 48 46 * processes the page element 49 47 * 50 * @param stubRequest $request the request data 51 * @param stubSession $session current session 52 * @param stubResponse $response contains response data 53 * @param array $context optional additional context data 48 * @param stubRequest $request the request data 49 * @param stubSession $session current session 50 * @param stubResponse $response contains response data 51 * @param array $context optional additional context data 52 * @throws stubException 54 53 */ 55 54 public function process(stubRequest $request, stubSession $session, stubResponse $response, array $context = array()) 56 55 { 57 $response->write(file_get_contents($this->source)); 56 if (file_exists($this->source) == false) { 57 throw new stubException('The file ' . $this->source . ' does not exist or could not be read.'); 58 } 59 60 return file_get_contents($this->source); 58 61 } 59 62 } trunk/src/main/php/net/stubbles/websites/memphis/stubMemphisProcessor.php
r369 r803 7 7 * @subpackage websites_memphis 8 8 */ 9 stubClassLoader::load('net.stubbles.websites.processors.stubAbstractProcessor', 10 'net.stubbles.ipo.request.stubRequestPrefixDecorator', 11 'net.stubbles.ipo.response.stubBaseResponse' 9 stubClassLoader::load('net.stubbles.ipo.request.stubRequestPrefixDecorator', 10 'net.stubbles.ipo.response.stubBaseResponse', 11 'net.stubbles.util.validators.stubPreSelectValidator', 12 'net.stubbles.websites.processors.stubAbstractProcessor', 13 'net.stubbles.websites.memphis.stubMemphisConfig', 14 'net.stubbles.websites.memphis.stubMemphisTemplate' 12 15 ); 13 16 /** … … 19 22 class stubMemphisProcessor extends stubAbstractProcessor 20 23 { 24 /** 25 * instance of patTemplate 26 * 27 * @var stubMemphisTemplate 28 */ 29 protected $template; 30 /** 31 * configuration 32 * 33 * @var stubMemphisConfig 34 */ 35 protected $config; 36 21 37 /** 22 38 * constructor … … 30 46 { 31 47 parent::__construct($request, $session, $response, $pageFactory); 48 $this->config = new stubMemphisConfig(); 49 $this->template = new stubMemphisTemplate(); 32 50 } 33 51 … … 37 55 protected function doProcess() 38 56 { 39 $pageName = $this->getPage('memphis');40 57 try { 41 $page = $this->pageFactory->getPage('memphis/' . $ pageName);58 $page = $this->pageFactory->getPage('memphis/' . $this->getPageName('memphis')); 42 59 } catch (stubPageConfigurationException $pce) { 43 60 $this->response->replaceData((string) $pce); 44 return $this; 61 return; 62 } 63 64 $elements = $page->getElements(); 65 $prefixRequest = new stubRequestPrefixDecorator($this->request, ''); 66 $content = array(); 67 $context = array('part' => null, 68 'tmpl' => $this->template 69 ); 70 71 $this->template->readTemplatesFromFile($this->config->getFrame($this->getFrameId($page))); 72 $this->setTemplateVars($page); 73 $parts = $this->config->getParts(); 74 foreach (array_keys($parts) as $part) { 75 $content = ''; 76 $context['part'] = $part; 77 if (isset($parts[$part]['defaultElements']) == true) { 78 foreach ($parts[$part]['defaultElements'] as $defaultElement) { 79 $prefixRequest->setPrefix($defaultElement->getName()); 80 $content .= $this->processElement($defaultElement, $prefixRequest, $context); 81 } 82 } 83 84 foreach ($elements as $name => $element) { 85 $prefixRequest->setPrefix($name); 86 $content .= $this->processElement($element, $prefixRequest, $context); 87 } 88 89 $this->template->addGlobalVar($part, $content); 90 } 91 92 $this->response->write($this->template->getParsedTemplate('frame')); 93 } 94 95 /** 96 * helper method to process a page element 97 * 98 * @param stubPageElement $element 99 * @param array $context 100 * @return string 101 * @todo better error handling 102 */ 103 protected function processElement(stubPageElement $element, stubRequest $request, array $context) 104 { 105 if ($element->isAvailable($request, $this->session, $this->response, $context) == false) { 106 return ''; 107 } 108 109 try { 110 $content = $element->process($request, $this->session, $this->response, $context); 111 } catch (Exception $e) { 112 $content = 'An error occurred: ' . $e->getMessage(); 113 } 114 115 return $content; 116 } 117 118 /** 119 * helper method to get the name of the frame to use 120 * 121 * @param stubPage $page 122 * @return string 123 */ 124 protected function getFrameId(stubPage $page) 125 { 126 if ($this->request->hasValue('frame') == true) { 127 $frame = $this->request->getValidatedValue(new stubPreSelectValidator(array_keys($this->config['frames'])), 'frame'); 128 } else { 129 $frame = $page->getProperty('frame'); 130 } 131 132 if (null == $frame) { 133 return 'default'; 134 } 135 136 return $frame; 137 } 138 139 /** 140 * helper method to set the template vars 141 * 142 * @param stubPage $page 143 */ 144 protected function setTemplateVars(stubPage $page) 145 { 146 $this->template->addGlobalVar('UCUO_FRAME', $this->getFrame($page)); 147 $this->template->addGlobalVar('SHOP_TITLE', $page->getProperty('title')); 148 $this->template->addGlobalVar('PAGE_NAME', $this->getPageName('memphis')); 149 $this->template->addGlobalVar('VARIANT', $this->session->getValue('net.stubbles.websites.variantmanager.variant', '')); 150 $this->template->addGlobalVar('SID', $this->session->getId()); 151 152 // check for user data 153 if ($this->session->hasValue('_userData') == true) { 154 $this->template->addGlobalVars($this->session->getValue('_userData'), 'USER_'); 45 155 } 46 156 47 $elements = $page->getElements(); 48 $prefixRequest = new stubRequestPrefixDecorator($this->request, ''); 49 foreach ($elements as $name => $element) { 50 $prefixRequest->setPrefix($name); 51 if ($element->isAvailable($prefixRequest, $this->session, $this->response) == false) { 52 continue; 53 } 54 55 $element->process($prefixRequest, $this->session, $this->response); 157 // add meta information to the page 158 foreach ($this->config->getMetaTags() as $key => $value) { 159 $this->template->addVar('frame', 'META_' . $key, htmlentities($value)); 56 160 } 161 162 $sslMode = 'no'; 163 if ($this->request->validateValue(new stubEqualValidator(443), 'SERVER_PORT', stubRequest::SOURCE_HEADER) == true) { 164 $sslMode = 'yes'; 165 } 166 167 $this->template->addGlobalVar('SSL_MODE', $sslMode); 57 168 } 58 169 } trunk/src/main/resources/xjconf/websites.xml
r783 r803 11 11 <tag name="properties" type="array" /> 12 12 <tag name="property" type="string" keyAttribute="name" /> 13 13 14 <abstractTag name="element" abstractType="net.stubbles.websites.stubPageElement" concreteTypeAttribute="type" setter="addElement"> 14 15 <attribute name="name" type="string" /> 15 16 </abstractTag> 16 <abstractTag extends="element" name="memphisElement" abstractType="net.stubbles.websites.memphis.stubMemphisPageElement" concreteTypeAttribute="type" setter="addElement"> 17 18 <!-- Memphis --> 19 <abstractTag name="memphisElement" extends="element" abstractType="net.stubbles.websites.memphis.stubMemphisPageElement" concreteTypeAttribute="type" setter="addElement"> 20 <attribute name="parts" type="string" /> 21 </abstractTag> 22 23 <tag name="includeFile" extends="memphisElement" type="net.stubbles.websites.memphis.stubMemphisIncludeFilePageElement" setter="addElement"> 17 24 <attribute name="source" type="string" /> 25 </tag> 26 27 <!--tag name="includeTemplate" extends="memphisElement" type="net.stubbles.websites.memphis.stubMemphisIncludeTemplatePageElement" setter="addElement"> 28 <attribute name="source" type="string" /> 29 </tag> 30 31 <tag name="loadExtension" extends="memphisElement" type="net.stubbles.websites.memphis.stubMemphisLoadExtensionPageElement" setter="addElement"> 32 <attribute name="extension" type="string" /> 33 </tag--> 34 35 <tag name="conditions" type="array"/> 36 <abstractTag name="condition" abstractType="net.stubbles.websites.memphis.conditions.stubMemphisPageElementCondition" concreteTypeAttribute="type" setter="setCondition"> 37 <attribute name="value" type="string" /> 18 38 </abstractTag> 19 <abstractTag extends="element" name="xmlElement" abstractType="net.stubbles.websites.xml.stubXMLPageElement" concreteTypeAttribute="type" setter="addElement" /> 39 40 <!-- XML/XSL --> 41 <abstractTag name="xmlElement" extends="element" abstractType="net.stubbles.websites.xml.stubXMLPageElement" concreteTypeAttribute="type" setter="addElement" /> 20 42 43 <tag name="xmlPassThru" extends="xmlElement" type="net.stubbles.websites.xml.stubXMLPassThruPageElement" setter="addElement"> 44 <attribute name="directory" type="string"/> 45 <attribute name="fileName" type="string"/> 46 </tag> 47 21 48 <!-- Decorators --> 22 49 <abstractTag name="xmlElementDecorator" abstractType="net.stubbles.websites.xml.stubXMLPageElement" concreteTypeAttribute="type" setter="addElement"> … … 26 53 </abstractTag> 27 54 28 <tag name="xmlElementCachingDecorator" extends="xmlElementDecorator" type="net.stubbles.websites.xml.stubXMLPageElementCachingDecorator" >55 <tag name="xmlElementCachingDecorator" extends="xmlElementDecorator" type="net.stubbles.websites.xml.stubXMLPageElementCachingDecorator" setter="addElement"> 29 56 <attribute name="lifetime" type="int"/> 30 </tag>31 32 <tag name="xmlPassThru" extends="xmlElement" type="net.stubbles.websites.xml.stubXMLPassThruPageElement" setter="addElement">33 <attribute name="directory" type="string"/>34 <attribute name="fileName" type="string"/>35 57 </tag> 36 58
