* @copyright 2007-2016 PrestaShop SA * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0) * International Registered Trademark & Property of PrestaShop SA */ // @since 1.4.5.0 // add the following comment in a module file to skip it in translations // IGNORE_THIS_FILE_FOR_TRANSLATION abstract class AdminSelfTab { /** @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 $name; /** @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(); /** @var array Cache for query results */ protected $_list = array(); /** @var integer Number of results in list */ protected $_listTotal = 0; /** @var string WHERE clause determined by filter fields */ protected $_filter; /** @var string HAVING clause determined by filter fields */ protected $_filterHaving; /** @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 */ protected $maxImageSize = 2000000; /** @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; 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'); /** @var bool Redirect or not ater a creation */ protected $_redirect = true; protected $_languages = null; protected $_defaultFormLanguage = null; protected $_includeObj = array(); protected $_includeVars = false; protected $_includeContainer = true; public $ajax = false; public static $tabParenting = array( 'AdminProducts' => 'AdminCatalog', 'AdminCategories' => 'AdminCatalog', 'AdminCMS' => 'AdminCMSContent', 'AdminCMSCategories' => 'AdminCMSContent', 'AdminOrdersStates' => 'AdminStatuses', 'AdminAttributeGenerator' => 'AdminProducts', 'AdminAttributes' => 'AdminAttributesGroups', 'AdminFeaturesValues' => 'AdminFeatures', 'AdminReturnStates' => 'AdminStatuses', 'AdminStatsTab' => 'AdminStats' ); public function __construct() { global $cookie; $this->id = Tab::getCurrentTabId(); $this->_conf = array( 1 => $this->trans('Successful deletion.', array(), 'Admin.Notifications.Success'), 2 => $this->trans('Selection successfully deleted', array(), 'Modules.Autoupgrade.Admin'), 3 => $this->trans('Successful creation.', array(), 'Admin.Notifications.Success'), 4 => $this->trans('Successful update.', array(), 'Admin.Notifications.Success'), 5 => $this->trans('The new version check has been completed successfully', array(), 'Modules.Autoupgrade.Admin'), 6 => $this->trans('The settings have been successfully updated.', array(), 'Admin.Notifications.Success'), 7 => $this->trans('The image was successfully deleted.', array(), 'Admin.Notifications.Success'), 8 => $this->trans('The module was successfully downloaded.', array(), 'Admin.Notifications.Success'), 9 => $this->trans('The thumbnails were successfully regenerated.', array(), 'Admin.Notifications.Success'), 10 => $this->trans('Message sent to the customer', array(), 'Modules.Autoupgrade.Admin'), 11 => $this->trans('Comment successfully added.', array(), 'Admin.Notifications.Success'), 12 => $this->trans('Module(s) installed successfully.', array(), 'Admin.Modules.Notification'), 13 => $this->trans('Module(s) uninstalled successfully.', array(), 'Admin.Modules.Notification'), 14 => $this->trans('Language successfully copied', array(), 'Modules.Autoupgrade.Admin'), 15 => $this->trans('The translations have been successfully added.', array(), 'Admin.International.Notification'), 16 => $this->trans('The module transplanted successfully to the hook.', array(), 'Admin.Modules.Notification'), 17 => $this->trans('The module was successfully removed from the hook.', array(), 'Admin.Modules.Notification'), 18 => $this->trans('Successful upload.', array(), 'Admin.Notifications.Success'), 19 => $this->trans('Duplication was completed successfully.', array(), 'Admin.Notifications.Success'), 20 => $this->trans('The translation was added successfully, but the language has not been created.', array(), 'Admin.International.Notification'), 21 => $this->trans('Module reset successfully.', array(), 'Admin.Modules.Notification'), 22 => $this->trans('Module deleted successfully.', array(), 'Admin.Modules.Notification'), 23 => $this->trans('Localization pack imported successfully.', array(), 'Admin.International.Notification'), 24 => $this->trans('Refund Successful', array(), 'Modules.Autoupgrade.Admin'), 25 => $this->trans('Images successfully moved', array(), 'Modules.Autoupgrade.Admin')); 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 = Tools14::getAdminToken($className.(int)$this->id.(int)$cookie->id_employee); } private function getConf($fields, $languages) { $tab = array(); foreach ($fields as $key => $field) { if ($field['type'] == 'textLang') { foreach ($languages as $language) { $tab[$key.'_'.$language['id_lang']] = Tools14::getValue($key.'_'.$language['id_lang'], Configuration::get($key, $language['id_lang'])); } } else { $tab[$key] = Tools14::getValue($key, Configuration::get($key)); } } $tab['__PS_BASE_URI__'] = __PS_BASE_URI__; $tab['_MEDIA_SERVER_1_'] = defined('_MEDIA_SERVER_1_')?_MEDIA_SERVER_1_:''; $tab['PS_THEME'] = _THEME_NAME_; if (defined('_DB_TYPE_')) { $tab['db_type'] = _DB_TYPE_; } else { $tab['db_type'] = 'mysql'; } $tab['db_server'] = _DB_SERVER_; $tab['db_name'] = _DB_NAME_; $tab['db_prefix'] = _DB_PREFIX_; $tab['db_user'] = _DB_USER_; $tab['db_passwd'] = ''; return $tab; } private function getDivLang($fields) { $tab = array(); foreach ($fields as $key => $field) { if ($field['type'] == 'textLang' || $field['type'] == 'selectLang') { $tab[] = $key; } } return implode('ยค', $tab); } private function getVal($conf, $key) { return Tools14::getValue($key, (isset($conf[$key]) ? $conf[$key] : '')); } protected function _displayForm($name, $fields, $tabname, $size, $icon) { global $currentIndex; $defaultLanguage = (int)(Configuration::get('PS_LANG_DEFAULT')); $languages = Language::getLanguages(false); $confValues = $this->getConf($fields, $languages); $divLangName = $this->getDivLang($fields); $required = false; echo '
'.$tabname.''; foreach ($fields as $key => $field) { /* Specific line for e-mails settings */ if (get_class($this) == 'Adminemails' and $key == 'PS_MAIL_SERVER') { echo '
'; } if (isset($field['required']) and $field['required']) { $required = true; } $val = $this->getVal($confValues, $key); if (!in_array($field['type'], array('image', 'radio', 'container', 'container_end')) or isset($field['show'])) { echo '
'.($field['title'] ? '' : '').'
'; } /* Display the appropriate input type for each field */ switch ($field['type']) { case 'disabled': echo $field['disabled'];break; case 'select': echo ' '; break; case 'selectLang': foreach ($languages as $language) { echo '
'; } $this->displayFlags($languages, $defaultLanguage, $divLangName, $key); break; case 'bool': echo ' '; break; case 'radio': foreach ($field['choices'] as $cValue => $cKey) { echo '
'; } echo '
'; break; case 'image': echo ' '; if ($name == 'themes') { echo ' '; } $i = 0; foreach ($field['list'] as $theme) { echo ''; if (isset($field['max']) and ($i+1) % $field['max'] == 0) { echo ''; } $i++; } echo '
'.$this->trans('In order to use a new theme, please follow these steps:', array(), 'Modules.Autoupgrade.Admin').'

'; break; case 'price': $default_currency = new Currency((int)(Configuration::get("PS_CURRENCY_DEFAULT"))); echo $default_currency->getSign('left').''.$default_currency->getSign('right').' '.$this->trans('(tax excl.)', array(), 'Admin.Global'); break; case 'textLang': foreach ($languages as $language) { echo '
'; } $this->displayFlags($languages, $defaultLanguage, $divLangName, $key); break; case 'file': if (isset($field['thumb']) and $field['thumb'] and $field['thumb']['pos'] == 'before') { echo ''.$field['title'].'
'; } echo ''; break; case 'textarea': echo ''; break; case 'container': echo '
'; break; case 'container_end': echo(isset($field['content']) === true ? $field['content'] : '').'
'; break; case 'maintenance_ip': echo ''.(isset($field['next']) ? ' '.strval($field['next']) : '').'  '.$this->trans('Add my IP', array(), 'Modules.Autoupgrade.Admin').''; break; case 'text': default: echo ''.(isset($field['next']) ? ' '.strval($field['next']) : ''); } echo((isset($field['required']) and $field['required'] and !in_array($field['type'], array('image', 'radio'))) ? ' *' : ''); echo(isset($field['desc']) ? '

'.((isset($field['thumb']) and $field['thumb'] and $field['thumb']['pos'] == 'after') ? ''.$field['title'].'' : '').$field['desc'].'

' : ''); if (!in_array($field['type'], array('image', 'radio', 'container', 'container_end')) or isset($field['show'])) { echo '
'; } } /* End of specific div for e-mails settings */ if (get_class($this) == 'Adminemails') { echo '
'; } if (!is_writable(_PS_ADMIN_DIR_.'/../app/config/parameters.php') and $name == 'themes') { echo '

'.$this->trans('If you change the theme, the parameters.php file must be writable (CHMOD 755 / 777)', array(), 'Modules.Autoupgrade.Admin').'

'; } echo '
'.($required ? '
* '.$this->trans('Required field', array(), 'Modules.Autoupgrade.Admin').'
' : '').'
'; } /** * 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) { global $_LANGADM; if (empty($_LANGADM)) { $_LANGADM = array(); } // if the class is extended by a module, use modules/[module_name]/xx.php lang file $currentClass = get_class($this); if (class_exists('Module') and method_exists('Module', 'getModuleNameFromClass')) { if (Module::getModuleNameFromClass($currentClass)) { $string = str_replace('\'', '\\\'', $string); return Module::findTranslation(Module::$classInModule[$currentClass], $string, $currentClass); } } 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))); } public function getTranslator() { return Context::getContext()->getTranslator(); } protected function trans($id, array $parameters = array(), $domain = null, $locale = null) { $parameters['legacy'] = 'htmlspecialchars'; return $this->getTranslator()->trans($id, $parameters, $domain, $locale); } /** * ajaxDisplay is the default ajax return sytem * * @return void */ public function displayAjax() { } /** * Manage page display (form, list...) * * @global string $currentIndex Current URL in order to keep current Tab */ public function display() { global $currentIndex, $cookie; // Include other tab in current tab if ($this->includeSubTab('display', array('submitAdd2', 'add', 'update', 'view'))) { } // Include current tab elseif ((Tools14::getValue('submitAdd'.$this->table) and sizeof($this->_errors)) or isset($_GET['add'.$this->table])) { if ($this->tabAccess['add'] === '1') { $this->displayForm(); if ($this->tabAccess['view']) { echo '

'.((Tools14::getValue('back')) ? $this->trans('Back', array(), 'Modules.Autoupgrade.Admin') : $this->trans('Back to list', array(), 'Admin.Actions')).'
'; } } else { echo $this->trans('You do not have permission to add here', array(), 'Modules.Autoupgrade.Admin'); } } elseif (isset($_GET['update'.$this->table])) { if ($this->tabAccess['edit'] === '1' or ($this->table == 'employee' and $cookie->id_employee == Tools14::getValue('id_employee'))) { $this->displayForm(); if ($this->tabAccess['view']) { echo '

'.((Tools14::getValue('back')) ? $this->trans('Back', array(), 'Modules.Autoupgrade.Admin') : $this->trans('Back to list', array(), 'Admin.Actions')).'
'; } } else { echo $this->trans('You do not have permission to edit this.', array(), 'Admin.Notifications.Error'); } } elseif (isset($_GET['view'.$this->table])) { $this->{'view'.$this->table}(); } else { $this->getList((int)($cookie->id_lang)); $this->displayList(); $this->displayOptionsList(); $this->displayRequiredFields(); $this->includeSubTab('display'); } } public function displayRequiredFields() { global $currentIndex; if (!$this->tabAccess['add'] or !$this->tabAccess['delete'] === '1' or !$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 '

'.$this->trans('Set required fields for this section', array(), 'Modules.Autoupgrade.Admin').'

'; } public function includeSubTab($methodname, $actions = array()) { if (!isset($this->_includeTab) or !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).'\'') and 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) and is_array($extraVars)) { foreach ($extraVars as $varKey => $varValue) { $adminTab->$varKey = $varValue; } } /* Actions management */ foreach ($actions as $action) { switch ($action) { case 'submitAdd1': if (Tools14::getValue('submitAdd'.$adminTab->table)) { $ok_inc = true; } break; case 'submitAdd2': if (Tools14::getValue('submitAdd'.$adminTab->table) and sizeof($adminTab->_errors)) { $ok_inc = true; } break; case 'submitDel': if (Tools14::getValue('submitDel'.$adminTab->table)) { $ok_inc = true; } break; case 'submitFilter': if (Tools14::isSubmit('submitFilter'.$adminTab->table)) { $ok_inc = true; } case 'submitReset': if (Tools14::isSubmit('submitReset'.$adminTab->table)) { $ok_inc = true; } default: if (isset($_GET[$action.$adminTab->table])) { $ok_inc = true; } } } $inc = false; if ((isset($ok_inc) and $ok_inc) or !sizeof($actions)) { if (!$adminTab->viewAccess()) { echo $this->trans('Access denied', array(), 'Admin.Notifications.Error'); return false; } if (!sizeof($actions)) { if (($methodname == 'displayErrors' and sizeof($adminTab->_errors)) or $methodname != 'displayErrors') { echo(isset($this->_includeTabTitle[$key]) ? '

'.$this->_includeTabTitle[$key].'

' : ''); } } 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 ((sizeof($rules['requiredLang']) or sizeof($rules['sizeLang']) or sizeof($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 = Tools14::getValue($field)) == false and (string)$value != '0') { if (!Tools14::getValue($this->identifier) or ($field != 'passwd' and $field != 'no-picture')) { $this->_errors[] = $this->trans('The field named %s is required.', array(call_user_func(array($className, 'displayFieldName'), $field, $className)), 'Modules.Autoupgrade.Admin'); } } } /* Checking for multilingual required fields */ foreach ($rules['requiredLang'] as $fieldLang) { if (($empty = Tools14::getValue($fieldLang.'_'.$defaultLanguage->id)) === false or $empty !== '0' and empty($empty)) { $this->_errors[] = $this->trans( 'The field named %fieldname% is required at least in the %languagename% language.', array( '%fieldname%' => call_user_func(array($className, 'displayFieldName'), $fieldLang, $className), '%languagename%' => $defaultLanguage->name, ), 'Modules.Autoupgrade.Admin' ); } } /* Checking for maximum fields sizes */ foreach ($rules['size'] as $field => $maxLength) { if (Tools14::getValue($field) !== false and Tools14::strlen(Tools14::getValue($field)) > $maxLength) { $this->_errors[] = $this->trans( 'The field named %fieldname% is too long (%charsnumber% chars max).', array( '%fieldname%' => call_user_func(array($className, 'displayFieldName'), $field, $className), '%charsnumber%' => $maxLength, ), 'Modules.Autoupgrade.Admin' ); } } /* Checking for maximum multilingual fields size */ foreach ($rules['sizeLang'] as $fieldLang => $maxLength) { foreach ($languages as $language) { if (Tools14::getValue($fieldLang.'_'.$language['id_lang']) !== false and Tools14::strlen(Tools14::getValue($fieldLang.'_'.$language['id_lang'])) > $maxLength) { $this->_errors[] = $this->trans( 'Your entry in field %fieldname% (language %languagename%) exceeds max length %charsnumber% chars (incl. HTML tags).', array( '%fieldname%' => call_user_func(array($className, 'displayFieldName'), $fieldLang, $className), '%languagename%' => $language['name'], '%charsnumber%' => $maxLength, ), 'Modules.Autoupgrade.Admin' ); } } } /* Overload this method for custom checking */ $this->_childValidation(); /* Checking for fields validity */ foreach ($rules['validate'] as $field => $function) { if (($value = Tools14::getValue($field)) !== false and ($field != 'passwd')) { if (!Validate::$function($value)) { $this->_errors[] = $this->trans('The %s field is invalid.', array(''.call_user_func(array($className, 'displayFieldName'), $field, $className).''), 'Admin.Notifications.Error'); } } } /* Checking for passwd_old validity */ if (($value = Tools14::getValue('passwd')) != false) { if ($className == 'Employee' and !Validate::isPasswdAdmin($value)) { $this->_errors[] = $this->trans('The %s field is invalid.', array(''.call_user_func(array($className, 'displayFieldName'), 'passwd', $className).''), 'Admin.Notifications.Error'); } elseif ($className == 'Customer' and !Validate::isPasswd($value)) { $this->_errors[] = $this->trans('The %s field is invalid.', array(''.call_user_func(array($className, 'displayFieldName'), 'passwd', $className).''), 'Admin.Notifications.Error'); } } /* Checking for multilingual fields validity */ foreach ($rules['validateLang'] as $fieldLang => $function) { foreach ($languages as $language) { if (($value = Tools14::getValue($fieldLang.'_'.$language['id_lang'])) !== false and !empty($value)) { if (!Validate::$function($value)) { $this->_errors[] = $this->trans('The %s field is invalid.', array(''.call_user_func(array($className, 'displayFieldName'), $fieldLang, $className).' ('.$language['name'].')'), 'Admin.Notifications.Error'); } } } } } /** * Overload this method for custom checking */ protected function _childValidation() { } /** * Overload this method for custom checking * * @param integer $id Object id used for deleting images * TODO This function will soon be deprecated. Use ObjectModel->deleteImage instead. */ public function deleteImage($id) { $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) and !unlink(_PS_IMG_DIR_.$dir.$id.'.'.$this->imageType)) { return false; } } if (file_exists(_PS_TMP_IMG_DIR_.$this->table.'_'.$id.'.'.$this->imageType) and !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) and !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) and !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 * * @global string $currentIndex Current URL in order to keep current Tab */ public function postProcess() { global $currentIndex, $cookie; if (!isset($this->table)) { return false; } // set token $token = Tools14::getValue('token') ? Tools14::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())) { Tools14::redirectAdmin($currentIndex.'&add'.$this->table.'&'.$this->identifier.'='.Tools14::getValue($this->identifier).'&conf=7&token='.$token); } } $this->_errors[] = $this->trans('An error occurred during image deletion (cannot load object).', array(), 'Modules.Autoupgrade.Admin'); } /* Delete object */ elseif (isset($_GET['delete'.$this->table])) { if ($this->tabAccess['delete'] === '1') { if (Validate::isLoadedObject($object = $this->loadObject()) and isset($this->fieldImageSettings)) { // check if request at least one object with noZeroObject if (isset($object->noZeroObject) and sizeof(call_user_func(array($this->className, $object->noZeroObject))) <= 1) { $this->_errors[] = $this->trans('You need at least one object.', array(), 'Modules.Autoupgrade.Admin').' '.$this->table.'
'.$this->trans('You cannot delete all of the items.', array(), 'Modules.Autoupgrade.Admin'); } else { if ($this->deleted) { $object->deleteImage(); $object->deleted = 1; if ($object->update()) { Tools14::redirectAdmin($currentIndex.'&conf=1&token='.$token); } } elseif ($object->delete()) { Tools14::redirectAdmin($currentIndex.'&conf=1&token='.$token); } $this->_errors[] = $this->trans('An error occurred during deletion.', array(), 'Modules.Autoupgrade.Admin'); } } else { $this->_errors[] = $this->trans('An error occurred while deleting the object.', array(), 'Admin.Notifications.Error').' '.$this->table.' '.$this->trans('(cannot load object)', array(), 'Modules.Autoupgrade.Admin'); } } else { $this->_errors[] = $this->trans('You do not have permission to delete this.', array(), 'Admin.Notifications.Error'); } } /* Change object statuts (active, inactive) */ elseif ((isset($_GET['status'.$this->table]) or isset($_GET['status'])) and Tools14::getValue($this->identifier)) { if ($this->tabAccess['edit'] === '1') { if (Validate::isLoadedObject($object = $this->loadObject())) { if ($object->toggleStatus()) { Tools14::redirectAdmin($currentIndex.'&conf=5'.((($id_category = (int)(Tools14::getValue('id_category'))) and Tools14::getValue('id_product')) ? '&id_category='.$id_category : '').'&token='.$token); } else { $this->_errors[] = $this->trans('An error occurred while updating the status.', array(), 'Admin.Notifications.Error'); } } else { $this->_errors[] = $this->trans('An error occurred while updating the status for an object.', array(), 'Admin.Catalog.Notification').' '.$this->table.' '.$this->trans('(cannot load object)', array(), 'Modules.Autoupgrade.Admin'); } } else { $this->_errors[] = $this->trans('You do not have permission to edit this.', array(), 'Admin.Notifications.Error'); } } /* Move an object */ elseif (isset($_GET['position'])) { if ($this->tabAccess['edit'] !== '1') { $this->_errors[] = $this->trans('You do not have permission to edit this.', array(), 'Admin.Notifications.Error'); } elseif (!Validate::isLoadedObject($object = $this->loadObject())) { $this->_errors[] = $this->trans('An error occurred while updating the status for an object.', array(), 'Admin.Catalog.Notification').' '.$this->table.' '.$this->trans('(cannot load object)', array(), 'Modules.Autoupgrade.Admin'); } elseif (!$object->updatePosition((int)(Tools14::getValue('way')), (int)(Tools14::getValue('position')))) { $this->_errors[] = $this->trans('Failed to update the position.', array(), 'Admin.Notifications.Error'); } else { Tools14::redirectAdmin($currentIndex.'&'.$this->table.'Orderby=position&'.$this->table.'Orderway=asc&conf=5'.(($id_category = (int)(Tools14::getValue($this->identifier))) ? ('&'.$this->identifier.'='.$id_category) : '').'&token='.$token); } Tools14::redirectAdmin($currentIndex.'&'.$this->table.'Orderby=position&'.$this->table.'Orderway=asc&conf=5'.((($id_category = (int)(Tools14::getValue('id_category'))) and Tools14::getValue('id_product')) ? '&id_category='.$id_category : '').'&token='.$token); } /* Delete multiple objects */ elseif (Tools14::getValue('submitDel'.$this->table)) { if ($this->tabAccess['delete'] === '1') { if (isset($_POST[$this->table.'Box'])) { $object = new $this->className(); if (isset($object->noZeroObject) and // Check if all object will be deleted (sizeof(call_user_func(array($this->className, $object->noZeroObject))) <= 1 or sizeof($_POST[$this->table.'Box']) == sizeof(call_user_func(array($this->className, $object->noZeroObject))))) { $this->_errors[] = $this->trans('You need at least one object.', array(), 'Admin.Notifications.Error').' '.$this->table.'
'.$this->trans('You cannot delete all of the items.', array(), 'Admin.Notifications.Error'); } else { $result = true; if ($this->deleted) { foreach (Tools14::getValue($this->table.'Box') as $id) { $toDelete = new $this->className($id); $toDelete->deleted = 1; $result = $result and $toDelete->update(); } } else { $result = $object->deleteSelection(Tools14::getValue($this->table.'Box')); } if ($result) { Tools14::redirectAdmin($currentIndex.'&conf=2&token='.$token); } $this->_errors[] = $this->trans('An error occurred while deleting this selection.', array(), 'Admin.Notifications.Error'); } } else { $this->_errors[] = $this->trans('You must select at least one element to delete.', array(), 'Admin.Notifications.Error'); } } else { $this->_errors[] = $this->trans('You do not have permission to delete this.', array(), 'Admin.Notifications.Error'); } } /* Create or update an object */ elseif (Tools14::getValue('submitAdd'.$this->table)) { /* Checking fields validity */ $this->validateRules(); if (!sizeof($this->_errors)) { $id = (int)(Tools14::getValue($this->identifier)); /* Object update */ if (isset($id) and !empty($id)) { if ($this->tabAccess['edit'] === '1' or ($this->table == 'employee' and $cookie->id_employee == Tools14::getValue('id_employee') and Tools14::isSubmit('updateemployee'))) { $object = new $this->className($id); if (Validate::isLoadedObject($object)) { /* Specific to objects which must not be deleted */ if ($this->deleted and $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 (!$result) { $this->_errors[] = $this->trans('An error occurred while updating an object.', array(), 'Admin.Notifications.Error').' '.$this->table.' ('.Db::getInstance()->getMsgError().')'; } elseif ($this->postImage($object->id) and !sizeof($this->_errors)) { $parent_id = (int)(Tools14::getValue('id_parent', 1)); // Specific back redirect if ($back = Tools14::getValue('back')) { Tools14::redirectAdmin(urldecode($back).'&conf=4'); } // Specific scene feature if (Tools14::getValue('stay_here') == 'on' || Tools14::getValue('stay_here') == 'true' || Tools14::getValue('stay_here') == '1') { Tools14::redirectAdmin($currentIndex.'&'.$this->identifier.'='.$object->id.'&conf=4&updatescene&token='.$token); } // Save and stay on same form if (Tools14::isSubmit('submitAdd'.$this->table.'AndStay')) { Tools14::redirectAdmin($currentIndex.'&'.$this->identifier.'='.$object->id.'&conf=4&update'.$this->table.'&token='.$token); } // Save and back to parent if (Tools14::isSubmit('submitAdd'.$this->table.'AndBackToParent')) { Tools14::redirectAdmin($currentIndex.'&'.$this->identifier.'='.$parent_id.'&conf=4&token='.$token); } // Default behavior (save and back) Tools14::redirectAdmin($currentIndex.($parent_id ? '&'.$this->identifier.'='.$object->id : '').'&conf=4&token='.$token); } } else { $this->_errors[] = $this->trans('An error occurred while updating an object.', array(), 'Admin.Notifications.Error').' '.$this->table.' '.$this->trans('(cannot load object)', array(), 'Modules.Autoupgrade.Admin'); } } else { $this->_errors[] = $this->trans('You do not have permission to edit this.', array(), 'Admin.Notifications.Error'); } } /* Object creation */ else { if ($this->tabAccess['add'] === '1') { $object = new $this->className(); $this->copyFromPost($object, $this->table); if (!$object->add()) { $this->_errors[] = $this->trans('An error occurred while creating an object.', array(), 'Admin.Notifications.Error').' '.$this->table.' ('.mysql_error().')'; } elseif (($_POST[$this->identifier] = $object->id /* voluntary */) and $this->postImage($object->id) and !sizeof($this->_errors) and $this->_redirect) { $parent_id = (int)(Tools14::getValue('id_parent', 1)); $this->afterAdd($object); // Save and stay on same form if (Tools14::isSubmit('submitAdd'.$this->table.'AndStay')) { Tools14::redirectAdmin($currentIndex.'&'.$this->identifier.'='.$object->id.'&conf=3&update'.$this->table.'&token='.$token); } // Save and back to parent if (Tools14::isSubmit('submitAdd'.$this->table.'AndBackToParent')) { Tools14::redirectAdmin($currentIndex.'&'.$this->identifier.'='.$parent_id.'&conf=3&token='.$token); } // Default behavior (save and back) Tools14::redirectAdmin($currentIndex.($parent_id ? '&'.$this->identifier.'='.$object->id : '').'&conf=3&token='.$token); } } else { $this->_errors[] = $this->trans('You do not have permission to add here.', array(), 'Modules.Autoupgrade.Admin'); } } } $this->_errors = array_unique($this->_errors); } /* Cancel all filters for this tab */ elseif (isset($_POST['submitReset'.$this->table])) { $filters = $cookie->getFamily($this->table.'Filter_'); foreach ($filters as $cookieKey => $filter) { if (strncmp($cookieKey, $this->table.'Filter_', 7 + Tools14::strlen($this->table)) == 0) { $key = substr($cookieKey, 7 + Tools14::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($cookie->$cookieKey); } } } if (isset($cookie->{'submitFilter'.$this->table})) { unset($cookie->{'submitFilter'.$this->table}); } if (isset($cookie->{$this->table.'Orderby'})) { unset($cookie->{$this->table.'Orderby'}); } if (isset($cookie->{$this->table.'Orderway'})) { unset($cookie->{$this->table.'Orderway'}); } unset($_POST); } /* Submit options list */ elseif (Tools14::getValue('submitOptions'.$this->table)) { $this->updateOptions($token); } /* Manage list filtering */ elseif (Tools14::isSubmit('submitFilter'.$this->table) or $cookie->{'submitFilter'.$this->table} !== false) { $_POST = array_merge($cookie->getFamily($this->table.'Filter_'), (isset($_POST) ? $_POST : array())); foreach ($_POST as $key => $value) { /* Extracting filters from $_POST on key filter_ */ if ($value != null and !strncmp($key, $this->table.'Filter_', 7 + Tools14::strlen($this->table))) { $key = Tools14::substr($key, 7 + Tools14::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' or $type == 'datetime') and is_string($value)) { $value = unserialize($value); } $key = isset($tmpTab[1]) ? $tmpTab[0].'.`'.$tmpTab[1].'`' : '`'.$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]) and !empty($value[0])) { if (!Validate::isDate($value[0])) { $this->_errors[] = $this->trans('The \'From\' date format is invalid (YYYY-MM-DD)', array(), 'Admin.Notifications.Error'); } else { $sqlFilter .= ' AND '.pSQL($key).' >= \''.pSQL(Tools14::dateFrom($value[0])).'\''; } } if (isset($value[1]) and !empty($value[1])) { if (!Validate::isDate($value[1])) { $this->_errors[] = $this->trans('The \'To\' date format is invalid (YYYY-MM-DD)', array(), 'Admin.Notifications.Error'); } else { $sqlFilter .= ' AND '.pSQL($key).' <= \''.pSQL(Tools14::dateTo($value[1])).'\''; } } } else { $sqlFilter .= ' AND '; if ($type == 'int' or $type == 'bool') { $sqlFilter .= (($key == $this->identifier or $key == '`'.$this->identifier.'`' or $key == '`active`') ? 'a.' : '').pSQL($key).' = '.(int)($value).' '; } elseif ($type == 'decimal') { $sqlFilter .= (($key == $this->identifier or $key == '`'.$this->identifier.'`') ? 'a.' : '').pSQL($key).' = '.(float)($value).' '; } elseif ($type == 'select') { $sqlFilter .= (($key == $this->identifier or $key == '`'.$this->identifier.'`') ? 'a.' : '').pSQL($key).' = \''.pSQL($value).'\' '; } else { $sqlFilter .= (($key == $this->identifier or $key == '`'.$this->identifier.'`') ? 'a.' : '').pSQL($key).' LIKE \'%'.pSQL($value).'%\' '; } } } } } } elseif (Tools14::isSubmit('submitFields') and $this->requiredDatabase and $this->tabAccess['add'] === '1' and $this->tabAccess['delete'] === '1') { if (!is_array($fields = Tools14::getValue('fieldsBox'))) { $fields = array(); } $object = new $this->className(); if (!$object->addFieldsRequiredDatabase($fields)) { $this->_errors[] = $this->trans('Error in updating required fields', array(), 'Modules.Autoupgrade.Admin'); } else { Tools14::redirectAdmin($currentIndex.'&conf=4&token='.$token); } } } protected function updateOptions($token) { global $currentIndex; if ($this->tabAccess['edit'] === '1') { foreach ($this->_fieldsOptions as $key => $field) { if ($this->validateField(Tools14::getValue($key), $field)) { // check if a method updateOptionFieldName is available $method_name = 'updateOption'.Tools14::toCamelCase($key, true); if (method_exists($this, $method_name)) { $this->$method_name(Tools14::getValue($key)); } elseif ($field['type'] == 'textLang' or $field['type'] == 'textareaLang') { $languages = Language::getLanguages(false); $list = array(); foreach ($languages as $language) { $val = (isset($field['cast']) ? $field['cast'](Tools14::getValue($key.'_'.$language['id_lang'])) : Tools14::getValue($key.'_'.$language['id_lang'])); if (Validate::isCleanHtml($val)) { $list[$language['id_lang']] = $val; } else { $this->_errors[] = $this->trans( 'Can not add configuration %configurationkey% for lang %isocode%', array( '%configurationkey%' => $key, '%isocode%' => Language::getIsoById((int)$language['id_lang']), ), 'Modules.Autoupgrade.Admin' ); } } Configuration::updateValue($key, $list); } else { $val = (isset($field['cast']) ? $field['cast'](Tools14::getValue($key)) : Tools14::getValue($key)); if (Validate::isCleanHtml($val)) { Configuration::updateValue($key, $val); } else { $this->_errors[] = $this->trans('Can not add configuration %configurationkey%', array('%configurationkey%' => $key), 'Modules.Autoupgrade.Admin'); } } } } if (count($this->_errors) <= 0) { Tools14::redirectAdmin($currentIndex.'&conf=6&token='.$token); } } else { $this->_errors[] = $this->trans('You do not have permission to edit this.', array(), 'Admin.Notifications.Error'); } } protected function validateField($value, $field) { if (isset($field['validation'])) { $validate = new Validate(); if (method_exists($validate, $field['validation'])) { if (!Validate::$field['validation']($value)) { $this->_errors[] = $this->trans('%title% : Incorrect value', array('%title%' => $field['title']), 'Modules.Autoupgrade.Admin'); return false; } } } return true; } protected function uploadImage($id, $name, $dir, $ext = false) { if (isset($_FILES[$name]['tmp_name']) and !empty($_FILES[$name]['tmp_name'])) { // Delete old image if (Validate::isLoadedObject($object = $this->loadObject())) { $object->deleteImage(); } else { return false; } // Check image validity if ($error = checkImage($_FILES[$name], $this->maxImageSize)) { $this->_errors[] = $error; } elseif (!$tmpName = tempnam(_PS_TMP_IMG_DIR_, 'PS') or !move_uploaded_file($_FILES[$name]['tmp_name'], $tmpName)) { return false; } else { $_FILES[$name]['tmp_name'] = $tmpName; // Copy new image if (!imageResize($tmpName, _PS_IMG_DIR_.$dir.$id.'.'.$this->imageType, null, null, ($ext ? $ext : $this->imageType))) { $this->_errors[] = $this->trans('An error occurred while uploading the image.', array(), 'Admin.Notifications.Error'); } if (sizeof($this->_errors)) { return false; } if ($this->afterImageUpload()) { unlink($tmpName); return true; } return false; } } return true; } protected function uploadIco($name, $dest) { if (isset($_FILES[$name]['tmp_name']) and !empty($_FILES[$name]['tmp_name'])) { /* Check ico validity */ if ($error = checkIco($_FILES[$name], $this->maxImageSize)) { $this->_errors[] = $error; } /* Copy new ico */ elseif (!copy($_FILES[$name]['tmp_name'], $dest)) { $this->_errors[] = $this->trans( 'An error occurred while uploading favicon: %iconname% to %destination%', array( '%iconname%' => $_FILES[$name]['tmp_name'], '%destination%' => $dest, ), 'Modules.Autoupgrade.Admin' ); } } return !sizeof($this->_errors) ? true : false; } /** * 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']) and 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']) and isset($image['dir'])) { $this->uploadImage($id, $image['name'], $image['dir'].'/'); } } } return !sizeof($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) and $key != 'id_'.$table) { /* Do not take care of password field if empty */ if ($key == 'passwd' and Tools14::getValue('id_'.$table) and empty($value)) { continue; } /* Automatically encrypt password in MD5 */ if ($key == 'passwd' and !empty($value)) { $value = Tools14::encrypt($value); } $object->{$key} = $value; } } /* Multilingual fields */ $rules = call_user_func(array(get_class($object), 'getValidationRules'), get_class($object)); if (sizeof($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) and $this->_includeContainer) { echo '
X'; if (count($this->_errors) == 1) { echo $this->_errors[0]; } else { echo $nbErrors.' '.$this->trans('errors', array(), 'Modules.Autoupgrade.Admin').'
    '; foreach ($this->_errors as $error) { echo '
  1. '.$error.'
  2. '; } echo '
'; } echo '
'; } $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 .= '
'; if (!is_array($warn)) { if (file_exists(__PS_BASE_URI__.'img/admin/warn2.png')) { $str_output .= ''; } else { $str_output .= ''; } $str_output .= $warn; } else { $str_output .= 'X'; if (count($warn) > 1) { $str_output .= $this->trans('There are %count% warnings', array('%count%' => count($warn)), 'Modules.Autoupgrade.Admin'); } else { $str_output .= $this->trans('There is %count% warning', array('%count%' => count($warn)), 'Modules.Autoupgrade.Admin'); } $str_output .= ' '.$this->trans('Click here to see more', array(), 'Modules.Autoupgrade.Admin').' '; } $str_output .= '
'; } echo $str_output; } /** * Display confirmations */ public function displayConf() { if ($conf = Tools14::getValue('conf')) { echo '
'.$this->_conf[(int)($conf)].'
'; } } public function displayTop() { } protected function _displayEnableLink($token, $id, $value, $active, $id_category = null, $id_product = null) { global $currentIndex; echo ' '.($value ? $this->trans('Enabled', array(), 'Admin.Global') : $this->trans('Disabled', array(), 'Admin.Global')).''; } protected function _displayDuplicate($token = null, $id) { global $currentIndex; $_cacheLang['Duplicate'] = $this->trans('Duplicate', array(), 'Admin.Actions'); $_cacheLang['Copy images too?'] = $this->trans('This will copy the images too. If you wish to proceed, click "Yes". If not, click "No".', array(), 'Admin.Catalog.Notification'); $duplicate = $currentIndex.'&'.$this->identifier.'='.$id.'&duplicate'.$this->table; echo ' '.$_cacheLang['Duplicate'].''; } protected function _displayViewLink($token = null, $id) { global $currentIndex; $_cacheLang['View'] = $this->trans('View', array(), 'Admin.Actions'); echo ' '.$_cacheLang['View'].''; } protected function _displayEditLink($token = null, $id) { global $currentIndex; $_cacheLang['Edit'] = $this->trans('Edit', array(), 'Admin.Actions'); echo ' '; } protected function _displayDeleteLink($token = null, $id) { global $currentIndex; $_cacheLang['Delete'] = $this->trans('Delete', array(), 'Admin.Actions'); $_cacheLang['DeleteItem'] = $this->trans('Delete item #', array(), 'Modules.Autoupgrade.Admin'); echo ' '.$_cacheLang['Delete'].''; } /** * Close list table and submit button */ public function displayListFooter($token = null) { echo ''; if ($this->delete) { echo '

'; } echo ' '; if (isset($this->_includeTab) and sizeof($this->_includeTab)) { echo '

'; } } /** * Options lists */ public function displayOptionsList() { global $currentIndex, $cookie, $tab; if (!isset($this->_fieldsOptions) or !sizeof($this->_fieldsOptions)) { return false; } $defaultLanguage = (int)Configuration::get('PS_LANG_DEFAULT'); $this->_languages = Language::getLanguages(false); $tab = Tab::getTab((int)$cookie->id_lang, Tab::getIdFromClassName($tab)); echo '

'; echo(isset($this->optionTitle) ? '

'.$this->optionTitle.'

' : ''); echo '
'; echo(isset($this->optionTitle) ? ' ' .$this->optionTitle.'' : ''); foreach ($this->_fieldsOptions as $key => $field) { $val = Tools14::getValue($key, Configuration::get($key)); if ($field['type'] != 'textLang') { if (!Validate::isCleanHtml($val)) { $val = Configuration::get($key); } } echo '
'; switch ($field['type']) { case 'select': echo ''; break; case 'bool': echo ' '; break; case 'textLang': foreach ($this->_languages as $language) { $val = Tools14::getValue($key.'_'.$language['id_lang'], Configuration::get($key, $language['id_lang'])); if (!Validate::isCleanHtml($val)) { $val = Configuration::get($key); } echo '
'; } $this->displayFlags($this->_languages, $defaultLanguage, $key, $key); echo '
'; break; case 'textareaLang': foreach ($this->_languages as $language) { $val = Configuration::get($key, $language['id_lang']); echo '
'; } $this->displayFlags($this->_languages, $defaultLanguage, $key, $key); echo '
'; break; case 'text': default: echo ''.(isset($field['suffix']) ? $field['suffix'] : ''); } if (isset($field['required']) and $field['required']) { echo ' *'; } echo(isset($field['desc']) ? '

'.$field['desc'].'

' : ''); echo '
'; } echo '
'; } /** * Load class object using identifier in $_GET (if possible) * otherwise return an empty object, or die * * @param boolean $opt Return an empty object if load fail * @return object */ protected function loadObject($opt = false) { if ($id = (int)(Tools14::getValue($this->identifier)) and Validate::isUnsignedId($id)) { if (!$this->_object) { $this->_object = new $this->className($id); } if (Validate::isLoadedObject($this->_object)) { return $this->_object; } $this->_errors[] = $this->trans('Object cannot be loaded (not found)', array(), 'Modules.Autoupgrade.Admin'); } elseif ($opt) { $this->_object = new $this->className(); return $this->_object; } else { $this->_errors[] = $this->trans('Object cannot be loaded (identifier missing or invalid)', array(), 'Modules.Autoupgrade.Admin'); } $this->displayErrors(); } /** * Return field value if possible (both classical and multilingual fields) * * Case 1 : Return value if present in $_POST / $_GET * Case 2 : Return object value * * @param object $obj Object * @param string $key Field name * @param integer $id_lang Language id (optional) * @return string */ protected function getFieldValue($obj, $key, $id_lang = null) { if ($id_lang) { $defaultValue = ($obj->id and isset($obj->{$key}[$id_lang])) ? $obj->{$key}[$id_lang] : ''; } else { $defaultValue = isset($obj->{$key}) ? $obj->{$key} : ''; } return Tools14::getValue($key.($id_lang ? '_'.$id_lang : ''), $defaultValue); } /** * Display form * * @global string $currentIndex Current URL in order to keep current Tab */ public function displayForm($firstCall = true) { global $cookie; $allowEmployeeFormLang = Configuration::get('PS_BO_ALLOW_EMPLOYEE_FORM_LANG') ? Configuration::get('PS_BO_ALLOW_EMPLOYEE_FORM_LANG') : 0; if ($allowEmployeeFormLang && !$cookie->employee_form_lang) { $cookie->employee_form_lang = (int)(Configuration::get('PS_LANG_DEFAULT')); } $useLangFromCookie = false; $this->_languages = Language::getLanguages(false); if ($allowEmployeeFormLang) { foreach ($this->_languages as $lang) { if ($cookie->employee_form_lang == $lang['id_lang']) { $useLangFromCookie = true; } } } if (!$useLangFromCookie) { $this->_defaultFormLanguage = (int)(Configuration::get('PS_LANG_DEFAULT')); } else { $this->_defaultFormLanguage = (int)($cookie->employee_form_lang); } // Only if it is the first call to displayForm, otherwise it has already been defined if ($firstCall) { echo ' '; } } /** * Display object details * * @global string $currentIndex Current URL in order to keep current Tab */ public function viewDetails() { global $currentIndex; } /** * Called before deletion * * @param object $object Object * @return boolean */ protected function beforeDelete($object) { return true; } /** * Called before deletion * * @param object $object Object * @return boolean */ protected function afterDelete($object, $oldId) { return true; } protected function afterAdd($object) { return true; } protected function afterUpdate($object) { return true; } /** * Check rights to view the current tab * * @return boolean */ protected function afterImageUpload() { return true; } /** * Check rights to view the current tab * * @return boolean */ public function viewAccess($disable = false) { global $cookie; if ($disable) { return true; } $this->tabAccess = Profile::getProfileAccess($cookie->profile, $this->id); if ($this->tabAccess['view'] === '1') { return true; } return false; } /** * Check for security token */ public function checkToken() { $token = Tools14::getValue('token'); return (!empty($token) and $token === $this->token); } /** * Display flags in forms for translations * * @param array $languages All languages available * @param integer $defaultLanguage Default language id * @param string $ids Multilingual div ids in form * @param string $id Current div id] * #param boolean $return define the return way : false for a display, true for a return */ public function displayFlags($languages, $defaultLanguage, $ids, $id, $return = false) { if (sizeof($languages) == 1) { return false; } $output = '
'.$this->trans('Choose language:', array(), 'Admin.Actions').'

'; foreach ($languages as $language) { $output .= ''.$language['name'].' '; } $output .= '
'; if ($return) { return $output; } echo $output; } protected function filterToField($key, $filter) { foreach ($this->fieldsDisplay as $field) { if (array_key_exists('filter_key', $field) and $field['filter_key'] == $key) { return $field; } } if (array_key_exists($filter, $this->fieldsDisplay)) { return $this->fieldsDisplay[$filter]; } return false; } protected function warnDomainName() { if ($_SERVER['HTTP_HOST'] != Configuration::get('PS_SHOP_DOMAIN') and $_SERVER['HTTP_HOST'] != Configuration::get('PS_SHOP_DOMAIN_SSL')) { $this->displayWarning($this->trans('Your are currently connected with the following domain name:', array(), 'Modules.Autoupgrade.Admin').' '.$_SERVER['HTTP_HOST'].'
'. $this->trans('This one is different from the main shop domain name set in "Preferences > SEO & URLs":', array(), 'Modules.Autoupgrade.Admin').' '.Configuration::get('PS_SHOP_DOMAIN').'
'. $this->trans('Click here if you want to modify the main shop domain name', array(), 'Modules.Autoupgrade.Admin').''); } } /* * from 1.4 AdminPreferences */ protected function _postConfig($fields) { global $currentIndex, $smarty; $languages = Language::getLanguages(false); if (method_exists('Tools', 'clearCache')) { Tools14::clearCache($smarty); } /* Check required fields */ foreach ($fields as $field => $values) { if (isset($values['required']) and $values['required']) { if (isset($values['type']) and $values['type'] == 'textLang') { foreach ($languages as $language) { if (($value = Tools14::getValue($field.'_'.$language['id_lang'])) == false and (string)$value != '0') { $this->_errors[] = $this->trans( 'Field %name% is required', array( '%name%' => ''.$values['title'].'' ), 'Modules.Autoupgrade.Admin' ); } } } elseif (($value = Tools14::getValue($field)) == false and (string)$value != '0') { $this->_errors[] = $this->trans( 'Field %name% is required', array( '%name%' => ''.$values['title'].'' ), 'Modules.Autoupgrade.Admin' ); } } } /* Check fields validity */ foreach ($fields as $field => $values) { if (isset($values['type']) and $values['type'] == 'textLang') { foreach ($languages as $language) { if (Tools14::getValue($field.'_'.$language['id_lang']) and isset($values['validation'])) { if (!Validate::$values['validation'](Tools14::getValue($field.'_'.$language['id_lang']))) { $this->_errors[] = $this->trans( 'Field %name% is invalid', array( '%name%' => ''.$values['title'].'' ), 'Modules.Autoupgrade.Admin' ); } } } } elseif (Tools14::getValue($field) and isset($values['validation'])) { if (!Validate::$values['validation'](Tools14::getValue($field))) { $this->_errors[] = $this->trans( 'Field %name% is invalid', array( '%name%' => ''.$values['title'].'' ), 'Modules.Autoupgrade.Admin' ); } } } /* Default value if null */ foreach ($fields as $field => $values) { if (!Tools14::getValue($field) and isset($values['default'])) { $_POST[$field] = $values['default']; } } /* Save process */ if (!sizeof($this->_errors)) { if (Tools14::isSubmit('submitAppearanceconfiguration')) { if (isset($_FILES['PS_LOGO']['tmp_name']) and $_FILES['PS_LOGO']['tmp_name']) { if ($error = checkImage($_FILES['PS_LOGO'], 300000)) { $this->_errors[] = $error; } if (!$tmpName = tempnam(_PS_TMP_IMG_DIR_, 'PS') or !move_uploaded_file($_FILES['PS_LOGO']['tmp_name'], $tmpName)) { return false; } elseif (!@imageResize($tmpName, _PS_IMG_DIR_.'logo.jpg')) { $this->_errors[] = 'an error occurred during logo copy'; } unlink($tmpName); } if (isset($_FILES['PS_LOGO_MAIL']['tmp_name']) and $_FILES['PS_LOGO_MAIL']['tmp_name']) { if ($error = checkImage($_FILES['PS_LOGO_MAIL'], 300000)) { $this->_errors[] = $error; } if (!$tmpName = tempnam(_PS_TMP_IMG_DIR_, 'PS_MAIL') or !move_uploaded_file($_FILES['PS_LOGO_MAIL']['tmp_name'], $tmpName)) { return false; } elseif (!@imageResize($tmpName, _PS_IMG_DIR_.'logo_mail.jpg')) { $this->_errors[] = 'an error occurred during logo copy'; } unlink($tmpName); } if (isset($_FILES['PS_LOGO_INVOICE']['tmp_name']) and $_FILES['PS_LOGO_INVOICE']['tmp_name']) { if ($error = checkImage($_FILES['PS_LOGO_INVOICE'], 300000)) { $this->_errors[] = $error; } if (!$tmpName = tempnam(_PS_TMP_IMG_DIR_, 'PS_INVOICE') or !move_uploaded_file($_FILES['PS_LOGO_INVOICE']['tmp_name'], $tmpName)) { return false; } elseif (!@imageResize($tmpName, _PS_IMG_DIR_.'logo_invoice.jpg')) { $this->_errors[] = 'an error occurred during logo copy'; } unlink($tmpName); } if (isset($_FILES['PS_STORES_ICON']['tmp_name']) and $_FILES['PS_STORES_ICON']['tmp_name']) { if ($error = checkImage($_FILES['PS_STORES_ICON'], 300000)) { $this->_errors[] = $error; } if (!$tmpName = tempnam(_PS_TMP_IMG_DIR_, 'PS_STORES_ICON') or !move_uploaded_file($_FILES['PS_STORES_ICON']['tmp_name'], $tmpName)) { return false; } elseif (!@imageResize($tmpName, _PS_IMG_DIR_.'logo_stores.gif')) { $this->_errors[] = 'an error occurred during logo copy'; } unlink($tmpName); } $this->uploadIco('PS_FAVICON', _PS_IMG_DIR_.'favicon.ico'); } /* Update settings in database */ if (!sizeof($this->_errors)) { foreach ($fields as $field => $values) { unset($val); if (isset($values['type']) and $values['type'] == 'textLang') { foreach ($languages as $language) { $val[$language['id_lang']] = isset($values['cast']) ? $values['cast'](Tools14::getValue($field.'_'.$language['id_lang'])) : Tools14::getValue($field.'_'.$language['id_lang']); } } else { $val = isset($values['cast']) ? $values['cast'](Tools14::getValue($field)) : Tools14::getValue($field); } Configuration::updateValue($field, $val); } Tools14::redirectAdmin($currentIndex.'&conf=6'.'&token='.$this->token); } } } /* Dirty fix bug PNM-2673 */ public function addCSS($tmp) { return $tmp; } }