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

Documentation generated on Wed, 04 Jan 2017 22:56:29 +0100 by phpDocumentor 1.4.3