Updates MLs on email updates on xnet. Updates aliases email updates on
authorStéphane Jacob <sj@m4x.org>
Wed, 6 Apr 2011 21:08:46 +0000 (23:08 +0200)
committerStéphane Jacob <sj@m4x.org>
Thu, 7 Apr 2011 12:33:09 +0000 (14:33 +0200)
xnet and admin page.

Signed-off-by: Stéphane Jacob <sj@m4x.org>
include/emails.inc.php
modules/admin.php
modules/xnet.php
modules/xnetgrp.php

index b2ddb4b..19c172e 100644 (file)
@@ -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)
index f63a6e2..a8e62eb 100644 (file)
@@ -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');
index dcb6d61..880d404 100644 (file)
@@ -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.');
index 90a905f..25871a8 100644 (file)
@@ -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.');
             }