diff --git a/automate.php b/automate.php index 0853128..0fe5f56 100755 --- a/automate.php +++ b/automate.php @@ -66,7 +66,7 @@ var_dump( $contact ); } - parseCallLog(); + // parseCallLog(); debug(); @@ -79,5 +79,9 @@ // )); // var_dump($response); + + $menu = new \manager\MenuManager(); + + echo $menu->inflate(); ?> \ No newline at end of file diff --git a/config/menu.json b/config/menu.json new file mode 100644 index 0000000..6531ac3 --- /dev/null +++ b/config/menu.json @@ -0,0 +1,63 @@ +[ + + { "icon": "f/svg/home/st/menu-side", "text": "Tableau de bord", + "attributes": { "data-link": "dashboard", "class": "sep" }, + + "children": [ + { "permissions": [], "text": "Présentation", + "attributes": { "data-sublink": "presentation" } }, + { "permissions": [], "text": "Actualités", + "attributes": { "data-sublink": "posts" } } + ] + }, + + + { "icon": "f/svg/input/st/menu-side", "text": "Acquisition", + "attributes": { "data-link": "input" }, + + "children": [ + { "permissions": [], "text": "Questionnaire", + "attributes": { "data-sublink": "survey" } }, + { "permissions": [], "text": "Facebook", + "attributes": { "data-sublink": "facebook" } }, + { "permissions": [], "text": "Téléphone", + "attributes": { "data-sublink": "phone" } }, + { "permissions": [], "text": "Messenger", + "attributes": { "data-sublink": "messenger" } } + ] + }, + + + { "icon": "f/svg/analytics/st/menu-side", "text": "Statistiques", + "attributes": { "data-link": "analytics" }, + + "children": [ + { "permissions": [], "text": "Extraction de données", + "attributes": { "data-sublink": "export" } } + ] + }, + + + { "icon": "f/svg/charts/st/menu-side", "text": "Graphiques", + "attributes": { "data-link": "charts" }, + + "children": [ + { "permissions": [], "text": "Téléphone", + "attributes": { "data-sublink": "phone" } }, + { "permissions": [], "text": "Tout", + "attributes": { "data-sublink": "all" } } + ] + }, + + + { "icon": "f/svg/settings/st/menu-side", "text": "Paramètres", + "attributes": { "data-link": "settings" }, + + "children": [ + { "permissions": ["admin"], "text": "Gestion des tokens", + "attributes": { "data-sublink": "tokens" } }, + { "permissions": ["admin"], "text": "Gestion des utilisateurs", + "attributes": { "data-sublink": "users" } } + ] + } +] \ No newline at end of file diff --git a/manager/MenuManager.php b/manager/MenuManager.php new file mode 100644 index 0000000..3664cd5 --- /dev/null +++ b/manager/MenuManager.php @@ -0,0 +1,213 @@ +categories = json_decode( ResourceDispatcher::getResource(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 + $render .= ResourceDispatcher::getResource($category['icon']); + // On met le texte de la categorie et on ferme la balise + $render .= $category['text'].''; + + + // 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; + } + + + + + + + /* VERIFIE TOUTES LES PERMISSIONS ET MET A JOUR LES CATEGORIES AVEC LES PARTIES QUE L'ON PEUT ACCEDER UNIQUEMENT + * + */ + private function buildMenu(){ + /* [0] Initialisation du menu qui va etre retourne (vide) + =========================================================*/ + $menu = array(); + + /* [1] Pour chaque categorie + =========================================================*/ + foreach($this->categories as $a=>$category){ + // Contiendra les sous-parties dont on a acces + $access_children = array(); + + /* [2] Pour chaque sous-partie + =========================================================*/ + foreach($category['children'] as $b=>$children){ + /* (1) On verifie les permissions */ + $canView = $this->checkPermissions($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; + } + + + + } + +?> \ No newline at end of file diff --git a/view.php b/view.php index 7c0f96f..e127254 100755 --- a/view.php +++ b/view.php @@ -1,4 +1,5 @@ - + @@ -86,34 +87,10 @@