2
0
forked from Wavyzz/dolibarr

Qual: Simplify code for menu handlers

This commit is contained in:
Laurent Destailleur
2008-05-01 19:39:25 +00:00
parent 262688961d
commit d4c98d59ca
9 changed files with 208 additions and 172 deletions

View File

@@ -409,8 +409,10 @@ class Menubase
//on affiche le menu //on affiche le menu
if ($this->verifConstraint($tab[$x][0], $tab[$x][6], $tab[$x][7]) != 0) { if ($this->verifConstraint($tab[$x][0], $tab[$x][6], $tab[$x][7]) != 0)
{
$leftmenuConstraint = true;
if ($tab[$x][6]) if ($tab[$x][6])
{ {
$leftmenuConstraint = false; $leftmenuConstraint = false;
@@ -418,26 +420,28 @@ class Menubase
//print $str."<br>\n"; //print $str."<br>\n";
//eval ($str); //eval ($str);
dol_eval($str); dol_eval($str);
}
if ($leftmenuConstraint == true) if ($leftmenuConstraint == true)
{ {
$this->newmenu->add_submenu(DOL_URL_ROOT . $tab[$x][2], $tab[$x][3], $rang -1, $tab[$x][4], $tab[$x][5]); $this->newmenu->add_submenu(DOL_URL_ROOT . $tab[$x][2], $tab[$x][3], $rang -1, $tab[$x][4], $tab[$x][5]);
$this->recur($tab, $tab[$x][0], $rang +1); $this->recur($tab, $tab[$x][0], $rang +1);
} }
} }
else
{
$this->newmenu->add_submenu(DOL_URL_ROOT . $tab[$x][2], $tab[$x][3], $rang -1, $tab[$x][4], $tab[$x][5]);
$this->recur($tab, $tab[$x][0], $rang +1);
}
}
} }
} }
} }
// \TODO Avoid call for each /**
* Check if constraint defined by rowid is ok or not
* \TODO Avoid call for each
*
* @param unknown_type $rowid
* @param unknown_type $mainmenu
* @param unknown_type $leftmenu
* @return unknown
*/
function verifConstraint($rowid, $mainmenu = "", $leftmenu = "") function verifConstraint($rowid, $mainmenu = "", $leftmenu = "")
{ {
global $user, $conf, $lang; global $user, $conf, $lang;
@@ -446,9 +450,9 @@ class Menubase
include_once(DOL_DOCUMENT_ROOT.'/lib/admin.lib.php'); // Because later some eval try to run dynamic call to dolibarr_get_const include_once(DOL_DOCUMENT_ROOT.'/lib/admin.lib.php'); // Because later some eval try to run dynamic call to dolibarr_get_const
$constraint = true; $constraint = true;
$sql = "SELECT c.rowid, c.action, mc.user"; $sql = "SELECT c.rowid, c.action";
$sql.= " FROM " . MAIN_DB_PREFIX . "menu_constraint as c, " . MAIN_DB_PREFIX . "menu_const as mc"; $sql.= " FROM " . MAIN_DB_PREFIX . "menu_constraint as c, " . MAIN_DB_PREFIX . "menu_const as mc";
$sql.= " WHERE mc.fk_constraint = c.rowid AND (mc.user = 0 OR mc.user = 2) AND mc.fk_menu = '" . $rowid . "'"; $sql.= " WHERE mc.fk_constraint = c.rowid AND mc.fk_menu = '" . $rowid . "'";
dolibarr_syslog("Menubase::verifConstraint sql=".$sql); dolibarr_syslog("Menubase::verifConstraint sql=".$sql);
$result = $this->db->query($sql); $result = $this->db->query($sql);
@@ -525,14 +529,19 @@ class Menubase
* \param type_user 0=Internal,1=External,2=All * \param type_user 0=Internal,1=External,2=All
* \param mainmenu Value for mainmenu that defined top menu * \param mainmenu Value for mainmenu that defined top menu
* \param menu_handler Name of menu_handler used (auguria, eldy...) * \param menu_handler Name of menu_handler used (auguria, eldy...)
* \return array Return array with menu entries for top menu
*/ */
function menutopCharger($type_user, $mainmenu, $menu_handler) function menuTopCharger($type_user, $mainmenu, $menu_handler)
{ {
global $langs, $user, $conf; global $langs, $user, $conf;
global $rights; // To export to dol_eval function global $rights; // To export to dol_eval function
$tabMenu=array();
$sql = "SELECT m.rowid, m.mainmenu, m.titre, m.url, m.langs, m.perms"; $sql = "SELECT m.rowid, m.mainmenu, m.titre, m.url, m.langs, m.perms";
$sql.= " FROM ".MAIN_DB_PREFIX."menu as m"; $sql.= " FROM ".MAIN_DB_PREFIX."menu as m";
$sql.= " LEFT JOIN ".MAIN_DB_PREFIX."menu_const as mc ON m.rowid = mc.fk_menu";
$sql.= " LEFT JOIN ".MAIN_DB_PREFIX."menu_constraint as mo ON mc.fk_constraint = mo.rowid";
$sql.= " WHERE m.type = 'top'"; $sql.= " WHERE m.type = 'top'";
$sql.= " AND m.menu_handler in('".$menu_handler."','all')"; $sql.= " AND m.menu_handler in('".$menu_handler."','all')";
if ($type_user == 0) $sql.= " AND m.user in (0,2)"; if ($type_user == 0) $sql.= " AND m.user in (0,2)";
@@ -547,14 +556,12 @@ class Menubase
$a = 0; $a = 0;
$b = 0; $b = 0;
$oldrowid=0;
while ($a < $numa) while ($a < $numa)
{ {
// Init tabMenu array // Init tabMenu array
$objm = $this->db->fetch_object($resql); $objm = $this->db->fetch_object($resql);
//print "x".$objm->rowid;
if ($this->verifConstraint($objm->rowid))
{
// Define class // Define class
$class=""; $class="";
if ($_SESSION["mainmenu"] && $_SESSION["mainmenu"] == $objm->mainmenu) if ($_SESSION["mainmenu"] && $_SESSION["mainmenu"] == $objm->mainmenu)
@@ -563,14 +570,6 @@ class Menubase
} }
$chaine=""; $chaine="";
// Define $right
$rights = true;
if ($objm->perms)
{
$str = 'if(!('.$objm->perms.')) { $rights = false; }';
dol_eval($str);
}
// Define $chaine // Define $chaine
$title=$objm->titre; $title=$objm->titre;
if (! eregi('\(dotnoloadlang\)$',$title)) if (! eregi('\(dotnoloadlang\)$',$title))
@@ -592,18 +591,41 @@ class Menubase
$chaine = $langs->trans($title); $chaine = $langs->trans($title);
} }
// Define $right
$rights = true;
if ($objm->perms)
{
$rights = false;
$str = 'if ('.$objm->perms.') { $rights = true; }';
dol_eval($str);
//print "Check permission for ".$objm->perms.": rights=".$rights."<br>\n";
}
// Define $constraint
$constraint = true;
if ($objm->action)
{
$constraint = false;
$strconstraint = 'if (' . $objm->action . ') { $constraint = true; }';
dol_eval($strconstraint);
//print "Check permission for ".$objm->perms.": rights=".$rights."<br>\n";
}
if ($objm->rowid != $oldrowid && $oldrowid) $b++; // Break on new entry
$oldrowid=$objm->rowid;
$tabMenu[$b]['rowid'] = $objm->rowid; $tabMenu[$b]['rowid'] = $objm->rowid;
$tabMenu[$b]['mainmenu'] = $objm->mainmenu; $tabMenu[$b]['mainmenu'] = $objm->mainmenu;
$tabMenu[$b]['titre'] = $chaine; // Title $tabMenu[$b]['titre'] = $chaine; // Title
$tabMenu[$b]['url'] = $objm->url; $tabMenu[$b]['url'] = $objm->url;
$tabMenu[$b]['atarget'] = $this->atarget; $tabMenu[$b]['atarget'] = $this->atarget;
$tabMenu[$b]['class'] = $class; $tabMenu[$b]['class'] = $class;
$tabMenu[$b]['right'] = $rights; if (! isset($tabMenu[$b]['right'])) $tabMenu[$b]['right'] = $rights;
else $tabMenu[$b]['right'] = ($tabMenu[$b]['right'] && $rights);
$b++; if (! isset($tabMenu[$b]['enabled'])) $tabMenu[$b]['enabled'] = $constraint;
else $tabMenu[$b]['enabled'] = ($tabMenu[$b]['enabled'] && $constraint);
}
//var_dump($tabMenu);
$a++; $a++;
} }
} }

View File

@@ -77,11 +77,13 @@ class MenuTop {
$menuArbo = new Menubase($this->db,'auguria','top'); $menuArbo = new Menubase($this->db,'auguria','top');
$tabMenu = $menuArbo->menutopCharger(0,$_SESSION['mainmenu'], 'auguria'); $tabMenu = $menuArbo->menuTopCharger(0,$_SESSION['mainmenu'], 'auguria');
print '<ul>'; print '<ul>';
for($i=0; $i<count($tabMenu); $i++) for($i=0; $i<count($tabMenu); $i++)
{
if ($tabMenu[$i]['enabled'] == true)
{ {
if ($tabMenu[$i]['right'] == true) if ($tabMenu[$i]['right'] == true)
{ {
@@ -100,7 +102,7 @@ class MenuTop {
{ {
print '<li><div class="tmenudisabled">'.$tabMenu[$i]['titre'].'</div></li>'; print '<li><div class="tmenudisabled">'.$tabMenu[$i]['titre'].'</div></li>';
} }
}
} }
print '</ul>'; print '</ul>';

View File

@@ -77,11 +77,13 @@ class MenuTop {
$menuArbo = new Menubase($this->db,'auguria','top'); $menuArbo = new Menubase($this->db,'auguria','top');
$tabMenu = $menuArbo->menutopCharger(1,$_SESSION['mainmenu'], 'auguria'); $tabMenu = $menuArbo->menuTopCharger(1,$_SESSION['mainmenu'], 'auguria');
print '<ul>'; print '<ul>';
for($i=0; $i<count($tabMenu); $i++) for($i=0; $i<count($tabMenu); $i++)
{
if ($tabMenu[$i]['enabled'] == true)
{ {
if ($tabMenu[$i]['right'] == true) if ($tabMenu[$i]['right'] == true)
{ {
@@ -100,7 +102,7 @@ class MenuTop {
{ {
print '<li><div class="tmenudisabled">'.$tabMenu[$i]['titre'].'</div></li>'; print '<li><div class="tmenudisabled">'.$tabMenu[$i]['titre'].'</div></li>';
} }
}
} }
print '</ul>'; print '</ul>';

View File

@@ -346,8 +346,11 @@ class MenuTop {
require_once(DOL_DOCUMENT_ROOT."/core/menubase.class.php"); require_once(DOL_DOCUMENT_ROOT."/core/menubase.class.php");
$menuArbo = new Menubase($this->db,'eldy','top'); $menuArbo = new Menubase($this->db,'eldy','top');
$tabMenu = $menuArbo->menutopCharger(0,$_SESSION['mainmenu'],'eldy'); $tabMenu = $menuArbo->menuTopCharger(0,$_SESSION['mainmenu'],'eldy');
for($i=0; $i<count($tabMenu); $i++) for($i=0; $i<count($tabMenu); $i++)
{
if ($tabMenu[$i]['enabled'] == true)
{ {
if ($tabMenu[$i]['right'] == true) if ($tabMenu[$i]['right'] == true)
{ {
@@ -368,6 +371,7 @@ class MenuTop {
print '<td class="tmenu"><font class="tmenudisabled">'.$tabMenu[$i]['titre'].'</font></td>'; print '<td class="tmenu"><font class="tmenudisabled">'.$tabMenu[$i]['titre'].'</font></td>';
} }
} }
}
print '</tr></table>'; print '</tr></table>';

View File

@@ -311,8 +311,10 @@ class MenuTop {
require_once(DOL_DOCUMENT_ROOT."/core/menubase.class.php"); require_once(DOL_DOCUMENT_ROOT."/core/menubase.class.php");
$menuArbo = new Menubase($this->db,'eldy','top'); $menuArbo = new Menubase($this->db,'eldy','top');
$tabMenu = $menuArbo->menutopCharger(1,$_SESSION['mainmenu'],'eldy'); $tabMenu = $menuArbo->menuTopCharger(1,$_SESSION['mainmenu'],'eldy');
for($i=0; $i<count($tabMenu); $i++) for($i=0; $i<count($tabMenu); $i++)
{
if ($tabMenu[$i]['enabled'] == true)
{ {
if ($tabMenu[$i]['right'] == true) if ($tabMenu[$i]['right'] == true)
{ {
@@ -330,7 +332,7 @@ class MenuTop {
{ {
print '<td class="tmenu"><font class="tmenudisabled">'.$tabMenu[$i]['titre'].'</font></td>'; print '<td class="tmenu"><font class="tmenudisabled">'.$tabMenu[$i]['titre'].'</font></td>';
} }
}
} }
print '</tr></table>'; print '</tr></table>';

View File

@@ -71,8 +71,10 @@ class MenuTop {
require_once(DOL_DOCUMENT_ROOT."/core/menubase.class.php"); require_once(DOL_DOCUMENT_ROOT."/core/menubase.class.php");
$menuArbo = new Menubase($this->db,'eldy','top'); $menuArbo = new Menubase($this->db,'eldy','top');
$tabMenu = $menuArbo->menutopCharger(2,$_SESSION['mainmenu'],''); $tabMenu = $menuArbo->menuTopCharger(2,$_SESSION['mainmenu'],'');
for($i=0;$i<count($tabMenu);$i++) for($i=0;$i<count($tabMenu);$i++)
{
if ($tabMenu[$i]['enabled'] == true)
{ {
if ($tabMenu[$i]['right'] == true) if ($tabMenu[$i]['right'] == true)
{ {
@@ -90,7 +92,7 @@ class MenuTop {
{ {
print '<td class="tmenu"><font class="tmenudisabled">'.$tabMenu[$i]['titre'].'</font></td>'; print '<td class="tmenu"><font class="tmenudisabled">'.$tabMenu[$i]['titre'].'</font></td>';
} }
}
} }
*/ */

View File

@@ -310,8 +310,11 @@ class MenuTop {
require_once(DOL_DOCUMENT_ROOT."/core/menubase.class.php"); require_once(DOL_DOCUMENT_ROOT."/core/menubase.class.php");
$menuArbo = new Menubase($this->db,'rodolphe','top'); $menuArbo = new Menubase($this->db,'rodolphe','top');
$tabMenu = $menuArbo->menutopCharger(2,$_SESSION['mainmenu'],'rodolphe'); $tabMenu = $menuArbo->menuTopCharger(2,$_SESSION['mainmenu'],'rodolphe');
for($i=0;$i<count($tabMenu);$i++) for($i=0;$i<count($tabMenu);$i++)
{
if ($tabMenu[$i]['enabled'] == true)
{ {
if ($tabMenu[$i]['right'] == true) if ($tabMenu[$i]['right'] == true)
{ {
@@ -330,7 +333,7 @@ class MenuTop {
{ {
print '<td class="tmenu"><font class="tmenudisabled">'.$tabMenu[$i]['titre'].'</font></td>'; print '<td class="tmenu"><font class="tmenudisabled">'.$tabMenu[$i]['titre'].'</font></td>';
} }
}
} }

View File

@@ -252,6 +252,8 @@ alter table llx_tva modify fk_bank integer;
delete from llx_const where name='MAIN_USE_PREVIEW_TABS'; delete from llx_const where name='MAIN_USE_PREVIEW_TABS';
alter table llx_menu_const drop column user;
create table llx_ecm_directories create table llx_ecm_directories
( (
rowid integer AUTO_INCREMENT PRIMARY KEY, rowid integer AUTO_INCREMENT PRIMARY KEY,

View File

@@ -23,9 +23,6 @@ CREATE TABLE `llx_menu_const` (
`rowid` int(11) NOT NULL auto_increment, `rowid` int(11) NOT NULL auto_increment,
`fk_menu` int(11) NOT NULL, `fk_menu` int(11) NOT NULL,
`fk_constraint` int(11) NOT NULL, `fk_constraint` int(11) NOT NULL,
`user` tinyint(4) NOT NULL default '2', PRIMARY KEY (`rowid`)
PRIMARY KEY (`rowid`),
KEY `fk_menu` (`fk_menu`),
KEY `fk_constraint` (`fk_constraint`)
) type=innodb; ) type=innodb;