Changeset 803

Show
Ignore:
Timestamp:
08/10/07 18:08:52 (1 year ago)
Author:
mikey
Message:

save the work: nothing tested, everything unfinished: improved memphis mvc engine

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/examples/config/xml/pages/memphis/index.xml

    r267 r803  
    44    xmlns="http://stubbles.net/websites"> 
    55  <page> 
    6     <memphisElement source="static/index.html" type="net.stubbles.websites.memphis.stubSimpleHTMLMemphisPageElement" /> 
     6    <includeFile source="static/index.html" parts="content" /> 
    77  </page> 
    88</xj:configuration> 
  • trunk/src/main/php/net/stubbles/websites/memphis/stubMemphisIncludeFilePageElement.php

    r798 r803  
    11<?php 
    22/** 
    3  * Class that represents an page element. 
     3 * Page element for including a complete file as content. 
    44 * 
    55 * @author      Frank Kleine <mikey@stubbles.net> 
     
    77 * @subpackage  websites_memphis 
    88 */ 
    9 stubClassLoader::load('net.stubbles.websites.stubAbstractPageElement', 
    10                       'net.stubbles.websites.memphis.stubMemphisPageElement' 
    11 ); 
     9stubClassLoader::load('net.stubbles.websites.memphis.stubMemphisPageElement'); 
    1210/** 
    13  * Class that represents an page element. 
     11 * Page element for including a complete file as content. 
    1412 * 
    1513 * @package     stubbles 
    1614 * @subpackage  websites_memphis 
    1715 */ 
    18 class stubSimpleHTMLMemphisPageElement extends stubAbstractPageElement implements stubMemphisPageElement 
     16class stubMemphisIncludeFilePageElement extends stubMemphisPageElement 
    1917{ 
    2018    /** 
     
    4846     * processes the page element 
    4947     * 
    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 
    5453     */ 
    5554    public function process(stubRequest $request, stubSession $session, stubResponse $response, array $context = array()) 
    5655    { 
    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); 
    5861    } 
    5962} 
  • trunk/src/main/php/net/stubbles/websites/memphis/stubMemphisProcessor.php

    r369 r803  
    77 * @subpackage  websites_memphis 
    88 */ 
    9 stubClassLoader::load('net.stubbles.websites.processors.stubAbstractProcessor', 
    10                       'net.stubbles.ipo.request.stubRequestPrefixDecorator', 
    11                       'net.stubbles.ipo.response.stubBaseResponse' 
     9stubClassLoader::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' 
    1215); 
    1316/** 
     
    1922class stubMemphisProcessor extends stubAbstractProcessor 
    2023{ 
     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 
    2137    /** 
    2238     * constructor 
     
    3046    { 
    3147        parent::__construct($request, $session, $response, $pageFactory); 
     48        $this->config   = new stubMemphisConfig(); 
     49        $this->template = new stubMemphisTemplate(); 
    3250    } 
    3351 
     
    3755    protected function doProcess() 
    3856    { 
    39         $pageName = $this->getPage('memphis'); 
    4057        try { 
    41             $page = $this->pageFactory->getPage('memphis/' . $pageName); 
     58            $page = $this->pageFactory->getPage('memphis/' . $this->getPageName('memphis')); 
    4259        } catch (stubPageConfigurationException $pce) { 
    4360            $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_'); 
    45155        } 
    46156 
    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)); 
    56160        } 
     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); 
    57168    } 
    58169} 
  • trunk/src/main/resources/xjconf/websites.xml

    r783 r803  
    1111    <tag name="properties" type="array" /> 
    1212    <tag name="property" type="string" keyAttribute="name" /> 
     13     
    1314    <abstractTag name="element" abstractType="net.stubbles.websites.stubPageElement" concreteTypeAttribute="type" setter="addElement"> 
    1415      <attribute name="name" type="string" /> 
    1516    </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"> 
    1724      <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" /> 
    1838    </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" /> 
    2042 
     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     
    2148    <!-- Decorators --> 
    2249    <abstractTag name="xmlElementDecorator" abstractType="net.stubbles.websites.xml.stubXMLPageElement" concreteTypeAttribute="type" setter="addElement"> 
     
    2653    </abstractTag> 
    2754 
    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"
    2956      <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"/> 
    3557    </tag> 
    3658