From 38a2cf5683c90ae1bdd8e5c6d6e7ee411be9abe3 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Mon, 14 Jan 2008 01:26:15 +0000 Subject: [PATCH] New: Ajout du module source dans menus. Ceci permettra aux modules d'ajouter leurs propres entrees aux menus. --- htdocs/admin/menus/edit.php | 3 + .../modules/DolibarrModules.class.php | 124 +++++++++++++----- htdocs/langs/en_US/admin.lang | 2 + htdocs/langs/fr_FR/admin.lang | 2 + htdocs/lib/menubase.class.php | 21 ++- 5 files changed, 113 insertions(+), 39 deletions(-) diff --git a/htdocs/admin/menus/edit.php b/htdocs/admin/menus/edit.php index a7f4ce86341..36e601304cb 100644 --- a/htdocs/admin/menus/edit.php +++ b/htdocs/admin/menus/edit.php @@ -404,6 +404,9 @@ elseif (isset($_GET["action"]) && $_GET["action"] == 'edit') // Handler print ''.$langs->trans('MenuHandler').''.$menu->menu_handler.''.$langs->trans('DetailMenuHandler').''; + // Module + print ''.$langs->trans('MenuModule').''.$menu->module.''.$langs->trans('DetailMenuModule').''; + // Type print ''.$langs->trans('Type').''.$menu->type.''.$langs->trans('DetailType').''; diff --git a/htdocs/includes/modules/DolibarrModules.class.php b/htdocs/includes/modules/DolibarrModules.class.php index 6a5624927be..ed9b7a391a3 100644 --- a/htdocs/includes/modules/DolibarrModules.class.php +++ b/htdocs/includes/modules/DolibarrModules.class.php @@ -3,7 +3,7 @@ * Copyright (C) 2004 Sebastien Di Cintio * Copyright (C) 2004 Benoit Mortier * Copyright (C) 2004 Eric Seigne - * Copyright (C) 2005-2007 Laurent Destailleur + * Copyright (C) 2005-2008 Laurent Destailleur * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -30,11 +30,11 @@ /** \class DolibarrModules - \brief Classe mère des classes de description et activation des modules Dolibarr + \brief Classe mere des classes de description et activation des modules Dolibarr */ class DolibarrModules { - //! Handler d'accès aux bases + //! Database handler var $db; //! Tableau des boites var $boxes; @@ -50,7 +50,7 @@ class DolibarrModules /** * \brief Constructeur - * \param DB handler d'accès base + * \param DB handler d'acces base */ function DolibarrModules($DB) { @@ -60,8 +60,8 @@ class DolibarrModules /** - * \brief Fonction d'activation. Insère en base les constantes et boites du module - * \param array_sql tableau de requete sql a exécuter à l'activation + * \brief Fonction d'activation. Insere en base les constantes et boites du module + * \param array_sql tableau de requete sql a executer a l'activation * \return int 1 si ok, 0 si erreur */ function _init($array_sql) @@ -69,22 +69,25 @@ class DolibarrModules global $langs; $err=''; - // Insère une entrée dans llx_dolibarr_modules + // Insere une entree dans llx_dolibarr_modules $err+=$this->_dbactive(); - // Insère la constante d'activation module + // Insere la constante d'activation module $err+=$this->_active(); - // Insère les boites dans llx_boxes_def + // Insere les boites dans llx_boxes_def $err+=$this->insert_boxes(); - // Insère les constantes associées au module dans llx_const + // Insere les constantes associees au module dans llx_const $err+=$this->insert_const(); - // Insère les permissions associées au module actif dans llx_rights_def + // Insere les permissions associees au module actif dans llx_rights_def $err+=$this->insert_permissions(); - // Créé les répertoires + // Insere les constantes associees au module dans llx_const + $err+=$this->insert_menus(); + + // Cree les repertoires if (is_array($this->dirs)) { foreach ($this->dirs as $key => $dir) @@ -101,7 +104,7 @@ class DolibarrModules } } - // Exécute les requetes sql complémentaires + // Execute les requetes sql complementaires for ($i = 0 ; $i < sizeof($array_sql) ; $i++) { $sql=$array_sql[$i]; @@ -113,7 +116,7 @@ class DolibarrModules } } - // Créé les documents générables + // Cree les documents generables if (is_array($this->docs)) { foreach ($this->docs as $key => $doc) @@ -138,15 +141,15 @@ class DolibarrModules } /** - \brief Fonction de désactivation. Supprime de la base les constantes et boites du module - \param array_sql tableau de requete sql a exécuter à la désactivation + \brief Fonction de desactivation. Supprime de la base les constantes et boites du module + \param array_sql tableau de requete sql a executer a la desactivation \return int 1 si ok, 0 si erreur */ function _remove($array_sql) { $err = 0; - // Supprime entrée des modules + // Supprime entree des modules $err+=$this->_dbunactive(); // Supprime la constante d'activation du module @@ -161,7 +164,7 @@ class DolibarrModules // Supprime les documents generables $err+=$this->delete_docs(); - // Exécute les requetes sql complémentaires + // Execute les requetes sql complementaires for ($i = 0 ; $i < sizeof($array_sql) ; $i++) { if (!$this->db->query($array_sql[$i])) @@ -178,7 +181,7 @@ class DolibarrModules /** \brief Retourne le nom traduit du module si la traduction existe dans admin.lang, - sinon le nom défini par défaut dans le module. + sinon le nom defini par defaut dans le module. \return string Nom du module traduit */ function getName() @@ -193,7 +196,7 @@ class DolibarrModules } else { - // Si traduction du nom du module n'existe pas, on prend définition en dur dans module + // Si traduction du nom du module n'existe pas, on prend definition en dur dans module return $this->name; } } @@ -201,7 +204,7 @@ class DolibarrModules /** \brief Retourne la description traduite du module si la traduction existe dans admin.lang, - sinon la description définie par défaut dans le module. + sinon la description definie par defaut dans le module. \return string Nom du module traduit */ function getDesc() @@ -216,7 +219,7 @@ class DolibarrModules } else { - // Si traduction de la description du module n'existe pas, on prend définition en dur dans module + // Si traduction de la description du module n'existe pas, on prend definition en dur dans module return $this->description; } } @@ -224,7 +227,7 @@ class DolibarrModules /** \brief Retourne la version du module. - Pour les modules à l'état 'experimental', retourne la traduction de 'experimental' + Pour les modules a l'etat 'experimental', retourne la traduction de 'experimental' Pour les modules 'dolibarr', retourne la version de Dolibarr Pour les autres modules, retourne la version du module \return string Version du module @@ -290,8 +293,8 @@ class DolibarrModules } /** - \brief Retourne le libellé d'un lot de données exportable - \return string Libellé du lot de données + \brief Retourne le libelle d'un lot de donnees exportable + \return string Libelle du lot de donnees */ function getDatasetLabel($r) { @@ -300,19 +303,19 @@ class DolibarrModules $langstring="ExportDataset_".$this->export_code[$r]; if ($langs->trans($langstring) == $langstring) { - // Traduction non trouvée + // Traduction non trouvee return $this->export_label[$r]; } else { - // Traduction trouvée + // Traduction trouvee return $langs->trans($langstring); } } /** - \brief Insère ligne module + \brief Insere ligne module \return int Nombre d'erreurs (0 si ok) */ function _dbactive() @@ -348,7 +351,7 @@ class DolibarrModules /** - \brief Insère constante d'activation module + \brief Insere constante d'activation module \return int Nombre d'erreurs (0 si ok) */ function _active() @@ -385,7 +388,7 @@ class DolibarrModules /** - \brief Insère les boites associées au module dans llx_boxes_def + \brief Insere les boites associees au module dans llx_boxes_def \return int Nombre d'erreurs (0 si ok) */ function insert_boxes() @@ -441,7 +444,7 @@ class DolibarrModules { $err=0; - // Créé les documents générables + // Cree les documents generables if (is_array($this->docs)) { foreach ($this->docs as $key => $doc) @@ -499,7 +502,7 @@ class DolibarrModules } /** - \brief Insère les constantes associées au module dans llx_const + \brief Insere les constantes associees au module dans llx_const \return int Nombre d'erreurs (0 si ok) */ function insert_const() @@ -553,7 +556,7 @@ class DolibarrModules } /** - \brief Insère les permissions associées au module dans llx_rights_def + \brief Insere les permissions associees au module dans llx_rights_def \return int Nombre d'erreurs (0 si ok) */ function insert_permissions() @@ -638,5 +641,60 @@ class DolibarrModules return $err; } + + /** + \brief Insere les menus dans llx_menu* + \return int Nombre d'erreurs (0 si ok) + */ + function insert_menus() + { + require_once(DOL_DOCUMENT_ROOT."/lib/menubase.class.php"); + + $err=0; + global $user; + + foreach ($this->menu as $key => $value) + { + $menu = new Menubase($db); + $menu->menu_handler='all'; + $menu->module=$this->name; + $menu->fk_menu=$this->menu[$key]['fk_menu']; + $menu->type=$this->menu[$key]['type']; + $menu->titre=$this->menu[$key]['titre']; + $menu->leftmenu=$this->menu[$key]['leftmenu']; + $menu->url=$this->menu[$key]['url']; + $menu->langs=$this->menu[$key]['langs']; + $menu->position=$this->menu[$key]['position']; + $menu->perms=$this->menu[$key]['perms']; + $menu->target=$this->menu[$key]['target']; + $menu->user=$this->menu[$key]['user']; + $result=$menu->create($user); + if ($result <= 0) + { + $err++; + } + } + + return $err; + } + + + /** + \brief Supprime les permissions + \return int Nombre d'erreurs (0 si ok) + */ + function delete_menus() + { + $err=0; + + $sql = "DELETE FROM ".MAIN_DB_PREFIX."rights_def WHERE module = '".$this->rights_class."';"; + if (!$this->db->query($sql)) + { + $err++; + } + + return $err; + } + } ?> diff --git a/htdocs/langs/en_US/admin.lang b/htdocs/langs/en_US/admin.lang index 7f4d241cb78..583959c0ec4 100644 --- a/htdocs/langs/en_US/admin.lang +++ b/htdocs/langs/en_US/admin.lang @@ -808,8 +808,10 @@ NewMenu=New menu MenuConf=Menus setup Menu=Selection of menu MenuHandler=Menu handler +MenuModule=Source module DetailId=Id menu DetailMenuHandler=Menu handler (or "all" for all menu handlers) +DetailMenuModule=Module name if menu entry come from a module DetailType=Type of menu (top or left) DetailTitre=Menu label or label code for translation DetailMainmenu=Group for which it belongs (obsolete) diff --git a/htdocs/langs/fr_FR/admin.lang b/htdocs/langs/fr_FR/admin.lang index aee11af84fb..921f99f61f4 100644 --- a/htdocs/langs/fr_FR/admin.lang +++ b/htdocs/langs/fr_FR/admin.lang @@ -813,8 +813,10 @@ NewMenu=Nouveau menu MenuConf=Configuration des menus Menu=Sélection des menus MenuHandler=Gestionnaire de menu +MenuModule=Module source DetailId=Identifiant du menu DetailMenuHandler=Nom du gestionnaire menu (ou "all" pour tous) +DetailMenuModule=Nom du module si l'entrée menu est issu d'un module DetailType=Type de menu (top ou left) DetailTitre=Libellé du menu ou code libellé à traduire DetailMainmenu=Groupe auquel il appartient (obsolete) diff --git a/htdocs/lib/menubase.class.php b/htdocs/lib/menubase.class.php index 55cace6e1cc..1749b578b71 100644 --- a/htdocs/lib/menubase.class.php +++ b/htdocs/lib/menubase.class.php @@ -39,6 +39,7 @@ class Menubase var $id; var $menu_handler; + var $module; var $type; var $mainmenu; var $fk_menu; @@ -79,6 +80,7 @@ class Menubase // Clean parameters $this->rowid=trim($this->rowid); $this->menu_handler=trim($this->menu_handler); + $this->module=trim($this->module); $this->type=trim($this->type); $this->mainmenu=trim($this->mainmenu); $this->fk_menu=trim($this->fk_menu); @@ -98,6 +100,7 @@ class Menubase // Insert request $sql = "INSERT INTO ".MAIN_DB_PREFIX."menu("; $sql.= "menu_handler,"; + $sql.= "module,"; $sql.= "type,"; $sql.= "mainmenu,"; $sql.= "fk_menu,"; @@ -112,6 +115,7 @@ class Menubase $sql.= "user"; $sql.= ") VALUES ("; $sql.= " '".$this->menu_handler."',"; + $sql.= " '".$this->module."',"; $sql.= " '".$this->type."',"; $sql.= " '".$this->mainmenu."',"; $sql.= " '".$this->fk_menu."',"; @@ -162,6 +166,7 @@ class Menubase // Clean parameters $this->rowid=trim($this->rowid); $this->menu_handler=trim($this->menu_handler); + $this->module=trim($this->module); $this->type=trim($this->type); $this->mainmenu=trim($this->mainmenu); $this->fk_menu=trim($this->fk_menu); @@ -181,6 +186,7 @@ class Menubase // Update request $sql = "UPDATE ".MAIN_DB_PREFIX."menu SET"; $sql.= " menu_handler='".addslashes($this->menu_handler)."',"; + $sql.= " module='".addslashes($this->module)."',"; $sql.= " type='".$this->type."',"; $sql.= " mainmenu='".addslashes($this->mainmenu)."',"; $sql.= " fk_menu='".$this->fk_menu."',"; @@ -231,6 +237,7 @@ class Menubase $sql = "SELECT"; $sql.= " t.rowid,"; $sql.= " t.menu_handler,"; + $sql.= " t.module,"; $sql.= " t.type,"; $sql.= " t.mainmenu,"; $sql.= " t.fk_menu,"; @@ -258,6 +265,7 @@ class Menubase $this->id = $obj->rowid; $this->menu_handler = $obj->menu_handler; + $this->module = $obj->module; $this->type = $obj->type; $this->mainmenu = $obj->mainmenu; $this->fk_menu = $obj->fk_menu; @@ -325,14 +333,15 @@ class Menubase { $this->id=0; - $this->menu_handler=''; - $this->type=''; + $this->menu_handler='all'; + $this->module='specimen'; + $this->type='top'; $this->mainmenu=''; - $this->fk_menu=''; + $this->fk_menu='0'; $this->position=''; - $this->url=''; + $this->url='http://dummy'; $this->target=''; - $this->titre=''; + $this->titre='Specimen menu'; $this->langs=''; $this->level=''; $this->leftmenu=''; @@ -407,7 +416,7 @@ class Menubase //ballayage du tableau for ($x = 0; $x < count($tab); $x++) { - //si un élément a pour père : $pere + //si un �l�ment a pour p�re : $pere if ($tab[$x][1] == $pere) { //on affiche le menu