From bc203bfc3a2a87ef2f168375522172979627b069 Mon Sep 17 00:00:00 2001 From: vAugagneur Date: Thu, 24 Jan 2013 16:05:30 +0100 Subject: [PATCH] [+] BO : you can choose where you want to display modules in BO tabs --- admin-dev/themes/default/css/admin.css | 55 ++++++++++++- .../controllers/modules/favorites.tpl | 2 +- .../template/controllers/modules/js.tpl | 33 ++++++++ .../controllers/modules/tab_module_line.tpl | 81 ++++++------------- .../controllers/modules/tab_modules_list.tpl | 64 +++++++++++---- admin-dev/themes/default/template/toolbar.tpl | 73 +++++++++-------- classes/controller/AdminController.php | 7 +- controllers/admin/AdminModulesController.php | 77 ++++++++++++++---- 8 files changed, 260 insertions(+), 132 deletions(-) diff --git a/admin-dev/themes/default/css/admin.css b/admin-dev/themes/default/css/admin.css index 97f1f6389..07c1f0332 100644 --- a/admin-dev/themes/default/css/admin.css +++ b/admin-dev/themes/default/css/admin.css @@ -246,10 +246,18 @@ a.module_toggle_all{color: #268CCD;} right: 13px; top: 63px; z-index: 100; - padding: 10px; + padding: 10px 10px 0px 10px; box-shadow: 1px 5px 5px #CCCCCC; -moz-box-shadow: 1px 5px 10px #CCCCCC; -webkit-box-shadow: 1px 5px 10px #CCCCCC; + opacity: 1; + +} +.toolbarBox #modules_list_container #modules_list_container_content +{ + max-height: 500px; + overflow: scroll; + } .toolbarBox #modules_list_container #modules_list_container_tab {margin-top: 10px;width: auto;height: auto; } @@ -259,6 +267,45 @@ a.module_toggle_all{color: #268CCD;} .toolbarBox #modules_list_container #modules_list_container_tab #tab_module_switch {margin-bottom: 10px;} .toolbarBox #modules_list_container #modules_list_loader {margin-top: 10px} +.toolbarBox #modules_list_container .nav-tabs-modules:after { + clear: both; +} + +.toolbarBox #modules_list_container .nav-tabs-modules > li { + height: 19px; +} + +.toolbarBox #modules_list_container .nav-tabs-modules > li > a { + padding-right: 12px; + padding-left: 12px; + margin-right: 2px; + line-height: 14px; +} + +.toolbarBox #modules_list_container .nav-tabs-modules > li > a { + padding-top: 8px; + padding-bottom: 8px; + border: 1px solid transparent; + -webkit-border-radius: 4px 4px 0 0; + -moz-border-radius: 4px 4px 0 0; + border-radius: 4px 4px 0 0; +} + +.toolbarBox #modules_list_container .nav-tabs-modules > li > a:hover { + border-color: #C0C0C0; + background-color: #ffffff; +} + +.toolbarBox #modules_list_container .nav-tabs-modules > li > a {border: 1px solid #ddd;} + +.toolbarBox #modules_list_container .nav-tabs-modules > .active > a, +.toolbarBox #modules_list_container .nav-tabs-modules > .active > a:hover { + color: #555555; + cursor: default; + background-color: #EEE; + border: 1px solid #ddd; + border-bottom-color: transparent; +} div.fix-toolbar {border-bottom: 1px solid #E0E0E0;position:fixed;top:0;opacity:0.9;z-index:500;} @@ -462,7 +509,7 @@ form#product_form h4 { font-size:18px; font-weight:normal;} #moduleContainer .setup.non-install { background-color:#ec7000;} #moduleContainer .setup.must-have { background-color: #ec7000;} #moduleContainer .setup.off{ background-color:#ccc;} -#moduleContainer .row-actions-module span { padding-right:5px;} +#moduleContainer .row-actions-module span {padding-right:5px;} #moduleContainer .row-actions-module span a { font-size:12px;} #moduleContainer .button.uninstalled, #moduleContainer .button.installed { float:right; clear:both; margin-top:15px; font-size:12px;} @@ -478,7 +525,7 @@ form#product_form h4 { font-size:18px; font-weight:normal;} #modules_list_container_tab table tr td tr td {border: none} #modules_list_container_tab table tr:first-child {border-top:1px solid #ccc} #modules_list_container_tab .imgm {width:32px;} -#modules_list_container_tab .moduleDesc { font-size:12px; margin-bottom:10px;} +#modules_list_container_tab .moduleDesc { font-size:12px;} #modules_list_container_tab .moduleDesc h3 { color:#3A6EA7;margin: 0;font-size: 1.1em;text-align: left} #modules_list_container_tab .moduleDesc .metadata { float:left; display:block; margin:5px 0;} #modules_list_container_tab .moduleDesc .metadata dl { float:left; margin:0; padding-right:10px;} @@ -487,6 +534,7 @@ form#product_form h4 { font-size:18px; font-weight:normal;} #modules_list_container_tab .moduleDesc .metadata dl dt { font-weight:bold; padding-right:5px;} #modules_list_container_tab .moduleDesc p.desc { color:#666; font-family: Georgia; font-style: italic; font-size:12px; display:block; clear:both;text-align: left} #modules_list_container_tab .setup {background-color:#6db300; font-weight:bold; font-size:10px; color:#fff; text-transform:uppercase; position:relative; left:10px; padding:0px 4px; display: inline-block; border-radius:3px;} +#modules_list_container_tab .row-actions-module {float: right;} #modules_list_container_tab .setup.non-install { background-color:#ec7000;} #modules_list_container_tab .setup.must-have { background-color: #ec7000;} #modules_list_container_tab .setup.off{ background-color:#ccc;} @@ -497,7 +545,6 @@ form#product_form h4 { font-size:18px; font-weight:normal;} #modules_list_container_tab .moduleGridDesc { position:relative; display:block; height:30px;} #modules_list_container_tab .moduleGridDesc h3 { color:#3A6EA7; margin:0;} #modules_list_container_tab ul.listing-grid-module li select { position:absolute; top:0; right:0px; } -#modules_list_container_tab table tr td.tab_modules_actions_row { height: 20px} /*MODULE POSITION*/ diff --git a/admin-dev/themes/default/template/controllers/modules/favorites.tpl b/admin-dev/themes/default/template/controllers/modules/favorites.tpl index b3f43dfe3..3df17a423 100755 --- a/admin-dev/themes/default/template/controllers/modules/favorites.tpl +++ b/admin-dev/themes/default/template/controllers/modules/favorites.tpl @@ -42,7 +42,7 @@ {if isset($module->id) && $module->id gt 0}{l s='Installed'}{else}{l s='Not Installed'}{/if} {assign var="module_name" value=$module->name} - {foreach $tabs AS $t} {if $t.active} diff --git a/admin-dev/themes/default/template/controllers/modules/js.tpl b/admin-dev/themes/default/template/controllers/modules/js.tpl index 43e205aa1..a7c8d1237 100644 --- a/admin-dev/themes/default/template/controllers/modules/js.tpl +++ b/admin-dev/themes/default/template/controllers/modules/js.tpl @@ -296,7 +296,40 @@ $('#module_install_filter').change(function() { setFilter(); }); $('#module_status_filter').change(function() { setFilter(); }); $('#country_module_value_filter').change(function() { setFilter(); }); + + + $('.moduleTabPreferencesChoise').change(function() + { + var value_pref = $(this).val(); + var module_pref = $(this).attr('name'); + module_pref = module_pref.substring(2, module_pref.length); + $.ajax({ + type:"POST", + url : ajaxCurrentIndex, + async: true, + data : { + ajax : "1", + token : token, + controller : "AdminModules", + action : "saveTabModulePreferences", + module_pref : module_pref, + value_pref : value_pref + }, + success : function(data) + { + // res.status = cache or refresh + if (data == 'OK') + $('#r_' + module_pref).html(confirmPreferencesSaved); + }, + error: function(res,textStatus,jqXHR) + { + //jAlert("TECHNICAL ERROR"+res); + } + + }); + }); + // Method to save favorites preferences $('.moduleFavorite').change(function() { diff --git a/admin-dev/themes/default/template/controllers/modules/tab_module_line.tpl b/admin-dev/themes/default/template/controllers/modules/tab_module_line.tpl index e05490384..84ec1c9b5 100644 --- a/admin-dev/themes/default/template/controllers/modules/tab_module_line.tpl +++ b/admin-dev/themes/default/template/controllers/modules/tab_module_line.tpl @@ -34,9 +34,7 @@

{$module->displayName} {$module->version} - {if isset($module->type) && $module->type == 'addonsMustHave'} - {l s='Must Have'} - {/if} +

{if isset($module->description) && $module->description ne ''} @@ -49,64 +47,33 @@ - + + {if isset($module->id) && $module->id gt 0 } + {if $module->active} + {l s='Enabled'} + {else} + {l s='Disabled'} + {/if} + {else} + {if isset($module->type) && $module->type == 'addonsMustHave'} + {l s='Must Have'} + {else} + {l s='Not installed'} + {/if} + + {/if} + + {if isset($module->type) && $module->type == 'addonsMustHave'}   {displayPrice price=$module->price currency=$module->id_currency} + {else if !isset($module->not_on_disk)} + {$module->optionsHtml} + Valider {else} - id) && $module->id gt 0 && !empty($module->options.uninstall_onclick)}onclick="{$module->options.uninstall_onclick}"{/if} href="{if isset($module->id) && $module->id gt 0}{$module->options.uninstall_url}{else}{$module->options.install_url}{/if}" class="button installed"> - {if isset($module->id) && $module->id gt 0}{l s='Uninstall'}{else}{l s='Install'}{/if} - - {/if} - - -

- {if !isset($module->not_on_disk)} - {$module->optionsHtml} - Valider - {else} {/if} -
+ {l s='Install'} + {/if} - - - \ No newline at end of file + \ No newline at end of file diff --git a/admin-dev/themes/default/template/controllers/modules/tab_modules_list.tpl b/admin-dev/themes/default/template/controllers/modules/tab_modules_list.tpl index e9517c7dd..51560c295 100644 --- a/admin-dev/themes/default/template/controllers/modules/tab_modules_list.tpl +++ b/admin-dev/themes/default/template/controllers/modules/tab_modules_list.tpl @@ -30,28 +30,58 @@ $('.action_tab_module').each( function (){ $(this).click(function () { option = $('#'+$(this).data('option')+' :selected'); - /* if ($(option).data('onclick')) */ + if ($(option).data('onclick') != '') + { + var f = eval("(function(){ "+$(option).data('onclick')+"})"); + if (f.call()) + window.location.href = $(option).data('href'); + } + else window.location.href = $(option).data('href'); return false; }); }); + + $('#nav_tabs_modules_installed').click( function () { + $('#tab_modules_list_not_installed').hide(); + $('#tab_modules_list_installed').show(); + $(this).parent('li').addClass('active'); + $('#nav_tabs_modules_not_installed').parent('li').removeClass('active'); + return false; + }); + + $('#nav_tabs_modules_not_installed').click( function () { + $('#tab_modules_list_installed').hide(); + $('#tab_modules_list_not_installed').show(); + $(this).parent('li').addClass('active'); + $('#nav_tabs_modules_installed').parent('li').removeClass('active'); + return false; + }); }); -
- {l s='Installed'} - {l s='Not Installed'} + +
+ + {if count($tab_modules_list.installed)} + {foreach from=$tab_modules_list.installed item=module} + {include file='controllers/modules/tab_module_line.tpl' class_row={cycle values=",rowalt"}} + {/foreach} + {else} + + {/if} +
{l s='No modules available in this section.'}
+ + {if count($tab_modules_list.not_installed)} + {foreach from=$tab_modules_list.not_installed item=module} + {include file='controllers/modules/tab_module_line.tpl' class_row={cycle values=",rowalt"}} + {/foreach} + {else} + + {/if} +
- - {foreach from=$tab_modules_list.installed item=module} - {include file='controllers/modules/tab_module_line.tpl' class_row={cycle values=",rowalt"}} - {/foreach} -
- - {foreach from=$tab_modules_list.not_installed item=module} - {include file='controllers/modules/tab_module_line.tpl' class_row={cycle values=",rowalt"}} - {/foreach} - -{else} - {l s='No modules available in this section.'} {/if} -

{l s='Click here to choose which modules to display here'}

\ No newline at end of file +

{l s='More options'}

\ No newline at end of file diff --git a/admin-dev/themes/default/template/toolbar.tpl b/admin-dev/themes/default/template/toolbar.tpl index f80ab8254..fb09f2364 100644 --- a/admin-dev/themes/default/template/toolbar.tpl +++ b/admin-dev/themes/default/template/toolbar.tpl @@ -49,6 +49,7 @@ {/block} diff --git a/classes/controller/AdminController.php b/classes/controller/AdminController.php index 0f68ce46b..d63a9b922 100644 --- a/classes/controller/AdminController.php +++ b/classes/controller/AdminController.php @@ -1414,10 +1414,13 @@ class AdminControllerCore extends Controller 'href' => '#', 'desc' => $this->l('Modules List') ); - + $this->context->smarty->assign(array( 'tab_modules_list' => implode(',', $tab_modules_list), - 'admin_module_ajax_url' => $this->context->link->getAdminLink('AdminModules'))); + 'admin_module_ajax_url' => $this->context->link->getAdminLink('AdminModules'), + 'back_tab_modules_list' => $this->context->link->getAdminLink(Tools::getValue('controller')), + 'tab_modules_open' => (int)Tools::getValue('tab_modules_open') + )); } /** diff --git a/controllers/admin/AdminModulesController.php b/controllers/admin/AdminModulesController.php index 2096edd2a..58b72af7b 100644 --- a/controllers/admin/AdminModulesController.php +++ b/controllers/admin/AdminModulesController.php @@ -236,6 +236,9 @@ class AdminModulesControllerCore extends AdminController public function ajaxProcessGetTabModulesList() { $tab_modules_list = Tools::getValue('tab_modules_list'); + $back = Tools::getValue('back_tab_modules_list'); + if ($back) + $back .= '&tab_modules_open=1'; $modules_list = array('installed' =>array(), 'not_installed' => array()); if ($tab_modules_list) { @@ -245,7 +248,7 @@ class AdminModulesControllerCore extends AdminController { if (in_array($module->name, $tab_modules_list)) { - $this->fillModuleData($module, 'select'); + $this->fillModuleData($module, 'select', $back); if ($module->id) $modules_list['installed'][] = $module; else @@ -294,6 +297,22 @@ class AdminModulesControllerCore extends AdminController die('OK'); } + public function ajaxProcessSaveTabModulePreferences() + { + $values = Tools::getValue('value_pref'); + $module = Tools::getValue('module_pref'); + if (Validate::isModuleName($module)) + { + Db::getInstance()->execute('DELETE FROM `'._DB_PREFIX_.'tab_module_preference` WHERE `id_employee` = '.(int)$this->id_employee.' AND `module` = \''.pSQL($module).'\''); + if (is_array($values) && count($values)) + foreach($values as $value) + Db::getInstance()->execute(' + INSERT INTO `'._DB_PREFIX_.'tab_module_preference` (`id_tab_module_preference`, `id_employee`, `id_tab`, `module`) + VALUES (NULL, '.(int)$this->id_employee.', '.(int)$value.', \''.pSQL($module).'\');'); + } + die('OK'); + } + /* ** Get current URL ** @@ -759,6 +778,9 @@ class AdminModulesControllerCore extends AdminController // Call appropriate module callback if (!isset($ppmReturn)) $this->postProcessCallback(); + + if ($back = Tools::getValue('back')) + Tools::redirectAdmin($back); } /** @@ -787,12 +809,17 @@ class AdminModulesControllerCore extends AdminController return $html_error; } - /* - ** Display Modules Lists - ** - */ + /** + * Display modules list + * + * @param $module + * @param $output_type (link or select) + * @param $back + * + * @return string + */ protected $translationsTab = array(); - public function displayModuleOptions($module, $output_type = 'link') + public function displayModuleOptions($module, $output_type = 'link', $back = null) { if (!isset($this->translationsTab['Disable this module'])) { @@ -803,10 +830,19 @@ class AdminModulesControllerCore extends AdminController $this->translationsTab['Reset'] = $this->l('Reset'); $this->translationsTab['Configure'] = $this->l('Configure'); $this->translationsTab['Delete'] = $this->l('Delete'); + $this->translationsTab['Install'] = $this->l('Install'); + $this->translationsTab['Uninstall'] = $this->l('Uninstall'); $this->translationsTab['This action will permanently remove the module from the server. Are you sure you want to do this?'] = $this->l('This action will permanently remove the module from the server. Are you sure you want to do this?'); } $modules_options = array( + 'configure-module' => array( + 'href' => self::$currentIndex.'&configure='.urlencode($module->name).'&token='.$this->token.'&tab_module='.$module->tab.'&module_name='.urlencode($module->name), + 'onclick' => $module->onclick_option && isset($module->onclick_option_content['configure']) ? $module->onclick_option_content['configure'] : '', + 'title' => '', + 'text' => $this->translationsTab['Configure'], + 'cond' => $module->id && isset($module->is_configurable) && $module->is_configurable, + ), 'desactive-module' => array( 'href' => self::$currentIndex.'&token='.$this->token.'&module_name='.urlencode($module->name).'&'.($module->active ? 'enable=0' : 'enable=1').'&tab_module='.$module->tab, 'onclick' => $module->active && $module->onclick_option && isset($module->onclick_option_content['desactive']) ? $module->onclick_option_content['desactive'] : '' , @@ -821,13 +857,6 @@ class AdminModulesControllerCore extends AdminController 'text' => $this->translationsTab['Reset'], 'cond' => $module->id && $module->active, ), - 'configure-module' => array( - 'href' => self::$currentIndex.'&configure='.urlencode($module->name).'&token='.$this->token.'&tab_module='.$module->tab.'&module_name='.urlencode($module->name), - 'onclick' => $module->onclick_option && isset($module->onclick_option_content['configure']) ? $module->onclick_option_content['configure'] : '', - 'title' => '', - 'text' => $this->translationsTab['Configure'], - 'cond' => $module->id && isset($module->is_configurable) && $module->is_configurable, - ), 'delete-module' => array( 'href' => self::$currentIndex.'&delete='.urlencode($module->name).'&token='.$this->token.'&tab_module='.$module->tab.'&module_name='.urlencode($module->name), 'onclick' => $module->onclick_option && isset($module->onclick_option_content['delete']) ? $module->onclick_option_content['delete'] : 'return confirm(\''.$this->translationsTab['This action will permanently remove the module from the server. Are you sure you want to do this?'].'\');', @@ -843,15 +872,22 @@ class AdminModulesControllerCore extends AdminController { if ($output_type == 'link') $return .= ' - '.$option['text'].' + '.$option['text'].' '; else if ($output_type == 'select') - $return .= ''; + $return .= ''; } } if ($output_type == 'select') + { + if (!$module->id) + $return = ''.$return; + else + $return = ''.$return; $return = ''; + } + return $return; } @@ -1038,6 +1074,13 @@ class AdminModulesControllerCore extends AdminController // Browse modules list foreach ($modules as $km => $module) { + //if we are in favorites view we only display installed modules + if (Tools::getValue('select') == 'favorites' && !$module->id) + { + unset($modules[$km]); + continue; + } + // Upgrade Module process, init check if a module could be upgraded if (Module::initUpgradeModule($module)) { @@ -1161,7 +1204,7 @@ class AdminModulesControllerCore extends AdminController $smarty->assign($tpl_vars); } - public function fillModuleData(&$module, $output_type = 'link') + public function fillModuleData(&$module, $output_type = 'link', $back = null) { $obj = null; if ($module->onclick_option) @@ -1172,7 +1215,7 @@ class AdminModulesControllerCore extends AdminController $module->logo = 'logo.gif'; if (file_exists('../modules/'.$module->name.'/logo.png')) $module->logo = 'logo.png'; - $module->optionsHtml = $this->displayModuleOptions($module, $output_type); + $module->optionsHtml = $this->displayModuleOptions($module, $output_type, $back); $module->categoryName = (isset($this->list_modules_categories[$module->tab]['name']) ? $this->list_modules_categories[$module->tab]['name'] : $this->list_modules_categories['others']['name']); $module->options['install_url'] = self::$currentIndex.'&install='.urlencode($module->name).'&token='.$this->token.'&tab_module='.$module->tab.'&module_name='.$module->name.'&anchor=anchor'.ucfirst($module->name); $module->options['update_url'] = self::$currentIndex.'&update='.urlencode($module->name).'&token='.$this->token.'&tab_module='.$module->tab.'&module_name='.$module->name.'&anchor=anchor'.ucfirst($module->name);