Qual: Make module system more simple.

Change to prepare adding left menu entries by modules
This commit is contained in:
Laurent Destailleur 2011-04-06 11:11:32 +00:00
parent 97385865e6
commit c6ac86430b
6 changed files with 81 additions and 121 deletions

View File

@ -65,27 +65,6 @@ if (isset($_GET["action"]) && ($_GET["action"] == 'up'))
$current=array();
$previous=array();
// Redefine order
/*$sql = "SELECT m.rowid, m.position";
$sql.= " FROM ".MAIN_DB_PREFIX."menu as m";
$sql.= " WHERE m.menu_handler='".$menu_handler."'";
$sql.= " AND m.entity = ".$conf->entity;
$sql.= " ORDER BY m.position, m.rowid";
dol_syslog("admin/menus/index.php ".$sql);
$resql = $db->query($sql);
$num = $db->num_rows($resql);
$i = 0;
while($i < $num)
{
$obj = $db->fetch_object($resql);
$sqlupdate ="UPDATE ".MAIN_DB_PREFIX."menu as m SET position=".($i+1);
$sqlupdate.=" WHERE m.menu_handler='".$menu_handler."'";
$sqlupdate.=" AND m.entity = ".$conf->entity;
$sqlupdate.=" AND rowid=".$obj->rowid;
$resql2 = $db->query($sqlupdate);
$i++;
}*/
// Get current position
$sql = "SELECT m.rowid, m.position, m.type, m.fk_menu";
$sql.= " FROM ".MAIN_DB_PREFIX."menu as m";
@ -223,8 +202,9 @@ if ($_POST["action"] == 'confirm_delete' && $_POST["confirm"] == 'yes')
$html=new Form($db);
$htmladmin=new FormAdmin($db);
$arrayofjs=array('/admin/menus/menu.js.php?lang='.$langs->defaultlang);
llxHeader();
llxHeader('',$langs->trans("Menus"),'','',0,0,$arrayofjs);
print_fiche_titre($langs->trans("Menus"),'','setup');
@ -292,8 +272,6 @@ $rangLast = 0;
$idLast = -1;
if ($conf->use_javascript_ajax)
{
tree_addjs();
/*-------------------- MAIN -----------------------
tableau des elements de l'arbre:
c'est un tableau a 2 dimensions.
@ -315,6 +293,7 @@ if ($conf->use_javascript_ajax)
$sql.= " FROM ".MAIN_DB_PREFIX."menu as m";
$sql.= " WHERE menu_handler = '".$menu_handler."'";
$sql.= " AND entity = ".$conf->entity;
$sql.= " AND fk_menu >= 0";
$sql.= " ORDER BY m.position, m.rowid"; // Order is position then rowid (because we need a sort criteria when position is same)
$res = $db->query($sql);

View File

@ -72,9 +72,9 @@ class Menubase
/**
* \brief Create menu entry into database
* \param user User that create
* \return int <0 si ko, >0 si ok
* Create menu entry into database
* @param user User that create
* @return int <0 if KO, Id of record if OK
*/
function create($user)
{
@ -85,14 +85,15 @@ class Menubase
$this->module=trim($this->module);
$this->type=trim($this->type);
$this->mainmenu=trim($this->mainmenu);
$this->leftmenu=trim($this->leftmenu);
$this->fk_menu=trim($this->fk_menu);
$this->fk_mainmenu=trim($this->fk_mainmenu);
$this->fk_leftmenu=trim($this->fk_leftmenu);
$this->position=trim($this->position);
$this->url=trim($this->url);
$this->target=trim($this->target);
$this->titre=trim($this->titre);
$this->langs=trim($this->langs);
$this->level=trim($this->level);
$this->leftmenu=trim($this->leftmenu);
$this->perms=trim($this->perms);
$this->enabled=trim($this->enabled);
$this->user=trim($this->user);
@ -115,14 +116,15 @@ class Menubase
$sql.= "module,";
$sql.= "type,";
$sql.= "mainmenu,";
$sql.= "leftmenu,";
$sql.= "fk_menu,";
$sql.= "fk_mainmenu,";
$sql.= "fk_leftmenu,";
$sql.= "position,";
$sql.= "url,";
$sql.= "target,";
$sql.= "titre,";
$sql.= "langs,";
$sql.= "level,";
$sql.= "leftmenu,";
$sql.= "perms,";
$sql.= "enabled,";
$sql.= "usertype";
@ -132,14 +134,15 @@ class Menubase
$sql.= " '".$this->module."',";
$sql.= " '".$this->type."',";
$sql.= " '".$this->mainmenu."',";
$sql.= " '".$this->leftmenu."',";
$sql.= " '".$this->fk_menu."',";
$sql.= " ".($this->fk_mainmenu?"'".$this->fk_mainmenu."'":"null").",";
$sql.= " ".($this->fk_leftmenu?"'".$this->fk_leftmenu."'":"null").",";
$sql.= " '".$this->position."',";
$sql.= " '".$this->url."',";
$sql.= " '".$this->target."',";
$sql.= " '".$this->titre."',";
$sql.= " '".$this->langs."',";
$sql.= " '".$this->level."',";
$sql.= " '".$this->leftmenu."',";
$sql.= " '".$this->perms."',";
$sql.= " '".$this->enabled."',";
$sql.= " '".$this->user."'";
@ -162,11 +165,11 @@ class Menubase
}
}
/*
* \brief Update database
* \param user User that modify
* \param notrigger 0=no, 1=yes (no update trigger)
* \return int <0 if KO, >0 if OK
/**
* Update menu entry into database
* @param user User that modify
* @param notrigger 0=no, 1=yes (no update trigger)
* @return int <0 if KO, >0 if OK
*/
function update($user=0, $notrigger=0)
{
@ -178,14 +181,15 @@ class Menubase
$this->module=trim($this->module);
$this->type=trim($this->type);
$this->mainmenu=trim($this->mainmenu);
$this->leftmenu=trim($this->leftmenu);
$this->fk_menu=trim($this->fk_menu);
$this->fk_mainmenu=trim($this->fk_mainmenu);
$this->fk_leftmenu=trim($this->fk_leftmenu);
$this->position=trim($this->position);
$this->url=trim($this->url);
$this->target=trim($this->target);
$this->titre=trim($this->titre);
$this->langs=trim($this->langs);
$this->level=trim($this->level);
$this->leftmenu=trim($this->leftmenu);
$this->perms=trim($this->perms);
$this->enabled=trim($this->enabled);
$this->user=trim($this->user);
@ -199,14 +203,15 @@ class Menubase
$sql.= " module='".$this->db->escape($this->module)."',";
$sql.= " type='".$this->type."',";
$sql.= " mainmenu='".$this->db->escape($this->mainmenu)."',";
$sql.= " leftmenu='".$this->db->escape($this->leftmenu)."',";
$sql.= " fk_menu='".$this->fk_menu."',";
$sql.= " fk_mainmenu=".($this->fk_mainmenu?"'".$this->fk_mainmenu."'":"null").",";
$sql.= " fk_leftmenu=".($this->fk_leftmenu?"'".$this->fk_leftmenu."'":"null").",";
$sql.= " position='".$this->position."',";
$sql.= " url='".$this->db->escape($this->url)."',";
$sql.= " target='".$this->db->escape($this->target)."',";
$sql.= " titre='".$this->db->escape($this->titre)."',";
$sql.= " langs='".$this->db->escape($this->langs)."',";
$sql.= " level='".$this->level."',";
$sql.= " leftmenu='".$this->db->escape($this->leftmenu)."',";
$sql.= " perms='".$this->db->escape($this->perms)."',";
$sql.= " enabled='".$this->db->escape($this->enabled)."',";
$sql.= " usertype='".$this->user."'";
@ -242,14 +247,13 @@ class Menubase
$sql.= " t.module,";
$sql.= " t.type,";
$sql.= " t.mainmenu,";
$sql.= " t.leftmenu,";
$sql.= " t.fk_menu,";
$sql.= " t.position,";
$sql.= " t.url,";
$sql.= " t.target,";
$sql.= " t.titre,";
$sql.= " t.langs,";
$sql.= " t.level,";
$sql.= " t.leftmenu,";
$sql.= " t.perms,";
$sql.= " t.enabled,";
$sql.= " t.usertype as user,";
@ -272,14 +276,13 @@ class Menubase
$this->module = $obj->module;
$this->type = $obj->type;
$this->mainmenu = $obj->mainmenu;
$this->leftmenu = $obj->leftmenu;
$this->fk_menu = $obj->fk_menu;
$this->position = $obj->position;
$this->url = $obj->url;
$this->target = $obj->target;
$this->titre = $obj->titre;
$this->langs = $obj->langs;
$this->level = $obj->level;
$this->leftmenu = $obj->leftmenu;
$this->perms = $obj->perms;
$this->enabled = str_replace("\"","'",$obj->enabled);
$this->user = $obj->user;
@ -324,8 +327,8 @@ class Menubase
/**
* \brief Initialise object with example values
* \remarks id must be 0 if object instance is a specimen.
* Initialise object with example values
* Id must be 0 if object instance is a specimen.
*/
function initAsSpecimen()
{
@ -391,41 +394,6 @@ class Menubase
}
}
/**
* Return all values of mainmenu where leftmenu defined
* in pre.inc.php must be overwritten completely by dynamic menu.
*
* @return array
*/
function listeMainmenu()
{
global $conf;
$overwritemenufor=array();
$sql = "SELECT DISTINCT m.mainmenu";
$sql.= " FROM " . MAIN_DB_PREFIX . "menu as m";
$sql.= " WHERE m.menu_handler in ('".$this->menu_handler."','all')";
$sql.= " AND m.entity = ".$conf->entity;
$sql.= " AND m.leftmenu != '0'"; // leftmenu exists in database so pre.inc.php must be overwritten
//print $sql;
$res = $this->db->query($sql);
if ($res)
{
while ($menu = $this->db->fetch_array($res))
{
if ($menu['mainmenu']) $overwritemenufor[] = $menu['mainmenu'];
}
}
else
{
dol_print_error($this->db);
}
return $overwritemenufor;
}
/**
* Load tabMenu array
* @param type_user 0=Internal,1=External,2=All

View File

@ -1036,8 +1036,8 @@ class DolibarrModules
/**
* \brief Insert menus entries into llx_menu*
* \return int Nb of errors (0 if OK)
* Insert menus entries found into $this->menu into llx_menu*
* @return int Nb of errors (0 if OK)
*/
function insert_menus()
{
@ -1063,15 +1063,27 @@ class DolibarrModules
else
{
//print 'xxx'.$this->menu[$key]['fk_menu'];exit;
$numparent=$this->menu[$key]['fk_menu'];
$numparent=str_replace('r=','',$numparent);
if (isset($this->menu[$numparent]['rowid']))
$foundparent=0;
$fk_parent=$this->menu[$key]['fk_menu'];
if (preg_match('/r=/',$fk_parent))
{
$menu->fk_menu=$this->menu[$numparent]['rowid'];
$fk_parent=str_replace('r=','',$fk_parent);
if (isset($this->menu[$fk_parent]['rowid']))
{
$menu->fk_menu=$this->menu[$fk_parent]['rowid'];
$foundparent=1;
}
}
else
elseif (preg_match('/mainmenu=(.*),leftmenu=(.*)/',$fk_parent,$reg))
{
$this->error="BadDefinitionOfMenuArrayInModuleDescriptor";
$menu->fk_menu=-1;
$menu->fk_mainmenu=$reg[1];
$menu->fk_leftmenu=$reg[2];
$foundparent=1;
}
if (! $foundparent)
{
$this->error="ErrorBadDefinitionOfMenuArrayInModuleDescriptor (bad value for key fk_menu)";
dol_syslog("DolibarrModules::insert_menus ".$this->error." ".$this->menu[$key]['fk_menu'], LOG_ERR);
$err++;
}

View File

@ -43,7 +43,12 @@ ALTER TABLE llx_societe ADD COLUMN fk_currency integer DEFAULT 0 AFTER fk_forme_
ALTER TABLE llx_societe_remise MODIFY remise_client double(6,3) DEFAULT 0 NOT NULL;
create table llx_c_availability
ALTER TABLE llx_menu ADD COLUMN fk_mainmenu varchar(16) after fk_menu;
ALTER TABLE llx_menu ADD COLUMN fk_leftmenu varchar(16) after fk_menu;
ALTER TABLE llx_menu MODIFY leftmenu varchar(100) NULL;
CREATE TABLE llx_c_availability
(
rowid integer AUTO_INCREMENT PRIMARY KEY,
code varchar(30) NOT NULL,
@ -55,7 +60,9 @@ create table llx_c_availability
ALTER TABLE llx_propal ADD COLUMN fk_availability integer DEFAULT 0 AFTER fk_adresse_livraison;
ALTER TABLE llx_propal CHANGE COLUMN delivery fk_availability integer DEFAULT 0;
ALTER TABLE llx_availability CHANGE COLUMN libelle label varchar(60) NOT NULL;
INSERT INTO llx_c_availability (rowid,code,label,active) VALUES (1, 'DSP', 'Disponible', 1);
INSERT INTO llx_c_availability (rowid,code,label,active) VALUES (2, 'USM', 'Une semaine', 1);
INSERT INTO llx_c_availability (rowid,code,label,active) VALUES (3, 'DSM', 'Deux semaines', 1);
INSERT INTO llx_c_availability (rowid,code,label,active) VALUES (4, 'TSM', 'Trois semaines', 1);
INSERT INTO llx_c_availability (rowid,code,label,active) VALUES (1, 'AV_NOW', 'Immediate', 1);
INSERT INTO llx_c_availability (rowid,code,label,active) VALUES (2, 'AV_1W', 'One week', 1);
INSERT INTO llx_c_availability (rowid,code,label,active) VALUES (3, 'AV_2W', 'Two weeks', 1);
INSERT INTO llx_c_availability (rowid,code,label,active) VALUES (4, 'AV_3W', 'Three weeks', 1);

View File

@ -29,14 +29,16 @@ CREATE TABLE llx_menu
module varchar(64), -- Module name if record is added by a module
type varchar(4) NOT NULL, -- Menu top or left
mainmenu varchar(100) NOT NULL, -- Name family/module (home, companies, ...)
fk_menu integer NOT NULL, -- 0 or Id of mother menu line
leftmenu varchar(100) NULL, -- Name family/module for left menu (setup, info, ...)
fk_menu integer NOT NULL, -- 0 or Id of mother menu line, or -1 if we use fk_mainmenu and fk_leftmenu
fk_mainmenu varchar(16), --
fk_leftmenu varchar(16), --
position integer NOT NULL, -- Sort order of entry
url varchar(255) NOT NULL, -- Relative (or absolute) url to go
target varchar(100) NULL, -- Target of Url link
titre varchar(255) NOT NULL, -- Key for menu translation
langs varchar(100), -- Lang file to load for translation
level smallint, -- Used by auguria menu only. Do not use.
leftmenu varchar(1) NULL default '1', -- Say if left menu defined in pre.inc.php and used by top menu must be overwritten by dynamic databse menu (1=yes by default)
level smallint, -- Deprecated. Not used.
perms varchar(255), -- Condition to show enabled or disabled
enabled varchar(255) NULL default '1', -- Condition to show or hide
usertype integer NOT NULL default '0', -- 0 if menu for all users, 1 for external only, 2 for internal only

View File

@ -139,20 +139,12 @@ function tree_showpad(&$fulltree,$key,$selected=0)
// ------------------------------- Used by enu editor -----------------
// ------------------------------- Used by menu editor -----------------
/**
* \brief Ad javascript tree functions
*/
function tree_addjs()
{
global $langs;
print '<script src="'.DOL_URL_ROOT.'/admin/menus/menu.js.php?lang='.$langs->defaultlang.'" type="text/javascript"></script>';
}
/* cette fonction gere le decallage des elements
suivant leur position dans l'arborescence
* Show an element with correct offset
* @param $tab Array of all elements
* @param $rang Level of offset
*/
function tree_showline($tab,$rang)
{
@ -220,10 +212,11 @@ function tree_showline($tab,$rang)
}
/*fonction r<EFBFBD>cursive d'affichage de l'arbre
$tab :tableau des <EFBFBD>l<EFBFBD>ments
$pere :index de l'<EFBFBD>l<EFBFBD>ment courant
$rang :d<EFBFBD>callage de l'<EFBFBD>l<EFBFBD>ment
/**
* Recursive function to output menu tree
* @param $tab Array of elements
* @param $pere Id of parent
* @param $rang Level of element
*/
function tree_recur($tab,$pere,$rang)
{
@ -232,17 +225,16 @@ function tree_recur($tab,$pere,$rang)
if ($rang > 10) return; // Protection contre boucle infinie
//ballayage du tableau
for ($x=0;$x<count($tab);$x++)
$sizeoftab=count($tab);
for ($x=0; $x < $sizeoftab; $x++)
{
//si un <20>l<EFBFBD>ment a pour p<>re : $pere
// If an element has $pere for parent
if ($tab[$x][1]==$pere)
{
//on l'affiche avec le d<>callage courrant
// We shot it with an offset
tree_showline($tab[$x],$rang);
/*et on recherche ses fils
en rappelant la fonction recur()
(+ incr<EFBFBD>mentation du d<EFBFBD>callage)*/
// And now we search all its sons of lower level
tree_recur($tab,$tab[$x][0],$rang+1);
}
}