From 5d651d5cd35a74be752b2e4e156c8e972f130853 Mon Sep 17 00:00:00 2001 From: Regis Houssin Date: Mon, 1 Aug 2011 12:53:37 +0000 Subject: [PATCH] New: possibility to use includes/modules in external modules dir --- htdocs/admin/perms.php | 34 +++++++++++++++--- htdocs/lib/admin.lib.php | 77 +++++++++++++++++++++++++++++++++------- 2 files changed, 93 insertions(+), 18 deletions(-) diff --git a/htdocs/admin/perms.php b/htdocs/admin/perms.php index bee00b52906..6af9b54e7f0 100644 --- a/htdocs/admin/perms.php +++ b/htdocs/admin/perms.php @@ -21,7 +21,7 @@ * \file htdocs/admin/perms.php * \ingroup core * \brief Page d'administration/configuration des permissions par defaut - * \version $Id: perms.php,v 1.42 2011/07/31 22:23:26 eldy Exp $ + * \version $Id: perms.php,v 1.43 2011/08/01 12:53:37 hregis Exp $ */ require("../main.inc.php"); @@ -76,10 +76,34 @@ $db->begin(); // Charge les modules soumis a permissions $modules = array(); -foreach ($conf->file->dol_document_root as $dirroot) -{ - $dir = $dirroot . "/includes/modules/"; +$modulesdir = array(); +foreach ($conf->file->dol_document_root as $type => $dirroot) +{ + $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) +{ // Load modules attributes in arrays (name, numero, orders) from dir directory //print $dir."\n
"; $handle=@opendir($dir); @@ -194,5 +218,5 @@ print ''; $db->close(); -llxFooter('$Date: 2011/07/31 22:23:26 $ - $Revision: 1.42 $'); +llxFooter('$Date: 2011/08/01 12:53:37 $ - $Revision: 1.43 $'); ?> diff --git a/htdocs/lib/admin.lib.php b/htdocs/lib/admin.lib.php index c2d47f668da..4092c55ff2d 100644 --- a/htdocs/lib/admin.lib.php +++ b/htdocs/lib/admin.lib.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 @@ -20,7 +20,7 @@ /** * \file htdocs/lib/admin.lib.php * \brief Library of admin functions - * \version $Id: admin.lib.php,v 1.98 2011/07/31 23:25:40 eldy Exp $ + * \version $Id: admin.lib.php,v 1.99 2011/08/01 12:53:37 hregis Exp $ */ @@ -467,7 +467,7 @@ function dolibarr_set_const($db, $name, $value, $type='chaine', $visible=0, $not /** * \brief Define head array for tabs of security setup pages * \return Array of head - * \version $Id: admin.lib.php,v 1.98 2011/07/31 23:25:40 eldy Exp $ + * \version $Id: admin.lib.php,v 1.99 2011/08/01 12:53:37 hregis Exp $ */ function security_prepare_head() { @@ -615,16 +615,41 @@ function Activate($value,$withdeps=1) // Activate module if ($modName) { - $file = $modName . ".class.php"; + $modFile = $modName . ".class.php"; // Loop on each directory $found=false; - foreach ($conf->file->dol_document_root as $dol_document_root) + foreach ($conf->file->dol_document_root as $type => $dirroot) { - $dir = $dol_document_root."/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); + } + } + } - $found=@include_once($dir.$file); - if ($found) break; + foreach ($modulesdir as $dir) + { + if (file_exists($dir.$modFile)) + { + $found=@include_once($dir.$modFile); + if ($found) break; + } } $objMod = new $modName($db); @@ -700,20 +725,46 @@ function UnActivate($value,$requiredby=1) $modName = $value; $ret=''; + $modulesdir=array(); // Desactivation du module if ($modName) { - $file = $modName . ".class.php"; + $modFile = $modName . ".class.php"; // Loop on each directory $found=false; - foreach ($conf->file->dol_document_root as $dol_document_root) + foreach ($conf->file->dol_document_root as $type => $dirroot) { - $dir = $dol_document_root."/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); + } + } + } - $found=@include_once($dir.$file); - if ($found) break; + foreach ($modulesdir as $dir) + { + if (file_exists($dir.$modFile)) + { + $found=@include_once($dir.$modFile); + if ($found) break; + } } if ($found)