Mise en route du suivi.
[aidenligne_francais_universite.git] / ecrire / exec / message.php
1 <?php
2
3 /***************************************************************************\
4 * SPIP, Systeme de publication pour l'internet *
5 * *
6 * Copyright (c) 2001-2007 *
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/presentation');
16 include_spip('base/abstract_sql');
17 include_spip('inc/mots');
18
19 // http://doc.spip.org/@exec_message_dist
20 function exec_message_dist()
21 {
22 global $cherche_auteur, $connect_id_auteur,$forcer_dest,$id_message;
23
24 $id_message = intval($id_message);
25 charger_generer_url();
26
27 $row = spip_fetch_array(spip_query("SELECT type FROM spip_messages WHERE id_message=$id_message"));
28
29 if ($row['type'] != "affich"){
30 $res = spip_fetch_array(spip_query("SELECT vu FROM spip_auteurs_messages WHERE id_auteur=$connect_id_auteur AND id_message=$id_message"));
31 if (!$res) {
32 $commencer_page = charger_fonction('commencer_page', 'inc');
33 echo $commencer_page(_T('info_acces_refuse'));
34 debut_gauche();
35 debut_droite();
36 echo "<b>"._T('avis_non_acces_message')."</b><p>";
37 echo fin_gauche(), fin_page();
38 exit;
39 }
40 // Marquer le message vu pour le visiteur
41 if ($res['vu'] != 'oui') {
42 include_spip('inc/headers');
43 redirige_par_entete(redirige_action_auteur("editer_message","$id_message/:$connect_id_auteur", 'message', "id_message=$id_message", true));
44 }
45 }
46
47 exec_affiche_message_dist($id_message, $cherche_auteur, $forcer_dest);
48 }
49
50 // http://doc.spip.org/@http_afficher_rendez_vous
51 function http_afficher_rendez_vous($date_heure, $date_fin)
52 {
53 global $spip_lang_rtl;
54
55 $dirpuce = _DIR_RACINE . 'dist';
56 if (jour($date_heure) == jour($date_fin) AND mois($date_heure) == mois($date_fin) AND annee($date_heure) == annee($date_fin)) {
57 echo "<p class='verdana2' style='text-align: center'>"._T('titre_rendez_vous')." ".majuscules(nom_jour($date_heure))." <b>".majuscules(affdate($date_heure))."</b><br />\n<b>".heures($date_heure)." "._T('date_mot_heures')." ".minutes($date_heure)."</b>";
58 echo " &nbsp; <img src='$dirpuce/puce$spip_lang_rtl.gif' alt=' ' style='border: 0px;' /> &nbsp; ".heures($date_fin)." "._T('date_mot_heures')." ".minutes($date_fin)."</p>";
59 } else {
60 echo "<p class='verdana2' style='text-align: center'>"._T('titre_rendez_vous')."<br />\n".majuscules(nom_jour($date_heure))." <b>".majuscules(affdate($date_heure))."</b>, <b>".heures($date_heure)." "._T('date_mot_heures')." ".minutes($date_heure)."</b>";
61 echo "<br />\n<img src='$dirpuce/puce$spip_lang_rtl.gif' alt=' ' style='border: 0px;' /> ".majuscules(nom_jour($date_fin))." ".majuscules(affdate($date_fin)).", <b>".heures($date_fin)." "._T('date_mot_heures')." ".minutes($date_fin)."</b></p>";
62 }
63 }
64
65 // http://doc.spip.org/@http_auteurs_ressemblants
66 function http_auteurs_ressemblants($cherche_auteur, $id_message)
67 {
68 global $connect_id_auteur;
69 $query = spip_query("SELECT id_auteur, nom FROM spip_auteurs WHERE messagerie<>'non' AND id_auteur<>'$connect_id_auteur' AND pass<>'' AND login<>''");
70 $table_auteurs = array();
71 $table_ids = array();
72 while ($row = spip_fetch_array($query)) {
73 $table_auteurs[] = $row['nom'];
74 $table_ids[] = $row['id_auteur'];
75 }
76 $resultat = mots_ressemblants($cherche_auteur, $table_auteurs, $table_ids);
77 if (!$resultat) {
78 return '<b>' . _T('info_recherche_auteur_zero', array('cherche_auteur' => $cherche_auteur))."</b><br />";
79 }
80 else if (count($resultat) == 1) {
81 // action/editer_message a du prendre en compte ce cas
82 list(, $nouv_auteur) = each($resultat);
83 $row = spip_fetch_array(spip_query("SELECT nom FROM spip_auteurs WHERE id_auteur=$nouv_auteur"));
84 $nom_auteur = $row['nom'];
85 return "<b>"._T('info_ajout_participant')."</b><br />" .
86 "<ul><li><span class='verdana1 spip_small'><b><span class='spip_medium'>$nom_auteur</span></b></span></li>\n</ul>";
87 }
88 else if (count($resultat) < 16) {
89 $res = '';
90 $query = spip_query("SELECT * FROM spip_auteurs WHERE id_auteur IN (" . join(',', $resultat) . ") ORDER BY nom");
91
92 while ($row = spip_fetch_array($query)) {
93 $id_auteur = $row['id_auteur'];
94 $nom_auteur = $row['nom'];
95 $email_auteur = $row['email'];
96 $bio_auteur = $row['bio'];
97 $res .= "\n<li><span class='spip_medium verdana1'><b>$nom_auteur</b></span>" .
98 ($email_auteur ? " ($email_auteur)" : '') .
99 "\n <a href='" . redirige_action_auteur("editer_message","$id_message/@$id_auteur", 'message', "id_message=$id_message")
100 . "'>"
101 . _T('lien_ajout_destinataire').
102 "</a>" .
103 (!trim($bio_auteur) ? '' :
104 ("<br />\n<span class='spip_x-small'>".propre(couper($bio_auteur, 100))."</span>\n")) .
105 "</li>\n";
106 }
107 return "<b>"._T('info_recherche_auteur_ok', array('cherche_auteur' => $cherche_auteur))."</b><br /><ul>$res</ul>";
108 }
109 else {
110 return "<b>"._T('info_recherche_auteur_a_affiner', array('cherche_auteur' => $cherche_auteur))."</b><br />";
111 }
112 }
113
114 // http://doc.spip.org/@http_visualiser_participants
115 function http_visualiser_participants($auteurs_tmp)
116 {
117 return "\n<table border='0' cellspacing='0' cellpadding='3' width='100%'><tr><td style='background-color: #EEEECC'>" .
118 bouton_block_invisible("auteurs,ajouter_auteur") .
119 "<span class='serif2'><b>" .
120 _T('info_nombre_partcipants') .
121 "</b></span>" .
122 ((count($auteurs_tmp) == 0) ? '' :
123 (" <span class='arial2'>".join($auteurs_tmp,", ")."</span>")) .
124 "</td></tr></table>\n";
125 }
126
127 // http://doc.spip.org/@http_ajouter_participants
128 function http_ajouter_participants($ze_auteurs, $id_message)
129 {
130 $result_ajout_auteurs = spip_query("SELECT * FROM spip_auteurs WHERE " . (!$ze_auteurs ? '' : "id_auteur NOT IN ($ze_auteurs) AND ") . " messagerie<>'non' AND statut IN ('0minirezo', '1comite') ORDER BY statut, nom");
131
132 if (!spip_num_rows($result_ajout_auteurs) > 0) return '';
133
134 $res = "<span class='verdana1 spip_small'><b>" .
135 _T('bouton_ajouter_participant') ." &nbsp; </b></span>\n" .
136 "<input type='hidden' name='id_message' value=\"$id_message\" />";
137
138 if (spip_num_rows($result_ajout_auteurs) > 50) {
139 $res .= "\n<input type='text' name='cherche_auteur' class='fondl' value='' size='20' />";
140 $res .= "\n<input type='submit' value='"._T('bouton_chercher')."' class='fondo' />";
141 } else {
142 $res .= "<select name='nouv_auteur' size='1' style='width: 150px' class='fondl'>";
143 while($row=spip_fetch_array($result_ajout_auteurs)) {
144 $id_auteur = $row['id_auteur'];
145 $nom = $row['nom'];
146 $email = $row['email'];
147 $statut_auteur = $row['statut'];
148 $premiere = strtoupper(substr(trim($nom), 0, 1));
149
150 if ($GLOBALS['connect_statut'] != '0minirezo') {
151 if ($p = strpos($email, '@')) $email = substr($email, 0, $p).'@...';
152 }
153
154 if ($statut_auteur != $statut_old) {
155 $s =ereg_replace("0minirezo", _T('info_statut_administrateur'), $statut_auteur);
156 $s=ereg_replace("1comite", _T('info_statut_redacteur'), $s);
157 $s=ereg_replace("2redac", _T('info_statut_redacteur'), $s);
158 $s=ereg_replace("5poubelle", _T('info_statut_efface'), $s);
159 $res .= "\n<option value=\"x\"></option>";
160 $res .= "\n<option value=\"x\"> " . $s . 's</option>';
161 }
162
163 if ($premiere != $premiere_old AND ($statut_auteur != '0minirezo' OR !$premiere_old))
164 $res .= "\n<option value=\"x\"></option>";
165
166 $res .= "\n<option value=\"$id_auteur\">&nbsp;&nbsp;&nbsp;&nbsp;" .supprimer_tags(couper("$nom ($email) ", 40)) . "</option>";
167 $statut_old = $statut_auteur;
168 $premiere_old = $premiere;
169 }
170
171 $res .= "</select>"
172 . "<input type='submit' value='"._T('bouton_ajouter')."' class='fondo' />";
173 }
174 return redirige_action_auteur('editer_message', "$id_message,", 'message', "id_message=$id_message", "<div align='left'>$res</div>", " method='post'");
175 }
176
177 // http://doc.spip.org/@http_afficher_forum_perso
178 function http_afficher_forum_perso($id_message)
179 {
180
181 echo "<br /><br />\n<div align='center'>";
182 icone(_T('icone_poster_message'), generer_url_ecrire("forum_envoi", "statut=perso&id=$id_message&script=message"). '#formulaire', "forum-interne-24.gif", "creer.gif");
183 echo "</div>\n<p align='left'>";
184
185 $query_forum = spip_query("SELECT * FROM spip_forum WHERE statut='perso' AND id_message='$id_message' AND id_parent=0 ORDER BY date_heure DESC LIMIT 20");
186 echo afficher_forum($query_forum, "message","id_message=$id_message");
187 echo "\n</p>";
188 }
189
190
191 // http://doc.spip.org/@http_message_avec_participants
192 function http_message_avec_participants($id_message, $statut, $forcer_dest, $cherche_auteur, $expediteur='')
193 {
194 global $connect_id_auteur, $couleur_claire ;
195
196 if ($cherche_auteur) {
197 echo "\n<div align='left'><div class='cadre-info'>"
198 . http_auteurs_ressemblants($cherche_auteur , $id_message)
199 . "\n</div></div>";
200 }
201
202 //
203 // Liste des participants
204 //
205
206 $result_auteurs = spip_query("SELECT auteurs.* FROM spip_auteurs AS auteurs, spip_auteurs_messages AS lien WHERE lien.id_message=$id_message AND lien.id_auteur=auteurs.id_auteur");
207
208 $total_dest = spip_num_rows($result_auteurs);
209
210 if ($total_dest > 0) {
211 $couleurs = array("#FFFFFF",$couleur_claire);
212 $auteurs_tmp = array();
213 $ze_auteurs = array();
214 $ifond = 0;
215 $res = '';
216 while($row = spip_fetch_array($result_auteurs)) {
217 $id_auteur = $row["id_auteur"];
218 $nom_auteur = typo($row["nom"]);
219 $statut_auteur = $row["statut"];
220 $ze_auteurs[] = $id_auteur;
221
222 $couleur = $couleurs[$ifond];
223 $ifond = 1 - $ifond;
224
225 $auteurs_tmp[] = "<a href='" .
226 generer_url_ecrire('auteur_infos',"id_auteur=" . $id_auteur) ."'>". $nom_auteur . "</a>";
227
228 $aut = (($id_auteur != $expediteur) ? '' :
229 ("<span class='arial0'>". _T('info_auteur_message') ."</span> "));
230
231 $res .= "<tr><td style='background-color: $couleur'><span class='verdana1 spip_small'>&nbsp;". bonhomme_statut($row)."&nbsp;" . $aut . $nom_auteur . "</span></td>" .
232 "<td style='background-color: $couleur' align='right'><span class='verdana1 spip_x-small'>" . (($id_auteur == $connect_id_auteur) ? "&nbsp;" : ("[<a href='" . redirige_action_auteur("editer_message","$id_message/-$id_auteur", 'message', "id_message=$id_message") . "'>"._T('lien_retrait_particpant')."</a>]")) . "</span></td></tr>\n";
233 }
234 echo
235 http_visualiser_participants($auteurs_tmp),
236 debut_block_invisible("auteurs"),
237 "\n<table border='0' cellspacing='0' cellpadding='3' width='100%'>",
238 $res,
239 "</table>\n",
240 fin_block();
241 }
242
243 if ($statut == 'redac' OR $forcer_dest)
244 echo http_ajouter_participants(join(',', $ze_auteurs), $id_message);
245 else {
246 echo
247 debut_block_invisible("ajouter_auteur"),
248 "<br /><div align='right'><span class='verdana1 spip_small'><a href='" . generer_url_ecrire("message","id_message=$id_message&forcer_dest=oui") . "'>"._T('lien_ajouter_participant')."</a></span></div>",
249 fin_block();
250 }
251 return $total_dest;
252 }
253
254 // http://doc.spip.org/@http_affiche_message
255 function http_affiche_message($id_message, $expediteur, $statut, $type, $texte, $titre, $rv, $date_heure, $date_fin, $cherche_auteur, $forcer_dest)
256 {
257 global $connect_id_auteur,$connect_statut, $les_notes;
258
259 if ($type == 'normal') {
260 $le_type = _T('info_message_2').aide ("messut");
261 $la_couleur = "#02531b";
262 $couleur_fond = "#cffede";
263 }
264 else if ($type == 'pb') {
265 $le_type = _T('info_pense_bete').aide ("messpense");
266 $la_couleur = "#3874b0";
267 $couleur_fond = "#edf3fe";
268 }
269 else if ($type == 'affich') {
270 $le_type = _T('info_annonce');
271 $la_couleur = "#ccaa00";
272 $couleur_fond = "#ffffee";
273 }
274
275 // affichage des caracteristiques du message
276
277 echo "<div style='border: 1px solid $la_couleur; background-color: $couleur_fond; padding: 5px;'>"; // debut cadre de couleur
278 //debut_cadre_relief("messagerie-24.gif");
279 echo "\n<table width='100%' cellpadding='0' cellspacing='0' border='0'>";
280 echo "<tr><td>"; # uniques
281
282 echo "<span style='color: $la_couleur' class='verdana1 spip_small'><b>$le_type</b></span><br />";
283 echo "<span class='verdana1 spip_large'><b>$titre</b></span>";
284 if ($statut == 'redac') {
285 echo "<br /><span style='color: red;' class='verdana1 spip_small'><b>"._T('info_redaction_en_cours')."</b></span>";
286 }
287 else if ($rv == 'non') {
288 echo "<br /><span style='color: #666666;' class='verdana1 spip_small'><b>".nom_jour($date_heure).' '.affdate_heure($date_heure)."</b></span>";
289 }
290
291
292 //////////////////////////////////////////////////////
293 // Message avec participants
294 //
295
296 if ($type == 'normal') {
297 echo debut_cadre_enfonce("redacteurs-24.gif", true);
298 $total_dest = http_message_avec_participants($id_message, $statut, $forcer_dest, $cherche_auteur, $expediteur);
299 fin_cadre_enfonce();
300 }
301
302 if ($rv != "non") http_afficher_rendez_vous($date_heure, $date_fin);
303
304
305 //////////////////////////////////////////////////////
306 // Le message lui-meme
307 //
308
309 echo "<div align='left'>",
310 "\n<table width='100%' cellpadding='0' cellspacing='0' border='0'>",
311 "<tr><td>",
312 "<div class='serif'><p>$texte</p></div>";
313
314 if ($les_notes) {
315 echo debut_cadre_relief();
316 echo "<div $dir_lang class='arial11'>";
317 echo justifier("<b>"._T('info_notes')."&nbsp;:</b> ".$les_notes);
318 echo "</div>";
319 echo fin_cadre_relief();
320 }
321
322 if ($expediteur == $connect_id_auteur AND $statut == 'redac') {
323 if ($type == 'normal' AND $total_dest < 2) {
324 echo "<p style='color: #666666; text-align: right;' class='verdana1 spip_small'><b>"._T('avis_destinataire_obligatoire')."</b></p>";
325 } else {
326 echo "\n<div align='center'><table><tr><td>";
327 icone (_T('icone_envoyer_message'), redirige_action_auteur('editer_message', "$id_message/publie", "message","id_message=$id_message"), "messagerie-24.gif", "creer.gif");
328 echo "</td></tr></table></div>";
329 }
330 }
331 echo "</td></tr></table>\n</div>";
332
333 echo "</td></tr></table>\n"; //fin_cadre_relief();
334 echo "</div>"; // fin du cadre de couleur
335
336 // Les boutons
337
338 $aut = ($expediteur == $connect_id_auteur);
339 $aff = ($type == 'affich' AND $connect_statut == '0minirezo');
340
341 echo "\n<table width='100%'><tr><td>";
342
343 // bouton de suppression
344
345 if ($aut AND ($statut == 'redac' OR $type == 'pb') OR $aff) {
346 echo "\n<table align='left'><tr><td>";
347 icone (_T('icone_supprimer_message'), redirige_action_auteur("editer_message","-$id_message", 'messagerie'), "messagerie-24.gif", "supprimer.gif");
348 echo "</td></tr></table>";
349 }
350
351 // bouton retrait de la discussion
352
353 if ($statut == 'publie' AND $type == 'normal') {
354 echo "\n<table align='left'><tr><td>";
355 icone (_T('icone_arret_discussion'), redirige_action_auteur("editer_message","$id_message/-$connect_id_auteur", 'messagerie', "id_message=$id_message"), "messagerie-24.gif", "supprimer.gif");
356 echo "</td></tr></table>";
357 }
358
359 // bouton modifier ce message
360
361 if ($aut OR $aff) {
362 echo "\n<table align='right'><tr><td>";
363 icone (_T('icone_modifier_message'), (generer_url_ecrire("message_edit","id_message=$id_message")), "messagerie-24.gif", "edit.gif");
364 echo "</td></tr></table>";
365 }
366 echo "</td></tr></table>";
367 }
368
369 // http://doc.spip.org/@exec_affiche_message_dist
370 function exec_affiche_message_dist($id_message, $cherche_auteur, $forcer_dest)
371 {
372 global $connect_id_auteur, $echelle, $partie_cal;
373 $row = spip_fetch_array(spip_query("SELECT * FROM spip_messages WHERE id_message=$id_message"));
374 if ($row) {
375 $id_message = $row['id_message'];
376 $date_heure = $row["date_heure"];
377 $date_fin = $row["date_fin"];
378 $titre = typo($row["titre"]);
379 $texte = propre($row["texte"]);
380 $type = $row["type"];
381 $statut = $row["statut"];
382 $rv = $row["rv"];
383 $expediteur = $row['id_auteur'];
384
385 $lejour=journum($row['date_heure']);
386 $lemois = mois($row['date_heure']);
387 $lannee = annee($row['date_heure']);
388
389
390
391 $commencer_page = charger_fonction('commencer_page', 'inc');
392 echo $commencer_page($titre, "accueil", "messagerie");
393
394 debut_gauche();
395
396 if ($rv != 'non')
397 echo http_calendrier_agenda ($lannee, $lemois, $lejour, $lemois, $lannee,false, generer_url_ecrire('calendrier'));
398
399 echo "<br />";
400 echo http_calendrier_rv(sql_calendrier_taches_annonces(),"annonces");
401 echo http_calendrier_rv(sql_calendrier_taches_pb(),"pb");
402 echo http_calendrier_rv(sql_calendrier_taches_rv(), "rv");
403
404 if ($rv != "non") {
405 list ($sh, $ah) = sql_calendrier_interval(sql_calendrier_jour($lannee,$lemois, $lejour));
406 foreach ($ah as $k => $v)
407 {
408 foreach ($v as $l => $e)
409 {
410 if (ereg("=$id_message$", $e['URL']))
411 {
412 $ah[$k][$l]['CATEGORIES'] = "calendrier-nb";
413 break;
414 }
415 }
416 }
417 creer_colonne_droite();
418
419 echo http_calendrier_ics_titre($lannee,$lemois,$lejour,generer_url_ecrire('calendrier'));
420 echo http_calendrier_ics($lannee,$lemois, $lejour, $echelle, $partie_cal, 90, array($sh, $ah));
421 }
422
423 debut_droite();
424
425 http_affiche_message($id_message, $expediteur, $statut, $type, $texte, $titre, $rv, $date_heure, $date_fin, $cherche_auteur, $forcer_dest);
426
427 // reponses et bouton poster message
428
429 http_afficher_forum_perso($id_message);
430 }
431
432 echo fin_gauche(), fin_page();
433 }
434
435 ?>