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-2010 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.      * the template container
  34.      * @var jTpl 
  35.      */
  36.     public $content = null;
  37.  
  38.     /**
  39.      * selector of the template file
  40.      * @var string 
  41.      */
  42.     public $contentTpl = '';
  43.  
  44.     /**
  45.      * if true, verify validity of the xml content, before to output it
  46.      * @var boolean 
  47.      */
  48.     public $checkValidity = false;
  49.  
  50.     /**
  51.      * The charset
  52.      * @var string 
  53.      */
  54.     protected $_charset;
  55.  
  56.     private $_css array();
  57.     private $_xsl array();
  58.  
  59.     /** 
  60.      * say if the XML header have to be generated
  61.      * Usefull if the XML string to output already contain the XML header
  62.      * @var boolean 
  63.      * @since 1.0.3
  64.      */
  65.     public $sendXMLHeader = TRUE;
  66.  
  67.     /**
  68.     * constructor..
  69.     */
  70.     function __construct (){
  71.         global $gJConfig;
  72.         $this->_charset = $gJConfig->charset;
  73.         $this->content = new jTpl();
  74.         parent::__construct();
  75.     }
  76.  
  77.     /**
  78.      * generate the xml content and send it to the browser
  79.      * @return boolean    true if ok
  80.      */
  81.     final public function output(){
  82.         $this->_httpHeaders['Content-Type']='text/xml;charset='.$this->_charset;
  83.  
  84.         if(is_string($this->content)) {
  85.             // utilisation chaine de caractères xml
  86.             $xml_string $this->content;
  87.         }else if (!empty($this->contentTpl)) {
  88.             // utilisation d'un template
  89.             $xml_string $this->content->fetch($this->contentTpl);
  90.         }else{
  91.             throw new jException('jelix~errors.repxml.no.content');
  92.         }
  93.  
  94.         if ($this->checkValidity{
  95.             if (!simplexml_load_string($xml_string)) {
  96.                 // xml mal-formed
  97.                 throw new jException('jelix~errors.repxml.invalid.content');
  98.             }
  99.         }
  100.  
  101.         $this->sendHttpHeaders();
  102.         if($this->sendXMLHeader){
  103.             echo '<?xml version="1.0" encoding="'$this->_charset .'"?>'"\n";
  104.             $this->outputXmlHeader();
  105.         }
  106.         echo $xml_string;
  107.  
  108.         return true;
  109.     }
  110.  
  111.     /**
  112.      * output errors if any
  113.      */
  114.     final public function outputErrors({
  115.         global $gJConfig;
  116.         header("HTTP/1.0 500 Internal Jelix Error");
  117.         header('Content-Type: text/plain;charset='.$gJConfig->charset);
  118.         echo $GLOBALS['gJCoord']->getGenericErrorMessage();
  119.     }
  120.  
  121.     /**
  122.      * to add a link to css stylesheet
  123.      * @since 1.0b1
  124.      */
  125.     public function addCSSStyleSheet($src$params array()) {
  126.         if (!isset($this->_css[$src])) {
  127.             $this->_css[$src$params;
  128.         }
  129.     }
  130.  
  131.     /**
  132.      * to add a link to an xsl stylesheet
  133.      * @since 1.0b1
  134.      */
  135.     public function addXSLStyleSheet($src$params array()) {
  136.         if (!isset($this->_xsl[$src])) {
  137.             $this->_xsl[$src$params;
  138.         }
  139.     }
  140.  
  141.     /**
  142.      * output all processing instructions (stylesheet, xsl..) before the XML content
  143.      */
  144.     protected function outputXmlHeader({
  145.         // XSL stylesheet
  146.         foreach ($this->_xsl as $src => $params{
  147.             //the extra params we may found in there.
  148.             $more '';
  149.             foreach ($params as $param_name => $param_value{
  150.                 $more .= $param_name.'="'htmlspecialchars($param_value).'" ';
  151.             }
  152.             echo ' <?xml-stylesheet type="text/xsl" href="'$src,'" '$more,' ?>';
  153.         }
  154.  
  155.         // CSS stylesheet
  156.         foreach ($this->_css as $src => $params{
  157.             //the extra params we may found in there.
  158.             $more '';
  159.             foreach ($params as $param_name => $param_value{
  160.                 $more .= $param_name.'="'htmlspecialchars($param_value).'" ';
  161.             }
  162.             echo ' <?xml-stylesheet type="text/css" href="'$src,'" '$more,' ?>';
  163.         }
  164.     }
  165. }

Documentation generated on Wed, 24 Sep 2014 22:01:45 +0200 by phpDocumentor 1.4.3