diff --git a/admin-dev/tabs/AdminModulesPositions.php b/admin-dev/tabs/AdminModulesPositions.php deleted file mode 100644 index 9991ed4de..000000000 --- a/admin-dev/tabs/AdminModulesPositions.php +++ /dev/null @@ -1,508 +0,0 @@ - -* @copyright 2007-2011 PrestaShop SA -* @version Release: $Revision: 7466 $ -* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0) -* International Registered Trademark & Property of PrestaShop SA -*/ - -class AdminModulesPositions extends AdminTab -{ - private $displayKey = 0; - - public function postProcess() - { - // Getting key value for display - if (Tools::getValue('show_modules') AND strval(Tools::getValue('show_modules')) != 'all') - $this->displayKey = (int)(Tools::getValue('show_modules')); - - // Change position in hook - if (array_key_exists('changePosition', $_GET)) - { - if ($this->tabAccess['edit'] === '1') - { - $id_module = (int)(Tools::getValue('id_module')); - $id_hook = (int)(Tools::getValue('id_hook')); - $module = Module::getInstanceById($id_module); - if (Validate::isLoadedObject($module)) - { - $module->updatePosition($id_hook, (int)(Tools::getValue('direction'))); - Tools::redirectAdmin(self::$currentIndex.($this->displayKey ? '&show_modules='.$this->displayKey : '').'&token='.$this->token); - } - else - $this->_errors[] = Tools::displayError('module cannot be loaded'); - } - else - $this->_errors[] = Tools::displayError('You do not have permission to edit here.'); - } - - // Add new module in hook - elseif (Tools::isSubmit('submitAddToHook')) - { - if ($this->tabAccess['add'] === '1') - { - // Getting vars... - $id_module = (int)(Tools::getValue('id_module')); - $module = Module::getInstanceById($id_module); - $id_hook = (int)(Tools::getValue('id_hook')); - $hook = new Hook($id_hook); - - if (!$id_module OR !Validate::isLoadedObject($module)) - $this->_errors[] = Tools::displayError('module cannot be loaded'); - elseif (!$id_hook OR !Validate::isLoadedObject($hook)) - $this->_errors[] = Tools::displayError('Hook cannot be loaded.'); - elseif (Hook::getModulesFromHook($id_hook, $id_module)) - $this->_errors[] = Tools::displayError('This module is already transplanted to this hook.'); - elseif (!$module->isHookableOn($hook->name)) - $this->_errors[] = Tools::displayError('This module can\'t be transplanted to this hook.'); - // Adding vars... - else - { - if (!$module->registerHook($hook->name, Context::getContext()->shop->getListOfID())) - $this->_errors[] = Tools::displayError('An error occurred while transplanting module to hook.'); - else - { - $exceptions = Tools::getValue('exceptions'); - $exceptions = (isset($exceptions[0])) ? $exceptions[0] : array(); - $exceptions = explode(',', str_replace(' ', '', $exceptions)); - - foreach ($exceptions AS $except) - if (!Validate::isFileName($except)) - $this->_errors[] = Tools::displayError('No valid value for field exceptions'); - - if (!$this->_errors && !$module->registerExceptions($id_hook, $exceptions, Context::getContext()->shop->getListOfID())) - $this->_errors[] = Tools::displayError('An error occurred while transplanting module to hook.'); - } - - if (!$this->_errors) - Tools::redirectAdmin(self::$currentIndex.'&conf=16'.($this->displayKey ? '&show_modules='.$this->displayKey : '').'&token='.$this->token); - } - } - else - $this->_errors[] = Tools::displayError('You do not have permission to add here.'); - } - - // Edit module from hook - elseif (Tools::isSubmit('submitEditGraft')) - { - if ($this->tabAccess['add'] === '1') - { - // Getting vars... - $id_module = (int)(Tools::getValue('id_module')); - $module = Module::getInstanceById($id_module); - $id_hook = (int)(Tools::getValue('id_hook')); - $hook = new Hook($id_hook); - - if (!$id_module OR !Validate::isLoadedObject($module)) - $this->_errors[] = Tools::displayError('module cannot be loaded'); - elseif (!$id_hook OR !Validate::isLoadedObject($hook)) - $this->_errors[] = Tools::displayError('Hook cannot be loaded.'); - else - { - $exceptions = Tools::getValue('exceptions'); - if (is_array($exceptions)) - { - foreach ($exceptions as $id => $exception) - { - $exception = explode(',', str_replace(' ', '', $exception)); - - // Check files name - foreach ($exception AS $except) - if (!Validate::isFileName($except)) - $this->_errors[] = Tools::displayError('No valid value for field exceptions'); - - $exceptions[$id] = $exception; - } - - // Add files exceptions - if (!$module->editExceptions($id_hook, $exceptions)) - $this->_errors[] = Tools::displayError('An error occurred while transplanting module to hook.'); - - if (!$this->_errors) - Tools::redirectAdmin(self::$currentIndex.'&conf=16'.($this->displayKey ? '&show_modules='.$this->displayKey : '').'&token='.$this->token); - } - else - { - $exceptions = explode(',', str_replace(' ', '', $exceptions)); - - // Check files name - foreach ($exceptions AS $except) - if (!Validate::isFileName($except)) - $this->_errors[] = Tools::displayError('No valid value for field exceptions'); - - // Add files exceptions - if (!$module->editExceptions($id_hook, $exceptions, Context::getContext()->shop->getListOfID())) - $this->_errors[] = Tools::displayError('An error occurred while transplanting module to hook.'); - else - Tools::redirectAdmin(self::$currentIndex.'&conf=16'.($this->displayKey ? '&show_modules='.$this->displayKey : '').'&token='.$this->token); - } - } - } - else - $this->_errors[] = Tools::displayError('You do not have permission to add here.'); - } - - // Delete module from hook - elseif (array_key_exists('deleteGraft', $_GET)) - { - if ($this->tabAccess['delete'] === '1') - { - $id_module = (int)(Tools::getValue('id_module')); - $module = Module::getInstanceById($id_module); - $id_hook = (int)(Tools::getValue('id_hook')); - $hook = new Hook($id_hook); - if (!Validate::isLoadedObject($module)) - $this->_errors[] = Tools::displayError('module cannot be loaded'); - elseif (!$id_hook OR !Validate::isLoadedObject($hook)) - $this->_errors[] = Tools::displayError('Hook cannot be loaded.'); - else - { - if (!$module->unregisterHook($id_hook, Context::getContext()->shop->getListOfID()) OR !$module->unregisterExceptions($id_hook, Context::getContext()->shop->getListOfID())) - $this->_errors[] = Tools::displayError('An error occurred while deleting module from hook.'); - else - Tools::redirectAdmin(self::$currentIndex.'&conf=17'.($this->displayKey ? '&show_modules='.$this->displayKey : '').'&token='.$this->token); - } - } - else - $this->_errors[] = Tools::displayError('You do not have permission to delete here.'); - } - elseif (Tools::isSubmit('unhookform')) - { - if (!($unhooks = Tools::getValue('unhooks')) OR !is_array($unhooks)) - $this->_errors[] = Tools::displayError('Select a module to unhook.'); - else - { - foreach ($unhooks as $unhook) - { - $explode = explode('_', $unhook); - $id_hook = $explode[0]; - $id_module = $explode[1]; - $module = Module::getInstanceById((int)($id_module)); - $hook = new Hook((int)($id_hook)); - if (!Validate::isLoadedObject($module)) - $this->_errors[] = Tools::displayError('module cannot be loaded'); - elseif (!$id_hook OR !Validate::isLoadedObject($hook)) - $this->_errors[] = Tools::displayError('Hook cannot be loaded.'); - else - { - if (!$module->unregisterHook((int)($id_hook)) OR !$module->unregisterExceptions((int)($id_hook))) - $this->_errors[] = Tools::displayError('An error occurred while deleting module from hook.'); - } - } - if (!sizeof($this->_errors)) - Tools::redirectAdmin(self::$currentIndex.'&conf=17'.($this->displayKey ? '&show_modules='.$this->displayKey : '').'&token='.$this->token); - } - } - } - - public function display() - { - if (array_key_exists('addToHook', $_GET) OR array_key_exists('editGraft', $_GET) OR (Tools::isSubmit('submitAddToHook') AND $this->_errors)) - $this->displayForm(); - else - $this->displayList(); - } - - public function displayList() - { - $admin_dir = dirname($_SERVER['PHP_SELF']); - $admin_dir = substr($admin_dir, strrpos($admin_dir,'/') + 1); - - echo ' - - - - '; - echo ' '.$this->l('Transplant a module').'

'; - - // Print select list - echo ' -
- '.$this->l('Show').' : - -

-   -
- -
'.$this->l('Live edit').''; - if (Shop::isFeatureActive() && $this->context->shop->getContextType() != Shop::CONTEXT_SHOP) - echo '

'.$this->l('You have to select a shop to use live edit').'

'; - else - echo '

'.$this->l('By clicking here you will be redirected to the front office of your shop to move and delete modules directly.').'

-
- '.$this->l('Run LiveEdit').''; - echo '
'; - - // Print hook list - echo '
'; - $irow = 0; - $hooks = Hook::getHooks(!(int)(Tools::getValue('hook_position'))); - - echo '
'; - - $canMove = (Shop::isFeatureActive() && $this->context->shop->getContextType() != Shop::CONTEXT_SHOP) ? false : true; - if (!$canMove) - echo '
'.$this->l('If you want to order / move following data, please go in shop context (select a shop in shop list)').'
'; - foreach ($hooks AS $hook) - { - $modules = Hook::getModulesFromHook($hook['id_hook'], $this->displayKey); - - $nbModules = count($modules); - echo ' - - - '; - - // Print modules list - if ($nbModules) - { - $instances = array(); - foreach ($modules AS $module) - if ($tmpInstance = Module::getInstanceById((int)($module['id_module']))) - $instances[] = $tmpInstance; - foreach ($instances AS $position => $instance) - { - $position = $position + 1; - echo ' - '; - if (!$this->displayKey) - { - echo ' - - = 2) ? ' class="dragHandle"' : '').' id="td_'.$hook['id_hook'].'_'.$instance->id.'" width="40"> - '.(($canMove) ? ''.$this->l('Up').'
- '.$this->l('Down').'' : '').' - -
- - '; - } - } else - echo ''; - echo '
'.$hook['title'].' - '.$nbModules.' '.(($nbModules > 1) ? $this->l('modules') : $this->l('module')); - if ($nbModules && $canMove) - echo ''; - if (!empty($hook['description'])) - echo ' ['.$hook['description'].']'; - echo ' ('.$this->l('Technical name: ').$hook['name'].')
'.(int)($position).''; - echo ' - '.$this->l('Edit').' - '.$this->l('Delete').' - '; - echo ' -
'.$this->l('No module for this hook').'
'; - } - echo '
'; - } - - public function displayForm($isMainTab = true) - { - parent::displayForm(); - - $id_module = (int)(Tools::getValue('id_module')); - $id_hook = (int)(Tools::getValue('id_hook')); - if (Tools::isSubmit('editGraft')) - { - // Check auth for this page - if (!$id_module || !$id_hook) - Tools::redirectAdmin(self::$currentIndex . '&token='.$this->token); - - $sql = 'SELECT id_module - FROM '._DB_PREFIX_.'hook_module - WHERE id_module = '.$id_module.' - AND id_hook = '.$id_hook.' - AND id_shop IN('.implode(', ', Context::getContext()->shop->getListOfID()).')'; - if (!Db::getInstance()->getValue($sql)) - Tools::redirectAdmin(self::$currentIndex . '&token='.$this->token); - - $slModule = Module::getInstanceById($id_module); - $exceptsList = $slModule->getExceptions($id_hook, true); - $exceptsDiff = false; - $excepts = ''; - if ($exceptsList) - { - $first = current($exceptsList); - foreach ($exceptsList as $k => $v) - if (array_diff($v, $first) || array_diff($first, $v)) - $exceptsDiff = true; - - if (!$exceptsDiff) - $excepts = implode(', ', $first); - } - } - else - { - $exceptsDiff = false; - $exceptsList = Tools::getValue('exceptions', array(array())); - } - $modules = Module::getModulesInstalled(0); - - $instances = array(); - foreach ($modules AS $module) - if ($tmpInstance = Module::getInstanceById($module['id_module'])) - $instances[$tmpInstance->displayName] = $tmpInstance; - ksort($instances); - $modules = $instances; - $hooks = Hook::getHooks(0); - echo ' -
'; - if ($this->displayKey) - echo ''; - echo '
'.$this->l('Transplant a module').' - -
- * -
- -
- * -
'; - - echo << - // - -EOF; - - // Manage exceptions - if (!$exceptsDiff) - { - echo ' -
'; - $this->displayModuleExceptionList(array_shift($exceptsList), 0); - - echo $this->l('Please specify those files for which you do not want the module to be displayed').'.
- '.$this->l('Please type each filename separated by a comma').'. -

-
'; - } - else - { - echo ' -
'; - foreach ($exceptsList as $shopID => $fileList) - $this->displayModuleExceptionList($fileList, $shopID); - echo $this->l('Please specify those files for which you do not want the module to be displayed').'.
- '.$this->l('Please type each filename separated by a comma').'. -

-
'; - } - - - echo '
- '; - if (Tools::isSubmit('editGraft')) - { - echo ' - - '; - } - echo ' - -
-
* '.$this->l('Required field').'
-
-
'; - } - - public function displayModuleExceptionList($fileList, $shopID) - { - if (!is_array($fileList)) - $fileList = ($fileList) ? array($fileList) : array(); - - echo ''; - if ($shopID) - echo ' ('.Shop::getInstance($shopID)->name.')'; - echo '
-

'; - } -} diff --git a/admin-dev/themes/template/modules_positions/form.tpl b/admin-dev/themes/template/modules_positions/form.tpl new file mode 100644 index 000000000..3d7d6fd54 --- /dev/null +++ b/admin-dev/themes/template/modules_positions/form.tpl @@ -0,0 +1,113 @@ +{* +* 2007-2011 PrestaShop +* +* NOTICE OF LICENSE +* +* This source file is subject to the Academic Free License (AFL 3.0) +* that is bundled with this package in the file LICENSE.txt. +* It is also available through the world-wide-web at this URL: +* http://opensource.org/licenses/afl-3.0.php +* If you did not receive a copy of the license and are unable to +* obtain it through the world-wide-web, please send an email +* to license@prestashop.com so we can send you a copy immediately. +* +* DISCLAIMER +* +* Do not edit or add to this file if you wish to upgrade PrestaShop to newer +* versions in the future. If you wish to customize PrestaShop for your +* needs please refer to http://www.prestashop.com for more information. +* +* @author PrestaShop SA +* @copyright 2007-2011 PrestaShop SA +* @version Release: $Revision$ +* @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0) +* International Registered Trademark & Property of PrestaShop SA +*} + +
+{if $show_toolbar} + {include file="toolbar.tpl" toolbar_btn=$toolbar_btn} +
+

{block name=pageTitle} + {$title|default:' '} + {/block}

+
+{/if} +
+
+ {if $display_key} + + {/if} +
+ {l s='Transplant a module'} + +
+ * +
+ +
+ * +
+ + + + +
+ {if !$except_diff} + {$exception_list} + {else} + {foreach $exception_list_diff as $value} + {$value} + {/foreach} + {/if} + {l s='Please specify those files for which you do not want the module to be displayed'}.
+ {l s='Please type each filename separated by a comma'}. +

+
+ +
+ {if $edit_graft} + + + {/if} + +
+
* {l s='Required field'}
+
+
\ No newline at end of file diff --git a/admin-dev/themes/template/modules_positions/list_modules.tpl b/admin-dev/themes/template/modules_positions/list_modules.tpl new file mode 100644 index 000000000..25aee5993 --- /dev/null +++ b/admin-dev/themes/template/modules_positions/list_modules.tpl @@ -0,0 +1,115 @@ +{* +* 2007-2011 PrestaShop +* +* NOTICE OF LICENSE +* +* This source file is subject to the Academic Free License (AFL 3.0) +* that is bundled with this package in the file LICENSE.txt. +* It is also available through the world-wide-web at this URL: +* http://opensource.org/licenses/afl-3.0.php +* If you did not receive a copy of the license and are unable to +* obtain it through the world-wide-web, please send an email +* to license@prestashop.com so we can send you a copy immediately. +* +* DISCLAIMER +* +* Do not edit or add to this file if you wish to upgrade PrestaShop to newer +* versions in the future. If you wish to customize PrestaShop for your +* needs please refer to http://www.prestashop.com for more information. +* +* @author PrestaShop SA +* @copyright 2007-2011 PrestaShop SA +* @version Release: $Revision$ +* @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0) +* International Registered Trademark & Property of PrestaShop SA +*} + + + + {l s='Transplant a module'}

+ +
+ {l s='Show'} : + +

+   + +
+ +
{l s='Live edit'} +{if $live_edit} +

{l s='You have to select a shop to use live edit'}

+{else} +

{l s='By clicking here you will be redirected to the front office of your shop to move and delete modules directly.'}

+
+ {l s='Run LiveEdit'} +{/if} +
+ +
+
+
+ +{if !$can_move} +
{l s='If you want to order / move following data, please go in shop context (select a shop in shop list)'}
+{/if} +{foreach $hooks as $hook} + + + + {if $hook['module_count']} + {foreach $hook['modules'] as $position => $module} + + {if !$display_key} + + + + + + {/foreach} + {else} + + {/if} +
{$hook['title']} - {$hook['module_count']} {if $hook['module_count'] > 1}{l s='modules'}{else}{l s='module'}{/if} + {if $hook['module_count'] && $can_move} + + {/if} + {if !empty($hook['description'])} +  [{$hook['description']}] + {/if} + ({l s='Technical name: '}{$hook['name']})
{$module@iteration}= 2} class="dragHandle"{/if} id="td_{$hook['id_hook']}_{$module['instance']->id}" width="40"> + {if $can_move} + + {l s='Up'} +
+ + {l s='Down'} + + {/if} +
+ + {l s='Edit'} + + + {l s='Delete'} + + +
{l s='No module for this hook'}
+{/foreach} +
\ No newline at end of file diff --git a/classes/AdminController.php b/classes/AdminController.php index 016a94214..9e00615be 100644 --- a/classes/AdminController.php +++ b/classes/AdminController.php @@ -367,8 +367,8 @@ class AdminControllerCore extends Controller $token = Tools::getValue('token') ? Tools::getValue('token') : $this->token; // Sub included tab postProcessing - $this->includeSubTab('postProcess', array('status', 'submitAdd1', 'submitDel', 'delete', 'submitFilter', 'submitReset')); - + $this->includeSubTab('postProcess', array('status', 'submitAdd1', 'submitDel', 'delete', 'submitFilter', 'submitReset')); + if (!empty($this->action) && method_exists($this, 'process'.ucfirst(Tools::toCamelCase($this->action)))) $this->{'process'.Tools::toCamelCase($this->action)}($token); else if (method_exists($this, $this->action)) @@ -856,7 +856,7 @@ class AdminControllerCore extends Controller 'href' => '#', 'desc' => $this->l('Save') ); - + //no break case 'view': // Default cancel button - like old back link if (!isset($this->no_back) || $this->no_back == false) @@ -870,9 +870,9 @@ class AdminControllerCore extends Controller 'desc' => $this->l('Cancel') ); } - break; + break; case 'options': - break; + break; default: // list $this->toolbar_btn['new'] = array( 'href' => self::$currentIndex.'&add'.$this->table.'&token='.$this->token, diff --git a/controllers/admin/AdminModulesPositionsController.php b/controllers/admin/AdminModulesPositionsController.php new file mode 100644 index 000000000..f975cdb18 --- /dev/null +++ b/controllers/admin/AdminModulesPositionsController.php @@ -0,0 +1,374 @@ + +* @copyright 2007-2011 PrestaShop SA +* @version Release: $Revision: 7466 $ +* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0) +* International Registered Trademark & Property of PrestaShop SA +*/ + +class AdminModulesPositionsControllerCore extends AdminController +{ + private $displayKey = 0; + + public function postProcess() + { + // Getting key value for display + if (Tools::getValue('show_modules') AND strval(Tools::getValue('show_modules')) != 'all') + $this->displayKey = (int)(Tools::getValue('show_modules')); + + // Change position in hook + if (array_key_exists('changePosition', $_GET)) + { + if ($this->tabAccess['edit'] === '1') + { + $id_module = (int)(Tools::getValue('id_module')); + $id_hook = (int)(Tools::getValue('id_hook')); + $module = Module::getInstanceById($id_module); + if (Validate::isLoadedObject($module)) + { + $module->updatePosition($id_hook, (int)(Tools::getValue('direction'))); + Tools::redirectAdmin(self::$currentIndex.($this->displayKey ? '&show_modules='.$this->displayKey : '').'&token='.$this->token); + } + else + $this->_errors[] = Tools::displayError('module cannot be loaded'); + } + else + $this->_errors[] = Tools::displayError('You do not have permission to edit here.'); + } + + // Add new module in hook + elseif (Tools::isSubmit('submitAddToHook')) + { + if ($this->tabAccess['add'] === '1') + { + // Getting vars... + $id_module = (int)(Tools::getValue('id_module')); + $module = Module::getInstanceById($id_module); + $id_hook = (int)(Tools::getValue('id_hook')); + $hook = new Hook($id_hook); + + if (!$id_module OR !Validate::isLoadedObject($module)) + $this->_errors[] = Tools::displayError('module cannot be loaded'); + elseif (!$id_hook OR !Validate::isLoadedObject($hook)) + $this->_errors[] = Tools::displayError('Hook cannot be loaded.'); + elseif (Hook::getModulesFromHook($id_hook, $id_module)) + $this->_errors[] = Tools::displayError('This module is already transplanted to this hook.'); + elseif (!$module->isHookableOn($hook->name)) + $this->_errors[] = Tools::displayError('This module can\'t be transplanted to this hook.'); + // Adding vars... + else + { + if (!$module->registerHook($hook->name, Context::getContext()->shop->getListOfID())) + $this->_errors[] = Tools::displayError('An error occurred while transplanting module to hook.'); + else + { + $exceptions = Tools::getValue('exceptions'); + $exceptions = (isset($exceptions[0])) ? $exceptions[0] : array(); + $exceptions = explode(',', str_replace(' ', '', $exceptions)); + + foreach ($exceptions AS $except) + if (!Validate::isFileName($except)) + $this->_errors[] = Tools::displayError('No valid value for field exceptions'); + + if (!$this->_errors && !$module->registerExceptions($id_hook, $exceptions, Context::getContext()->shop->getListOfID())) + $this->_errors[] = Tools::displayError('An error occurred while transplanting module to hook.'); + } + + if (!$this->_errors) + Tools::redirectAdmin(self::$currentIndex.'&conf=16'.($this->displayKey ? '&show_modules='.$this->displayKey : '').'&token='.$this->token); + } + } + else + $this->_errors[] = Tools::displayError('You do not have permission to add here.'); + } + + // Edit module from hook + elseif (Tools::isSubmit('submitEditGraft')) + { + if ($this->tabAccess['add'] === '1') + { + // Getting vars... + $id_module = (int)(Tools::getValue('id_module')); + $module = Module::getInstanceById($id_module); + $id_hook = (int)(Tools::getValue('id_hook')); + $hook = new Hook($id_hook); + + if (!$id_module OR !Validate::isLoadedObject($module)) + $this->_errors[] = Tools::displayError('module cannot be loaded'); + elseif (!$id_hook OR !Validate::isLoadedObject($hook)) + $this->_errors[] = Tools::displayError('Hook cannot be loaded.'); + else + { + $exceptions = Tools::getValue('exceptions'); + if (is_array($exceptions)) + { + foreach ($exceptions as $id => $exception) + { + $exception = explode(',', str_replace(' ', '', $exception)); + + // Check files name + foreach ($exception AS $except) + if (!Validate::isFileName($except)) + $this->_errors[] = Tools::displayError('No valid value for field exceptions'); + + $exceptions[$id] = $exception; + } + + // Add files exceptions + if (!$module->editExceptions($id_hook, $exceptions)) + $this->_errors[] = Tools::displayError('An error occurred while transplanting module to hook.'); + + if (!$this->_errors) + Tools::redirectAdmin(self::$currentIndex.'&conf=16'.($this->displayKey ? '&show_modules='.$this->displayKey : '').'&token='.$this->token); + } + else + { + $exceptions = explode(',', str_replace(' ', '', $exceptions)); + + // Check files name + foreach ($exceptions AS $except) + if (!Validate::isFileName($except)) + $this->_errors[] = Tools::displayError('No valid value for field exceptions'); + + // Add files exceptions + if (!$module->editExceptions($id_hook, $exceptions, Context::getContext()->shop->getListOfID())) + $this->_errors[] = Tools::displayError('An error occurred while transplanting module to hook.'); + else + Tools::redirectAdmin(self::$currentIndex.'&conf=16'.($this->displayKey ? '&show_modules='.$this->displayKey : '').'&token='.$this->token); + } + } + } + else + $this->_errors[] = Tools::displayError('You do not have permission to add here.'); + } + + // Delete module from hook + elseif (array_key_exists('deleteGraft', $_GET)) + { + if ($this->tabAccess['delete'] === '1') + { + $id_module = (int)(Tools::getValue('id_module')); + $module = Module::getInstanceById($id_module); + $id_hook = (int)(Tools::getValue('id_hook')); + $hook = new Hook($id_hook); + if (!Validate::isLoadedObject($module)) + $this->_errors[] = Tools::displayError('module cannot be loaded'); + elseif (!$id_hook OR !Validate::isLoadedObject($hook)) + $this->_errors[] = Tools::displayError('Hook cannot be loaded.'); + else + { + if (!$module->unregisterHook($id_hook, Context::getContext()->shop->getListOfID()) OR !$module->unregisterExceptions($id_hook, Context::getContext()->shop->getListOfID())) + $this->_errors[] = Tools::displayError('An error occurred while deleting module from hook.'); + else + Tools::redirectAdmin(self::$currentIndex.'&conf=17'.($this->displayKey ? '&show_modules='.$this->displayKey : '').'&token='.$this->token); + } + } + else + $this->_errors[] = Tools::displayError('You do not have permission to delete here.'); + } + elseif (Tools::isSubmit('unhookform')) + { + if (!($unhooks = Tools::getValue('unhooks')) OR !is_array($unhooks)) + $this->_errors[] = Tools::displayError('Select a module to unhook.'); + else + { + foreach ($unhooks as $unhook) + { + $explode = explode('_', $unhook); + $id_hook = $explode[0]; + $id_module = $explode[1]; + $module = Module::getInstanceById((int)($id_module)); + $hook = new Hook((int)($id_hook)); + if (!Validate::isLoadedObject($module)) + $this->_errors[] = Tools::displayError('module cannot be loaded'); + elseif (!$id_hook OR !Validate::isLoadedObject($hook)) + $this->_errors[] = Tools::displayError('Hook cannot be loaded.'); + else + { + if (!$module->unregisterHook((int)($id_hook)) OR !$module->unregisterExceptions((int)($id_hook))) + $this->_errors[] = Tools::displayError('An error occurred while deleting module from hook.'); + } + } + if (!sizeof($this->_errors)) + Tools::redirectAdmin(self::$currentIndex.'&conf=17'.($this->displayKey ? '&show_modules='.$this->displayKey : '').'&token='.$this->token); + } + } + } + + public function initContent() + { + if (array_key_exists('addToHook', $_GET) OR array_key_exists('editGraft', $_GET) OR (Tools::isSubmit('submitAddToHook') AND $this->_errors)) + { + $this->display = 'edit'; + $this->content .= $this->initForm(); + } + else + $this->content .= $this->initMain(); + + $this->context->smarty->assign(array('content' => $this->content)); + } + + public function initMain() + { + $admin_dir = basename(_PS_ADMIN_DIR_); + $modules = Module::getModulesInstalled(); + + $assoc_modules_id = array(); + foreach ($modules as $module) + if ($tmpInstance = Module::getInstanceById((int)$module['id_module'])) + { + // We want to be able to sort modules by display name + $module_instances[$tmpInstance->displayName] = $tmpInstance; + // But we also want to associate hooks to modules using the modules IDs + $assoc_modules_id[(int)$module['id_module']] = $tmpInstance->displayName; + } + ksort($module_instances); + $hooks = Hook::getHooks(!(int)(Tools::getValue('hook_position'))); + foreach ($hooks as $key => $hook) + { + // Get all modules for this hook or only the filtered module + $hooks[$key]['modules'] = Hook::getModulesFromHook($hook['id_hook'], $this->displayKey); + $hooks[$key]['module_count'] = count($hooks[$key]['modules']); + // If modules were found, link to the previously created Module instances + if (is_array($hooks[$key]['modules']) && !empty($hooks[$key]['modules'])) + foreach($hooks[$key]['modules'] as $module_key => $module) + $hooks[$key]['modules'][$module_key]['instance'] = $module_instances[$assoc_modules_id[$module['id_module']]]; + } + + $this->addJqueryPlugin("tablednd"); + + $this->context->smarty->assign(array( + 'url_transplant' => self::$currentIndex.'&addToHook'.($this->displayKey ? '&show_modules='.$this->displayKey : '').'&token='.$this->token, + 'token' => $this->token, + 'url_show_modules' => self::$currentIndex.'&token='.$this->token.'&show_modules=', + 'modules' => $module_instances, + 'url_show_invisible' => self::$currentIndex.'&token='.$this->token.'&show_modules='.(int)(Tools::getValue('show_modules')).'&hook_position=', + 'hook_position' => Tools::getValue('hook_position'), + 'live_edit' => Shop::isFeatureActive() && $this->context->shop->getContextType() != Shop::CONTEXT_SHOP, + 'url_live_edit' => $this->context->link->getPageLink('index', false, null, 'live_edit&ad='.$admin_dir.'&liveToken='.sha1($admin_dir._COOKIE_KEY_).((Shop::isFeatureActive()) ? '&id_shop='.Context::getContext()->shop->getID() : '')), + 'display_key' => $this->displayKey, + 'hooks' => $hooks, + 'url_submit' => self::$currentIndex.'&token='.$this->token, + 'can_move' => (Shop::isFeatureActive() && $this->context->shop->getContextType() != Shop::CONTEXT_SHOP) ? false : true, + )); + + return $this->context->smarty->fetch('modules_positions/list_modules.tpl'); + } + + public function initForm() + { + // toolbar (save, cancel, new, ..) + $this->initToolbar(); + $id_module = (int)(Tools::getValue('id_module')); + $id_hook = (int)(Tools::getValue('id_hook')); + if (Tools::isSubmit('editGraft')) + { + // Check auth for this page + if (!$id_module || !$id_hook) + Tools::redirectAdmin(self::$currentIndex . '&token='.$this->token); + + $sql = 'SELECT id_module + FROM '._DB_PREFIX_.'hook_module + WHERE id_module = '.$id_module.' + AND id_hook = '.$id_hook.' + AND id_shop IN('.implode(', ', Context::getContext()->shop->getListOfID()).')'; + if (!Db::getInstance()->getValue($sql)) + Tools::redirectAdmin(self::$currentIndex . '&token='.$this->token); + + $slModule = Module::getInstanceById($id_module); + $exceptsList = $slModule->getExceptions($id_hook, true); + $exceptsDiff = false; + $excepts = ''; + if ($exceptsList) + { + $first = current($exceptsList); + foreach ($exceptsList as $k => $v) + if (array_diff($v, $first) || array_diff($first, $v)) + $exceptsDiff = true; + + if (!$exceptsDiff) + $excepts = implode(', ', $first); + } + } + else + { + $exceptsDiff = false; + $exceptsList = Tools::getValue('exceptions', array(array())); + } + $modules = Module::getModulesInstalled(0); + + $instances = array(); + foreach ($modules AS $module) + if ($tmpInstance = Module::getInstanceById($module['id_module'])) + $instances[$tmpInstance->displayName] = $tmpInstance; + ksort($instances); + $modules = $instances; + $hooks = Hook::getHooks(0); + + $exception_list_diff = array(); + foreach ($exceptsList as $shopID => $fileList) + $exception_list_diff[] = $this->displayModuleExceptionList($fileList, $shopID); + + $tpl = $this->context->smarty->createTemplate('modules_positions/form.tpl'); + $tpl->assign(array( + 'url_submit' => self::$currentIndex.'&token='.$this->token, + 'edit_graft' => Tools::isSubmit('editGraft'), + 'id_module' => (int)Tools::getValue('id_module'), + 'id_hook' => (int)Tools::getValue('id_hook'), + 'show_modules' => Tools::getValue('show_modules'), + 'hooks' => $hooks, + 'exception_list' => $this->displayModuleExceptionList(array_shift($exceptsList), 0), + 'exception_list_diff' => $exception_list_diff, + 'except_diff' => isset($exceptsDiff) ? $exceptsDiff : null, + 'display_key' => $this->displayKey, + 'modules' => $modules, + 'show_toolbar' => true, + 'toolbar_btn' => $this->toolbar_btn, + 'table' => 'hook_module', + )); + + return $tpl->fetch(); + } + + public function displayModuleExceptionList($fileList, $shopID) + { + if (!is_array($fileList)) + $fileList = ($fileList) ? array($fileList) : array(); + + $content = ''; + if ($shopID) + $content .= ' ('.Shop::getInstance($shopID)->name.')'; + $content .= '
+

'; + + return $content; + } +}