diff --git a/htdocs/admin/menus.php b/htdocs/admin/menus.php
index 23c7ee04983..3bec1d4ccc7 100644
--- a/htdocs/admin/menus.php
+++ b/htdocs/admin/menus.php
@@ -28,6 +28,7 @@ require_once(DOL_DOCUMENT_ROOT."/core/lib/admin.lib.php");
require_once(DOL_DOCUMENT_ROOT."/core/class/html.formadmin.class.php");
require_once(DOL_DOCUMENT_ROOT."/core/lib/admin.lib.php");
+$action=GETPOST('action');
$langs->load("companies");
$langs->load("products");
@@ -38,9 +39,13 @@ $langs->load("other");
// Security check
if (!$user->admin) accessforbidden();
-$dirtop = "/core/menus/standard";
-$dirleft = "/core/menus/standard";
-$dirsmartphone = "/core/menus/smartphone";
+$dirstandard = array("/core/menus/standard");
+$dirsmartphone = array("/core/menus/smartphone");
+foreach($conf->menus_modules as $dir)
+{
+ $dirstandard[]=$dir.'/standard';
+ $dirsmartphone[]=$dir.'/standard';
+}
// Cette page peut etre longue. On augmente le delai autorise.
@@ -56,7 +61,7 @@ error_reporting($err);
* Actions
*/
-if (isset($_POST["action"]) && $_POST["action"] == 'update' && empty($_POST["cancel"]))
+if ($action == 'update' && empty($_POST["cancel"]))
{
$_SESSION["mainmenu"]="home"; // Le gestionnaire de menu a pu changer
@@ -85,7 +90,7 @@ if (isset($_POST["action"]) && $_POST["action"] == 'update' && empty($_POST["can
if (file_exists($fullpath))
{
$db->begin();
-
+
$result=run_sql($fullpath,1,'',1,$key,'none');
if ($result > 0)
{
@@ -103,7 +108,7 @@ if (isset($_POST["action"]) && $_POST["action"] == 'update' && empty($_POST["can
if (! $error)
{
$db->close();
-
+
// We make a header redirect because we need to change menu NOW.
header("Location: ".$_SERVER["PHP_SELF"]);
exit;
@@ -116,15 +121,13 @@ if (isset($_POST["action"]) && $_POST["action"] == 'update' && empty($_POST["can
*/
$form=new Form($db);
-$htmladmin=new FormAdmin($db);
+$formadmin=new FormAdmin($db);
$wikihelp='EN:First_setup|FR:Premiers_paramétrages|ES:Primeras_configuraciones';
llxHeader('',$langs->trans("Setup"),$wikihelp);
print_fiche_titre($langs->trans("Menus"),'','setup');
-print $langs->trans("MenusDesc")."
\n";
-print "
\n";
$h = 0;
@@ -146,6 +149,9 @@ $h++;
dol_fiche_head($head, 'handler', $langs->trans("Menus"));
+print $langs->trans("MenusDesc")."
\n";
+print "
\n";
+
if (isset($_GET["action"]) && $_GET["action"] == 'edit')
{
@@ -172,10 +178,10 @@ if (isset($_GET["action"]) && $_GET["action"] == 'edit')
$var=!$var;
print '
| '.$langs->trans("DefaultMenuManager").' | ';
print '';
- print $htmladmin->select_menu(empty($conf->global->MAIN_MENU_STANDARD_FORCED)?$conf->global->MAIN_MENU_STANDARD:$conf->global->MAIN_MENU_STANDARD_FORCED, 'MAIN_MENU_STANDARD', $dirtop, empty($conf->global->MAIN_MENU_STANDARD_FORCED)?'':' disabled="disabled"');
+ print $formadmin->select_menu(empty($conf->global->MAIN_MENU_STANDARD_FORCED)?$conf->global->MAIN_MENU_STANDARD:$conf->global->MAIN_MENU_STANDARD_FORCED, 'MAIN_MENU_STANDARD', $dirstandard, empty($conf->global->MAIN_MENU_STANDARD_FORCED)?'':' disabled="disabled"');
print ' | ';
print '';
- print $htmladmin->select_menu(empty($conf->global->MAIN_MENUFRONT_STANDARD_FORCED)?$conf->global->MAIN_MENUFRONT_STANDARD:$conf->global->MAIN_MENUFRONT_STANDARD_FORCED, 'MAIN_MENUFRONT_STANDARD', $dirtop, empty($conf->global->MAIN_MENUFRONT_STANDARD_FORCED)?'':' disabled="disabled"');
+ print $formadmin->select_menu(empty($conf->global->MAIN_MENUFRONT_STANDARD_FORCED)?$conf->global->MAIN_MENUFRONT_STANDARD:$conf->global->MAIN_MENUFRONT_STANDARD_FORCED, 'MAIN_MENUFRONT_STANDARD', $dirstandard, empty($conf->global->MAIN_MENUFRONT_STANDARD_FORCED)?'':' disabled="disabled"');
print ' | ';
print '
';
@@ -183,10 +189,10 @@ if (isset($_GET["action"]) && $_GET["action"] == 'edit')
$var=!$var;
print '| '.$langs->trans("DefaultMenuSmartphoneManager").' | ';
print '';
- print $htmladmin->select_menu(empty($conf->global->MAIN_MENU_SMARTPHONE_FORCED)?$conf->global->MAIN_MENU_SMARTPHONE:$conf->global->MAIN_MENU_SMARTPHONE_FORCED, 'MAIN_MENU_SMARTPHONE', array($dirtop,$dirsmartphone), empty($conf->global->MAIN_MENU_SMARTPHONE_FORCED)?'':' disabled="disabled"');
+ print $formadmin->select_menu(empty($conf->global->MAIN_MENU_SMARTPHONE_FORCED)?$conf->global->MAIN_MENU_SMARTPHONE:$conf->global->MAIN_MENU_SMARTPHONE_FORCED, 'MAIN_MENU_SMARTPHONE', array_merge($dirstandard,$dirsmartphone), empty($conf->global->MAIN_MENU_SMARTPHONE_FORCED)?'':' disabled="disabled"');
print ' | ';
print '';
- print $htmladmin->select_menu(empty($conf->global->MAIN_MENUFRONT_SMARTPHONE_FORCED)?$conf->global->MAIN_MENUFRONT_SMARTPHONE:$conf->global->MAIN_MENUFRONT_SMARTPHONE_FORCED, 'MAIN_MENUFRONT_SMARTPHONE', array($dirtop,$dirsmartphone), empty($conf->global->MAIN_MENUFRONT_SMARTPHONE_FORCED)?'':' disabled="disabled"');
+ print $formadmin->select_menu(empty($conf->global->MAIN_MENUFRONT_SMARTPHONE_FORCED)?$conf->global->MAIN_MENUFRONT_SMARTPHONE:$conf->global->MAIN_MENUFRONT_SMARTPHONE_FORCED, 'MAIN_MENUFRONT_SMARTPHONE', array_merge($dirstandard,$dirsmartphone), empty($conf->global->MAIN_MENUFRONT_SMARTPHONE_FORCED)?'':' disabled="disabled"');
print ' | ';
print '
';
diff --git a/htdocs/admin/menus/edit.php b/htdocs/admin/menus/edit.php
index ff2f82583b2..003dfb0c2bd 100644
--- a/htdocs/admin/menus/edit.php
+++ b/htdocs/admin/menus/edit.php
@@ -30,14 +30,12 @@ require_once(DOL_DOCUMENT_ROOT."/core/class/menubase.class.php");
$langs->load("admin");
-if (! $user->admin)
-accessforbidden();
+if (! $user->admin) accessforbidden();
-$dirtop = "/core/menus/standard";
-$dirleft = "/core/menus/standard";
+$dirstandard = "/core/menus/standard";
$dirsmartphone = "/core/menus/smartphone";
-$dirmenu = array($dirleft,$dirsmartphone);
+$dirmenu = array($dirstandard,$dirsmartphone);
$action=GETPOST('action');
$mesg=GETPOST('mesg');
diff --git a/htdocs/admin/menus/index.php b/htdocs/admin/menus/index.php
index 5b3463b95c2..10b2384ba0e 100644
--- a/htdocs/admin/menus/index.php
+++ b/htdocs/admin/menus/index.php
@@ -1,6 +1,6 @@
- * Copyright (C) 2007-2011 Laurent Destailleur
+ * Copyright (C) 2007-2012 Laurent Destailleur
* Copyright (C) 2009-2011 Regis Houssin
*
* This program is free software; you can redistribute it and/or modify
@@ -30,14 +30,15 @@ require_once(DOL_DOCUMENT_ROOT."/core/lib/treeview.lib.php");
$langs->load("other");
$langs->load("admin");
-if (! $user->admin)
- accessforbidden();
+if (! $user->admin) accessforbidden();
-$dirtop = "/core/menus/standard";
-$dirleft = "/core/menus/standard";
-$dirsmartphone = "/core/menus/smartphone";
-
-$dirmenu = array($dirleft,$dirsmartphone);
+$dirstandard = array("/core/menus/standard");
+$dirsmartphone = array("/core/menus/smartphone");
+foreach($conf->menus_modules as $dir)
+{
+ $dirstandard[]=$dir.'/standard';
+ $dirsmartphone[]=$dir.'/standard';
+}
$mesg=$_GET["mesg"];
@@ -207,9 +208,6 @@ llxHeader('',$langs->trans("Menus"),'','',0,0,$arrayofjs);
print_fiche_titre($langs->trans("Menus"),'','setup');
-print $langs->trans("MenusEditorDesc")."
\n";
-print "
\n";
-
dol_htmloutput_mesg($mesg);
@@ -233,6 +231,10 @@ $h++;
dol_fiche_head($head, 'editor', $langs->trans("Menus"));
+print $langs->trans("MenusEditorDesc")."
\n";
+print "
\n";
+
+
// Confirmation for remove menu entry
if ($_GET["action"] == 'delete')
{
@@ -250,7 +252,7 @@ if ($_GET["action"] == 'delete')
print '';
diff --git a/htdocs/admin/menus/other.php b/htdocs/admin/menus/other.php
index 0d200a99f85..cd4d6153bb5 100644
--- a/htdocs/admin/menus/other.php
+++ b/htdocs/admin/menus/other.php
@@ -71,7 +71,6 @@ llxHeader('',$langs->trans("Setup"));
print_fiche_titre($langs->trans("Menus"),'','setup');
-print "
\n";
$h = 0;
diff --git a/htdocs/core/class/conf.class.php b/htdocs/core/class/conf.class.php
index 9cc5a684008..0681165760f 100644
--- a/htdocs/core/class/conf.class.php
+++ b/htdocs/core/class/conf.class.php
@@ -63,7 +63,8 @@ class Conf
public $modules = array(); // List of modules
public $css_modules = array();
public $tabs_modules = array();
- public $triggers_modules = array('/core/triggers');
+ public $triggers_modules = array('/core/triggers'); // TODO default triggers should not be into the module list
+ public $menus_modules = array();
public $hooks_modules = array();
public $login_method_modules = array();
@@ -149,6 +150,12 @@ class Conf
$params=explode(':',$value,2);
$this->tabs_modules[$params[0]][]=$value;
}
+ // If this is constant for a new tab page activated by a module
+ elseif (preg_match('/^MAIN_MODULE_([A-Z_]+)_MENUS/i',$key,$reg))
+ {
+ $modulename = strtolower($reg[1]);
+ $this->menus_modules[] = '/'.$modulename.'/core/menus';
+ }
// If this is constant for triggers activated by a module
elseif (preg_match('/^MAIN_MODULE_([A-Z_]+)_TRIGGERS$/i',$key,$reg))
{
@@ -175,18 +182,15 @@ class Conf
elseif (preg_match('/^MAIN_MODULE_([A-Z_]+)_SMS$/i',$key,$reg))
{
$module=strtolower($reg[1]);
- // Add this module in list of modules that provide SMS
- $this->sms_engine[$module]=$module;
+ $this->sms_engine[$module]=$module; // Add this module in list of modules that provide SMS
}
// If this is a module constant
elseif (preg_match('/^MAIN_MODULE_([A-Z_]+)$/i',$key,$reg))
{
$module=strtolower($reg[1]);
- //print "Module ".$module." is enabled
\n";
$this->$module=(object) array();
$this->$module->enabled=true;
- // Add this module in list of enabled modules
- $this->modules[]=$module;
+ $this->modules[]=$module; // Add this module in list of enabled modules
}
}
}
diff --git a/htdocs/core/class/html.formadmin.class.php b/htdocs/core/class/html.formadmin.class.php
index 83e6fa16f44..ae720402274 100644
--- a/htdocs/core/class/html.formadmin.class.php
+++ b/htdocs/core/class/html.formadmin.class.php
@@ -128,24 +128,27 @@ class FormAdmin
*
* @param string $selected Preselected menu value
* @param string $htmlname Name of html select
- * @param string $dirmenu Directory to scan or array of directories to scan
+ * @param array $dirmenuarray Array of directories to scan
* @param string $moreattrib More attributes on html select tag
* @return void
*/
- function select_menu($selected, $htmlname, $dirmenu, $moreattrib='')
+ function select_menu($selected, $htmlname, $dirmenuarray, $moreattrib='')
{
global $langs,$conf;
+ // Clean parameters
if ($selected == 'eldy.php') $selected='eldy_backoffice.php'; // For compatibility
+ // Check parameters
+ if (! is_array($dirmenuarray)) return -1;
+
$menuarray=array();
foreach ($conf->file->dol_document_root as $dirroot)
{
- if (is_array($dirmenu)) $dirmenus=$dirmenu;
- else $dirmenus=array($dirmenu);
- foreach($dirmenus as $dirtoscan)
+ foreach($dirmenuarray as $dirtoscan)
{
$dir=$dirroot.$dirtoscan;
+ //print $dir.'
';
if (is_dir($dir))
{
$handle=opendir($dir);
diff --git a/htdocs/main.inc.php b/htdocs/main.inc.php
index 69b4d678e20..f673d510a45 100644
--- a/htdocs/main.inc.php
+++ b/htdocs/main.inc.php
@@ -1130,17 +1130,26 @@ function top_menu($head, $title='', $target='', $disablejs=0, $disablehead=0, $a
/*
* Top menu
*/
- $top_menu=isset($conf->browser->phone)?$conf->smart_menu:$conf->top_menu;
+ $top_menu=empty($conf->browser->phone)?$conf->top_menu:$conf->smart_menu;
if (GETPOST('menu')) $top_menu=GETPOST('menu'); // menu=eldy_backoffice.php
// Load the top menu manager
- $result=dol_include_once("/core/menus/standard/".$top_menu);
- if (! $result) // If failed to include, we try with standard
- {
- $top_menu='eldy_backoffice.php';
- include_once(DOL_DOCUMENT_ROOT."/core/menus/standard/".$top_menu);
- }
-
+ // Load the top menu manager (only if not already done)
+ if (! class_exists('MenuTop'))
+ {
+ $menufound=0;
+ $dirmenus=array_merge(array("/core/menus"),$conf->menus_modules);
+ foreach($dirmenus as $dirmenu)
+ {
+ $menufound=dol_include_once($dirmenu."/standard/".$top_menu);
+ if ($menufound) break;
+ }
+ if (! $menufound) // If failed to include, we try with standard
+ {
+ $top_menu='eldy_backoffice.php';
+ include_once(DOL_DOCUMENT_ROOT."/core/menus/standard/".$top_menu);
+ }
+ }
print "\n".''."\n";
@@ -1321,16 +1330,25 @@ function left_menu($menu_array_before, $helppagename='', $moresearchform='', $me
$bookmarks=printBookmarksList($db, $langs);
}
- $left_menu=isset($conf->browser->phone)?$conf->smart_menu:$conf->top_menu;
+ $left_menu=empty($conf->browser->phone)?$conf->top_menu:$conf->smart_menu;
if (GETPOST('menu')) $left_menu=GETPOST('menu'); // menu=eldy_backoffice.php
- // Load the left menu manager
- $result=dol_include_once("/core/menus/standard/".$left_menu);
- if (! $result) // If menu manager removed or not found
- {
- $left_menu='eldy_backoffice.php';
- include_once(DOL_DOCUMENT_ROOT ."/core/menus/standard/".$left_menu);
- }
+ // Load the top menu manager (only if not already done)
+ if (! class_exists('MenuLeft'))
+ {
+ $menufound=0;
+ $dirmenus=array_merge(array("/core/menus"),$conf->menus_modules);
+ foreach($dirmenus as $dirmenu)
+ {
+ $menufound=dol_include_once($dirmenu."/standard/".$left_menu);
+ if ($menufound) break;
+ }
+ if (! $menufound) // If failed to include, we try with standard
+ {
+ $top_menu='eldy_backoffice.php';
+ include_once(DOL_DOCUMENT_ROOT."/core/menus/standard/".$top_menu);
+ }
+ }
// Left column
print ''."\n";