New: possibility to declare constraint menu in module

This commit is contained in:
Regis Houssin 2009-04-20 14:12:37 +00:00
parent 1f7f5d1478
commit 2ad54c2100
8 changed files with 167 additions and 31 deletions

View File

@ -146,7 +146,8 @@ class modMyModule extends DolibarrModules
// 'position'=>100,
// 'perms'=>'1', // Use 'perms'=>'$user->rights->mymodule->level1->level2' if you want your menu with a permission rules
// 'target'=>'',
// 'user'=>2); // 0=Menu for internal users, 1=external users, 2=both
// 'user'=>2, // 0=Menu for internal users, 1=external users, 2=both
// 'constraint'=>'$conf->mymodule->enabled'); // Add constraint
// $r++;
//
// Example to declare a Left Menu entry:

View File

@ -182,44 +182,35 @@ if (isset($_GET["action"]) && $_GET["action"] == 'add')
if (isset($_GET["action"]) && $_GET["action"] == 'add_const')
{
if($_POST['type'] == 'prede')
$langs->load("errors");
$menu = new Menubase($db);
$result=$menu->addConstraint($_POST['menuId'], $_POST['constraint'], $_POST['type']);
if ($result > 0)
{
$sql = "INSERT INTO ".MAIN_DB_PREFIX."menu_const(fk_menu, fk_constraint) VALUES(".$_POST['menuId'].",".$_POST['constraint'].")";
$mesg='<div class="ok">'.$langs->trans("RecordModifiedSuccessfully").'</div>';
}
else
{
$sql = "SELECT max(rowid) as maxId FROM ".MAIN_DB_PREFIX."menu_constraint";
$result = $db->query($sql);
$objc = $db->fetch_object($result);
$constraint = ($objc->maxId) + 1;
$sql = "INSERT INTO ".MAIN_DB_PREFIX."menu_constraint(rowid,action) VALUES(".$constraint.",'".$_POST['constraint']."')";
$db->query($sql);
$sql = "INSERT INTO ".MAIN_DB_PREFIX."menu_const(fk_menu, fk_constraint) VALUES(".$_POST['menuId'].",".$constraint.")";
$mesg='<div class="error">'.$menu->error.'</div>';
}
$db->query($sql);
header("location:edit.php?action=edit&menuId=".$_POST['menuId']);
exit;
}
if (isset($_GET["action"]) && $_GET["action"] == 'del_const')
{
$sql = "DELETE FROM ".MAIN_DB_PREFIX."menu_const WHERE fk_menu = ".$_GET['menuId']." AND fk_constraint = ".$_GET['constId'];
$db->query($sql);
$sql = "SELECT count(rowid) as countId FROM ".MAIN_DB_PREFIX."menu_const WHERE fk_constraint = ".$_GET['constId'];
$result = $db->query($sql);
$objc = $db->fetch_object($result);
if($objc->countId == 0)
$langs->load("errors");
$menu = new Menubase($db);
$result=$menu->delConstraint($_GET['menuId'], $_GET['constId']);
if ($result > 0)
{
$sql = "DELETE FROM ".MAIN_DB_PREFIX."menu_constraint WHERE rowid = ".$_GET['constId'];
$db->query($sql);
}
$mesg='<div class="ok">'.$langs->trans("RecordModifiedSuccessfully").'</div>';
}
else
{
$mesg='<div class="error">'.$menu->error.'</div>';
}
header("location:edit.php?action=edit&menuId=".$_GET['menuId']);
exit;
@ -529,7 +520,7 @@ elseif (isset($_GET["action"]) && $_GET["action"] == 'edit')
// Ajout de contraintes predefinis
print '<form action="edit.php?action=add_const" method="post">';
print '<input type="hidden" name="menuId" value="'.$_GET['menuId'].'">';
print '<input type="hidden" name="type" value="prede">';
print '<input type="hidden" name="type" value="predefined">';
$var=!$var;
print '<tr '.$bc[$var].'>';

View File

@ -660,6 +660,114 @@ class Menubase
return $tabMenu;
}
/**
* \brief Add constraint menu
* \param menuId Menu id
* \param constraint Value or id for constraint
* \param type type of constraint
* \return int <0 if KO, >0 if OK
*/
function addConstraint($menuId, $constraint, $type='')
{
if($type == 'predefined')
{
$sql = "INSERT INTO ".MAIN_DB_PREFIX."menu_const(fk_menu, fk_constraint) VALUES(".$menuId.",".$constraint.")";
}
else
{
$sql = "SELECT rowid FROM ".MAIN_DB_PREFIX."menu_constraint";
$sql.= " WHERE action = '".$constraint."'";
$resSql = $this->db->query($sql);
if (! $resSql)
{
$this->error="Error ".$this->db->lasterror();
dol_syslog("Menubase::addConstraint::4 ".$this->error, LOG_ERR);
return -4;
}
$num = $this->db->num_rows($resSql);
if ($num)
{
$obj = $this->db->fetch_object($resSql);
$constraintId = $obj->rowid;
}
else
{
$sql = "SELECT max(rowid) as maxId FROM ".MAIN_DB_PREFIX."menu_constraint";
$resultId = $this->db->query($sql);
if (! $resultId)
{
$this->error="Error ".$this->db->lasterror();
dol_syslog("Menubase::addConstraint::3 ".$this->error, LOG_ERR);
return -3;
}
$objc = $this->db->fetch_object($resultId);
$constraintId = ($objc->maxId) + 1;
$sql = "INSERT INTO ".MAIN_DB_PREFIX."menu_constraint(rowid,action) VALUES(".$constraintId.",'".$constraint."')";
$result = $this->db->query($sql);
if (! $result)
{
$this->error="Error ".$this->db->lasterror();
dol_syslog("Menubase::addConstraint::2 sql = ".$sql." ".$this->error, LOG_ERR);
return -2;
}
}
$sql = "INSERT INTO ".MAIN_DB_PREFIX."menu_const(fk_menu, fk_constraint) VALUES(".$menuId.",".$constraintId.")";
}
$result = $this->db->query($sql);
if (! $result)
{
$this->error="Error ".$this->db->lasterror();
dol_syslog("Menubase::addConstraint::1 sql = ".$sql." ".$this->error, LOG_ERR);
return -1;
}
return 1;
}
/**
* \brief Delete constraint menu
* \param menuId Menu id
* \param constId Constraint id
* \return int <0 if KO, >0 if OK
*/
function delConstraint($menuId, $constId)
{
$sql = "DELETE FROM ".MAIN_DB_PREFIX."menu_const WHERE fk_menu = ".$menuId." AND fk_constraint = ".$constId;
$result = $this->db->query($sql);
if (! $result)
{
$this->error="Error ".$this->db->lasterror();
dol_syslog("Menubase::delConstraint::3 ".$this->error, LOG_ERR);
return -3;
}
$sql = "SELECT count(rowid) as countId FROM ".MAIN_DB_PREFIX."menu_const WHERE fk_constraint = ".$constId;
$result = $this->db->query($sql);
if (! $result)
{
$this->error="Error ".$this->db->lasterror();
dol_syslog("Menubase::delConstraint::2 ".$this->error, LOG_ERR);
return -2;
}
$objc = $this->db->fetch_object($result);
if($objc->countId == 0)
{
$sql = "DELETE FROM ".MAIN_DB_PREFIX."menu_constraint WHERE rowid = ".$constId;
$result = $this->db->query($sql);
if (! $result)
{
$this->error="Error ".$this->db->lasterror();
dol_syslog("Menubase::delConstraint::1 ".$this->error, LOG_ERR);
return -1;
}
}
return 1;
}
}

View File

@ -873,11 +873,23 @@ class DolibarrModules
$menu->perms=$this->menu[$key]['perms'];
$menu->target=$this->menu[$key]['target'];
$menu->user=$this->menu[$key]['user'];
$menu->constraint=$this->menu[$key]['constraint'];
if (! $err)
{
$result=$menu->create($user);
if ($result > 0)
{
if ($menu->constraint)
{
$resultConstraint=$menu->addConstraint($result,$menu->constraint);
if ($resultConstraint < 0)
{
$this->error=$menu->error;
dol_syslog('DolibarrModules::addConstraint result='.$resultConstraint." ".$this->error, LOG_ERR);
$err++;
break;
}
}
$this->menu[$key]['rowid']=$result;
}
else

View File

@ -140,7 +140,18 @@ class modAgenda extends DolibarrModules
//------
$r=0;
$this->menu[$r]=array('fk_menu'=>0,'type'=>'top','titre'=>'Agenda','mainmenu'=>'agenda','leftmenu'=>'0','url'=>'/comm/action/index.php','langs'=>'commercial','position'=>100,'perms'=>'$user->rights->agenda->myactions->read','target'=>'','user'=>0);
$this->menu[$r]=array('fk_menu'=>0,
'type'=>'top',
'titre'=>'Agenda',
'mainmenu'=>'agenda',
'leftmenu'=>'0',
'url'=>'/comm/action/index.php',
'langs'=>'commercial',
'position'=>100,
'perms'=>'$user->rights->agenda->myactions->read',
'target'=>'',
'user'=>0,
'constraint'=>'$conf->agenda->enabled');
$r++;
// Exports

View File

@ -103,7 +103,8 @@ class modCashDesk extends DolibarrModules
'position'=>100,
'perms'=>1, // Use 'perms'=>'1' if you want your menu with no permission rules
'target'=>'',
'user'=>0); // 0=Menu for internal users, 1=external users, 2=both
'user'=>0, // 0=Menu for internal users, 1=external users, 2=both
'constraint'=>'$conf->cashdesk->enabled'); //Constraint
$r++;
// This is to declare a Left Menu entry:

View File

@ -132,7 +132,8 @@ class modECM extends DolibarrModules
'position'=>100,
'perms'=>'$user->rights->ecm->download || $user->rights->ecm->upload || $user->rights->ecm->setup',
'target'=>'',
'user'=>0);
'user'=>0,
'constraint'=>'$conf->ecm->enabled');
$r++;
// Left menu linked to top menu

View File

@ -98,7 +98,18 @@ class modPhenix extends DolibarrModules
//------
$r=0;
$this->menu[$r]=array('fk_menu'=>0,'type'=>'top','titre'=>'Calendar','mainmenu'=>'phenix','leftmenu'=>'1','url'=>'/phenix/phenix.php','langs'=>'other','position'=>100,'perms'=>'','target'=>'','user'=>0);
$this->menu[$r]=array('fk_menu'=>0,
'type'=>'top',
'titre'=>'Calendar',
'mainmenu'=>'phenix',
'leftmenu'=>'1',
'url'=>'/phenix/phenix.php',
'langs'=>'other',
'position'=>100,
'perms'=>'',
'target'=>'',
'user'=>0,
'constraint'=>'$conf->phenix->enabled');
$r++;
}