diff --git a/htdocs/admin/modules.php b/htdocs/admin/modules.php index 3774585841d..a3c6feee616 100644 --- a/htdocs/admin/modules.php +++ b/htdocs/admin/modules.php @@ -65,7 +65,7 @@ if ($_GET["action"] == 'reset' && $user->admin) */ function Activate($value,$withdeps=1) { - global $db, $modules, $langs; + global $db, $modules, $langs, $conf; $modName = $value; @@ -75,8 +75,13 @@ function Activate($value,$withdeps=1) if ($modName) { $file = $modName . ".class.php"; - $res=@include_once(DOL_DOCUMENT_ROOT."/includes/modules/".$file); - if (defined('DOL_DOCUMENT_ROOT_BIS') && ! $res) include_once(DOL_DOCUMENT_ROOT_BIS."/includes/modules/".$file); + + // Loop on each directory + foreach ($conf->dol_document_root as $dol_document_root) + { + $found=@include_once($dol_document_root."/includes/modules/".$file); + if ($found) break; + } $objMod = new $modName($db); @@ -136,10 +141,15 @@ function UnActivate($value,$requiredby=1) if ($modName) { $file = $modName . ".class.php"; - $res=@include_once(DOL_DOCUMENT_ROOT."/includes/modules/".$file); - if (defined('DOL_DOCUMENT_ROOT_BIS') && ! $res) include_once(DOL_DOCUMENT_ROOT_BIS."/includes/modules/".$file); - if ($res) + // Loop on each directory + foreach ($conf->dol_document_root as $dol_document_root) + { + $found=@include_once($dol_document_root."/includes/modules/".$file); + if ($found) break; + } + + if ($found) { $objMod = new $modName($db); $result=$objMod->remove(); @@ -180,10 +190,6 @@ print_fiche_titre($langs->trans("ModulesSetup"),'','setup'); // 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(); @@ -191,7 +197,7 @@ $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) +foreach ($conf->dol_document_root as $dirroot) { $dir = $dirroot . "/includes/modules/"; diff --git a/htdocs/admin/system/dolibarr.php b/htdocs/admin/system/dolibarr.php index f089351ec63..e9ad0836984 100644 --- a/htdocs/admin/system/dolibarr.php +++ b/htdocs/admin/system/dolibarr.php @@ -76,7 +76,7 @@ print "".$langs->trans("LanguageParameter"," $var=!$var; print "=> price2num(1234.56)'.price2num(1233.56+1,'2').""; $var=!$var; -print "=> dolibarr_print_date(0,"daytext")'.dolibarr_print_date(0,"daytext").""; +print "=> dolibarr_print_date(0,"dayhourtext")'.dolibarr_print_date(0,"dayhourtext").""; // Thousands $var=!$var; $thousand=$langs->trans("SeparatorThousand"); diff --git a/htdocs/comm/mailing/cibles.php b/htdocs/comm/mailing/cibles.php index b809c2beb17..9a88c48b5a2 100644 --- a/htdocs/comm/mailing/cibles.php +++ b/htdocs/comm/mailing/cibles.php @@ -33,7 +33,7 @@ if (! $user->rights->mailing->lire || $user->societe_id > 0) $dirmod=DOL_DOCUMENT_ROOT."/includes/modules/mailings"; -if (defined('DOL_DOCUMENT_ROOT_BIS')) $dirmod2=DOL_DOCUMENT_ROOT_BIS."/includes/modules/mailings"; + $mesg = ''; @@ -193,14 +193,12 @@ if ($mil->fetch($_REQUEST["id"]) >= 0) print "\n"; clearstatcache(); - - $listdir=array(); - $listdir[]=$dirmod; - if (! empty($dirmod2)) $listdir[]=$dirmod2; - - $var=true; - foreach ($listdir as $dir) + + $var=true; + foreach ($conf->dol_document_root as $dirroot) { + $dir=$dirroot."/includes/modules/mailings/"; + if (is_dir($dir)) { $handle=opendir($dir); @@ -216,7 +214,7 @@ if ($mil->fetch($_REQUEST["id"]) >= 0) if ($modulename == 'example') continue; // Chargement de la classe - $file = $dir."/".$modulename.".modules.php"; + $file = $dir.$modulename.".modules.php"; $classname = "mailing_".$modulename; require_once($file); diff --git a/htdocs/conf/conf.class.php b/htdocs/conf/conf.class.php index aa0e46bfad6..a0f3212e480 100644 --- a/htdocs/conf/conf.class.php +++ b/htdocs/conf/conf.class.php @@ -42,32 +42,13 @@ class Conf //! Charset for HTML output var $character_set_client; // UTF8, ISO-8859-1 - var $externalrss; - var $commande; - var $ficheinter; - var $commercial; - var $societe; - var $expedition; - var $compta; - var $banque; - var $don; - var $caisse; - var $fournisseur; - var $adherent; - var $produit; - var $service; - var $stock; - var $boutique; - var $projet; - var $postnuke; - var $webcal; - var $mantis; - var $propal; - var $categorie; - var $oscommerce2; - var $monnaie; - var $css; + var $dol_document_root; + + var $monnaie; // Used to store current currency + var $css; // Used to store current css (from theme) + var $css_modules=array(); + var $tabs_modules=array(); /** @@ -108,6 +89,14 @@ class Conf { $this->css_modules[]=$value; } + // If this is constant for a new tab page activated by a module + if (eregi('^MAIN_MODULE_([A-Z_]+)_TABS_',$key) && $value) + { + $params=split(':',$value,2); + $this->tabs_modules[$params[0]][]=$value; + //print 'xxx'.$params[0].'-'.$value; + } + // If this is a module constant if (eregi('^MAIN_MODULE_([A-Z]+)$',$key,$reg) && $value) { $module=strtolower($reg[1]); diff --git a/htdocs/includes/boxes/box_produits.php b/htdocs/includes/boxes/box_produits.php index a1e75b46322..14a09b19f7e 100644 --- a/htdocs/includes/boxes/box_produits.php +++ b/htdocs/includes/boxes/box_produits.php @@ -1,6 +1,6 @@ - * Copyright (C) 2004-2007 Laurent Destailleur + * Copyright (C) 2004-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 @@ -18,10 +18,10 @@ */ /** - \file htdocs/includes/boxes/box_produits.php - \ingroup produits,services - \brief Module de g�n�ration de l'affichage de la box produits - \version $Id$ + * \file htdocs/includes/boxes/box_produits.php + * \ingroup produits,services + * \brief Module de generation de l'affichage de la box produits + * \version $Id$ */ include_once(DOL_DOCUMENT_ROOT."/includes/boxes/modules_boxes.php"); @@ -126,7 +126,7 @@ class box_produits extends ModeleBoxes { $this->info_box_contents[$i][2] = array('td' => 'align="right"', 'text' => $price); - $this->info_box_contents[$i][3] = array('td' => 'align="center" width="20"', + $this->info_box_contents[$i][3] = array('td' => 'align="center" width="20" nowrap="nowrap"', 'text' => $price_base_type); $this->info_box_contents[$i][4] = array('td' => 'align="right"', diff --git a/htdocs/includes/modules/DolibarrModules.class.php b/htdocs/includes/modules/DolibarrModules.class.php index 2e62b04b566..c2b52aa2cc7 100644 --- a/htdocs/includes/modules/DolibarrModules.class.php +++ b/htdocs/includes/modules/DolibarrModules.class.php @@ -21,15 +21,15 @@ */ /** - \file htdocs/includes/modules/DolibarrModules.class.php - \brief Fichier de description et activation des modules Dolibarr - \version $Id$ + * \file htdocs/includes/modules/DolibarrModules.class.php + * \brief Fichier de description et activation des modules Dolibarr + * \version $Id$ */ /** - \class DolibarrModules - \brief Classe mere des classes de description et activation des modules Dolibarr + * \class DolibarrModules + * \brief Classe mere des classes de description et activation des modules Dolibarr */ class DolibarrModules { @@ -85,6 +85,9 @@ class DolibarrModules // Insere le nom de la feuille de style if (! $err) $err+=$this->insert_style_sheet(); + // Insert new pages for tabs into llx_const + if (! $err) $err+=$this->insert_tabs(); + // Insere les constantes associees au module dans llx_const if (! $err) $err+=$this->insert_const(); @@ -182,6 +185,9 @@ class DolibarrModules // Supprime les boites de la liste des boites disponibles $err+=$this->delete_style_sheet(); + // Supprime les liens de pages en onglets issus de modules + $err+=$this->delete_tabs(); + // Supprime les boites de la liste des boites disponibles $err+=$this->delete_boxes(); @@ -533,9 +539,9 @@ class DolibarrModules } /** - \brief Desactive feuille de style du module par suppression ligne dans llx_const - \return int Nombre d'erreurs (0 si ok) - */ + * \brief Desactive feuille de style du module par suppression ligne dans llx_const + * \return int Nombre d'erreurs (0 si ok) + */ function delete_style_sheet() { $err=0; @@ -555,8 +561,27 @@ class DolibarrModules } /** - \brief Active la feuille de style associee au module par insertion ligne dans llx_const - \return int Nombre d'erreurs (0 si ok) + * \brief Remove links to new module page present in llx_const + * \return int Nombre d'erreurs (0 si ok) + */ + function delete_tabs() + { + $err=0; + + $sql = "DELETE FROM ".MAIN_DB_PREFIX."const"; + $sql.= " WHERE name like '".$this->const_name."_TABS_%'"; + dolibarr_syslog("DolibarrModules::delete_tabs sql=".$sql); + if (! $this->db->query($sql)) + { + $err++; + } + + return $err; + } + + /** + * \brief Active la feuille de style associee au module par insertion ligne dans llx_const + * \return int Nombre d'erreurs (0 si ok) */ function insert_style_sheet() { @@ -580,8 +605,40 @@ class DolibarrModules } /** - \brief Insere les constantes associees au module dans llx_const - \return int Nombre d'erreurs (0 si ok) + * \brief Add links of new pages from modules in llx_const + * \return int Number of errors (0 if ok) + */ + function insert_tabs() + { + $err=0; + + if (! empty($this->tabs)) + { + $i=0; + foreach ($this->tabs as $key => $value) + { + if ($value) + { + $sql = "INSERT INTO ".MAIN_DB_PREFIX."const (name,type,value,note,visible)"; + $sql.= " VALUES ('".$this->const_name."_TABS_".$i."','chaine','".$value."',null,'0')"; + dolibarr_syslog("DolibarrModules::insert_tabs sql=".$sql); + $resql=$this->db->query($sql); + /* Allow duplicate key + if (! $resql) + { + $err++; + } + */ + } + $i++; + } + } + return $err; + } + + /** + * \brief Insere les constantes associees au module dans llx_const + * \return int Nombre d'erreurs (0 si ok) */ function insert_const() { diff --git a/htdocs/includes/modules/mailings/poire.modules.php b/htdocs/includes/modules/mailings/poire.modules.php index 496b146a41d..e0c5fd82e71 100644 --- a/htdocs/includes/modules/mailings/poire.modules.php +++ b/htdocs/includes/modules/mailings/poire.modules.php @@ -36,7 +36,7 @@ include_once DOL_DOCUMENT_ROOT.'/includes/modules/mailings/modules_mailings.php' class mailing_poire extends MailingTargets { var $name='ContactCompanies'; // Identifiant du module mailing - var $desc='Contacts des sociétés'; // Libellé utilisé si aucune traduction pour MailingModuleDescXXX ou XXX=name trouvée + var $desc='Contacts des societes'; // Libellé utilisé si aucune traduction pour MailingModuleDescXXX ou XXX=name trouvée var $require_module=array("commercial"); // Module mailing actif si modules require_module actifs var $require_admin=0; // Module mailing actif pour user admin ou non var $picto='contact'; diff --git a/htdocs/lib/product.lib.php b/htdocs/lib/product.lib.php index 5683dafe194..391eca76636 100644 --- a/htdocs/lib/product.lib.php +++ b/htdocs/lib/product.lib.php @@ -108,22 +108,36 @@ function product_prepare_head($product, $user) { if ($conf->stock->enabled) { - $head[$h][0] = DOL_URL_ROOT."/product/stock/product.php?id=".$product->id; - $head[$h][1] = $langs->trans("Stock"); - $head[$h][2] = 'stock'; - $h++; + $head[$h][0] = DOL_URL_ROOT."/product/stock/product.php?id=".$product->id; + $head[$h][1] = $langs->trans("Stock"); + $head[$h][2] = 'stock'; + $h++; } } - /* - * Onglets additionnels pour les canvas - */ - if(is_array($product->onglets)) + // More tabs from modules + if (is_array($conf->tabs_modules['product'])) + { + $i=0; + foreach ($conf->tabs_modules['product'] as $value) + { + $values=split(':',$value); + + if ($values[2]) $langs->load($values[2]); + $head[$h][0] = eregi_replace('__ID__',$product->id,$values[3]); + $head[$h][1] = $langs->trans($values[1]); + $head[$h][2] = 'module'.$i; + $h++; + } + } + + // More tabs from canvas + if (is_array($product->onglets)) { foreach ($product->onglets as $onglet) { - $head[$h] = $onglet; - $h++; + $head[$h] = $onglet; + $h++; } } diff --git a/htdocs/main.inc.php b/htdocs/main.inc.php index 9853f5e9f89..679a91d7d8a 100644 --- a/htdocs/main.inc.php +++ b/htdocs/main.inc.php @@ -470,7 +470,7 @@ if (! empty($_GET["lang"])) } -// Remplace conf->css par valeur personnalise +// Replace conf->css by personalized value if (isset($user->conf->MAIN_THEME) && $user->conf->MAIN_THEME) { $conf->theme=$user->conf->MAIN_THEME; diff --git a/htdocs/master.inc.php b/htdocs/master.inc.php index 8c3bc5efac3..b740707bbfd 100644 --- a/htdocs/master.inc.php +++ b/htdocs/master.inc.php @@ -90,9 +90,6 @@ $pos = strstr ($uri, '/'); // $pos contient alors url sans nom domaine if ($pos == '/') $pos = ''; // si $pos vaut /, on le met a '' define('DOL_URL_ROOT', $pos); // URL racine relative -// Special code for alternate dev directories (Used on dev env only) -if (! empty($dolibarr_main_document_root_bis)) define('DOL_DOCUMENT_ROOT_BIS', $dolibarr_main_document_root_bis); - /* * Controle validite fichier conf @@ -106,7 +103,7 @@ if (! file_exists(DOL_DOCUMENT_ROOT ."/lib/functions.lib.php")) /* - * Creation objet $conf + * Create $conf object */ // on décode le mot de passe de la base si besoin @@ -145,6 +142,18 @@ $charset='UTF-8'; // If not output format found in any conf file if (empty($character_set_client)) $character_set_client=$charset; $conf->character_set_client=strtoupper($character_set_client); +// Define array of document root directories +$conf->dol_document_root=array(DOL_DOCUMENT_ROOT); +if (! empty($dolibarr_main_document_root_alt)) +{ + // dolibarr_main_document_root_alt contains several directories + $values=split(';',$dolibarr_main_document_root_alt); + foreach($values as $value) + { + $conf->dol_document_root[]=$value; + } +} + // Defini prefix if (isset($_SERVER["LLX_DBNAME"])) $dolibarr_main_db_prefix=$_SERVER["LLX_DBNAME"]; define('MAIN_DB_PREFIX',$dolibarr_main_db_prefix); diff --git a/htdocs/public/demo/index.php b/htdocs/public/demo/index.php index 9149ce60429..230c67ae5fa 100644 --- a/htdocs/public/demo/index.php +++ b/htdocs/public/demo/index.php @@ -103,9 +103,7 @@ llxHeaderVierge($langs->trans("DolibarrDemo")); // Search modules -$dirlist=array(); -$dirlist[]=DOL_DOCUMENT_ROOT; -if (defined('DOL_DOCUMENT_ROOT_BIS')) $dirlist[]=DOL_DOCUMENT_ROOT_BIS; +$dirlist=$conf->dol_document_root; $filename = array(); $modules = array(); diff --git a/htdocs/translate.class.php b/htdocs/translate.class.php index f6d1b8dd50d..db2a6caae30 100644 --- a/htdocs/translate.class.php +++ b/htdocs/translate.class.php @@ -33,8 +33,7 @@ */ class Translate { - var $dir; // Directory with translation files - var $dir_bis; // Second directory with translation files (for development on two workspaces) + var $dir; // Directories with translation files var $defaultlang; // Langue courante en vigueur de l'utilisateur @@ -59,9 +58,8 @@ class Translate { { $this->charset_output=$conf->character_set_client; } - $this->dir=(! $dir ? DOL_DOCUMENT_ROOT ."/langs" : $dir); - // For developpement purpose - $this->dir_bis=(defined('DOL_DOCUMENT_ROOT_BIS') ? DOL_DOCUMENT_ROOT_BIS ."/langs" : ""); + if ($dir) $this->dir=array($dir); + else $this->dir=$conf->dol_document_root; } @@ -183,118 +181,113 @@ class Translate { // Check cache if (! empty($this->tab_loaded[$domain])) { return; } // Le fichier de ce domaine est deja charge - $searchdir=$this->dir; - - // If $domain is @xxx instead of xxx then we look for module lang file htdocs/xxx/langs/code_CODE/xxx.lang - // instead of global lang file htdocs/langs/code_CODE/xxx.lang - if (eregi('@',$domain)) // It's a language file of a module, we look in dir of this module. - { - $domain=eregi_replace('@','',$domain); - $searchdir=DOL_DOCUMENT_ROOT ."/".$domain."/langs"; - } - - // Directory of translation files - $scandir = $searchdir."/".$this->defaultlang; - $file_lang = $scandir . "/".$domain.".lang"; - $filelangexists=is_file($file_lang); - - // If development with 2 workspaces (for development purpose only) - if (! $filelangexists && $this->dir_bis) - { - $scandir = $this->dir_bis."/".$this->defaultlang; + foreach($this->dir as $searchdir) + { + // If $domain is @xxx instead of xxx then we look for module lang file htdocs/xxx/langs/code_CODE/xxx.lang + // instead of global lang file htdocs/langs/code_CODE/xxx.lang + if (eregi('@',$domain)) // It's a language file of a module, we look in dir of this module. + { + $domain=eregi_replace('@','',$domain); + $searchdir=$searchdir ."/".$domain."/langs"; + } + else $searchdir=$searchdir."/langs"; + //print 'rrr'.$searchdir; + + // Directory of translation files + $scandir = $searchdir."/".$this->defaultlang; $file_lang = $scandir . "/".$domain.".lang"; $filelangexists=is_file($file_lang); - } - - // Check in "always available" alternate file if not found or if asked - if ($alt || ! $filelangexists) - { - // Dir of always available alternate file (en_US or fr_FR) - if ($this->defaultlang == "en_US") $scandiralt = $searchdir."/fr_FR"; - elseif (eregi('^fr',$this->defaultlang) && $this->defaultlang != 'fr_FR') $scandiralt = $searchdir."/fr_FR"; - elseif (eregi('^en',$this->defaultlang) && $this->defaultlang != 'en_US') $scandiralt = $searchdir."/en_US"; - elseif (eregi('^es',$this->defaultlang) && $this->defaultlang != 'es_ES') $scandiralt = $searchdir."/es_ES"; - else $scandiralt = $searchdir."/en_US"; - - $file_lang = $scandiralt . "/".$domain.".lang"; - $filelangexists=is_file($file_lang); - $alt=1; - } - - if ($filelangexists) - { - // Enable cache of lang file in session (faster but need more memory) - // Speed gain: 40ms - Memory overusage: 200ko (Size of session cache file) - $enablelangcacheinsession=false; - - if ($enablelangcacheinsession && isset($_SESSION['lang_'.$domain])) - { - foreach($_SESSION['lang_'.$domain] as $key => $value) + + // Check in "always available" alternate file if not found or if asked + if ($alt || ! $filelangexists) + { + // Dir of always available alternate file (en_US or fr_FR) + if ($this->defaultlang == "en_US") $scandiralt = $searchdir."/fr_FR"; + elseif (eregi('^fr',$this->defaultlang) && $this->defaultlang != 'fr_FR') $scandiralt = $searchdir."/fr_FR"; + elseif (eregi('^en',$this->defaultlang) && $this->defaultlang != 'en_US') $scandiralt = $searchdir."/en_US"; + elseif (eregi('^es',$this->defaultlang) && $this->defaultlang != 'es_ES') $scandiralt = $searchdir."/es_ES"; + else $scandiralt = $searchdir."/en_US"; + + $file_lang = $scandiralt . "/".$domain.".lang"; + $filelangexists=is_file($file_lang); + $alt=1; + } + + if ($filelangexists) + { + // Enable cache of lang file in session (faster but need more memory) + // Speed gain: 40ms - Memory overusage: 200ko (Size of session cache file) + $enablelangcacheinsession=false; + + if ($enablelangcacheinsession && isset($_SESSION['lang_'.$domain])) { - $this->tab_translate[$key]=$value; - $this->tab_loaded[$domain]=3; // Marque ce fichier comme charge depuis cache session + foreach($_SESSION['lang_'.$domain] as $key => $value) + { + $this->tab_translate[$key]=$value; + $this->tab_loaded[$domain]=3; // Marque ce fichier comme charge depuis cache session + } } - } - else - { - if ($fp = @fopen($file_lang,"rt")) - { - if ($enablelangcacheinsession) $tabtranslatedomain=array(); // To save lang in session - $finded = 0; - while (($ligne = fgets($fp,4096)) && ($finded == 0)) - { - if ($ligne[0] != "\n" && $ligne[0] != " " && $ligne[0] != "#") - { - $tab=split('=',$ligne,2); - $key=trim($tab[0]); $value=''; - //print "Domain=$domain, found a string for $tab[0] with value $tab[1]
"; - //if (! $this->getTransFromTab($key)) - if (empty($this->tab_translate[$key]) && isset($tab[1])) - { - $value=trim(ereg_replace('\\\n',"\n",$tab[1])); - - if (eregi('^CHARSET$',$key)) - { - // On est tombe sur une balise qui declare le format du fichier lu - $this->charset_inputfile=strtoupper($value); - //print 'File '.$file_lang.' has format '.$this->charset_inputfile.'
'; - } - else - { - // On stocke toujours dans le tableau Tab en UTF-8 - //if ($this->charset_inputfile == 'UTF-8') $value=utf8_decode($value); - if ($this->charset_inputfile == 'ISO-8859-1') $value=utf8_encode($value); - - // We do not load Separator values for alternate files - if (! $alt || (! eregi('^Separator',$key))) + else + { + if ($fp = @fopen($file_lang,"rt")) + { + if ($enablelangcacheinsession) $tabtranslatedomain=array(); // To save lang in session + $finded = 0; + while (($ligne = fgets($fp,4096)) && ($finded == 0)) + { + if ($ligne[0] != "\n" && $ligne[0] != " " && $ligne[0] != "#") + { + $tab=split('=',$ligne,2); + $key=trim($tab[0]); $value=''; + //print "Domain=$domain, found a string for $tab[0] with value $tab[1]
"; + //if (! $this->getTransFromTab($key)) + if (empty($this->tab_translate[$key]) && isset($tab[1])) + { + $value=trim(ereg_replace('\\\n',"\n",$tab[1])); + + if (eregi('^CHARSET$',$key)) { - $this->tab_translate[$key]=$value; + // On est tombe sur une balise qui declare le format du fichier lu + $this->charset_inputfile=strtoupper($value); + //print 'File '.$file_lang.' has format '.$this->charset_inputfile.'
'; } - if ($enablelangcacheinsession) $tabtranslatedomain[$key]=$value; // To save lang in session - } - } - } - } - fclose($fp); - - // Pour les langues aux fichiers parfois incomplets, on charge la langue alternative - if (! $alt && $this->defaultlang != "fr_FR" && $this->defaultlang != "en_US") - { - dolibarr_syslog("Translate::Load loading alternate translation file (to complete ".$this->defaultlang."/".$domain.".lang file)", LOG_DEBUG); - $this->load($domain,1); - } - - $this->tab_loaded[$domain]=1; // Marque ce fichier comme charge - - // To save lang in session - if ($enablelangcacheinsession && sizeof($tabtranslatedomain)) $_SESSION['lang_'.$domain]=$tabtranslatedomain; - } - } - } - else - { - $this->tab_loaded[$domain]=2; // Marque ce fichier comme non trouve - } + else + { + // On stocke toujours dans le tableau Tab en UTF-8 + //if ($this->charset_inputfile == 'UTF-8') $value=utf8_decode($value); + if ($this->charset_inputfile == 'ISO-8859-1') $value=utf8_encode($value); + + // We do not load Separator values for alternate files + if (! $alt || (! eregi('^Separator',$key))) + { + $this->tab_translate[$key]=$value; + } + if ($enablelangcacheinsession) $tabtranslatedomain[$key]=$value; // To save lang in session + } + } + } + } + fclose($fp); + + // Pour les langues aux fichiers parfois incomplets, on charge la langue alternative + if (! $alt && $this->defaultlang != "fr_FR" && $this->defaultlang != "en_US") + { + dolibarr_syslog("Translate::Load loading alternate translation file (to complete ".$this->defaultlang."/".$domain.".lang file)", LOG_DEBUG); + $this->load($domain,1); + } + + $this->tab_loaded[$domain]=1; // Marque ce fichier comme charge + + // To save lang in session + if ($enablelangcacheinsession && sizeof($tabtranslatedomain)) $_SESSION['lang_'.$domain]=$tabtranslatedomain; + + break; // Break loop on each root dir + } + } + } + } + + if (empty($this->tab_loaded[$domain])) $this->tab_loaded[$domain]=2; // Marque ce fichier comme non trouve return 1; } diff --git a/htdocs/user/perms.php b/htdocs/user/perms.php index dfb99063232..e0a7bb79198 100644 --- a/htdocs/user/perms.php +++ b/htdocs/user/perms.php @@ -101,11 +101,11 @@ $db->begin(); // Charge les modules soumis a permissions $modules = array(); -$listdir=array(); -$listdir[]=DOL_DOCUMENT_ROOT . "/includes/modules/"; -if (defined('DOL_DOCUMENT_ROOT_BIS') && DOL_DOCUMENT_ROOT_BIS) $listdir[]=DOL_DOCUMENT_ROOT_BIS . "/includes/modules/"; -foreach($listdir as $dir) +$listdir=$conf->dol_document_root; +foreach($listdir as $dirroot) { + $dir=$dirroot."/includes/modules/"; + $handle=opendir($dir); while (($file = readdir($handle))!==false) {