194 lines
3.9 KiB
PHP
194 lines
3.9 KiB
PHP
<?php
|
|
|
|
namespace manager;
|
|
|
|
use \manager\View;
|
|
use \manager\ManagerError;
|
|
|
|
|
|
|
|
|
|
class View{
|
|
|
|
public $error = ManagerError::Success;
|
|
|
|
|
|
private $template;
|
|
private $content;
|
|
|
|
private $view;
|
|
|
|
public static $htmlError = "<span class='error'>Une erreur est survenue, veuilez contacter le webmaster si cette erreur persiste.</span>";
|
|
|
|
|
|
|
|
/* INITIALISATION DE LA VUE VUE
|
|
*
|
|
* @template<String> Nom du modèle de la vue à utiliser
|
|
* @content<Array> Données pour construire la vue à partir du modèle
|
|
*
|
|
*/
|
|
public function __construct($template, $content){
|
|
// Si pas parametre manquant, on quitte
|
|
if( $template == null ){
|
|
$this->error = ManagerError::MissingPath;
|
|
return false;
|
|
}
|
|
|
|
|
|
/* [1] On vérifie que le template existe
|
|
=========================================================*/
|
|
$templatePath = $this->checkPath($template);
|
|
|
|
if( $templatePath === false )
|
|
return false;
|
|
|
|
|
|
/* [2] On récupère le chemin du template et on l'enregistre
|
|
=========================================================*/
|
|
$this->template = $templatePath;
|
|
|
|
/* [3] On enregistre les paramètres
|
|
=========================================================*/
|
|
$this->content = $content;
|
|
|
|
|
|
/* [4] On process la vue
|
|
=========================================================*/
|
|
$this->view = call_user_func(
|
|
$this->template,
|
|
$this->content
|
|
);
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* AFFICHE LA VUE CALCULEE
|
|
*
|
|
*/
|
|
public function view(){
|
|
echo $this->view;
|
|
}
|
|
|
|
/* RETOURNE LA VUE CALCULEE
|
|
*
|
|
*/
|
|
public function getView(){
|
|
return $this->view;
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* VERIFICATION DE L'EXISTENCE D'UN MODELE
|
|
*
|
|
* @template<String> Chemin du modèle
|
|
*
|
|
* @return status<Boolean> TRUE si le modèle existe, sinon FALSE
|
|
*
|
|
*/
|
|
private function checkPath($template){
|
|
/* [1] On vérifie le format
|
|
=========================================================*/
|
|
if( !preg_match('/^([a-z]+)\.([a-z]+)$/i', $template, $match) ){
|
|
$this->error = ManagerError::ParamError;
|
|
return false;
|
|
}
|
|
|
|
|
|
/* [2] On vérifie que le template existe
|
|
=========================================================*/
|
|
$class = '\\manager\\views\\'.$match[1].'\\'.$match[2];
|
|
$method = 'view';
|
|
|
|
/* (1) On vérifie que la classe existe */
|
|
if( !class_exists($class) ){
|
|
$this->error = ManagerError::UnknownTemplate;
|
|
return false;
|
|
}
|
|
|
|
/* (2) On vérifie que la méthode existe */
|
|
if( !method_exists($class, $method) ){
|
|
$this->error = ManagerError::UnknownTemplate;
|
|
return false;
|
|
}
|
|
|
|
|
|
/* [3] Si tout est bon, on renvoie les données
|
|
=========================================================*/
|
|
return [ $class, $method ];
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* APPLIQUE UN REMPLACEMENT SIMPLE
|
|
*
|
|
* @template<String> Contenu HTML du templace
|
|
* @singles<Array> Variables à insérer
|
|
*
|
|
* @return result<String> Retourne le templace rempli
|
|
*
|
|
*/
|
|
public static function replaceSingle($template, $singles){
|
|
|
|
/* On applique chaque remplacement */
|
|
foreach($singles as $k=>$v){
|
|
|
|
/* Tant qu'il y a, on remplace */
|
|
if( strpos($template, '@'.$k) !== false )
|
|
$template = str_replace('@'.$k, $v, $template);
|
|
|
|
}
|
|
|
|
return $template;
|
|
}
|
|
|
|
|
|
|
|
|
|
/* APPLIQUE UN REMPLACEMENT MULTIPLE
|
|
*
|
|
* @template<String> Contenu HTML du templace
|
|
* @multiples<Array> Tableau de Singles
|
|
* @singles<Array> Variables statiques supplémentaires
|
|
*
|
|
* @return result<String> Retourne le templace rempli
|
|
*
|
|
*/
|
|
public static function replaceMultiple($template, $multiples, $singles=[]){
|
|
|
|
$view = '';
|
|
|
|
/* On applique chaque remplacement */
|
|
foreach($multiples as $multiple)
|
|
$view .= self::replaceSingle($template, array_merge($multiple, $singles));
|
|
|
|
return $view;
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
// USE case
|
|
//
|
|
// $myView = new View('templateParent.templateModel', [
|
|
// 'myVar' => 1,
|
|
// 'helloMsg' => 'Hello',
|
|
// ]);
|
|
//
|
|
// $myView->view();
|
|
//
|
|
|
|
|
|
?>
|