diff --git a/htdocs/admin/system/modules.php b/htdocs/admin/system/modules.php index 7aa01be169e..e3dcddaff24 100644 --- a/htdocs/admin/system/modules.php +++ b/htdocs/admin/system/modules.php @@ -48,22 +48,45 @@ $modules = array(); $modules_names = array(); $modules_files = array(); -// Load list of modules -foreach($conf->file->dol_document_root as $searchdir) +foreach ($conf->file->dol_document_root as $type => $dirroot) { - $dirtoscan = $searchdir . "/includes/modules/"; - $handle=opendir($dirtoscan); + $modulesdir[] = $dirroot . "/includes/modules/"; + + if ($type == 'alt') + { + $handle=@opendir($dirroot); + if (is_resource($handle)) + { + while (($file = readdir($handle))!==false) + { + if (is_dir($dirroot.'/'.$file) && substr($file, 0, 1) <> '.' && substr($file, 0, 3) <> 'CVS' && $file != 'includes') + { + if (is_dir($dirroot . '/' . $file . '/includes/modules/')) + { + $modulesdir[] = $dirroot . '/' . $file . '/includes/modules/'; + } + } + } + closedir($handle); + } + } +} + +// Load list of modules +foreach($modulesdir as $dir) +{ + $handle=opendir($dir); if (is_resource($handle)) { while (($file = readdir($handle))!==false) { - if (is_readable($dirtoscan.$file) && substr($file, 0, 3) == 'mod' && substr($file, dol_strlen($file) - 10) == '.class.php') + if (is_readable($dir.$file) && substr($file, 0, 3) == 'mod' && substr($file, dol_strlen($file) - 10) == '.class.php') { $modName = substr($file, 0, dol_strlen($file) - 10); if ($modName) { - include_once($dirtoscan.$file); + include_once($dir.$file); $objMod = new $modName($db); $modules[$objMod->numero]=$objMod; diff --git a/htdocs/exports/class/export.class.php b/htdocs/exports/class/export.class.php index 72ee696c947..12e9c123241 100644 --- a/htdocs/exports/class/export.class.php +++ b/htdocs/exports/class/export.class.php @@ -1,6 +1,6 @@ - * Copyright (C) 2005-2009 Regis Houssin + * Copyright (C) 2005-2011 Regis Houssin * * 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 @@ -72,11 +72,32 @@ class Export $var=true; $i=0; - //$dir=DOL_DOCUMENT_ROOT."/includes/modules"; - foreach($conf->file->dol_document_root as $dirroot) + foreach ($conf->file->dol_document_root as $type => $dirroot) { - $dir = $dirroot.'/includes/modules'; + $modulesdir[] = $dirroot . "/includes/modules/"; + + if ($type == 'alt') + { + $handle=@opendir($dirroot); + if (is_resource($handle)) + { + while (($file = readdir($handle))!==false) + { + if (is_dir($dirroot.'/'.$file) && substr($file, 0, 1) <> '.' && substr($file, 0, 3) <> 'CVS' && $file != 'includes') + { + if (is_dir($dirroot . '/' . $file . '/includes/modules/')) + { + $modulesdir[] = $dirroot . '/' . $file . '/includes/modules/'; + } + } + } + closedir($handle); + } + } + } + foreach($modulesdir as $dir) + { // Search available exports $handle=@opendir($dir); if (is_resource($handle)) @@ -84,7 +105,7 @@ class Export // Search module files while (($file = readdir($handle))!==false) { - if (preg_match("/^(mod.*)\.class\.php$/i",$file,$reg)) + if (is_readable($dir.$file) && preg_match("/^(mod.*)\.class\.php$/i",$file,$reg)) { $modulename=$reg[1]; @@ -96,7 +117,7 @@ class Export if ($enabled) { // Chargement de la classe - $file = $dir."/".$modulename.".class.php"; + $file = $dir.$modulename.".class.php"; $classname = $modulename; require_once($file); $module = new $classname($this->db); diff --git a/htdocs/langs/en_US/install.lang b/htdocs/langs/en_US/install.lang index 2abf8796bcd..be842560ee5 100644 --- a/htdocs/langs/en_US/install.lang +++ b/htdocs/langs/en_US/install.lang @@ -96,7 +96,7 @@ DirectoryRecommendation=It is recommanded to use a directory outside of your dir LoginAlreadyExists=Already exists DolibarrAdminLogin=Dolibarr admin login AdminLoginAlreadyExists=Dolibarr administrator account '%s' already exists. Go back, if you want to create another one. -WarningRemoveInstallDir=Warning, for security reasons, once the install or upgrade is complete, you should remove the install directory or add a file called install.lock into Dolibarr root directory, in order to avoid malicious use of it. +WarningRemoveInstallDir=Warning, for security reasons, once the install or upgrade is complete, you should add a file called install.lock into Dolibarr document directory, in order to avoid malicious use of install process. ThisPHPDoesNotSupportTypeBase=This PHP system does not support any interface to access database type %s FunctionNotAvailableInThisPHP=Not available on this PHP MigrateScript=Migration script diff --git a/htdocs/langs/fr_FR/install.lang b/htdocs/langs/fr_FR/install.lang index ae12b68a6a7..0ae38bac4f8 100644 --- a/htdocs/langs/fr_FR/install.lang +++ b/htdocs/langs/fr_FR/install.lang @@ -97,7 +97,7 @@ LoginAlreadyExists=Existe déjà DolibarrAdminLogin=Login de l'utilisateur administrateur de Dolibarr FailedToCreateAdminLogin=Echec de la création du compte administrateur Dolibarr. AdminLoginAlreadyExists=Compte administrateur Dolibarr '%s' déjà existant. Revenez en arrière si vous voulez en créer un autre. -WarningRemoveInstallDir=Attention, pour des raisons de sécurité, une fois l'installation terminée, il est conseillé de supprimer manuellement le répertoire install, ou de placer dans le répertoire racine de Dolibarr un fichier nommé install.lock en lecture seule. +WarningRemoveInstallDir=Attention, pour des raisons de sécurité, une fois l'installation terminée, il est conseillé de placer dans le répertoire document de Dolibarr un fichier nommé install.lock en lecture seule. ThisPHPDoesNotSupportTypeBase=Le système PHP ne supporte pas les interfaces d'accès pour les bases %s FunctionNotAvailableInThisPHP=Non disponible sur ce PHP MigrateScript=Script de migration