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 integer $overwrite false or 0 if the value should be set only if it doesn't still exist
  106.      *                           -1 to add the header with the existing values
  107.      *                           true or 1 to replace the existing header
  108.      */
  109.     public function addHttpHeader($htype, $hcontent, $overwrite=true){
  110.         if (isset($this->_httpHeaders[$htype])) {
  111.             $val = $this->_httpHeaders[$htype];
  112.             if ($overwrite === -1) {
  113.                 if (!is_array($val))
  114.                     $this->_httpHeaders[$htype] = array($val, $hcontent);
  115.                 else
  116.                     $this->_httpHeaders[$htype][] = $hcontent;
  117.                 return;
  118.             }
  119.             else if (!$overwrite) {
  120.                 return;
  121.             }
  122.         }
  123.         $this->_httpHeaders[$htype]=$hcontent;
  124.     }
  125.  
  126.     /**
  127.      * delete all http headers
  128.      */
  129.     public function clearHttpHeaders(){
  130.         $this->_httpHeaders = array();
  131.         $this->_httpStatusCode ='200';
  132.         $this->_httpStatusMsg ='OK';
  133.     }
  134.  
  135.     /**
  136.      * set the http status code for the http header
  137.      * @param string $code  the status code (200, 404...)
  138.      * @param string $msg the message following the status code ("OK", "Not Found"..)
  139.      */
  140.     public function setHttpStatus($code, $msg){ $this->_httpStatusCode=$code; $this->_httpStatusMsg=$msg;}
  141.  
  142.     /**
  143.      * send http headers
  144.      */
  145.     protected function sendHttpHeaders(){
  146.         header( ( isset($_SERVER['SERVER_PROTOCOL']) && !$this->forcedHttpVersion ?
  147.                         $_SERVER['SERVER_PROTOCOL'] :
  148.                         'HTTP/'.$this->httpVersion ) .
  149.                 ' '.$this->_httpStatusCode.' '.$this->_httpStatusMsg );
  150.         foreach($this->_httpHeaders as $ht=>$hc) {
  151.             if (is_array($hc)) {
  152.                 foreach ($hc as $val) {
  153.                     header($ht.': '.$val);
  154.                 }
  155.             }
  156.             else
  157.                 header($ht.': '.$hc);
  158.         }
  159.         $this->_httpHeadersSent=true;
  160.         /*
  161.         header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
  162.         header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
  163.         header("Cache-Control: no-store, no-cache, must-revalidate");
  164.         header("Cache-Control: post-check=0, pre-check=0", false);
  165.         header("Pragma: no-cache");
  166.         */
  167.     }

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