Code Coverage
 
Classes and Traits
Functions and Methods
Lines
Total
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
11 / 11
CRAP
100.00% covered (success)
100.00%
53 / 53
_layout
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
11 / 11
17
100.00% covered (success)
100.00%
53 / 53
 __construct
100.00% covered (success)
100.00%
1 / 1
2
100.00% covered (success)
100.00%
5 / 5
 __set
100.00% covered (success)
100.00%
1 / 1
1
100.00% covered (success)
100.00%
3 / 3
 __get
100.00% covered (success)
100.00%
1 / 1
2
100.00% covered (success)
100.00%
4 / 4
 __isset
100.00% covered (success)
100.00%
1 / 1
1
100.00% covered (success)
100.00%
1 / 1
 __unset
100.00% covered (success)
100.00%
1 / 1
1
100.00% covered (success)
100.00%
2 / 2
 setLayout
100.00% covered (success)
100.00%
1 / 1
1
100.00% covered (success)
100.00%
3 / 3
 add
100.00% covered (success)
100.00%
1 / 1
1
100.00% covered (success)
100.00%
3 / 3
 addModule
100.00% covered (success)
100.00%
1 / 1
1
100.00% covered (success)
100.00%
6 / 6
 show
100.00% covered (success)
100.00%
1 / 1
2
100.00% covered (success)
100.00%
8 / 8
 getOutput
100.00% covered (success)
100.00%
1 / 1
2
100.00% covered (success)
100.00%
11 / 11
 load
100.00% covered (success)
100.00%
1 / 1
3
100.00% covered (success)
100.00%
7 / 7
<?php
/*
This file is part of Mkframework.
Mkframework is free software: you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License as published by
the Free Software Foundation, either version 3 of the License.
Mkframework is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public License
along with Mkframework.  If not, see <http://www.gnu.org/licenses/>.
*/
/**
* classe _layout pour gerer le layout
* @author Mika
* @link http://mkf.mkdevs.com/
*/
class _layout{
    
    private $_tContent;
    private $_sLayout;
    private $_tVar;
    
    /** 
    * constructeur
    * @access public
    * @param string $sLayout nom du layout a utiliser
    */
    public function __construct($sLayout=null){
        
        $this->_tVar=array();
    
        /*LOG*/_root::getLog()->info('--layout: initialisation ['.$sLayout.']');
        if($sLayout==null){ throw new Exception('layout non definit dans le constructeur :(');}
        $this->setLayout($sLayout);
    }
    
    /**
    * setter
    */
    public function __set($sVar, $sVal){
        /*LOG*/_root::getLog()->info('---layout: assignation ['.$sVar.']');
        $this->_tVar[$sVar]=$sVal;
    }
    /** 
    * getter
    */
    public function __get($sVar){
        if(!array_key_exists($sVar,$this->_tVar)){
            /*LOG*/_root::getLog()->error('Variable '.$sVar.' inexistante dans le layout '.$this->_sLayout);
            throw new Exception('Variable '.$sVar.' inexistante dans le layout '.$this->_sLayout);
        }else{
            return $this->_tVar[$sVar];
        }
    }
    
    /** 
    * isset
    */
    public function __isset($sVar){
        return isset($this->_tVar[$sVar]);
    }
    
    /** 
    * unset
    */
    public function __unset($sVar){
        unset($this->_tVar[$sVar]);
    }
    
    /** 
    * forcer le layout
    * @access public
    * @param string $sLayout nom du layout a utiliser
    */
    public function setLayout($sLayout){
        /*LOG*/_root::getLog()->info('-layout: choix de ['._root::getConfigVar('path.layout').$sLayout.'.php]');
        $this->_sLayout=$sLayout;
    }
    
    /** 
    * ajoute un objet _tpl $oTpl a l'emplacement $sPlace
    * @access public
    * @param string $sPlace emplacement
    * @param _tpl $oTpl objet _tpl
    */
    public function add($sPlace,$oTpl){
        /*LOG*/_root::getLog()->info('-layout: ajout appel vue ['.$oTpl->getPath().'] a la place ['.$sPlace.']');
        $this->_tContent[$sPlace][]=$oTpl;
    }
    /** 
    * ajoute l'appel a un module (module::action) a l'emplacement $sPlace
    * @access public
    * @param string $sPlace emplacement
    * @param string $sAppel appel du module module::action
    */
    public function addModule($sPlace,$sAppel){
        /*LOG*/_root::getLog()->info('-layout: ajout appel module ['.$sAppel.'] a la place ['.$sPlace.']');
        list($sModule,$sAction)= preg_split('/::/',$sAppel);
        $sModule='module_'.$sModule;
        $oModule=new $sModule;
        $this->_tContent[$sPlace][]=call_user_func( array($oModule,'_'.$sAction));
    }
    /** 
    * affiche le layout et son contenu
    * @access public
    */
    public function show(){
        /*LOG*/_root::getLog()->info('-layout: affichage ['._root::getConfigVar('path.layout').$this->_sLayout.'.php]');
        if(!file_exists( _root::getConfigVar('path.layout').$this->_sLayout.'.php')){
            $tErreur=array(
                'layout '.$this->_sLayout.' introuvable dans '._root::getConfigVar('path.layout'),
                _root::getConfigVar('path.layout').$this->_sLayout.'.php introuvable',
            );
            throw new Exception(implode("\n",$tErreur));
        }
        include _root::getConfigVar('path.layout').$this->_sLayout.'.php';
    }
    /** 
    * recupere le layout et son contenu
    * @access public
    */
    public function getOutput(){
        
        /*LOG*/_root::getLog()->info('-layout: getOutput ['._root::getConfigVar('path.layout').$this->_sLayout.'.php]');
        if(!file_exists( _root::getConfigVar('path.layout').$this->_sLayout.'.php')){
            $tErreur=array(
                'layout '.$this->_sLayout.' introuvable dans '._root::getConfigVar('path.layout'),
                _root::getConfigVar('path.layout').$this->_sLayout.'.php introuvable',
            );
            throw new Exception(implode("\n",$tErreur));
        }
        ob_start();
        include _root::getConfigVar('path.layout').$this->_sLayout.'.php';
        
        $sSortie=ob_get_contents();
        ob_end_clean();
        
        return $sSortie;
    }
    
    /** 
    * retourne le contenu d'un objet _tpl a l'emplacement $sPlace
    * @access public
    * @return string
    * @param string $sPlace
    */
    public function load($sPlace){
        /*LOG*/_root::getLog()->info('-layout: chargement/affichage place ['.$sPlace.']');
        if(!isset($this->_tContent[$sPlace])){ return null;}
        $sLoad='';
        foreach($this->_tContent[$sPlace] as $oTpl){
            $sLoad.=$oTpl->show();
        }
        return $sLoad;
    }
}