4ef2277a3a5f59fd88f7fa9defca355c156b6f40
2 /********************************************************************************
3 * include/emails.inc.php : Gestion of the email Pool of the User
4 * ----------------------
6 * This file is part of the philter distribution
7 * Copyright: See COPYING files that comes with this distribution
8 ********************************************************************************/
10 /** sorting function to compare to Email objects.
11 * I wanted to use it as Email::cmp but the fonction uasort didn't seem to accept such a name as argument
12 * @param $m1 the first Email object
13 * @param $m2 the second Email object
14 * @return -1,0,1 whether $m1 <,==,> $m2
16 function email_cmp($m1,$m2) {
17 return strcmp($m1->email
,$m2->email
);
27 * @param $_email the email string
28 * @param $_flags the flags
30 function Email($_email, $_flags) {
31 $this->email
= $_email;
32 $this->flags
= $_flags;
35 /** checks if the given string is a valid email.
36 * @param $_string the string to check
37 * @return true if the string is a valid email, false else
39 function Check($_string) {
40 return preg_match("/^[\w\-.]+(\+[\w\-.]+)?@[\w\-.]+\.[a-zA-Z]{2,44}$/", $_string);
43 /** returns if the email is active or not.
44 * @return true if $this->flags contains active
46 function is_active() {
47 return (stristr($this->flags
, 'active')!==false
);
50 /** toggle the state of a flag.
51 * @param $_flag the flag to toggle
54 function toggle_flag($_flag) {
55 $flags = explode(",", $this->flags
);
56 $key = array_search($_flag,$flags);
62 $this->flags
= implode(",",$flags);
65 /** add the email in the database.
66 * @param $_uid the uid of the user
67 * @param $_mid the id of the mail into the user mail list
70 function commit($_uid,$_mid) {
71 mysql_query("REPLACE INTO emails "
72 ."SET uid='{$_uid}',mid='$_mid',email='{$this->email}',flags='{$this->flags}'");
83 * @param $_uid id of the user
85 function EmailPool($_uid) {
88 $this->emails
= array();
90 $sql = mysql_query("SELECT * FROM emails WHERE uid='$_uid' ORDER BY email");
91 while($res = mysql_fetch_assoc($sql)) {
92 $this->emails
[$res['mid']] = new Email($res['email'], $res['flags']);
96 /** create the part of the form for the mail pool.
97 * @return the string containing the form
100 $res = "<form id=\"emails\" action=\"{$_SERVER['REQUEST_URI']}\" method=\"post\">\n"
101 . "<table class=\"bicol\" cellpadding=\"1\" cellspacing=\"1\" width=\"95%\" align=\"center\">\n"
102 . "<tr><th>Email</th>\n"
103 . " <th>Active</th>\n"
104 . " <th> </th>\n"
109 foreach($this->emails
as $id => $email) {
110 $res .= "<tr class=\"".($pair?
"pair":"impair")."\">\n"
111 . "<td>".$email->email
."</td>\n"
112 . "<td align=\"center\" width=\"10%\">\n"
113 . " <input type=\"checkbox\" name=\"emails[$id][active]\""
114 . ($email->is_active() ?
" checked=\"checked\"" : "")." /></td>\n"
115 . "<td align=\"center\"><input type=\"button\" "
116 . "value=\"Del\" onclick=\"del_onclick($id)\" /></td>\n"
123 . " <input id=\"emailsDel\" type=\"hidden\" name=\"emails[del]\" value=\"-1\" />\n"
124 . " <input type=\"submit\" name=\"emails[apply]\" value=\"Apply changes\" />\n"
128 $val = 'your email ...';
130 $res .= "<form action=\"{$_SERVER['REQUEST_URI']}\" method=\"post\">\n"
131 . "<input type=\"text\" name=\"emails[new]\" size=\"50\" value='$val' "
132 . " onfocus=\"text_onfocus(this,'$val')\" onblur=\"text_onblur(this,'$val')\" />\n"
133 . "<input type=\"submit\" name=\"emails[add]\" value=\"Add\" />\n"
139 /** return the string containing the list of $this->emails in javascript.
140 * @return the JS code
144 foreach($this->emails
as $id=>$mail)
145 $res .= "mail_pool[$id] = '{$mail->email}';\n";
150 /** compute a new free id for a new mail.
151 * @return the new free id
153 function new_mail_id() {
155 while(array_key_exists($i,$this->emails
))
160 /** handle the data from the form
161 * @return true if all is ok, false and sets $philter->error() else
163 function handle_form() {
166 if(isset($_POST['emails']['add'])) { // add an email to the pool
167 if(Email
::Check($_POST['emails']['new'])) {
168 $new_mail = strtolower($_POST['emails']['new']);
170 // we check that the email is not already there
171 foreach($this->emails
as $id=>$key)
172 if($key->email
== $new_mail) {
173 $philter->set_error("$new_mail is already in the Email Pool");
177 // then we compute one free id, and we add it to the list
178 $mid = $this->new_mail_id();
179 $this->emails
[$mid] = new Email($new_mail, 'active');
180 $this->emails
[$mid]->commit($this->uid
, $mid);
181 uasort($this->emails
, "email_cmp");
183 $philter->set_error($_POST['emails']['new']." is not a valid email");
186 } elseif(isset($_POST['emails']['del']) && $_POST['emails']['del'] != -1) { // delete one email
187 $del_id = $_POST['emails']['del'];
188 // we compute a list of all actives emails
191 foreach($this->emails
as $id=>$mail) {
192 if($del_id!=$id && $mail->is_active()) {
198 if($allow && isset($this->emails
[$del_id])) {
199 list($count) = mysql_fetch_row(mysql_query("SELECT COUNT(*) FROM actions "
200 ."WHERE uid='{$this->uid}' AND pid='"
201 .FwdPlugin
::rtti()."' AND data='$del_id'"));
203 $philter->set_error("This email is still in use and can't be deleted !");
206 mysql_query("DELETE FROM emails WHERE uid='{$this->uid}' "
207 ."AND email='{$this->emails[$del_id]->email}'");
208 unset($this->emails
[$del_id]);
211 $philter->set_error("you must have at least one active email !");
214 } elseif(isset($_POST['emails']['apply'])) { // apply actives changes
217 foreach($this->emails
as $id=>$mail)
218 if(isset($_POST['emails'][$id]['active'])) {
224 $philter->set_error("you must have at least one active email !");
228 foreach($this->emails
as $id=>$key)
229 if(isset($_POST['emails'][$id]['active']) xor $this->emails
[$id]->is_active()) {
230 $this->emails
[$id]->toggle_flag('active');
231 $this->emails
[$id]->commit($this->uid
, $id);
238 /********************************************************************************
240 * vim: set expandtab shiftwidth=4 tabstop=4 softtabstop=4 textwidth=100:
241 ********************************************************************************/