Changeset 206

Show
Ignore:
Timestamp:
02/03/07 01:10:51 (1 year ago)
Author:
mikey
Message:

added error handling to replace default error message output by php
still needs some tweaking for the xsl-template of changing the error message into a div container

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/experiments/general/xsl/main_home.xml

    r205 r206  
    77    <stub:link page="testlinkPage">Das ist ein Stubbles-Link</stub:link> 
    88    <stub:include href="parts.xml" part="frank"/> 
     9    <stub:include href="parts.xml" part="schst"/> 
    910    <stub:comment>Das ist ein Kommentar</stub:comment> 
    1011    <stub:script> 
  • trunk/experiments/general/xsl/parts.xml

    r205 r206  
    99    Nico Steiner 
    1010  </part> 
     11  <part name="schst"> 
     12    Stephan Schmidt 
     13  </part> 
    1114</parts> 
  • trunk/experiments/general/xsl/parts2.xml

    r203 r206  
    22<parts 
    33    xmlns:stub="http://stubbles.org/stub" 
    4   exclude-result-prefixes="stub"> 
    5 <part name="frank"> 
    6    <lang id="default"> 
    7     Frank Kleine 
    8   </lang> 
    9 </part> 
    10 <part name="nico"> 
    11    <lang id="default"> 
    12     Nico Steiner 
    13   </lang> 
    14 </part> 
     4    exclude-result-prefixes="stub"> 
     5  <part name="frank"> 
     6    <lang id="default"> 
     7      Frank Kleine 
     8    </lang> 
     9  </part> 
     10  <part name="nico"> 
     11    <lang id="default"> 
     12      <stub:include href="parts.xml" part="nico"/> 
     13    </lang> 
     14  </part> 
    1515</parts> 
  • trunk/experiments/general/xsl/stub.xsl

    r205 r206  
    1616  <xsl:template match="stub:script"> 
    1717    <script type="text/javascript"><xsl:copy-of select="@*"/>       
    18        <xsl:comment><xsl:copy-of select="node()"/>//</xsl:comment> 
     18      <xsl:comment><xsl:copy-of select="node()"/>//</xsl:comment> 
    1919    </script> 
     20  </xsl:template> 
     21   
     22  <xsl:template match="stub:error"> 
     23    <div class="stubTransformError"> 
     24      <xsl:copy-of select="node()"/> 
     25    </div> 
    2026  </xsl:template> 
    2127   
     
    8692    <xsl:param name="href" select="@href"/> 
    8793    <xsl:param name="part" select="@part"/>     
    88     <xi:include href="xinc://{$href}#xpointer(/parts/part[@name='{$part}']/node())"> 
     94    <xi:include href="xinc://{$href}?part={$part}#xpointer(/parts/part[@name='{$part}']/node())"> 
    8995      <xi:fallback> 
    9096        ERROR: Could not include part <xsl:value-of select="$part"/> in file <xsl:value-of select="$href"/> 
     
    117123      <xsl:otherwise> 
    118124        <small> 
    119            <xsl:text>[ No content for </xsl:text> 
    120         <xsl:value-of select="$lang"/> 
    121            <xsl:text> - specify at least language default ]</xsl:text> 
     125          <xsl:text>[ No content for </xsl:text> 
     126          <xsl:value-of select="$lang"/> 
     127            <xsl:text> - specify at least language default ]</xsl:text> 
    122128        </small> 
    123129      </xsl:otherwise> 
  • trunk/src/main/php/net/stubbles/xml/stubXMLXIncludeStreamWrapper.php

    r204 r206  
    4747    protected $cachedFileName; 
    4848    /** 
    49      * x pointer to retrieve only a part of the file 
    50      * 
    51      * @var  string 
    52      */ 
    53     protected $xPointer
     49     * the part that will be included 
     50     * 
     51     * @var  string 
     52     */ 
     53    protected $part
    5454    /** 
    5555     * current file pointer 
     
    127127    protected function processFile() 
    128128    { 
     129        $previousErrorHandling = libxml_use_internal_errors(true); 
    129130        $xslProcessor = clone self::$xslProcessor; 
    130131        $xslProcessor->setXMLDocument(DOMDocument::load($this->fileName)); 
    131132        $resultDoc = $xslProcessor->transformToDoc(); 
     133        // we save first to prevent a infinite loop in  case of recursions 
     134        $resultDoc->save($this->cachedFileName); 
    132135        $resultDoc->xinclude(); 
     136        $errors = libxml_get_errors(); 
     137        if (count($errors) > 0) { 
     138            unlink($this->cachedFileName); 
     139            libxml_clear_errors(); 
     140            foreach ($errors as $error) { 
     141               switch ($error->level) { 
     142                   case LIBXML_ERR_WARNING: 
     143                       $element = $resultDoc->createElement('stub:error', 'Warning: ' . trim($error->message) . (($error->file) ? (' in file ' . $error->file) : ('')) . ' on line ' . $error->line . ' in column ' . $error->column); 
     144                       $element->setAttribute('stub:errorType', 'warning'); 
     145                       if (null != $this->part && strlen($this->part) > 0) { 
     146                           $xpath = new DOMXPath($resultDoc); 
     147                           $entry = $xpath->query("/parts/part[@name='" . $this->part ."']/node()")->item(0); 
     148                           $entry->appendChild($element); 
     149                       } else { 
     150                           $resultDoc->documentElement->appendChild($element); 
     151                       } 
     152                       break; 
     153                   case LIBXML_ERR_ERROR: 
     154                       $element = $resultDoc->createElement('stub:error', 'Error: ' . trim($error->message) . (($error->file) ? (' in file ' . $error->file) : ('')) . ' on line ' . $error->line . ' in column ' . $error->column); 
     155                       $element->setAttribute('stub:errorType', 'error'); 
     156                       if (null != $this->part && strlen($this->part) > 0) { 
     157                           $xpath = new DOMXPath($resultDoc); 
     158                           $entry = $xpath->query("/parts/part[@name='" . $this->part ."']")->item(0); 
     159                           $entry->appendChild($element); 
     160                       } else { 
     161                           $resultDoc->documentElement->appendChild($element); 
     162                       } 
     163                       break; 
     164                   case LIBXML_ERR_FATAL: 
     165                       throw new stubXMLException('Fatal error: ' . trim($error->message) . (($error->file) ? (' in file ' . $error->file) : ('')) . ' on line ' . $error->line . ' in column ' . $error->column); 
     166               } 
     167            } 
     168        } 
     169         
    133170        $resultDoc->save($this->cachedFileName); 
     171        libxml_use_internal_errors($previousErrorHandling); 
    134172    } 
    135173 
     
    191229    protected function parsePath($path) 
    192230    { 
    193         list($fileName, $xPointer) = sscanf($path, 'xinc://%[^#]#xpointer(%[^)]'); 
    194         $this->fileName            = $fileName; 
    195         $this->cachedFileName      = self::$cachePath . '/xml/' . $fileName; 
    196         $this->xPointer            = $xPointer
     231        list($fileName, $part) = sscanf($path, 'xinc://%[^?]?part=%[^$]'); 
     232        $this->fileName        = $fileName; 
     233        $this->cachedFileName  = self::$cachePath . '/xml/' . $fileName; 
     234        $this->part            = $part
    197235    } 
    198236}