array( 'remote_file' => 'relais.gz', 'local_file' => 'relais.txt', 'table_name' => 'icirelais' ), 'backup' => array( 'remote_file' => 'suggestion.gz', 'local_file' => 'suggestion.txt', 'table_name' => 'icibackup') ); var $_tmpFile; var $_lines; var $_download_dir; var $_configuration_key = array(); // -> [SI-LINDER-PARTNER-7][OSC] - Résolution d'un problème dans une désynchronisation du synchroniseur des CODES de Points-Relais pour le module DPD (fonctionne indépendamment du module DPD) /* Ce nouvel attribut de la classe sert à stocker le message d'erreur, avertissement, et notifiant du déroulement (bon ou mauvais) du processus, par défaut cela renvoyait un message tronqué sans aucuns sens: L désormais cet élément sera massivement utilisé pour tout ce qui est "RETOUR d'informations du processus de synchronisation." Cela ajoute à terme deux nouvelles fonctionnalités.. - string NiveauDeLog (attribut valorisable par: BASE : seul les messages par défaut de FIN avec succès ou d'échec sont renvoyés, sert en production et hors-développement DEV : tout plein de nouveaux messages, et avec leur numéro de lignes dans le code PHP sont renvoyés, ne sert qu'en développement ) - array MessageDeLog (attribut par défaut à vide, valorisé au fur et à mesure par le déroulement du processus) Et enfin, de nouvelles étapes d'informations ont été introduites dans le code, cherchez le nom de CODE TAG: [2021_VERBOSE_LOG_FEATURE] : pour les conditions de vérifications et de valorisations [2021_VERBOSE_MSG_FEATURE] : pour le retour complet du résultat de la classe PHP */ var $_verboseLog = array( 'NiveauDeLog' => 'DEV', 'MessageDeLog' => array() ); // <- [SI-LINDER-PARTNER-7][OSC] - Résolution d'un problème dans une désynchronisation du synchroniseur des CODES de Points-Relais pour le module DPD (fonctionne indépendamment du module DPD) //========================================================================================================================= /** * - get configuration keys (ftp access) */ function icirelais_file_synchronize($input){ /* [2021_VERBOSE_LOG_FEATURE] */ if (preg_match('/^(?:DEV)$/', $this->_verboseLog['NiveauDeLog'])) { array_push($this->_verboseLog['MessageDeLog'], 'Fichier de script: ' . '[' . __FILE__ . ']' . '
' . '[' . __LINE__ . ']' . ' - ' . 'Initialisation classe = icirelais_file_synchronize{} ------ ' . 'Lancement méthode = icirelais_file_synchronize()' ); } $this->_download_dir = $input['download_dir']; //$this->_download_dir = DIR_FS_CATALOG . 'download/'; /* [2021_VERBOSE_LOG_FEATURE] */ if (preg_match('/^(?:DEV)$/', $this->_verboseLog['NiveauDeLog'])) { array_push($this->_verboseLog['MessageDeLog'], '[' . __LINE__ . ']' . ' - ' . '$this->_download_dir = ' . $input['download_dir'] ); } // Get ICI relais configuration key from database $query = "SELECT configuration_key, configuration_value FROM configuration WHERE configuration_key LIKE 'MODULE_SHIPPING_ICIRELAIS_FTP%'"; $get_configuration_value = tep_db_query($query); /* [2021_VERBOSE_LOG_FEATURE] */ if (preg_match('/^(?:DEV)$/', $this->_verboseLog['NiveauDeLog'])) { array_push($this->_verboseLog['MessageDeLog'], '[' . __LINE__ . ']' . ' - ' . 'SELECT configuration_key, configuration_value FROM configuration WHERE configuration_key LIKE \'MODULE_SHIPPING_ICIRELAIS_FTP%\' = ' . 'Succès' ); } while($row = tep_db_fetch_array($get_configuration_value)){ $this->_configuration_key[$row['configuration_key']] = $row['configuration_value']; } // set default language (required when started as a cron job) if ( $input['language'] == "" ) { $input['language'] = 'french'; } include_once('includes/languages/'.$input['language'].'/icirelais_file_synchronize.php'); } //========================================================================================================================= /** * - get the new files by FTP * - uncompress the new files * - truncate tables icirelais (relais point and backup) * - insert new icirelais datas */ function file_synchronize_action() { // Guarantee, there will not be a maximum execution time error set_time_limit(0); // FTP param control if((!isset($this->_configuration_key['MODULE_SHIPPING_ICIRELAIS_FTP_HOST']) || $this->_configuration_key['MODULE_SHIPPING_ICIRELAIS_FTP_HOST'] == '') && (!isset($this->_configuration_key['MODULE_SHIPPING_ICIRELAIS_FTP_USER']) || $this->_configuration_key['MODULE_SHIPPING_ICIRELAIS_FTP_USER'] == '' ) && (!isset($this->_configuration_key['MODULE_SHIPPING_ICIRELAIS_FTP_PASSWORD']) || $this->_configuration_key['MODULE_SHIPPING_ICIRELAIS_FTP_PASSWORD'] == '')) { /* [2021_VERBOSE_LOG_FEATURE] */ if (preg_match('/^(?:BASE|DEV)$/', $this->_verboseLog['NiveauDeLog'])) { array_push($this->_verboseLog['MessageDeLog'], '[' . __LINE__ . ']' . ' - ' . FTP_PARAM_EMPTY ); } // [2021_VERBOSE_MSG_FEATURE] return array('result' => false, 'msg' => $this->_verboseLog['MessageDeLog']); } foreach($this->_files as $current_file_info){ // step 1 : download the file $res_download = $this->download($current_file_info); if($res_download['result'] !== true) { /* [2021_VERBOSE_LOG_FEATURE] */ if (preg_match('/^(?:BASE|DEV)$/', $this->_verboseLog['NiveauDeLog'])) { array_push($this->_verboseLog['MessageDeLog'], '[' . __LINE__ . ']' . ' - ' . $res_download['msg'] ); } // [2021_VERBOSE_MSG_FEATURE] return array('result' => false, 'msg' => $this->_verboseLog['MessageDeLog']); } // step 2 : uncompress the file $res_uncompress = $this->uncompress($current_file_info); if($res_uncompress['result'] !== true) { /* [2021_VERBOSE_LOG_FEATURE] */ if (preg_match('/^(?:BASE|DEV)$/', $this->_verboseLog['NiveauDeLog'])) { array_push($this->_verboseLog['MessageDeLog'], '[' . __LINE__ . ']' . ' - ' . $res_uncompress['msg'] ); } // [2021_VERBOSE_MSG_FEATURE] return array('result' => false, 'msg' => $this->_verboseLog['MessageDeLog']); } // step 3 : check $res_init = $this->get_content_and_save($current_file_info); if($res_init['result'] !== true) { /* [2021_VERBOSE_LOG_FEATURE] */ if (preg_match('/^(?:BASE|DEV)$/', $this->_verboseLog['NiveauDeLog'])) { array_push($this->_verboseLog['MessageDeLog'], '[' . __LINE__ . ']' . ' - ' . 'Vérification des données = ' . 'Succès' ); } } } /* [2021_VERBOSE_LOG_FEATURE] */ if (preg_match('/^(?:BASE|DEV)$/', $this->_verboseLog['NiveauDeLog'])) { array_push($this->_verboseLog['MessageDeLog'], '[' . __LINE__ . ']' . ' - ' . SYNC_OK ); } // [2021_VERBOSE_MSG_FEATURE] return array('result' => true, 'msg' => $this->_verboseLog['MessageDeLog']); } //========================================================================================================================= /** * Download ICI Relais files from FTP * * @return array * - 'result' boolean * - 'msg' varchar */ function download($input) { // FTP Connection $conn = @ftp_connect($this->_configuration_key['MODULE_SHIPPING_ICIRELAIS_FTP_HOST'], 0, 5); if(!$conn) { /* [2021_VERBOSE_LOG_FEATURE] */ if (preg_match('/^(?:DEV)$/', $this->_verboseLog['NiveauDeLog'])) { array_push($this->_verboseLog['MessageDeLog'], '[' . __LINE__ . ']' . ' - ' . FTP_CONNECT_FAILED ); } // [2021_VERBOSE_MSG_FEATURE] return array('result' => false, 'msg' => $this->_verboseLog['MessageDeLog']); } // FTP login if(!@ftp_login($conn, (string)$this->_configuration_key['MODULE_SHIPPING_ICIRELAIS_FTP_USER'], (string)$this->_configuration_key['MODULE_SHIPPING_ICIRELAIS_FTP_PASSWORD'])) { /* [2021_VERBOSE_LOG_FEATURE] */ if (preg_match('/^(?:DEV)$/', $this->_verboseLog['NiveauDeLog'])) { array_push($this->_verboseLog['MessageDeLog'], '[' . __LINE__ . ']' . ' - ' . FTP_AUTHENTIFICATION_FAILED ); } // [2021_VERBOSE_MSG_FEATURE] return array('result' => false, 'msg' => $this->_verboseLog['MessageDeLog']); } // FTP Passive mode active (in case of firewall) @ftp_pasv($conn, true); // FTP change directory if(!@ftp_chdir($conn, (string)$this->_configuration_key['MODULE_SHIPPING_ICIRELAIS_FTP_DIRECTORY'])){ /* [2021_VERBOSE_LOG_FEATURE] */ if (preg_match('/^(?:DEV)$/', $this->_verboseLog['NiveauDeLog'])) { array_push($this->_verboseLog['MessageDeLog'], '[' . __LINE__ . ']' . ' - ' . FTP_CHDIR_FAILED ); } // [2021_VERBOSE_MSG_FEATURE] return array('result' => false, 'msg' => $this->_verboseLog['MessageDeLog']); } // Create a temporary file for the compressed file $this->_tmpFile = tempnam('/tmp', 'ICIRELAIS'); if(!($handle = @fopen($this->_tmpFile, 'w+'))) { /* [2021_VERBOSE_LOG_FEATURE] */ if (preg_match('/^(?:DEV)$/', $this->_verboseLog['NiveauDeLog'])) { array_push($this->_verboseLog['MessageDeLog'], '[' . __LINE__ . ']' . ' - ' . FOPEN_FAILED . $this->_tmpFile ); } // [2021_VERBOSE_MSG_FEATURE] return array('result' => false, 'msg' => $this->_verboseLog['MessageDeLog']); } // Get the compressed file in the temporary file if(!@ftp_fget($conn, $handle, $input['remote_file'], FTP_BINARY, 0)) { /* [2021_VERBOSE_LOG_FEATURE] */ if (preg_match('/^(?:DEV)$/', $this->_verboseLog['NiveauDeLog'])) { array_push($this->_verboseLog['MessageDeLog'], '[' . __LINE__ . ']' . ' - ' . FTP_GET_FAILED . $input['remote_file'] ); } // [2021_VERBOSE_MSG_FEATURE] return array('result' => false, 'msg' => $this->_verboseLog['MessageDeLog']); } @fclose($handle); @ftp_close($conn); /* [2021_VERBOSE_LOG_FEATURE] */ if (preg_match('/^(?:BASE|DEV)$/', $this->_verboseLog['NiveauDeLog'])) { array_push($this->_verboseLog['MessageDeLog'], '[' . __LINE__ . ']' . ' - ' . str_replace('déroulée', 'déroulé', DOWNLOAD_OK) . $input['remote_file'] ); } // [2021_VERBOSE_MSG_FEATURE] return array('result' => true, 'msg' => $this->_verboseLog['MessageDeLog']); } //========================================================================================================================= /** * Uncompress ICI Relais files in temporary files * * @return array * - 'result' boolean * - 'msg' varchar */ function uncompress($input) { // If the download directory doesn't exist, create it if(!is_dir($this->_download_dir)) { @mkdir($this->_download_dir, 0777, true); } else { @chmod($this->_download_dir, 0777); } // Open the local file $file = $this->_download_dir.DIRECTORY_SEPARATOR.$input['local_file']; if(!($handle2 = @fopen($file, 'w+'))) { /* [2021_VERBOSE_LOG_FEATURE] */ if (preg_match('/^(?:DEV)$/', $this->_verboseLog['NiveauDeLog'])) { array_push($this->_verboseLog['MessageDeLog'], '[' . __LINE__ . ']' . ' - ' . FOPEN_FAILED . $file ); } // [2021_VERBOSE_MSG_FEATURE] return array('result' => false, 'msg' => $this->_verboseLog['MessageDeLog']); } if($this->_tmpFile === null) { /* [2021_VERBOSE_LOG_FEATURE] */ if (preg_match('/^(?:DEV)$/', $this->_verboseLog['NiveauDeLog'])) { array_push($this->_verboseLog['MessageDeLog'], '[' . __LINE__ . ']' . ' - ' . FILE_DOESNOT_EXIST . $this->_tmpFile ); } // [2021_VERBOSE_MSG_FEATURE] return array('result' => false, 'msg' => $this->_verboseLog['MessageDeLog']); } // Open the compresses file if(!$zp = @gzopen($this->_tmpFile, 'r')){ /* [2021_VERBOSE_LOG_FEATURE] */ if (preg_match('/^(?:DEV)$/', $this->_verboseLog['NiveauDeLog'])) { array_push($this->_verboseLog['MessageDeLog'], '[' . __LINE__ . ']' . ' - ' . GZOPEN_FAILED . $this->_tmpFile ); } // [2021_VERBOSE_MSG_FEATURE] return array('result' => false, 'msg' => $this->_verboseLog['MessageDeLog']); } // read the compress temporary file and write it in an uncompressed one if(!@fwrite($handle2, gzread($zp, 9999999))) { /* [2021_VERBOSE_LOG_FEATURE] */ if (preg_match('/^(?:DEV)$/', $this->_verboseLog['NiveauDeLog'])) { array_push($this->_verboseLog['MessageDeLog'], '[' . __LINE__ . ']' . ' - ' . FWRITE_FAILED . $input['local_file'] ); } // [2021_VERBOSE_MSG_FEATURE] return array('result' => false, 'msg' => $this->_verboseLog['MessageDeLog']); } @fclose($handle2); @gzclose($zp); /* [2021_VERBOSE_LOG_FEATURE] */ if (preg_match('/^(?:BASE|DEV)$/', $this->_verboseLog['NiveauDeLog'])) { array_push($this->_verboseLog['MessageDeLog'], '[' . __LINE__ . ']' . ' - ' . UNCOMPRESS_OK . $input['remote_file'] ); } // [2021_VERBOSE_MSG_FEATURE] return array('result' => true, 'msg' => $this->_verboseLog['MessageDeLog']); } //========================================================================================================================= /** * Get ICI Relais files content, truncate table and insert new datas * * @return array * - 'result' boolean * - 'msg' varchar */ function get_content_and_save ($input) { $local_file = $this->_download_dir.DIRECTORY_SEPARATOR.$input['local_file']; // check if it is a file if(!is_file($local_file)) { /* [2021_VERBOSE_LOG_FEATURE] */ if (preg_match('/^(?:DEV)$/', $this->_verboseLog['NiveauDeLog'])) { array_push($this->_verboseLog['MessageDeLog'], '[' . __LINE__ . ']' . ' - ' . NOT_A_FILE . $local_file ); } // [2021_VERBOSE_MSG_FEATURE] return array('result' => false, 'msg' => $this->_verboseLog['MessageDeLog']); } // check if the file is empty if(filesize($local_file) == 0) { /* [2021_VERBOSE_LOG_FEATURE] */ if (preg_match('/^(?:DEV)$/', $this->_verboseLog['NiveauDeLog'])) { array_push($this->_verboseLog['MessageDeLog'], '[' . __LINE__ . ']' . ' - ' . FILE_EMPTY . $local_file ); } // [2021_VERBOSE_MSG_FEATURE] return array('result' => false, 'msg' => $this->_verboseLog['MessageDeLog']); } // truncate table $query = "TRUNCATE ".$input['table_name']; $truncate_table = tep_db_query($query); /* [2021_VERBOSE_LOG_FEATURE] */ if (preg_match('/^(?:DEV)$/', $this->_verboseLog['NiveauDeLog'])) { array_push($this->_verboseLog['MessageDeLog'], '[' . __LINE__ . ']' . ' - ' . 'VIDAGE DE LA TABLE (' . $input['table_name'] . ') sql="' . $query . '" = ' . 'Succès' ); } // get table fields $function = "_".$input['table_name']."_fields"; $fields = $this->$function(); // Query construction 1/2 (field part) $insert = "INSERT INTO ".$input['table_name']." ("; foreach($fields as $filed_name) { // -> [SI-LINDER-PARTNER-7][OSC] - Résolution d'un problème dans une désynchronisation du synchroniseur des CODES de Points-Relais pour le module DPD (fonctionne indépendamment du module DPD) // .. on va forcer le nom de champ "text" à se comporter comme un argument litérral. (car "text" est un mot-clef réservé en langage/syntaxe MySQL/MariaDB) if ($filed_name == 'text') { $filed_name = '`text`'; } // <- [SI-LINDER-PARTNER-7][OSC] - Résolution d'un problème dans une désynchronisation du synchroniseur des CODES de Points-Relais pour le module DPD (fonctionne indépendamment du module DPD) $insert .= $filed_name.", "; } $insert = substr($insert,0,strlen($insert)-2).") VALUES "; // Read file, get content into a variable and send frequently to the database $has_begin = 0; $has_end = 0; $i = 0; $values = ""; $line = "dummy"; $handle = @fopen($local_file, "r"); if ($handle) { while (!feof($handle) && !empty($line) ) { // Save to database frequently if($i == 1000){ $values = substr($values,0,strlen($values)-1); $insert_to_database = tep_db_query($insert.$values); $values = ""; $i = 0; } // Get the current line $line = fgets($handle); // -> [SI-LINDER-PARTNER-7][OSC] - Résolution d'un problème dans une désynchronisation du synchroniseur des CODES de Points-Relais pour le module DPD (fonctionne indépendamment du module DPD) /* On va dégager tout l'ancien code de remplissement de $data qui contient les valeurs à injecter à la table icirelais/icibackup, dans le sens où .. .. avec l'ancienne méthode... les données dans $data étaient TOUJOURS VIDES, à cause d'une très mauvaise utilisation des conditions if/elseif et else .. ... Seule la condition else {} était capable de valoriser et peupler la variable $data, or, les deux autres conditions, if/elseif {} devaient êtres censées le faire aussi .. .... Ce qui dans leur condition était complètement omis! .... De fait, on vire tout l'ancien code de cette portion, et on va le remplacer par un switch, beaucoup plus joli et maléable */ // .. on vérifie si la variable $line est pas vide.. ou n'existe pas, avant de faire quoi que ce soit ! if ( empty($line)) { // .. si la variable $line est vide, on abandonne tout et on retourne un message d'avertissement de données nulles /* [2021_VERBOSE_LOG_FEATURE] */ if (preg_match('/^(?:DEV)$/', $this->_verboseLog['NiveauDeLog'])) { array_push($this->_verboseLog['MessageDeLog'], '[' . __LINE__ . ']' . ' - ' . 'La variable $line="' . $line . '" qui contient la ligne numero ' . $i . ' du fichier "' . $local_file . '" est VIDE ou N\'EXISTE PAS ou PLUS ! Par conséquent, n stoppe la lecture du fichier' ); } // [2021_VERBOSE_MSG_FEATURE] // return array('result' => false, 'msg' => $this->_verboseLog['MessageDeLog']); } else { switch ( substr($line, 0, 1) ) { case 'D': // .. si le fichier ainsi récupéré contient un D, au début de la LONGUE LIGNE de CSV (qui est récupéré sur une seule ligne) .. // ... on considère que le fichier dispose d'un bon commencement .. // .... donc on revalorise la variable qui définira la vérification du bon fonctionnement de la suite $has_begin = 1; break; case 'F': // .. si le fichier ainsi récupéré contient un F, à la fin de la LONGUE LIGNE de CSV (qui est récupéré sur une seule ligne) .. // ... on considère que le fichier dispose d'une bonne terminaison .. // .... donc on revalorise la variable qui définira la vérification du bon fonctionnement de la suite $has_end = 1; break; default: // .. pour tout autres cas, on ne fait finalement rien ici, on va voir ça plu loin break; } // .. on vérifie si les variables de vérifications ($has_begin OU $has_end) sont bien renseignées et correctes, et .. if ($has_begin == 1 OR $has_end == 1) { // .. si oui, on peuple et valorise la variable de données $data ! $data = explode(';', $line); // .. les index 0 et de fin, du tableau ne sont absolument pas compatibles avec la requête SQL, car, incomplets (de toutes façons, IciRelais ne s'en sert pas car c'est à titre de référence pour leurs développeurs), donc, on va les dépiler. // ATTENTION, ne fonctionne pas comme attendu ici, car le tableau peut se reconstituer dans un ordre différent à l'arrivée.. (non-protection des clefs/index suivants).. //array_shift($data); //array_pop($data); // .. puis, on refait comme avant: [We have to check $data[0] because empty line can't be treated] if ( is_array($data) && !empty($data[0]) ) { $values .= "("; foreach($data as $value) { // .. on protège les injections et erreurs SQL à cause du caractère: ' non échappé $values .= "'" . $this->_valueFilter(addslashes($value)) . "',"; } $values = substr($values, 0, strlen($values) - 1) . "),"; // .. les éléments du format 'D21.07.2021 ....' .. // .. et // .. les éléments du format 'F21.07.2021 ....' .. // ... ne sont absolument pas compatibles avec la requête SQL, car, incomplets .. // .... (de toutes façons, IciRelais ne s'en sert pas car c'est à titre de référence pour leurs développeurs), .. // ..... donc, on va les rechercher et les supprimer de la requête finale via une bonne et robuste expression régulière! .. $values = preg_replace( '/' . '\(\'[D|F]{1}[0-9]{2}[.]{1}[0-9]{2}[.]{1}[0-9]{4}\s{0,}\'\)[,]{0,1}' . '/', '', $values); $i++; } } else { // .. pour tout autres cas, on renvoie une erreur de fichiers NON CONFORME, et que l'intégrité des données POURRAIT ÊTRE MENACÉE .. // ... donc, on annule tout /* [2021_VERBOSE_LOG_FEATURE] */ if (preg_match('/^(?:DEV)$/', $this->_verboseLog['NiveauDeLog'])) { array_push($this->_verboseLog['MessageDeLog'], '[' . __LINE__ . ']' . ' - ' . 'Le fichier accédé pour la synchronisation n\'est pas en conformité avec le format attendu, comme l\'intégrité des données POURRAIT ÊTRE MENACÉE, on annule toute la synchronisation du-dit fichier !' ); } // [2021_VERBOSE_MSG_FEATURE] return array('result' => false, 'msg' => $this->_verboseLog['MessageDeLog']); } } // <- [SI-LINDER-PARTNER-7][OSC] - Résolution d'un problème dans une désynchronisation du synchroniseur des CODES de Points-Relais pour le module DPD (fonctionne indépendamment du module DPD) } fclose($handle); $values = substr($values,0,strlen($values)-1); $insert_to_database = tep_db_query($insert.$values); } // -> [SI-LINDER-PARTNER-7][OSC] - Résolution d'un problème dans une désynchronisation du synchroniseur des CODES de Points-Relais pour le module DPD (fonctionne indépendamment du module DPD) // (1) // .. on ne prévoit que de vérifier soit le HAUT du fichier ($has_begin) soit le BAS du fichier ($has_end), et non les deux comme avant, donc .. // ... pas && ou AND // ... mais // ... plutôt || ou OR // (2) // .. et on modifie le message de succès, car GET_CONTENT_OK ou GET_CONTENT_NEARLY_OK sont des constantes qui n'ont pas d'existences, donc, on s'en passe! // ... on supprime juste la mention à ces constantes dans les deux return().. // // 1\ if ($has_begin == 1 OR $has_end == 1) { // // 2\ /* [2021_VERBOSE_LOG_FEATURE] */ if (preg_match('/^(?:BASE|DEV)$/', $this->_verboseLog['NiveauDeLog'])) { array_push($this->_verboseLog['MessageDeLog'], '[' . __LINE__ . ']' . ' - ' . GET_CONTENT_OK . $local_file . ' s\'est bien déroulé.' ); } // [2021_VERBOSE_MSG_FEATURE] return array('result' => true, 'msg' => $this->_verboseLog['MessageDeLog']); } else { // // 2\ /* [2021_VERBOSE_LOG_FEATURE] */ if (preg_match('/^(?:BASE|DEV)$/', $this->_verboseLog['NiveauDeLog'])) { array_push($this->_verboseLog['MessageDeLog'], '[' . __LINE__ . ']' . ' - ' . GET_CONTENT_NEARLY_OK . $local_file . ' s\'est presque bien déroulé.' ); } // [2021_VERBOSE_MSG_FEATURE] return array('result' => true, 'msg' => $this->_verboseLog['MessageDeLog']); } // <- [SI-LINDER-PARTNER-7][OSC] - Résolution d'un problème dans une désynchronisation du synchroniseur des CODES de Points-Relais pour le module DPD (fonctionne indépendamment du module DPD) } //========================================================================================================================= /** * @param string $value * @return string */ function _valueFilter($value) { if($value == '-') { $value = null; } return $value; } //========================================================================================================================= function _icirelais_fields () { return array( 'file_id', 'relay_id', 'insee', 'owner_name', 'adresse_1', 'adresse_2', 'adresse_3', 'postal_code', 'city', 'shop_name', 'coord_lat', 'coord_long', 'pda_equipment', 'start_validity_date', 'end_validity_date', 'last_shippment_date', 'new_shippment_date', 'text', 'monday_opening_hours', 'tuesday_opening_hours', 'wednesday_opening_hours', 'thursday_opening_hours', 'friday_opening_hours', 'saturday_opening_hours', 'sunday_opening_hours', 'closing_period_start_date_1', 'closing_period_end_date_1', 'closing_period_start_date_2', 'closing_period_end_date_2', 'closing_period_start_date_3', 'closing_period_end_date_3', 'required_time'); } //========================================================================================================================= function _icibackup_fields () { return array( 'postal_code', 'relay_id', 'sort_order', 'distance'); } } ?>