admin restreint de " . join(',', $hierarchie), 'notifications'); //les admins de la rub et de ses parents $result_email = sql_select( "auteurs.email,auteurs.id_auteur,lien.id_objet as id_rubrique", "spip_auteurs AS auteurs JOIN spip_auteurs_liens AS lien ON auteurs.id_auteur=lien.id_auteur ", "lien.objet='rubrique' AND ".sql_in('lien.id_objet',sql_quote($hierarchie))." AND auteurs.statut='0minirezo'"); while ($qui = sql_fetch($result_email)){ spip_log($options['statut'] . " article > admin restreint " . $qui['id_auteur'] . " de la rubrique" . $qui['id_rubrique'] . " prevenu", 'notifications'); $flux['data'][] = $qui['email']; } } } // notification d'article pour le passage de proposé à refusé if ($quoi=='instituerarticle' AND $GLOBALS['notifications']['prevenir_auteurs_articles_refus'] AND $options['statut']=='refuse' AND in_array($options['statut_ancien'], array('prop','publie')) // ligne a commenter si vous voulez prevenir de la publication ){ $id_article = $flux['args']['id']; include_spip('base/abstract_sql'); $t = sql_fetsel("id_rubrique", "spip_articles", "id_article=" . intval($id_article)); $id_rubrique = $t['id_rubrique']; if ($GLOBALS['notifications']['limiter_rubriques']){ $limites = $GLOBALS['notifications']['limiter_rubriques']; $limiter_rubriques = explode(",",$limites); } else { $limiter_rubriques = array($id_rubrique); } if (in_array($id_rubrique,$limiter_rubriques)) { while ($id_rubrique){ $hierarchie[] = $id_rubrique; $res = sql_fetsel("id_parent", "spip_rubriques", "id_rubrique=" . intval($id_rubrique)); if (!$res){ // rubrique inexistante $id_rubrique = 0; break; } $id_parent = $res['id_parent']; $id_rubrique = $id_parent; } spip_log("Refuse article > admin restreint de " . join(',', $hierarchie), 'notifications'); //les admins de la rub et de ses parents $result_email = sql_select( "auteurs.email,auteurs.id_auteur,lien.id_objet as id_rubrique", "spip_auteurs AS auteurs JOIN spip_auteurs_liens AS lien ON auteurs.id_auteur=lien.id_auteur ", "lien.objet='rubrique' AND ".sql_in('lien.id_objet',sql_quote($hierarchie))." AND auteurs.statut='0minirezo'"); while ($qui = sql_fetch($result_email)){ spip_log($options['statut'] . " article > admin restreint " . $qui['id_auteur'] . " de la rubrique" . $qui['id_rubrique'] . " prevenu", 'notifications'); $flux['data'][] = $qui['email']; } } } // publication d'article : prevenir les auteurs if ($quoi=='instituerarticle' AND $GLOBALS['notifications']['prevenir_auteurs_articles'] ){ $id_article = $flux['args']['id']; include_spip('base/abstract_sql'); $t = sql_fetsel("id_rubrique", "spip_articles", "id_article=" . intval($id_article)); $id_rubrique = $t['id_rubrique']; if ($GLOBALS['notifications']['limiter_rubriques']){ $limites = $GLOBALS['notifications']['limiter_rubriques']; $limiter_rubriques = explode(",",$limites); } else { $limiter_rubriques = array($id_rubrique); } if (in_array($id_rubrique,$limiter_rubriques)) { include_spip('base/abstract_sql'); // Qui va-t-on prevenir en plus ? $result_email = sql_select( array('auteurs.email', 'auteurs.id_auteur'), "spip_auteurs AS auteurs JOIN spip_auteurs_liens AS lien ON auteurs.id_auteur=lien.id_auteur", "lien.id_objet=".intval($id_article)." AND lien.objet='article'"); while ($qui = sql_fetch($result_email)){ $flux['data'][] = $qui['email']; spip_log($options['statut'] . " article > auteur " . $qui['id_auteur'] . " prevenu", 'notifications'); } } } //publication d'article : ne pas prévenir l'auteur s'il est le validateur if ($quoi == "instituerarticle" and $GLOBALS['notifications']['pas_prevenir_publieur']){ $publieur_email=$GLOBALS["visiteur_session"]["email"]; if(($key = array_search($publieur_email,$flux['data'])) !== false){ unset($flux['data'][$key]); } } // forum valide ou prive : prevenir les autres contributeurs du thread ou ceux qui ont déjà répondu à l'article if (($quoi=='forumprive' AND $GLOBALS['notifications']['thread_forum_prive']) OR ($quoi=='forumvalide' AND ($GLOBALS['notifications']['thread_forum'] OR $GLOBALS['notifications']['forum'] OR $GLOBALS['notifications']['forum_article'])) ){ $id_forum = $flux['args']['id']; if ($t = $options['forum'] OR $t = sql_fetsel("*", "spip_forum", "id_forum=" . intval($id_forum)) ){ // Tous les participants a ce *thread*, abonnes // on prend les emails parmi notification_email (prioritaire si rempli) email_auteur ou email de l'auteur qd id_auteur connu // note : on exclut les forums refusé ou marqué comme spam $s = sql_select("F.email_auteur, F.notification_email, A.email", "spip_forum AS F LEFT JOIN spip_auteurs AS A ON F.id_auteur=A.id_auteur", "notification=1 AND id_thread=" . intval($t['id_thread']) . " AND (email_auteur != '' OR notification_email != '' OR A.email IS NOT NULL) AND F.statut NOT IN ('off','spam')") ; // Eventuellement tout ceux qui ont répondu à cet article if ($GLOBALS['notifications']['forum_article']){ $s = sql_select("F.email_auteur, F.notification_email, A.email", "spip_forum AS F LEFT JOIN spip_auteurs AS A ON F.id_auteur=A.id_auteur", "notification=1 AND objet=".sql_quote($t['objet'])." AND id_objet=" . intval($t['id_objet']) . " AND (email_auteur != '' OR notification_email != '' OR A.email IS NOT NULL) AND F.statut NOT IN ('off','spam')"); } while ($r = sql_fetch($s)){ if ($r['notification_email']) $flux['data'][] = $r['notification_email']; elseif($r['email_auteur']) $flux['data'][] = $r['email_auteur']; elseif($r['email']) $flux['data'][] = $r['email']; } } } // Les moderateurs de forums public if ($quoi=='forumposte' AND $GLOBALS['notifications']['moderateurs_forum']){ foreach (explode(',', $GLOBALS['notifications']['moderateurs_forum']) as $m){ $flux['data'][] = $m; } } // noter les envois de ce forum pour ne pas doublonner if (in_array($quoi, array('forumposte', 'forumvalide', 'forumprive')) AND $id = $flux['args']['id'] ){ if (isset($sent[$id])){ $flux['data'] = array_diff($flux['data'], $sent[$id]); } else { $sent[$id] = array(); } $sent[$id] = array_merge($sent[$id], $flux['data']); } return $flux; } /** * Pipeline notifications_envoyer_mails * appele a chaque envoi de mails * permet de gerer les contributeurs : * - inscription auto si activee * - url de suivi des forums * * @param array $flux * @return array */ /* function notifications_notifications_envoyer_mails($flux){ if ($GLOBALS['notifications']['suivi']){ // ajouter un acces a la page de suivi $url = url_absolue(generer_url_public('suivi', 'email=' . $flux['email'])); $flux['texte'] .= "\n\n" . _L('Gerer mes abonnements : ') . $url; // ajouter les auteurs en base ? // ici ou dans la page de suivi lorsqu'ils essayent vraiment de gerer // leurs abonnements ? // $a = notifications_creer_auteur($email); } return $flux; } */ function notifications_url_suivi($email){ if (!$email) return ""; include_spip("inc/securiser_action"); $key = calculer_cle_action("abonner_notifications $email"); $url = url_absolue(generer_url_public('notifications', "email=$email&key=$key")); return $url; } /** * Regarder si l'auteur est dans la base de donnees, sinon l'ajouter * comme s'il avait demande a s'inscrire comme visiteur * Pour l'historique il faut retrouver le nom de la personne, * pour ca on va regarder dans les forums existants * Si c'est la personne connectee, c'est plus facile * * @param string $email * @return array|bool */ function notifications_creer_auteur($email){ include_spip('base/abstract_sql'); if (!$a = sql_fetsel('*', 'spip_auteurs', 'email=' . sql_quote($email))){ if ($GLOBALS['visiteur_session']['session_email']===$email AND isset($GLOBALS['visiteur_session']['session_nom']) ){ $nom = $GLOBALS['visiteur_session']['session_nom']; } else { if ($b = sql_fetsel('auteur', 'spip_forum', 'email_auteur=' . sql_quote($email) . ' AND auteur!=""', /* groupby */ '', /* orderby */ array('date_heure DESC'), /* limit */ '1') ){ $nom = $b['auteur']; } else { $nom = $email; } } // charger message_inscription() if ($traiter = charger_fonction('traiter', 'formulaires/inscription', true)){ // "pirater" les globals $_GET['nom_inscription'] = $nom; $_GET['email_inscription'] = $email; $a = $traiter('6forum', null); } if (!is_array($a)){ spip_log("erreur sur la creation d'auteur: $a", 'notifications'); next; } } // lui donner un cookie_oubli s'il n'en a pas deja un if (!isset($a['cookie_oubli'])){ include_spip('inc/acces'); # pour creer_uniqid $a['cookie_oubli'] = creer_uniqid(); sql_updateq('spip_auteurs', array('cookie_oubli' => $a['cookie_oubli']), 'id_auteur=' . $a['id_auteur'] ); } return $a; } /** * Pretraiter le mail/sujet quand il est au format html * pour la fonction notifications_envoyer_mails qui ne sait traiter que les mails html * * @param string $email * @param $texte_ou_html */ function notifications_envoyer_mails_texte_ou_html($email, $texte_ou_html){ $texte_ou_html = trim($texte_ou_html); // tester si le mail est deja en html if (substr($texte_ou_html,0,1)=="<" AND substr($texte_ou_html,-1,1)==">" AND stripos($texte_ou_html,"")!==false){ // dans ce cas on ruse un peu : extraire le sujet du title $sujet = ""; if (preg_match(",(.*),Uims",$texte_ou_html,$m)) $sujet = $m[1]; // et envoyer un content-type pour envoyer_mail return notifications_envoyer_mails($email, $texte_ou_html, $sujet, "","Content-Type: text/html\n"); } else // texte brut, on passe return notifications_envoyer_mails($email, $texte_ou_html); } /* TODO // Envoyer un message de bienvenue/connexion au posteur du forum, // dans le cas ou il ne s'est pas authentifie // Souci : ne pas notifier comme ca si on est deja present dans le thread // (eviter d'avoir deux notificaitons pour ce message qu'on a, dans 99,99% // des cas, poste nous-memes !) if (strlen(trim($t['email_auteur'])) AND email_valide($t['email_auteur']) AND !$GLOBALS['visiteur_session']['id_auteur']) { $msg = Notifications_jeuneposteur($t, $email); if ($t['email_auteur'] == 'fil@rezo.net') notifications_envoyer_mails($t['email_auteur'], $msg['body'],$msg['subject']) } */ /* // Creer un mail pour les forums envoyes par quelqu'un qui n'est pas authentifie // en lui souhaitant la bienvenue et avec un lien suivi&p= de connexion au site function Notifications_jeuneposteur($t, $email) { return array('test', 'coucou'); } */ ?>