diff --git a/htdocs/admin/modules.php b/htdocs/admin/modules.php index c6b92bd0ef9..3774585841d 100644 --- a/htdocs/admin/modules.php +++ b/htdocs/admin/modules.php @@ -195,55 +195,59 @@ foreach ($dirlist as $dirroot) { $dir = $dirroot . "/includes/modules/"; - // Charge tableaux modules, nom, numero, orders depuis r�pertoire dir + // Load modules attributes in arrays (name, numero, orders) from dir directory + //print $dir."\n"; $handle=opendir($dir); - while (($file = readdir($handle))!==false) + if ($handle) { - //print "$i ".$file."\n"; - if (is_readable($dir.$file) && substr($file, 0, 3) == 'mod' && substr($file, strlen($file) - 10) == '.class.php') - { - $modName = substr($file, 0, strlen($file) - 10); - - if ($modName) - { - include_once($dir.$file); - $objMod = new $modName($db); - - if ($objMod->numero > 0) - { - $j = $objMod->numero; - } - else - { - $j = 1000 + $i; - } - - $modulequalified=1; - - // We discard modules that does not respect constraint on menu handlers - if ($objMod->needleftmenu && sizeof($objMod->needleftmenu) && ! in_array($conf->left_menu,$objMod->needleftmenu)) $modulequalified=0; - if ($objMod->needtopmenu && sizeof($objMod->needtopmenu) && ! in_array($conf->top_menu,$objMod->needtopmenu)) $modulequalified=0; - - // We discard modules according to features level (PS: if module is activated we always show it) - $const_name = 'MAIN_MODULE_'.strtoupper(eregi_replace('^mod','',get_class($objMod))); - if ($objMod->version == 'development' && $conf->global->MAIN_FEATURES_LEVEL < 2 && ! $conf->global->$const_name) $modulequalified=0; - if ($objMod->version == 'experimental' && $conf->global->MAIN_FEATURES_LEVEL < 1 && ! $conf->global->$const_name) $modulequalified=0; - - if ($modulequalified) - { - $modules[$i] = $objMod; - $filename[$i]= $modName; - $orders[$i] = $objMod->family."_".$j; // Tri par famille puis numero module - //print "x".$modName." ".$orders[$i]."\n"; - $categ[$objMod->special]++; // Array of all different modules categories - $dirmod[$i] = $dirroot; - $j++; - $i++; - } - } - } + while (($file = readdir($handle))!==false) + { + //print "$i ".$file."\n"; + if (is_readable($dir.$file) && substr($file, 0, 3) == 'mod' && substr($file, strlen($file) - 10) == '.class.php') + { + $modName = substr($file, 0, strlen($file) - 10); + + if ($modName) + { + include_once($dir.$file); + $objMod = new $modName($db); + + if ($objMod->numero > 0) + { + $j = $objMod->numero; + } + else + { + $j = 1000 + $i; + } + + $modulequalified=1; + + // We discard modules that does not respect constraint on menu handlers + if ($objMod->needleftmenu && sizeof($objMod->needleftmenu) && ! in_array($conf->left_menu,$objMod->needleftmenu)) $modulequalified=0; + if ($objMod->needtopmenu && sizeof($objMod->needtopmenu) && ! in_array($conf->top_menu,$objMod->needtopmenu)) $modulequalified=0; + + // We discard modules according to features level (PS: if module is activated we always show it) + $const_name = 'MAIN_MODULE_'.strtoupper(eregi_replace('^mod','',get_class($objMod))); + if ($objMod->version == 'development' && $conf->global->MAIN_FEATURES_LEVEL < 2 && ! $conf->global->$const_name) $modulequalified=0; + if ($objMod->version == 'experimental' && $conf->global->MAIN_FEATURES_LEVEL < 1 && ! $conf->global->$const_name) $modulequalified=0; + + if ($modulequalified) + { + $modules[$i] = $objMod; + $filename[$i]= $modName; + $orders[$i] = $objMod->family."_".$j; // Tri par famille puis numero module + //print "x".$modName." ".$orders[$i]."\n"; + $categ[$objMod->special]++; // Array of all different modules categories + $dirmod[$i] = $dirroot; + $j++; + $i++; + } + } + } + } + closedir($handle); } - } asort($orders); diff --git a/htdocs/includes/modules/DolibarrModules.class.php b/htdocs/includes/modules/DolibarrModules.class.php index 49ef532f103..2e62b04b566 100644 --- a/htdocs/includes/modules/DolibarrModules.class.php +++ b/htdocs/includes/modules/DolibarrModules.class.php @@ -728,8 +728,8 @@ class DolibarrModules /** - \brief Insere les menus dans llx_menu* - \return int Nombre d'erreurs (0 si ok) + * \brief Insere les menus dans llx_menu* + * \return int Nombre d'erreurs (0 si ok) */ function insert_menus() { @@ -741,6 +741,7 @@ class DolibarrModules $this->db->begin(); + //var_dump($this->menu); exit; foreach ($this->menu as $key => $value) { $menu = new Menubase($this->db); @@ -749,9 +750,11 @@ class DolibarrModules if (! $this->menu[$key]['fk_menu']) { $menu->fk_menu=0; + //print 'aaa'.$this->menu[$key]['fk_menu']; } else { + //print 'xxx'.$this->menu[$key]['fk_menu'];exit; $numparent=$this->menu[$key]['fk_menu']; $numparent=eregi_replace('r=','',$numparent); if (isset($this->menu[$numparent]['rowid'])) @@ -761,6 +764,7 @@ class DolibarrModules else { $this->error="BadDefinitionOfMenuArrayInModuleDescriptor"; + dolibarr_syslog("DolibarrModules::insert_menus ".$this->error." ".$this->menu[$key]['fk_menu'], LOG_ERR); $err++; } } @@ -784,7 +788,9 @@ class DolibarrModules else { $this->error=$menu->error; + dolibarr_syslog('DolibarrModules::insert_menus result='.$result." ".$this->error, LOG_ERR); $err++; + break; } } } diff --git a/htdocs/langs/fr_FR/other.lang b/htdocs/langs/fr_FR/other.lang index 049e44cfd9a..c9ea03eeda2 100644 --- a/htdocs/langs/fr_FR/other.lang +++ b/htdocs/langs/fr_FR/other.lang @@ -38,6 +38,15 @@ PredefinedMailContentSendInvoice=Veuillez trouver ci-joint la facture __FACREF__ PredefinedMailContentSendInvoiceReminder=Nous apportons à votre connaissance que la facture __FACREF__ ne semble pas avoir été réglée. La voici donc, pour rappel, en pièce jointe.\n\nCordialement\n\n PredefinedMailContentSendProposal=Veuillez trouver ci-joint la proposition commerciale __PROPREF__\n\nCordialement\n\n PredefinedMailContentSendOrder=Veuillez trouver ci-joint la commande __ORDERREF__\n\nCordialement\n\n +DemoDesc=Dolibarr n'est pas un ERP monolithique mais composé de modules fonctionnelles simples et optionnels. Une démonstration qui inclut tous ces modules n'a pas de sens car jamais tous les modules sont utilisés. Aussi, plusieurs profils type de démo sont disponibles. +ChooseYourDemoProfil=Veuillez choisir le profil de démo qui correspond le mieux à votre activité... +DemoFundation=Gestion des adhérents d'une association +DemoFundation2=Gestion des adhérents et trésorerie d'une association +DemoCompanyServiceOnly=Gestion d'une activité d'indépendant faisant du service +DemoCompanyShopWithCashDesk=Gestion d'un magasin avec caisse +DemoCompanyProductAndStocks=Gestion d'une PME revendeuse de produits +DemoCompanyAll=Gestion d'une PME aux activités multiples (tous les modules principaux) +GoToDemo=Accéder à la démo ##### Bookmark ##### Bookmark=Marque page Bookmarks=Marque pages diff --git a/htdocs/public/demo/index.php b/htdocs/public/demo/index.php new file mode 100644 index 00000000000..3161254067d --- /dev/null +++ b/htdocs/public/demo/index.php @@ -0,0 +1,222 @@ + + * Copyright (C) 2006-2008 Laurent Destailleur + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +/** + \file htdocs/public/demo/index.php + \ingroup core + \brief File to access demo + \author Laurent Destailleur + \version $Id$ +*/ + +require("../../master.inc.php"); + +$langs->load("main"); +$langs->load("other"); + +$demoprofiles=array( + array('default'=>'-1', 'key'=>'profdemofun','label'=>'DemoFundation', + 'disablemodules'=>'banque,barcode,bookmark,boutique,cashdesk,commercial,commande,comptabilite,contrat,expedition,facture,fournisseur,prelevement,produit,projet,service,societe,stock,tax'), + array('default'=>'0', 'key'=>'profdemofun2','label'=>'DemoFundation2', + 'disablemodules'=>'barcode,boutique,bookmark,cashdesk,commercial,contrat,facture,commande,fournisseur,prelevement,produit,projet,service,societe,stock'), + array('default'=>'1', 'key'=>'profdemoservonly','label'=>'DemoCompanyServiceOnly', + 'disablemodules'=>'adherent,barcode,boutique,bookmark,cashdesk,don,prelevement,produit,projet,stock'), + array('default'=>'-1','key'=>'profdemoshopwithdesk','label'=>'DemoCompanyShopWithCashDesk', + 'disablemodules'=>'adherent,boutique,bookmark,don,prelevement,produit,stock'), + array('default'=>'0', 'key'=>'profdemoprodstock','label'=>'DemoCompanyProductAndStocks', + 'disablemodules'=>'adherent,boutique,bookmark,cashdesk,don,prelevement,produit,stock'), + array('default'=>'0', 'key'=>'profdemoall','label'=>'DemoCompanyAll', + 'disablemodules'=>'adherent,boutique,bookmark,cashdesk,don'), + ); + + +function llxHeaderVierge($title, $head = "") +{ + global $user, $conf, $langs; + + print "\n"; + print "\n"; + print "".$title."\n"; + print ''."\n"; + print ''."\n"; + if ($head) print $head."\n"; + print "\n"; + print ''."\n"; +} + +function llxFooter() +{ + print "\n"; + print "\n"; +} + + +/* + * Actions + */ + +if ($_POST["action"] == 'gotodemo') +{ + //print 'ee'.$_POST["demochoice"]; + $disablestring=''; + foreach ($demoprofiles as $profilearray) + { + if ($profilearray['key'] == $_POST["demochoice"]) + { + $disablestring=$profilearray['disablemodules']; + break; + } + } + + if ($disablestring) + { + header("Location: ".DOL_URL_ROOT.'/index.php?disablemodules='.$disablestring); + exit; + } +} + + +/* + * View + */ + +llxHeaderVierge($langs->trans("DolibarrDemo")); + + +// Search modules +$dirlist=array(); +$dirlist[]=DOL_DOCUMENT_ROOT; +if (defined('DOL_DOCUMENT_ROOT_BIS')) $dirlist[]=DOL_DOCUMENT_ROOT_BIS; + +$filename = array(); +$modules = array(); +$orders = array(); +$categ = array(); +$dirmod = array(); +$i = 0; // is a sequencer of modules found +$j = 0; // j is module number. Automatically affeted if module number not defined. +foreach ($dirlist as $dirroot) +{ + $dir = $dirroot . "/includes/modules/"; + + // Charge tableaux modules, nom, numero, orders depuis r�pertoire dir + $handle=opendir($dir); + while (($file = readdir($handle))!==false) + { + //print "$i ".$file."\n"; + if (is_readable($dir.$file) && substr($file, 0, 3) == 'mod' && substr($file, strlen($file) - 10) == '.class.php') + { + $modName = substr($file, 0, strlen($file) - 10); + + if ($modName) + { + include_once($dir.$file); + $objMod = new $modName($db); + + if ($objMod->numero > 0) + { + $j = $objMod->numero; + } + else + { + $j = 1000 + $i; + } + + $modulequalified=1; + + // We discard modules that does not respect constraint on menu handlers + if ($objMod->needleftmenu && sizeof($objMod->needleftmenu) && ! in_array($conf->left_menu,$objMod->needleftmenu)) $modulequalified=0; + if ($objMod->needtopmenu && sizeof($objMod->needtopmenu) && ! in_array($conf->top_menu,$objMod->needtopmenu)) $modulequalified=0; + + // We discard modules according to features level (PS: if module is activated we always show it) + $const_name = 'MAIN_MODULE_'.strtoupper(eregi_replace('^mod','',get_class($objMod))); + if ($objMod->version == 'development' && $conf->global->MAIN_FEATURES_LEVEL < 2 && ! $conf->global->$const_name) $modulequalified=0; + if ($objMod->version == 'experimental' && $conf->global->MAIN_FEATURES_LEVEL < 1 && ! $conf->global->$const_name) $modulequalified=0; + + if ($modulequalified) + { + $modules[$i] = $objMod; + $filename[$i]= $modName; + $orders[$i] = $objMod->family."_".$j; // Tri par famille puis numero module + //print "x".$modName." ".$orders[$i]."\n"; + $categ[$objMod->special]++; // Array of all different modules categories + $dirmod[$i] = $dirroot; + $j++; + $i++; + } + } + } + } + +} + +asort($orders); +//var_dump($orders); + +print ''; + +print ''; + +print ''; +print ''; +print ''; + +print $langs->trans("DemoDesc").''; +print ''; +print ''.$langs->trans("ChooseYourDemoProfil").''; + +print ''; +print ''; + +print ''."\n"; +foreach ($demoprofiles as $profilarray) +{ + if ($profilarray['default'] >= 0) + { + print ''; + print ''.$langs->trans($profilarray['label']).''."\n"; + } +} +print ''; + +print ''; +print ''; + +// Description +print ''; + + +print ''; + +// Button +print ''; +print ''; +print ' ">'; +print ''; + +print ''; + +print ''; + +$db->close(); + +llxFooter('$Date$ - $Revision$'); +?>