5 * Distribue sous licence GPL
9 if (!defined("_ECRIRE_INC_VERSION")) return;
14 * @param string $email
15 * email dont on veut gerer les abonnements
17 * cle de signature de l'email
18 * @param null $id_auteur
19 * id_auteur dont on veut gerer les abonnements (si pas d'email fourni)
20 * @return array|string
22 function formulaires_abonner_notifications_charger_dist($email, $key, $id_auteur=null){
24 list($email, $id_auteur) = notifications_email_auteur($email, $key, $id_auteur);
26 if (!$email AND !$id_auteur)
27 return "<p><strong>"._T('abonnernotifications:message_acces_interdit')."</strong><br />"._T('abonnernotifications:message_acces_interdit_explication')."</p>";
30 "id_threads" => array(),
31 "_all_threads" => array(),
33 "notification_email" => '',
36 // trouver tous les threads
37 $rows = sql_allfetsel("id_thread,notification","spip_forum",notifications_where_abo($email, $id_auteur));
40 return "<p>"._T('abonnernotifications:message_aucun_abonnement_a_modifier')."</p>";
42 $valeurs['_all_threads'] = array_map('reset',$rows);
43 $valeurs['_all_threads'] = array_unique($valeurs['_all_threads']);
45 foreach ($rows as $row){
46 if ($row['notification'])
47 $valeurs['id_threads'][] = $row['id_thread'];
56 * @param string $email
57 * email dont on veut gerer les abonnements
59 * cle de signature de l'email
60 * @param null $id_auteur
61 * id_auteur dont on veut gerer les abonnements (si pas d'email fourni)
62 * @return array|string
64 function formulaires_abonner_notifications_verifier_dist($email, $key, $id_auteur=null){
68 if (_request('modifemail')){
69 include_spip("inc/filtres");
70 if (!$email = _request('notification_email'))
71 $erreurs['notification_email'] = _T('info_obligatoire');
72 elseif (!email_valide($email))
73 $erreurs['notification_email'] = _T('form_prop_indiquer_email');
83 * @param string $email
84 * email dont on veut gerer les abonnements
86 * cle de signature de l'email
87 * @param null $id_auteur
88 * id_auteur dont on veut gerer les abonnements (si pas d'email fourni)
89 * @return array|string
91 function formulaires_abonner_notifications_traiter_dist($email, $key, $id_auteur=null){
94 list($email, $id_auteur) = notifications_email_auteur($email, $key, $id_auteur);
96 if (_request('modifabo')){
99 $id_threads = _request('id_threads');
100 if (!is_array($id_threads))
101 $id_threads = array();
102 $id_threads = array_map('intval',$id_threads);
103 $where_abo = notifications_where_abo($email, $id_auteur);
104 // desabonner ceux qui ne sont pas coches
105 sql_updateq("spip_forum",array('notification'=>0),"notification=1 AND $where_abo AND ".sql_in('id_thread',$id_threads,"NOT"));
106 // abonner ceux qui sont coches
107 sql_updateq("spip_forum",array('notification'=>1),"notification=0 AND $where_abo AND ".sql_in('id_thread',$id_threads));
108 $res = array("message_ok"=>_T('abonnernotifications:message_abonnements_modifies'));
109 // vider la saisie pour provoquer l'affichage de ce qui est en base
110 set_request('id_threads');
112 elseif (_request('modifemail')){
116 // ne devrait jamais...
118 $res = array('message_erreur' => 'Erreur');
126 * Verifier la signature de l'email
127 * et retrouver l'id_auteur correspondant si possible (ou retrouver l'email de l'id_auteur si possible)
129 * @param string $email
130 * email dont on veut gerer les abonnements
132 * cle de signature de l'email
133 * @param null $id_auteur
134 * id_auteur dont on veut gerer les abonnements (si pas d'email fourni)
135 * @return array|string
137 function notifications_email_auteur($email, $key, $id_auteur=null){
138 // si un email fourni, il doit etre signe par une cle valide
140 include_spip("inc/securiser_action");
142 OR !verifier_cle_action("abonner_notifications $email",$key))
146 // retrouver l'id_auteur correspondant a ce mail
147 if ($email AND !$id_auteur){
148 $id_auteur = sql_allfetsel("id_auteur","spip_auteurs","email=".sql_quote($email));
150 $id_auteur = array_map('reset',$id_auteur);
151 if (count($id_auteur)==1)
152 $id_auteur = reset($id_auteur);
154 // si pas d'email mais un id_auteur, prendre l'email de l'auteur
155 if (!$email AND $id_auteur){
156 $email = sql_getfetsel("email","spip_auteurs","id_auteur=".intval($id_auteur));
159 return array($email,$id_auteur);
163 * Condition where pour retrouver tous les abonnements de l'email/id_auteur
164 * @param string $email
165 * @param int|null $id_auteur
168 function notifications_where_abo($email, $id_auteur=null){
170 if (!$email AND !$id_auteur){
171 return "(0=1)"; // rien a chercher
176 $where[] = "(notification_email=".sql_quote($email)
177 ." OR (notification_email=".sql_quote('')." AND email_auteur=".sql_quote($email)."))";
179 $where[] = "(notification_email=".sql_quote('')." AND email_auteur=".sql_quote('')." AND id_auteur=".intval($id_auteur).")";
181 return implode(" OR ",$where);