source: spip-zone/_plugins_branche_stable_/_spip_1_9_0_/pim_agenda/balise/formulaire_agenda.php @ 5395

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

gestion des envois de messages internes et mail lors de la creation/modif d'un rendez vous

File size: 15.2 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        $script = self();
89        $script = parametre_url($script,'neweven','');
90        $script = parametre_url($script,'edit','');
91        $script = parametre_url($script,'date','');
92        $script = str_replace("&amp;","&",$script);
93       
94        // sauf si on a passe un parametre en argument (exemple : {#SELF})
95        if ($url_param_retour) {
96                        $script = $url_param_retour;
97        }
98
99        // au premier appel (pas de Post-var nommee "retour_forum")
100        // memoriser evntuellement l'URL de retour pour y revenir apres
101        // envoi du message ; aux appels suivants, reconduire la valeur.
102        // Initialiser aussi l'auteur
103        $evenement_action = false;
104        $insert = _request('evenement_insert');
105        $modif = _request('evenement_modif');
106        if (!$insert && !$modif) {
107       
108                $auteur = $GLOBALS['auteur_session']['nom'];
109                $email_auteur = $GLOBALS['auteur_session']['email'];
110                $id_auteur = $GLOBALS['auteur_session']['id_auteur'];
111               
112                if (_request('neweven')){
113                        $type = 'reunion';
114                        $prive = 'non';
115                        $crayon = 'non';
116                        $id_article     = 0;
117                        if ($ndate = _request('ndate'))
118                                $ndate = strtotime(urldecode($ndate));
119                        else
120                                $ndate = time();
121                        $date_debut     = date('Y-m-d H:i',$ndate);
122                        $date_fin       = date('Y-m-d H:i',$ndate+3600);
123                        $titre = '';
124                        $descriptif     = '';
125                        $lieu   = '';
126                        $id_agenda_source       = 0;
127                        $evenement_action = 'evenement_insert';
128                }
129                else {
130                        $res = spip_query("SELECT * FROM spip_pim_agenda WHERE id_agenda=$id_agenda");
131                        if ($row = spip_fetch_array($res)){
132                                $type = $row['type'];
133                                $prive = $row['prive'];
134                                $crayon = $row['crayon'];
135                                $id_article     = $row['id_article'];
136                                $date_debut     = $row['date_debut'];
137                                $date_fin       = $row['date_fin'];
138                                $titre  = $row['titre'];
139                                $descriptif     = $row['descriptif'];
140                                $lieu   = $row['lieu'];
141                                $id_agenda_source       = $row['id_agenda_source'];
142                                $evenement_action = 'evenement_modif';
143                        }
144                }
145
146        } else { // appels ulterieurs
147                // gestion des requetes de mises à jour dans la base
148                $id_agenda = intval(_request('id_agenda'));
149                $supp_evenement = _request('supp_evenement');
150                $cancel = _request('cancel');
151                if (($insert || $modif)&&(!$cancel)&&(!$supp_evenement)){
152                        /*$id_article = intval(_request('id_article'));
153                        if (!$id_article){
154                                $id_article = intval(_request('ajouter_id_article'));
155                        }*/
156                        if ( ($insert) && (!$id_agenda) ){
157                                $id_agenda = spip_abstract_insert("spip_pim_agenda",
158                                        "(id_agenda_source,maj)",
159                                        "('0',NOW())");
160                                if ($id_agenda==0){
161                                        spip_log("agenda action formulaire agenda : impossible d'ajouter un evenement");
162                                        return;
163                                }
164                        }
165                        /*if ($id_article){
166                                // mettre a jour le lien evenement-article
167                                spip_query("UPDATE spip_evenements SET id_article=$id_article WHERE id_evenement=$id_evenement");
168                        }*/
169       
170                        // Recuperer le message a previsualiser
171                        $type = addslashes(_request('type_eve'));
172                        $prive = addslashes(_request('prive'));
173                        $crayon = addslashes(_request('crayon'));
174                        $id_organisateur = intval(_request('organisateur'));
175                        $id_invites = _request('invites');
176                        $titre = addslashes(_request('evenement_titre'));
177                        $descriptif = addslashes(_request('evenement_descriptif'));
178                        $lieu = addslashes(_request('evenement_lieu'));
179                       
180                        if (!strlen(trim($titre))) $titre= _T('pimagenda:evenement_sans_titre');
181                       
182                        // pour les cas ou l'utilisateur a saisi 29-30-31 un mois ou ca n'existait pas
183                        $maxiter=4;
184                        $st_date_deb=FALSE;
185                        $jour_debut=_request('jour_evenement_debut');
186                        // test <= car retour strtotime retourne -1 ou FALSE en cas d'echec suivant les versions
187                        while(($st_date_deb<=FALSE)&&($maxiter-->0)) {
188                                $date_deb=_request('annee_evenement_debut')."-"._request('mois_evenement_debut')."-".($jour_debut--)." "._request('heure_evenement_debut').":"._request('minute_evenement_debut');
189                                $st_date_deb=strtotime($date_deb);
190                        }
191                        $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);
192               
193                        // pour les cas ou l'utilisateur a saisi 29-30-31 un mois ou ca n'existait pas
194                        $maxiter=4;
195                        $st_date_fin=FALSE;
196                        $jour_fin=_request('jour_evenement_fin');
197                        // test <= car retour strtotime retourne -1 ou FALSE en cas d'echec suivant les versions
198                        while(($st_date_fin<=FALSE)&&($maxiter-->0)) {
199                                $st_date_fin=_request('annee_evenement_fin')."-"._request('mois_evenement_fin')."-".($jour_fin--)." "._request('heure_evenement_fin').":"._request('minute_evenement_fin');
200                                $st_date_fin=strtotime($st_date_fin);
201                        }
202                        $st_date_fin = max($st_date_deb,$st_date_fin);
203                        $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);
204
205                        $row_anc = spip_fetch_array(spip_query("SELECT * FROM spip_pim_agenda WHERE id_agenda=$id_agenda"));
206                        // mettre a jour l'evenement
207                        $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';";
208                        $res=spip_query($query);
209       
210                        // les mots cles : par groupes
211                        $query = "SELECT * FROM spip_groupes_mots WHERE pim_agenda='oui' ORDER BY titre";
212                        $res = spip_query($query);
213                        $liste_mots = array();
214                        while ($row = spip_fetch_array($res,SPIP_ASSOC)){
215                                $id_groupe = $row['id_groupe'];
216                                $id_mot_a = _request("evenement_groupe_mot_select_$id_groupe"); // un array
217                                if (is_array($id_mot_a) && count($id_mot_a)){
218                                        if ($row['unseul']=='oui')
219                                                $liste_mots[] = intval(reset($id_mot_a));
220                                        else 
221                                                foreach($id_mot_a as $id_mot)
222                                                        $liste_mots[] = intval($id_mot);
223                                }                               
224                        }
225                        // suppression des mots obsoletes
226                        $cond_in = "";
227                        if (count($liste_mots))
228                                $cond_in = "AND" . calcul_mysql_in('id_mot', implode(",",$liste_mots), 'NOT');
229                        spip_query("DELETE FROM spip_mots_pim_agenda WHERE id_agenda=$id_agenda $cond_in");
230                        // ajout/maj des nouveaux mots
231                        foreach($liste_mots as $id_mot){
232                                if (!spip_fetch_array(spip_query("SELECT * FROM spip_mots_pim_agenda WHERE id_agenda=$id_agenda AND id_mot=$id_mot")))
233                                        spip_query("INSERT INTO spip_mots_pim_agenda (id_mot,id_agenda) VALUES ($id_mot,$id_agenda)");
234                        }
235                       
236                        // l'organisateur
237                        spip_query("DELETE FROM spip_pim_agenda_auteurs WHERE id_agenda=$id_agenda");
238                        spip_query("INSERT INTO spip_pim_agenda_auteurs (id_agenda,id_auteur) VALUES ($id_agenda,$id_organisateur)");
239
240                        // les invites
241                        $cond_in = "";
242                        if (count($id_invites))
243                                $cond_in = "AND" . calcul_mysql_in('id_auteur', implode(",",$id_invites), 'NOT');
244                        spip_query("DELETE FROM spip_pim_agenda_invites WHERE id_agenda=$id_agenda $cond_in");
245                        // ajout/maj des nouveaux invites
246                        if (is_array($id_invites))
247                                foreach($id_invites as $id_invite){
248                                        if (!spip_fetch_array(spip_query("SELECT * FROM spip_pim_agenda_invites WHERE id_agenda=$id_agenda AND id_auteur=$id_invite")))
249                                                spip_query("INSERT INTO spip_pim_agenda_invites (id_agenda,id_auteur) VALUES ($id_agenda,$id_invite)");
250                                }
251                        $evenement_action = 'evenement_modif';
252
253                       
254                        // Envoi des messages d'invitation par messagerie interne et mail
255                        $envoi=false;
256                        $message_titre=_T('pimagenda:texte_agenda');
257                        $message_auteur=$id_organisateur;
258                        $message_date_heure=date("Y-m-d H:i:s");
259                        $redirect_url = parametre_url($script,'id_agenda',$id_agenda);
260                        $message_texte="Vous &ecirc;tes invit&eacute;s le <a href='$redirect_url'>".date("d-m-Y",$st_date_deb)." &agrave; ".date("H:i",$st_date_deb)."</a> (dur&eacute;e ".date("H:i",$st_date_fin-$st_date_deb).")";
261                        if ($modif){
262                                if ($st_date_deb!=($st_last=strtotime($row_anc['date_debut']))){
263                                        $envoi=true;
264                                        $message_texte="L'invitation du ".date("d-m-Y",$st_last)." &agrave; ".date("H:i",$st_last)." a &eacute;t&eacute; deplac&eacute;e le <a href='$redirect_url'>".date("d-m-Y",$st_date_deb)." &agrave; ".date("H:i",$st_date_deb)."</a> (dur&eacute;e ".date("H:i",$st_date_fin-$st_date_deb).")";
265                                }
266                                else if ($st_date_fin!=($st_last=strtotime($row_anc['date_fin']))){
267                                        $envoi=true;
268                                        $message_texte="La dur&eacute;e de l'invitation du <a href='$redirect_url'>".date("d-m-Y",$st_date_deb)." &agrave; ".date("H:i",$st_date_deb)."</a> a &eacute;t&eacute; modifi&eacute;e (nouvelle dur&eacute;e ".date("H:i",$st_date_fin-$st_date_deb).")";
269                                }
270                        }
271                        if ( ($modif && $envoi) || ($insert)){
272                                $id_message = spip_abstract_insert("spip_messages",
273                                                "(titre,texte,type,date_heure,date_fin,rv,statut,id_auteur,maj)",
274                                                "(".spip_abstract_quote($message_titre).",".spip_abstract_quote($message_texte).",'normal','$message_date_heure','$message_date_heure','non','publie',$message_auteur,NOW())");
275
276                                $head="From: agenda@".$_SERVER["HTTP_HOST"]."\n";
277                                $message_texte = supprimer_tags($message_texte) . "\n$redirect_url";
278                                include_spip('inc/charset');
279                                $trans_tbl = get_html_translation_table (HTML_ENTITIES);
280                                $trans_tbl = array_flip ($trans_tbl);
281                                // mettre le texte dans un charset acceptable
282                                $mess_iso = unicode2charset(charset2unicode($message_texte),'iso-8859-1');
283                                // regler les entites si il en reste
284                                $mess_iso = strtr($mess_iso, $trans_tbl);
285                               
286                                if ($id_message!=0){
287                                        foreach($id_invites as $value){
288                                                $id_dest=spip_abstract_quote($value);
289                                                spip_query("INSERT INTO spip_auteurs_messages (id_message, id_auteur, vu) VALUES ($id_message, $id_dest,'non');");
290                                                if ($row=spip_fetch_array(spip_query("SELECT email FROM spip_auteurs WHERE id_auteur=$id_dest")) && isset($row['email'])){
291                                                        mail($row['email'],$message_titre,$message_texte,$head);
292                                                }
293                                        }
294                                }
295                        }
296
297
298                       
299                       
300                        // relecture de la base
301                        $res = spip_query("SELECT * FROM spip_pim_agenda WHERE id_agenda=$id_agenda");
302                        if ($row = spip_fetch_array($res)){
303                                $type = $row['type'];
304                                $prive = $row['prive'];
305                                $crayon = $row['crayon'];
306                                $id_article     = $row['id_article'];
307                                $date_debut     = $row['date_debut'];
308                                $date_fin       = $row['date_fin'];
309                                $titre  = $row['titre'];
310                                $descriptif     = $row['descriptif'];
311                                $lieu   = $row['lieu'];
312                                $id_agenda_source       = $row['id_agenda_source'];
313                        }
314                }
315                else if ($supp_evenement){
316                        /*$id_article = intval(_request('id_article'));
317                        if (!$id_article)
318                                $id_article = intval(_request('ajouter_id_article'));*/
319                        $res = spip_query("SELECT * FROM spip_pim_agenda WHERE id_agenda=$id_agenda");
320                        if ($row = spip_fetch_array($res)){
321                                spip_query("DELETE FROM spip_mots_pim_agenda WHERE id_agenda=$id_agenda");
322                                spip_query("DELETE FROM spip_pim_agenda WHERE id_agenda=$id_agenda");
323                        }
324                }
325               
326        }
327
328        // pour la chaine de hidden
329        $script_hidden = $script = str_replace('&amp;', '&', $script);
330        /*foreach ($ids as $id => $v)
331                $script_hidden = parametre_url($script_hidden, $id, $v, '&');*/
332
333        if ($evenement_action)
334                return array('formulaires/formulaire_agenda_edit', 0,
335                array(
336                        'auteur' => $auteur,
337                        'email_auteur' => $email_auteur,
338                        'retour_agenda' => $retour_agenda,
339                        'url' => $script, # ce sur quoi on fait le action='...'
340                        'url_post' => $script_hidden, # pour les variables hidden
341                        'url_site' => ($url_site ? $url_site : "http://"),
342                        'alea' => $alea,
343                        'hash' => $hash,
344                        'ajouter_groupe' => $ajouter_groupe,
345                        'ajouter_mot' => (is_array($ajouter_mot) ? $ajouter_mot : array($ajouter_mot)),
346                        'type' =>       $type,
347                        'prive' => $prive,
348                        'crayon' => $crayon,
349                        'id_article' => $id_article,
350                        'date_debut' => $date_debut,
351                        'date_fin' =>   $date_fin,
352                        'titre' => $titre,
353                        'descriptif' => $descriptif,
354                        'lieu' =>       $lieu,
355                        'id_auteur' => $id_auteur,
356                        'id_agenda' => $id_agenda,
357                        'evenement_action' => $evenement_action
358                        ));
359        else
360                return false;
361               
362}
363
364
365?>
Note: See TracBrowser for help on using the repository browser.