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);
}
}