123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198 |
- <?php
- /***************************************************************************\
- * SPIP, Systeme de publication pour l'internet *
- * *
- * Copyright (c) 2001-2014 *
- * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
- * *
- * Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
- * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. *
- \***************************************************************************/
- if (!defined('_ECRIRE_INC_VERSION')) return;
- include_spip('inc/filtres');
- include_spip('base/abstract_sql');
- if (!defined('_EMAIL_GENERAL'))
- define('_EMAIL_GENERAL','general'); // permet aux admin d'envoyer un email a tout le monde
- /**
- * Lister les statuts des auteurs pouvant recevoir un message
- * c'est tous les auteurs au moins redacteur
- *
- * @return array
- */
- function messagerie_statuts_destinataires_possibles(){
- include_spip('inc/filtres_ecrire');
- return pipeline('messagerie_statuts_destinataires_possibles', auteurs_lister_statuts('redacteurs',false));
- }
- /**
- * Nettoyer une liste de destinataires
- * @param $destinataires
- * @return array
- */
- function messagerie_nettoyer_destinataires($destinataires){
- foreach ($destinataires as $k=>$id){
- // il se peut que l'id recupere l'ancre qui suit avec certains ie ... :(
- if (preg_match(',^[0-9]+#[a-z_0-9]+,',$id))
- $destinataires[$k] = intval($id);
- }
- return $destinataires;
- }
- /**
- * Fonction generique de verification des destinataires
- * lors de l'envoi d'un message ou de recommander
- * un destinataire peut etre un id_auteur numerique
- * ou une adresse mail valide, si l'options accepter_email est true
- *
- * @param array $destinataires
- * @param array $options
- * @return array
- */
- function messagerie_verifier_destinataires($destinataires,$options=array('accepter_email'=>true)){
- $erreurs = array();
- $destinataires = messagerie_nettoyer_destinataires($destinataires);
- foreach ($destinataires as $id){
- if (is_numeric($id)){
- if (!$id)
- $erreurs[] = _T('organiseur:erreur_destinataire_invalide',array('dest'=>$id));
- }
- else {
- if (!$options['accepter_email']
- OR !email_valide($id))
- $erreurs[] = _T('organiseur:erreur_destinataire_invalide',array('dest'=>$id));
- }
- }
- return $erreurs;
- }
- /**
- * Selectionner les destinataires en distinguant emails et id_auteur
- *
- * @param array $dests
- * @return array
- */
- function messagerie_destiner($dests){
- // separer les destinataires auteur des destinataires email
- $auteurs_dest = array();
- $email_dests = array();
- $dests = messagerie_nettoyer_destinataires($dests);
- foreach ($dests as $id){
- if (is_numeric($id))
- $auteurs_dest[] = $id;
- elseif (defined('_MESSAGERIE_EMAIL_GENERAL') AND $id!=_MESSAGERIE_EMAIL_GENERAL)
- $email_dests[] = $id;
- }
- if (count($email_dests)) {
- // retrouver les id des emails pour ceux qui sont en base
- $res = sql_select('id_auteur,email','spip_auteurs',sql_in('email', $email_dests));
- $auteurs_dest_found = array();
- while ($row = sql_fetch($res)){
- $auteurs_dest_found[] = $row['id_auteur'];
- }
- $auteurs_dest = array_merge($auteurs_dest,$auteurs_dest_found);
- }
- return array($auteurs_dest,$email_dests);
- }
- /**
- * Diffuser un message par la messagerie interne
- *
- * @param int $id_message
- * @param array $auteurs_dest
- * @return bool|int
- */
- function messagerie_diffuser_message($id_message, $auteurs_dest=array()){
- $out = false;
- if ($id_message=intval($id_message)
- AND count($auteurs_dest)){
- include_spip('action/editer_liens');
- $out = objet_associer(array('auteur'=>$auteurs_dest),array('message'=>$id_message),array('vu'=>'non'));
- }
- return $out;
- }
- /**
- * Envoyer un message par mail pour les destinataires externes
- *
- * @param int $id_message
- * @param array $emails_dest
- * @return bool
- */
- function messagerie_mailer_message($id_message, $emails_dest=array()){
- if ($id_message=intval($id_message)
- AND count($emails_dest)) {
- if ($row = sql_fetsel('titre,texte,id_auteur','spip_messages','id_message='.intval($id_message))){
- $from = sql_getfetsel('email','spip_auteurs','id_auteur='.$row['id_auteur']);
- foreach($emails_dest as $email)
- job_queue_add(
- 'envoyer_mail',
- 'messagerie mail',
- array($email,$row['titre'],array('texte'=>$row['texte'],'from'=>$from)),
- 'inc/'
- );
- return true;
- }
- }
- return false;
- }
- /**
- * Marquer un message dans l'etat indique par $vu
- *
- * @param int $id_auteur
- * @param array $liste
- * @param string $vu
- * @return void
- */
- function messagerie_marquer_message($id_auteur,$liste,$vu){
- include_spip('action/editer_liens');
- if (!is_array($liste))
- $liste = array($liste);
- // completer les liens qui n'existent pas encore
- // ex : pour marquer lue une annonce, on ajoute le lien d'abord (n'existe pas)
- // puis on le marque 'oui'
- $liens = objet_trouver_liens(array('auteur'=>$id_auteur),array('message'=>$liste));
- $l = array();
- foreach($liens as $lien)
- $l[] = $lien['message'];
- objet_associer(array('auteur'=>$id_auteur),array('message'=>array_diff($liste,$l)),array('vu'=>$vu));
- // puis les marquer tous lus
- objet_qualifier_liens(array('auteur'=>$id_auteur),array('message'=>$liste),array('vu'=>$vu));
- include_spip('inc/invalideur');
- suivre_invalideur("message/".implode(',',$liste));
- }
- /**
- * Marquer un message comme lu
- *
- * @param int $id_auteur
- * @param array $liste_id_message
- */
- function messagerie_marquer_lus($id_auteur,$liste_id_message){messagerie_marquer_message($id_auteur,$liste_id_message,'oui');}
- /**
- * Marquer un message comme non lu
- *
- * @param int $id_auteur
- * @param array $liste_id_message
- */
- function messagerie_marquer_non_lus($id_auteur,$liste_id_message){messagerie_marquer_message($id_auteur,$liste_id_message,'non');}
- /**
- * Effacer un message recu
- *
- * @param int $id_auteur
- * @param array $liste_id_message
- */
- function messagerie_effacer_message_recu($id_auteur,$liste_id_message){messagerie_marquer_message($id_auteur,$liste_id_message,'poub');}
- ?>
|