* @copyright 2016-2017 GFI Informatique, 2016-2017 TNT * @license https://opensource.org/licenses/MIT MIT License */ require_once _PS_MODULE_DIR_.'tntofficiel/libraries/TNTOfficiel_Debug.php'; require_once _PS_MODULE_DIR_.'tntofficiel/libraries/TNTOfficiel_Logger.php'; class TNTOfficiel_Address { /** * @var TNTOfficiel_Logger */ private $logger; /** * Constructor. */ public function __construct() { TNTOfficiel_Debug::log(array('msg' => '>>', 'file' => __FILE__, 'line' => __LINE__)); $this->logger = new TNTOfficiel_Logger(); } /** * Returns the default values for the extra address data fields. * * @param int $intArgAddressID * @param int $intArgCustomerID * * @return array */ public static function getDefaultValues($intArgAddressID, $intArgCustomerID) { TNTOfficiel_Debug::log(array('msg' => '>>', 'file' => __FILE__, 'line' => __LINE__)); // Retrieve the customer and address by its id. $arrRowCustomer = Db::getInstance()->getRow( 'SELECT * FROM '._DB_PREFIX_.'customer WHERE id_customer = '.(int)$intArgCustomerID ); $arrRowAddress = Db::getInstance()->getRow( 'SELECT * FROM '._DB_PREFIX_.'address WHERE id_address = '.(int)$intArgAddressID ); // Get values from the customer and address object according to the configuration. return array( 'email' => TNTOfficiel_Address::_getValue( $arrRowAddress, $arrRowCustomer, 'TNT_CARRIER_ADDRESS_EMAIL' ), 'mobile_phone' => TNTOfficiel_Address::_getValue( $arrRowAddress, $arrRowCustomer, 'TNT_CARRIER_ADDRESS_PHONE' ), 'building_number' => TNTOfficiel_Address::_getValue( $arrRowAddress, $arrRowCustomer, 'TNT_CARRIER_ADDRESS_BUILDING' ), 'intercom_code' => TNTOfficiel_Address::_getValue( $arrRowAddress, $arrRowCustomer, 'TNT_CARRIER_ADDRESS_INTERCOM' ), 'floor' => TNTOfficiel_Address::_getValue( $arrRowAddress, $arrRowCustomer, 'TNT_CARRIER_ADDRESS_FLOOR' ), ); } /** * Gets the property from a customer or an address. * * @param array $arrAddress * @param array $arrCustomer * @param string $strArgConfigField * * @return mixed */ private static function _getValue($arrAddress, $arrCustomer, $strArgConfigField) { TNTOfficiel_Debug::log(array('msg' => '>>', 'file' => __FILE__, 'line' => __LINE__)); $arrConfigValue = explode('.', Configuration::get($strArgConfigField)); $strValue = ''; if (count($arrConfigValue) > 1) { $objectName = $arrConfigValue[0]; $objectProperty = $arrConfigValue[1]; if (in_array($objectProperty, array('id_customer', 'id_address'))) { $objectProperty = 'id'; } try { $object = null; if ($objectName == 'customer') { $object = $arrCustomer; } elseif ($objectName == 'address') { $object = $arrAddress; } $strValue = $object[$objectProperty]; } catch (Exception $objException) { $objFileLogger = new FileLogger(); $objFileLogger->setFilename(_PS_ROOT_DIR_.'/log/'.date('Ymd').'_tnt_exception.log'); $objFileLogger->logError($objException->getMessage()); } } return $strValue; } /** * Validate the extra address data form. * * @param $values * * @return bool */ public static function validate($values) { TNTOfficiel_Debug::log(array('msg' => '>>', 'file' => __FILE__, 'line' => __LINE__)); $arrFormErrors = array(); //check if email is set and not empty if (!isset($values['email']) || trim($values['email']) === '') { $arrFormErrors[] = 'Le champ \'email\' est obligatoire'; } //check if the email is valid if (!filter_var($values['email'], FILTER_VALIDATE_EMAIL)) { $arrFormErrors[] = 'L\'email saisi n\'est pas valide'; } //check if mobile phone is set and not empty if (!isset($values['mobile_phone']) || trim($values['mobile_phone']) === '') { $arrFormErrors[] = 'Le champ \'Téléphone portable\' est obligatoire'; } //check if mobile phone is set 10 digits and start by 06 or 07 if (!preg_match('/^((06|07){1}(\d){8})$/', $values['mobile_phone'])) { $arrFormErrors[] = 'Le champ \'Téléphone portable\' doit être composé de 10 chiffres' .' sans espace ni point, et commencer par un 06 ou 07'; } $arrFieldList = array( array( 'name' => 'email', 'label' => 'Email de contact', 'maxlength' => 80, ), array( 'name' => 'mobile_phone', 'label' => 'Téléphone', 'maxlength' => 15, ), array( 'name' => 'building_number', 'label' => 'N° de batiment', 'maxlength' => 3, ), array( 'name' => 'intercom_code', 'label' => 'Code interphone', 'maxlength' => 7, ), array( 'name' => 'floor', 'label' => 'Etage', 'maxlength' => 2, ), ); foreach ($arrFieldList as $arrField) { if ($values[$arrField['name']]) { if ($arrField['maxlength'] < iconv_strlen($values[$arrField['name']])) { $arrFormErrors[] = sprintf('Le champ "%s" doit avoir au maximum %s caractère(s)', $arrField['label'], $arrField['maxlength']); } } } return $arrFormErrors; } }