From 49058ec658a24652dd6c5dc9b19da847e28f10ec Mon Sep 17 00:00:00 2001 From: vAugagneur Date: Fri, 4 Nov 2011 15:16:10 +0000 Subject: [PATCH] //split adminController postProcess --- classes/AdminController.php | 826 ++++++++++++++++++------------------ 1 file changed, 408 insertions(+), 418 deletions(-) diff --git a/classes/AdminController.php b/classes/AdminController.php index b67d8de7b..a7399e03b 100644 --- a/classes/AdminController.php +++ b/classes/AdminController.php @@ -340,296 +340,12 @@ class AdminControllerCore extends Controller // Sub included tab postProcessing $this->includeSubTab('postProcess', array('status', 'submitAdd1', 'submitDel', 'delete', 'submitFilter', 'submitReset')); - - switch ($this->action) - { - /* Delete object image */ - case 'delete_image': - if (Validate::isLoadedObject($object = $this->loadObject())) - if (($object->deleteImage())) - { - $redirect = self::$currentIndex.'&add'.$this->table.'&'.$this->identifier.'='.Tools::getValue($this->identifier).'&conf=7&token='.$token; - if (!$this->ajax) - Tools::redirectAdmin($redirect); - else - $this->content = 'ok'; - } - $this->_errors[] = Tools::displayError('An error occurred during image deletion (cannot load object).'); - break; - /* Delete object */ - case 'delete': - if (Validate::isLoadedObject($object = $this->loadObject()) && isset($this->fieldImageSettings)) - { - // check if request at least one object with noZeroObject - if (isset($object->noZeroObject) && count(call_user_func(array($this->className, $object->noZeroObject))) <= 1) - { - $this->_errors[] = Tools::displayError('You need at least one object.'). - ' '.$this->table.'
'. - Tools::displayError('You cannot delete all of the items.'); - } - else - { - if ($this->deleted) - { - $object->deleteImage(); - $object->deleted = 1; - if ($object->update()) - Tools::redirectAdmin(self::$currentIndex.'&conf=1&token='.$token); - } - else if ($object->delete()) - { - if (method_exists($object, 'cleanPositions')) - $object->cleanPositions(); - Tools::redirectAdmin(self::$currentIndex.'&conf=1&token='.$token); - } - $this->_errors[] = Tools::displayError('An error occurred during deletion.'); - } - } - else - { - $this->_errors[] = Tools::displayError('An error occurred while deleting object.'). - ' '.$this->table.' '. - Tools::displayError('(cannot load object)'); - } - break; - - /* Change object statuts (active, inactive) */ - case 'status': - if (Validate::isLoadedObject($object = $this->loadObject())) - { - if ($object->toggleStatus()) - { - $id_category = (($id_category = (int)Tools::getValue('id_category')) && Tools::getValue('id_product')) ? '&id_category='.$id_category : ''; - Tools::redirectAdmin(self::$currentIndex.'&conf=5'.$id_category.'&token='.$token); - } - else - $this->_errors[] = Tools::displayError('An error occurred while updating status.'); - } - else - $this->_errors[] = Tools::displayError('An error occurred while updating status for object.'). - ' '.$this->table.' '. - Tools::displayError('(cannot load object)'); - break; - - /* Move an object */ - case 'position': - if (!Validate::isLoadedObject($object = $this->loadObject())) - { - $this->_errors[] = Tools::displayError('An error occurred while updating status for object.'). - ' '.$this->table.' '.Tools::displayError('(cannot load object)'); - } - else if (!$object->updatePosition((int)Tools::getValue('way'), (int)Tools::getValue('position'))) - $this->_errors[] = Tools::displayError('Failed to update the position.'); - else - { - $id_identifier_str = ($id_identifier = (int)Tools::getValue($this->identifier)) ? '&'.$this->identifier.'='.$id_identifier : ''; - $redirect = self::$currentIndex.'&'.$this->table.'Orderby=position&'.$this->table.'Orderway=asc&conf=5'.$id_identifier_str.'&token='.$token; - Tools::redirectAdmin($redirect); - } - break; - - /* Delete multiple objects */ - case 'multiple_delete': - if (isset($_POST[$this->table.'Box'])) - { - $object = new $this->className(); - - // Check if all object will be deleted - $count = count(call_user_func(array($this->className, $object->noZeroObject))); - - if (isset($object->noZeroObject) && $count <= 1 || count($_POST[$this->table.'Box']) == $count) - $this->_errors[] = Tools::displayError('You need at least one object.'). - ' '.$this->table.'
'. - Tools::displayError('You cannot delete all of the items.'); - else - { - $result = true; - if ($this->deleted) - { - foreach (Tools::getValue($this->table.'Box') as $id) - { - $to_delete = new $this->className($id); - $to_delete->deleted = 1; - $result = $result && $to_delete->update(); - } - } - else - $result = $object->deleteSelection(Tools::getValue($this->table.'Box')); - - if ($result) - Tools::redirectAdmin(self::$currentIndex.'&conf=2&token='.$token); - $this->_errors[] = Tools::displayError('An error occurred while deleting selection.'); - } - } - else - $this->_errors[] = Tools::displayError('You must select at least one element to delete.'); - break; - - /* Create or update an object */ - case 'save': - /* Checking fields validity */ - $this->validateRules(); - if (!count($this->_errors)) - { - $id = (int)Tools::getValue($this->identifier); - - /* Object update */ - if (isset($id) && !empty($id)) - { - if ($this->tabAccess['edit'] === '1' || ( - $this->table == 'employee' && - $this->context->employee->id == Tools::getValue('id_employee') && - Tools::isSubmit('updateemployee') - )) - { - $object = new $this->className($id); - if (Validate::isLoadedObject($object)) - { - /* Specific to objects which must not be deleted */ - if ($this->deleted && $this->beforeDelete($object)) - { - // Create new one with old objet values - $object_new = new $this->className($object->id); - $object_new->id = null; - $object_new->date_add = ''; - $object_new->date_upd = ''; - - // Update old object to deleted - $object->deleted = 1; - $object->update(); - - // Update new object with post values - $this->copyFromPost($object_new, $this->table); - $result = $object_new->add(); - if (Validate::isLoadedObject($object_new)) - $this->afterDelete($object_new, $object->id); - } - else - { - $this->copyFromPost($object, $this->table); - $result = $object->update(); - $this->afterUpdate($object); - } - - if ($object->id) - $this->updateAssoShop($object->id); - - if (!$result) - { - $this->_errors[] = Tools::displayError('An error occurred while updating object.'). - ' '.$this->table.' ('.Db::getInstance()->getMsgError().')'; - } - else if ($this->postImage($object->id) && !count($this->_errors)) - { - $parent_id = (int)Tools::getValue('id_parent', 1); - // Specific back redirect - if ($back = Tools::getValue('back')) - Tools::redirectAdmin(urldecode($back).'&conf=4'); - // Specific scene feature - if (Tools::getValue('stay_here') == 'on' || Tools::getValue('stay_here') == 'true' || Tools::getValue('stay_here') == '1') - Tools::redirectAdmin(self::$currentIndex.'&'.$this->identifier.'='.$object->id.'&conf=4&updatescene&token='.$token); - // Save and stay on same form - if (Tools::isSubmit('submitAdd'.$this->table.'AndStay')) - Tools::redirectAdmin(self::$currentIndex.'&'.$this->identifier.'='.$object->id.'&conf=4&update'.$this->table.'&token='.$token); - // Save and back to parent - if (Tools::isSubmit('submitAdd'.$this->table.'AndBackToParent')) - Tools::redirectAdmin(self::$currentIndex.'&'.$this->identifier.'='.$parent_id.'&conf=4&token='.$token); - // Default behavior (save and back) - Tools::redirectAdmin(self::$currentIndex.($parent_id ? '&'.$this->identifier.'='.$object->id : '').'&conf=4&token='.$token); - } - } - else - $this->_errors[] = Tools::displayError('An error occurred while updating object.'). - ' '.$this->table.' '.Tools::displayError('(cannot load object)'); - } - else - $this->_errors[] = Tools::displayError('You do not have permission to edit here.'); - } - - /* Object creation */ - else - { - if ($this->tabAccess['add'] === '1') - { - $object = new $this->className(); - $this->copyFromPost($object, $this->table); - if (!$object->add()) - { - $this->_errors[] = Tools::displayError('An error occurred while creating object.'). - ' '.$this->table.' ('.Db::getInstance()->getMsgError().')'; - } - /* voluntary do affectation here */ - else if (($_POST[$this->identifier] = $object->id) && $this->postImage($object->id) && !count($this->_errors) && $this->_redirect) - { - $parent_id = (int)Tools::getValue('id_parent', 1); - $this->afterAdd($object); - $this->updateAssoShop($object->id); - // Save and stay on same form - if (Tools::isSubmit('submitAdd'.$this->table.'AndStay')) - Tools::redirectAdmin(self::$currentIndex.'&'.$this->identifier.'='.$object->id.'&conf=3&update'.$this->table.'&token='.$token); - // Save and back to parent - if (Tools::isSubmit('submitAdd'.$this->table.'AndBackToParent')) - Tools::redirectAdmin(self::$currentIndex.'&'.$this->identifier.'='.$parent_id.'&conf=3&token='.$token); - // Default behavior (save and back) - Tools::redirectAdmin(self::$currentIndex.($parent_id ? '&'.$this->identifier.'='.$object->id : '').'&conf=3&token='.$token); - } - } - else - $this->_errors[] = Tools::displayError('You do not have permission to add here.'); - } - } - $this->_errors = array_unique($this->_errors); - break; - - /* Cancel all filters for this tab */ - case 'reset_filters': - $filters = $this->context->cookie->getFamily($this->table.'Filter_'); - - foreach ($filters as $cookie_key => $filter) - if (strncmp($cookie_key, $this->table.'Filter_', 7 + Tools::strlen($this->table)) == 0) - { - $key = substr($cookie_key, 7 + Tools::strlen($this->table)); - /* Table alias could be specified using a ! eg. alias!field */ - $tmp_tab = explode('!', $key); - $key = (count($tmp_tab) > 1 ? $tmp_tab[1] : $tmp_tab[0]); - - if (array_key_exists($key, $this->fieldsDisplay)) - unset($this->context->cookie->$cookie_key); - } - - if (isset($this->context->cookie->{'submitFilter'.$this->table})) - unset($this->context->cookie->{'submitFilter'.$this->table}); - - if (isset($this->context->cookie->{$this->table.'Orderby'})) - unset($this->context->cookie->{$this->table.'Orderby'}); - - if (isset($this->context->cookie->{$this->table.'Orderway'})) - unset($this->context->cookie->{$this->table.'Orderway'}); - - unset($_POST); - $this->filter = false; - break; - - /* Submit options list */ - case 'update_options': - $this->updateOptions($token); - break; - - case 'update_fields': - if (!is_array($fields = Tools::getValue('fieldsBox'))) - $fields = array(); - - $object = new $this->className(); - if (!$object->addFieldsRequiredDatabase($fields)) - $this->_errors[] = Tools::displayError('Error in updating required fields'); - else - Tools::redirectAdmin(self::$currentIndex.'&conf=4&token='.$token); - break; - - default: - if (method_exists($this, $this->action)) - call_user_func(array($this, $this->action), $this->boxes); - } + + 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)) + call_user_func(array($this, $this->action), $this->boxes); + /* Manage list filtering */ if ($this->filter) { @@ -697,6 +413,402 @@ class AdminControllerCore extends Controller } } } + + /** + * Object Delete images + * + * @param string $token + */ + public function processDeleteImage($token) + { + if (Validate::isLoadedObject($object = $this->loadObject())) + { + if (($object->deleteImage())) + { + $redirect = self::$currentIndex.'&add'.$this->table.'&'.$this->identifier.'='.Tools::getValue($this->identifier).'&conf=7&token='.$token; + if (!$this->ajax) + Tools::redirectAdmin($redirect); + else + $this->content = 'ok'; + } + } + $this->_errors[] = Tools::displayError('An error occurred during image deletion (cannot load object).'); + } + + /** + * Object Delete + * + * @param string $token + */ + public function processDelete($token) + { + if (Validate::isLoadedObject($object = $this->loadObject()) && isset($this->fieldImageSettings)) + { + // check if request at least one object with noZeroObject + if (isset($object->noZeroObject) && count(call_user_func(array($this->className, $object->noZeroObject))) <= 1) + { + $this->_errors[] = Tools::displayError('You need at least one object.'). + ' '.$this->table.'
'. + Tools::displayError('You cannot delete all of the items.'); + } + else + { + if ($this->deleted) + { + $object->deleteImage(); + $object->deleted = 1; + if ($object->update()) + Tools::redirectAdmin(self::$currentIndex.'&conf=1&token='.$token); + } + else if ($object->delete()) + { + if (method_exists($object, 'cleanPositions')) + $object->cleanPositions(); + Tools::redirectAdmin(self::$currentIndex.'&conf=1&token='.$token); + } + $this->_errors[] = Tools::displayError('An error occurred during deletion.'); + } + } + else + { + $this->_errors[] = Tools::displayError('An error occurred while deleting object.'). + ' '.$this->table.' '. + Tools::displayError('(cannot load object)'); + } + } + + /** + * Object update and creation + * TODO: split processAdd and processUpdate + * + * @param string $token + */ + public function processSave($token) + { + /* Checking fields validity */ + $this->validateRules(); + if (!count($this->_errors)) + { + $id = (int)Tools::getValue($this->identifier); + + /* Object update */ + if (isset($id) && !empty($id)) + { + if ($this->tabAccess['edit'] === '1' || ( + $this->table == 'employee' && + $this->context->employee->id == Tools::getValue('id_employee') && + Tools::isSubmit('updateemployee') + )) + { + $object = new $this->className($id); + if (Validate::isLoadedObject($object)) + { + /* Specific to objects which must not be deleted */ + if ($this->deleted && $this->beforeDelete($object)) + { + // Create new one with old objet values + $object_new = new $this->className($object->id); + $object_new->id = null; + $object_new->date_add = ''; + $object_new->date_upd = ''; + + // Update old object to deleted + $object->deleted = 1; + $object->update(); + + // Update new object with post values + $this->copyFromPost($object_new, $this->table); + $result = $object_new->add(); + if (Validate::isLoadedObject($object_new)) + $this->afterDelete($object_new, $object->id); + } + else + { + $this->copyFromPost($object, $this->table); + $result = $object->update(); + $this->afterUpdate($object); + } + + if ($object->id) + $this->updateAssoShop($object->id); + + if (!$result) + { + $this->_errors[] = Tools::displayError('An error occurred while updating object.'). + ' '.$this->table.' ('.Db::getInstance()->getMsgError().')'; + } + else if ($this->postImage($object->id) && !count($this->_errors)) + { + $parent_id = (int)Tools::getValue('id_parent', 1); + // Specific back redirect + if ($back = Tools::getValue('back')) + Tools::redirectAdmin(urldecode($back).'&conf=4'); + // Specific scene feature + if (Tools::getValue('stay_here') == 'on' || Tools::getValue('stay_here') == 'true' || Tools::getValue('stay_here') == '1') + Tools::redirectAdmin(self::$currentIndex.'&'.$this->identifier.'='.$object->id.'&conf=4&updatescene&token='.$token); + // Save and stay on same form + if (Tools::isSubmit('submitAdd'.$this->table.'AndStay')) + Tools::redirectAdmin(self::$currentIndex.'&'.$this->identifier.'='.$object->id.'&conf=4&update'.$this->table.'&token='.$token); + // Save and back to parent + if (Tools::isSubmit('submitAdd'.$this->table.'AndBackToParent')) + Tools::redirectAdmin(self::$currentIndex.'&'.$this->identifier.'='.$parent_id.'&conf=4&token='.$token); + // Default behavior (save and back) + Tools::redirectAdmin(self::$currentIndex.($parent_id ? '&'.$this->identifier.'='.$object->id : '').'&conf=4&token='.$token); + } + } + else + $this->_errors[] = Tools::displayError('An error occurred while updating object.'). + ' '.$this->table.' '.Tools::displayError('(cannot load object)'); + } + else + $this->_errors[] = Tools::displayError('You do not have permission to edit here.'); + } + + /* Object creation */ + else + { + if ($this->tabAccess['add'] === '1') + { + $object = new $this->className(); + $this->copyFromPost($object, $this->table); + if (!$object->add()) + { + $this->_errors[] = Tools::displayError('An error occurred while creating object.'). + ' '.$this->table.' ('.Db::getInstance()->getMsgError().')'; + } + /* voluntary do affectation here */ + else if (($_POST[$this->identifier] = $object->id) && $this->postImage($object->id) && !count($this->_errors) && $this->_redirect) + { + $parent_id = (int)Tools::getValue('id_parent', 1); + $this->afterAdd($object); + $this->updateAssoShop($object->id); + // Save and stay on same form + if (Tools::isSubmit('submitAdd'.$this->table.'AndStay')) + Tools::redirectAdmin(self::$currentIndex.'&'.$this->identifier.'='.$object->id.'&conf=3&update'.$this->table.'&token='.$token); + // Save and back to parent + if (Tools::isSubmit('submitAdd'.$this->table.'AndBackToParent')) + Tools::redirectAdmin(self::$currentIndex.'&'.$this->identifier.'='.$parent_id.'&conf=3&token='.$token); + // Default behavior (save and back) + Tools::redirectAdmin(self::$currentIndex.($parent_id ? '&'.$this->identifier.'='.$object->id : '').'&conf=3&token='.$token); + } + } + else + $this->_errors[] = Tools::displayError('You do not have permission to add here.'); + } + } + $this->_errors = array_unique($this->_errors); + } + + /** + * Change object required fields + * + * @param string $token + */ + public function processUpdateFields($token) + { + if (!is_array($fields = Tools::getValue('fieldsBox'))) + $fields = array(); + + $object = new $this->className(); + if (!$object->addFieldsRequiredDatabase($fields)) + $this->_errors[] = Tools::displayError('Error in updating required fields'); + else + Tools::redirectAdmin(self::$currentIndex.'&conf=4&token='.$token); + } + + /** + * Change object statuts (active, inactive) + * + * @param string $token + */ + public function processStatus($token) + { + if (Validate::isLoadedObject($object = $this->loadObject())) + { + if ($object->toggleStatus()) + { + $id_category = (($id_category = (int)Tools::getValue('id_category')) && Tools::getValue('id_product')) ? '&id_category='.$id_category : ''; + Tools::redirectAdmin(self::$currentIndex.'&conf=5'.$id_category.'&token='.$token); + } + else + $this->_errors[] = Tools::displayError('An error occurred while updating status.'); + } + else + $this->_errors[] = Tools::displayError('An error occurred while updating status for object.'). + ' '.$this->table.' '. + Tools::displayError('(cannot load object)'); + } + + /** + * Change object position + * + * @param string $token + */ + public function processPosition($token) + { + if (!Validate::isLoadedObject($object = $this->loadObject())) + { + $this->_errors[] = Tools::displayError('An error occurred while updating status for object.'). + ' '.$this->table.' '.Tools::displayError('(cannot load object)'); + } + else if (!$object->updatePosition((int)Tools::getValue('way'), (int)Tools::getValue('position'))) + $this->_errors[] = Tools::displayError('Failed to update the position.'); + else + { + $id_identifier_str = ($id_identifier = (int)Tools::getValue($this->identifier)) ? '&'.$this->identifier.'='.$id_identifier : ''; + $redirect = self::$currentIndex.'&'.$this->table.'Orderby=position&'.$this->table.'Orderway=asc&conf=5'.$id_identifier_str.'&token='.$token; + Tools::redirectAdmin($redirect); + } + } + + /** + * Cancel all filters for this tab + * + * @param string $token + */ + public function processResetFilters() + { + $filters = $this->context->cookie->getFamily($this->table.'Filter_'); + + foreach ($filters as $cookie_key => $filter) + if (strncmp($cookie_key, $this->table.'Filter_', 7 + Tools::strlen($this->table)) == 0) + { + $key = substr($cookie_key, 7 + Tools::strlen($this->table)); + /* Table alias could be specified using a ! eg. alias!field */ + $tmp_tab = explode('!', $key); + $key = (count($tmp_tab) > 1 ? $tmp_tab[1] : $tmp_tab[0]); + + if (array_key_exists($key, $this->fieldsDisplay)) + unset($this->context->cookie->$cookie_key); + } + + if (isset($this->context->cookie->{'submitFilter'.$this->table})) + unset($this->context->cookie->{'submitFilter'.$this->table}); + + if (isset($this->context->cookie->{$this->table.'Orderby'})) + unset($this->context->cookie->{$this->table.'Orderby'}); + + if (isset($this->context->cookie->{$this->table.'Orderway'})) + unset($this->context->cookie->{$this->table.'Orderway'}); + + unset($_POST); + $this->filter = false; + } + + /** + * Update options and preferences + * + * @param string $token + */ + protected function processUpdateOptions($token) + { + if ($this->tabAccess['edit'] === '1') + { + $this->beforeUpdateOptions(); + + $languages = Language::getLanguages(false); + + foreach ($this->options as $category => $category_data) + { + $fields = $category_data['fields']; + + foreach ($fields as $field => $values) + if (isset($values['type']) && $values['type'] == 'selectLang') + { + foreach ($languages as $lang) + if (Tools::getValue($field.'_'.strtoupper($lang['iso_code']))) + $fields[$field.'_'.strtoupper($lang['iso_code'])] = array( + 'type' => 'select', + 'cast' => 'strval', + 'identifier' => 'mode', + 'list' => $values['list'] + ); + } + + /* Check required fields */ + foreach ($fields as $field => $values) + if (isset($values['required']) && $values['required'] && !isset($_POST['configUseDefault'][$field])) + if (isset($values['type']) && $values['type'] == 'textLang') + { + foreach ($languages as $language) + if (($value = Tools::getValue($field.'_'.$language['id_lang'])) == false && (string)$value != '0') + $this->_errors[] = Tools::displayError('field').' '.$values['title'].' '.Tools::displayError('is required.'); + } + else if (($value = Tools::getValue($field)) == false && (string)$value != '0') + $this->_errors[] = Tools::displayError('field').' '.$values['title'].' '.Tools::displayError('is required.'); + + /* Check fields validity */ + foreach ($fields as $field => $values) + if (isset($values['type']) && $values['type'] == 'textLang') + { + foreach ($languages as $language) + if (Tools::getValue($field.'_'.$language['id_lang']) && isset($values['validation'])) + if (!Validate::$values['validation'](Tools::getValue($field.'_'.$language['id_lang']))) + $this->_errors[] = Tools::displayError('field').' '.$values['title'].' '.Tools::displayError('is invalid.'); + } + else if (Tools::getValue($field) && isset($values['validation'])) + if (!Validate::$values['validation'](Tools::getValue($field))) + $this->_errors[] = Tools::displayError('field').' '.$values['title'].' '.Tools::displayError('is invalid.'); + + /* Default value if null */ + foreach ($fields as $field => $values) + if (!Tools::getValue($field) && isset($values['default'])) + $_POST[$field] = $values['default']; + + if (1 || !count($this->_errors)) + { + foreach ($fields as $key => $options) + { + if (isset($options['visibility']) && $options['visibility'] > Context::getContext()->shop->getContextType()) + continue; + + if (Shop::isFeatureActive() && isset($_POST['configUseDefault'][$key])) + { + Configuration::deleteFromContext($key); + continue; + } + + // check if a method updateOptionFieldName is available + $method_name = 'updateOption'.Tools::toCamelCase($key, true); + if (method_exists($this, $method_name)) + $this->$method_name(Tools::getValue($key)); + else if (isset($options['type']) && in_array($options['type'], array('textLang', 'textareaLang'))) + { + $list = array(); + foreach ($languages as $language) + { + $key_lang = Tools::getValue($key.'_'.$language['id_lang']); + $val = (isset($options['cast']) ? $options['cast']($key_lang) : $key_lang); + if ($this->validateField($val, $options)) + { + if (Validate::isCleanHtml($val)) + $list[$language['id_lang']] = $val; + else + $this->_errors[] = Tools::displayError('Can not add configuration '.$key.' for lang '.Language::getIsoById((int)$language['id_lang'])); + } + } + Configuration::updateValue($key, $list); + } + else + { + $val = (isset($options['cast']) ? $options['cast'](Tools::getValue($key)) : Tools::getValue($key)); + if ($this->validateField($val, $options)) + { + if (Validate::isCleanHtml($val)) + Configuration::updateValue($key, $val); + else + $this->_errors[] = Tools::displayError('Can not add configuration '.$key); + } + } + } + } + } + if (count($this->_errors) <= 0) + Tools::redirectAdmin(self::$currentIndex.'&conf=6&token='.$token); + } + else + $this->_errors[] = Tools::displayError('You do not have permission to edit here.'); + } /** * Display form @@ -1492,15 +1604,7 @@ class AdminControllerCore extends Controller $this->_errors[] = Tools::displayError('You do not have permission to edit here.'); } else if ($submitted_action = Tools::getValue('submitAction'.$this->table)) - { - if ($submitted_action == 'delete') - if ($this->tabAccess['delete'] === '1') - $this->action = 'multiple_delete'; - else - $this->_errors[] = Tools::displayError('You do not have permission to delete here.'); - else $this->action = $submitted_action; - } else if (Tools::getValue('submitAdd'.$this->table)) { // case 1: updating existing entry @@ -2154,121 +2258,7 @@ EOF; return $html; } - /** - * Update options and preferences - * - * @param string $token - */ - protected function updateOptions($token) - { - if ($this->tabAccess['edit'] === '1') - { - $this->beforeUpdateOptions(); - - $languages = Language::getLanguages(false); - - foreach ($this->options as $category => $category_data) - { - $fields = $category_data['fields']; - - foreach ($fields as $field => $values) - if (isset($values['type']) && $values['type'] == 'selectLang') - { - foreach ($languages as $lang) - if (Tools::getValue($field.'_'.strtoupper($lang['iso_code']))) - $fields[$field.'_'.strtoupper($lang['iso_code'])] = array( - 'type' => 'select', - 'cast' => 'strval', - 'identifier' => 'mode', - 'list' => $values['list'] - ); - } - - /* Check required fields */ - foreach ($fields as $field => $values) - if (isset($values['required']) && $values['required'] && !isset($_POST['configUseDefault'][$field])) - if (isset($values['type']) && $values['type'] == 'textLang') - { - foreach ($languages as $language) - if (($value = Tools::getValue($field.'_'.$language['id_lang'])) == false && (string)$value != '0') - $this->_errors[] = Tools::displayError('field').' '.$values['title'].' '.Tools::displayError('is required.'); - } - else if (($value = Tools::getValue($field)) == false && (string)$value != '0') - $this->_errors[] = Tools::displayError('field').' '.$values['title'].' '.Tools::displayError('is required.'); - - /* Check fields validity */ - foreach ($fields as $field => $values) - if (isset($values['type']) && $values['type'] == 'textLang') - { - foreach ($languages as $language) - if (Tools::getValue($field.'_'.$language['id_lang']) && isset($values['validation'])) - if (!Validate::$values['validation'](Tools::getValue($field.'_'.$language['id_lang']))) - $this->_errors[] = Tools::displayError('field').' '.$values['title'].' '.Tools::displayError('is invalid.'); - } - else if (Tools::getValue($field) && isset($values['validation'])) - if (!Validate::$values['validation'](Tools::getValue($field))) - $this->_errors[] = Tools::displayError('field').' '.$values['title'].' '.Tools::displayError('is invalid.'); - - /* Default value if null */ - foreach ($fields as $field => $values) - if (!Tools::getValue($field) && isset($values['default'])) - $_POST[$field] = $values['default']; - - if (1 || !count($this->_errors)) - { - foreach ($fields as $key => $options) - { - if (isset($options['visibility']) && $options['visibility'] > Context::getContext()->shop->getContextType()) - continue; - - if (Shop::isFeatureActive() && isset($_POST['configUseDefault'][$key])) - { - Configuration::deleteFromContext($key); - continue; - } - - // check if a method updateOptionFieldName is available - $method_name = 'updateOption'.Tools::toCamelCase($key, true); - if (method_exists($this, $method_name)) - $this->$method_name(Tools::getValue($key)); - else if (isset($options['type']) && in_array($options['type'], array('textLang', 'textareaLang'))) - { - $list = array(); - foreach ($languages as $language) - { - $key_lang = Tools::getValue($key.'_'.$language['id_lang']); - $val = (isset($options['cast']) ? $options['cast']($key_lang) : $key_lang); - if ($this->validateField($val, $options)) - { - if (Validate::isCleanHtml($val)) - $list[$language['id_lang']] = $val; - else - $this->_errors[] = Tools::displayError('Can not add configuration '.$key.' for lang '.Language::getIsoById((int)$language['id_lang'])); - } - } - Configuration::updateValue($key, $list); - } - else - { - $val = (isset($options['cast']) ? $options['cast'](Tools::getValue($key)) : Tools::getValue($key)); - if ($this->validateField($val, $options)) - { - if (Validate::isCleanHtml($val)) - Configuration::updateValue($key, $val); - else - $this->_errors[] = Tools::displayError('Can not add configuration '.$key); - } - } - } - } - } - - if (count($this->_errors) <= 0) - Tools::redirectAdmin(self::$currentIndex.'&conf=6&token='.$token); - } - else - $this->_errors[] = Tools::displayError('You do not have permission to edit here.'); - } + /** * Overload this method for custom checking @@ -2327,9 +2317,9 @@ EOF; * * @param array $boxes ids of the item to be processed */ - protected function bulkDelete($boxes) + protected function processBulkDelete($token) { - if (is_array($boxes) && !empty($boxes)) + if (is_array($this->boxes) && !empty($this->boxes)) { $object = new $this->className(); if (isset($object->noZeroObject)) @@ -2337,7 +2327,7 @@ EOF; $objects_count = count(call_user_func(array($this->className, $object->noZeroObject))); // Check if all object will be deleted - if ($objects_count <= 1 || count($boxes) == $objects_count) + if ($objects_count <= 1 || count($this->boxes) == $objects_count) $this->_errors[] = Tools::displayError('You need at least one object.'). ' '.$this->table.'
'. Tools::displayError('You cannot delete all of the items.'); @@ -2347,7 +2337,7 @@ EOF; $result = true; if ($this->deleted) { - foreach ($boxes as $id) + foreach ($this->boxes as $id) { $to_delete = new $this->className($id); $to_delete->deleted = 1; @@ -2358,7 +2348,7 @@ EOF; $result = $object->deleteSelection(Tools::getValue($this->table.'Box')); if ($result) - Tools::redirectAdmin(self::$currentIndex.'&conf=2&token='.$this->token); + Tools::redirectAdmin(self::$currentIndex.'&conf=2&token='.$token); $this->_errors[] = Tools::displayError('An error occurred while deleting selection.'); } }