4 * Utilisation de pipelines
6 * @package SPIP\Formidable\Pipelines
10 if (!defined("_ECRIRE_INC_VERSION")) return;
14 define('_RACCOURCI_MODELE_FORMIDABLE',
15 '(<(formulaire\|formidable|formidable|form)' # <modele
17 .'([|](?:<[^<>]*>|[^>])*)?' # |arguments (y compris des tags <...>)
18 .'>)' # fin du modele >
19 .'\s*(<\/a>)?' # eventuel </a>
23 * Trouver les liens <form
27 function formidable_trouve_liens($texte){
28 $formulaires = array();
29 if (preg_match_all(','._RACCOURCI_MODELE_FORMIDABLE
.',ims', $texte, $regs, PREG_SET_ORDER
)){
30 foreach ($regs as $r) {
32 if ($r[2]=="formidable")
33 $id_formulaire = $r[3];
34 elseif ($r[2]=="form")
35 $id_formulaire = sql_getfetsel("id_formulaire","spip_formulaires","identifiant=".sql_quote("form".$r[3]));
36 elseif ($r[2]=="formulaire|formidable"){
37 $args = ltrim($r[4],"|");
38 $args = explode("=",$args);
40 $args = explode("|",$args);
41 $args = trim(reset($args));
42 if (is_numeric($args))
43 $id_formulaire = intval($args);
45 $id_formulaire = sql_getfetsel("id_formulaire","spip_formulaires","identifiant=".sql_quote($args));
47 if ($id_formulaire = intval($id_formulaire))
48 $formulaires[$id_formulaire] = $id_formulaire;
55 * Associer/dissocier les formulaires a un objet qui les utilise (ou ne les utilise plus)
59 function formidable_post_edition($flux){
60 if ($table = $flux['args']['table']
61 AND $id_objet = intval($flux['args']['id_objet'])
62 AND $primary = id_table_objet($table)
63 AND $row = sql_fetsel("*",$table,"$primary=".intval($id_objet))){
65 $objet = objet_type($table);
66 $contenu = implode(' ',$row);
67 $formulaires = formidable_trouve_liens($contenu);
68 include_spip("action/editer_liens");
69 $deja = objet_trouver_liens(array("formulaire"=>"*"),array($objet=>$id_objet));
73 if (isset($formulaires[$l['id_formulaire']]))
74 unset($formulaires[$l['id_formulaire']]);
76 $del[] = $l['id_formulaire'];
79 if (count($formulaires)){
80 objet_associer(array("formulaire"=>$formulaires),array($objet=>$id_objet));
83 objet_dissocier(array("formulaire"=>$del),array($objet=>$id_objet));
90 * Afficher les formulaires utilises par un objet
94 function formidable_affiche_droite($flux){
95 if ($e = trouver_objet_exec($flux['args']['exec'])
97 AND $objet = $e['type']
98 AND isset($flux['args'][$e['id_table_objet']])
99 AND $id = $flux['args'][$e['id_table_objet']]
100 AND sql_countsel("spip_formulaires_liens","objet=".sql_quote($objet)." AND id_objet=".intval($id))){
102 $flux['data'] .= recuperer_fond('prive/squelettes/inclure/formulaires_lies',array('objet'=>$objet,'id_objet'=>$id));
108 * Optimiser la base de donnée en enlevant les liens de formulaires supprimés
110 * @pipeline optimiser_base_disparus
112 * Données du pipeline
114 * Données du pipeline
116 function formidable_optimiser_base_disparus($flux){
117 // Les formulaires qui sont à la poubelle
119 'id_formulaire AS id',
121 'statut='.sql_quote('poubelle')
124 // On génère la suppression
125 $flux['data'] +
= optimiser_sansref('spip_formulaires', 'id_formulaire', $res);
128 # les reponses qui sont associees a un formulaire inexistant
129 $res = sql_select("R.id_formulaire AS id",
130 "spip_formulaires_reponses AS R
131 LEFT JOIN spip_formulaires AS F
132 ON R.id_formulaire=F.id_formulaire",
134 AND F.id_formulaire IS NULL");
136 $flux['data'] +
= optimiser_sansref('spip_formulaires_reponses', 'id_formulaire', $res);
139 // Les réponses qui sont à la poubelle
141 'id_formulaires_reponse AS id',
142 'spip_formulaires_reponses',
143 sql_in('statut',array('refuse','poubelle'))
146 // On génère la suppression
147 $flux['data'] +
= optimiser_sansref('spip_formulaires_reponses', 'id_formulaires_reponse', $res);
150 // les champs des reponses associes a une reponse inexistante
151 $res = sql_select("C.id_formulaires_reponse AS id",
152 "spip_formulaires_reponses_champs AS C
153 LEFT JOIN spip_formulaires_reponses AS R
154 ON C.id_formulaires_reponse=R.id_formulaires_reponse",
155 "C.id_formulaires_reponse > 0
156 AND R.id_formulaires_reponse IS NULL");
158 $flux['data'] +
= optimiser_sansref('spip_formulaires_reponses_champs', 'id_formulaires_reponse', $res);
161 // CNIL -- Informatique et libertes
163 // masquer le numero IP des vieilles réponses
165 ## date de reference = 4 mois
166 ## definir a 0 pour desactiver
167 ## même constante que pour les forums
168 if (!defined('_CNIL_PERIODE')) {
169 define('_CNIL_PERIODE', 3600*24*31*4);
173 $critere_cnil = 'date<"'.date('Y-m-d', time()-_CNIL_PERIODE
).'"'
174 . ' AND statut != "spam"'
175 . ' AND (ip LIKE "%.%" OR ip LIKE "%:%")'; # ipv4 ou ipv6
176 $c = sql_countsel('spip_formulaires_reponses', $critere_cnil);
178 spip_log("CNIL: masquer IP de $c réponses anciennes à formidable");
179 sql_update('spip_formulaires_reponses', array('ip' => 'MD5(ip)'), $critere_cnil);