From 1b5f540d93026ee4b6a2a7cc83c6e8b3c19ff3b2 Mon Sep 17 00:00:00 2001 From: Regis Houssin Date: Wed, 25 Jul 2012 13:29:36 +0200 Subject: [PATCH] Fix: can't read permissions with an external module in root directory instead "custom" directory --- htdocs/admin/perms.php | 29 +++-------------------- htdocs/core/lib/functions2.lib.php | 38 ++++++++++++++++++++++++++++++ htdocs/user/group/perms.php | 34 ++++---------------------- htdocs/user/perms.php | 29 +++-------------------- 4 files changed, 49 insertions(+), 81 deletions(-) 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)