spip93 Posted October 24, 2018 Share Posted October 24, 2018 (edited) Bonjour à tous et à toutes, J'administre 3 sites Internet sous Prestashop. Pour une obscure raison, la personne que je remplace à ce poste, n'a pas fait de multiboutique mais bien 3 sites/boutiques distinct(e)s. (Je vais essayer de faire court) Comme mon prédécesseur touchait sa bille en programmation (contrairement à moi qui débute), il a développé plusieurs modules dont 1 pour préparer les commandes, qui va chercher, sur les 3 sites, les informations sur les commandes (N° commande, qui a commandé, quel transporteur, quel produit ont été commandés, ... ET les éventuels messages des clients) pour les combiner dans un fichier CSV. Tous les matins, la personne qui s'occupe de préparer les commandes, lance ce module sur le site maitre (sur lequel est rapatrié toutes les infos sur les commandes des 2 autres sites) pour générer le fichier CSV, imprimer cette liste de commandes et aller chercher les produits correspondants. Si je viens poser ma question aujourd'hui, c'est parce qu'il y a un bug sur ce module : depuis quelque temps, pour une raison encore inconnue, certains messages laissés par les clients ou par nous en interne, ne remontent pas et n'apparaissent pas sur ce fichier CSV. En cherchant dans le dossier du module en question, où étaient appelés/récupérés les messages, j'ai trouvé les lignes de code suivantes dans /classes/orderArrayCreator.class.php : foreach ($orderList as $line) { $message = DB::getInstance()->getValue("SELECT message FROM " . pSQL(_DB_PREFIX_) . "customer_message cm LEFT JOIN " . pSQL(_DB_PREFIX_) . "customer_thread ct ON (cm.id_customer_thread=ct.id_customer_thread) WHERE ct.id_order = " . (int)$line['id_order'] . " AND cm.id_customer_message = ( SELECT max(id_customer_message) FROM " . pSQL(_DB_PREFIX_) . "customer_message cm WHERE ct.id_order = " . (int)$line['id_order'] . " )" ); $tab = array( CHR(13) => " ", CHR(10) => " "); $messageModified = strtr($message, $tab); $messageReduced = ''; if ($messageModified != '') { $messageReduced = Tools::substr($messageModified, 0, 50) . ' [...]'; } puis, plus loin dans le fichier, le code suivant : $customerThreadToGet = array( 'resource' =>'customer_threads', 'display' => '[id]', 'filter[id_order]' => '[' . $id_order . ']' ); $xml_thread = $webService_getOrder->get($customerThreadToGet); $thread_resources = $xml_thread->customer_threads->children(); $thread = (int)$thread_resources->customer_thread->id; $messageToGet = array( 'resource' =>'customer_messages', 'display' => '[message]', 'sort' => '[id_DESC]', 'filter[id_customer_thread]' => '[' . $thread . ']' ); $xml_thread = $webService_getOrder->get($messageToGet); $message_resources = $xml_thread->customer_messages->children(); $message = (string)$message_resources->customer_message->message; (Dites-moi si je me trompe dans mon interprétation) Dans la première partie du code, on voit qu'on demande à aller chercher le message dans la table ps_customer_message en fonction de l'id_customer_thread. La table ps_customer_thread fait la jonction/le lien entre le N° de la commande (id_order) et l'id_customer_thread. Dans la seconde partie du code, dans la table ps_customer_thread on filtre par N° de commande (id_order) puis dans la table ps_customer_message, on filtre par id_customer_thread et on tri par ordre décroissant de façon à récupérer le dernier message. (Par rapport au code ci-dessus et étant relativement débutant en programmation) Pouvez-vous m'aider SVP à comprendre pourquoi ce module bugue et pourquoi certains messages ne sont pas récupérés ? Un grand merci par avance pour votre aide. Bonne journée Edited October 27, 2018 by spip93 Problème résolu (see edit history) Link to comment Share on other sites More sharing options...
doekia Posted October 24, 2018 Share Posted October 24, 2018 Peut-etre avez vous bloqué les droits sur le webservice ? Link to comment Share on other sites More sharing options...
spip93 Posted October 24, 2018 Author Share Posted October 24, 2018 (edited) Comment je peux savoir si les droits sont bloqués sur le webservice ? Comment je peux les débloquer si c'est le cas ? Ça expliquerait pourquoi certains messages remontent et pas d'autres ? Edit : Dans la procédure d'installation, mon prédécesseur a laissé des instructions, notamment de placer un fichier WebserviceRequest dans /override/classes/webservice . Je suis allé voir les droits d'accès pour ce fichier et c'est en 644. Il faudrait que je les mette en quoi pour débloquer la situation ? 744 ? 755 ? Voire 777 ? Edited October 24, 2018 by spip93 (see edit history) Link to comment Share on other sites More sharing options...
spip93 Posted October 25, 2018 Author Share Posted October 25, 2018 Je viens de faire un test sur une commande dont le message posté en interne ne remontait pas : j'ai reposté le message (toujours en interne, avec un "2" après pour différencier les messages) et, comme le système prend en compte le dernier message posté, celui-ci est (enfin) remonté. Je ne comprends pas, pourquoi est-ce que le système n'a pas fait remonter le message initial alors que c'était (à mes yeux) le dernier posté, pour cette commande, à ce moment là ? D'après ce que je vois (et comprends) dans le code, on demande de faire un tri décroissant par id_customer_thread. Est-ce qu'il ne faudrait pas mieux faire un tri par date de mise à jour (date_upd) ou d'ajout (date_add) ? Si oui, comment faire 1) pour qu'il fasse un tri décroissant par date d'ajout/mise à jour (du plus récent au plus vieux) et 2) qu'il prenne en compte le dernier message en date ? Link to comment Share on other sites More sharing options...
doekia Posted October 25, 2018 Share Posted October 25, 2018 Les droits d'un répertoire doivent être en 755 et un fichier en 644 Le problème me semble venir du fait que la requête sélectionne le customer_thread d'un coté et le max(id_customer_message) de l'autre Pour débugguer le plus simple est de copier la requête dans ton phpmyadmin et de la triturer pour lui faire retourner le bon résultat Link to comment Share on other sites More sharing options...
spip93 Posted October 27, 2018 Author Share Posted October 27, 2018 Bonjour, Mon problème est résolu hier avec la (grande) aide d'une personne sur un autre forum. Encore merci à elle, si elle me lit. Après quelques tentatives, cette personne a trouvé le code à mettre en remplacement de la première partie. Le voici pour ceux que ça intéresse : $message = DB::getInstance()->getValue("SELECT message FROM " . pSQL(_DB_PREFIX_) . "customer_message cm LEFT JOIN " . pSQL(_DB_PREFIX_) . "customer_thread ct ON (cm.id_customer_thread=ct.id_customer_thread) WHERE ct.id_order = " . (int)$line['id_order'] . " ORDER BY cm.id_customer_message DESC" ); Bonne journée Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now