2016-09-11 10:06:40 +00:00
|
|
|
<?php
|
2016-04-13 14:45:15 +00:00
|
|
|
|
|
|
|
namespace manager;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class MenuManager{
|
|
|
|
|
|
|
|
// Constantes
|
2016-09-11 10:06:40 +00:00
|
|
|
public static $config_path = __ROOT__.'/config/menu.json';
|
2016-04-13 14:45:15 +00:00
|
|
|
|
|
|
|
|
|
|
|
// Attributs prives utiles (initialisation)
|
|
|
|
private $categories; // liste des parties
|
|
|
|
|
|
|
|
// Contiendra les erreurs
|
|
|
|
public $error;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* CONSTRUCTEUR D'UN MENU
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
public function __construct(){
|
|
|
|
/* [0] On met a jour la configuration
|
|
|
|
=========================================================*/
|
|
|
|
// Categories specifiees
|
2016-09-11 10:06:40 +00:00
|
|
|
$this->categories = json_decode( file_get_contents(self::$config_path), true );
|
|
|
|
|
2016-04-13 14:45:15 +00:00
|
|
|
// Gestion de l'erreur de parsage
|
|
|
|
if( $this->categories == null ){
|
|
|
|
$this->error = ManagerError::ParsingFailed;
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/* [1] Gestion du retour
|
|
|
|
=========================================================*/
|
|
|
|
$this->error = ManagerError::Success;
|
|
|
|
|
|
|
|
return true; // On retourne que tout s'est bien passe
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* CONSTRUIT LE MENU EN HTML EN FONCTION DES DROITS DE L'UTILISATEUR
|
|
|
|
*
|
|
|
|
* @return menu<String> Contenu HTML correspondant au droits de l'utilisateur
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
public function inflate(){
|
|
|
|
/* [1] On construit le menu
|
|
|
|
=========================================================*/
|
|
|
|
$this->buildMenu();
|
|
|
|
|
|
|
|
/* [2] Initialisation du resultat
|
|
|
|
=========================================================*/
|
|
|
|
$render = '';
|
|
|
|
|
|
|
|
|
|
|
|
/* [3] Pour chaque categorie
|
|
|
|
=========================================================*/
|
|
|
|
foreach($this->categories as $category){
|
|
|
|
// On met les attributs
|
|
|
|
$render .= '<span'.$this->parseAttributes($category['attributes']).'>';
|
2016-09-11 10:06:40 +00:00
|
|
|
|
2016-04-13 14:45:15 +00:00
|
|
|
// On met l'icone associee
|
2016-04-17 15:46:34 +00:00
|
|
|
if( isset($category['icon']) )
|
2016-09-11 10:06:40 +00:00
|
|
|
$render .= file_get_contents(__ROOT__.$category['icon']);
|
2016-04-17 15:46:34 +00:00
|
|
|
|
|
|
|
// On met le texte de la categorie
|
|
|
|
if( isset($category['text']) )
|
|
|
|
$render .= $category['text'];
|
2016-09-11 10:06:40 +00:00
|
|
|
|
2016-04-17 15:46:34 +00:00
|
|
|
// On ferme la balise
|
|
|
|
$render .= '</span>';
|
2016-04-13 14:45:15 +00:00
|
|
|
|
|
|
|
|
|
|
|
// On ouvre la liste des sous-parties
|
|
|
|
$render .= "<div class='sub'>";
|
|
|
|
|
|
|
|
/* [4] Pour chaque sous-partie
|
|
|
|
=========================================================*/
|
|
|
|
foreach($category['children'] as $children){
|
|
|
|
// On met les attributs
|
|
|
|
$render .= '<span'.$this->parseAttributes($children['attributes']).'>';
|
|
|
|
// On met le texte et on ferme la balise
|
|
|
|
$render .= $children['text'].'</span>';
|
|
|
|
}
|
|
|
|
|
|
|
|
// On ferme la liste des sous-parties
|
|
|
|
$render .= "</div>";
|
|
|
|
|
2016-09-11 10:06:40 +00:00
|
|
|
}
|
2016-04-13 14:45:15 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return $render;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
2016-04-13 15:06:16 +00:00
|
|
|
public function getCategories(){
|
|
|
|
/* [1] On construit le menu
|
|
|
|
=========================================================*/
|
|
|
|
$this->buildMenu();
|
|
|
|
|
|
|
|
/* [2] On recupere la liste des categories
|
|
|
|
=========================================================*/
|
2016-09-12 16:04:53 +00:00
|
|
|
$views = [];
|
2016-04-13 15:06:16 +00:00
|
|
|
|
|
|
|
foreach($this->categories as $category)
|
|
|
|
array_push($views, $category['attributes']['data-link']);
|
|
|
|
|
|
|
|
|
|
|
|
/* [3] On retourne la liste des categories
|
2016-09-11 10:06:40 +00:00
|
|
|
=========================================================*/
|
2016-04-13 15:06:16 +00:00
|
|
|
return $views;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
2016-04-13 14:45:15 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* VERIFIE TOUTES LES PERMISSIONS ET MET A JOUR LES CATEGORIES AVEC LES PARTIES QUE L'ON PEUT ACCEDER UNIQUEMENT
|
|
|
|
*
|
|
|
|
*/
|
2016-04-13 15:06:16 +00:00
|
|
|
public function buildMenu(){
|
2016-04-13 14:45:15 +00:00
|
|
|
/* [0] Initialisation du menu qui va etre retourne (vide)
|
|
|
|
=========================================================*/
|
2016-09-12 16:04:53 +00:00
|
|
|
$menu = [];
|
2016-04-13 14:45:15 +00:00
|
|
|
|
|
|
|
/* [1] Pour chaque categorie
|
|
|
|
=========================================================*/
|
|
|
|
foreach($this->categories as $a=>$category){
|
|
|
|
// Contiendra les sous-parties dont on a acces
|
2016-09-12 16:04:53 +00:00
|
|
|
$access_children = [];
|
2016-04-13 14:45:15 +00:00
|
|
|
|
|
|
|
/* [2] Pour chaque sous-partie
|
|
|
|
=========================================================*/
|
2016-04-17 15:46:34 +00:00
|
|
|
if( !isset($category['children']) ) continue;
|
|
|
|
|
2016-04-13 14:45:15 +00:00
|
|
|
foreach($category['children'] as $b=>$children){
|
|
|
|
/* (1) On verifie les permissions */
|
2016-09-12 16:04:53 +00:00
|
|
|
$canView = $this->checkPermissions( isset($children['permissions']) ? $children['permissions'] : [] );
|
2016-04-13 14:45:15 +00:00
|
|
|
|
|
|
|
/* (2) Si on a l'acces, ajout au tableau */
|
|
|
|
if( $canView )
|
|
|
|
array_push($access_children, $children);
|
|
|
|
}
|
|
|
|
|
|
|
|
/* (3) Si liste des sous-parties n'est pas vide */
|
|
|
|
if( count($access_children) > 0 ){
|
|
|
|
|
|
|
|
/* (4) On recupere la categorie parente */
|
|
|
|
$defaultCategory = $this->categories[$a];
|
|
|
|
|
|
|
|
/* (5) Mais on met que les enfants qu'on a recupere (dont on a acces) */
|
|
|
|
$defaultCategory['children'] = $access_children;
|
|
|
|
|
|
|
|
|
|
|
|
/* (6) On ajoute la categorie au menu */
|
|
|
|
array_push($menu, $defaultCategory);
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
/* [3] On met a jour le menu
|
|
|
|
=========================================================*/
|
|
|
|
$this->categories = $menu;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* VERIFIE LES PERMISSIONS DE L'UTILISATEUR PARMI UN TABLEAU DE PERMISSIONS
|
|
|
|
*
|
|
|
|
* @permissions<Array> Liste des permissions
|
|
|
|
*
|
|
|
|
* @return permission<bool> Retourne VRAI si on a la permission
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
private function checkPermissions($permissions){
|
|
|
|
/* [1] Si aucune permission specifiee
|
|
|
|
=========================================================*/
|
|
|
|
// Si aucune permission specifiee, on a l'acces
|
|
|
|
if( count($permissions) == 0 ) return true;
|
|
|
|
|
|
|
|
/* [2] On verifie pour chaque permission
|
|
|
|
=========================================================*/
|
|
|
|
foreach($permissions as $permission){
|
|
|
|
// Si on a la permission qu'on verifie, on a l'acces
|
|
|
|
if( permission($permission) ) return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
/* [3] Gestion du retour si aucune permission => FAUX
|
|
|
|
=========================================================*/
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* PARSE UNE LISTE D'ATTRIBUTS AU FORMAT HTML
|
|
|
|
*
|
|
|
|
* @attr<Array> Tableau associatif representant 'nomAttribut'=>'valAttribut'
|
|
|
|
*
|
|
|
|
* @return HTML<String> Renvoie les attributs au format HTML
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
private function parseAttributes($attr){
|
|
|
|
/* [1] On initialise le resultat
|
|
|
|
=========================================================*/
|
|
|
|
$render = ' ';
|
|
|
|
|
|
|
|
/* [2] Ecriture de tous les attributs
|
|
|
|
=========================================================*/
|
|
|
|
foreach($attr as $name=>$value)
|
|
|
|
$render .= $name."='".$value."' ";
|
|
|
|
|
|
|
|
/* [3] Retour du resultat
|
|
|
|
=========================================================*/
|
|
|
|
return $render;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
2016-09-11 10:06:40 +00:00
|
|
|
?>
|