<?php
namespace App\ClassTheatre;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
class asides{
private $debug = false;
private $debug_message = array();
private $folder_controller = '/src/ClassTheatre/';
private $folder_template = '/templates/includes/aside/';
private $folders_template = array('', 'abonnements/', 'aides/', 'annonces/', 'critiques/', 'editions/', 'ecoles/', 'educ/', 'evenements/','montheatre/','spectacles/', 'textes/' ,'prix/', 'biographies/', 'common/', 'contacts/', 'playlist/', 'videos/');
private $tableau = array();
private $context = array();
private $parametres_communs = array();
private $root = false;
static private $entityManager;
/* le constructeur */
public function __construct($communs = array())
{
$this->folder_controller = $_SERVER['PATH_ROOT'].$this->folder_controller;
$this->folder_template = $_SERVER['PATH_ROOT'].$this->folder_template;
// $this->folder_controller = PATH_APP. $this->folder_controller;
// $this->folder_template = PATH_ADMIN. $this->folder_template;
$this->debug_errors('Appel du constructeur');
$this->parametres_communs = $communs;
}
static function loadaside($aside_name){
$chemin = $_SERVER['PATH_ROOT'].'/src/ClassTheatre/aside/aside'.$aside_name.'.php';
if(file_exists($chemin)){
// require_once $chemin;
// if(!class_exists('aside'.$aside_name)){
// return false;
// }
$class_name = 'App\\ClassTheatre\\aside\\aside'.$aside_name;
return new $class_name(asides::$entityManager);
}
}
static function setEntityManager(EntityManagerInterface $entityManager){
asides::$entityManager = $entityManager;
}
public function extract_html_subname($name){
$key = explode(",", $name);
if(sizeof($key) > 1){
$html = $key[0];
$key = $key[1];
}
else{
$html = $key = $key[0];
}
return ['html' => $html, 'key' => $key];
}
/*
Fonction publique qui permet de faire charger des asides
on peu lui faire passer en paramètre :
une chaine de caractère (le nom du fichier à faire charger)
un tableau contenant le nom du fichier et plusieurs paramètres
*/
public function load($aside){
if(is_array($aside)){
$names = $this->extract_html_subname(key($aside));
$key = $names['key'];
$this->tableau[$key] = reset($aside);
$this->aside = $this->tableau[$key];
$this->setAlone(true);
$this->tableau[$key] = $this->aside;
}
else{
$names = $this->extract_html_subname($aside);
$key = $names['key'];
//par défault
$this->tableau[$key] = array();
$this->aside = $this->tableau[$aside];
$this->setAlone(true);
$this->tableau[$key] = $this->aside;
}
$this->tableau[$key]['html'] = $names['html'];
}
/*
Fonction public qui permet la duplication d'un aside existant
*/
public function duplicate($key){
if(!empty($this->aside['duplicate'])){
$key_duplicate = $this->aside['duplicate'];
$this->aside = array_merge($this->tableau[$key_duplicate], $this->aside);
}
$this->clear('duplicate');
}
/*
Fonction privée qui permet la suppression d'un aside du tableau principal
cause : aside qui n'existe pas, ou array ayant terminée son travail
*/
private function remove($key = null){
if(is_null($key)){
unset($this->tableau);
}
else{
unset($this->tableau[$key]);
}
}
/*
Fonction privée qui vérifie si le template html fonctionne
*/
private function getTemplateHtml(){
foreach($this->folders_template AS $folder){
if(file_exists($this->folder_template.$folder.$this->aside['html'].".html.twig")){
$this->setTemplateHtml('/includes/aside/'.$folder.$this->aside['html'].".html");
return true;
}
}
return false;
}
/*
Fonction privée qui vérifie si le moteur php custom fonctionne
*/
private function getControllerPhp(){
if(!empty($this->aside['php']['method'])){
if(file_exists($this->folder_controller.'/aside/'.$this->aside['php']['method'].".php")){
// require_once($this->folder_controller.$this->aside['php']['method'].".php");
return true;
}
else{
$this->clear('php');
}
}
return false;
}
/*
On set les paramètres par défault devant être chargé
*/
public function getDefault(){
$this->setcolor();
}
/*
On charge tout ce que contient le tableau principal
Nous vérifions que le template html existe bien
Ainsi que le moteur php custom
*/
private function loads(){
$this->debug_errors('On charge les différents asides');
foreach($this->tableau AS $key => $this->aside){
$this->setRoot(false);
$this->duplicate($key);
$this->setTemplateHtml($this->aside['html']);
//si le aside n'existe pas
if(!$this->getTemplateHtml()){
$this->setTemplateHtml();
}
else{
$this->getDefault();
$this->exec();
}
if($this->getRoot()){
$this->tableau[$key] = $this->aside;
}
else{
unset($this->tableau[$key]['html']);
}
}
}
/*
Nous nous executons des paramètres customs propore à la classe et que nous avons fait passer en paramètre à travers l'array
*/
private function exec(){
if(!empty($this->aside['exec'])){
foreach($this->aside['exec'] AS $key => $val){
$get = 'set'.$key;
$this->$get($val);
}
$this->clear('exec');
}
}
/*
Nous executons des paramètres pour la méthode php
*/
private function execPHP(){
if(!empty($this->aside['php']['method'])){
$phpmethod = 'App\ClassTheatre\aside\\'.$this->aside['php']['method'];
$temp = new $phpmethod($this->aside, $this->context,$this->parametres_communs);
$this->clear('php');
}
}
/*
Nous nous executons les différents moteurs php customisés
*/
private function executes(){
foreach($this->tableau AS $key => $this->aside){
if($this->getControllerPhp()){
$this->execPHP();
}
$this->tableau[$key] = $this->aside;
}
}
/*
Nous nous executons l'ensemble des méthodes de la classe permettant l'affichage et l'exécution ainsi que l'affichage des différents asidess
*/
public function run(){
$this->loads();
$this->executes();
$this->debug_show();
}
public function view($context = array()){
$this->context = $context;
$this->run();
return $this->tableau;
}
public function setcolor($value = 'context'){
$this->aside['color'] = $value;
}
public function setborder($value = 'context'){
$this->aside['border'] = $value;
}
/*
Paramètre Alone, permet d'indiquer au template si l'aside doit-être seul ou non.
*/
public function setAlone($default = true, $forceReset = false){
$this->setTemplateParams('alone', $default);
if($forceReset){
$html_value = ($default) ? false : true;
$this->sethtmlstart($html_value, true);
$this->sethtmlend($html_value, true);
}
}
/*
Paramètre HtmlStart permettant d'indiquer au template si l'aside doit start ou non le début du block devant le contenir lui et les autres
*/
public function setHtmlStart($default = true){
$this->setTemplateParams('html_start', $default);
$this->setAlone(false);
}
/*
Paramètre HtmlEnd permettant d'indiquer au template si l'aside doit fermer ou non le début du block devant le contenir lui et les autres
*/
public function setHtmlEnd($default = true){
$this->setTemplateParams('html_end', $default);
$this->setAlone(false);
}
/*
Set les différentes parmètres dont le template a besoin pour pouvoir afficher les bonnes informations
*/
public function setTemplateParams($key, $value){
$this->aside[$key] = $value;
}
/*
Set le template html devant être chargé
error est le paramètre par défaut
*/
public function setTemplateHtml($template = "error"){
$this->aside['html'] = $template;
}
/*
Méthode faisant un peu de nettoyage dans l'aside en supprimant certains paramètres devenus inutiles après l'execution
*/
private function clear($key = null){
if(!is_null($key)){
if(!empty($this->aside)){
unset($this->aside[$key]);
}
}
}
public function getRoot(){
if($this->root){
if(empty($rights['isroot'])) {
return false;
}
}
return true;
}
public function setRoot($value = false){
$this->root = $value;
}
/* -- le debug -- */
private function debug_errors($message){
$this->debug_message[] = $message;
}
public function debug_show(){
if($this->debug){
foreach($this->debug_message as $message){
echo $message."<br/>";
}
}
}
}