From 7e82b5458fe9ecb07a923daacc5319b07901a848 Mon Sep 17 00:00:00 2001 From: =?utf8?q?St=C3=A9phane=20Jacob?= Date: Fri, 1 Apr 2011 23:41:58 +0200 Subject: [PATCH] Not only users with accounts can be added to aliases. MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Signed-off-by: Stéphane Jacob --- include/emails.inc.php | 41 +++++++++++++++++++++++++------- include/validations/listes.inc.php | 3 +-- modules/xnetevents/xnetevents.inc.php | 44 ++++++++++++++++------------------- modules/xnetgrp.php | 7 +++--- modules/xnetlists.php | 19 +++++++-------- 5 files changed, 66 insertions(+), 48 deletions(-) diff --git a/include/emails.inc.php b/include/emails.inc.php index b83a5ea..74eb015 100644 --- a/include/emails.inc.php +++ b/include/emails.inc.php @@ -24,38 +24,61 @@ define('ERROR_INACTIVE_REDIRECTION', 2); define('ERROR_INVALID_EMAIL', 3); define('ERROR_LOOP_EMAIL', 4); -function add_to_list_alias(User $user, $local_part, $domain, $type = 'alias') +function format_email_alias($email) { - Platal::assert($user !== null, 'User should not be null.'); + if ($user = User::getSilent($email)) { + return $user->forlifeEmail(); + } + if (isvalid_email($email)) { + return $email; + } + return null; +} + +function add_to_list_alias($email, $local_part, $domain, $type = 'alias') +{ + $email = format_email_alias($email); + if (is_null($email)) { + return false; + } XDB::execute('INSERT IGNORE INTO email_virtual (email, domain, redirect, type) SELECT {?}, id, {?}, {?} FROM email_virtual_domains WHERE name = {?}', - $local_part, $user->forlifeEmail(), $type, $domain); + $local_part, $email, $type, $domain); + return true; } -function delete_from_list_alias(User $user, $local_part, $domain, $type = 'alias') +function delete_from_list_alias($email, $local_part, $domain, $type = 'alias') { - Platal::assert($user !== null, 'User should not be null.'); + $email = format_email_alias($email); + if (is_null($email)) { + return false; + } XDB::execute('DELETE v FROM email_virtual AS v INNER JOIN email_virtual_domains AS m ON (v.domain = m.id) INNER JOIN email_virtual_domains AS d ON (d.aliasing = m.id) WHERE v.email = {?} AND d.name = {?} AND v.redirect = {?} AND type = {?}', - $local_part, $domain, $user->forlifeEmail(), $type); + $local_part, $domain, $email, $type); + return true; } -function update_list_alias(User $user, $former_email, $local_part, $domain, $type = 'alias') +function update_list_alias($email, $former_email, $local_part, $domain, $type = 'alias') { - Platal::assert($user !== null, 'User should not be null.'); + $email = format_email_alias($email); + if (is_null($email)) { + return false; + } XDB::execute('UPDATE email_virtual AS v INNER JOIN email_virtual_domains AS d ON (v.domain = d.id) SET v.redirect = {?} WHERE v.redirect = {?} AND d.name = {?} AND v.email = {?} AND v.type = {?}', - $user->forlifeEmail(), $former_email, $domain, $local_part, $type); + $email, $former_email, $domain, $local_part, $type); + return true; } function list_alias_members($local_part, $domain) diff --git a/include/validations/listes.inc.php b/include/validations/listes.inc.php index 197d187..b5bcd15 100644 --- a/include/validations/listes.inc.php +++ b/include/validations/listes.inc.php @@ -131,8 +131,7 @@ class ListeReq extends Validate if ($this->asso == 'alias') { foreach ($this->members as $member) { - $user = User::get($member); - add_to_list_alias($user, $this->liste, $this->domain); + add_to_list_alias($member, $this->liste, $this->domain); } } else { $list = new MMList(S::user(), $this->domain); diff --git a/modules/xnetevents/xnetevents.inc.php b/modules/xnetevents/xnetevents.inc.php index dc17ac3..baeeb2b 100644 --- a/modules/xnetevents/xnetevents.inc.php +++ b/modules/xnetevents/xnetevents.inc.php @@ -184,39 +184,37 @@ function subscribe_lists_event($uid, $short_name, $participate, $paid, $payment return; } - $user = User::getSilentWithUID($uid); - /** If $payment is not null, we do not retrieve the value of $participate, * thus we do not alter participant and absent lists. */ if ($payment === true) { if ($paid > 0) { - delete_from_list_alias($user, $short_name . $globals->xnet->unpayed_list, $globals->xnet->evts_domain, 'event'); - add_to_list_alias($user, $short_name . $globals->xnet->payed_list, $globals->xnet->evts_domain, 'event'); + delete_from_list_alias($uid, $short_name . $globals->xnet->unpayed_list, $globals->xnet->evts_domain, 'event'); + add_to_list_alias($uid, $short_name . $globals->xnet->payed_list, $globals->xnet->evts_domain, 'event'); } } else { switch ($participate) { case -1: - delete_from_list_alias($user, $short_name . $globals->xnet->participant_list, $globals->xnet->evts_domain, 'event'); - delete_from_list_alias($user, $short_name . $globals->xnet->unpayed_list, $globals->xnet->evts_domain, 'event'); - delete_from_list_alias($user, $short_name . $globals->xnet->payed_list, $globals->xnet->evts_domain, 'event'); - add_to_list_alias($user, $short_name . $globals->xnet->absent_list, $globals->xnet->evts_domain, 'event'); + delete_from_list_alias($uid, $short_name . $globals->xnet->participant_list, $globals->xnet->evts_domain, 'event'); + delete_from_list_alias($uid, $short_name . $globals->xnet->unpayed_list, $globals->xnet->evts_domain, 'event'); + delete_from_list_alias($uid, $short_name . $globals->xnet->payed_list, $globals->xnet->evts_domain, 'event'); + add_to_list_alias($uid, $short_name . $globals->xnet->absent_list, $globals->xnet->evts_domain, 'event'); break; case 0: - delete_from_list_alias($user, $short_name . $globals->xnet->participant_list, $globals->xnet->evts_domain, 'event'); - delete_from_list_alias($user, $short_name . $globals->xnet->absent_list, $globals->xnet->evts_domain, 'event'); - delete_from_list_alias($user, $short_name . $globals->xnet->unpayed_list, $globals->xnet->evts_domain, 'event'); - delete_from_list_alias($user, $short_name . $globals->xnet->payed_list, $globals->xnet->evts_domain, 'event'); + delete_from_list_alias($uid, $short_name . $globals->xnet->participant_list, $globals->xnet->evts_domain, 'event'); + delete_from_list_alias($uid, $short_name . $globals->xnet->absent_list, $globals->xnet->evts_domain, 'event'); + delete_from_list_alias($uid, $short_name . $globals->xnet->unpayed_list, $globals->xnet->evts_domain, 'event'); + delete_from_list_alias($uid, $short_name . $globals->xnet->payed_list, $globals->xnet->evts_domain, 'event'); break; case 1: - add_to_list_alias($user, $short_name . $globals->xnet->participant_list, $globals->xnet->evts_domain, 'event'); - delete_from_list_alias($user, $short_name . $globals->xnet->absent_list, $globals->xnet->evts_domain, 'event'); + add_to_list_alias($uid, $short_name . $globals->xnet->participant_list, $globals->xnet->evts_domain, 'event'); + delete_from_list_alias($uid, $short_name . $globals->xnet->absent_list, $globals->xnet->evts_domain, 'event'); if ($paid > 0) { - delete_from_list_alias($user, $short_name . $globals->xnet->unpayed_list, $globals->xnet->evts_domain, 'event'); - add_to_list_alias($user, $short_name . $globals->xnet->payed_list, $globals->xnet->evts_domain, 'event'); + delete_from_list_alias($uid, $short_name . $globals->xnet->unpayed_list, $globals->xnet->evts_domain, 'event'); + add_to_list_alias($uid, $short_name . $globals->xnet->payed_list, $globals->xnet->evts_domain, 'event'); } else { - add_to_list_alias($user, $short_name . $globals->xnet->unpayed_list, $globals->xnet->evts_domain, 'event'); - delete_from_list_alias($user, $short_name . $globals->xnet->payed_list, $globals->xnet->evts_domain, 'event'); + add_to_list_alias($uid, $short_name . $globals->xnet->unpayed_list, $globals->xnet->evts_domain, 'event'); + delete_from_list_alias($uid, $short_name . $globals->xnet->payed_list, $globals->xnet->evts_domain, 'event'); } break; } @@ -289,9 +287,8 @@ function event_change_shortname($page, $eid, $old, $new) FROM group_event_participants WHERE eid = {?} AND ' . $where[$suffix], $eid); - $users = User::getBulkUsersWithUIDs($uids, null, null, false); - foreach ($users as $user) { - add_to_list_alias($user, $new . $suffix, $globals->xnet->evts_domain, 'event'); + foreach ($uids as $uid) { + add_to_list_alias($uid, $new . $suffix, $globals->xnet->evts_domain, 'event'); } } $uids = XDB::fetchColumn('SELECT m.uid @@ -299,9 +296,8 @@ function event_change_shortname($page, $eid, $old, $new) LEFT JOIN group_event_participants AS e ON (e.uid = m.uid AND e.eid = {?}) WHERE m.asso_id = {?} AND e.uid IS NULL', $eid, $globals->asso('id')); - $users = User::getBulkUsersWithUIDs($uids, null, null, false); - foreach ($users as $user) { - add_to_list_alias($user, $new . $globals->xnet->absent_list, $globals->xnet->evts_domain, 'event'); + foreach ($uids as $uid) { + add_to_list_alias($uid, $new . $globals->xnet->absent_list, $globals->xnet->evts_domain, 'event'); } return $new; diff --git a/modules/xnetgrp.php b/modules/xnetgrp.php index 51917e8..90a905f 100644 --- a/modules/xnetgrp.php +++ b/modules/xnetgrp.php @@ -1087,16 +1087,17 @@ class XnetGrpModule extends PLModule foreach (Env::v('ml3', array()) as $ml => $state) { require_once 'emails.inc.php'; $ask = !empty($_REQUEST['ml4'][$ml]); + list($local_part, ) = explode('@', $ml); if($state == $ask) { if ($state && $email_changed) { - update_list_alias($user, $from_email, $ml, $globals->asso('mail_domain')); + update_list_alias($user->id(), $from_email, $local_part, $globals->asso('mail_domain')); $page->trigSuccess("L'abonnement de {$user->fullName()} à $ml a été mis à jour."); } } else if($ask) { - add_to_list_alias($user, $ml, $globals->asso('mail_domain')); + add_to_list_alias($user->id(), $local_part, $globals->asso('mail_domain')); $page->trigSuccess("{$user->fullName()} a été abonné à $ml."); } else { - delete_from_list_alias($user, $ml, $globals->asso('mail_domain')); + delete_from_list_alias($user->id(), $local_part, $globals->asso('mail_domain')); $page->trigSuccess("{$user->fullName()} a été désabonné de $ml."); } } diff --git a/modules/xnetlists.php b/modules/xnetlists.php index 83349b3..c7bbf25 100644 --- a/modules/xnetlists.php +++ b/modules/xnetlists.php @@ -223,22 +223,21 @@ class XnetListsModule extends ListsModule if (Env::has('add_member')) { S::assert_xsrf_token(); - $email = Env::t('add_member'); - $user = User::getSilent($email); - if ($user) { - add_to_list_alias($user, $local_part, $domain); - $page->trigSuccess($email . ' ajouté.'); + if (add_to_list_alias(Env::t('add_member'), $local_part, $domain)) { + $page->trigSuccess('Ajout réussit.'); } else { - $page->trigError($email . " n'existe pas."); + $page->trigError('Ajout infructueux.'); } } if (Env::has('del_member')) { S::assert_xsrf_token(); - $user = User::getSilent(Env::t('del_member')); - delete_from_list_alias($user, $local_part, $domain); - $page->trigSuccess($user->fullName() . ' supprimé.'); + if (delete_from_list_alias(Env::t('del_member'), $local_part, $domain)) { + $page->trigSuccess('Suppression réussie.'); + } else { + $page->trigError('Suppression infructueuse.'); + } } $page->assign('members', list_alias_members($local_part, $domain)); @@ -276,7 +275,7 @@ class XnetListsModule extends ListsModule return; } - add_to_list_alias(S::user(), $list, $globals->asso('mail_domain')); + add_to_list_alias(S::uid(), $list, $globals->asso('mail_domain')); pl_redirect('alias/admin/' . $list . '@' . $globals->asso('mail_domain')); } -- 2.1.4