From f2efe04e402181cf8de25501cd78fff737e2fa65 Mon Sep 17 00:00:00 2001 From: xdrm-brackets Date: Wed, 13 Apr 2016 16:45:15 +0200 Subject: [PATCH 1/2] Menu Inflater fait a partir de JSON MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Au niveau de PHP la création physique (HTML) du menu est faite a partir d'un "inflater" a partir du fichier /config/menu.json. Reste a faire de meme avec le JS et le routeur si possible --- automate.php | 6 +- config/menu.json | 63 ++++++++++++ manager/MenuManager.php | 213 ++++++++++++++++++++++++++++++++++++++++ view.php | 35 ++----- 4 files changed, 287 insertions(+), 30 deletions(-) create mode 100644 config/menu.json create mode 100644 manager/MenuManager.php 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 @@ From 4f7f1667131cc10583c4c2a2b0d9c131f7cd89b2 Mon Sep 17 00:00:00 2001 From: xdrm-brackets Date: Wed, 13 Apr 2016 17:06:16 +0200 Subject: [PATCH 2/2] Gestion du Routeur avec le fichier /config/menu.json. --- automate.php | 5 +---- config/menu.json | 2 +- index.php | 5 +++-- manager/MenuManager.php | 23 +++++++++++++++++++++-- 4 files changed, 26 insertions(+), 9 deletions(-) diff --git a/automate.php b/automate.php index 0fe5f56..a9b1327 100755 --- a/automate.php +++ b/automate.php @@ -66,7 +66,7 @@ var_dump( $contact ); } - // parseCallLog(); + parseCallLog(); debug(); @@ -80,8 +80,5 @@ // 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 index 6531ac3..62c8c61 100644 --- a/config/menu.json +++ b/config/menu.json @@ -44,7 +44,7 @@ "children": [ { "permissions": [], "text": "Téléphone", "attributes": { "data-sublink": "phone" } }, - { "permissions": [], "text": "Tout", + { "permissions": [], "text": "Toutes les données", "attributes": { "data-sublink": "all" } } ] }, diff --git a/index.php b/index.php index 4fed391..0569d3a 100755 --- a/index.php +++ b/index.php @@ -7,6 +7,7 @@ use \manager\ModuleRequest; use \manager\ManagerError; use \manager\Database; + use \manager\MenuManager; @@ -80,8 +81,8 @@ /* [2] On recupere la liste des pages du site =========================================================*/ - $views = json_decode( ResourceDispatcher::getResource( 'f/json/views/conf', true ) ); - + $temporaryMenuInflater = new MenuManager(); + $views = $temporaryMenuInflater->getCategories(); // nomPage/arg1/arg2 -> inclusion de la page diff --git a/manager/MenuManager.php b/manager/MenuManager.php index 3664cd5..3fca85c 100644 --- a/manager/MenuManager.php +++ b/manager/MenuManager.php @@ -99,13 +99,33 @@ + public function getCategories(){ + /* [1] On construit le menu + =========================================================*/ + $this->buildMenu(); + + /* [2] On recupere la liste des categories + =========================================================*/ + $views = array(); + + 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 * */ - private function buildMenu(){ + public function buildMenu(){ /* [0] Initialisation du menu qui va etre retourne (vide) =========================================================*/ $menu = array(); @@ -146,7 +166,6 @@ /* [3] On met a jour le menu =========================================================*/ $this->categories = $menu; - }