Evolution #100
ferméGestion des exports CSV
100%
Description
Dans le cadre de la révision globale du code, les exports CSV seront tous gérés par une nouvelle classe.
Ce ticket reprend les changements précédement annoncés dans le ticket #80 pour plus de clarté.
Mis à jour par Grégory MARIGOT - TEICEE il y a plus de 13 ans
- % réalisé changé de 0 à 50
Modifications publiées sur le svn (r342) :
Mise en place d'une nouvelle classe pour le format CSV¶
Le code disposait de deux classes utilisées pour l'écriture de fichiers CSV. Cette fonctionalité méritée de reposer sur une classe plus complète. Ainsi la classelib/myFileCSV.class.php
remplace les anciens fichiers :
- apps/frontend/lib/csvExport.class.php
- lib/myExport.class.php
- variables représentant les caractères à utiliser pour le CSV : délimiteur de valeur, caractère d'échappement, séparateur de champs, terminaison de ligne ; mais aussi le charset et la présence ou non d'un entête.
- passage d'options pour modifier les valeurs par défaut citées ci-dessus.
- alimentation des données à convertir en CSV, soit globalement (array), soit ligne par ligne.
- passage optionnel d'une liste de champs, permettant de spécifier les champs à utiliser lors de l'export (les absents seront exclus) ainsi que l'ordre des colonnes
- passage optionnel de correspondances pour renommer certains noms de colonnes dans l'entête
- génération des entêtes HTTP adéquat pour la transmission des données CSV en téléchargement
- envoi des données (enchaine la conversion des données au format CSV, l'envoi des entêtes HTTP puis l'envoi des données CSV)
Mis à jour par Grégory MARIGOT - TEICEE il y a plus de 13 ans
- % réalisé changé de 50 à 80
Fonctionalité d'export CSV de la liste des usagers¶
Modifications publiées sur le svn (r346) :
La fonctionnalité d'export CSV de la liste des usagers a été remise en place en utilisant cette nouvelle classe. A noter que le traitement des données avant leur envoi est appelé depuis un template : la couche view permettant l'usage des Helpers, ces derniers peuvent être utiles pour le formatages des données exportées par l'objet.
Paramétrage de la classe myFileCSV (i18n)¶
Modifications publiées sur le svn (r391) :
- Pour ne pas perturber l'import des CSV généré par un Excel localisé FR, le séparateur passe de la virgule au point-virgule.
- Les entêtes générés à partir des noms des champs sont traités pour être présentable (même principe que les libellés des formulaires : MonChampsId deviendra Mon champs)
- Une nouvelle option i18n est activée par défaut : elle applique la méthode magique de traduction _() sur les noms des entêtes (nécessite que le _send() soit exécuté dans la couche vue)
Mis à jour par Grégory MARIGOT - TEICEE il y a plus de 13 ans
- % réalisé changé de 80 à 90
Modifications publiées sur le svn (r419) :
Généralisation des fonctionnalités d'export CSV¶
A l'origine les exports sont proposés sur la liste des usagers et des factures (+ les stats, mais le cas est particulier). Dorénavant les exports CSV sont proposés sur l'ensemble des objets suivants :- Usagers / Animateurs / Coordinateurs
- Factures
- GEPN
- EPN
- Equipements : ordinateurs
- Equipements : périphériques
- Equipements : logiciels
- Sessions (passées ou futures)
Permissions d'accès¶
L'accès à la fonction d'export est restreint aux utilisateurs ayant un profil animateur ou coordinateur.
De plus la gestion des droits s'appliquent toujours : ne sont exportés que les objets pour lesquels l'utilisateur dispose des droits d'accès à leur fiche descriptive.
Principe de fonctionnement¶
Chaque objet exportable doit disposé d'une méthode export() dans sa classe.
Celle-ci retourne un tableau de type champs=>valeur qui est normalement obtenu par la méthode toArray(), mais qui peut être modifié (ajout de champs annexes, remplacement d'id par les noms des objets associés, etc).
- Controle des droits d'accès à la fonctionnalité
- Initialisation d'un objet myFileCSV
- Renommage de certains entêtes de colonnes (optionnel)
- Spécification des champs à exporter, y compris l'ordre des colonnes (optionnel)
- Récupération de la liste des objets à exporter (selon le contexte de l'utilisateur)
- Génération du fichier CSV en appelant le rendu du partial global
proxyepn_export_csv
L'étape finale est donc définie dans un unique partial qui se charge d'alimenter l'instance myFileCSV avec la liste des objets transmise. Effectuer cette étape dans la couche 'view' permet aux méthodes d'export d'utiliser les helpers pour le formattage des valeurs et à l'objet CSV de bénéficier du support de l'internationalisation.
Grâce au partial commun, il n'est plus nécessaire de définir un template pour les actions export de chacun des modules.
Mis à jour par Grégory MARIGOT - TEICEE il y a plus de 13 ans
- Statut changé de In Progress à Résolu
- % réalisé changé de 90 à 100
Mis à jour par Grégory MARIGOT - TEICEE il y a plus de 13 ans
- Statut changé de Résolu à Fermé