From 18c081a7acbdd8d53fa65daab32846d92ec92ab5 Mon Sep 17 00:00:00 2001 From: Regis Houssin Date: Mon, 30 Apr 2012 16:51:45 +0200 Subject: [PATCH] New: add external theme with a module --- dev/skeletons/modMyModule.class.php | 1 + htdocs/core/class/conf.class.php | 4 +- htdocs/core/lib/usergroups.lib.php | 95 ++++++++++++++++------------- 3 files changed, 57 insertions(+), 43 deletions(-) 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 ''; - - $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 ''; + + $i++; + + if ($i % $thumbsbyrow == 0) print ''; + } + } + } + } } + if ($i % $thumbsbyrow != 0) { while ($i % $thumbsbyrow != 0)
'; - $file=$dirtheme."/".$subdir."/thumb.png"; - $url=$urltheme."/".$subdir."/thumb.png"; - if (! file_exists($file)) $url=$urltheme."/common/nophoto.jpg"; - print '
'; - print 'id:'').'" style="font-weight: normal;" alt="'.$langs->trans("Preview").'">'; - if ($subdir == $conf->global->MAIN_THEME) $title=$langs->trans("ThemeCurrentlyActive"); - else $title=$langs->trans("ShowPreview"); - print ''.$title.''; - print ''; - print '
'; - if ($subdir == $selected_theme) - { - print ' '.$subdir.''; - } - else - { - print ' '.$subdir; - } - print '
'; + $file=$dirtheme."/".$subdir."/thumb.png"; + $url=$urltheme."/".$subdir."/thumb.png"; + if (! file_exists($file)) $url=$urltheme."/common/nophoto.jpg"; + print '
'; + print 'id:'').'" style="font-weight: normal;" alt="'.$langs->trans("Preview").'">'; + if ($subdir == $conf->global->MAIN_THEME) $title=$langs->trans("ThemeCurrentlyActive"); + else $title=$langs->trans("ShowPreview"); + print ''.$title.''; + print ''; + print '
'; + if ($subdir == $selected_theme) + { + print ' '.$subdir.''; + } + else + { + print ' '.$subdir; + } + print '