Projet

Général

Profil

Actions

Evolution #100

fermé

Gestion des exports CSV

Ajouté par Grégory MARIGOT - TEICEE il y a presque 13 ans. Mis à jour il y a presque 13 ans.

Statut:
Fermé
Priorité:
Normal
Version cible:
Début:
01/04/2011
Echéance:
% réalisé:

100%

Temps estimé:
Version ProxyEPN:
2.0 Beta

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é.


Demandes liées 2 (0 ouverte2 fermées)

Lié à Evolution #80: Révision globale du codeFerméGrégory MARIGOT - TEICEE17/12/2010

Actions
Lié à Evolution #105: Exports CSV et filtresFerméGrégory MARIGOT - TEICEE22/04/2011

Actions

Mis à jour par Grégory MARIGOT - TEICEE il y a presque 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 classe lib/myFileCSV.class.php remplace les anciens fichiers :
  • apps/frontend/lib/csvExport.class.php
  • lib/myExport.class.php
Cette fois il ne s'agit plus d'appels statiques : la classe permet d'instancier un objet disposant des capacités suivantes :
  • 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 presque 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 presque 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).

Les modules concernés possèdent donc une action export qui se charge de générer le fichier CSV :
  • 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 presque 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 presque 13 ans

  • Statut changé de Résolu à Fermé
Actions

Formats disponibles : Atom PDF