From ca6980dc93884243957e9582f6a25797a746ddbb Mon Sep 17 00:00:00 2001 From: =?utf8?q?St=C3=A9phane=20Jacob?= Date: Wed, 6 Apr 2011 23:08:46 +0200 Subject: [PATCH] Updates MLs on email updates on xnet. Updates aliases email updates on xnet and admin page. MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Signed-off-by: Stéphane Jacob --- include/emails.inc.php | 18 ++++++++++++++++++ modules/admin.php | 5 +++-- modules/xnet.php | 6 ++++++ modules/xnetgrp.php | 6 ++++++ 4 files changed, 33 insertions(+), 2 deletions(-) diff --git a/include/emails.inc.php b/include/emails.inc.php index b2ddb4b..19c172e 100644 --- a/include/emails.inc.php +++ b/include/emails.inc.php @@ -24,6 +24,15 @@ define('ERROR_INACTIVE_REDIRECTION', 2); define('ERROR_INVALID_EMAIL', 3); define('ERROR_LOOP_EMAIL', 4); +// 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(!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)) { @@ -81,6 +90,15 @@ function update_list_alias($email, $former_email, $local_part, $domain, $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) { $emails = XDB::fetchColumn('SELECT DISTINCT(redirect) diff --git a/modules/admin.php b/modules/admin.php index f63a6e2..a8e62eb 100644 --- a/modules/admin.php +++ b/modules/admin.php @@ -444,6 +444,7 @@ class AdminModule extends PLModule } // Account Form {{{ + require_once 'emails.inc.php'; $to_update = array(); if (Post::has('disable_weak_access')) { $to_update['weak_password'] = null; @@ -504,9 +505,10 @@ class AdminModule extends PLModule if (Post::t('comment') != $user->comment) { $to_update['comment'] = Post::blank('comment') ? null : Post::t('comment'); } - if (!$user->checkPerms(User::PERM_MAIL) && Post::t('email') != $user->forlifeEmail()) { + if (require_email_update($user, Post::t('email'))) { $to_update['email'] = Post::t('email'); $listClient->change_user_email($user->forlifeEmail(), Post::t('email')); + update_alias_user($user->forlifeEmail(), Post::t('email')); } } if (!empty($to_update)) { @@ -574,7 +576,6 @@ class AdminModule extends PLModule // }}} // Email forwards form {{{ - require_once("emails.inc.php"); $redirect = ($registered ? new Redirect($user) : null); if (Post::has('add_fwd')) { $email = Post::t('email'); diff --git a/modules/xnet.php b/modules/xnet.php index dcb6d61..880d404 100644 --- a/modules/xnet.php +++ b/modules/xnet.php @@ -402,6 +402,12 @@ Email envoyé à " . Post::t('login')); Post::t('full_name'), Post::t('directory_name'), Post::t('display_name'), (Post::t('sex') == 'male') ? 'male' : 'female', Post::t('email'), $user->id()); if (XDB::affectedRows()) { + require_once 'emails.inc.php'; + if (require_email_update($user, Post::t('email'))) { + $listClient = new MMList(S::user()); + $listClient->change_user_email($user->forlifeEmail(), Post::t('email')); + update_alias_user($user->forlifeEmail(), Post::t('email')); + } $user = User::getWithUID($user->id()); S::set('user', $user); $page->trigSuccess('Données mises à jour.'); diff --git a/modules/xnetgrp.php b/modules/xnetgrp.php index 90a905f..25871a8 100644 --- a/modules/xnetgrp.php +++ b/modules/xnetgrp.php @@ -993,6 +993,7 @@ class XnetGrpModule extends PLModule $mmlist = new MMList(S::user(), $globals->asso('mail_domain')); if (Post::has('change')) { + require_once 'emails.inc.php'; S::assert_xsrf_token(); // Convert user status to X @@ -1020,6 +1021,11 @@ class XnetGrpModule extends PLModule WHERE uid = {?}', Post::t('email'), $user->id()); } + if (require_email_update($user, Post::t('email'))) { + $listClient = new MMList(S::user()); + $listClient->change_user_email($user->forlifeEmail(), Post::t('email')); + update_alias_user($user->forlifeEmail(), Post::t('email')); + } if (XDB::affectedRows()) { $page->trigSuccess('Données de l\'utilisateur mises à jour.'); } -- 2.1.4