[PLUGINS] +set de base
[lhc/web/www.git] / www / plugins / notifications2 / formulaires / abonner_notifications.php
1 <?php
2 /*
3 * Plugin Notifications
4 * (c) 2009-2012 SPIP
5 * Distribue sous licence GPL
6 *
7 */
8
9 if (!defined("_ECRIRE_INC_VERSION")) return;
10
11 /**
12 * Charger()
13 *
14 * @param string $email
15 * email dont on veut gerer les abonnements
16 * @param string $key
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
21 */
22 function formulaires_abonner_notifications_charger_dist($email, $key, $id_auteur=null){
23
24 list($email, $id_auteur) = notifications_email_auteur($email, $key, $id_auteur);
25
26 if (!$email AND !$id_auteur)
27 return "<p><strong>"._T('abonnernotifications:message_acces_interdit')."</strong><br />"._T('abonnernotifications:message_acces_interdit_explication')."</p>";
28
29 $valeurs = array(
30 "id_threads" => array(),
31 "_all_threads" => array(),
32 "_email" => $email,
33 "notification_email" => '',
34 );
35
36 // trouver tous les threads
37 $rows = sql_allfetsel("id_thread,notification","spip_forum",notifications_where_abo($email, $id_auteur));
38
39 if (!$rows)
40 return "<p>"._T('abonnernotifications:message_aucun_abonnement_a_modifier')."</p>";
41
42 $valeurs['_all_threads'] = array_map('reset',$rows);
43 $valeurs['_all_threads'] = array_unique($valeurs['_all_threads']);
44
45 foreach ($rows as $row){
46 if ($row['notification'])
47 $valeurs['id_threads'][] = $row['id_thread'];
48 }
49
50 return $valeurs;
51 }
52
53 /**
54 * Verifier()
55 *
56 * @param string $email
57 * email dont on veut gerer les abonnements
58 * @param string $key
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
63 */
64 function formulaires_abonner_notifications_verifier_dist($email, $key, $id_auteur=null){
65
66 $erreurs = array();
67
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');
74 }
75
76 return $erreurs;
77 }
78
79
80 /**
81 * Traiter()
82 *
83 * @param string $email
84 * email dont on veut gerer les abonnements
85 * @param string $key
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
90 */
91 function formulaires_abonner_notifications_traiter_dist($email, $key, $id_auteur=null){
92
93 $res = array();
94 list($email, $id_auteur) = notifications_email_auteur($email, $key, $id_auteur);
95
96 if (_request('modifabo')){
97
98
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');
111 }
112 elseif (_request('modifemail')){
113
114 }
115
116 // ne devrait jamais...
117 if (!$res)
118 $res = array('message_erreur' => 'Erreur');
119
120 return $res;
121 }
122
123
124
125 /**
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)
128 *
129 * @param string $email
130 * email dont on veut gerer les abonnements
131 * @param string $key
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
136 */
137 function notifications_email_auteur($email, $key, $id_auteur=null){
138 // si un email fourni, il doit etre signe par une cle valide
139 if ($email){
140 include_spip("inc/securiser_action");
141 if (!$key
142 OR !verifier_cle_action("abonner_notifications $email",$key))
143 return array('','');
144 }
145
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));
149 if ($id_auteur)
150 $id_auteur = array_map('reset',$id_auteur);
151 if (count($id_auteur)==1)
152 $id_auteur = reset($id_auteur);
153 }
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));
157 }
158
159 return array($email,$id_auteur);
160 }
161
162 /**
163 * Condition where pour retrouver tous les abonnements de l'email/id_auteur
164 * @param string $email
165 * @param int|null $id_auteur
166 * @return string
167 */
168 function notifications_where_abo($email, $id_auteur=null){
169
170 if (!$email AND !$id_auteur){
171 return "(0=1)"; // rien a chercher
172 }
173
174 $where = array();
175 if ($email)
176 $where[] = "(notification_email=".sql_quote($email)
177 ." OR (notification_email=".sql_quote('')." AND email_auteur=".sql_quote($email)."))";
178 if ($id_auteur)
179 $where[] = "(notification_email=".sql_quote('')." AND email_auteur=".sql_quote('')." AND id_auteur=".intval($id_auteur).")";
180
181 return implode(" OR ",$where);
182 }