Not only users with accounts can be added to aliases.
authorStéphane Jacob <sj@m4x.org>
Fri, 1 Apr 2011 21:41:58 +0000 (23:41 +0200)
committerStéphane Jacob <sj@m4x.org>
Fri, 1 Apr 2011 23:27:55 +0000 (01:27 +0200)
Signed-off-by: Stéphane Jacob <sj@m4x.org>
include/emails.inc.php
include/validations/listes.inc.php
modules/xnetevents/xnetevents.inc.php
modules/xnetgrp.php
modules/xnetlists.php

index b83a5ea..74eb015 100644 (file)
@@ -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)
index 197d187..b5bcd15 100644 (file)
@@ -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);
index dc17ac3..baeeb2b 100644 (file)
@@ -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;
index 51917e8..90a905f 100644 (file)
@@ -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.");
                 }
             }
index 83349b3..c7bbf25 100644 (file)
@@ -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'));
     }