Source for file jZone.class.php

Documentation is available at jZone.class.php

  1. <?php
  2. /**
  3. @package    jelix
  4. @subpackage utils
  5. @author     Croes GĂ©rald, Laurent Jouanneau
  6. @contributor Laurent Jouanneau
  7. @copyright  2001-2005 CopixTeam, 2005-2006 Laurent Jouanneau
  8. *
  9. *  This class was get originally from the Copix project (CopixZone, Copix 2.3dev20050901, http://www.copix.org)
  10. *  Some lines of code are copyrighted 2001-2005 CopixTeam (LGPL licence).
  11. *  Initial authors of this Copix classes are Gerald Croes and Laurent Jouanneau,
  12. *  and this class was adapted/improved for Jelix by Laurent Jouanneau
  13. *
  14. @link        http://www.jelix.org
  15. @licence  http://www.gnu.org/licenses/lgpl.html GNU Lesser General Public Licence, see LICENCE file
  16. */
  17.  
  18. /**
  19.  * jZone is a representation of a zone in an response content, in a html page.
  20.  * A user zone should inherits from jZone. jZone provide a cache mecanism.
  21.  * @package    jelix
  22.  * @subpackage utils
  23.  */
  24. class jZone {
  25.     /**
  26.     * If we're using cache on this zone
  27.     * You should override it in your class if you want activate the cache
  28.     * @var boolean 
  29.     */
  30.     protected $_useCache = false;
  31.  
  32.     /**
  33.      * cache timeout (seconds).
  34.      * set to 0 if you want to delete cache manually.
  35.      * @var integer 
  36.      */
  37.     protected $_cacheTimeout = 0;
  38.  
  39.     /**
  40.     * list of zone parameters
  41.     * @var array 
  42.     */
  43.     protected $_params;
  44.  
  45.     /**
  46.      * template selector
  47.      * If you want to use a template for your zone, set its name in this property
  48.      * in your zone, and override _prepareTpl. Else, keep it to empty string, and
  49.      * override _createContent
  50.      * @var string 
  51.      */
  52.     protected $_tplname='';
  53.  
  54.     /**
  55.      * says the type of the output of the template, in the case of the result
  56.      * of the zone is not used in a response in the same output type.
  57.      * For example, the output type of a ajax response is text, but the template
  58.      * can contains html, so the template should be treated as html content,
  59.      * so you should put 'html' here.
  60.      * If empty, the output type will be the output type of the current response.
  61.      * @var string 
  62.      * @see jTpl::fetch
  63.      */
  64.     protected $_tplOuputType='';
  65.  
  66.     /**
  67.      * the jtpl object created automatically by jZone if you set up _tplname
  68.      * you can use it in _prepareTpl
  69.      * @var jTpl 
  70.      */
  71.     protected $_tpl=null;
  72.  
  73.     /**
  74.      * When the cache system is activated, says if the cache should be generated or not
  75.      * you set it to false in _createContent or _prepareTpl, in specific case.
  76.      * @var boolean 
  77.      */
  78.     protected $_cancelCache=false;
  79.  
  80.     /**
  81.      * constructor.
  82.      */
  83.     function __construct($params=array()){
  84.         $this->_params = $params;
  85.     }
  86.  
  87.     /**
  88.     * get the content of a zone
  89.     * @param string $name zone selector
  90.     * @param array $params parameters for the zone
  91.     * @return string the generated content of the zone
  92.     * @since 1.0b1
  93.     */
  94.     public static function get ($name$params=array ()){
  95.         return self::_callZone($name'getContent'$params);
  96.     }
  97.  
  98.     /**
  99.     * clear a specific cache of a zone
  100.     * @param string $name zone selector
  101.     * @param array $params parameters for the zone
  102.     * @since 1.0b1
  103.     */
  104.     public static function clear ($name$params=array ()){
  105.         return self::_callZone($name'clearCache'$params);
  106.     }
  107.  
  108.     /**
  109.     * clear all zone cache or all cache of a specific zone
  110.     * @param string $name zone selector
  111.     * @since 1.0b1
  112.     */
  113.     public static function clearAll($name=''){
  114.         $dir JELIX_APP_TEMP_PATH.'zonecache/';
  115.         if(!file_exists($dir)) return;
  116.  
  117.         if($name !=''){
  118.             $sel new jSelectorZone($name);
  119.             $fic '~'.$sel->module.'~'.strtolower($sel->resource).'zone~';
  120.         }else{
  121.             $fic '~';
  122.         }
  123.  
  124.         if ($dh opendir($dir)) {
  125.            while (($file readdir($dh)) !== false{
  126.                if(strpos($file$fic=== 0){
  127.                    unlink($dir.$file);
  128.                }
  129.            }
  130.            closedir($dh);
  131.        }
  132.     }
  133.  
  134.     /**
  135.     * gets the value of a parameter, if defined. Returns the default value instead.
  136.     * @param string $paramName the parameter name
  137.     * @param mixed $defaultValue the parameter default value
  138.     * @return mixed the param value
  139.     */
  140.     public function getParam ($paramName$defaultValue=null){
  141.         return array_key_exists ($paramName$this->_params$this->_params[$paramName$defaultValue;
  142.     }
  143.  
  144.     /**
  145.     * get the zone content
  146.     * Return the cache content if it is activated and if it's exists, or call _createContent
  147.     * @return string  zone content
  148.     */
  149.     public function getContent (){
  150.         if ($this->_useCache){
  151.             $f $this->_getCacheFile();
  152.             if(file_exists($f)){
  153.                 if($this->_cacheTimeout > 0){
  154.                     clearstatcache();
  155.                     if(time(filemtime($f$this->_cacheTimeout){
  156.                         // timeout : regenerate the cache
  157.                         unlink($f);
  158.                         $this->_cancelCache=false;
  159.                         $content=$this->_createContent();
  160.                         if(!$this->_cancelCache){
  161.                             jFile::write($f,$content);
  162.                         }
  163.                         return $content;
  164.                     }
  165.                 }
  166.                 if($this->_tplname != ''){
  167.                     $this->_tpl = new jTpl();
  168.                     $this->_tpl->assign($this->_params);
  169.                     $this->_tpl->meta($this->_tplname$this->_tplOuputType);
  170.                 }
  171.                 $content file_get_contents($f);
  172.             }else{
  173.                 $this->_cancelCache=false;
  174.                 $content=$this->_createContent();
  175.                 if(!$this->_cancelCache){
  176.                     jFile::write($f,$content);
  177.                 }
  178.             }
  179.         }else{
  180.             $content=$this->_createContent();
  181.         }
  182.         return $content;
  183.     }
  184.  
  185.     /**
  186.     * Delete the cache of the current zone
  187.     */
  188.     public function clearCache (){
  189.         if ($this->_useCache){
  190.             $f $this->_getCacheFile();
  191.             if(file_exists($f)){
  192.                 unlink($f);
  193.             }
  194.         }
  195.     }
  196.  
  197.     /**
  198.     * create the content of the zone
  199.     * by default, it uses a template, and so prepare a jtpl object to use in _prepareTpl.
  200.     * zone parameters are automatically assigned in the template
  201.     * If you don't want a template, override it in your class
  202.     * @return string generated content
  203.     */
  204.     protected function _createContent (){
  205.         $this->_tpl = new jTpl();
  206.         $this->_tpl->assign($this->_params);
  207.         $this->_prepareTpl();
  208.         if($this->_tplname == ''return '';
  209.         return $this->_tpl->fetch($this->_tplname$this->_tplOuputType);
  210.     }
  211.  
  212.     /**
  213.      * override this method if you want do additionnal thing on the template object
  214.      * Example : do access to a dao object.. Note : the template object
  215.      * is in the _tpl property
  216.      */
  217.     protected function _prepareTpl(){
  218.  
  219.     }
  220.  
  221.     /**
  222.     * create the cache filename
  223.     * @return string the filename
  224.     */
  225.     private function _getCacheFile (){
  226.         $module jContext::get ();
  227.         $ar $this->_params;
  228.         ksort($ar);
  229.         $id=md5(serialize($ar));
  230.         return JELIX_APP_TEMP_PATH.'zonecache/~'.$module.'~'.strtolower(get_class($this)).'~'.$id.'.php';
  231.     }
  232.  
  233.    /**
  234.     * instancy a zone object, and call one of its methods
  235.     * @param string $name zone selector
  236.     * @param string $method method name
  237.     * @param array  $params arguments for the method
  238.     * @return mixed the result returned by the method
  239.     */
  240.     private static function  _callZone($name,$method&$params){
  241.  
  242.         $sel new jSelectorZone($name);
  243.         jContext::push ($sel->module);
  244.  
  245.         $fileName $sel->getPath();
  246.         require_once($fileName);
  247.         $className $sel->resource.'Zone';
  248.         $zone new $className ($params);
  249.         $toReturn $zone->$method ();
  250.  
  251.         jContext::pop ();
  252.         return $toReturn;
  253.     }
  254. }
  255. ?>

Documentation generated on Wed, 07 Sep 2011 13:48:16 +0200 by phpDocumentor 1.4.3