diff --git a/dev/skeletons/modMyModule.class.php b/dev/skeletons/modMyModule.class.php
index f81b72b5776..26d8ce19865 100644
--- a/dev/skeletons/modMyModule.class.php
+++ b/dev/skeletons/modMyModule.class.php
@@ -77,6 +77,7 @@ class modMyModule extends DolibarrModules
// 'login' => 0, // Set this to 1 if module has its own login method directory (core/login)
// 'substitutions' => 0, // Set this to 1 if module has its own substitution function file (core/substitutions)
// 'menus' => 0, // Set this to 1 if module has its own menus handler directory (core/menus)
+ // 'theme' => 0, // Set this to 1 if module has its own theme directory (core/theme)
// 'tpl' => 0, // Set this to 1 if module overwrite template dir (core/tpl)
// 'barcode' => 0, // Set this to 1 if module has its own barcode directory (core/modules/barcode)
// 'models' => 0, // Set this to 1 if module has its own models directory (core/modules/xxx)
diff --git a/htdocs/core/class/conf.class.php b/htdocs/core/class/conf.class.php
index 930387e52b6..5f8185253ed 100644
--- a/htdocs/core/class/conf.class.php
+++ b/htdocs/core/class/conf.class.php
@@ -52,7 +52,7 @@ class Conf
public $smart_menu;
public $modules = array(); // List of activated modules
- public $modules_parts = array('triggers'=>array(),'login'=>array(),'substitutions'=>array(),'menus'=>array(),'tpl'=>array(),'barcode'=>array(),'models'=>array()); // List of modules parts
+ public $modules_parts = array('triggers'=>array(),'login'=>array(),'substitutions'=>array(),'menus'=>array(),'theme'=>array(),'tpl'=>array(),'barcode'=>array(),'models'=>array()); // List of modules parts
// TODO Remove all thoose tabs with one generic
public $triggers_modules = array();
@@ -188,7 +188,7 @@ class Conf
if (! isset($this->modules_parts[$partname]) || ! is_array($this->modules_parts[$partname])) { $this->modules_parts[$partname] = array(); }
$arrValue = json_decode($value,true);
if (is_array($arrValue) && ! empty($arrValue)) $value = $arrValue;
- else if (in_array($partname,array('login','menus','substitutions','triggers','tpl'))) $value = '/'.$modulename.'/core/'.$partname.'/';
+ else if (in_array($partname,array('login','menus','substitutions','triggers','tpl','theme'))) $value = '/'.$modulename.'/core/'.$partname.'/';
else if (in_array($partname,array('models'))) $value = '/'.$modulename.'/';
else if ($value == 1) $value = '/'.$modulename.'/core/modules/'.$partname.'/';
$this->$varname = array_merge($this->$varname, array($modulename => $value)); // TODO deprecated
diff --git a/htdocs/core/lib/usergroups.lib.php b/htdocs/core/lib/usergroups.lib.php
index 014a168cd6a..22d0bdbfd0a 100644
--- a/htdocs/core/lib/usergroups.lib.php
+++ b/htdocs/core/lib/usergroups.lib.php
@@ -159,9 +159,7 @@ function show_theme($fuser,$edit=0,$foruserprofile=false)
{
global $conf,$langs,$bc;
-
- $dirtheme=dol_buildpath($conf->global->MAIN_FORCETHEMEDIR.'/theme',0);
- $urltheme=dol_buildpath($conf->global->MAIN_FORCETHEMEDIR.'/theme',1);
+ $dirthemes=array_merge(array($conf->global->MAIN_FORCETHEMEDIR.'/theme'),(array) $conf->modules_parts['themes']);
$selected_theme=$conf->global->MAIN_THEME;
if (! empty($fuser)) $selected_theme=$fuser->conf->MAIN_THEME;
@@ -216,47 +214,62 @@ function show_theme($fuser,$edit=0,$foruserprofile=false)
print '
';
print '';
- $handle=opendir($dirtheme);
+
$i=0;
- while (($subdir = readdir($handle))!==false)
+
+ foreach($dirthemes as $dir)
{
- if (is_dir($dirtheme."/".$subdir) && substr($subdir, 0, 1) <> '.'
- && substr($subdir, 0, 3) <> 'CVS' && ! preg_match('/common|phones/i',$subdir))
- {
- // Disable not stable themes
- //if ($conf->global->MAIN_FEATURES_LEVEL < 1 && preg_match('/bureau2crea/i',$subdir)) continue;
-
- if ($i % $thumbsbyrow == 0)
- {
- print '';
- }
-
- print '| ';
- $file=$dirtheme."/".$subdir."/thumb.png";
- $url=$urltheme."/".$subdir."/thumb.png";
- if (! file_exists($file)) $url=$urltheme."/common/nophoto.jpg";
- print ' | ';
-
- $i++;
-
- if ($i % $thumbsbyrow == 0) print ' ';
- }
+ $dirtheme=dol_buildpath($dir,0);
+ $urltheme=dol_buildpath($dir,1);
+
+ if (is_dir($dirtheme))
+ {
+ $handle=opendir($dirtheme);
+ if (is_resource($handle))
+ {
+ while (($subdir = readdir($handle))!==false)
+ {
+ if (is_dir($dirtheme."/".$subdir) && substr($subdir, 0, 1) <> '.'
+ && substr($subdir, 0, 3) <> 'CVS' && ! preg_match('/common|phones/i',$subdir))
+ {
+ // Disable not stable themes
+ //if ($conf->global->MAIN_FEATURES_LEVEL < 1 && preg_match('/bureau2crea/i',$subdir)) continue;
+
+ if ($i % $thumbsbyrow == 0)
+ {
+ print '';
+ }
+
+ print '| ';
+ $file=$dirtheme."/".$subdir."/thumb.png";
+ $url=$urltheme."/".$subdir."/thumb.png";
+ if (! file_exists($file)) $url=$urltheme."/common/nophoto.jpg";
+ print ' | ';
+
+ $i++;
+
+ if ($i % $thumbsbyrow == 0) print ' ';
+ }
+ }
+ }
+ }
}
+
if ($i % $thumbsbyrow != 0)
{
while ($i % $thumbsbyrow != 0)
|