From 82430d7b23bf331546a6e10284b6ed4808b4e7db Mon Sep 17 00:00:00 2001
From: "maieul@maieul.net" <>
Date: Fri, 3 Mar 2017 19:19:54 +0000
Subject: [PATCH] =?UTF-8?q?pouvoir=20effacer=20r=C3=A9guli=C3=A8rement=20l?=
 =?UTF-8?q?es=20r=C3=A9ponses=20d'un=20formulaire.=20=C3=89vite=20de=20con?=
 =?UTF-8?q?server=20plus=20qu'il=20ne=20faut=20des=20donn=C3=A9es=20potent?=
 =?UTF-8?q?iellement=20priv=C3=A9es?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .gitattributes                               |  1 +
 formidable_pipelines.php                     |  1 +
 genie/formidable_effacer_enregistrements.php | 44 ++++++++++++++++++++
 lang/formidable_fr.php                       |  2 +
 paquet.xml                                   |  2 +-
 traiter/enregistrement.yaml                  | 15 ++++++-
 6 files changed, 63 insertions(+), 2 deletions(-)
 create mode 100644 genie/formidable_effacer_enregistrements.php

diff --git a/.gitattributes b/.gitattributes
index a26b483a..d3d86a8f 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -37,6 +37,7 @@ formulaires/importer_formulaire.html -text
 formulaires/importer_formulaire.php -text
 formulaires/inc-formidable-boutons.html -text
 formulaires/inc-formidable-unicite.html -text
+genie/formidable_effacer_enregistrements.php -text
 genie/formidable_effacer_fichiers_email.php -text
 genie/formidable_hasher_ip.php -text
 http/collectionjson/formulaires-ressource.html -text
diff --git a/formidable_pipelines.php b/formidable_pipelines.php
index 67be1c18..f88bca4d 100644
--- a/formidable_pipelines.php
+++ b/formidable_pipelines.php
@@ -264,6 +264,7 @@ function formidable_formidable_traitements($flux) {
 function formidable_taches_generales_cron($flux) {
 	$flux['formidable_hasher_ip'] = 24*3600;
 	$flux['formidable_effacer_fichiers_email'] = 24*3600;
+	$flux['formidable_effacer_enregistrements'] = 24*3600;
 	return $flux;
 }
 
diff --git a/genie/formidable_effacer_enregistrements.php b/genie/formidable_effacer_enregistrements.php
new file mode 100644
index 00000000..7c0b5efb
--- /dev/null
+++ b/genie/formidable_effacer_enregistrements.php
@@ -0,0 +1,44 @@
+<?php
+
+
+if (!defined('_ECRIRE_INC_VERSION')) {
+	return;
+}
+
+include_spip('inc/formidable_fichiers');
+/**
+ * Effacer régulièrement les enregistrements obsolètes
+**/
+function genie_formidable_effacer_enregistrements($t) {
+	$res = sql_select("id_formulaire,traitements","spip_formulaires");
+	while ($result = sql_fetch($res)) {
+		$traitements = unserialize($result['traitements']);
+		$id_formulaire = $result['id_formulaire'];
+		if (
+			isset ($traitements['enregistrement']['effacement']) 
+		  and $traitements['enregistrement']['effacement']=='on' 
+			and isset($traitements['enregistrement']['effacement_delai'])
+		) {
+			$delai = intval($traitements['enregistrement']['effacement_delai']);
+
+			if ($delai > 0) { 
+				// si on a bien configuré un délai
+				$asupprimer = sql_select(
+					'id_formulaires_reponse', 
+					'spip_formulaires_reponses',
+					"DATE_SUB(CURDATE(), INTERVAL $delai DAY) > maj 
+						AND id_formulaire = $id_formulaire"
+				); // on utilise la date de maj, ce qui fait que lorsqu'une réponse est modifiée, l'échéance de la suppression est prorogée
+				while ($reponse = sql_fetch($asupprimer)){
+					$id_formulaires_reponse = $reponse['id_formulaires_reponse'];
+
+					formidable_effacer_fichiers_reponse($id_formulaire, $id_formulaires_reponse); // effacer d'abord les fichiers
+					sql_delete('spip_formulaires_reponses',"id_formulaires_reponse=$id_formulaires_reponse");// les réponses
+					sql_delete('spip_formulaires_reponses_champs',"id_formulaires_reponse=$id_formulaires_reponse");//les champs correspondant
+					spip_log("Effacement de la réponse $$id_formulaires_reponse du form $id_formulaire car antérieur à $delai jours");
+				}
+			}	
+		}
+	}
+	return 1;
+}
diff --git a/lang/formidable_fr.php b/lang/formidable_fr.php
index 9ab876da..0ee5c60c 100644
--- a/lang/formidable_fr.php
+++ b/lang/formidable_fr.php
@@ -256,6 +256,8 @@ $GLOBALS[$GLOBALS['idx_lang']] = array(
 	'traiter_enregistrement_option_auteur' => 'Utiliser les auteurs pour les formulaires',
 	'traiter_enregistrement_option_auteur_explication' => 'Attribuer un ou plusieurs auteurs à un formulaire. Si cette option est activée, seuls les auteurs d’un formulaire pourront accéder à leurs données.',
 	'traiter_enregistrement_option_choix_select_label' => 'Choisir une variable parmi celles proposées',
+	'traiter_enregistrement_option_effacement_delai_label' => 'Nombre de jours avant effacement', 
+	'traiter_enregistrement_option_effacement_label' => 'Effacer régulièrement les résultats les plus anciens', 
 	'traiter_enregistrement_option_identification_explication' => 'Si les réponses sont modifiables, quel procédé utiliser en priorité pour connaitre la réponse à modifier ?',
 	'traiter_enregistrement_option_identification_label' => 'Identification',
 	'traiter_enregistrement_option_ip_label' => 'Enregistrer les IPs (masquées après un délai de garde)',
diff --git a/paquet.xml b/paquet.xml
index 6ef46934..05ebf049 100644
--- a/paquet.xml
+++ b/paquet.xml
@@ -1,7 +1,7 @@
 <paquet
 	prefix="formidable"
 	categorie="communication"
-	version="3.2.7"
+	version="3.3.0"
 	etat="stable"
 	compatibilite="[3.0.0;3.1.*]"
 	logo="images/formidable-64.png"
diff --git a/traiter/enregistrement.yaml b/traiter/enregistrement.yaml
index a5736faa..af8ec6a5 100644
--- a/traiter/enregistrement.yaml
+++ b/traiter/enregistrement.yaml
@@ -66,4 +66,17 @@ options:
       nom: 'analyse_exclure_champs'
       label: '<:formidable:analyse_exclure_champs_label:>'
       explication: '<:formidable:analyse_exclure_champs_explication:>'
-      rows: 4
\ No newline at end of file
+      rows: 4
+  - 
+    saisie: 'case'
+    options:
+      nom: 'effacement'
+      label_case: '<:formidable:traiter_enregistrement_option_effacement_label:>'
+      li_class: 'pleine_largeur'
+  - 
+    saisie: 'input'
+    options:
+      nom: 'effacement_delai'
+      label: '<:formidable:traiter_enregistrement_option_effacement_delai_label:>'
+      afficher_si: '@traitements[enregistrement][effacement]@=="on"'
+
-- 
GitLab