diff --git a/htdocs/admin/perms.php b/htdocs/admin/perms.php
index e70fb39c3bd..ae5ffc02aea 100644
--- a/htdocs/admin/perms.php
+++ b/htdocs/admin/perms.php
@@ -26,6 +26,7 @@
require("../main.inc.php");
require_once(DOL_DOCUMENT_ROOT."/core/lib/admin.lib.php");
+require_once(DOL_DOCUMENT_ROOT."/core/lib/functions2.lib.php");
$langs->load("admin");
$langs->load("users");
@@ -79,37 +80,13 @@ $db->begin();
// Charge les modules soumis a permissions
$modules = array();
-$modulesdir = array();
-
-foreach ($conf->file->dol_document_root as $type => $dirroot)
-{
- $modulesdir[] = $dirroot . "/core/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 . '/core/modules/'))
- {
- $modulesdir[] = $dirroot . '/' . $file . '/core/modules/';
- }
- }
- }
- closedir($handle);
- }
- }
-}
+$modulesdir = dolGetModulesDirs();
foreach ($modulesdir as $dir)
{
// Load modules attributes in arrays (name, numero, orders) from dir directory
//print $dir."\n
";
- $handle=@opendir($dir);
+ $handle=@opendir(dol_osencode($dir));
if (is_resource($handle))
{
while (($file = readdir($handle))!==false)
diff --git a/htdocs/core/lib/functions2.lib.php b/htdocs/core/lib/functions2.lib.php
index f44aea29ed8..5a1866dbc99 100644
--- a/htdocs/core/lib/functions2.lib.php
+++ b/htdocs/core/lib/functions2.lib.php
@@ -25,6 +25,44 @@
*/
+/**
+ * Return list of modules directories
+ *
+ * @param string $subdir Sub directory (Example: '/mailings')
+ * @return array Array of directories that can contains module descriptors
+ */
+function dolGetModulesDirs($subdir='')
+{
+ global $conf;
+
+ $modulesdir=array();
+
+ foreach ($conf->file->dol_document_root as $type => $dirroot)
+ {
+ // Default core/modules dir
+ $modulesdir[$dirroot . '/core/modules'.$subdir.'/'] = $dirroot . '/core/modules'.$subdir.'/';
+
+ // Scan dir from external modules
+ $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 . '/core/modules'.$subdir.'/'))
+ {
+ $modulesdir[$dirroot . '/' . $file . '/core/modules'.$subdir.'/'] = $dirroot . '/' . $file . '/core/modules'.$subdir.'/';
+ }
+ }
+ }
+ closedir($handle);
+ }
+ }
+ return $modulesdir;
+}
+
+
/**
* Try to guess default paper format according to language into $langs
*
diff --git a/htdocs/user/group/perms.php b/htdocs/user/group/perms.php
index 391d8793462..59fd1b32cb0 100644
--- a/htdocs/user/group/perms.php
+++ b/htdocs/user/group/perms.php
@@ -27,6 +27,7 @@
require("../../main.inc.php");
require_once(DOL_DOCUMENT_ROOT.'/user/class/usergroup.class.php');
require_once(DOL_DOCUMENT_ROOT."/core/lib/usergroups.lib.php");
+require_once(DOL_DOCUMENT_ROOT."/core/lib/functions2.lib.php");
$langs->load("users");
$langs->load("admin");
@@ -91,42 +92,17 @@ if ($id)
$title = $langs->trans("Group");
dol_fiche_head($head, 'rights', $title, 0, 'group');
-
- $db->begin();
-
// Charge les modules soumis a permissions
$modules = array();
- $modulesdir = array();
+ $modulesdir = dolGetModulesDirs();
- foreach ($conf->file->dol_document_root as $type => $dirroot)
- {
- $modulesdir[] = $dirroot . "/core/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 . '/core/modules/'))
- {
- $modulesdir[] = $dirroot . '/' . $file . '/core/modules/';
- }
- }
- }
- closedir($handle);
- }
- }
- }
+ $db->begin();
foreach ($modulesdir as $dir)
{
// Load modules attributes in arrays (name, numero, orders) from dir directory
//print $dir."\n
";
- $handle=@opendir($dir);
+ $handle=@opendir(dol_osencode($dir));
if (is_resource($handle))
{
while (($file = readdir($handle))!==false)
@@ -134,7 +110,7 @@ if ($id)
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($dir."/".$file);
diff --git a/htdocs/user/perms.php b/htdocs/user/perms.php
index 538ab04d5e4..93eb28b4056 100644
--- a/htdocs/user/perms.php
+++ b/htdocs/user/perms.php
@@ -26,6 +26,7 @@
require("../main.inc.php");
require_once(DOL_DOCUMENT_ROOT."/core/lib/usergroups.lib.php");
+require_once(DOL_DOCUMENT_ROOT."/core/lib/functions2.lib.php");
$langs->load("users");
$langs->load("admin");
@@ -122,35 +123,11 @@ $db->begin();
// Search all modules with permission and reload permissions def.
$modules = array();
-$modulesdir = array();
-
-foreach ($conf->file->dol_document_root as $type => $dirroot)
-{
- $modulesdir[] = $dirroot . "/core/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 . '/core/modules/'))
- {
- $modulesdir[] = $dirroot . '/' . $file . '/core/modules/';
- }
- }
- }
- closedir($handle);
- }
- }
-}
+$modulesdir = dolGetModulesDirs();
foreach($modulesdir as $dir)
{
- $handle=@opendir($dir);
+ $handle=@opendir(dol_osencode($dir));
if (is_resource($handle))
{
while (($file = readdir($handle))!==false)