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