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

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

Reflet presque up 2 date (reste les externals)

File size: 9.3 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 * @param object $domaine [optional]
14 * @param object $id_auteur [optional]
15 * @return
16 */
17function formulaires_config_reflet_charger_dist($domaine = NULL, $id_auteur= NULL){
18        global $visiteur_session;
19        include_spip('inc/autoriser');
20       
21        //si on a bien un auteur alors on préremplit le formulaire avec ses informations
22        //les nom des champs sont les memes que ceux de la base de données
23        $reflet_content = sql_fetsel(
24                "*",
25                "spip_reflets",
26                "domaine = ".sql_quote($domaine)." ORDER by date_config DESC LIMIT 0,1"
27        );
28
29        $champs = $reflet_content;
30       
31        if(isset($champs['contenu'])){
32                $champs['reflet_contenu'] = explode(',',$champs['contenu']);
33        }
34        if(!autoriser('configurer','reflet',$reflet_content['id_reflet'],$visiteur_session['id_auteur'])){
35                $champs['editable'] = false;
36                $champs['message_erreur'] = _T('reflet:pas_autoriser_configurer_reflet');
37        }
38       
39        spip_log($champs);
40        return $champs;
41}
42
43/**
44 * Vérification des valeurs envoyées
45 *
46 * @return
47 * @param object $domaine[optional]
48 * @param object $id_auteur[optional]
49 */
50function formulaires_config_reflet_verifier_dist($domaine = NULL, $id_auteur= NULL){
51        //initialise le tableau des erreurs
52        $erreurs = array();
53
54        $origine = sql_fetsel(
55                "*",
56                "spip_reflets",
57                "domaine = ".sql_quote($domaine)." ORDER by date_config DESC LIMIT 0,1"
58        );
59       
60        $champs_formulaire = pipeline('reflet_champs_formulaires',array());
61        spip_log($champs_formulaire);
62        $origine = array_intersect_key($origine, array_flip($champs_formulaire));
63        spip_log('ORIGINE');
64        spip_log($origine);
65       
66    // On initialise le tableau de valeurs $champs => $valeur
67    $valeurs = array();
68
69        $champs_a_verifier = pipeline('reflet_verifications_specifiques',array());
70
71        // Gestion de la correspondance champs -> _request(champs)
72        foreach($origine as $clef => $valeur) {
73                if($clef == 'contenu'){
74                        $clefbis = 'reflet_contenu';
75                        if($val = _request($clefbis)){
76                                $valeurs[$clef] =  implode(',',$val);
77                        }
78                }
79                else if(in_array($clef,array('langueecrituredispo','languelabeldispo','langueaudiodispo')) && is_array(_request($clef))){
80                        $valeurs[$clef] = implode(',',_request($clef));
81                }
82                else{
83                        $valeurs[$clef] = _request($clef);
84                }
85        }
86
87        // Vérification
88        foreach ($valeurs as $champs => $valeur) {
89                //verifier les champs obligatoires
90                $champs_obligatoires = array('titre','languelabeldispo','langueecrituredispo','langueaudiodispo');
91                if (in_array($champs,$champs_obligatoires) && empty($valeur)) {
92                        $erreurs[$champs] = _T('info_obligatoire');
93                }
94
95                // Sinon on la vérifie une seconde fois si nécessaire avec les fonctions spécifiques de validations
96                if(!$erreurs[$champs]){
97                        if(array_key_exists($champs,$champs_a_verifier)){
98                                $fonction_verif_{$champs} = charger_fonction($champs_a_verifier[$champs],'inc');
99                                if($val = $fonction_verif_{$champs}($valeur,$valeurs)){
100                                        $erreurs[$champs] = $val;
101                                }
102                        }
103                }
104        }
105        spip_log($erreurs);
106        $differences = count(array_diff_assoc($origine, $valeurs));
107
108        spip_log("il y a $differences differences",'reflet');
109       
110        /**
111         * Traitement du wallpaper
112         */
113        if($_FILES['wallpaper_url'] && ($_FILES['wallpaper_url']['name'] !== '')) {
114                spip_log('file verifier');
115                spip_log($_FILES);
116                // compatibilite php < 4.1
117                if (!$_FILES)
118                        $_FILES = $GLOBALS['HTTP_POST_FILES'];
119                // recuperation des variables
120                $fichier = $_FILES['wallpaper_url']['name'];
121                $tmp = $_FILES['wallpaper_url']['tmp_name'];
122                $doc = &$_FILES['wallpaper_url'];
123
124                // verification si upload OK
125                if( !is_uploaded_file($tmp) ) {
126                        $erreurs['wallpaper_url'] = _T('reflet:erreur_wallpaper_upload');
127                }
128                else {
129                        // on récupÚre l'extension du document envoyé
130                        include_spip('inc/ajouter_documents');
131                        list($extension,$fichier) = fixer_extension_document($doc);
132                        $acceptes = array_map('trim', explode(',','jpg,png'));
133                        // on vérifie que l'extension du document est autorisée
134                        if (!in_array($extension, $acceptes)) {
135                                $formats = join(', ',$acceptes);
136                                $erreurs['wallpaper_url'] = _T('reflet:erreur_wallpaper_formats_acceptes',array('formats' => $formats));
137                        }
138                        else{
139                                spip_log('On ajoute une difference');
140                                $differences ++;
141                        }
142                }
143        }
144       
145        //message d'erreur generalise
146        if (count($erreurs)) {
147                spip_log("$erreurs","reflet");
148                $erreurs['message_erreur'] .= _T('reflet:verifier_configuration');
149        }
150
151        else if(!$differences>0){
152                $erreurs['message_erreur'] .= _T('reflet:configuration_non_modifiee');
153        }
154       
155    return $erreurs; // si c'est vide, traiter sera appele, sinon le formulaire sera resoumis
156}
157
158/**
159 * Traitement des valeurs envoyées
160 *
161 * @return
162 * @param object $domaine[optional]
163 * @param object $id_auteur[optional]
164 */
165function formulaires_config_reflet_traiter_dist($domaine = NULL, $id_auteur= NULL){
166        spip_log('traiter','reflet');
167        include_spip('reflet_fonctions');
168
169        /* Génerer la liste des champs à traiter
170        * champ => valeur formulaire
171        */
172        //liste des champs possible
173        $champs_tous = sql_fetsel(
174                "*",
175                "spip_reflets",
176                "domaine = '$domaine' ORDER by date_config DESC LIMIT 0,1"
177        );
178
179        $champs_formulaire = pipeline('reflet_champs_formulaires',array());
180       
181        $champs = array_intersect_key($champs_tous, array_flip($champs_formulaire));
182        spip_log($champs,'reflet');
183
184        $newchamps = array();
185    //gere la correspondance champs -> _request(champs)
186        foreach($champs as $clef => $valeur) {
187                // Pour le champs contenu, un petit traitement spécifique
188                if($clef == 'contenu'){
189                        spip_log('CLE = CONTENU');
190                        $clebis = 'reflet_contenu';
191                        if(_request($clebis)){
192                                $newchamps[$clef] = implode(',',_request($clebis));
193                                spip_log("REFLET_CONTENU : on récupÚre ".$newchamps[$clef]." pour $clef","reflet");
194                        }
195                // traitement spécifique sur les langues multiples
196                }
197                else if(($clef == 'langueecrituredispo') OR ($clef == 'languelabeldispo') OR ($clef == 'langueaudiodispo')){
198                        if(_request($clef)){
199                                $newchamps[$clef] = implode(',',_request($clef));
200                                spip_log("on récupÚre ".$newchamps[$clef]." pour $clef","reflet");
201                        }
202                }
203                // Sinon une correspondance simple $newchamps = _request
204                else if(_request($clef)){;
205                        $newchamps[$clef] = _request($clef);
206                        spip_log("on récupÚre ".$newchamps[$clef]." pour $clef","reflet");
207                }
208                else{
209                        $newchamps[$clef] = null;
210                        spip_log($clef." a pour valeur null","reflet");
211                }
212        }
213
214        $differences = count(array_diff_assoc($champs, $newchamps));
215        spip_log(array_diff_assoc($champs, $newchamps),'reflet');
216
217        if($_FILES['wallpaper_url'] && ($_FILES['wallpaper_url']['name'] !== '')){
218                $differences ++;
219        }
220       
221        if($differences > 0){
222                spip_log("il y a $differences differences dans la conf donc on la sauvegarde","reflet");
223
224                $table = "spip_reflets";
225                spip_log("ancienne date : ".$champs_tous['date_config'],'reflet');
226                $oldtime =  spip_mktime($champs_tous['date_config']);
227
228                if(time()-$oldtime<86400){
229                        $id_reflet = $champs_tous['id_reflet'];
230                        spip_log('DerniÚre configuration inférieure à une journée, on update la derniÚre entrée','reflet');
231                        sql_updateq(
232                                $table,
233                                $newchamps,
234                                "id_reflet=".$id_reflet
235                        );
236                        $new = false;
237                }else{
238                        spip_log('DerniÚre configuration supérieure à une journée, on crée une nouvelle entrée','reflet');
239                        $newchamps['id_reflet'] = '';
240                        $newchamps['domaine'] = $champs_tous['domaine'];
241                        $newchamps['id_admin'] = $champs_tous['id_admin'];
242                        $newchamps['pass'] = $champs_tous['pass'];
243                        $newchamps['statut'] = $champs_tous['statut'];
244                        $newchamps['texte_utilisation'] = $champs_tous['texte_utilisation'];
245                        $newchamps['date_config'] = 'NOW()';
246
247                        //inserer les données dans spip_reflets -- si $domaine mis à jour
248                        $id_reflet = sql_insertq(
249                                $table,
250                                $newchamps
251                        );
252                        $users = sql_select("id_auteur","spip_auteurs_reflets","id_reflet=".$champs_tous['id_reflet']);
253                        while($user_unique=sql_fetch($users)){
254                                sql_insertq("spip_auteurs_reflets",array('id_reflet' => $id_reflet,'id_auteur'=>$user_unique['id_auteur']));
255                        }
256                        $new = false;
257                }
258                if ($_FILES['wallpaper_url'] && ($_FILES['wallpaper_url']['name'] !== '')) {
259                        spip_log('le fichier envoyé');
260                        spip_log($_FILES['wallpaper_url']);
261                        $fichier = $_FILES['wallpaper_url']['name'];
262                        $tmp = $_FILES['wallpaper_url']['tmp_name'];
263                        $ajouter_documents = charger_fonction('ajouter_documents','inc');
264                        $ajouter_documents($tmp, $fichier, "reflet", $id_reflet, 'document', $id_document=0, $docs_actifs=array());
265                }
266            if (!$new) {
267                $message = _T('reflet:configuration_modifiee');
268                        // Mail a envoyer
269
270                        // Ecriture du xml
271                        $ecrire_xml = true;
272                        $xml_content = recuperer_fond('prive/export_domaine_xml',array('domaine'=>$domaine));
273                        $xml_name = 'xml_reflet/'.$domaine.'.xml';
274                        ecrire_fichier($xml_name, $xml_content);
275            }
276
277            // Regeneration du xml par exemple
278                pipeline('post_edition',
279                        array(
280                                'args' => array(
281                                        'table' => 'spip_reflets',
282                                        'id_objet' => $id_reflet,
283                                        'domaine' => $domaine,
284                                        'ecrire_xml'=>$ecrire_xml
285                                ),
286                                'data' => null
287                        )
288                );
289               
290                include_spip('inc/invalideur');
291                suivre_invalideur("id='id_reflet/$id_reflet'");
292               
293            return array('editable'=> true,'message' => $message);
294        }
295        else{
296                spip_log("il y a $differences differences dans la conf donc on ne la sauvegarde pas","reflet");
297                $message = _T('reflet:configuration_non_modifiee');
298                return array('editable'=> true,'message' => $message);
299        }
300}
301
302?>
Note: See TracBrowser for help on using the repository browser.