MODIFICATIONS ET CREATIONS OSCOMMERCE POUR ICI RELAIS Objectif : Le but de ce document est d expliquer les fonctions de chaque nouveau fichier propre au module de livraison ICI relais. Il reprend également en détail les modifications apportées aux fichiers préexistants. Pour qui? Ce document est à l attention des développeurs qui voudraient reprendre le module pour l améliorer ou le rendre compatible avec une autre contribution. Comment lire ce fichier? Les fichiers sont répartis en deux catégories : Les nouveaux fichiers propres au module ICI relais : leurs fonctionnalités seront décrites dans l ensemble. Les fichiers préexistants d OsCommerce : les modifications effectuées seront détaillés. Les fichiers seront présentés en suivant l arborescence d OsCommerce. Rappel des fonctionnalités du module : Le module ICI relais a pour but de proposer un nouveau mode de livraison au client. Ce dernier passe sa commande et, au moment de la valider, il peut choisir de se la faire livrer à un des cinq espaces ICI relais proches de l adresse de livraison initialement renseignée. Ces points relais sont récupérés par web services. Le détail les concernant sont contenus dans un fichier texte déposé quotidiennement sur le serveur FTP d ICI relais. Un traitement récupère ces données et les intègre en base de données. De plus, le marchand peut créer une URL de tracking permettant au client de suivre, sur le site d ICI relais, son colis lors de son expédition.
Liste des fichiers impactés I. Les nouveaux fichiers propres au module ICI relais... 3 A. Admin/call_icirelais_file_synchronize.php... 3 B. Admin/includes/icirelais.js... 3 C. Admin/includes/classes/icirelais_file_synchronize.php... 3 D. Admin/includes/functions/functions_icirelais.php... 3 E. Admin/includes/languages/english/icirelais_file_synchronize.php... 4 F. Admin/includes/languages/french/icirelais_file_synchronize.php... 4 G. Images/icirelais... 4 H. Includes/icirelais.css... 4 I. Includes/icirelais.js... 4 J. Includes/classes/icirelais_get_point.php... 5 K. Includes/classes/icirelais_get_point_PHP5.php... 5 L. Includes/classes/nusoap/... 5 M. Includes/functions/icirelais_functions.php... 5 N. Includes/languages/english/modules/shipping/icirelais.php... 5 O. Includes/languages/french/modules/shipping/icirelais.php... 6 P. Includes/modules/shipping/icirelais.php... 6 Q. Includes/prototype... 6 II. Les modifications des fichiers préexistants d OsCommerce... 7 A. Account_history_info.php (optionnel)... 7 B. Checkout_shipping.php... 7 C. Admin/modules.php... 9 D. Admin/order.php... 10 E. Admin/includes/application_top.php... 10 F. Admin/includes/languages/english/orders.php... 11 G. Admin/includes/languages/french/orders.php... 11 H. Includes/application_top.php... 11 I. Includes/classes/order.php... 11 J. Includes/languages/english/checkout_shipping.php... 12 K. Includes/languages/french/checkout_shipping.php... 12
I. Les nouveaux fichiers propres au module ICI relais A. Admin/call_icirelais_file_synchronize.php Appelé par qui? admin/modules.php indirectement (le bouton est décrit dans les paramètres de configuration du module, donc dans le fichier includes/module/shipping/icirelais.php donc admin/modules.php n est pas modifié) Exécuté quant? Lors du clic sur le bouton «Synchroniser les fichiers». Action? Appel de la classe «icirelais_file_synchronize» (voir fichier icirelais_file_synchronize.php) B. Admin/includes/icirelais.js Appelé par qui? admin/orders.php Exécuté quant? Lors du clic sur le bouton «Créer le tracking» Action? Appel de l unique fonction Javascript du fichier, «settracking», qui créé l URL de tracking et l affiche dans le champ «Commentaires» C. Admin/includes/classes/icirelais_file_synchronize.php Appelé par qui? admin/call_icirelais_file_synchronize.php Exécuté quant? Lors du clic sur le bouton «Synchroniser les fichiers». Action? Cette classe télécharge les fichiers des points relais et du backup sur le serveur FTP d ICI relais, les décompresse et intègre les données dans les tables «icirelais» et «icibackup» de la base de données. A noter qu il existe deux versions de ce fichier. C est la version 2 qui est utilisée. Voici les différences entre les deux : V1 (4.8477 secondes) V2 (4.9947 secondes) AVANTAGES Récupération des données avant de vider la table Traite tout le fichier quelque soit son volume Meilleure détection de l intégrité du fichier Pas de parcours de fichier ligne par ligne INCONVENIANTS Ne traite pas les fichiers très volumineux Lecture du fichier ligne par ligne Vide la table avant de récupérer les données du fichier Détection de l intégrité du fichier moins bien placée D. Admin/includes/functions/functions_icirelais.php 1. Fonction display_htmllink_if_web_address : Appelé par qui? admin/order.php Exécuté quant? Lors de l affichage de l URL de tracking en back office.
Action? Permet de réactiver le lien pour l URL de tracking car OsCommerce neutralise les balises HTML lors de l intégration en base de données en remplaçant par exemple les < en < ; qui fait que le lien ne s affiche pas sans cette fonction. 2. Fonction disappear : Appelé par qui? admin/orders.php Exécuté quant? Lors de l affichage de la configuration du module. Action? Renvoie du vide pour que le bouton «Synchroniser les fichiers», paramétré en tant que clé de configuration du module, ne s affiche pas en édition (au lieu d avoir le bouton, nous aurions un champ texte avec le code HTML du bouton) E. Admin/includes/languages/english/icirelais_file_synchronize.php relais. Fichier de paramétrage contenant tous les textes anglais relatifs à la synchronisation des fichiers ICI F. Admin/includes/languages/french/icirelais_file_synchronize.php relais. Fichier de paramétrage contenant tous les textes français relatifs à la synchronisation des fichiers ICI G. Images/icirelais Appelé par qui? includes/icirelais.css Affichées où? Dans le détail du point relais. H. Includes/icirelais.css Déclaré par qui? checkout_shipping.php Utilisé par qui? includes/classes/icirelais_get_point.php Affichées où? Dans le détail du point relais. I. Includes/icirelais.js Déclaré par qui? checkout_shipping.php Utilisé par qui? includes/classes/icirelais_get_point.php Exécuté quant? Lors de l affichage du détail du point relais. Action? Charge la carte google.
J. Includes/classes/icirelais_get_point.php Appelé par qui? includes/modules/shipping/icirelais.php Exécuté quant? Lors du choix du mode de livraison. Action? Recherche les 5 points ICI relais les plus proches de l adresse de livraison initialement renseignée grâce soit au web service soit à la table «icibackup». K. Includes/classes/icirelais_get_point_PHP5.php Appelé par qui? personne, juste sauvegarde Exécuté quant? jamais. Action? idem que précédemment mais pour PHP 5 où Nusoap n est pas nécessaire L. Includes/classes/nusoap/ Appelé par qui? icirelais_get_point.php Exécuté quant? lors de l appel au web service. M. Includes/functions/icirelais_functions.php 1. Fonction display_htmllink_if_web_address : Appelé par qui? Account_history_info.php Exécuté quant? Lors de l affichage de l URL de tracking en front office. Action? Permet de réactiver le lien pour l URL de tracking car OsCommerce neutralise les balises HTML lors de l intégration en base de données en remplaçant par exemple les < en < ; qui fait que le lien ne s affiche pas sans cette fonction. 2. Fonction ici_adresse_label Appelé par qui? checkout_shipping.php Exécuté quant? Lors de l affichage de l adresse de livraison dans le récapitulatif de la commande. Action? Recherche l adresse du point relais sélectionné. N. Includes/languages/english/modules/shipping/icirelais.php Fichier de paramétrage contenant tous les textes anglais relatifs au mode d expédition ICI relais.
O. Includes/languages/french/modules/shipping/icirelais.php Fichier de paramétrage contenant tous les textes français relatifs au mode d expédition ICI relais. P. Includes/modules/shipping/icirelais.php Fichier de paramétrage du mode d expédition ICI relais. Q. Includes/prototype Répertoire contenant les fichiers sources pour afficher la popup du détail d un point relais ainsi que l effet grisé de la fenêtre.
II. Les modifications des fichiers préexistants d OsCommerce Chaque modification apportées sur les fichiers préexistants d OsCommerce débute et termine par un commentaire spécifique au module. // Added for ICI relais // End added for ICI relais Pour trouver la modification dans les fichiers modifiés, se référer à «Ligne modifiée». Avant : A. Account_history_info.php (optionnel) Ligne modifiée : 218 Nature de la modification : Ajout de l appel d une fonction. But de la modification : afficher le lien de tracking vers ICI relais en tant que tel (OsCommerce bloque le code HTML à l entrée en base de données). nl2br(tep_output_string_protected($statuses['comments'])) Après : display_htmllink_if_web_address(nl2br(tep_output_string_protected($statuses['comments']))) B. Checkout_shipping.php 1. Définition de la fonction de formatage de l adresse de livraison appelée par défaut Ligne modifiée : 16 Nature de la modification : Définition du nom de la fonction à appeler par défaut pour le formatage de l adresse de livraison. $function_address = 'tep_address_label'; Avant : 2. Vérification de l adresse de livraison : gestion du cas ICI relais Ligne modifiée : 35 Nature de la modification : Exécution d un requête SQL spécifique à ICI relais. But de la modification : Recherche de la validité de l adresse de livraison dans le cas ICI relais et redéfinition de la fonction à appeler pour le formatage de l adresse de livraison (tep_address_label pour une adresse de livraison normale, ici_address_label pour une adresse de livraison ICI relais).
$check_address_query = tep_db_query("select count(*) as total from ". TABLE_ADDRESS_BOOK. " where customers_id = '". (int)$customer_id. "' and address_book_id = '". (int)$sendto. "'"); $check_address = tep_db_fetch_array($check_address_query); Après : $tab = explode('_', $HTTP_POST_VARS['shipping']); if($tab[0] == 'icirelais') { $check_address_query = tep_db_query("select count(*) as total from icirelais where relay_id = '". $tab[1]. "' "); $sendto = $HTTP_POST_VARS['shipping']; $function_address = 'ici_address_label'; } else { $check_address_query = tep_db_query("select count(*) as total from ". TABLE_ADDRESS_BOOK. " where customers_id = '". (int)$customer_id. "' and address_book_id = '". (int)$sendto. "'");; } Avant : 3. Affichage d un texte plus court pour le mode d expédition choisi dans le récapitulatif de la commande Ligne modifiée : 135 Nature de la modification : Ajout d un test. Si, pour la méthode choisie, le champ $quote[$i][methods][$i][text] est rempli, on l affiche, ce qui arrivera que pour ICI relais car défini comme tel dans le fichier de paramétrage de ce mode d expédition. But de la modification : Afficher un texte plus cours et sans code HTML dans le récapitulatif de la commande, dans le champ mode d expédition. En effet, dans le cas ICI relais, le champ $quote[0]['methods'][0]['title'] contient tout le code de la div cachée contenant le détail du point. 'title' => (($free_shipping == true)? $quote[0]['methods'][0]['title'] : $quote[0]['module']. ' ('. $quote[0]['methods'][0]['title']. ')'), Après : 'title' => (($free_shipping == true)? $quote[0]['methods'][0]['title'] : (isset($quote[0]['methods'][0]['text'])? $quote[0]['methods'][0]['text'] : $quote[0]['module']. ' ('. $quote[0]['methods'][0]['title']. ')')), 4. Inclusion des fichiers CSS et Javascript nécessaires à l affichage de la popup détail Ligne modifiée : 176 Nature de la modification : Inclusion de fichiers CSS et Javascript. But de la modification : Afficher la popup du détail d un point relais. <!-- For the window with ici relais point details --> <link rel="stylesheet" type="text/css" href="includes/prototype/windows/themes/default.css"></link> <script type="text/javascript" src="includes/prototype/prototype.js"> </script> <script type="text/javascript" src="includes/prototype/window.js"> </script> <link rel="stylesheet" type="text/css" href="includes/icirelais.css"> <script type="text/javascript" src="includes/icirelais.js"></script> <!-- google api web accès --> <script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false"></script>
5. Appel de la bonne fonction de formatage de l adresse de livraison Ligne modifiée : 265 Nature de la modification : Appel à une fonction dont le nom a été redéfini plus haut. But de la modification : Faire appel à la bonne fonction de formatage de l adresse de livraison. En effet, OsCommerce, par défaut, va rechercher l adresse du client en base de données. Dans le cas ICI relais, il faut aller chercher l adresse de livraison en fonction du point relais sélectionné. La fonction propre à ICI relais se trouve dans le fichier includes/functions/icirelais_functions.php <td class="main" valign="top"><?php echo $function_address($customer_id, $sendto, true, ' ', '<br>');?></td> 6. Affichage du lien «Changer d adresse de livraison» Ligne modifiée : 336 Nature de la modification : Inclusion d un lien HTML. But de la modification : Afficher un lien «Changer l adresse de livraison» dans le mode d expédition ICI relais. $change_address_link = ''; if($quotes[$i]['id'] == 'icirelais') { $change_address_link = ' <a href="'. tep_href_link(filename_checkout_shipping_address, '', 'SSL'). '" style="text-decoration:underline; fontweight:normal;">.text_change_address. </a>'; } // ligne 350 <td class="main" colspan="3"><b><?php echo $quotes[$i]['module'].$change_address_link;?></b> 7. Affichage de la phrase d introduction des points ICI relais Ligne modifiée : 361 Nature de la modification : Inclusion d une ligne dans le tableau des points ICI relais. But de la modification : Afficher une phrase d introduction aux points ICI relais. if($quotes[$i]['id'] == 'icirelais') { echo '<tr><td colspan=2 class="main" width="75%">. TEXT_INTRODUCTION_ICIRELAIS_POINT. </td></tr>'; } C. Admin/modules.php Ligne modifiée : 212 Nature de la modification : Echappement d un warning potentiel avec @. But de la modification : Eviter une erreur lors du camouflage du bouton «Synchronisation des fichiers» en édition du module ICI Relais.
@eval('$keys.= '. $value['set_function']. "'". $value['value']. "', '". $key. "');"); D. Admin/order.php 1. Inclusion du fichier Javascript pour le tracking Ligne modifiée : 101 Nature de la modification : Inclusion d un fichier javascript. <script type="text/javascript" src="includes/icirelais.js"></script> Avant : 2. Affichage du lien de tracking en tant que tel (optionnel) Ligne modifiée : 284 Nature de la modification : Ajout de l appel à une fonction. But de la modification : afficher le lien de tracking vers ICI relais en tant que tel (OsCommerce bloque le code HTML à l entrée en base de données) nl2br(tep_db_output($orders_history['comments'])) Après : display_htmllink_if_web_address(nl2br(tep_db_output($orders_history['comments']))) 3. Champ ICIPASS et création du tracking Ligne modifiée : 312 Nature de la modification : Ajout d un champ ICIPASS et d un bouton «Créer le tracking». But de la modification : Lors du clic sur le bouton, le champ Commentaire est automatiquement rempli avec l URL de tracking construite à partir de l ICIPASS saisi. <tr> <td class="main"><b><?php echo 'ICIPASS ICI relais';?></b> <?php echo tep_draw_input_field('icipass', '', $order->info['icipass']);?></td> <td valign="top"><input type="button" value="<?php echo TEXT_CREATE_TRACKING;?>" onclick="settracking('<?php echo MODULE_SHIPPING_ICIRELAIS_TACKING_URL;?>','<?php echo TEXT_COMMENT_TRACKING;?>','<?php echo TEXT_ERROR_TRACKING;?>');"/></td> </tr> E. Admin/includes/application_top.php Ligne modifiée : 241 Nature de la modification : Inclusion d un fichier de fonctions. But de la modification : Contient les fonctions propres à ICI relais comme display_htmllink_if_web_address et disappear.
require_once(dir_ws_functions. 'icirelais_function.php'); F. Admin/includes/languages/english/orders.php Ligne modifiée : 81 Nature de la modification : Inclusion de define. But de la modification : Afficher les libellés propres à ICI relais. define('text_create_tracking','create tracking'); define('text_comment_tracking','to follow your shipping n $1, clic to the following link : \n'); define('text_error_tracking','icipass length must be 13 minimum'); G. Admin/includes/languages/french/orders.php Ligne modifiée : 81 Nature de la modification : Inclusion de define. But de la modification : Afficher les libellés propres à ICI relais. define('text_create_tracking','créer le tracking'); define('text_comment_tracking','pour suivre votre expédition n $1, cliquez sur le lien suivant : \n'); define('text_error_tracking','icipass doit contenir au moins 13 caractères'); H. Includes/application_top.php Ligne modifiée : 515 Nature de la modification : Inclusion d un fichier de fonctions. But de la modification : Contient les fonctions propres à ICI relais comme display_htmllink_if_web_address et ici_address_label. require_once(dir_ws_functions. 'icirelais_function.php'); I. Includes/classes/order.php 1. Recherche de l adresse du point relai Ligne modifiée : 142 Nature de la modification : Ajout d un requête dans le cas d ICI relais. But de la modification : Rechercher l adresse du point relai plutôt que celle du client dans le cas d une livraison par ICI relais. $tab = explode('_', $sendto); if($tab[0] == 'icirelais') { $query = "select owner_name as entry_firstname, '' as entry_lastname, SUBSTRING(shop_name,1,32) as entry_company, adresse_1 as entry_street_address, '' as entry_suburb, postal_code as entry_postcode,
city as entry_city, z.zone_id as entry_zone_id, zone_name, 73 as entry_country_id, c.countries_id, c.countries_name, c.countries_iso_code_2, c.countries_iso_code_3, c.address_format_id, '' as entry_state from icirelais ab left join ". TABLE_ZONES. " z on (zone_country_id = 73 and LOCATE('77', zone_code) > 0) left join ". TABLE_COUNTRIES. " c on (countries_id = 73) where relay_id = '".$tab['1']."'"; } else { $query = "select ab.entry_firstname, ab.entry_lastname, ab.entry_company, ab.entry_street_address, ab.entry_suburb, ab.entry_postcode, ab.entry_city, ab.entry_zone_id, z.zone_name, ab.entry_country_id, c.countries_id, c.countries_name, c.countries_iso_code_2, c.countries_iso_code_3, c.address_format_id, ab.entry_state from ". TABLE_ADDRESS_BOOK. " ab left join ". TABLE_ZONES. " z on (ab.entry_zone_id = z.zone_id) left join ". TABLE_COUNTRIES. " c on (ab.entry_country_id = c.countries_id) where ab.customers_id = '". (int)$customer_id. "' and ab.address_book_id = '". (int)$sendto. "'"; } J. Includes/languages/english/checkout_shipping.php Ligne modifiée : 33 Nature de la modification : Inclusion de define. But de la modification : Afficher les libellés propres à ICI relais. define('text_change_address','changer l\'adresse de livraison'); define('text_introduction_icirelais_point','les espaces ICI relais suivants sont disponibles autour de l\'adresse de livraison saisie :'); K. Includes/languages/french/checkout_shipping.php Ligne modifiée : 33 Nature de la modification : Inclusion de define. But de la modification : Afficher les libellés propres à ICI relais. define('text_change_address','change shipping address'); define('text_introduction_icirelais_point','ici relais points available around the shipping address selected :');