X-Git-Url: http://git.polytechnique.org/?a=blobdiff_plain;f=include%2Femails.inc.php;h=19c172e20159f4ee1ea4fc9db3ddef5da9bfb328;hb=ca6980dc93884243957e9582f6a25797a746ddbb;hp=1e8a323f29ea1bcca16399451dab73d218e3d02c;hpb=d47dc66aaefe08eb4a8e65888dd499d85a6beb55;p=platal.git diff --git a/include/emails.inc.php b/include/emails.inc.php index 1e8a323..19c172e 100644 --- a/include/emails.inc.php +++ b/include/emails.inc.php @@ -24,38 +24,79 @@ 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') +// Checks if an email update is required in MLs and aliases. +// This occurs when the user don't have email permissions and her email has changed. +function require_email_update(User $user, $new_email) { - Platal::assert($user !== null, 'User should not be null.'); + Platal::assert(!is_null($user), 'User cannot be null.'); + + return !$user->checkPerms(User::PERM_MAIL) && $new_email != $user->forlifeEmail(); +} + +function format_email_alias($email) +{ + 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; +} + +// Updates an email in all aliases (groups and events). +function update_alias_user($former_email, $new_email) +{ + XDB::execute('UPDATE email_virtual + SET redirect = {?} + WHERE redirect = {?} AND (type = \'alias\' OR type = \'event\')', + $new_email, $former_email); } function list_alias_members($local_part, $domain) @@ -67,12 +108,20 @@ function list_alias_members($local_part, $domain) WHERE v.email = {?} AND d.name = {?} AND type = \'alias\'', $local_part, $domain); - $members = array(); + $users = array(); + $nonusers = array(); foreach ($emails as $email) { - $members[] = User::getSilent($email); + if ($user = User::getSilent($email)) { + $users[] = $user; + } else { + $nonusers[] = $email; + } } - return $members; + return array( + 'users' => $users, + 'nonusers' => $nonusers + ); } function delete_list_alias($local_part, $domain) @@ -116,8 +165,8 @@ function delete_list($local_part, $domain) $redirect = $domain . '_' . $local_part . '+'; foreach(array('post', 'owner', 'admin', 'bounces', 'unsubscribe') as $suffix) { - XDB::execute('DELETE email_virtual - WHERE redirect = {?} AND type = \'list\'', + XDB::execute('DELETE FROM email_virtual + WHERE redirect = {?} AND type = \'list\'', $redirect . $suffix . '@' . $globals->lists->redirect_domain); } } @@ -575,7 +624,8 @@ class Email // Google Apps storage is available for users with valid Google Apps account. require_once 'googleapps.inc.php'; - if ($globals->mailstorage->googleapps_domain && + if ($user->checkPerms('gapps') && + $globals->mailstorage->googleapps_domain && GoogleAppsAccount::account_status($user->id()) == 'active') { $storages[] = 'googleapps'; }