Changeset 1414

Show
Ignore:
Timestamp:
03/13/08 14:46:18 (6 months ago)
Author:
mikey
Message:

refactoring #132: enable global hooks available on all pages

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/src/main/php/net/stubbles/websites/xml/stubXMLProcessor.php

    r1393 r1414  
    2727{ 
    2828    /** 
     29     * list of global elements to be serialized into result xml 
     30     * 
     31     * @var  array<string> 
     32     */ 
     33    protected $globalElements = array('net::stubbles::websites::xml::global::stubSessionXMLElement', 
     34                                      'net::stubbles::websites::xml::global::stubRequestXMLElement' 
     35                                ); 
     36 
     37    /** 
    2938     * constructor 
    3039     * 
     
    5261        $xmlStreamWriter = $this->createXMLStreamWriter(); 
    5362        $this->response->setPage($page); 
    54         $elements        = $page->getElements(); 
    5563        $xmlStreamWriter->writeStartElement('document'); 
    5664        $xmlStreamWriter->writeAttribute('page', $pageName); 
    57         $this->writeSessionValues($xmlStreamWriter); 
    5865        $prefixRequest = new stubRequestPrefixDecorator($this->request, ''); 
    5966        $formValues    = array(); 
    60  
    61         if (stubRegistry::has(stubBinder::REGISTRY_KEY)) { 
     67        $injector      = null; 
     68        if (stubRegistry::has(stubBinder::REGISTRY_KEY) === true) { 
    6269            $injector = stubRegistry::get(stubBinder::REGISTRY_KEY)->getInjector(); 
    63         } else { 
    64             $injector = null; 
    6570        } 
    6671 
    67         foreach ($elements as $name => $element) { 
     72        foreach ($page->getElements() as $name => $element) { 
    6873            $prefixRequest->setPrefix($name); 
    6974            if (null !== $injector) { 
     
    7277 
    7378            $element->init($prefixRequest, $this->session, $this->response); 
    74             if ($element->isAvailable() == false) { 
     79            if ($element->isAvailable() === false) { 
    7580                continue; 
    7681            } 
     
    8893 
    8994        $xmlSerializer->serialize($formValues, $xmlStreamWriter, array(stubXMLSerializer::OPT_ROOT_TAG => 'forms')); 
    90         $this->writeRequestValues($xmlStreamWriter, $xmlSerializer); 
    91  
    92         // write resources 
    9395        if (null !== $injector) { 
     96            // write resources 
    9497            $xmlStreamWriter->writeStartElement('resources'); 
    9598            foreach ($page->getResources() as $name => $interface) { 
    96                 $resource = $injector->getInstance($interface); 
    97                 $xmlSerializer->serialize($resource, $xmlStreamWriter, array(stubXMLSerializer::OPT_ROOT_TAG => $name)); 
     99                $xmlSerializer->serialize($injector->getInstance($interface), $xmlStreamWriter, array(stubXMLSerializer::OPT_ROOT_TAG => $name)); 
    98100            } 
    99101             
    100102            $xmlStreamWriter->writeEndElement(); 
    101         } 
    102          
    103         $this->response->setXMLStreamWriter($xmlStreamWriter); 
    104     } 
    105  
    106     /** 
    107      * writes the session values into the result document 
    108      * 
    109      * Default values are whether the session is new or not, the current and 
    110      * the next token of the request: 
    111      * <code> 
    112      * <document> 
    113      *   <session> 
    114      *     <acceptsCookies>true</acceptsCookies> 
    115      *     <id>abc123</id> 
    116      *     <name>PHPSESSID</name> 
    117      *     <isNew>true</isNew> 
    118      *     <variant> 
    119      *       <name>foo</name> 
    120      *       <alias>bar</alias> 
    121      *     </variant> 
    122      *     <token> 
    123      *       <current>foo</current> 
    124      *       <next>bar</next> 
    125      *     </token> 
    126      *   </session> 
    127      *   [...] 
    128      * </document> 
    129      * </code> 
    130      * Concrete session data will not be written into the result document. 
    131      * 
    132      * @param  stubXMLStreamWriter  $xmlStreamWriter 
    133      */ 
    134     protected function writeSessionValues(stubXMLStreamWriter $xmlStreamWriter) 
    135     { 
    136         $xmlStreamWriter->writeStartElement('session'); 
    137         if ($this->request->acceptsCookies() === true) { 
    138             $xmlStreamWriter->writeElement('acceptsCookies', array(), 'true'); 
    139         } else { 
    140             $xmlStreamWriter->writeElement('acceptsCookies', array(), 'false'); 
    141         } 
    142          
    143         $xmlStreamWriter->writeElement('id', array(), $this->session->getId()); 
    144         $xmlStreamWriter->writeElement('name', array(), stubRegistry::getConfig(stubSession::NAME_REGISTRY_KEY, stubSession::DEFAULT_SESSION_NAME)); 
    145         $xmlStreamWriter->writeElement('isNew', array(), (($this->session->isNew() === true) ? ('true') : ('false'))); 
    146         $xmlStreamWriter->writeStartElement('variant'); 
    147         $xmlStreamWriter->writeElement('name', array(), (string) $this->session->getValue('net.stubbles.websites.variantmanager.variant.name')); 
    148         $xmlStreamWriter->writeElement('alias', array(), (string) $this->session->getValue('net.stubbles.websites.variantmanager.variant.alias')); 
    149         $xmlStreamWriter->writeEndElement();  // end variant 
    150         $xmlStreamWriter->writeStartElement('token'); 
    151         $xmlStreamWriter->writeElement('current', array(), $this->session->getCurrentToken()); 
    152         $xmlStreamWriter->writeElement('next', array(), $this->session->getNextToken()); 
    153         $xmlStreamWriter->writeEndElement();  // end token 
    154         $xmlStreamWriter->writeEndElement();  // end session 
    155     } 
    156  
    157     /** 
    158      * writes the request values into the result document 
    159      * 
    160      * Currently this are only the request errors created during processing of the page elements: 
    161      * <code> 
    162      *   [...] 
    163      *   <request> 
    164      *     <errors> 
    165      *       <error id="foo"> 
    166      *         <messages> 
    167      *           <de_DE>Dies ist eine deutsche Fehlermeldung.</de_DE> 
    168      *           <en_EN>This is an english error message.</en_EN> 
    169      *         </messages> 
    170      *       </error> 
    171      *       [...] 
    172      *     </errors> 
    173      *   </request> 
    174      * </code> 
    175      * Concrete request values will not be written into the result document. 
    176      * 
    177      * @param  stubXMLStreamWriter  $xmlStreamWriter 
    178      * @param  stubXMLSerializer    $xmlSerializer 
    179      */ 
    180     protected function writeRequestValues(stubXMLStreamWriter $xmlStreamWriter, $xmlSerializer) 
    181     { 
    182         $xmlStreamWriter->writeStartElement('request'); 
    183         $errors = $this->request->getValueErrors(); 
    184         foreach ($errors as $requestValueName => $requestErrorValues) { 
    185             $xmlStreamWriter->writeStartElement('value'); 
    186             $xmlStreamWriter->writeAttribute('name', $requestValueName); 
    187             $xmlSerializer->serialize(array_values($requestErrorValues), $xmlStreamWriter, array(stubXMLSerializer::OPT_ROOT_TAG => 'errors')); 
    188             $xmlStreamWriter->writeEndElement(); 
     103            // write global elements 
     104            foreach ($this->globalElements as $globalElementClassName) { 
     105                $globalElement = $injector->getInstance($globalElementClassName); 
     106                $globalElement->append($xmlStreamWriter, $xmlSerializer); 
     107            } 
    189108        } 
    190109 
    191         $xmlStreamWriter->writeEndElement();  // end request 
     110        $this->response->setXMLStreamWriter($xmlStreamWriter); 
    192111    } 
    193112 
  • trunk/src/test/php/net/stubbles/websites/WebsitesTestSuite.php

    r1413 r1414  
    5353        $suite->addTestFile($dir . '/xml/stubXMLProcessorTestCase.php'); 
    5454        $suite->addTestFile($dir . '/xml/stubXMLResponseTestCase.php'); 
     55         
     56        // xml global elements 
     57        $suite->addTestFile($dir . '/xml/global/stubRequestXMLElementTestCase.php'); 
     58        $suite->addTestFile($dir . '/xml/global/stubSessionXMLElementTestCase.php'); 
    5559        return $suite; 
    5660    } 
  • trunk/src/test/php/net/stubbles/websites/xml/stubXMLProcessorTestCase.php

    r1360 r1414  
    154154        $this->mockRequest->expects($this->once())->method('hasValue')->will($this->returnValue(false)); 
    155155        $this->mockPageFactory->expects($this->once())->method('getPage')->with($this->equalTo('conf/index')); 
    156         $this->mockXMLStreamWriter->expects($this->exactly(5))->method('writeStartElement'); 
    157         $this->mockXMLStreamWriter->expects($this->exactly(4))->method('writeEndElement'); 
     156        $this->mockXMLStreamWriter->expects($this->once())->method('writeStartElement'); 
     157        $this->mockXMLStreamWriter->expects($this->never())->method('writeEndElement'); 
    158158        $this->mockXMLSerializer->expects($this->once())->method('serialize'); 
    159159        $return = $this->xmlProcessor->process(); 
     
    188188        $this->page->addElement($pageElement2); 
    189189        $this->page->addElement($pageElement3); 
    190         $this->mockXMLStreamWriter->expects($this->exactly(5))->method('writeStartElement'); 
    191         $this->mockXMLStreamWriter->expects($this->exactly(4))->method('writeEndElement'); 
     190        $this->mockXMLStreamWriter->expects($this->once())->method('writeStartElement'); 
     191        $this->mockXMLStreamWriter->expects($this->never())->method('writeEndElement'); 
    192192        $this->mockXMLSerializer->expects($this->at(0)) 
    193193                                ->method('serialize')