Newer
Older
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
define(
'_RACCOURCI_MODELE_FORMIDABLE',
'(<(formulaire\|formidable|formidable|form)' # <modele
.'([0-9]*)\s*' # id
.'([|](?:<[^<>]*>|[^>])*)?' # |arguments (y compris des tags <...>)
.'>)' # fin du modele >
.'\s*(<\/a>)?' # eventuel </a>
/**
* Ajouter la protection NoSpam de base a formidable (jeton)
*
* @param $formulaires
* @return array
*/
function formidable_nospam_lister_formulaires($formulaires) {
$formulaires[] = 'formidable';
return $formulaires;
}
/**
* Trouver les liens <form
* @param $texte
* @return array
*/
function formidable_trouve_liens($texte) {
if (preg_match_all(','._RACCOURCI_MODELE_FORMIDABLE.',ims', $texte, $regs, PREG_SET_ORDER)) {
foreach ($regs as $r) {
$id_formulaire = 0;
} elseif ($r[2] == 'form') {
$id_formulaire = sql_getfetsel('id_formulaire', 'spip_formulaires', 'identifiant='.sql_quote('form'.$r[3]));
} elseif ($r[2] == 'formulaire|formidable') {
$args = ltrim($r[4], '|');
$args = explode('=', $args);
$id_formulaire = intval($args);
} else {
$id_formulaire = sql_getfetsel('id_formulaire', 'spip_formulaires', 'identifiant='.sql_quote($args));
}
if ($id_formulaire = intval($id_formulaire)) {
$formulaires[$id_formulaire] = $id_formulaire;
}
}
return $formulaires;
}
/**
* Associer/dissocier les formulaires a un objet qui les utilise (ou ne les utilise plus)
* @param $flux
* @return mixed
*/
function formidable_post_edition($flux) {
if (isset($flux['args']['table'])
and $table = $flux['args']['table']
and $id_objet = intval($flux['args']['id_objet'])
and $primary = id_table_objet($table)
and $row = sql_fetsel('*', $table, "$primary=".intval($id_objet))
) {
$formulaires = formidable_trouve_liens($contenu);
include_spip('action/editer_liens');
$deja = objet_trouver_liens(array('formulaire' => '*'), array($objet => $id_objet));
if (count($deja)) {
foreach ($deja as $l) {
if (isset($formulaires[$l['id_formulaire']])) {
unset($formulaires[$l['id_formulaire']]);
if (count($formulaires)) {
objet_associer(array('formulaire' => $formulaires), array($objet => $id_objet));
if (count($del)) {
objet_dissocier(array('formulaire' => $del), array($objet=>$id_objet));
}
}
return $flux;
}
/**
* Afficher les formulaires utilises par un objet
* @param $flux
* @return mixed
*/
function formidable_affiche_droite($flux) {
if ($e = trouver_objet_exec($flux['args']['exec'])
and isset($e['type'])
and $objet = $e['type']
and isset($flux['args'][$e['id_table_objet']])
and $id = $flux['args'][$e['id_table_objet']]
and sql_countsel('spip_formulaires_liens', 'objet='.sql_quote($objet).' AND id_objet='.intval($id))) {
$flux['data'] .= recuperer_fond('prive/squelettes/inclure/formulaires_lies', array('objet' => $objet, 'id_objet' => $id));
}
return $flux;
}

rastapopoulos@spip.org
a validé
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
/**
* Afficher l'édition des liens sur les objets configurés
**/
function formidable_affiche_milieu($flux) {
include_spip('inc/config');
$texte = "";
$e = trouver_objet_exec($flux['args']['exec']);
if (!$e['edition'] and in_array($e['table_objet_sql'], lire_config('formidable/analyse/objets', array()))) {
$texte .= recuperer_fond('prive/objets/editer/liens', array(
'table_source' => 'formulaires',
'objet' => $e['type'],
'id_objet' => $flux['args'][$e['id_table_objet']]
));
}
if ($texte) {
if ($p=strpos($flux['data'], '<!--affiche_milieu-->')) {
$flux['data'] = substr_replace($flux['data'], $texte, $p, 0);
}
else {
$flux['data'] .= $texte;
}
}
return $flux;
}
/**
* Optimiser la base de donnée en enlevant les liens de formulaires supprimés
* @pipeline optimiser_base_disparus
* @param array $flux
* Données du pipeline
* @return array
* Données du pipeline
*/
function formidable_optimiser_base_disparus($flux) {
// Les formulaires qui sont à la poubelle
$res = sql_select(
'id_formulaire AS id',
'spip_formulaires',
'statut='.sql_quote('poubelle')
);
// On génère la suppression
$flux['data'] += optimiser_sansref('spip_formulaires', 'id_formulaire', $res);
# les reponses qui sont associees a un formulaire inexistant
$res = sql_select(
'R.id_formulaire AS id',
'spip_formulaires_reponses AS R LEFT JOIN spip_formulaires AS F ON R.id_formulaire=F.id_formulaire',
'R.id_formulaire > 0 AND F.id_formulaire IS NULL'
);
$flux['data'] += optimiser_sansref('spip_formulaires_reponses', 'id_formulaire', $res);
// Les réponses qui sont à la poubelle
$res = sql_select(
'id_formulaires_reponse AS id',
'spip_formulaires_reponses',
sql_in('statut', array('refuse', 'poubelle'))
// On génère la suppression
$flux['data'] += optimiser_sansref('spip_formulaires_reponses', 'id_formulaires_reponse', $res);
// les champs des reponses associes a une reponse inexistante
$res = sql_select(
'C.id_formulaires_reponse AS id',
'spip_formulaires_reponses_champs AS C LEFT JOIN spip_formulaires_reponses AS R ON C.id_formulaires_reponse=R.id_formulaires_reponse',
'C.id_formulaires_reponse > 0 AND R.id_formulaires_reponse IS NULL'
);
$flux['data'] += optimiser_sansref('spip_formulaires_reponses_champs', 'id_formulaires_reponse', $res);
//
// CNIL -- Informatique et libertes
//
// masquer le numero IP des vieilles réponses
//
## date de reference = 4 mois
## definir a 0 pour desactiver

maieul@maieul.net
a validé
## même constante que pour les forums
if (!defined('_CNIL_PERIODE')) {
define('_CNIL_PERIODE', 3600*24*31*4);

maieul@maieul.net
a validé
if (_CNIL_PERIODE) {
$critere_cnil = 'date<"'.date('Y-m-d', time()-_CNIL_PERIODE).'"'
. ' AND statut != "spam"'
. ' AND (ip LIKE "%.%" OR ip LIKE "%:%")'; # ipv4 ou ipv6
$c = sql_countsel('spip_formulaires_reponses', $critere_cnil);
if ($c>0) {
spip_log("CNIL: masquer IP de $c réponses anciennes à formidable");
sql_update('spip_formulaires_reponses', array('ip' => 'MD5(ip)'), $critere_cnil);
}
}

maieul@maieul.net
a validé
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
/**
* S'assurer que le traitement email ait lieu après le traitement enregistremnt
*
* @pipeline formidable_traitements
* @param array $flux
* @return array $flux
**/
function formidable_formidable_traitements($flux) {
if (isset($flux['data']['email']) and isset($flux['data']['enregistrement'])) {
$keys = array_keys($flux['data']);
$position_email = array_search('email', $keys);
$position_enregistrement = array_search('enregistrement', $keys);
if ($position_enregistrement > $position_email) { // si enregistrement après email
$nouveau_tab = array();
foreach ($keys as $key) { //on reconstruit le tableau, en inversant simplement email et enregistrement
if ($key == 'email') {
$nouveau_tab['enregistrement'] = $flux['data']['enregistrement'];
} elseif ($key == 'enregistrement') {
$nouveau_tab['email'] = $flux['data']['email'];
} else {
$nouveau_tab[$key] = $flux['data'][$key];
}
}
$flux['data'] = $nouveau_tab;
}
}
return $flux;
}