#511: Migrate ML subscription when changing email of a non-X
authorx2003bruneau <x2003bruneau@839d8a87-29fc-0310-9880-83ba4fa771e5>
Sat, 4 Nov 2006 22:21:49 +0000 (22:21 +0000)
committerx2003bruneau <x2003bruneau@839d8a87-29fc-0310-9880-83ba4fa771e5>
Sat, 4 Nov 2006 22:21:49 +0000 (22:21 +0000)
git-svn-id: svn+ssh://murphy/home/svn/platal/trunk@1047 839d8a87-29fc-0310-9880-83ba4fa771e5

ChangeLog
bin/lists.rpc.py
modules/xnetgrp.php

index 1021b37..794318f 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -38,6 +38,9 @@ Bug/Wish:
         - #451: vCard are RFC compliant                                    -FRU
         - #502: Use 'alias' instead of 'aka' to specify the nickname       -FRU
 
+    * Xnet:
+        - #511: Migrate ML subscription when changing email of a non-X     -FRU
+
     * Xnet/Events:
         - #490: Events can be opened to non-members                        -FRU
         - #514: Improve visibility of open events                          -FRU
index 7f5a5f0..a804005 100755 (executable)
@@ -391,6 +391,23 @@ def get_owners(userdesc, perms, vhost, listname):
 # owners procedures [ admin.php ]
 #
 
+def replace_email(userdesc, perms, vhost, listname, from_email, to_email):
+    try:
+        mlist = MailList.MailList(vhost+VHOST_SEP+listname.lower(), lock=0)
+    except:
+        return 0
+    try:
+        if not is_admin_on(userdesc, perms, mlist):
+            return 0
+
+        mlist.Lock()
+        mlist.ApprovedChangeMemberAddress(from_email, to_email, 0)
+        mlist.Save()
+        mlist.Unlock()
+        return 1
+    except:
+        return 0
+
 def mass_subscribe(userdesc, perms, vhost, listname, users):
     try:
         mlist = MailList.MailList(vhost+VHOST_SEP+listname.lower(), lock=0)
@@ -946,6 +963,7 @@ server.register_function(get_members)
 server.register_function(get_members_limit)
 server.register_function(get_owners)
 # admin.php
+server.register_function(replace_email)
 server.register_function(mass_subscribe)
 server.register_function(mass_unsubscribe)
 server.register_function(add_owner)
index 2378958..de80da7 100644 (file)
@@ -694,6 +694,8 @@ class XnetGrpModule extends PLModule
                              $globals->asso('mail_domain'));
 
         if (Post::has('change')) {
+            $email_changed = ($user['origine'] != 'X' && $user['email'] != Post::v('email'));
+            $from_email = $user['email'];
             if ($user['origine'] != 'X') {
                 XDB::query('UPDATE groupex.membres
                                SET prenom={?}, nom={?}, email={?}, sexe={?}
@@ -720,7 +722,13 @@ class XnetGrpModule extends PLModule
 
             foreach (Env::v('ml1', array()) as $ml => $state) {
                 $ask = empty($_REQUEST['ml2'][$ml]) ? 0 : 2;
-                if ($ask == $state) continue;
+                if ($ask == $state) {
+                    if ($state) {
+                        $mmlist->replace_email($ml, $from_email, $user['email2']);
+                        $page->trig("L'abonnement de {$user['prenom']} {$user['nom']} à $ml@ a été mis à jour");
+                    }
+                    continue;
+                }
                 if ($state == '1') {
                     $page->trig("{$user['prenom']} {$user['nom']} a "
                                ."actuellement une demande d'inscription en "
@@ -729,7 +737,11 @@ class XnetGrpModule extends PLModule
                     $mmlist->mass_subscribe($ml, Array($user['email2']));
                     $page->trig("{$user['prenom']} {$user['nom']} a été abonné à $ml@");
                 } else {
-                    $mmlist->mass_unsubscribe($ml, Array($user['email2']));
+                    if ($email_changed) {
+                        $mmlist->mass_unsubscribe($ml, Array($from_email));
+                    } else {
+                        $mmlist->mass_unsubscribe($ml, Array($user['email2']));
+                    }
                     $page->trig("{$user['prenom']} {$user['nom']} a été désabonné de $ml@");
                 }
             }