PHP et Koseven : ajout d’une fonctionnalité

Ce projet a été réalisé, lors d’un stage, dans le cadre de ma 2ème année de BTS.

Digidream est une société basée à Strasbourg dont les activités principales sont :

  • La publicité sur les réseaux sociaux
  • La création de site internet vitrine
  • La création de site marchand click & collect et E-commerce

C’est sur cette dernière activité que je suis intervenu dans le cadre de mon stage de deuxième année.

Présentation du projet

Mvel (mes ventes en ligne) est une application essentiellement écrite en PHP et basée sur la Framework Koseven (Koseven a Kohana Framework fork compatible with PHP7 | koseven.ga).

Le projet est hébergé sur la forge en ligne Gitlab.com. Le travail est distribué sous forme de ticket.

Travail effectué

Le stage a été réalisé seul et en télétravail. La communication se faisait par visioconférence et partage d’écran ou par message (Slack). Le code a été versionné à l’aide de Git et envoyé sur la forge en ligne GitLab.

Installation et découverte

Les premiers jours ont été accès sur la découverte du code et de Koseven, ainsi que la mise en place sur mon serveur Ubuntu de l’application.

L'environnement de travail est PhpStorm
L’environnement de travail

Premier ticket

Pour essayer de me familiariser avec ce Framework, mon premier ticket a été la recherche d’une faute de frappe dans la partie du backend administratif. L’ensemble de l’application est un immense puzzle, il y a des « morceaux » de code partout avec des utilités différentes. Par exemple, il n’existe qu’un seul bouton dont le « morceau » de code est réutilisé à chaque fois que nous avons besoin d’un « bouton ». Le but étant surtout de pouvoir tout réutiliser. Mais comme je n’avais pas la vision globale du code, la tâche n’a pas été facile.

Une fois le bon fichier trouvé, la correction a été simple, il suffisait d’enlever le « \ » en trop dans le texte descriptif

Texte à corriger dans le code

Export des clients

Le travail suivant avait pour objectif la mise en place d’une nouvelle fonctionnalité au site : la possibilité de pouvoir importer ou exporter de la base de données « les clients ». Le travail devait se faire en deux étapes. La première étape était la mise la place de l’export des clients, avec la possibilité de pouvoir choisir le ou les champs à exporter selon la liste de champs suivante : noms, prénoms, identifiant, adresses mails, numéro de téléphone et accord sur le RGPD des clients.

Le bouton « import / Export »

J’ai tout d’abord mis en place le bouton « import/export » et donc trouver le bon fichier de configuration pour y ajouter la configuration de notre bouton.

Configuration du bouton

Et nous obtenons le résultat suivant dans le backoffice : le bouton « import / Export » est placé.

Le backend avec affichage du bouton « Import / Export »

Ensuite, il a fallu mettre en place la fonctionnalité d’export des clients de la base de données en fonction des champs choisis pour l’export.

Page de configuration

Tout d’abord, il a fallu mettre en place la page de la configuration de la liste des champs à exporter

Fichier de configuration

Comme le montre la capture précédente, il a fallu mettre en place un nouveau Template : « sections/form_import_export », ceci afin de nous appuyer sur une classe qui existe déjà et qui gère tous les formulaires de l’application.

Configuration du formulaire de l’import/export

Configuration du bouton du formulaire

J’ai commencé par ajouter une « action », un bouton permettant de valider le formulaire (ci-dessus)

J’ai ensuite défini tous les autres champs qui formerons le formulaire comme déterminé par le pattern du site, sans les champs qui ont déjà été définis dans notre page de configuration.

Voici donc les champs dont la classe « Form » a besoin pour fonctionner.

Le « Template » ainsi configuré, il fallait mettre en place un outil dans la « Vue » : un « widget » qui va recevoir toutes les informations du contrôleur pour pouvoir les afficher.

Vue des formulaires d’export et d’import

La classe AdminImportExport

J’ai créé une classe qui va s’occuper de récupérer les différentes informations reparties dans les différents Template et fichier de configuration. J’ai mis en place les différentes propriétés privées ainsi que les « getters » et les « setters ».

Ils permettront de récupérer et de définir les propriétés du fichier de configuration.

Dans la capture ci-dessous, nous avons par exemple le « getter » sur le bouton « action » ou encore celui sur le formulaire d’export.

Getters et setters de la classe

Le problème que j’ai rencontré et de devoir prendre les « champs » du formulaire de configuration pour les placer dans le formulaire d’export. C’est donc ma classe qui s’en occuper

Boucle d’affichage des champs

Puis on récupère le reste des informations du formulaire d’export pour générer le formulaire, à l’aide de la classe Form.

Génération du formulaire ç l’aide de la classe Form

Puis, on fabrique la vue avec tous les éléments dont nous disposons :

Récupération des données par AdminImportExport

Le contrôleur

Comme notre modèle est un modèle MVC, c’est le contrôleur qui va s’occuper d’appeler la classe AdminImporExportBuilder lorsque nous en aurons besoin. J’ai donc ajouté une fonction dans le contrôleur.

Fonction privée du contrôleur qui appelle AdminImportExport

Voici le résultat

Affichage du formulaire d’export

Et une fois les choix faits, le bouton du formulaire apparait :

Après sélection des champs choisis, le bouton du formulaire apparait

Voici le lien vers le rapport au format « pdf » : https://site-en-vrac.com/portefolio/rapports/stage_digidream.pdf