[SPIP] ~v3.0.20-->v3.0.25
[lhc/web/clavette_www.git] / www / plugins-dist / organiseur / inc / messages.php
1 <?php
2
3 /***************************************************************************\
4 * SPIP, Systeme de publication pour l'internet *
5 * *
6 * Copyright (c) 2001-2016 *
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 include_spip('base/abstract_sql');
17
18 if (!defined('_EMAIL_GENERAL'))
19 define('_EMAIL_GENERAL','general'); // permet aux admin d'envoyer un email a tout le monde
20
21 /**
22 * Lister les statuts des auteurs pouvant recevoir un message
23 * c'est tous les auteurs au moins redacteur
24 *
25 * @return array
26 */
27 function messagerie_statuts_destinataires_possibles(){
28 include_spip('inc/filtres_ecrire');
29 return pipeline('messagerie_statuts_destinataires_possibles', auteurs_lister_statuts('redacteurs',false));
30 }
31
32 /**
33 * Nettoyer une liste de destinataires
34 * @param $destinataires
35 * @return array
36 */
37 function messagerie_nettoyer_destinataires($destinataires){
38 foreach ($destinataires as $k=>$id){
39 // il se peut que l'id recupere l'ancre qui suit avec certains ie ... :(
40 if (preg_match(',^[0-9]+#[a-z_0-9]+,',$id))
41 $destinataires[$k] = intval($id);
42 }
43 return $destinataires;
44 }
45
46 /**
47 * Fonction generique de verification des destinataires
48 * lors de l'envoi d'un message ou de recommander
49 * un destinataire peut etre un id_auteur numerique
50 * ou une adresse mail valide, si l'options accepter_email est true
51 *
52 * @param array $destinataires
53 * @param array $options
54 * @return array
55 */
56 function messagerie_verifier_destinataires($destinataires,$options=array('accepter_email'=>true)){
57 $erreurs = array();
58
59 $destinataires = messagerie_nettoyer_destinataires($destinataires);
60 foreach ($destinataires as $id){
61 if (is_numeric($id)){
62 if (!$id)
63 $erreurs[] = _T('organiseur:erreur_destinataire_invalide',array('dest'=>$id));
64 }
65 else {
66 if (!$options['accepter_email']
67 OR !email_valide($id))
68 $erreurs[] = _T('organiseur:erreur_destinataire_invalide',array('dest'=>$id));
69 }
70 }
71
72 return $erreurs;
73 }
74
75 /**
76 * Selectionner les destinataires en distinguant emails et id_auteur
77 *
78 * @param array $dests
79 * @return array
80 */
81 function messagerie_destiner($dests){
82 // separer les destinataires auteur des destinataires email
83 $auteurs_dest = array();
84 $email_dests = array();
85
86 $dests = messagerie_nettoyer_destinataires($dests);
87 foreach ($dests as $id){
88 if (is_numeric($id))
89 $auteurs_dest[] = $id;
90 elseif (defined('_MESSAGERIE_EMAIL_GENERAL') AND $id!=_MESSAGERIE_EMAIL_GENERAL)
91 $email_dests[] = $id;
92 }
93 if (count($email_dests)) {
94 // retrouver les id des emails pour ceux qui sont en base
95 $res = sql_select('id_auteur,email','spip_auteurs',sql_in('email', $email_dests));
96 $auteurs_dest_found = array();
97 while ($row = sql_fetch($res)){
98 $auteurs_dest_found[] = $row['id_auteur'];
99 }
100 $auteurs_dest = array_merge($auteurs_dest,$auteurs_dest_found);
101 }
102 return array($auteurs_dest,$email_dests);
103 }
104
105 /**
106 * Diffuser un message par la messagerie interne
107 *
108 * @param int $id_message
109 * @param array $auteurs_dest
110 * @return bool|int
111 */
112 function messagerie_diffuser_message($id_message, $auteurs_dest=array()){
113 $out = false;
114 if ($id_message=intval($id_message)
115 AND count($auteurs_dest)){
116 include_spip('action/editer_liens');
117 $out = objet_associer(array('auteur'=>$auteurs_dest),array('message'=>$id_message),array('vu'=>'non'));
118 }
119 return $out;
120 }
121
122 /**
123 * Envoyer un message par mail pour les destinataires externes
124 *
125 * @param int $id_message
126 * @param array $emails_dest
127 * @return bool
128 */
129 function messagerie_mailer_message($id_message, $emails_dest=array()){
130 if ($id_message=intval($id_message)
131 AND count($emails_dest)) {
132 if ($row = sql_fetsel('titre,texte,id_auteur','spip_messages','id_message='.intval($id_message))){
133 $from = sql_getfetsel('email','spip_auteurs','id_auteur='.$row['id_auteur']);
134 foreach($emails_dest as $email)
135 job_queue_add(
136 'envoyer_mail',
137 'messagerie mail',
138 array($email,$row['titre'],array('texte'=>$row['texte'],'from'=>$from)),
139 'inc/'
140 );
141 return true;
142 }
143 }
144 return false;
145 }
146
147 /**
148 * Marquer un message dans l'etat indique par $vu
149 *
150 * @param int $id_auteur
151 * @param array $liste
152 * @param string $vu
153 * @return void
154 */
155 function messagerie_marquer_message($id_auteur,$liste,$vu){
156 include_spip('action/editer_liens');
157 if (!is_array($liste))
158 $liste = array($liste);
159 // completer les liens qui n'existent pas encore
160 // ex : pour marquer lue une annonce, on ajoute le lien d'abord (n'existe pas)
161 // puis on le marque 'oui'
162 $liens = objet_trouver_liens(array('auteur'=>$id_auteur),array('message'=>$liste));
163 $l = array();
164 foreach($liens as $lien)
165 $l[] = $lien['message'];
166 objet_associer(array('auteur'=>$id_auteur),array('message'=>array_diff($liste,$l)),array('vu'=>$vu));
167 // puis les marquer tous lus
168 objet_qualifier_liens(array('auteur'=>$id_auteur),array('message'=>$liste),array('vu'=>$vu));
169 include_spip('inc/invalideur');
170 suivre_invalideur("message/".implode(',',$liste));
171 }
172
173 /**
174 * Marquer un message comme lu
175 *
176 * @param int $id_auteur
177 * @param array $liste_id_message
178 */
179 function messagerie_marquer_lus($id_auteur,$liste_id_message){messagerie_marquer_message($id_auteur,$liste_id_message,'oui');}
180
181 /**
182 * Marquer un message comme non lu
183 *
184 * @param int $id_auteur
185 * @param array $liste_id_message
186 */
187 function messagerie_marquer_non_lus($id_auteur,$liste_id_message){messagerie_marquer_message($id_auteur,$liste_id_message,'non');}
188
189 /**
190 * Effacer un message recu
191 *
192 * @param int $id_auteur
193 * @param array $liste_id_message
194 */
195 function messagerie_effacer_message_recu($id_auteur,$liste_id_message){messagerie_marquer_message($id_auteur,$liste_id_message,'poub');}
196
197 ?>