/*! * GJframework * model/Menu.class.php * v1.0.0 (03/09/2018) * * Created by Guillaume Juncker on 24/08/2018. * Copyright © Guillaume Juncker. All rights reserved. */ /** * Menu * Classe de gestion des menus du site */ class Menu extends DB { public $max_items = 0; public $id = "", $title = "", $Pages = array(); /*------------------------------------------------------------------------------------------------------------------------------*/ /** * __construct * Construit un objet Menu * [@param mixed $vars: un id ou un tableau de clés => valeurs à rechercher] * @return void */ public function __construct($vars = NULL) { parent::__construct($vars); if(!$this->max_items) { $this->max_items = (new Page())->max_items;} $this->Pages = (new Page())->getAll("WHERE menu_id = ".$this->id." ORDER BY position ASC"); } /*------------------------------------------------------------------------------------------------------------------------------*/ /** * initRequiredVars * Implémentation de la fonction parente * @return void */ protected function initRequiredVars() { $this->required_vars = array("title"); } /** * initUniqueVars * Implémentation de la fonction parente * @return void */ protected function initUniqueVars() { $this->unique_vars = array("title"); } /** * initErrors * Surcharge de la fonction parente pour personnaliser les messages * @return void */ protected function initErrors() { parent::initErrors(); $this->Errors['I_SUCCESS']->message = "Le menu a bien été ajouté"; $this->Errors['I_MISSING']->message = "Veuillez renseigner tous les champs obligatoires"; $this->Errors['I_EXISTS']->message = "Un menu portant ce titre existe déjà"; $this->Errors['I_QUOTA'] = new CustomError("warning", "Vous ne pouvez pas créer ce menu car le quota de pages a été atteint"); $this->Errors['I_ERROR']->message = "Une erreur s'est produite lors de l'ajout du menu, veuillez réessayer"; $this->Errors['U_SUCCESS']->message = "Le menu a bien été modifié"; $this->Errors['U_MISSING']->message = "Veuillez renseigner tous les champs obligatoires"; $this->Errors['U_EXISTS']->message = "Un menu portant ce titre existe déjà"; $this->Errors['U_ERROR']->message = "Une erreur s'est produite lors de la modification du menu, veuillez réessayer"; $this->Errors['D_SUCCESS']->message = "Le menu a bien été supprimé"; $this->Errors['D_ERROR']->message = "Une erreur s'est produite lors de la suppression du menu, veuillez réessayer"; } /*------------------------------------------------------------------------------------------------------------------------------*/ /** * getAllVisibles * Variation de la fonction getAll() pour ne récupérer que les menus avec des pages visibles * @return array: un tableau de tous les Objets correspondants */ public function getAllVisibles() { return $this->getAll("WHERE id IN(SELECT menu_id FROM page WHERE visible = 1)"); } /** * getAllEmpty * Variation de la fonction getAll() pour ne récupérer que les menus sans pages * @return array: un tableau de tous les Objets correspondants */ public function getAllEmpty() { return $this->getAll("WHERE id NOT IN(SELECT menu_id FROM page)"); } /** * isEmpty * Détermine si le menu possède ou non des pages * @return bool: TRUE si le menu n'a aucune page, FALSE s'il en a */ public function isEmpty() { return empty($this->Pages); } /** * hasVisiblePages * Détermine si le menu possède ou non des pages visibles * @return bool: TRUE si le menu a des pages visibles, FALSE sinon */ public function hasVisiblePages() { foreach($this->Pages as $Page) { if($Page->visible) { return TRUE;} } return FALSE; } /** * maxReached * Détermine si le maximum de menu disponible a été atteint * @return bool: TRUE si le max a été atteint, FALSE sinon */ public function maxReached() { return $this->max_items AND $this->count()>= $this->max_items; } /*------------------------------------------------------------------------------------------------------------------------------*/ /** * insert * Surcharge de la fonction parente pour insérer un menu après vérification du quota * @return CustomError: l'erreur déclenchée à l'exécution */ public function insert(array $vars) { if(!$this->maxReached()) { return parent::insert($vars); } else { return $this->Errors['I_QUOTA'];} } /** * delete * Surcharge de la fonction parente pour supprimer les pages qu'il contient * @return CustomError: l'erreur déclenchée à l'exécution */ public function delete() { // Suppression des pages foreach($this->Pages as $Page) { $Page->delete();} // Suppression en base de données return parent::delete(); } }