2
0
forked from Wavyzz/dolibarr

modules can add prefix for menu

This commit is contained in:
Frédéric FRANCE
2021-02-06 10:16:07 +01:00
parent c441b54521
commit df67de08b1
4 changed files with 36 additions and 22 deletions

View File

@@ -111,6 +111,11 @@ class Menubase
*/ */
public $title; public $title;
/**
* @var string Prefix
*/
public $prefix;
/** /**
* @var string Lang file to load for translation * @var string Lang file to load for translation
*/ */
@@ -248,6 +253,7 @@ class Menubase
$sql .= "url,"; $sql .= "url,";
$sql .= "target,"; $sql .= "target,";
$sql .= "titre,"; $sql .= "titre,";
$sql .= "prefix,";
$sql .= "langs,"; $sql .= "langs,";
$sql .= "perms,"; $sql .= "perms,";
$sql .= "enabled,"; $sql .= "enabled,";
@@ -266,6 +272,7 @@ class Menubase
$sql .= " '".$this->db->escape($this->url)."',"; $sql .= " '".$this->db->escape($this->url)."',";
$sql .= " '".$this->db->escape($this->target)."',"; $sql .= " '".$this->db->escape($this->target)."',";
$sql .= " '".$this->db->escape($this->title)."',"; $sql .= " '".$this->db->escape($this->title)."',";
$sql .= " '".$this->db->escape($this->prefix)."',";
$sql .= " '".$this->db->escape($this->langs)."',"; $sql .= " '".$this->db->escape($this->langs)."',";
$sql .= " '".$this->db->escape($this->perms)."',"; $sql .= " '".$this->db->escape($this->perms)."',";
$sql .= " '".$this->db->escape($this->enabled)."',"; $sql .= " '".$this->db->escape($this->enabled)."',";
@@ -319,6 +326,7 @@ class Menubase
$this->url = trim($this->url); $this->url = trim($this->url);
$this->target = trim($this->target); $this->target = trim($this->target);
$this->title = trim($this->title); $this->title = trim($this->title);
$this->prefix = trim($this->prefix);
$this->langs = trim($this->langs); $this->langs = trim($this->langs);
$this->perms = trim($this->perms); $this->perms = trim($this->perms);
$this->enabled = trim($this->enabled); $this->enabled = trim($this->enabled);
@@ -341,6 +349,7 @@ class Menubase
$sql .= " url='".$this->db->escape($this->url)."',"; $sql .= " url='".$this->db->escape($this->url)."',";
$sql .= " target='".$this->db->escape($this->target)."',"; $sql .= " target='".$this->db->escape($this->target)."',";
$sql .= " titre='".$this->db->escape($this->title)."',"; $sql .= " titre='".$this->db->escape($this->title)."',";
$sql .= " prefix='".$this->db->escape($this->prefix)."',";
$sql .= " langs='".$this->db->escape($this->langs)."',"; $sql .= " langs='".$this->db->escape($this->langs)."',";
$sql .= " perms='".$this->db->escape($this->perms)."',"; $sql .= " perms='".$this->db->escape($this->perms)."',";
$sql .= " enabled='".$this->db->escape($this->enabled)."',"; $sql .= " enabled='".$this->db->escape($this->enabled)."',";
@@ -385,6 +394,7 @@ class Menubase
$sql .= " t.url,"; $sql .= " t.url,";
$sql .= " t.target,"; $sql .= " t.target,";
$sql .= " t.titre as title,"; $sql .= " t.titre as title,";
$sql .= " t.prefix,";
$sql .= " t.langs,"; $sql .= " t.langs,";
$sql .= " t.perms,"; $sql .= " t.perms,";
$sql .= " t.enabled,"; $sql .= " t.enabled,";
@@ -416,6 +426,7 @@ class Menubase
$this->url = $obj->url; $this->url = $obj->url;
$this->target = $obj->target; $this->target = $obj->target;
$this->title = $obj->title; $this->title = $obj->title;
$this->prefix = $obj->prefix;
$this->langs = $obj->langs; $this->langs = $obj->langs;
$this->perms = $obj->perms; $this->perms = $obj->perms;
$this->enabled = str_replace("\"", "'", $obj->enabled); $this->enabled = str_replace("\"", "'", $obj->enabled);
@@ -505,8 +516,7 @@ class Menubase
$leftmenu = $myleftmenu; // To export to dol_eval function $leftmenu = $myleftmenu; // To export to dol_eval function
$newTabMenu = array(); $newTabMenu = array();
foreach ($tabMenu as $val) foreach ($tabMenu as $val) {
{
if ($val['type'] == 'top') $newTabMenu[] = $val; if ($val['type'] == 'top') $newTabMenu[] = $val;
} }
@@ -554,15 +564,13 @@ class Menubase
// Now complete $this->newmenu->list when fk_menu value is -1 (left menu added by modules with no top menu) // Now complete $this->newmenu->list when fk_menu value is -1 (left menu added by modules with no top menu)
foreach ($tabMenu as $key => $val) foreach ($tabMenu as $key => $val)
{ {
//var_dump($tabMenu);
if ($val['fk_menu'] == -1 && $val['fk_mainmenu'] == $mainmenu) // We found a menu entry not linked to parent with good mainmenu if ($val['fk_menu'] == -1 && $val['fk_mainmenu'] == $mainmenu) // We found a menu entry not linked to parent with good mainmenu
{ {
//print 'Try to add menu (current is mainmenu='.$mainmenu.' leftmenu='.$leftmenu.') for '.join(',',$val).' fk_mainmenu='.$val['fk_mainmenu'].' fk_leftmenu='.$val['fk_leftmenu'].'<br>'; //print 'Try to add menu (current is mainmenu='.$mainmenu.' leftmenu='.$leftmenu.') for '.join(',',$val).' fk_mainmenu='.$val['fk_mainmenu'].' fk_leftmenu='.$val['fk_leftmenu'].'<br>';
//var_dump($this->newmenu->liste);exit; //var_dump($this->newmenu->liste);exit;
if (empty($val['fk_leftmenu'])) if (empty($val['fk_leftmenu'])) {
{ $this->newmenu->add($val['url'], $val['titre'], 0, $val['perms'], $val['target'], $val['mainmenu'], $val['leftmenu'], $val['position'], '', '', '', $val['prefix']);
$this->newmenu->add($val['url'], $val['titre'], 0, $val['perms'], $val['target'], $val['mainmenu'], $val['leftmenu'], $val['position']);
//var_dump($this->newmenu->liste); //var_dump($this->newmenu->liste);
} else { } else {
// Search first menu with this couple (mainmenu,leftmenu)=(fk_mainmenu,fk_leftmenu) // Search first menu with this couple (mainmenu,leftmenu)=(fk_mainmenu,fk_leftmenu)
@@ -579,8 +587,7 @@ class Menubase
break; break;
} }
} }
if ($valparent['mainmenu'] == $val['fk_mainmenu'] && $valparent['leftmenu'] == $val['fk_leftmenu']) if ($valparent['mainmenu'] == $val['fk_mainmenu'] && $valparent['leftmenu'] == $val['fk_leftmenu']) {
{
//print "We found parent: keyparent='.$keyparent.' - level=".$valparent['level'].' - '.join(',',$valparent).'<br>'; //print "We found parent: keyparent='.$keyparent.' - level=".$valparent['level'].' - '.join(',',$valparent).'<br>';
// Now we look to find last subelement of this parent (we add at end) // Now we look to find last subelement of this parent (we add at end)
$searchlastsub = ($valparent['level'] + 1); $searchlastsub = ($valparent['level'] + 1);
@@ -589,8 +596,9 @@ class Menubase
} }
} }
//print 'We must insert menu entry between entry '.$lastid.' and '.$nextid.'<br>'; //print 'We must insert menu entry between entry '.$lastid.' and '.$nextid.'<br>';
if ($found) $this->newmenu->insert($lastid, $val['url'], $val['titre'], $searchlastsub, $val['perms'], $val['target'], $val['mainmenu'], $val['leftmenu'], $val['position']); if ($found) {
else { $this->newmenu->insert($lastid, $val['url'], $val['titre'], $searchlastsub, $val['perms'], $val['target'], $val['mainmenu'], $val['leftmenu'], $val['position'], '', '', '', $val['prefix']);
} else {
dol_syslog("Error. Modules ".$val['module']." has defined a menu entry with a parent='fk_mainmenu=".$val['fk_leftmenu'].",fk_leftmenu=".$val['fk_leftmenu']."' and position=".$val['position'].'. The parent was not found. May be you forget it into your definition of menu, or may be the parent has a "position" that is after the child (fix field "position" of parent or child in this case).', LOG_WARNING); dol_syslog("Error. Modules ".$val['module']." has defined a menu entry with a parent='fk_mainmenu=".$val['fk_leftmenu'].",fk_leftmenu=".$val['fk_leftmenu']."' and position=".$val['position'].'. The parent was not found. May be you forget it into your definition of menu, or may be the parent has a "position" that is after the child (fix field "position" of parent or child in this case).', LOG_WARNING);
//print "Parent menu not found !!<br>"; //print "Parent menu not found !!<br>";
} }
@@ -620,7 +628,7 @@ class Menubase
$mainmenu = $mymainmenu; // To export to dol_eval function $mainmenu = $mymainmenu; // To export to dol_eval function
$leftmenu = $myleftmenu; // To export to dol_eval function $leftmenu = $myleftmenu; // To export to dol_eval function
$sql = "SELECT m.rowid, m.type, m.module, m.fk_menu, m.fk_mainmenu, m.fk_leftmenu, m.url, m.titre, m.langs, m.perms, m.enabled, m.target, m.mainmenu, m.leftmenu, m.position"; $sql = "SELECT m.rowid, m.type, m.module, m.fk_menu, m.fk_mainmenu, m.fk_leftmenu, m.url, m.titre, m.prefix, m.langs, m.perms, m.enabled, m.target, m.mainmenu, m.leftmenu, m.position";
$sql .= " FROM ".MAIN_DB_PREFIX."menu as m"; $sql .= " FROM ".MAIN_DB_PREFIX."menu as m";
$sql .= " WHERE m.entity IN (0,".$conf->entity.")"; $sql .= " WHERE m.entity IN (0,".$conf->entity.")";
$sql .= " AND m.menu_handler IN ('".$this->db->escape($menu_handler)."','all')"; $sql .= " AND m.menu_handler IN ('".$this->db->escape($menu_handler)."','all')";
@@ -700,12 +708,15 @@ class Menubase
$tabMenu[$b]['module'] = $menu['module']; $tabMenu[$b]['module'] = $menu['module'];
$tabMenu[$b]['fk_menu'] = $menu['fk_menu']; $tabMenu[$b]['fk_menu'] = $menu['fk_menu'];
$tabMenu[$b]['url'] = $menu['url']; $tabMenu[$b]['url'] = $menu['url'];
if (!preg_match("/^(http:\/\/|https:\/\/)/i", $tabMenu[$b]['url'])) if (!preg_match("/^(http:\/\/|https:\/\/)/i", $tabMenu[$b]['url'])) {
{ if (preg_match('/\?/', $tabMenu[$b]['url'])) {
if (preg_match('/\?/', $tabMenu[$b]['url'])) $tabMenu[$b]['url'] .= '&amp;idmenu='.$menu['rowid']; $tabMenu[$b]['url'] .= '&amp;idmenu='.$menu['rowid'];
else $tabMenu[$b]['url'] .= '?idmenu='.$menu['rowid']; } else {
$tabMenu[$b]['url'] .= '?idmenu='.$menu['rowid'];
}
} }
$tabMenu[$b]['titre'] = $title; $tabMenu[$b]['titre'] = $title;
$tabMenu[$b]['prefix'] = $menu['prefix'];
$tabMenu[$b]['target'] = $menu['target']; $tabMenu[$b]['target'] = $menu['target'];
$tabMenu[$b]['mainmenu'] = $menu['mainmenu']; $tabMenu[$b]['mainmenu'] = $menu['mainmenu'];
$tabMenu[$b]['leftmenu'] = $menu['leftmenu']; $tabMenu[$b]['leftmenu'] = $menu['leftmenu'];
@@ -750,9 +761,8 @@ class Menubase
for ($x = 0; $x < $num; $x++) for ($x = 0; $x < $num; $x++)
{ {
//si un element a pour pere : $pere //si un element a pour pere : $pere
if ((($tab[$x]['fk_menu'] >= 0 && $tab[$x]['fk_menu'] == $pere)) && $tab[$x]['enabled']) if ((($tab[$x]['fk_menu'] >= 0 && $tab[$x]['fk_menu'] == $pere)) && $tab[$x]['enabled']) {
{ $this->newmenu->add($tab[$x]['url'], $tab[$x]['titre'], ($level - 1), $tab[$x]['perms'], $tab[$x]['target'], $tab[$x]['mainmenu'], $tab[$x]['leftmenu'], 0, '', '', '', $tab[$x]['prefix']);
$this->newmenu->add($tab[$x]['url'], $tab[$x]['titre'], ($level - 1), $tab[$x]['perms'], $tab[$x]['target'], $tab[$x]['mainmenu'], $tab[$x]['leftmenu']);
$this->recur($tab, $tab[$x]['rowid'], ($level + 1)); $this->recur($tab, $tab[$x]['rowid'], ($level + 1));
} }
} }

View File

@@ -1869,6 +1869,7 @@ class DolibarrModules // Can not be abstract, because we need to instantiate it
$menu->mainmenu = isset($this->menu[$key]['mainmenu']) ? $this->menu[$key]['mainmenu'] : (isset($menu->fk_mainmenu) ? $menu->fk_mainmenu : ''); $menu->mainmenu = isset($this->menu[$key]['mainmenu']) ? $this->menu[$key]['mainmenu'] : (isset($menu->fk_mainmenu) ? $menu->fk_mainmenu : '');
$menu->leftmenu = isset($this->menu[$key]['leftmenu']) ? $this->menu[$key]['leftmenu'] : ''; $menu->leftmenu = isset($this->menu[$key]['leftmenu']) ? $this->menu[$key]['leftmenu'] : '';
$menu->title = $this->menu[$key]['titre']; $menu->title = $this->menu[$key]['titre'];
$menu->prefix = $this->menu[$key]['prefix'];
$menu->url = $this->menu[$key]['url']; $menu->url = $this->menu[$key]['url'];
$menu->langs = $this->menu[$key]['langs']; $menu->langs = $this->menu[$key]['langs'];
$menu->position = $this->menu[$key]['position']; $menu->position = $this->menu[$key]['position'];

View File

@@ -121,4 +121,6 @@ ALTER TABLE llx_societe ADD INDEX idx_societe_warehouse(fk_warehouse);
ALTER TABLE llx_socpeople MODIFY poste varchar(255); ALTER TABLE llx_socpeople MODIFY poste varchar(255);
ALTER TABLE llx_menu ADD COLUMN prefix varchar(255) NOT NULL;
ALTER TABLE llx_chargesociales ADD COLUMN fk_user integer DEFAULT NULL; ALTER TABLE llx_chargesociales ADD COLUMN fk_user integer DEFAULT NULL;

View File

@@ -30,17 +30,18 @@ CREATE TABLE llx_menu
mainmenu varchar(100) NOT NULL, -- Name family/module for top menu (home, companies, ...) mainmenu varchar(100) NOT NULL, -- Name family/module for top menu (home, companies, ...)
leftmenu varchar(100) NULL, -- Name family/module for left menu (setup, info, ...) 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_menu integer NOT NULL, -- 0 or Id of mother menu line, or -1 if we use fk_mainmenu and fk_leftmenu
fk_mainmenu varchar(100), -- fk_mainmenu varchar(100), --
fk_leftmenu varchar(100), -- fk_leftmenu varchar(100), --
position integer NOT NULL, -- Sort order of entry position integer NOT NULL, -- Sort order of entry
url varchar(255) NOT NULL, -- Relative (or absolute) url to go url varchar(255) NOT NULL, -- Relative (or absolute) url to go
target varchar(100) NULL, -- Target of Url link target varchar(100) NULL, -- Target of Url link
titre varchar(255) NOT NULL, -- Key for menu translation titre varchar(255) NOT NULL, -- Key for menu translation
prefix varchar(255) NOT NULL, -- prefix
langs varchar(100), -- Lang file to load for translation langs varchar(100), -- Lang file to load for translation
level smallint, -- Deprecated. Not used. level smallint, -- Deprecated. Not used.
perms text, -- Condition to show enabled or disabled perms text, -- Condition to show enabled or disabled
enabled text NULL, -- Condition to show or hide enabled text NULL, -- 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 usertype integer NOT NULL DEFAULT 0, -- 0 if menu for all users, 1 for external only, 2 for internal only
tms timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP tms timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
) ENGINE=innodb; ) ENGINE=innodb;