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

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

On ne crée plus de XML de conf car il devient dynamique

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.