Breve guida sulla modifica di PrestaShop per aggirare il validation su campo nome e cognome di utente e indirizzo, permettendo l’inserimento di numeri e parentesi ()

Quando si importano clienti o dati in generale, potrebbe essere necessario dover rendere PrestaShop un pò più permissivo sulla validazione. Infatti quando si lavora con importazione ordini/clienti da eBay o Amazon, può capitare che nome o cognome contengano numeri o (). Bene, PrestaShop le elimina.

Vediamo come ovviare a questo problema.
Editiamo il file classes/Validate.php

/**
 * Check for name validity
 *
 * @param string $name Name to validate
 * @return bool Validity is ok or not
 */
public static function isName($name){
   return preg_match(Tools::cleanNonUnicodeSupport('/^[^0-9!<>,;?=+()@#"°{}_$%:]*$/u'), stripslashes($name));
}

Per abilitare parentesi e numeri, possiamo modificare la regexp da
/^[^0-9!<>,;?=+()@#"°{}_$%:]*$/u
togliendo 0-9 e (), facendola diventare
/^[^!<>,;?=+@#"°{}_$%:]*$/u

L’approccio per proseguire nella modifica è doppio:
1- creare un nuovo metodo, ad esempio creare il metodo MyisName. Sarà necessario modificare anche i seguenti file
File aggiuntivo da modificare classes/Customer.php (vedi righe 6-7)

public static $definition = array(
'table' => 'customer',
'primary' => 'id_customer',
'fields' => array(
'secure_key' => array('type' => self::TYPE_STRING, 'validate' => 'isMd5', 'copy_post' => false),
'lastname' => array('type' => self::TYPE_STRING, 'validate' => 'MyisName', 'required' => true, 'size' => 32),
'firstname' => array('type' => self::TYPE_STRING, 'validate' => 'MyisName', 'required' => true, 'size' => 32),

File aggiuntivo da modificare classes/Address.php (vedi righe 13-14)

public static $definition = array(
'table' => 'address',
'primary' => 'id_address',
'fields' => array(
'id_customer' => array('type' => self::TYPE_INT, 'validate' => 'isNullOrUnsignedId', 'copy_post' => false),
'id_manufacturer' => array('type' => self::TYPE_INT, 'validate' => 'isNullOrUnsignedId', 'copy_post' => false),
'id_supplier' => array('type' => self::TYPE_INT, 'validate' => 'isNullOrUnsignedId', 'copy_post' => false),
'id_warehouse' => array('type' => self::TYPE_INT, 'validate' => 'isNullOrUnsignedId', 'copy_post' => false),
'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' => 64),
'lastname' => array('type' => self::TYPE_STRING, 'validate' => 'MyisName', 'required' => true, 'size' => 32),
'firstname' => array('type' => self::TYPE_STRING, 'validate' => 'MyisName', 'required' => true, 'size' => 32),

2- modificare semplicemente il metodo isName. Questa modifica non richiede altre variazioni ad altri file

ATTENZIONE: in caso di aggiornamento di PrestaShop, le modifiche fatte, andranno perse!