Source for file jResponse.class.php

Documentation is available at jResponse.class.php

  1. <?php
  2. /**
  3. @package     jelix
  4. @subpackage  core
  5. @author      Laurent Jouanneau
  6. @contributor Julien Issler, Brice Tence
  7. @copyright   2005-2010 Laurent Jouanneau
  8. @copyright   2010 Julien Issler, 2011 Brice Tence
  9. @link        http://www.jelix.org
  10. @licence     GNU Lesser General Public Licence see LICENCE file or http://www.gnu.org/licenses/lgpl.html
  11. */
  12.  
  13. /**
  14. * base class for response object
  15. * A response object is responsible to generate a content in a specific format.
  16. @package  jelix
  17. @subpackage core
  18. */
  19. abstract class jResponse {
  20.  
  21.     /**
  22.     * @var string ident of the response type
  23.     */
  24.     protected  $_type = null;
  25.  
  26.     /**
  27.      * @var array list of http headers that will be send to the client
  28.      */
  29.     protected $_httpHeaders = array();
  30.  
  31.     /**
  32.      * @var boolean indicates if http headers have already been sent to the client
  33.      */
  34.     protected $_httpHeadersSent = false;
  35.  
  36.     /**
  37.      * @var string  the http status code to send
  38.      */
  39.     protected $_httpStatusCode ='200';
  40.     /**
  41.      * @var string  the http status message to send
  42.      */
  43.     protected $_httpStatusMsg ='OK';
  44.  
  45.     public $httpVersion = '1.1';
  46.     public $forcedHttpVersion = false;
  47.  
  48.     /**
  49.     * constructor
  50.     */
  51.     function __construct({
  52.  
  53.         if$GLOBALS['gJConfig']->httpVersion != "" {
  54.             $this->httpVersion = $GLOBALS['gJConfig']->httpVersion;
  55.             $this->forcedHttpVersion = true;
  56.         }
  57.     }
  58.  
  59.     /**
  60.      * Send the response in the correct format. If errors or exceptions appears
  61.      * during this method, outputErrors will be called. So the
  62.      * the content should be generated using the output buffer if errors can
  63.      * be appeared during this generation. Be care of http headers.
  64.      *
  65.      * @return boolean    true if the output is ok
  66.      * @internal should take care about errors
  67.      */
  68.     abstract public function output();
  69.  
  70.     /**
  71.      * Send a response with a generic error message.
  72.      */
  73.     public function outputErrors({
  74.         // if accept text/html
  75.         if (isset($_SERVER['HTTP_ACCEPT']&& strstr($_SERVER['HTTP_ACCEPT'],'text/html')) {
  76.             require_once(JELIX_LIB_CORE_PATH.'responses/jResponseBasicHtml.class.php');
  77.             $response new jResponseBasicHtml();
  78.             $response->outputErrors();
  79.         }
  80.         else {
  81.             // output text response
  82.             header("HTTP/{$this->httpVersion} 500 Internal jelix error");
  83.             header('Content-type: text/plain');
  84.             echo $GLOBALS['gJCoord']->getGenericErrorMessage();
  85.         }
  86.     }
  87.  
  88.     /**
  89.      * return the response type name
  90.      * @return string the name
  91.      */
  92.     public final function getType(){ return $this->_type;}
  93.  
  94.     /**
  95.      * return the format type name (eg the family type name)
  96.      * @return string the name
  97.      */
  98.     public function getFormatType(){ return $this->_type;}
  99.  
  100.     /**
  101.      * add an http header to the response.
  102.      * will be send during the output of the response
  103.      * @param string $htype the header type ("Content-Type", "Date-modified"...)
  104.      * @param string $hcontent value of the header type
  105.      * @param boolean $overwrite false if the value should be set only if it doesn't still exist
  106.      */
  107.     public function addHttpHeader($htype, $hcontent, $overwrite=true){
  108.         if(!$overwrite && isset($this->_httpHeaders[$htype]))
  109.             return;
  110.         $this->_httpHeaders[$htype]=$hcontent;
  111.     }
  112.  
  113.     /**
  114.      * delete all http headers
  115.      */
  116.     public function clearHttpHeaders(){
  117.         $this->_httpHeaders = array();
  118.         $this->_httpStatusCode ='200';
  119.         $this->_httpStatusMsg ='OK';
  120.     }
  121.  
  122.     /**
  123.      * set the http status code for the http header
  124.      * @param string $code  the status code (200, 404...)
  125.      * @param string $msg the message following the status code ("OK", "Not Found"..)
  126.      */
  127.     public function setHttpStatus($code, $msg){ $this->_httpStatusCode=$code; $this->_httpStatusMsg=$msg;}
  128.  
  129.     /**
  130.      * send http headers
  131.      */
  132.     protected function sendHttpHeaders(){
  133.         header( ( isset($_SERVER['SERVER_PROTOCOL']) && !$this->forcedHttpVersion ?
  134.                         $_SERVER['SERVER_PROTOCOL'] :
  135.                         'HTTP/'.$this->httpVersion ) .
  136.                 ' '.$this->_httpStatusCode.' '.$this->_httpStatusMsg );
  137.         foreach($this->_httpHeaders as $ht=>$hc)
  138.             header($ht.': '.$hc);
  139.         $this->_httpHeadersSent=true;
  140.         /*
  141.         header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
  142.         header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
  143.         header("Cache-Control: no-store, no-cache, must-revalidate");
  144.         header("Cache-Control: post-check=0, pre-check=0", false);
  145.         header("Pragma: no-cache");
  146.         */
  147.     }

Documentation generated on Mon, 19 Sep 2011 14:13:20 +0200 by phpDocumentor 1.4.3