[SPIP] +2.1.12
[velocampus/web/www.git] / www / ecrire / action / editer_message.php
1 <?php
2
3 /***************************************************************************\
4 * SPIP, Systeme de publication pour l'internet *
5 * *
6 * Copyright (c) 2001-2011 *
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
13 if (!defined('_ECRIRE_INC_VERSION')) return;
14
15 include_spip('inc/filtres');
16
17 // http://doc.spip.org/@action_editer_message_dist
18 function action_editer_message_dist($arg=null) {
19
20 if (is_null($arg)){
21 $securiser_action = charger_fonction('securiser_action', 'inc');
22 $arg = $securiser_action();
23 }
24
25 if (preg_match(',^(\d+)$,', $arg, $r))
26 action_editer_message_post_vieux($arg);
27 elseif (preg_match(',^-(\d+)$,', $arg, $r))
28 action_editer_message_post_supprimer($r[1]);
29 elseif (preg_match(',^(\d+)\W$,', $arg, $r))
30 action_editer_message_post_choisir($r[1]);
31 elseif (preg_match(',^(\d+)\W@(\d+)$,', $arg, $r))
32 action_editer_message_post_ajouter($r[1], $r[2]);
33 elseif (preg_match(',^(\d+)\W:(\d+)$,', $arg, $r))
34 action_editer_message_post_vu($r[1], $r[2]);
35 elseif (preg_match(',^(\d+)\W-(\d+)$,', $arg, $r))
36 action_editer_message_post_retirer($r[1], $r[2]);
37 elseif (preg_match(',^(\d+)\W(\w+)$,', $arg, $r))
38 action_editer_message_post_envoyer($r[1], $r[2]);
39 elseif (preg_match(',^(\w+)$,', $arg, $r))
40 action_editer_message_post_nouveau($arg);
41 elseif (preg_match(',^(\w+)\W(\d+)$,', $arg, $r))
42 action_editer_message_post_nouveau($r[1], $r[2]);
43 elseif (preg_match(',^(\w+)\W(\d+-\d+-\d+)$,', $arg, $r))
44 action_editer_message_post_nouveau($r[1], '', $r[2]);
45 else spip_log("action_editer_message_dist $arg pas compris");
46 }
47
48 // http://doc.spip.org/@action_editer_message_post_supprimer
49 function action_editer_message_post_supprimer($id_message) {
50 sql_delete("spip_messages", "id_message=".sql_quote($id_message));
51 sql_delete("spip_auteurs_messages", "id_message=".sql_quote($id_message));
52 sql_delete("spip_forum", "id_message=".sql_quote($id_message));
53 pipeline('trig_supprimer_objets_lies',array(
54 array('type'=>'message','id'=>$id_message)
55 ));
56 }
57
58 // http://doc.spip.org/@action_editer_message_post_vu
59 function action_editer_message_post_vu($id_message, $id_auteur) {
60 sql_updateq("spip_auteurs_messages", array("vu" => 'oui'), "id_message=$id_message AND id_auteur=$id_auteur");
61
62 }
63
64 // http://doc.spip.org/@action_editer_message_post_retirer
65 function action_editer_message_post_retirer($id_message, $id_auteur) {
66 sql_delete("spip_auteurs_messages", "id_message=$id_message AND id_auteur=$id_auteur");
67 }
68
69 // http://doc.spip.org/@action_editer_message_post_ajouter
70 function action_editer_message_post_ajouter($id_message, $id_auteur) {
71
72 sql_delete("spip_auteurs_messages", "id_auteur=$id_auteur AND id_message=$id_message");
73 sql_insertq('spip_auteurs_messages',
74 array('id_auteur' => $id_auteur,
75 'id_message' => $id_message,
76 'vu' =>'non'));
77
78 // Ne pas notifier ici, car si on se trompe d'auteur, on veut avoir le temps
79 // de supprimer celui qu'on vient d'ajouter... c'est fait en cron
80 }
81
82 // http://doc.spip.org/@action_editer_message_post_choisir
83 function action_editer_message_post_choisir($id_message) {
84
85 if ($id_auteur = _request('nouv_auteur'))
86 action_editer_message_post_ajouter($id_message, $id_auteur);
87 else {
88 include_spip('inc/mots');
89 include_spip('inc/charsets'); // pour tranlitteration
90 $id_auteur = $GLOBALS['visiteur_session']['id_auteur'];
91 $cherche_auteur= _request('cherche_auteur');
92 $query = sql_select("id_auteur, nom", "spip_auteurs", "messagerie<>'non' AND pass<>'' AND login<>'' AND id_auteur<>" . sql_quote($id_auteur));
93 $table_auteurs = array();
94 $table_ids = array();
95 while ($row = sql_fetch($query)) {
96 $table_auteurs[] = $row['nom'];
97 $table_ids[] = $row['id_auteur'];
98 }
99 $res = mots_ressemblants($cherche_auteur, $table_auteurs, $table_ids);
100 $n = count($res);
101
102 if ($n == 1)
103 # Bingo
104 action_editer_message_post_ajouter($id_message, $res[0]);
105 # renvoyer la valeur ==> formulaire de choix si n !=1
106 # notification que $res[0] a ete rajoute sinon
107 redirige_par_entete(parametre_url(urldecode(_request('redirect')),
108 'cherche_auteur', $cherche_auteur, '&'));
109 }
110 }
111
112
113 // http://doc.spip.org/@action_editer_message_post_envoyer
114 function action_editer_message_post_envoyer($id_message, $statut) {
115
116 sql_updateq("spip_messages", array("statut" => $statut), "id_message=$id_message");
117 sql_updateq("spip_messages", array("date_heure" => date('Y-m-d H:i:s')), "id_message=$id_message AND rv<>'oui'");
118 }
119
120 // http://doc.spip.org/@action_editer_message_post_nouveau
121 function action_editer_message_post_nouveau($type, $dest='', $rv='')
122 {
123
124 $id_auteur = $GLOBALS['visiteur_session']['id_auteur'];
125
126 $mydate = date("YmdHis", time() - 2 * 24 * 3600);
127 sql_delete("spip_messages", "(statut = 'redac') AND (date_heure < $mydate)");
128
129 if ($type == 'pb') $statut = 'publie';
130 else $statut = 'redac';
131
132 $titre = filtrer_entites(_T('texte_nouveau_message'));
133
134 $vals = array('titre' => $titre,
135 'statut' => $statut,
136 'type' => $type,
137 'id_auteur' => $id_auteur);
138
139 if (!$rv)
140 $vals['date_heure'] = date('Y-m-d H:i:s');
141 else {
142 $vals['date_heure'] = "$rv 12:00:00";
143 $vals['date_fin'] = "$rv 13:00:00";
144 $vals['rv'] = 'oui';
145 }
146
147 $id_message = sql_insertq("spip_messages", $vals);
148
149 if ($type != "affich"){
150 sql_insertq('spip_auteurs_messages',
151 array('id_auteur' => $id_auteur,
152 'id_message' => $id_message,
153 'vu' =>'oui'));
154 if ($dest) {
155 sql_insertq('spip_auteurs_messages',
156 array('id_auteur' => $dest,
157 'id_message' => $id_message,
158 'vu' =>'non'));
159 }
160 }
161
162 redirige_url_ecrire('message_edit', "id_message=$id_message&new=oui&dest=$dest");
163 }
164
165 // http://doc.spip.org/@action_editer_message_post_vieux
166 function action_editer_message_post_vieux($id_message)
167 {
168 sql_updateq('spip_messages', array('titre'=>_request('titre'), 'texte' => _request('texte')), "id_message=$id_message");
169
170 sql_updateq('spip_messages', array('rv' => _request('rv')), "id_message=$id_message");
171
172 if (_request('jour'))
173 change_date_message($id_message, _request('heures'),_request('minutes'),_request('mois'), _request('jour'), _request('annee'), _request('heures_fin'),_request('minutes_fin'),_request('mois_fin'), _request('jour_fin'), _request('annee_fin'));
174 action_editer_message_post_choisir($id_message);
175 }
176
177
178 // Convertir dates a calendrier correct
179 // (exemple: 31 fevrier devient debut mars, 24h12 devient 00h12 du lendemain)
180
181 // http://doc.spip.org/@change_date_message
182 function change_date_message($id_message, $heures,$minutes,$mois, $jour, $annee, $heures_fin,$minutes_fin,$mois_fin, $jour_fin, $annee_fin)
183 {
184 $date = date("Y-m-d H:i:s", mktime($heures,$minutes,0,$mois, $jour, $annee));
185
186 $jour = journum($date);
187 $mois = mois($date);
188 $annee = annee($date);
189 $heures = heures($date);
190 $minutes = minutes($date);
191
192 // Verifier que la date de fin est bien posterieure au debut
193 $unix_debut = date("U", mktime($heures,$minutes,0,$mois, $jour, $annee));
194 $unix_fin = date("U", mktime($heures_fin,$minutes_fin,0,$mois_fin, $jour_fin, $annee_fin));
195 if ($unix_fin <= $unix_debut) {
196 $jour_fin = $jour;
197 $mois_fin = $mois;
198 $annee_fin = $annee;
199 $heures_fin = $heures + 1;
200 $minutes_fin = $minutes;
201 }
202
203 $date_fin = date("Y-m-d H:i:s", mktime($heures_fin,$minutes_fin,0,$mois_fin, $jour_fin, $annee_fin));
204
205 $jour_fin = journum($date_fin);
206 $mois_fin = mois($date_fin);
207 $annee_fin = annee($date_fin);
208 $heures_fin = heures($date_fin);
209 $minutes_fin = minutes($date_fin);
210
211 sql_updateq('spip_messages', array('date_heure'=>"$annee-$mois-$jour $heures:$minutes:00", 'date_fin'=>"$annee_fin-$mois_fin-$jour_fin $heures_fin:$minutes_fin:00"), "id_message=$id_message");
212 }
213
214 ?>