[PLUGINS] ~maj globale
[lhc/web/www.git] / www / plugins / formidable / formulaires / editer_formulaire_traitements.php
1 <?php
2
3 // Sécurité
4 if (!defined('_ECRIRE_INC_VERSION')) {
5 return;
6 }
7
8 include_spip('inc/formidable');
9
10 function formulaires_editer_formulaire_traitements_charger($id_formulaire) {
11 $contexte = array();
12 $id_formulaire = intval($id_formulaire);
13
14 // On teste si le formulaire existe
15 if ($id_formulaire
16 and $formulaire = sql_fetsel('*', 'spip_formulaires', 'id_formulaire = '.$id_formulaire)
17 and autoriser('editer', 'formulaire', $id_formulaire)
18 ) {
19 $traitements = unserialize($formulaire['traitements']);
20 $saisies = unserialize($formulaire['saisies']);
21 if (!is_array($traitements)) {
22 $traitements = array();
23 }
24 if (!is_array($saisies)) {
25 $saisies = array();
26 }
27 $contexte['traitements'] = $traitements;
28 $contexte['traitements_choisis'] = array_keys($traitements);
29 $contexte['formulaire'] = _T_ou_typo($saisies, 'multi');
30 $contexte['id'] = $id_formulaire;
31
32 $traitements_disponibles = traitements_lister_disponibles();
33 $configurer_traitements = array();
34 foreach ($traitements_disponibles as $type_traitement => $traitement) {
35 $configurer_traitements[] = array(
36 'saisie' => 'checkbox',
37 'options' => array(
38 'nom' => 'traitements_choisis',
39 'label' => $traitement['titre'],
40 'datas' => array(
41 $type_traitement => $traitement['description']
42 )
43 )
44 );
45 $configurer_traitements[] = array(
46 'saisie' => 'fieldset',
47 'options' => array(
48 'nom' => 'options',
49 'label' => $traitement['titre'],
50 'li_class' => "$type_traitement options_traiter"
51 ),
52 'saisies' => saisies_transformer_noms($traitement['options'], '/^.*$/', "traitements[$type_traitement][\\0]")
53 );
54 }
55 $contexte['_configurer_traitements'] = $configurer_traitements;
56
57 // Si on demande un avertissement et qu'il y a déjà des traitements de configurés
58 if (_request('avertissement') == 'oui') {
59 $contexte['message_ok'] = $traitements ? _T('formidable:traitements_avertissement_modification') : _T('formidable:traitements_avertissement_creation');
60 }
61 } else {
62 $contexte['editable'] = false;
63 }
64
65 // On enlève l'éventuel avertissement pour le prochain envoi
66 $contexte['action'] = parametre_url(self(), 'avertissement', '');
67
68 return $contexte;
69 }
70
71 function formulaires_editer_formulaire_traitements_verifier($id_formulaire) {
72 include_spip('inc/saisies');
73 $erreurs = array();
74 $traitements_disponibles = traitements_lister_disponibles();
75
76 // On regarde quels traitements sont demandés
77 $traitements_choisis = _request('traitements_choisis');
78
79 if (is_array($traitements_choisis)) {
80 foreach ($traitements_choisis as $type_traitement) {
81 $erreurs = array_merge($erreurs, saisies_verifier(saisies_transformer_noms($traitements_disponibles[$type_traitement]['options'], '/^.*$/', "traitements[$type_traitement][\\0]")));
82 }
83 }
84 return $erreurs;
85 }
86
87 function formulaires_editer_formulaire_traitements_traiter($id_formulaire) {
88 $retours = array();
89 $id_formulaire = intval($id_formulaire);
90
91 // On récupère tout le tableau des traitements
92 $traitements = _request('traitements');
93 // On ne garde que les morceaux qui correspondent aux traitements choisis
94 $traitements_choisis = _request('traitements_choisis');
95 if (!$traitements_choisis) {
96 $traitements_choisis = array();
97 }
98 $traitements_choisis = array_flip($traitements_choisis);
99 $traitements = array_intersect_key($traitements, $traitements_choisis);
100
101 // Et on l'enregistre tel quel
102 $ok = sql_updateq(
103 'spip_formulaires',
104 array(
105 'traitements' => serialize($traitements)
106 ),
107 'id_formulaire = '.$id_formulaire
108 );
109
110 // On va sur la page de visualisation quand c'est fini
111 if ($ok) {
112 $retours['redirect'] = parametre_url(generer_url_ecrire('formulaire'), 'id_formulaire', $id_formulaire);
113 } else {
114 $retours['editable'] = true;
115 $retours['message_erreur'] = _T('formidable:erreur_base');
116 }
117
118 return $retours;
119 }