source: spip-zone/_plugins_/_contenu_editorial_/PIM_agenda/balise/formulaire_agenda.php @ 3923

Last change on this file since 3923 was 3923, checked in by cedric@…, 15 years ago

modifs

File size: 12.5 KB
Line 
1<?php
2
3/***************************************************************************\
4 *  SPIP, Systeme de publication pour l'internet                           *
5 *                                                                         *
6 *  Copyright (c) 2001-2006                                                *
7 *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
8 *                                                                         *
9 *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
10 *  Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne.   *
11\***************************************************************************/
12
13if (!defined("_ECRIRE_INC_VERSION")) return;    #securite
14
15include_spip('inc/meta');
16include_spip('inc/session');
17include_spip('inc/acces');
18include_spip('inc/texte');
19include_spip('inc/lang');
20include_spip('inc/mail');
21include_spip('inc/forum');
22include_spip('base/abstract_sql');
23spip_connect();
24
25charger_generer_url();
26
27/*******************************/
28/* GESTION DU FORMULAIRE AGENDA */
29/*******************************/
30
31function balise_FORMULAIRE_AGENDA ($p) {
32        include_spip('inc/pim_agenda_gestion');
33        PIMAgenda_verifier_base();
34
35        $p = calculer_balise_dynamique($p,'FORMULAIRE_AGENDA', array('id_rubrique', 'id_agenda', 'id_article', 'id_breve', 'id_syndic', 'ajouter_mot', 'ajouter_groupe', 'afficher_texte'));
36        return $p;
37}
38
39// verification des droits a faire du forum
40function balise_FORMULAIRE_AGENDA_stat($args, $filtres) {
41
42        // Note : ceci n'est pas documente !!
43        // $filtres[0] peut contenir l'url sur lequel faire tourner le formulaire
44        // exemple dans un squelette article.html : [(#FORMULAIRE_FORUM|forum)]
45        // ou encore [(#FORMULAIRE_FORUM|forumspip.php)]
46
47        // le denier arg peut contenir l'url sur lequel faire le retour
48        // exemple dans un squelette article.html : [(#FORMULAIRE_FORUM{#SELF})]
49
50        // recuperer les donnees du forum auquel on repond, false = forum interdit
51        list ($idr, $idagenda, $ida, $idb, $ids, $am, $ag, $af, $url) = $args;
52        $idr = intval($idr);
53        $idagenda = intval($idagenda);
54        $ida = intval($ida);
55        $idb = intval($idb);
56        $ids = intval($ids);
57
58        return
59                array($idr, $idagenda, $ida, $idb, $ids, $am, $ag, $af, $url);
60}
61
62function balise_FORMULAIRE_AGENDA_dyn(
63$id_rubrique, $id_agenda, $id_article, $id_breve, $id_syndic,
64$ajouter_mot, $ajouter_groupe, $afficher_texte, $url_param_retour)
65{
66        // Tableau des valeurs servant au calcul d'une signature de securite.
67        // Elles seront placees en Input Hidden pour que inc/forum_insert
68        // recalcule la meme chose et verifie l'identité des resultats.
69        // Donc ne pas changer la valeur de ce tableau entre le calcul de
70        // la signature et la fabrication des Hidden
71        // Faire attention aussi a 0 != ''
72
73        // ne pas mettre '', sinon le squelette n'affichera rien.
74        $previsu = ' ';
75        if ($retour_agenda = rawurldecode(_request('retour')))
76                $retour_agenda = str_replace('&var_mode=recalcul','',$retour_agenda);
77        else {
78                // par defaut, on veut prendre url_forum(), mais elle ne sera connue
79                // qu'en sortie, on inscrit donc une valeur absurde ("!")
80                $retour_agenda = parametre_url(self(),'neweven','');
81                $retour_agenda = parametre_url($retour_agenda,'ndate','');
82                $retour_agenda = parametre_url($retour_agenda,'var_mode','');
83                $retour_agenda = parametre_url($retour_agenda,'id_agenda','');
84                $retour_agenda = parametre_url($retour_agenda,'id_organisateur','');
85                $retour_agenda = parametre_url($retour_agenda,'id_invites','');
86                $retour_agenda = str_replace("&amp;","&",$retour_agenda);
87        }
88
89        // au premier appel (pas de Post-var nommee "retour_forum")
90        // memoriser evntuellement l'URL de retour pour y revenir apres
91        // envoi du message ; aux appels suivants, reconduire la valeur.
92        // Initialiser aussi l'auteur
93        $evenement_action = false;
94        $insert = _request('evenement_insert');
95        $modif = _request('evenement_modif');
96        if (!$insert && !$modif) {
97       
98                $auteur = $GLOBALS['auteur_session']['nom'];
99                $email_auteur = $GLOBALS['auteur_session']['email'];
100                $id_auteur = $GLOBALS['auteur_session']['id_auteur'];
101               
102                if (_request('neweven')){
103                        $type = 'reunion';
104                        $prive = 'non';
105                        $crayon = 'non';
106                        $id_article     = 0;
107                        if ($ndate = _request('ndate'))
108                                $ndate = strtotime(urldecode($ndate));
109                        else
110                                $ndate = time();
111                        $date_debut     = date('Y-m-d H:i',$ndate);
112                        $date_fin       = date('Y-m-d H:i',$ndate+3600);
113                        $titre = '';
114                        $descriptif     = '';
115                        $lieu   = '';
116                        $id_agenda_source       = 0;
117                        $evenement_action = 'evenement_insert';
118                }
119                else {
120                        $res = spip_query("SELECT * FROM spip_pim_agenda WHERE id_agenda=$id_agenda");
121                        if ($row = spip_fetch_array($res)){
122                                $type = $row['type'];
123                                $prive = $row['prive'];
124                                $crayon = $row['crayon'];
125                                $id_article     = $row['id_article'];
126                                $date_debut     = $row['date_debut'];
127                                $date_fin       = $row['date_fin'];
128                                $titre  = $row['titre'];
129                                $descriptif     = $row['descriptif'];
130                                $lieu   = $row['lieu'];
131                                $id_agenda_source       = $row['id_agenda_source'];
132                                $evenement_action = 'evenement_modif';
133                        }
134                }
135
136        } else { // appels ulterieurs
137                // gestion des requetes de mises à jour dans la base
138                $id_agenda = intval(_request('id_agenda'));
139                $supp_evenement = _request('supp_evenement');
140                $cancel = _request('cancel');
141                if (($insert || $modif)&&(!$cancel)&&(!$supp_evenement)){
142                        /*$id_article = intval(_request('id_article'));
143                        if (!$id_article){
144                                $id_article = intval(_request('ajouter_id_article'));
145                        }*/
146                        if ( ($insert) && (!$id_agenda) ){
147                                $id_agenda = spip_abstract_insert("spip_pim_agenda",
148                                        "(id_agenda_source,maj)",
149                                        "('0',NOW())");
150                                if ($id_agenda==0){
151                                        spip_log("agenda action formulaire agenda : impossible d'ajouter un evenement");
152                                        return;
153                                }
154                        }
155                        /*if ($id_article){
156                                // mettre a jour le lien evenement-article
157                                spip_query("UPDATE spip_evenements SET id_article=$id_article WHERE id_evenement=$id_evenement");
158                        }*/
159       
160                        // Recuperer le message a previsualiser
161                        $type = addslashes(_request('type_eve'));
162                        $prive = addslashes(_request('prive'));
163                        $crayon = addslashes(_request('crayon'));
164                        $id_organisateur = intval(_request('organisateur'));
165                        $id_invites = _request('invites');
166                        $titre = addslashes(_request('evenement_titre'));
167                        $descriptif = addslashes(_request('evenement_descriptif'));
168                        $lieu = addslashes(_request('evenement_lieu'));
169                       
170                        if (!strlen(trim($titre))) $titre= _T('pimagenda:evenement_sans_titre');
171                       
172                        // pour les cas ou l'utilisateur a saisi 29-30-31 un mois ou ca n'existait pas
173                        $maxiter=4;
174                        $st_date_deb=FALSE;
175                        $jour_debut=_request('jour_evenement_debut');
176                        // test <= car retour strtotime retourne -1 ou FALSE en cas d'echec suivant les versions
177                        while(($st_date_deb<=FALSE)&&($maxiter-->0)) {
178                                $date_deb=_request('annee_evenement_debut')."-"._request('mois_evenement_debut')."-".($jour_debut--)." "._request('heure_evenement_debut').":"._request('minute_evenement_debut');
179                                $st_date_deb=strtotime($date_deb);
180                        }
181                        $date_debut=format_mysql_date(date("Y",$st_date_deb),date("m",$st_date_deb),date("d",$st_date_deb),date("H",$st_date_deb),date("i",$st_date_deb), $s=0);
182               
183                        // pour les cas ou l'utilisateur a saisi 29-30-31 un mois ou ca n'existait pas
184                        $maxiter=4;
185                        $st_date_fin=FALSE;
186                        $jour_fin=_request('jour_evenement_fin');
187                        // test <= car retour strtotime retourne -1 ou FALSE en cas d'echec suivant les versions
188                        while(($st_date_fin<=FALSE)&&($maxiter-->0)) {
189                                $st_date_fin=_request('annee_evenement_fin')."-"._request('mois_evenement_fin')."-".($jour_fin--)." "._request('heure_evenement_fin').":"._request('minute_evenement_fin');
190                                $st_date_fin=strtotime($st_date_fin);
191                        }
192                        $st_date_fin = max($st_date_deb,$st_date_fin);
193                        $date_fin=format_mysql_date(date("Y",$st_date_fin),date("m",$st_date_fin),date("d",$st_date_fin),date("H",$st_date_fin),date("i",$st_date_fin), $s=0);
194
195                        // mettre a jour l'evenement
196                        $query="UPDATE spip_pim_agenda SET `type`='$type', `titre`='$titre',`descriptif`='$descriptif',`lieu`='$lieu',`date_debut`='$date_deb',`date_fin`='$date_fin',`prive`='$prive',`crayon`='$crayon', `idx`='1' WHERE `id_agenda` = '$id_agenda';";
197                        $res=spip_query($query);
198       
199                        // les mots cles : par groupes
200                        $query = "SELECT * FROM spip_groupes_mots WHERE pim_agenda='oui' ORDER BY titre";
201                        $res = spip_query($query);
202                        $liste_mots = array();
203                        while ($row = spip_fetch_array($res,SPIP_ASSOC)){
204                                $id_groupe = $row['id_groupe'];
205                                $id_mot_a = _request("evenement_groupe_mot_select_$id_groupe"); // un array
206                                if (is_array($id_mot_a) && count($id_mot_a)){
207                                        if ($row['unseul']=='oui')
208                                                $liste_mots[] = intval(reset($id_mot_a));
209                                        else 
210                                                foreach($id_mot_a as $id_mot)
211                                                        $liste_mots[] = intval($id_mot);
212                                }                               
213                        }
214                        // suppression des mots obsoletes
215                        $cond_in = "";
216                        if (count($liste_mots))
217                                $cond_in = "AND" . calcul_mysql_in('id_mot', implode(",",$liste_mots), 'NOT');
218                        spip_query("DELETE FROM spip_mots_pim_agenda WHERE id_agenda=$id_agenda $cond_in");
219                        // ajout/maj des nouveaux mots
220                        foreach($liste_mots as $id_mot){
221                                if (!spip_fetch_array(spip_query("SELECT * FROM spip_mots_pim_agenda WHERE id_agenda=$id_agenda AND id_mot=$id_mot")))
222                                        spip_query("INSERT INTO spip_mots_pim_agenda (id_mot,id_agenda) VALUES ($id_mot,$id_agenda)");
223                        }
224                       
225                        // l'organisateur
226                        spip_query("DELETE FROM spip_pim_agenda_auteurs WHERE id_agenda=$id_agenda");
227                        spip_query("INSERT INTO spip_pim_agenda_auteurs (id_agenda,id_auteur) VALUES ($id_agenda,$id_organisateur)");
228
229                        // les invites
230                        $cond_in = "";
231                        if (count($id_invites))
232                                $cond_in = "AND" . calcul_mysql_in('id_auteur', implode(",",$id_invites), 'NOT');
233                        spip_query("DELETE FROM spip_pim_agenda_invites WHERE id_agenda=$id_agenda $cond_in");
234                        // ajout/maj des nouveaux invites
235                        if (is_array($id_invites))
236                                foreach($id_invites as $id_invite){
237                                        if (!spip_fetch_array(spip_query("SELECT * FROM spip_pim_agenda_invites WHERE id_agenda=$id_agenda AND id_auteur=$id_invite")))
238                                                spip_query("INSERT INTO spip_pim_agenda_invites (id_agenda,id_auteur) VALUES ($id_agenda,$id_invite)");
239                                }
240                        $evenement_action = 'evenement_modif';
241                       
242                        // relecture de la base
243                        $res = spip_query("SELECT * FROM spip_pim_agenda WHERE id_agenda=$id_agenda");
244                        if ($row = spip_fetch_array($res)){
245                                $type = $row['type'];
246                                $prive = $row['prive'];
247                                $crayon = $row['crayon'];
248                                $id_article     = $row['id_article'];
249                                $date_debut     = $row['date_debut'];
250                                $date_fin       = $row['date_fin'];
251                                $titre  = $row['titre'];
252                                $descriptif     = $row['descriptif'];
253                                $lieu   = $row['lieu'];
254                                $id_agenda_source       = $row['id_agenda_source'];
255                        }
256                }
257                else if ($supp_evenement){
258                        /*$id_article = intval(_request('id_article'));
259                        if (!$id_article)
260                                $id_article = intval(_request('ajouter_id_article'));*/
261                        $res = spip_query("SELECT * FROM spip_pim_agenda WHERE id_agenda=$id_agenda");
262                        if ($row = spip_fetch_array($res)){
263                                spip_query("DELETE FROM spip_mots_pim_agenda WHERE id_agenda=$id_agenda");
264                                spip_query("DELETE FROM spip_pim_agenda WHERE id_agenda=$id_agenda");
265                        }
266                }
267               
268        }
269
270        $script = self();
271        $script = parametre_url($script,'neweven','');
272        $script = parametre_url($script,'edit','');
273        $script = parametre_url($script,'date','');
274        $script = str_replace("&amp;","&",$script);
275       
276        // sauf si on a passe un parametre en argument (exemple : {#SELF})
277        if ($url_param_retour) {
278                        $script = $url_param_retour;
279        }
280
281        // pour la chaine de hidden
282        $script_hidden = $script = str_replace('&amp;', '&', $script);
283        /*foreach ($ids as $id => $v)
284                $script_hidden = parametre_url($script_hidden, $id, $v, '&');*/
285
286        if ($evenement_action)
287                return array('formulaires/formulaire_agenda_edit', 0,
288                array(
289                        'auteur' => $auteur,
290                        'email_auteur' => $email_auteur,
291                        'retour_agenda' => $retour_agenda,
292                        'url' => $script, # ce sur quoi on fait le action='...'
293                        'url_post' => $script_hidden, # pour les variables hidden
294                        'url_site' => ($url_site ? $url_site : "http://"),
295                        'alea' => $alea,
296                        'hash' => $hash,
297                        'ajouter_groupe' => $ajouter_groupe,
298                        'ajouter_mot' => (is_array($ajouter_mot) ? $ajouter_mot : array($ajouter_mot)),
299                        'type' =>       $type,
300                        'prive' => $prive,
301                        'crayon' => $crayon,
302                        'id_article' => $id_article,
303                        'date_debut' => $date_debut,
304                        'date_fin' =>   $date_fin,
305                        'titre' => $titre,
306                        'descriptif' => $descriptif,
307                        'lieu' =>       $lieu,
308                        'id_auteur' => $id_auteur,
309                        'id_agenda' => $id_agenda,
310                        'evenement_action' => $evenement_action
311                        ));
312        else
313                return false;
314               
315}
316
317
318?>
Note: See TracBrowser for help on using the repository browser.