messages.php 6.0 KB

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