/classes/AdminTab.php
PHP | 2435 lines | 1743 code | 268 blank | 424 comment | 519 complexity | 4a05da5969aba5b19e189c5b5171b5e2 MD5 | raw file
Possible License(s): LGPL-2.1, LGPL-3.0
Large files files are truncated, but you can click here to view the full file
- <?php
- /*
- * 2007-2012 PrestaShop
- *
- * NOTICE OF LICENSE
- *
- * This source file is subject to the Open Software License (OSL 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/osl-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 <contact@prestashop.com>
- * @copyright 2007-2012 PrestaShop SA
- * @version Release: $Revision: 7499 $
- * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
- * International Registered Trademark & Property of PrestaShop SA
- */
- /**
- * @deprecated 1.5.0
- */
- abstract class AdminTabCore
- {
- /** @var integer Tab id */
- public $id = -1;
- /** @var string Associated table name */
- public $table;
- /** @var string Object identifier inside the associated table */
- protected $identifier = false;
- /** @var string Tab name */
- public $className;
- /** @var string Security token */
- public $token;
- /** @var boolean Automatically join language table if true */
- public $lang = false;
- /** @var boolean Tab Automatically displays edit/delete icons if true */
- public $edit = false;
- /** @var boolean Tab Automatically displays view icon if true */
- public $view = false;
- /** @var boolean Tab Automatically displays delete icon if true */
- public $delete = false;
- /** @var boolean Table records are not deleted but marked as deleted */
- public $deleted = false;
- /** @var boolean Tab Automatically displays duplicate icon if true */
- public $duplicate = false;
- /** @var boolean Content line is clickable if true */
- public $noLink = false;
- /** @var boolean select other required fields */
- public $requiredDatabase = false;
- /** @var boolean Tab Automatically displays '$color' as background color on listing if true */
- public $colorOnBackground = false;
- /** @var string Add fields into data query to display list */
- protected $_select;
- /** @var string Join tables into data query to display list */
- protected $_join;
- /** @var string Add conditions into data query to display list */
- protected $_where;
- /** @var string Group rows into data query to display list */
- protected $_group;
- /** @var string Having rows into data query to display list */
- protected $_having;
- /** @var array Name and directory where class image are located */
- public $fieldImageSettings = array();
- /** @var string Image type */
- public $imageType = 'jpg';
- /** @var array Fields to display in list */
- public $fieldsDisplay = array();
- public $optionTitle = null;
- /** @var string shop */
- public $shopLinkType;
- /** @var bool */
- public $shopShareDatas = false;
- /** @var array Cache for query results */
- protected $_list = array();
- /** @var integer Number of results in list */
- protected $_listTotal = 0;
- /** @var array WHERE clause determined by filter fields */
- protected $_filter;
- /** @var array Temporary SQL table WHERE clause determinated by filter fields */
- protected $_tmpTableFilter = '';
- /** @var array Number of results in list per page (used in select field) */
- protected $_pagination = array(20, 50, 100, 300);
- /** @var string ORDER BY clause determined by field/arrows in list header */
- protected $_orderBy;
- /** @var string Default ORDER BY clause when $_orderBy is not defined */
- protected $_defaultOrderBy = false;
- /** @var string Order way (ASC, DESC) determined by arrows in list header */
- protected $_orderWay;
- /** @var integer Max image size for upload
- * As of 1.5 it is recommended to not set a limit to max image size
- **/
- protected $maxImageSize;
- /** @var array Errors displayed after post processing */
- public $_errors = array();
- /** @var array Confirmations displayed after post processing */
- protected $_conf;
- /** @var object Object corresponding to the tab */
- protected $_object = false;
- /** @var array tabAccess */
- public $tabAccess;
- /** @var string specificConfirmDelete */
- public $specificConfirmDelete = NULL;
- public static $currentIndex;
- public $smarty;
- protected $identifiersDnd = array('id_product' => 'id_product', 'id_category' => 'id_category_to_move','id_cms_category' => 'id_cms_category_to_move', 'id_cms' => 'id_cms', 'id_attribute' => 'id_attribute', 'id_attribute_group' => 'id_attribute_group', 'id_feature' => 'id_feature', 'id_carrier' => 'id_carrier');
- /** @var bool Redirect or not ater a creation */
- protected $_redirect = true;
- /** @var bool If false, don't add form tags in options forms */
- protected $formOptions = true;
- public $_fieldsOptions = array();
- /**
- * @since 1.5.0
- * @var array
- */
- public $optionsList = array();
- /**
- * @since 1.5.0
- * @var Context
- */
- public $context;
- protected $_languages = NULL;
- protected $_defaultFormLanguage = NULL;
- protected $_includeObj = array();
- protected $_includeVars = false;
- protected $_includeContainer = true;
- public $ajax = false;
- /**
- * if true, ajax-tab will not wait 1 sec
- * @var boolean
- */
- public $ignore_sleep = false;
- public static $tabParenting = array(
- 'AdminCms' => 'AdminCmsContent',
- 'AdminCmsCategories' => 'AdminCmsContent',
- 'AdminOrdersStates' => 'AdminStatuses',
- 'AdminAttributeGenerator' => 'AdminProducts',
- 'AdminAttributes' => 'AdminAttributesGroups',
- 'AdminFeaturesValues' => 'AdminFeatures',
- 'AdminReturnStates' => 'AdminStatuses',
- 'AdminStatsTab' => 'AdminStats'
- );
- public function __construct()
- {
- $this->context = Context::getContext();
- $this->id = Tab::getIdFromClassName(get_class($this));
- $this->_conf = array(
- 1 => $this->l('Deletion successful'), 2 => $this->l('Selection successfully deleted'),
- 3 => $this->l('Creation successful'), 4 => $this->l('Update successful'),
- 5 => $this->l('Status update successful'), 6 => $this->l('Settings update successful'),
- 7 => $this->l('Image successfully deleted'), 8 => $this->l('Module downloaded successfully'),
- 9 => $this->l('Thumbnails successfully regenerated'), 10 => $this->l('Message sent to the customer'),
- 11 => $this->l('Comment added'), 12 => $this->l('Module installed successfully'),
- 13 => $this->l('Module uninstalled successfully'), 14 => $this->l('Language successfully copied'),
- 15 => $this->l('Translations successfully added'), 16 => $this->l('Module transplanted successfully to hook'),
- 17 => $this->l('Module removed successfully from hook'), 18 => $this->l('Upload successful'),
- 19 => $this->l('Duplication completed successfully'), 20 => $this->l('Translation added successfully but the language has not been created'),
- 21 => $this->l('Module reset successfully'), 22 => $this->l('Module deleted successfully'),
- 23 => $this->l('Localization pack imported successfully'), 24 => $this->l('Refund Successful'),
- 25 => $this->l('Images successfully moved'),
- );
- if (!$this->identifier) $this->identifier = 'id_'.$this->table;
- if (!$this->_defaultOrderBy) $this->_defaultOrderBy = $this->identifier;
- $className = get_class($this);
- // if ($className == 'AdminCategories' OR $className == 'AdminProducts')
- // $className = 'AdminCatalog';
- $this->token = Tools::getAdminToken($className.(int)$this->id.(int)$this->context->employee->id);
- if (!Shop::isFeatureActive())
- $this->shopLinkType = '';
- }
- /**
- * use translations files to replace english expression.
- *
- * @param mixed $string term or expression in english
- * @param string $class
- * @param boolan $addslashes if set to true, the return value will pass through addslashes(). Otherwise, stripslashes().
- * @param boolean $htmlentities if set to true(default), the return value will pass through htmlentities($string, ENT_QUOTES, 'utf-8')
- * @return string the translation if available, or the english default text.
- */
- protected function l($string, $class = 'AdminTab', $addslashes = FALSE, $htmlentities = TRUE)
- {
- // if the class is extended by a module, use modules/[module_name]/xx.php lang file
- $currentClass = get_class($this);
- if(Module::getModuleNameFromClass($currentClass))
- {
- $string = str_replace('\'', '\\\'', $string);
- return Translate::getModuleTranslation(Module::$classInModule[$currentClass], $string, $currentClass);
- }
- global $_LANGADM;
- if ($class == __CLASS__)
- $class = 'AdminTab';
- $key = md5(str_replace('\'', '\\\'', $string));
- $str = (key_exists(get_class($this).$key, $_LANGADM)) ? $_LANGADM[get_class($this).$key] : ((key_exists($class.$key, $_LANGADM)) ? $_LANGADM[$class.$key] : $string);
- $str = $htmlentities ? htmlentities($str, ENT_QUOTES, 'utf-8') : $str;
- return str_replace('"', '"', ($addslashes ? addslashes($str) : stripslashes($str)));
- }
- /**
- * ajaxDisplay is the default ajax return sytem
- *
- * @return void
- */
- public function displayAjax()
- {
- }
- /**
- * Manage page display (form, list...)
- */
- public function display()
- {
- // Include other tab in current tab
- if ($this->includeSubTab('display', array('submitAdd2', 'add', 'update', 'view'))){}
- // Include current tab
- elseif ((Tools::getValue('submitAdd'.$this->table) && count($this->_errors)) || isset($_GET['add'.$this->table]))
- {
- if ($this->tabAccess['add'] === '1')
- {
- $this->displayForm();
- if ($this->tabAccess['view'])
- echo '<br /><br /><a href="'.((Tools::getValue('back')) ? Tools::getValue('back') : self::$currentIndex.'&token='.$this->token).'"><img src="../img/admin/arrow2.gif" /> '.((Tools::getValue('back')) ? $this->l('Back') : $this->l('Back to list')).'</a><br />';
- }
- else
- echo $this->l('You do not have permission to add here');
- }
- elseif (isset($_GET['update'.$this->table]))
- {
- if ($this->tabAccess['edit'] === '1' || ($this->table == 'employee' && $this->context->employee->id == Tools::getValue('id_employee')))
- {
- $this->displayForm();
- if ($this->tabAccess['view'])
- echo '<br /><br /><a href="'.((Tools::getValue('back')) ? Tools::getValue('back') : self::$currentIndex.'&token='.$this->token).'"><img src="../img/admin/arrow2.gif" /> '.((Tools::getValue('back')) ? $this->l('Back') : $this->l('Back to list')).'</a><br />';
- }
- else
- echo $this->l('You do not have permission to edit here');
- }
- elseif (isset($_GET['view'.$this->table]))
- $this->{'view'.$this->table}();
- else
- {
- $this->getList($this->context->language->id);
- $this->displayList();
- echo '<br />';
- $this->displayOptionsList();
- $this->displayRequiredFields();
- $this->includeSubTab('display');
- }
- }
- public function displayRequiredFields()
- {
- if (!$this->tabAccess['add'] || !$this->tabAccess['delete'] === '1' || !$this->requiredDatabase)
- return;
- $rules = call_user_func_array(array($this->className, 'getValidationRules'), array($this->className));
- $required_class_fields = array($this->identifier);
- foreach ($rules['required'] as $required)
- $required_class_fields[] = $required;
- echo '<br />
- <p><a href="#" onclick="if ($(\'.requiredFieldsParameters:visible\').length == 0) $(\'.requiredFieldsParameters\').slideDown(\'slow\'); else $(\'.requiredFieldsParameters\').slideUp(\'slow\'); return false;"><img src="../img/admin/duplicate.gif" alt="" /> '.$this->l('Set required fields for this section').'</a></p>
- <fieldset style="display:none" class="width1 requiredFieldsParameters">
- <legend>'.$this->l('Required Fields').'</legend>
- <form name="updateFields" action="'.self::$currentIndex.'&submitFields'.$this->table.'=1&token='.$this->token.'" method="post">
- <p><b>'.$this->l('Select the fields you would like to be required for this section.').'<br />
- <table cellspacing="0" cellpadding="0" class="table width1 clear">
- <tr>
- <th><input type="checkbox" onclick="checkDelBoxes(this.form, \'fieldsBox[]\', this.checked)" class="noborder" name="checkme"></th>
- <th>'.$this->l('Field Name').'</th>
- </tr>';
- $object = new $this->className();
- $res = $object->getFieldsRequiredDatabase();
- $required_fields = array();
- foreach ($res as $row)
- $required_fields[(int)$row['id_required_field']] = $row['field_name'];
- $table_fields = Db::getInstance()->executeS('SHOW COLUMNS FROM '.pSQL(_DB_PREFIX_.$this->table));
- $irow = 0;
- foreach ($table_fields as $field)
- {
- if (in_array($field['Field'], $required_class_fields))
- continue;
- echo '<tr class="'.($irow++ % 2 ? 'alt_row' : '').'">
- <td class="noborder"><input type="checkbox" name="fieldsBox[]" value="'.$field['Field'].'" '.(in_array($field['Field'], $required_fields) ? 'checked="checked"' : '').' /></td>
- <td>'.$field['Field'].'</td>
- </tr>';
- }
- echo '</table><br />
- <center><input style="margin-left:15px;" class="button" type="submit" value="'.$this->l(' Save ').'" name="submitFields" /></center>
- </fieldset>';
- }
- public function includeSubTab($methodname, $actions = array())
- {
- if (!isset($this->_includeTab) || !is_array($this->_includeTab))
- return false;
- $key = 0;
- $inc = false;
- foreach ($this->_includeTab as $subtab => $extraVars)
- {
- /* New tab loading */
- $classname = 'Admin'.$subtab;
- if (($module = Db::getInstance()->getValue('SELECT `module` FROM `'._DB_PREFIX_.'tab` WHERE `class_name` = \''.pSQL($classname).'\'')) && file_exists(_PS_MODULE_DIR_.'/'.$module.'/'.$classname.'.php'))
- include_once(_PS_MODULE_DIR_.'/'.$module.'/'.$classname.'.php');
- elseif (file_exists(_PS_ADMIN_DIR_.'/tabs/'.$classname.'.php'))
- include_once('tabs/'.$classname.'.php');
- if (!isset($this->_includeObj[$key]))
- $this->_includeObj[$key] = new $classname;
- $adminTab = $this->_includeObj[$key];
- $adminTab->token = $this->token;
- /* Extra variables addition */
- if (!empty($extraVars) && is_array($extraVars))
- foreach ($extraVars as $varKey => $varValue)
- $adminTab->$varKey = $varValue;
- /* Actions management */
- foreach ($actions as $action)
- {
- switch ($action)
- {
- case 'submitAdd1':
- if (Tools::getValue('submitAdd'.$adminTab->table))
- $ok_inc = true;
- break;
- case 'submitAdd2':
- if (Tools::getValue('submitAdd'.$adminTab->table) && count($adminTab->_errors))
- $ok_inc = true;
- break;
- case 'submitDel':
- if (Tools::getValue('submitDel'.$adminTab->table))
- $ok_inc = true;
- break;
- case 'submitFilter':
- if (Tools::isSubmit('submitFilter'.$adminTab->table))
- $ok_inc = true;
- case 'submitReset':
- if (Tools::isSubmit('submitReset'.$adminTab->table))
- $ok_inc = true;
- default:
- if (isset($_GET[$action.$adminTab->table]))
- $ok_inc = true;
- }
- }
- $inc = false;
- if ((isset($ok_inc) && $ok_inc) || !count($actions))
- {
- if (!$adminTab->viewAccess())
- {
- echo Tools::displayError('Access denied.');
- return false;
- }
- if (!count($actions))
- if (($methodname == 'displayErrors' && count($adminTab->_errors)) || $methodname != 'displayErrors')
- echo (isset($this->_includeTabTitle[$key]) ? '<h2>'.$this->_includeTabTitle[$key].'</h2>' : '');
- if ($adminTab->_includeVars)
- foreach ($adminTab->_includeVars as $var => $value)
- $adminTab->$var = $this->$value;
- $adminTab->$methodname();
- $inc = true;
- }
- $key++;
- }
- return $inc;
- }
- /**
- * Manage page display (form, list...)
- *
- * @param string $className Allow to validate a different class than the current one
- */
- public function validateRules($className = false)
- {
- if (!$className)
- $className = $this->className;
- /* Class specific validation rules */
- $rules = call_user_func(array($className, 'getValidationRules'), $className);
- if ((count($rules['requiredLang']) || count($rules['sizeLang']) || count($rules['validateLang'])))
- {
- /* Language() instance determined by default language */
- $defaultLanguage = new Language((int)(Configuration::get('PS_LANG_DEFAULT')));
- /* All availables languages */
- $languages = Language::getLanguages(false);
- }
- /* Checking for required fields */
- foreach ($rules['required'] as $field)
- if (($value = Tools::getValue($field)) == false && (string)$value != '0')
- if (!Tools::getValue($this->identifier) || ($field != 'passwd' && $field != 'no-picture'))
- $this->_errors[] = sprintf(Tools::displayError('The field %s is required.'), call_user_func(array($className, 'displayFieldName'), $field, $className));
- /* Checking for multilingual required fields */
- foreach ($rules['requiredLang'] as $fieldLang)
- if (($empty = Tools::getValue($fieldLang.'_'.$defaultLanguage->id)) === false || $empty !== '0' && empty($empty))
- $this->_errors[] = sprintf(Tools::displayError('The field %1$s is required at least in %2$s.'), call_user_func(array($className, 'displayFieldName'), $fieldLang, $className), $defaultLanguage->name);
- /* Checking for maximum fields sizes */
- foreach ($rules['size'] as $field => $maxLength)
- if (Tools::getValue($field) !== false && Tools::strlen(Tools::getValue($field)) > $maxLength)
- $this->_errors[] = sprintf(Tools::displayError('field %1$s is too long. (%2$d chars max)'), call_user_func(array($className, 'displayFieldName'), $field, $className), $maxLength);
- /* Checking for maximum multilingual fields size */
- foreach ($rules['sizeLang'] as $fieldLang => $maxLength)
- foreach ($languages as $language)
- if (Tools::getValue($fieldLang.'_'.$language['id_lang']) !== false && Tools::strlen(Tools::getValue($fieldLang.'_'.$language['id_lang'])) > $maxLength)
- $this->_errors[] = sprintf(Tools::displayError('field %1$s is too long. (%2$d chars max, html chars including)'), call_user_func(array($className, 'displayFieldName'), $fieldLang, $className), $maxLength);
- /* Overload this method for custom checking */
- $this->_childValidation();
- /* Checking for fields validity */
- foreach ($rules['validate'] AS $field => $function)
- if (($value = Tools::getValue($field)) !== false AND !empty($value) AND ($field != 'passwd'))
- if (!Validate::$function($value))
- $this->_errors[] = sprintf(Tools::displayError('The field %1$s (%2$s) is invalid.'), call_user_func(array($className, 'displayFieldName'), $field, $className));
- /* Checking for passwd_old validity */
- if (($value = Tools::getValue('passwd')) != false)
- {
- if ($className == 'Employee' && !Validate::isPasswdAdmin($value))
- $this->_errors[] = sprintf(Tools::displayError('The field %1$s (%2$s) is invalid.'), call_user_func(array($className, 'displayFieldName'), 'passwd', $className));
- elseif ($className == 'Customer' && !Validate::isPasswd($value))
- $this->_errors[] = sprintf(Tools::displayError('The field %1$s (%2$s) is invalid.'), call_user_func(array($className, 'displayFieldName'), 'passwd', $className));
- }
- /* Checking for multilingual fields validity */
- foreach ($rules['validateLang'] as $fieldLang => $function)
- foreach ($languages as $language)
- if (($value = Tools::getValue($fieldLang.'_'.$language['id_lang'])) !== false && !empty($value))
- if (!Validate::$function($value))
- $this->_errors[] = sprintf(Tools::displayError('The field %1$s (%2$s) is invalid.'), call_user_func(array($className, 'displayFieldName'), $fieldLang, $className), $language['name']);
- }
- /**
- * Overload this method for custom checking
- */
- protected function _childValidation() { }
- /**
- * Overload this method for custom checking
- *
- * @param integer $id Object id used for deleting images
- * @deprecated As of 1.5 use ObjectModel->deleteImage instead.
- */
- public function deleteImage($id)
- {
- Tools::displayAsDeprecated();
- $dir = null;
- /* Deleting object images and thumbnails (cache) */
- if (key_exists('dir', $this->fieldImageSettings))
- {
- $dir = $this->fieldImageSettings['dir'].'/';
- if (file_exists(_PS_IMG_DIR_.$dir.$id.'.'.$this->imageType) && !unlink(_PS_IMG_DIR_.$dir.$id.'.'.$this->imageType))
- return false;
- }
- if (file_exists(_PS_TMP_IMG_DIR_.$this->table.'_'.$id.'.'.$this->imageType) && !unlink(_PS_TMP_IMG_DIR_.$this->table.'_'.$id.'.'.$this->imageType))
- return false;
- if (file_exists(_PS_TMP_IMG_DIR_.$this->table.'_mini_'.$id.'.'.$this->imageType) && !unlink(_PS_TMP_IMG_DIR_.$this->table.'_mini_'.$id.'.'.$this->imageType))
- return false;
- $types = ImageType::getImagesTypes();
- foreach ($types as $imageType)
- if (file_exists(_PS_IMG_DIR_.$dir.$id.'-'.stripslashes($imageType['name']).'.'.$this->imageType) && !unlink(_PS_IMG_DIR_.$dir.$id.'-'.stripslashes($imageType['name']).'.'.$this->imageType))
- return false;
- return true;
- }
- /**
- * ajaxPreProcess is a method called in ajax-tab.php before displayConf().
- *
- * @return void
- */
- public function ajaxPreProcess()
- {
- }
- /**
- * ajaxProcess is the default handle method for request with ajax-tab.php
- *
- * @return void
- */
- public function ajaxProcess()
- {
- }
- /**
- * Manage page processing
- */
- public function postProcess()
- {
- if (!isset($this->table))
- return false;
- // set token
- $token = Tools::getValue('token') ? Tools::getValue('token') : $this->token;
- // Sub included tab postProcessing
- $this->includeSubTab('postProcess', array('status', 'submitAdd1', 'submitDel', 'delete', 'submitFilter', 'submitReset'));
- /* Delete object image */
- if (isset($_GET['deleteImage']))
- {
- if (Validate::isLoadedObject($object = $this->loadObject()))
- if (($object->deleteImage()))
- Tools::redirectAdmin(self::$currentIndex.'&add'.$this->table.'&'.$this->identifier.'='.Tools::getValue($this->identifier).'&conf=7&token='.$token);
- $this->_errors[] = Tools::displayError('An error occurred during image deletion (cannot load object).');
- }
- /* Delete object */
- elseif (isset($_GET['delete'.$this->table]))
- {
- if ($this->tabAccess['delete'] === '1')
- {
- 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.').' <b>'.$this->table.'</b><br />'.Tools::displayError('You cannot delete all of the items.');
- else
- {
- if ($this->deleted)
- {
- $object->deleteImage();
- $object->deleted = 1;
- if(method_exists($object, 'cleanPositions'))
- $object->cleanPositions();
- if ($object->update())
- Tools::redirectAdmin(self::$currentIndex.'&conf=1&token='.$token);
- }
- elseif ($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.').' <b>'.$this->table.'</b> '.Tools::displayError('(cannot load object)');
- }
- else
- $this->_errors[] = Tools::displayError('You do not have permission to delete here.');
- }
- /* Change object statuts (active, inactive) */
- elseif ((isset($_GET['status'.$this->table]) || isset($_GET['status'])) && Tools::getValue($this->identifier))
- {
- if ($this->tabAccess['edit'] === '1')
- {
- if (Validate::isLoadedObject($object = $this->loadObject()))
- {
- if ($object->toggleStatus())
- Tools::redirectAdmin(self::$currentIndex.'&conf=5'.((($id_category = (int)(Tools::getValue('id_category'))) && Tools::getValue('id_product')) ? '&id_category='.$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.').' <b>'.$this->table.'</b> '.Tools::displayError('(cannot load object)');
- }
- else
- $this->_errors[] = Tools::displayError('You do not have permission to edit here.');
- }
- /* Move an object */
- elseif (isset($_GET['position']))
- {
- if ($this->tabAccess['edit'] !== '1')
- $this->_errors[] = Tools::displayError('You do not have permission to edit here.');
- elseif (!Validate::isLoadedObject($object = $this->loadObject()))
- $this->_errors[] = Tools::displayError('An error occurred while updating status for object.').' <b>'.$this->table.'</b> '.Tools::displayError('(cannot load object)');
- elseif (!$object->updatePosition((int)(Tools::getValue('way')), (int)(Tools::getValue('position'))))
- $this->_errors[] = Tools::displayError('Failed to update the position.');
- else
- Tools::redirectAdmin(self::$currentIndex.'&'.$this->table.'Orderby=position&'.$this->table.'Orderway=asc&conf=5'.(($id_identifier = (int)(Tools::getValue($this->identifier))) ? ('&'.$this->identifier.'='.$id_identifier) : '').'&token='.$token);
- }
- /* Delete multiple objects */
- elseif (Tools::getValue('submitDel'.$this->table))
- {
- if ($this->tabAccess['delete'] === '1')
- {
- if (isset($_POST[$this->table.'Box']))
- {
- $object = new $this->className();
- if (isset($object->noZeroObject) &&
- // Check if all object will be deleted
- (count(call_user_func(array($this->className, $object->noZeroObject))) <= 1 || count($_POST[$this->table.'Box']) == count(call_user_func(array($this->className, $object->noZeroObject)))))
- $this->_errors[] = Tools::displayError('You need at least one object.').' <b>'.$this->table.'</b><br />'.Tools::displayError('You cannot delete all of the items.');
- else
- {
- $result = true;
- if ($this->deleted)
- {
- foreach(Tools::getValue($this->table.'Box') as $id)
- {
- $toDelete = new $this->className($id);
- $toDelete->deleted = 1;
- $result = $result && $toDelete->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.');
- }
- // clean carriers positions
- Carrier::cleanPositions();
- }
- else
- $this->_errors[] = Tools::displayError('You must select at least one element to delete.');
- }
- else
- $this->_errors[] = Tools::displayError('You do not have permission to delete here.');
- }
- /* Create or update an object */
- elseif (Tools::getValue('submitAdd'.$this->table))
- {
- /* 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
- $objectNew = new $this->className($object->id);
- $objectNew->id = NULL;
- $objectNew->date_add = '';
- $objectNew->date_upd = '';
- // Update old object to deleted
- $object->deleted = 1;
- $object->update();
- // Update new object with post values
- $this->copyFromPost($objectNew, $this->table);
- $result = $objectNew->add();
- if (Validate::isLoadedObject($objectNew))
- $this->afterDelete($objectNew, $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.').' <b>'.$this->table.'</b> ('.Db::getInstance()->getMsgError().')';
- elseif ($this->postImage($object->id) && !count($this->_errors))
- {
- if ($this->table == 'group')
- $this->updateRestrictions($object->id);
- $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.').' <b>'.$this->table.'</b> '.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.').' <b>'.$this->table.' ('.Db::getInstance()->getMsgError().')</b>';
- elseif (($_POST[$this->identifier] = $object->id /* voluntary */) && $this->postImage($object->id) && !count($this->_errors) && $this->_redirect)
- {
- $parent_id = (int)(Tools::getValue('id_parent', 1));
- $this->afterAdd($object);
- $this->updateAssoShop($object->id);
- if ($this->table == 'group')
- {
- $this->updateRestrictions($object->id);
- // assign group access to every categories
- $categories = Category::getCategories($this->context->language->id, true);
- $rowList = array();$a=0;
- foreach ($categories as $category)
- foreach ($category as $categ_id => $categ)
- if ($categ_id != 1)
- $rowList[] = array('id_category' => $categ_id, 'id_group' => $object->id);
- Db::getInstance()->insert('category_group', $rowList);
- }
- // 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);
- }
- /* Cancel all filters for this tab */
- elseif (isset($_POST['submitReset'.$this->table]))
- {
- $filters = $this->context->cookie->getFamily($this->table.'Filter_');
- foreach ($filters as $cookieKey => $filter)
- if (strncmp($cookieKey, $this->table.'Filter_', 7 + Tools::strlen($this->table)) == 0)
- {
- $key = substr($cookieKey, 7 + Tools::strlen($this->table));
- /* Table alias could be specified using a ! eg. alias!field */
- $tmpTab = explode('!', $key);
- $key = (count($tmpTab) > 1 ? $tmpTab[1] : $tmpTab[0]);
- if (array_key_exists($key, $this->fieldsDisplay))
- unset($this->context->cookie->$cookieKey);
- }
- 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);
- }
- /* Submit options list */
- elseif (Tools::getValue('submitOptions'.$this->table))
- {
- $this->updateOptions($token);
- }
- /* Manage list filtering */
- elseif (Tools::isSubmit('submitFilter'.$this->table) || $this->context->cookie->{'submitFilter'.$this->table} !== false)
- {
- $_POST = array_merge($this->context->cookie->getFamily($this->table.'Filter_'), (isset($_POST) ? $_POST : array()));
- foreach ($_POST as $key => $value)
- {
- /* Extracting filters from $_POST on key filter_ */
- if ($value != NULL && !strncmp($key, $this->table.'Filter_', 7 + Tools::strlen($this->table)))
- {
- $key = Tools::substr($key, 7 + Tools::strlen($this->table));
- /* Table alias could be specified using a ! eg. alias!field */
- $tmpTab = explode('!', $key);
- $filter = count($tmpTab) > 1 ? $tmpTab[1] : $tmpTab[0];
- if ($field = $this->filterToField($key, $filter))
- {
- $type = (array_key_exists('filter_type', $field) ? $field['filter_type'] : (array_key_exists('type', $field) ? $field['type'] : false));
- if (($type == 'date' || $type == 'datetime') && is_string($value))
- $value = Tools::unSerialize($value);
- $key = isset($tmpTab[1]) ? $tmpTab[0].'.`'.bqSQL($tmpTab[1]).'`' : '`'.bqSQL($tmpTab[0]).'`';
- if (array_key_exists('tmpTableFilter', $field))
- $sqlFilter = & $this->_tmpTableFilter;
- elseif (array_key_exists('havingFilter', $field))
- $sqlFilter = & $this->_filterHaving;
- else
- $sqlFilter = & $this->_filter;
- /* Only for date filtering (from, to) */
- if (is_array($value))
- {
- if (isset($value[0]) && !empty($value[0]))
- {
- if (!Validate::isDate($value[0]))
- $this->_errors[] = Tools::displayError('\'From:\' date format is invalid (YYYY-MM-DD)');
- else
- $sqlFilter .= ' AND '.$key.' >= \''.pSQL(Tools::dateFrom($value[0])).'\'';
- }
- if (isset($value[1]) && !empty($value[1]))
- {
- if (!Validate::isDate($value[1]))
- $this->_errors[] = Tools::displayError('\'To:\' date format is invalid (YYYY-MM-DD)');
- else
- $sqlFilter .= ' AND '.$key.' <= \''.pSQL(Tools::dateTo($value[1])).'\'';
- }
- }
- else
- {
- $sqlFilter .= ' AND ';
- if ($type == 'int' || $type == 'bool')
- $sqlFilter .= (($key == $this->identifier || $key == '`'.$this->identifier.'`' || $key == '`active`') ? 'a.' : '').pSQL($key).' = '.(int)($value).' ';
- elseif ($type == 'decimal')
- $sqlFilter .= (($key == $this->identifier || $key == '`'.$this->identifier.'`') ? 'a.' : '').pSQL($key).' = '.(float)($value).' ';
- elseif ($type == 'select')
- $sqlFilter .= (($key == $this->identifier || $key == '`'.$this->identifier.'`') ? 'a.' : '').pSQL($key).' = \''.pSQL($value).'\' ';
- else
- $sqlFilter .= (($key == $this->identifier || $key == '`'.$this->identifier.'`') ? 'a.' : '').pSQL($key).' LIKE \'%'.pSQL($value).'%\' ';
- }
- }
- }
- }
- }
- elseif(Tools::isSubmit('submitFields') && $this->requiredDatabase && $this->tabAccess['add'] === '1' && $this->tabAccess['delete'] === '1')
- {
- 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);
- }
- }
- protected function updateAssoShop($id_object = false)
- {
- if (!Shop::isFeatureActive())
- return ;
- if (!$assos = AdminTab::getAssoShop($this->table, $id_object))
- return;
- Db::getInstance()->execute('DELETE FROM '._DB_PREFIX_.$this->table.'_'.$assos[1].($id_object ? ' WHERE `'.$this->identifier.'`='.(int)$id_object : ''));
- foreach ($assos[0] as $asso)
- Db::getInstance()->execute('INSERT INTO '._DB_PREFIX_.$this->table.'_'.$assos[1].' (`'.pSQL($this->identifier).'`, id_'.$assos[1].')
- VALUES('.(int)$asso['id_object'].', '.(int)$asso['id_'.$assos[1]].')');
- }
- protected static function getAssoShop($table, $id_object = false)
- {
- if (Shop::isTableAssociated($table))
- $type = 'shop';
- else
- return;
- $assos = array();
- foreach ($_POST as $k => $row)
- {
- if (!preg_match('/^checkBox'.Tools::toCamelCase($type, true).'Asso_'.$table.'_([0-9]+)?_([0-9]+)$/Ui', $k, $res))
- continue;
- $id_asso_object = (!empty($res[1]) ? $res[1] : $id_object);
- $assos[] = array('id_object' => (int)$id_asso_object, 'id_'.$type => (int)$res[2]);
- }
- return array($assos, $type);
- }
- /**
- * Update options and preferences
- *
- * @param string $token
- */
- protected function updateOptions($token)
- {
- if ($this->tabAccess['edit'] === '1')
- {
- $this->beforeUpdateOptions();
- $languages = Language::getLanguages(false);
- foreach ($this->optionsList as $category => $categoryData)
- {
- $fields = $categoryData['fields'];
- /* Check required fields */
- foreach ($fields as $field => $values)
- if (isset($values['required']) && $values['required'] && !empty($_POST['multishopOverrideOption'][$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[] = sprintf(Tools::displayError('field %s is required.'), $values['title']);
- }
- elseif (($value = Tools::getValue($field)) == false && (string)$value != '0')
- $this->_errors[] = sprintf(Tools::displayError('field %s is required.'), $values['title']);
- /* 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[] = sprintf(Tools::displayError('field %s is invalid.'), $values['title']);
- }
- elseif (Tools::getValue($field) && isset($values['validation']))
- if (!Validate::$values['validation'](Tools::getValue($field)))
- $this->_errors[] = sprintf(Tools::displayError('field %s is invalid.'), $values['title']);
- /* Default value if null */
- foreach ($fields as $field => $values)
- if (!Tools::getValue($field) && isset($values['default']))
- $_POST[$field] = $values['default'];
- if (!count($this->_errors))
- {
- foreach ($fields as $key => $options)
- {
- if (isset($options['visibility']) && $options['visibility'] > Shop::getContext())
- continue;
- if (Shop::isFeatureActive() && empty($_POST['multishopOverrideOption'][$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)
- {
- $val = (isset($options['cast']) ? $options['cast'](Tools::getValue($key.'_'.$language['id_lang'])) : Tools::getValue($key.'_'.$language['id_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.');
- }
- /**
- * Can be overriden
- */
- public function beforeUpdateOptions()
- {
- }
- protected function validateField($value, $field)
- {
- if (isset($field['validation']))
- {
- if ((!isset($field['empty']) || !$field['empty'] || (isset($field['empty']) && $field['empty'] && $value)) && method_exists('Validate', $field['validation']))
- {
- if (!Validate::$field['validation']($value))
- {
- $this->_errors[] = Tools::displayError($field['title'].' : Incorrect value');
- return false;
- }
- }
- }
- return true;
- }
- protected function uploadImage($id, $name, $dir, $ext = false, $width = NULL, $height = NULL)
- {
- if (isset($_FILES[$name]['tmp_name']) && !empty($_FILES[$name]['tmp_name']))
- {
- // Delete old image
- if (Validate::isLoadedObject($object = $this->loadObject()))
- $object->deleteImage();
- else
- return false;
- // Check image validity
- $max_size = isset($this->maxImageSize) ? $this->maxImageSize : 0;
- if ($error = ImageManager::validateUpload($_FILES[$name], Tools::getMaxUploadSize($max_size)))
- $this->_errors[] = $error;
- elseif (!($tmpName = tempnam(_PS_TMP_IMG_DIR_, 'PS')) || !move_uploaded_file($_FILES[$name]['tmp_name'], $tmpName))
- return false;
- else
- {
- $_FILES[$name]['tmp_name'] = $tmpName;
- // Copy new image
- if (!ImageManager::resize($tmpName, _PS_IMG_DIR_.$dir.$id.'.'.$this->imageType, (int)$width, (int)$height, ($ext ? $ext : $this->imageType)))
- $this->_errors[] = Tools::displayError('An error occurred while uploading image.');
- if (count($this->_errors))
- return false;
- if ($this->afterImageUpload())
- {
- unlink($tmpName);
- return true;
- }
- return false;
- }
- }
- return true;
- }
- /**
- * Overload this method for custom checking
- *
- * @param integer $id Object id used for deleting images
- * @return boolean
- */
- protected function postImage($id)
- {
- if (isset($this->fieldImageSettings['name']) && isset($this->fieldImageSettings['dir']))
- return $this->uploadImage($id, $this->fieldImageSettings['name'], $this->fieldImageSettings['dir'].'/');
- elseif (!empty($this->fieldImageSettings))
- foreach ($this->fieldImageSettings as $image)
- if (isset($image['name']) && isset($image['dir']))
- $this->uploadImage($id, $image['name'], $image['dir'].'/');
- return !count($this->_errors) ? true : false;
- }
- /**
- * Copy datas from $_POST to object
- *
- * @param object &$object Object
- * @param string $table Object table
- */
- protected function copyFromPost(&$object, $table)
- {
- /* Classical fields */
- foreach ($_POST as $key => $value)
- if (key_exists($key, $object) && $key != 'id_'.$table)
- {
- /* Do not take care of password field if empty */
- if ($key == 'passwd' && Tools::getValue('id_'.$table) && empty($value))
- continue;
- /* Automatically encrypt password in MD5 */
- if ($key == 'passwd' && !empty($value))
- $value = Tools::encrypt($value);
- $object->{$key} = $value;
- }
- /* Multilingual fields */
- $rules = call_user_func(array(get_class($object), 'getValidationRules'), get_class($object));
- if (count($rules['validateLang']))
- {
- $languages = Language::getLanguages(false);
- foreach ($languages as $language)
- foreach (array_keys($rules['validateLang']) as $field)
- if (isset($_POST[$field.'_'.(int)($language['id_lang'])]))
- $object->{$field}[(int)($language['id_lang'])] = $_POST[$field.'_'.(int)($language['id_lang'])];
- }
- }
- /**
- * Display errors
- */
- public function displayErrors()
- {
- if ($nbErrors = count($this->_errors) && $this->_includeContainer)
- {
- echo '<script type="text/javascript">
- $(document).ready(function() {
- $(\'#hideError\').unbind(\'click\').click(function(){
- $(\'.error\').hide(\'slow\', function (){
- $(\'.error\').remove();
- });
- return false;
- });
- });
- </script>
- <div class="error"><span style="float:right"><a id="hideError" href=""><img alt="X" src="../img/admin/close.png" /></a></span><img src="../img/admin/error2.png" />';
- if (count($this->_errors) == 1)
- echo $this->_errors[0];
- else
- {
- echo sprintf($this->l('%d errors'), $nbErrors).'<br /><ol>';
- foreach ($this->_errors as $error)
- echo '<li>'.$error.'</li>';
- echo '</ol>';
- }
- echo '</div>';
- }
- $this->includeSubTab('displayErrors');
- }
- /**
- * Display a warning message
- *
- * @param string $warn Warning message to display
- */
- public function displayWarning($warn)
- {
- $str_output = '';
- if (!empty($warn))
- {
- $str_output .= '<script type="text/javascript">
- $(document).ready(function() {
- $(\'#linkSeeMore\').unbind(\'click\').click(function(){
- $(\'#seeMore\').show(\'slow\');
- $(this).hide();
- $(\'#linkHide\').show();
- return false;
- });
- $(\'#linkHide\').unbind(\'click\').click(function(){
- $(\'#seeMore\').hide(\'slow\');
- $(this).hide();
- $(\'#linkSeeMore\').show();
- return false;
- });
- $(\'#hideWarn\').unbind(\'click\').click(function(){
- $(\'.warn\').hide(\'slow\', function (){
- $(\'.warn\').remove();
- });
- return false;
- });
- });
- </script>
- <div class="warn">';
- if (!is_array($warn))
- $str_output .= '<img src="../img/admin/warn2.png" />'.$warn;
- else
- { $str_output .= '<span style="float:right"><a id="hideWarn" href=""><img alt="X" src="../img/admin/close.png" /></a></span><img src="../img/admin/warn2.png" />'.
- (count($warn) > 1 ? $this->l('There are') : $this->l('There is')).' '.count($warn).' '.(count($warn) > 1 ? $this->l('warnings') : $this->l('warning'))
- .'<span style="margin-left:20px;" id="labelSeeMore">
- <a id="linkSeeMore" href="#" style="text-decoration:underline">'.$this->l('Click here to see more').'</a>
- <a id="linkHide" href="#" style="text-decoration:underline;display:none">'.$this->l('Hide warning').'</a></span><ul style="display:none;" id="seeMore">';
- foreach($warn as $val)
- $str_output .= '<li>'.$val.'</li>';
- $str_output .= '</ul>';
- }
- $str_output .= '</div>';
- }
- echo $str_output;
- }
- /**
- * Display confirmations
- */
- public function displayConf()
- {
- if ($conf = Tools::getValue('conf'))
- echo '
- <div class="conf">
- '.$this->_conf[(int)($conf)].'
- </div>';
- }
- /**
- * Get the current objects' list form the database
- *
- * @param integer $id_lang Language used for display
- * @param string $orderBy ORDER BY clause
- * @param string $_orderWay Order way (ASC, DESC)
- * @param integer $start Offset in LIMIT clause
- * @param integer $limit Row count in LIMIT clause
- */
- public function getList($id_lang, $orderBy = NULL, $orderWay = NULL, $start = 0, $limit = NULL, $id_lang_shop = false)
- {
- /* Manage default params values */
- if (empty($limit))
- $limit = ((!isset($this->context->cookie->{$this->table.'_pagination'})) ? $this->_pagination[1] : $limit = $this->context->cookie->{$this->table.'_pagination'});
- if (!Validate::isTableOrIdentifier($this->table))
- $this->_errors[] = Tools::displayError('Table name is invalid:').' "'.$this->table.'"';
- if (empty($orderBy))
- $orderBy = $this->context->cookie->__get($this->table.'Orderby') ? $this->context->cookie->__get($this->table.'Orderby') : $this->_defaultOrderBy;
- if (empty($orderWay))
- $orderWay = $this->context->cookie->__get($this->table.'Orderway') ? $this->context->cookie->__get($this->table.'Orderway') : 'ASC';
- $limit = (int)(Tools::getValue('pagination', $limit));
- $this->context->cookie->{$this->table.'_pagination'} = $limit;
- /* Check params validity */
- if (!Validate::isOrderBy($orderBy) || !Validate::isOrderWay($orderWay)
- OR !is_numeric($start) || !is_numeric($limit)
- OR !Validate::isUnsignedId($id_lang))
- die(Tools::displayError('get list params is not valid'));
- /* Determine offset from current page */
- if ((isset($_POST['submitFilter'.$this->table]) OR
- isset($_POST['submitFilter'.$this->table.'_x']) OR
- isset($_POST['submitFilter'.$this->table.'_y'])) AND
- !empty($_POST['submitFilter'.$this->table]) AND
- is_numeric($_POST['submitFilter'.$this->table]))
- $start = (int)($_POST['submitFilter'.$this->table] - 1) * $limit;
- /* Cache */
- $this->_lang = (int)($id_lang);
- $this->_orderBy = $orderBy;
- $this->_orderWay = Tools::strtoupper($orderWay);
- /* SQL table : orders, but class name is Order */
- $sqlTable = $this->table == 'order' ? 'orders' : $this->table…
Large files files are truncated, but you can click here to view the full file