New: Ajout du module source dans menus. Ceci permettra aux modules d'ajouter leurs propres entrees aux menus.

This commit is contained in:
Laurent Destailleur 2008-01-14 01:26:15 +00:00
parent d4e707dbd6
commit 38a2cf5683
5 changed files with 113 additions and 39 deletions

View File

@ -404,6 +404,9 @@ elseif (isset($_GET["action"]) && $_GET["action"] == 'edit')
// Handler
print '<tr><td>'.$langs->trans('MenuHandler').'</td><td>'.$menu->menu_handler.'</td><td>'.$langs->trans('DetailMenuHandler').'</td></tr>';
// Module
print '<tr><td>'.$langs->trans('MenuModule').'</td><td>'.$menu->module.'</td><td>'.$langs->trans('DetailMenuModule').'</td></tr>';
// Type
print '<tr><td>'.$langs->trans('Type').'</td><td>'.$menu->type.'</td><td>'.$langs->trans('DetailType').'</td></tr>';

View File

@ -3,7 +3,7 @@
* Copyright (C) 2004 Sebastien Di Cintio <sdicintio@ressource-toi.org>
* Copyright (C) 2004 Benoit Mortier <benoit.mortier@opensides.be>
* Copyright (C) 2004 Eric Seigne <eric.seigne@ryxeo.com>
* Copyright (C) 2005-2007 Laurent Destailleur <eldy@users.sourceforge.net>
* Copyright (C) 2005-2008 Laurent Destailleur <eldy@users.sourceforge.net>
*
* 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 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 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 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 à ltat '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;
}
}
?>

View File

@ -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)

View File

@ -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)

View File

@ -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 <EFBFBD>l<EFBFBD>ment a pour p<>re : $pere
if ($tab[$x][1] == $pere) {
//on affiche le menu