source: Collectif_Otra/plugins/configuration_reflet/formulaires/config_reflet.php @ 2741

Last change on this file since 2741 was 2741, checked in by kent1, 10 years ago

Des explications supplémentaires

Un bug dans le formulaire de configuration d'un reflet

File size: 7.6 KB
Line 
1<?php
2/**
3 * Formulaire de configuration d'un reflet
4 * Licence GPL (c) 2008-2009 Quentin Drouet
5 *
6 */
7
8if (!defined("_ECRIRE_INC_VERSION")) return;
9
10/**
11 * Chargement des valeurs par défaut
12 *
13 * @var
14 */
15function formulaires_config_reflet_charger_dist($domaine = NULL, $id_auteur= NULL){
16        global $visiteur_session;
17        include_spip('inc/autoriser');
18        //si on a bien un auteur alors on préremplit le formulaire avec ses informations
19        //les nom des champs sont les memes que ceux de la base de données
20                $reflet_content = sql_fetsel(
21                        "*",
22                        "spip_reflets",
23                        "domaine = '$domaine' ORDER by date_config DESC LIMIT 0,1"
24                );
25
26                $champs = $reflet_content;
27
28                if(!autoriser('configurer','reflet',$reflet_content['id_reflet'],$visiteur_session['id_auteur'])){
29                        $champs['editable'] = false;
30                        $champs['message_erreur'] = _T('reflet:pas_autoriser_configurer_reflet');
31                }
32
33        return $champs;
34}
35
36/**
37 * Vérification des valeurs envoyées
38 *
39 * @return
40 * @param object $domaine[optional]
41 * @param object $id_auteur[optional]
42 */
43function formulaires_config_reflet_verifier_dist($domaine = NULL, $id_auteur= NULL){
44        //charge la fonction de controle du login et mail
45        //$test_inscription = charger_fonction('test_inscription');
46
47        //initialise le tableau des erreurs
48        $erreurs = array();
49
50        $origine = sql_fetsel(
51                "*",
52                "spip_reflets",
53                "domaine = '$domaine' ORDER by date_config DESC LIMIT 0,1"
54        );
55
56        $exception_formulaire = array('id_reflet'=>0,'domaine'=>0,'pass'=>0,'texte_utilisation'=>0,'presentation'=>0,'date_config'=>0,'statut'=>0,'ouvert'=>0);
57        $origine = array_diff_key($origine, $exception_formulaire);
58
59    // On initialise le tableau de valeurs $champs => $valeur
60    $valeurs = array();
61
62        $champs_a_verifier = pipeline('reflet_verifications_specifiques',array());
63
64        // Gestion de la correspondance champs -> _request(champs)
65        foreach($origine as $clef => $valeur) {
66                if($clef == 'contenu'){
67                        $clebis = 'reflet_contenu';
68                        if($val = _request($clebis)){
69                                $valeurs[$clef] = $val;
70                        }
71                }
72                else if(in_array($clef,array('langueecrituredispo','languelabeldispo','langueaudiodispo')) && is_array(_request($clef))){
73                        $valeurs[$clef] = implode(',',_request($clef));
74                }
75                else{
76                        $valeurs[$clef] = _request($clef);
77                }
78        }
79
80        // Vérification
81        foreach ($valeurs  as $champs => $valeur) {
82
83                //verifier les champs obligatoires
84                if ((($champs == 'temporisation1') or ($champs == 'temporisation2') or ($champs == 'temporisation3') or ($champs == 'temporisation4') or ($champs == 'occurences1') or ($champs == 'occurences2') or ($champs == 'occurences3') or ($champs == 'occurences4')) && empty($valeur)) {
85                        $erreurs[$champs] = _T('reflet:champ_obligatoire');
86                }
87
88                // Sinon on la vérifie une seconde fois si nécessaire avec les fonctions spécifiques de validations
89                if(!$erreurs[$champs]){
90                        if(array_key_exists($champs,$champs_a_verifier)){
91                                $fonction_verif_{$champs} = charger_fonction($champs_a_verifier[$champs],'inc');
92                                if($val = $fonction_verif_{$champs}($valeurs[$champs],$id_auteur)){
93                                        $erreurs[$champs] = $val;
94                                }
95                        }
96                }
97        }
98
99        $differences = count(array_diff_assoc($origine, $valeurs));
100
101        spip_log(array_diff_assoc($origine, $valeurs),'reflet');
102        spip_log($differences,'reflet');
103        //message d'erreur generalise
104        if (count($erreurs)) {
105                spip_log("$erreurs","reflet");
106                $erreurs['message_erreur'] .= _T('reflet:verifier_configuration');
107        }
108
109        else if(!$differences>0){
110                $erreurs['message_erreur'] .= _T('reflet:configuration_non_modifiee');
111        }
112    return $erreurs; // si c'est vide, traiter sera appele, sinon le formulaire sera resoumis
113}
114
115/**
116 * Traitement des valeurs envoyées
117 *
118 * @return
119 * @param object $domaine[optional]
120 * @param object $id_auteur[optional]
121 */
122function formulaires_config_reflet_traiter_dist($domaine = NULL, $id_auteur= NULL){
123        spip_log('traiter','reflet');
124        include_spip('reflet_fonctions');
125
126        /* Génerer la liste des champs à traiter
127        * champ => valeur formulaire
128        */
129
130        //liste des champs possible
131        $champs_tous = sql_fetsel(
132                "*",
133                "spip_reflets",
134                "domaine = '$domaine' ORDER by date_config DESC LIMIT 0,1"
135        );
136        spip_log($champs_tous,'reflet');
137        $exception_formulaire = array('id_reflet'=>0,'domaine'=>0,'id_admin'=>0, 'pass'=>0,'texte_utilisation'=>0,'date_config'=>0,'statut'=>0,'ouvert'=>0);
138        $champs = array_diff_key($champs_tous, $exception_formulaire);
139        spip_log($champs,'reflet');
140
141        $newchamps = array();
142    //gere la correspondance champs -> _request(champs)
143        foreach($champs as $clef => $valeur) {
144                // Pour le champs contenu, un petit traitement spécifique
145                if($clef == 'contenu'){
146                        $clebis = 'reflet_contenu';
147                        if(_request($clebis)){
148                                $newchamps[$clef] = _request($clebis);
149                                spip_log("on récupÚre $newvaleur_contenu pour $clef => contenu_bis","reflet");
150                        }
151                // traitement spécifique sur les langues multiples
152                }
153                else if(($clef == 'langueecrituredispo') OR ($clef == 'languelabeldispo') OR ($clef == 'langueaudiodispo')){
154                        if(_request($clef)){
155                                $newchamps[$clef] = implode(',',_request($clef));
156                                spip_log("on récupÚre ".$newchamps[$clef]." pour $clef","reflet");
157                        }
158                }
159                // Sinon une correspondance simple $newchamps = _request
160                elseif(_request($clef)){;
161                        $newchamps[$clef] = _request($clef);
162                        spip_log("on récupÚre ".$newchamps[$clef]." pour $clef","reflet");
163                }
164                else{
165                        $newchamps[$clef] = null;
166                        spip_log($clef." a pour valeur null","reflet");
167                }
168        }
169
170        $differences = count(array_diff_assoc($champs, $newchamps));
171        spip_log(array_diff_assoc($champs, $newchamps),'reflet');
172        if($differences > 0){
173                spip_log("il y a $differences differences dans la conf donc on la sauvegarde","reflet");
174
175                $table = "spip_reflets";
176                spip_log("ancienne date : ".$champs_tous['date_config'],'reflet');
177                $oldtime =  spip_mktime($champs_tous['date_config']);
178
179                if(time()-$oldtime<86400){
180                        $id_reflet = $champs_tous['id_reflet'];
181                        spip_log('DerniÚre configuration inférieure à une journée, on update la derniÚre entrée','reflet');
182                        sql_updateq(
183                                $table,
184                                $newchamps,
185                                "id_reflet=".$id_reflet
186                        );
187                        $new = false;
188                }else{
189                        spip_log('DerniÚre configuration supérieure à une journée, on crée une nouvelle entrée','reflet');
190                        $newchamps['id_reflet'] = '';
191                        $newchamps['domaine'] = $champs_tous['domaine'];
192                        $newchamps['id_admin'] = $champs_tous['id_admin'];
193                        $newchamps['pass'] = $champs_tous['pass'];
194                        $newchamps['statut'] = $champs_tous['statut'];
195                        $newchamps['texte_utilisation'] = $champs_tous['texte_utilisation'];
196                        $newchamps['date_config'] = 'NOW()';
197
198                        //inserer les données dans spip_reflets -- si $domaine mis à jour
199                        $id_reflet = sql_insertq(
200                                $table,
201                                $newchamps
202                        );
203                        $users = sql_select("id_auteur","spip_auteurs_reflets","id_reflet=".$champs_tous['id_reflet']);
204                        while($user_unique=sql_fetch($users)){
205                                sql_insertq("spip_auteurs_reflets",array('id_reflet' => $id_reflet,'id_auteur'=>$user_unique['id_auteur']));
206                        }
207                        $new = false;
208                }
209            if (!$new) {
210                $message = _T('reflet:configuration_modifiee');
211                        // Mail a envoyer
212
213                        // Ecriture du xml
214                        $ecrire_xml = true;
215                        $xml_content = recuperer_fond('prive/export_domaine_xml',array('domaine'=>$domaine));
216                        $xml_name = 'xml_reflet/'.$domaine.'.xml';
217                        ecrire_fichier($xml_name, $xml_content);
218            }
219
220            // Regeneration du xml par exemple
221                pipeline('post_edition',
222                        array(
223                                'args' => array(
224                                        'table' => 'spip_reflets',
225                                        'id_objet' => $id_reflet,
226                                        'domaine' => $domaine,
227                                        'ecrire_xml'=>$ecrire_xml
228                                ),
229                                'data' => null
230                        )
231                );
232            return array('editable'=> true,'message' => $message);
233        }
234        else{
235                spip_log("il y a $differences differences dans la conf donc on ne la sauvegarde pas","reflet");
236                $message = _T('reflet:configuration_non_modifiee');
237                return array('editable'=> true,'message' => $message);
238        }
239}
240
241?>
Note: See TracBrowser for help on using the repository browser.