array('quoi'=>$quoi,'id'=>$id,'options'=>$options))); if ($notification = charger_fonction($quoi,'notifications',true)) { spip_log("$notification($quoi,$id" .($options?",".serialize($options):"") .")",'notifications'); $notification($quoi, $id, $options); } } /** * Nettoyage des emails avant un envoi * on passe par reference pour la perf * * les emails liste par $eclure seront exclus de la liste * * @param array $emails * @param array $exclure */ function notifications_nettoyer_emails(&$emails, $exclure = array()){ // filtrer et unifier $emails = array_unique(array_filter(array_map('email_valide',array_map('trim', $emails)))); if ($exclure AND count($exclure)){ // nettoyer les exclusions d'abord notifications_nettoyer_emails($exclure); // faire un diff $emails = array_diff($emails,$exclure); } } /** * Envoyer un email de notification * Le sujet peut etre vide, dans ce cas il reprendra la premiere ligne non vide du texte * * @param array/string $emails * @param string $texte * @param string $sujet */ function notifications_envoyer_mails($emails,$texte,$sujet=""){ // rien a faire si pas de texte ! if (!strlen($texte)) return; // si on ne specifie qu'un email, le mettre dans un tableau if (!is_array($emails)) $emails = explode(',',$emails); notifications_nettoyer_emails($emails); // si le sujet est vide, extraire la premiere ligne du corps if (!strlen($sujet)){ // nettoyer un peu les retours chariots $texte = str_replace("\r\n", "\r", $texte); $texte = str_replace("\r", "\n", $texte); // decouper $texte = explode("\n",trim($texte)); // extraire la premiere ligne $sujet = array_shift($texte); $texte = trim(implode("\n",$texte)); } $envoyer_mail = charger_fonction('envoyer_mail','inc'); foreach($emails as $email){ // passer dans un pipeline qui permet un ajout eventuel // (url de suivi des notifications par exemple) $envoi = pipeline('notifications_envoyer_mails',array('email'=>$email,'sujet'=>$sujet,'texte'=>$texte)); $email = $envoi['email']; $sujet = $envoi['sujet']; $texte = $envoi['texte']; if (function_exists('job_queue_add')) job_queue_add('envoyer_mail', ">$email : $sujet", array($email, $sujet, $texte), 'inc/'); else $envoyer_mail($email, $sujet, $texte); } } /** * Notifier un evenement sur un article * recupere le fond designe dans $modele, * prend la premiere ligne comme sujet * et l'interprete pour envoyer l'email * * @param int $id_article * @param string $modele */ function email_notification_article($id_article, $modele) { $envoyer_mail = charger_fonction('envoyer_mail','inc'); // pour nettoyer_titre_email return recuperer_fond($modele,array('id_article'=>$id_article)); } // Compatibilite, ne plus utiliser // http://doc.spip.org/@notifier_publication_article function notifier_publication_article($id_article) { if ($GLOBALS['meta']["suivi_edito"] == "oui") { $adresse_suivi = $GLOBALS['meta']["adresse_suivi"]; $texte = email_notification_article($id_article, "notifications/article_publie"); notifications_envoyer_mails($adresse_suivi, $texte); } } // Compatibilite, ne plus utiliser // http://doc.spip.org/@notifier_proposition_article function notifier_proposition_article($id_article) { if ($GLOBALS['meta']["suivi_edito"] == "oui") { $adresse_suivi = $GLOBALS['meta']["adresse_suivi"]; $texte = email_notification_article($id_article, "notifications/article_propose"); notifications_envoyer_mails($adresse_suivi, $texte); } } /** * Construitre l'email personalise de notification d'un forum * * @param array $t * @param string $email * @return string */ function email_notification_forum ($t, $email) { static $contexte = array(); if(!isset($contexte[$t['id_forum']])){ $url = ''; $id_forum = $t['id_forum']; if ($t['statut'] == 'prive') # forum prive { if ($t['id_article']) $url = generer_url_ecrire('articles', 'id_article='.$t['id_article']).'#id'.$id_forum; else if ($t['id_breve']) $url = generer_url_ecrire('breves_voir', 'id_breve='.$t['id_breve']).'#id'.$id_forum; else if ($t['id_syndic']) $url = generer_url_ecrire('sites', 'id_syndic='.$t['id_syndic']).'#id'.$id_forum; } else if ($t['statut'] == 'privrac') # forum general { $url = generer_url_ecrire('forum').'#id'.$id_forum; } else if ($t['statut'] == 'privadm') # forum des admins { $url = generer_url_ecrire('forum_admin').'#id'.$id_forum; } else if ($t['statut'] == 'publie') # forum publie { $url = generer_url_entite($id_forum, 'forum'); } else # forum modere, spam, poubelle direct .... { $url = generer_url_ecrire('controle_forum', "debut_id_forum=".$id_forum); } if (!$url) { spip_log("forum $id_forum sans referent",'notifications'); $url = './'; } if ($t['id_article']) { $titre = sql_getfetsel("titre", "spip_articles", "id_article=".sql_quote($t['id_article'])); } if ($t['id_message']) { $titre = sql_getfetsel("titre", "spip_messages", "id_message=".sql_quote($t['id_message'])); } $t['titre_source'] = $titre; $t['url'] = $url; // detecter les url des liens du forum // pour la moderation (permet de reperer les SPAMS avec des liens caches) $links = array(); foreach ($t as $champ) $links = $links + extraire_balises($champ,'a'); $links = extraire_attribut($links,'href'); $links = implode("\n",$links); $t['liens'] = $links; $contexte[$t['id_forum']] = $t; } $t = $contexte[$t['id_forum']]; // Rechercher eventuellement la langue du destinataire if (NULL !== ($l = sql_getfetsel('lang', 'spip_auteurs', "email=" . sql_quote($email)))) $l = lang_select($l); $parauteur = (strlen($t['auteur']) <= 2) ? '' : (" " ._T('forum_par_auteur', array( 'auteur' => $t['auteur']) ) . ($t['email_auteur'] ? ' <' . $t['email_auteur'] . '>' : '')); $titre = textebrut(typo($t['titre_source'])); $forum_poste_par = ($t['id_article'] ? _T('forum_poste_par', array( 'parauteur' => $parauteur, 'titre' => $titre)) : $parauteur . ' (' . $titre . ')'); $t['par_auteur'] = $forum_poste_par; $envoyer_mail = charger_fonction('envoyer_mail','inc'); // pour nettoyer_titre_email $corps = recuperer_fond("notifications/forum_poste",$t); if ($l) lang_select(); return $corps; } ?>