Source for file jResponseXml.class.php

Documentation is available at jResponseXml.class.php

  1. <?php
  2. /**
  3. @package     jelix
  4. @subpackage  core_response
  5. @author      Loic Mathaud
  6. @contributor Laurent Jouanneau
  7. @contributor Sylvain de Vathaire
  8. @copyright   2005-2006 loic Mathaud
  9. @copyright   2007-2009 Laurent Jouanneau
  10. @copyright   2008 Sylvain de Vathaire
  11. @link        http://www.jelix.org
  12. @licence     GNU Lesser General Public Licence see LICENCE file or http://www.gnu.org/licenses/lgpl.html
  13. */
  14.  
  15. /**
  16. *
  17. */
  18. require_once(JELIX_LIB_PATH.'tpl/jTpl.class.php');
  19.  
  20. /**
  21. * XML response generator
  22. @package  jelix
  23. @subpackage core_response
  24. */
  25. class jResponseXml extends jResponse {
  26.     /**
  27.     * Id of the response
  28.     * @var string 
  29.     */
  30.     protected $_type = 'xml';
  31.  
  32.  
  33.     /**
  34.      * the template container
  35.      * @var jTpl 
  36.      */
  37.     public $content = null;
  38.  
  39.     /**
  40.      * selector of the template file
  41.      * @var string 
  42.      */
  43.     public $contentTpl = '';
  44.  
  45.     /**
  46.      * The charset
  47.      * @var string 
  48.      */
  49.     protected $_charset;
  50.  
  51.     private $_css array();
  52.     private $_xsl array();
  53.  
  54.     /**
  55.      * says what part of the html head has been send
  56.      * @var integer 
  57.      */
  58.     protected $_headSent = 0;
  59.  
  60.     /** 
  61.      * say if the XML header have to be generated
  62.      * Usefull if the XML string to output already contain the XML header
  63.      * @var boolean 
  64.      * @since 1.0.3
  65.      */
  66.     public $sendXMLHeader = TRUE;
  67.  
  68.  
  69.     /**
  70.     * constructor..
  71.     */
  72.     function __construct (){
  73.         global $gJConfig;
  74.         $this->_charset = $gJConfig->charset;
  75.         $this->content = new jTpl();
  76.         parent::__construct();
  77.     }
  78.  
  79.     /**
  80.      * generate the xml content and send it to the browser
  81.      * @return boolean    true if ok
  82.      */
  83.     final public function output(){
  84.         $this->_httpHeaders['Content-Type']='text/xml;charset='.$this->_charset;
  85.         $this->sendHttpHeaders();
  86.  
  87.         if($this->sendXMLHeader){
  88.             echo '<?xml version="1.0" encoding="'$this->_charset .'"?>'"\n";
  89.             $this->outputXmlHeader();
  90.         }
  91.         $this->_headSent = true;
  92.  
  93.  
  94.         if(is_string($this->content)) {
  95.             // utilisation chaine de caractères xml
  96.             $xml_string $this->content;
  97.         }else if (!empty($this->contentTpl)) {
  98.             // utilisation d'un template
  99.             $xml_string $this->content->fetch($this->contentTpl);
  100.         }else{
  101.             throw new jException('jelix~errors.repxml.no.content');
  102.         }
  103.  
  104.         if (simplexml_load_string($xml_string)) {
  105.             echo $xml_string;
  106.         else {
  107.             // xml mal formé
  108.             throw new jException('jelix~errors.repxml.invalid.content');
  109.         }
  110.         return true;
  111.     }
  112.  
  113.     /**
  114.      * output errors if any
  115.      */
  116.     final public function outputErrors({
  117.         if (!$this->_headSent{
  118.             if (!$this->_httpHeadersSent{
  119.                 header("HTTP/1.0 500 Internal Server Error");
  120.                 header('Content-Type: text/xml;charset='.$this->_charset);
  121.             }
  122.             echo '<?xml version="1.0" encoding="'$this->_charset .'"?>';
  123.         }
  124.  
  125.         echo '<errors xmlns="http://jelix.org/ns/xmlerror/1.0">';
  126.         if ($this->hasErrors()) {
  127.             foreach ($GLOBALS['gJCoord']->errorMessages  as $e{
  128.                 echo '<error xmlns="http://jelix.org/ns/xmlerror/1.0" type="'$e[0.'" code="'$e[1.'" file="'$e[3.'" line="'$e[4.'">';
  129.                 echo htmlspecialchars($e[2]ENT_NOQUOTES$this->_charset);
  130.                 if ($e[5])
  131.                     echo "\n".htmlspecialchars($e[5]ENT_NOQUOTES$this->_charset);
  132.                 echo '</error>'"\n";
  133.             }
  134.         else {
  135.             echo '<error>Unknown Error</error>';
  136.         }
  137.         echo '</errors>';
  138.     }
  139.  
  140.     /**
  141.      * to add a link to css stylesheet
  142.      * @since 1.0b1
  143.      */
  144.     public function addCSSStyleSheet($src$params array()) {
  145.         if (!isset($this->_css[$src])) {
  146.             $this->_css[$src$params;
  147.         }
  148.     }
  149.  
  150.     /**
  151.      * to add a link to an xsl stylesheet
  152.      * @since 1.0b1
  153.      */
  154.     public function addXSLStyleSheet($src$params array()) {
  155.         if (!isset($this->_xsl[$src])) {
  156.             $this->_xsl[$src$params;
  157.         }
  158.     }
  159.  
  160.     /**
  161.      * output all processing instructions (stylesheet, xsl..) before the XML content
  162.      */
  163.     protected function outputXmlHeader({
  164.         // XSL stylesheet
  165.         foreach ($this->_xsl as $src => $params{
  166.             //the extra params we may found in there.
  167.             $more '';
  168.             foreach ($params as $param_name => $param_value{
  169.                 $more .= $param_name.'="'htmlspecialchars($param_value).'" ';
  170.             }
  171.             echo ' <?xml-stylesheet type="text/xsl" href="'$src,'" '$more,' ?>';
  172.         }
  173.  
  174.         // CSS stylesheet
  175.         foreach ($this->_css as $src => $params{
  176.             //the extra params we may found in there.
  177.             $more '';
  178.             foreach ($params as $param_name => $param_value{
  179.                 $more .= $param_name.'="'htmlspecialchars($param_value).'" ';
  180.             }
  181.             echo ' <?xml-stylesheet type="text/css" href="'$src,'" '$more,' ?>';
  182.         }
  183.     }
  184. }

Documentation generated on Thu, 19 Sep 2013 00:07:01 +0200 by phpDocumentor 1.4.3