From: Olivier Tétard Date: Tue, 28 May 2013 17:18:09 +0000 (+0200) Subject: Ajout d'un formulaire permettant de filtrer les données exportées. X-Git-Url: http://olivier.miskin.fr/git/?a=commitdiff_plain;h=c13a2768a862240162d8a31345b3d633a16f9ef7;p=spip_souscriptions.git Ajout d'un formulaire permettant de filtrer les données exportées. --- diff --git a/action/exporter_souscriptions.php b/action/exporter_souscriptions.php index 85276a9..56f65a0 100644 --- a/action/exporter_souscriptions.php +++ b/action/exporter_souscriptions.php @@ -6,11 +6,15 @@ function action_exporter_souscriptions_dist($arg=null) { * $arg contient les différents arguments, séparés par des '/'. Une * fois passés dans la fonctions split, il se présente de la manière * suivante : - * argument en position 1 : 'paye' ou 'tous' - * argument en position 2 : type de souscription (dons, adhesion) + * + * argument en position 1 : 'paye', 'commande', 'erreur' ou 'tous' + * argument en position 2 : type de souscription ('dons', + * 'adhesion') + * argument en position 3 : identifiant de la campagne + * argument en position 4 : date de début (au format timestamp) + * argument en position 5 : date de fin (au format timestamp) */ - /* FIXME: permettre de selectionner les exports */ /* FIXME: améliorer la jointure... */ if (is_null($arg)) { @@ -19,16 +23,41 @@ function action_exporter_souscriptions_dist($arg=null) { } /* Vérification des droits de l'utilisateur. */ - if(!autoriser("exporter", "souscriptiondon", '')) { + if(!autoriser("exporter", "souscription", '')) { include_spip('inc/minipres'); echo minipres(); exit; } - $arg = explode("/", $arg); + try { + $arg = explode("/", $arg); - $type_statut = $arg[0]; - $type_souscription = $arg[1]; + if(sizeof($arg) != 5) + throw new Exception(); + + $type_souscription = $arg[0]; + if($type_souscription && !in_array($type_souscription, array('don', 'adhesion'))) + throw new Exception(); + + $statut = $arg[1]; + if($statut && !in_array($statut, array('paye', 'commande', 'erreur'))) + throw new Exception(); + + $id_campagne = $arg[2]; + if($id_campagne && !ctype_digit($id_campagne)) + throw new Exception(); + + $date_debut = $arg[3]; + $date_fin = $arg[4]; + + if(($date_debut && !ctype_digit($date_debut)) || ($date_fin && !ctype_digit($date_fin))) + throw new Exception(); + } + catch(Exception $e) { + include_spip('inc/minipres'); + echo minipres(); + exit; + } /* Préparation de la requête */ $select = "id_souscription, courriel, type_souscription," @@ -40,22 +69,25 @@ function action_exporter_souscriptions_dist($arg=null) { $where = array(); if($type_souscription) $where[] = "type_souscription='$type_souscription'"; - else - $type_souscription = "tous"; - - if($type_statut == "payes") { - $where[] = "reglee='oui'"; - } - elseif($type_statut == "tous") { - /* Afficher toutes les transactions du type demandé */ - } - else { - include_spip('inc/minipres'); - echo minipres("Argument invalide"); - exit; + if($statut) { + if($statut == "paye") + $where[] = "reglee='oui'"; + elseif($statut == "commande") + $where[] = "spip_transactions.statut='commande'"; + elseif($statut == "erreur") + $where[] = "spip_transactions.statut like 'echec'"; } + if($id_campagne) + $where[] = "spip_souscription_campagnes.id_souscription_campagne = '$id_campagne'"; + + if($date_debut) + $where[] = "date_souscription > '" . date ("Y-m-d 00:00:00", $date_debut) . "'"; + + if($date_fin) + $where[] = "date_souscription < '" . date ("Y-m-d 23:59:59", $date_fin) . "'"; + $row = sql_select($select, $from, $where); $entete = array("ID du don", @@ -83,6 +115,6 @@ function action_exporter_souscriptions_dist($arg=null) { /* Utilisation de la fonction exporter_csv de Bonux */ $exporter_csv = charger_fonction('exporter_csv', 'inc/', true); - $exporter_csv("souscriptions_${type_souscription}_${type_statut}", $row, ',', $entete); + $exporter_csv("souscriptions", $row, ',', $entete); exit(); } diff --git a/formulaires/exporter_souscriptions.html b/formulaires/exporter_souscriptions.html new file mode 100644 index 0000000..c2ca71e --- /dev/null +++ b/formulaires/exporter_souscriptions.html @@ -0,0 +1,38 @@ +[(#REM) Le tableau est inversé pour ne pas tomber dans le panneau de +array_merge qui ne réindexe le tableau si la valeur est numérique. Le +tableau est retourné lors de son utilisation via le filtre +array_flip. ] +#SET{liste_campagnes, #ARRAY{Tous, tous}} + + #SET{liste_campagnes, #GET{liste_campagnes}|array_merge{#ARRAY{#TITRE, #ID_SOUSCRIPTION_CAMPAGNE}}} + + +
+ +

<:souscription:voir_exporter:>

+ + [

(#ENV*{message_ok})

] + [

(#ENV*{message_erreur})

] + + [(#ENV{editable}) +
+ #ACTION_FORMULAIRE{#ENV{action}} +
    + [(#SAISIE{selection, exporter_type_souscription, label=<:souscription:label_exporter_type_souscription:>, + cacher_option_intro=oui, datas=#ARRAY{tous, Tous, don, Dons, adhesion, Adhésions}})] + + [(#SAISIE{selection, exporter_statut, label=<:souscription:label_exporter_statut:>, cacher_option_intro=oui, + datas=#ARRAY{tous, Tous, paye, Payés, commande, Commandes, erreur, Erreurs}})] + + [(#SAISIE{selection, exporter_campagne, label=<:souscription:label_exporter_campagne:>, + cacher_option_intro=oui, datas=#GET{liste_campagnes}|array_flip})] + + [(#SAISIE{date, exporter_date_debut, label=<:souscription:label_exporter_date_debut:>})] + + [(#SAISIE{date, exporter_date_fin, label=<:souscription:label_exporter_date_fin:>})] +
+ +

+
+ ] +
diff --git a/formulaires/exporter_souscriptions.php b/formulaires/exporter_souscriptions.php new file mode 100644 index 0000000..9bfc555 --- /dev/null +++ b/formulaires/exporter_souscriptions.php @@ -0,0 +1,66 @@ + $type_souscription, + 'exporter_statut' => "tous", + 'exporter_campagne' => "tous", + 'exporter_date_debut' => '', + 'exporter_date_fin' => ''); +} + +function formulaires_exporter_souscriptions_verifier_dist($type_souscription="tous") { + /* + * Note : la vérification du format des données est fait dans la + * fonction action (sauf pour les dates) + */ + + $erreurs = array(); + + $verifier = charger_fonction('verifier', 'inc/'); + if($e = _request('exporter_date_debut') && $err = $verifier(_request('exporter_date_debut'), 'date')) + $erreurs['exporter_date_debut'] = $err; + + if($e = _request('exporter_date_fin') && $err = $verifier(_request('exporter_date_fin'), 'date')) + $erreurs['exporter_date_fin'] = $err; + + return $erreurs; +} + +function formulaires_exporter_souscriptions_traiter_dist($type_souscription="tous") { + $type_souscription = _request('exporter_type_souscription'); + $statut = _request('exporter_statut'); + $campagne = _request('exporter_campagne'); + + $verifier = charger_fonction('verifier', 'inc/'); + $date = ""; + $verifier(_request('exporter_date_debut'), 'date', array('normaliser' => 'datetime'), $date_debut); + $verifier(_request('exporter_date_fin'), 'date', array('normaliser' => 'datetime'), $date_fin); + + /* Construction de l'URL spéciale pour l'action d'exportation. */ + $arg = sprintf("%s/%s/%s/%s/%s", + $type_souscription == 'tous' ? '' : $type_souscription, + $statut == 'tous' ? '' : $statut, + $campagne == 'tous' ? '' : $campagne, + $date_debut ? strtotime($date_debut) : "", + $date_fin ? strtotime($date_fin) : ""); + + include_spip('inc/actions'); + $redirect = generer_action_auteur('exporter_souscriptions', $arg); + + return array('redirect' => $redirect); +} diff --git a/lang/souscription_fr.php b/lang/souscription_fr.php index e78da55..5f372ad 100644 --- a/lang/souscription_fr.php +++ b/lang/souscription_fr.php @@ -4,7 +4,7 @@ // Produit automatiquement par le plugin LangOnet a partir de la langue source fr // Module: souscription // Langue: fr -// Date: 28-05-2013 19:48:54 +// Date: 28-05-2013 19:55:44 // Items: 72 if (!defined('_ECRIRE_INC_VERSION')) return; @@ -14,12 +14,16 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( // A 'ajouter_lien_souscription' => 'Ajouter cette souscription', +// B + 'bouton_exporter' => 'Exporter', + // C 'cfg_exemple' => 'Exemple', 'cfg_exemple_explication' => 'Explication de cet exemple', 'cfg_titre_parametrages' => 'Paramétrages', 'confirmer' => 'Valider', 'confirmer_creation_campagne' => 'Enregistrer', + 'config_info_enregistree' => 'La nouvelle configuration a été enregistrée', // E 'explication_montant_adhesion' => '', @@ -76,6 +80,11 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'label_type_saisie' => 'Types de saisies', 'label_type_souscription' => 'Type de souscription', 'label_ville' => 'Ville', + 'label_exporter_campagne' => 'Campagne', + 'label_exporter_date_debut' => 'Date de début', + 'label_exporter_date_fin' => 'Date de fin', + 'label_exporter_statut' => 'Statut des souscriptions', + 'label_exporter_type_souscription' => "Type de souscription", // S 'souscription_titre' => 'Souscription', diff --git a/paquet.xml b/paquet.xml index 4b0510a..22e17e3 100644 --- a/paquet.xml +++ b/paquet.xml @@ -1,7 +1,7 @@ GNU/GPL + diff --git a/prive/objets/liste/souscriptions.html b/prive/objets/liste/souscriptions.html index 39b39fc..0d2ef36 100644 --- a/prive/objets/liste/souscriptions.html +++ b/prive/objets/liste/souscriptions.html @@ -45,13 +45,4 @@
(#ENV*{sinon,''})
] -[(#BOITE_OUVRIR{<:souscription:voir_exporter:>,'simple','section'})] -[(#SET{arguments_export, ''})] - -[(#SET{arguments_export,#GET{arguments_export}|concat{/#ENV{type_souscription}|?{#ENV{type_souscription}}, /}})] - - -#BOITE_FERMER +#FORMULAIRE_EXPORTER_SOUSCRIPTIONS{#ENV{type_souscription}}