categories = json_decode( file_get_contents(self::$config_path), true ); // 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 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 .= 'parseAttributes($category['attributes']).'>'; // On met l'icone associee if( isset($category['icon']) ) $render .= file_get_contents(__ROOT__.$category['icon']); // On met le texte de la categorie if( isset($category['text']) ) $render .= $category['text']; // On ferme la balise $render .= ''; // On ouvre la liste des sous-parties $render .= "
"; /* [4] Pour chaque sous-partie =========================================================*/ foreach($category['children'] as $children){ // On met les attributs $render .= 'parseAttributes($children['attributes']).'>'; // On met le texte et on ferme la balise $render .= $children['text'].''; } // On ferme la liste des sous-parties $render .= "
"; } return $render; } public function getCategories(){ /* [1] On construit le menu =========================================================*/ $this->buildMenu(); /* [2] On recupere la liste des categories =========================================================*/ $views = []; foreach($this->categories as $category) array_push($views, $category['attributes']['data-link']); /* [3] On retourne la liste des categories =========================================================*/ return $views; } /* VERIFIE TOUTES LES PERMISSIONS ET MET A JOUR LES CATEGORIES AVEC LES PARTIES QUE L'ON PEUT ACCEDER UNIQUEMENT * */ public function buildMenu(){ /* [0] Initialisation du menu qui va etre retourne (vide) =========================================================*/ $menu = []; /* [1] Pour chaque categorie =========================================================*/ foreach($this->categories as $a=>$category){ // Contiendra les sous-parties dont on a acces $access_children = []; /* [2] Pour chaque sous-partie =========================================================*/ if( !isset($category['children']) ) continue; foreach($category['children'] as $b=>$children){ /* (1) On verifie les permissions */ $canView = $this->checkPermissions( isset($children['permissions']) ? $children['permissions'] : [] ); /* (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 Liste des permissions * * @return permission 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 Tableau associatif representant 'nomAttribut'=>'valAttribut' * * @return HTML 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; } } ?>