Ajout d'un formulaire permettant de filtrer les données exportées.
authorOlivier Tétard <olivier.tetard@miskin.fr>
Tue, 28 May 2013 17:18:09 +0000 (19:18 +0200)
committerOlivier Tétard <olivier.tetard@miskin.fr>
Tue, 28 May 2013 18:02:08 +0000 (20:02 +0200)
action/exporter_souscriptions.php
formulaires/exporter_souscriptions.html [new file with mode: 0644]
formulaires/exporter_souscriptions.php [new file with mode: 0644]
lang/souscription_fr.php
paquet.xml
prive/objets/liste/souscriptions.html

index 85276a9..56f65a0 100644 (file)
@@ -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 (file)
index 0000000..c2ca71e
--- /dev/null
@@ -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}}
+<BOUCLE_souscription_campagne(SOUSCRIPTION_CAMPAGNES)>
+  #SET{liste_campagnes, #GET{liste_campagnes}|array_merge{#ARRAY{#TITRE, #ID_SOUSCRIPTION_CAMPAGNE}}}
+</BOUCLE_souscription_campagne>
+
+<div class="formulaire_spip formulaire_exporter formulaire_#FORM">
+
+  <h3 class="titrem"><:souscription:voir_exporter:></h3>
+
+  [<p class="reponse_formulaire reponse_formulaire_ok">(#ENV*{message_ok})</p>]
+  [<p class="reponse_formulaire reponse_formulaire_erreur">(#ENV*{message_erreur})</p>]
+
+  [(#ENV{editable})
+  <form method="post" action="#ENV{action}">
+    #ACTION_FORMULAIRE{#ENV{action}}
+    <ul>
+      [(#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:>})]
+    </ul>
+
+    <p class="boutons"><input type="submit" class="submit" value="<:souscription:bouton_exporter:>" /></p>
+  </form>
+  ]
+</div>
diff --git a/formulaires/exporter_souscriptions.php b/formulaires/exporter_souscriptions.php
new file mode 100644 (file)
index 0000000..9bfc555
--- /dev/null
@@ -0,0 +1,66 @@
+<?php
+/**
+ * Gestion du formulaire de d'export des souscriptions
+ *
+ * @plugin     Souscription
+ * @copyright  2013
+ * @author     Olivier Tétard
+ * @licence    GNU/GPL
+ * @package    SPIP\Souscription\Formulaires
+ */
+
+if (!defined("_ECRIRE_INC_VERSION")) return;
+
+function formulaires_exporter_souscriptions_charger_dist($type_souscription="tous") {
+
+  if (!autoriser('exporter','souscription'))
+    return false;
+
+  return array('exporter_type_souscription' => $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);
+}
index e78da55..5f372ad 100644 (file)
@@ -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' => '<NEW>',
@@ -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',
index 4b0510a..22e17e3 100644 (file)
@@ -1,7 +1,7 @@
 <paquet
     prefix="souscription"
     categorie="communication"
-    version="0.5"
+    version="0.6"
     etat="dev"
     compatibilite="[3.0.5;3.0.*]"
     logo=""
@@ -15,6 +15,7 @@
 
   <licence>GNU/GPL</licence>
   <necessite nom="saisies" compatibilite="[1.24.0;]" />
+  <necessite nom="verifier" compatibilite="[1.0.2;]" />
   <necessite nom="bank" compatibilite="[2.2.1;]" />
   <necessite nom="spip_bonux" compatibilite="[3.0.4;]" />
   <necessite nom="pays" compatibilite="];[" />
index 39b39fc..0d2ef36 100644 (file)
 <div class="liste-objets souscriptions caption-wrap"><strong class="caption">(#ENV*{sinon,''})</strong></div>
 ]<//B_liste_souscriptions>
 
-[(#BOITE_OUVRIR{<:souscription:voir_exporter:>,'simple','section'})]
-[(#SET{arguments_export, ''})]
-
-[(#SET{arguments_export,#GET{arguments_export}|concat{/#ENV{type_souscription}|?{#ENV{type_souscription}}, /}})]
-
-<ul>
-  <li><a href="[(#URL_ACTION_AUTEUR{exporter_souscriptions,[(#VAL{payes}|concat{#GET{arguments_export}})]})]"><:souscription:label_exporter_payes:></a></li>
-  <li><a href="[(#URL_ACTION_AUTEUR{exporter_souscriptions,[(#VAL{tous}|concat{#GET{arguments_export}})]})]"><:souscription:label_exporter_tous:></a></li>
-</ul>
-#BOITE_FERMER
+#FORMULAIRE_EXPORTER_SOUSCRIPTIONS{#ENV{type_souscription}}