Pour notre client spécialiste de la réparation de chaussures par Internet, nous avons du modifier le comportement de Prestashop afin de lui permettre de payer par carte bleue une commande qui n’a pas pu être finalisée/payée.

Pour cela nous avons donc créé le fichier /override/classes/controller/FrontController.php qui permet de charger un panier et de le transformer en commande. Théoriquement impossible dans un Prestashop qui interdit de charger un panier qui a déjà une commande associée. Et cela quelque que soit le statut de la commande.

Une fois le fichier terminé, nos tests montrent que notre développement ne fonctionne pas et que le fichier surcharge que nous avons créé n’est pas lu, exécuté, utilisé.

Même en mettant une instruction Php « die(); », le site Internet s’affiche bien, ce qui signifie que notre fichier n’est pas chargé.

Nous effectuons donc les vérifications basiques d’une surcharge / override qui ne fonctionne pas sous Prestashop à savoir :

  • Vérification du nom du fichier (Le nom de notre fichier est égal à celui de la classe maître) : ok
  • Vérification de l’emplacement du fichier (le répertoire de notre fichier avec override est identique à celui de la classe maître) : ok
  • Nom de la classe (Le nom de la classe est égal à celui de la classe maître sans le mot « Core » et on étend bien notre classe maître) : ok
  • Suppression du fichier de cache des override (/cache/class_index.php pour certaine version de Prestashop) : ok
  • Droit sur les fichiers : ok
  • A bout d’idée, suppression du cache dans l’interface d’administration (Paramètres avancés -> Performances -> Vider le cache) : ok

 

Malgré toutes ces vérifications, le fichier de surcharge n’est toujours pas exécuté par Prestashop.

 

Notre société étant une société spécialisée dans le développement sous Prestashop et applications mobiles, nous avons besoin de maitriser et comprendre les outils que nous proposons à nos clients. Nous nous sommes donc mis en tête de remonter le fonctionnement de Prestashop pour comprendre ce qui se passe.

Nous mettons donc un traceur sur le fichier /classes/PrestaShopAutoload.php à la ligne 114 pour savoir quels sont les fichiers qui sont chargés par Prestashop. La référence du fichier et de la ligne fonctionne pour un Prestashop en version 1.6.0.9.

 

Et là nous nous apercevons que notre fichier est vu par Prestashop, mais nous observons aussi qu’un fichier avec le même nom est présent dans le répertoire /override/controller/Front/. Ce qui n’est absolument pas sa place.

De ce fait, Prestashop détecte les 2 fichiers mais n’utiliseras que le dernier mentionné. Ce qui explique pourquoi notre fichier présent dans /override/classes/controller/FrontController.php n’est pas chargé mais bien celui présent dans le répertoire /override/controller/Front/FrontController.php.

 

Une consultation de l’historique du fichier erroné dans notre outil de gestion de version GIT nous permet de détecter l’origine de cette création indue.

Le problème étant identifié, sa résolution a été assez rapide. Il a fallu transvaser le contenu du fichier /override/controller/Front/FrontController.php dans notre fichier /override/classes/controller/FrontController.php puis supprimer le fichier /override/controller/Front/FrontController.php positionné de manière erronnée.

 

Cette histoire nous permet de nous remémorer que dans le cas de développement informatique, un problème peut être facilement résolu mais la détection de son origine peut prendre beaucoup plus de temps.

 

Image par OpenClipart-Vectors de Pixabay

Image par mrkaushikkashish de Pixabay