diff --git a/classes/Address.php b/classes/Address.php index d53060765..1c2f0eb56 100644 --- a/classes/Address.php +++ b/classes/Address.php @@ -109,28 +109,28 @@ class AddressCore extends ObjectModel 'table' => 'address', 'primary' => 'id_address', 'fields' => array( - 'id_customer' => array('type' => self::TYPE_INT, 'validate' => 'isNullOrUnsignedId'), - 'id_manufacturer' => array('type' => self::TYPE_INT, 'validate' => 'isNullOrUnsignedId'), - 'id_supplier' => array('type' => self::TYPE_INT, 'validate' => 'isNullOrUnsignedId'), - 'id_warehouse' => array('type' => self::TYPE_INT, 'validate' => 'isNullOrUnsignedId'), - 'id_country' => array('type' => self::TYPE_INT, 'validate' => 'isUnsignedId', 'required' => true), - 'id_state' => array('type' => self::TYPE_INT, 'validate' => 'isNullOrUnsignedId'), - 'alias' => array('type' => self::TYPE_STRING, 'validate' => 'isGenericName', 'required' => true, 'size' => 32), - 'company' => array('type' => self::TYPE_STRING, 'validate' => 'isGenericName', 'size' => 32), - 'lastname' => array('type' => self::TYPE_STRING, 'validate' => 'isName', 'required' => true, 'size' => 32), - 'firstname' => array('type' => self::TYPE_STRING, 'validate' => 'isName', 'required' => true, 'size' => 32), - 'vat_number' => array('type' => self::TYPE_STRING, 'validate' => 'isGenericName'), - 'address1' => array('type' => self::TYPE_STRING, 'validate' => 'isAddress', 'required' => true, 'size' => 128), - 'address2' => array('type' => self::TYPE_STRING, 'validate' => 'isAddress', 'size' => 128), - 'postcode' => array('type' => self::TYPE_STRING, 'validate' => 'isPostCode', 'size' => 12), - 'city' => array('type' => self::TYPE_STRING, 'validate' => 'isCityName', 'required' => true, 'size' => 64), - 'other' => array('type' => self::TYPE_STRING, 'validate' => 'isMessage', 'size' => 300), - 'phone' => array('type' => self::TYPE_STRING, 'validate' => 'isPhoneNumber', 'size' => 16), - 'phone_mobile' => array('type' => self::TYPE_STRING, 'validate' => 'isPhoneNumber', 'size' => 16), - 'dni' => array('type' => self::TYPE_STRING, 'validate' => 'isDniLite', 'size' => 16), - 'deleted' => array('type' => self::TYPE_BOOL, 'validate' => 'isBool'), - 'date_add' => array('type' => self::TYPE_DATE, 'validate' => 'isDateFormat'), - 'date_upd' => array('type' => self::TYPE_DATE, 'validate' => 'isDateFormat'), + 'id_customer' => array('type' => self::TYPE_INT, 'validate' => 'isNullOrUnsignedId', 'copy_from_front' => false), + 'id_manufacturer' => array('type' => self::TYPE_INT, 'validate' => 'isNullOrUnsignedId', 'copy_from_front' => false), + 'id_supplier' => array('type' => self::TYPE_INT, 'validate' => 'isNullOrUnsignedId', 'copy_from_front' => false), + 'id_warehouse' => array('type' => self::TYPE_INT, 'validate' => 'isNullOrUnsignedId', 'copy_from_front' => false), + 'id_country' => array('type' => self::TYPE_INT, 'validate' => 'isUnsignedId', 'required' => true, 'copy_from_front' => true), + 'id_state' => array('type' => self::TYPE_INT, 'validate' => 'isNullOrUnsignedId', 'copy_from_front' => true), + 'alias' => array('type' => self::TYPE_STRING, 'validate' => 'isGenericName', 'required' => true, 'size' => 32, 'copy_from_front' => true), + 'company' => array('type' => self::TYPE_STRING, 'validate' => 'isGenericName', 'size' => 32, 'copy_from_front' => true), + 'lastname' => array('type' => self::TYPE_STRING, 'validate' => 'isName', 'required' => true, 'size' => 32, 'copy_from_front' => true), + 'firstname' => array('type' => self::TYPE_STRING, 'validate' => 'isName', 'required' => true, 'size' => 32, 'copy_from_front' => true), + 'vat_number' => array('type' => self::TYPE_STRING, 'validate' => 'isGenericName', 'copy_from_front' => true), + 'address1' => array('type' => self::TYPE_STRING, 'validate' => 'isAddress', 'required' => true, 'size' => 128, 'copy_from_front' => true), + 'address2' => array('type' => self::TYPE_STRING, 'validate' => 'isAddress', 'size' => 128, 'copy_from_front' => true), + 'postcode' => array('type' => self::TYPE_STRING, 'validate' => 'isPostCode', 'size' => 12, 'copy_from_front' => true), + 'city' => array('type' => self::TYPE_STRING, 'validate' => 'isCityName', 'required' => true, 'size' => 64, 'copy_from_front' => true), + 'other' => array('type' => self::TYPE_STRING, 'validate' => 'isMessage', 'size' => 300, 'copy_from_front' => true), + 'phone' => array('type' => self::TYPE_STRING, 'validate' => 'isPhoneNumber', 'size' => 16, 'copy_from_front' => true), + 'phone_mobile' => array('type' => self::TYPE_STRING, 'validate' => 'isPhoneNumber', 'size' => 16, 'copy_from_front' => true), + 'dni' => array('type' => self::TYPE_STRING, 'validate' => 'isDniLite', 'size' => 16, 'copy_from_front' => true), + 'deleted' => array('type' => self::TYPE_BOOL, 'validate' => 'isBool', 'copy_from_front' => false), + 'date_add' => array('type' => self::TYPE_DATE, 'validate' => 'isDateFormat', 'copy_from_front' => false), + 'date_upd' => array('type' => self::TYPE_DATE, 'validate' => 'isDateFormat', 'copy_from_front' => false), ), ); diff --git a/classes/Customer.php b/classes/Customer.php index 70957b9c6..b258284c3 100644 --- a/classes/Customer.php +++ b/classes/Customer.php @@ -152,35 +152,35 @@ class CustomerCore extends ObjectModel 'table' => 'customer', 'primary' => 'id_customer', 'fields' => array( - 'secure_key' => array('type' => self::TYPE_STRING, 'validate' => 'isMd5'), - 'lastname' => array('type' => self::TYPE_STRING, 'validate' => 'isName', 'required' => true, 'size' => 32), - 'firstname' => array('type' => self::TYPE_STRING, 'validate' => 'isName', 'required' => true, 'size' => 32), - 'email' => array('type' => self::TYPE_STRING, 'validate' => 'isEmail', 'required' => true, 'size' => 128), - 'passwd' => array('type' => self::TYPE_STRING, 'validate' => 'isPasswd', 'required' => true, 'size' => 32), - 'last_passwd_gen' => array('type' => self::TYPE_STRING), - 'id_gender' => array('type' => self::TYPE_INT, 'validate' => 'isUnsignedId'), - 'birthday' => array('type' => self::TYPE_DATE, 'validate' => 'isBirthDate'), - 'newsletter' => array('type' => self::TYPE_BOOL, 'validate' => 'isBool'), - 'newsletter_date_add' => array('type' => self::TYPE_DATE), - 'ip_registration_newsletter' => array('type' => self::TYPE_STRING), - 'optin' => array('type' => self::TYPE_BOOL, 'validate' => 'isBool'), - 'website' => array('type' => self::TYPE_STRING, 'validate' => 'isUrl'), - 'company' => array('type' => self::TYPE_STRING, 'validate' => 'isName'), - 'siret' => array('type' => self::TYPE_STRING, 'validate' => 'isSiret'), - 'ape' => array('type' => self::TYPE_STRING, 'validate' => 'isApe'), - 'outstanding_allow_amount' => array('type' => self::TYPE_INT, 'validate' => 'isFloat'), - 'show_public_prices' => array('type' => self::TYPE_BOOL, 'validate' => 'isBool'), - 'id_risk' => array('type' => self::TYPE_INT, 'validate' => 'isUnsignedInt'), - 'max_payment_days' => array('type' => self::TYPE_INT, 'validate' => 'isUnsignedInt'), - 'active' => array('type' => self::TYPE_BOOL, 'validate' => 'isBool'), - 'deleted' => array('type' => self::TYPE_BOOL, 'validate' => 'isBool'), - 'note' => array('type' => self::TYPE_STRING, 'validate' => 'isCleanHtml', 'size' => 65000), - 'is_guest' => array('type' => self::TYPE_BOOL, 'validate' => 'isBool'), - 'id_shop' => array('type' => self::TYPE_INT, 'validate' => 'isUnsignedId'), - 'id_group_shop' => array('type' => self::TYPE_INT, 'validate' => 'isUnsignedId'), - 'id_default_group' => array('type' => self::TYPE_INT), - 'date_add' => array('type' => self::TYPE_DATE, 'validate' => 'isDate'), - 'date_upd' => array('type' => self::TYPE_DATE, 'validate' => 'isDate'), + 'secure_key' => array('type' => self::TYPE_STRING, 'validate' => 'isMd5', 'copy_from_front' => false), + 'lastname' => array('type' => self::TYPE_STRING, 'validate' => 'isName', 'required' => true, 'size' => 32, 'copy_from_front' => true), + 'firstname' => array('type' => self::TYPE_STRING, 'validate' => 'isName', 'required' => true, 'size' => 32, 'copy_from_front' => true), + 'email' => array('type' => self::TYPE_STRING, 'validate' => 'isEmail', 'required' => true, 'size' => 128, 'copy_from_front' => true), + 'passwd' => array('type' => self::TYPE_STRING, 'validate' => 'isPasswd', 'required' => true, 'size' => 32, 'copy_from_front' => true), + 'last_passwd_gen' => array('type' => self::TYPE_STRING, 'copy_from_front' => false), + 'id_gender' => array('type' => self::TYPE_INT, 'validate' => 'isUnsignedId', 'copy_from_front' => true), + 'birthday' => array('type' => self::TYPE_DATE, 'validate' => 'isBirthDate', 'copy_from_front' => true), + 'newsletter' => array('type' => self::TYPE_BOOL, 'validate' => 'isBool', 'copy_from_front' => true), + 'newsletter_date_add' => array('type' => self::TYPE_DATE,'copy_from_front' => false), + 'ip_registration_newsletter' => array('type' => self::TYPE_STRING, 'copy_from_front' => false), + 'optin' => array('type' => self::TYPE_BOOL, 'validate' => 'isBool', 'copy_from_front' => true), + 'website' => array('type' => self::TYPE_STRING, 'validate' => 'isUrl', 'copy_from_front' => true), + 'company' => array('type' => self::TYPE_STRING, 'validate' => 'isName', 'copy_from_front' => true), + 'siret' => array('type' => self::TYPE_STRING, 'validate' => 'isSiret', 'copy_from_front' => true), + 'ape' => array('type' => self::TYPE_STRING, 'validate' => 'isApe', 'copy_from_front' => true), + 'outstanding_allow_amount' => array('type' => self::TYPE_INT, 'validate' => 'isFloat', 'copy_from_front' => false), + 'show_public_prices' => array('type' => self::TYPE_BOOL, 'validate' => 'isBool', 'copy_from_front' => false), + 'id_risk' => array('type' => self::TYPE_INT, 'validate' => 'isUnsignedInt', 'copy_from_front' => false), + 'max_payment_days' => array('type' => self::TYPE_INT, 'validate' => 'isUnsignedInt', 'copy_from_front' => false), + 'active' => array('type' => self::TYPE_BOOL, 'validate' => 'isBool', 'copy_from_front' => false), + 'deleted' => array('type' => self::TYPE_BOOL, 'validate' => 'isBool', 'copy_from_front' => false), + 'note' => array('type' => self::TYPE_STRING, 'validate' => 'isCleanHtml', 'size' => 65000, 'copy_from_front' => false), + 'is_guest' => array('type' => self::TYPE_BOOL, 'validate' => 'isBool', 'copy_from_front' => false), + 'id_shop' => array('type' => self::TYPE_INT, 'validate' => 'isUnsignedId', 'copy_from_front' => false), + 'id_group_shop' => array('type' => self::TYPE_INT, 'validate' => 'isUnsignedId', 'copy_from_front' => false), + 'id_default_group' => array('type' => self::TYPE_INT, 'copy_from_front' => false), + 'date_add' => array('type' => self::TYPE_DATE, 'validate' => 'isDate', 'copy_from_front' => false), + 'date_upd' => array('type' => self::TYPE_DATE, 'validate' => 'isDate', 'copy_from_front' => false), ), ); diff --git a/classes/ObjectModel.php b/classes/ObjectModel.php index 21d4bbf49..75c51478c 100644 --- a/classes/ObjectModel.php +++ b/classes/ObjectModel.php @@ -759,27 +759,24 @@ abstract class ObjectModelCore public function validateController($htmlentities = true) { $errors = array(); - - /* Checking for required fields */ - $fieldsRequired = array_merge($this->fieldsRequired, (isset(self::$fieldsRequiredDatabase[get_class($this)]) ? self::$fieldsRequiredDatabase[get_class($this)] : array())); - foreach ($fieldsRequired AS $field) - if (($value = Tools::getValue($field, $this->{$field})) == false && (string)$value != '0') - if (!$this->id OR $field != 'passwd') - $errors[] = ''.self::displayFieldName($field, get_class($this), $htmlentities).' '.Tools::displayError('is required.'); - - - /* Checking for maximum fields sizes */ - foreach ($this->fieldsSize AS $field => $maxLength) - if (($value = Tools::getValue($field, $this->{$field})) && Tools::strlen($value) > $maxLength) - $errors[] = ''.self::displayFieldName($field, get_class($this), $htmlentities).' '.Tools::displayError('is too long.').' ('.Tools::displayError('Maximum length:').' '.$maxLength.')'; - - /* Checking for fields validity */ - foreach ($this->fieldsValidate AS $field => $function) + foreach ($this->def['fields'] as $field => $data) { + if (!isset($data['copy_from_front']) || !$data['copy_from_front']) + continue; + /* Checking for required fields */ + if (isset($data['required']) && $data['required'] && ($value = Tools::getValue($field, $this->{$field})) == false && (string)$value != '0') + if (!$this->id OR $field != 'passwd') + $errors[] = ''.self::displayFieldName($field, get_class($this), $htmlentities).' '.Tools::displayError('is required.'); + + /* Checking for maximum fields sizes */ + if (isset($data['size']) && ($value = Tools::getValue($field, $this->{$field})) && Tools::strlen($value) > $data['size']) + $errors[] = ''.self::displayFieldName($field, get_class($this), $htmlentities).' '.Tools::displayError('is too long.').' ('.Tools::displayError('Maximum length:').' '.$data['size'].')'; + + /* Checking for fields validity */ // Hack for postcode required for country which does not have postcodes if ($value = Tools::getValue($field, $this->{$field}) OR ($field == 'postcode' AND $value == '0')) { - if (!Validate::$function($value) && (!empty($value) || in_array($field, $this->fieldsRequired))) + if (isset($data['validate']) && !Validate::$data['validate']($value) && (!empty($value) || $data['required'])) $errors[] = ''.self::displayFieldName($field, get_class($this), $htmlentities).' '.Tools::displayError('is invalid.'); else { @@ -1270,4 +1267,4 @@ abstract class ObjectModelCore { } -} \ No newline at end of file +} diff --git a/controllers/front/IdentityController.php b/controllers/front/IdentityController.php index d2d7deba3..e278bdd5a 100644 --- a/controllers/front/IdentityController.php +++ b/controllers/front/IdentityController.php @@ -44,27 +44,6 @@ class IdentityControllerCore extends FrontController */ public function postProcess() { - if (count($_POST)) - { - $exclusion = array('secure_key', - 'old_passwd', - 'passwd', - 'active', - 'date_add', - 'date_upd', - 'last_passwd_gen', - 'newsletter_date_add', - 'id_default_group', - 'id_shop', - 'id_group_shop', - 'ip_registration_newsletter', - 'note', - 'is_guest'); - $fields = $this->customer->getFields(); - foreach ($fields as $key => $value) - if (!in_array($key, $exclusion)) - $this->customer->{$key} = key_exists($key, $_POST) ? trim($_POST[$key]) : 0; - } if (isset($_POST['years']) && isset($_POST['months']) && isset($_POST['days'])) $this->customer->birthday = (int)($_POST['years']).'-'.(int)($_POST['months']).'-'.(int)($_POST['days']);