Introduces email type alias_aux for emails in auxiliary domains.
authorStéphane Jacob <sj@m4x.org>
Fri, 4 Mar 2011 15:05:08 +0000 (16:05 +0100)
committerStéphane Jacob <sj@m4x.org>
Sun, 6 Mar 2011 19:07:31 +0000 (20:07 +0100)
Signed-off-by: Stéphane Jacob <sj@m4x.org>
classes/user.php
classes/xorgsession.php
include/validations/aliases.inc.php
modules/admin.php
modules/email.php
plugins/insert.getUserName.php
upgrade/1.1.0/01_new_mail_schema.sql
upgrade/1.1.0/02_new_mail_insertion.sql

index 1735ebf..8b4160b 100644 (file)
@@ -338,7 +338,7 @@ class User extends PlUser
                                  $this->id(), $profile->id());
     }
 
-    /** Fetch existing @alias_dom alias.
+    /** Fetch existing auxiliary alias.
      */
     public function emailAlias()
     {
@@ -349,7 +349,7 @@ class User extends PlUser
         return null;
     }
 
-    /** Fetch existing @alias_dom aliases.
+    /** Fetch existing auxiliary aliases.
      */
     public function emailAliases()
     {
@@ -357,9 +357,9 @@ class User extends PlUser
                                    FROM  email_source_account  AS s
                              INNER JOIN  email_virtual_domains AS m ON (s.domain = m.id)
                              INNER JOIN  email_virtual_domains AS d ON (d.aliasing = m.id)
-                                  WHERE  s.uid = {?} AND m.name = {?}
+                                  WHERE  s.uid = {?} AND s.type = \'alias_aux\'
                                ORDER BY  d.name',
-                                $this->id(), Platal::globals()->mail->alias_dom);
+                                $this->id());
     }
 
     /** Get all group aliases the user belongs to.
index 8578a61..d9ede7c 100644 (file)
@@ -145,10 +145,9 @@ class XorgSession extends PlSession
             $uname = Post::v('username');
             if (Post::s('domain') == "alias") {
                 $login = XDB::fetchOneCell('SELECT  uid
-                                              FROM  email_source_account  AS e
-                                        INNER JOIN  email_virtual_domains AS d ON (e.domain = d.id)
-                                             WHERE  e.email = {?} AND d.name = {?}',
-                                           $uname, Platal::globals()->mail->alias_dom);
+                                              FROM  email_source_account
+                                             WHERE  email = {?} AND type = \'alias_aux\'',
+                                           $uname);
                 $loginType = 'uid';
             } else if (Post::s('domain') == "ax") {
                 $login = $uname;
index 2cf9509..4dabe8d 100644 (file)
@@ -79,8 +79,6 @@ class AliasReq extends Validate
     // function commit() {{{2
     public function commit()
     {
-        global $globals;
-
         if ($this->user->hasProfile()) {
             XDB::execute('UPDATE  profiles
                              SET  alias_pub = {?}
@@ -89,17 +87,16 @@ class AliasReq extends Validate
         }
 
         if ($this->old) {
-            $success = XDB::execute('UPDATE  email_source_account AS s
-                                 INNER JOIN  email_virtual_domains AS d ON (s.domain = d.id)
-                                        SET  s.email = {?}
-                                      WHERE  s.uid = {?} AND d.name = {?}',
-                                    $this->alias, $this->user->id(), $globals->mail->alias_dom);
+            $success = XDB::execute('UPDATE  email_source_account
+                                        SET  email = {?}
+                                      WHERE  uid = {?} AND type = \'alias_aux\'',
+                                    $this->alias, $this->user->id());
         } else {
             $success = XDB::execute('INSERT INTO  email_source_account (email, uid, domain, type, flags)
-                                          SELECT  {?}, {?}, id, \'alias\', \'\'
+                                          SELECT  {?}, {?}, id, \'alias_aux\', \'\'
                                             FROM  email_virtual_domains
                                            WHERE  name = {?}',
-                                     $this->alias, $this->user->id(), $globals->mail->alias_dom);
+                                     $this->alias, $this->user->id(), Platal::globals()->mail->alias_dom);
         }
 
         return $success;
index c533a6c..5dc2859 100644 (file)
@@ -622,7 +622,7 @@ class AdminModule extends PLModule
                 }
             } elseif ($domain == $globals->mail->domain || $domain == $globals->mail->domain2) {
                 XDB::execute('INSERT INTO  email_source_account (email, uid, domain, type, flags)
-                                   SELECT  {?}, {?}, id, \'alias\', \'\'
+                                   SELECT  {?}, {?}, id, \'alias_aux\', \'\'
                                      FROM  email_virtual_domains
                                     WHERE  name = {?}',
                               $alias, $user->id(), $globals->mail->alias_dom);
@@ -709,12 +709,12 @@ class AdminModule extends PLModule
         $aliases = XDB::iterator("SELECT  CONCAT(s.email, '@', d.name) AS email, (s.type = 'forlife') AS forlife,
                                           (s.email REGEXP '\\\\.[0-9]{2}$') AS hundred_year,
                                           FIND_IN_SET('bestalias', s.flags) AS bestalias, s.expire,
-                                          (d.name = {?}) AS alias
+                                          (s.type = 'alias_aux') AS alias
                                     FROM  email_source_account  AS s
                               INNER JOIN  email_virtual_domains AS d ON (s.domain = d.id)
                                    WHERE  s.uid = {?}
                                 ORDER BY  !alias, s.email",
-                                 $globals->mail->alias_dom, $user->id());
+                                 $user->id());
         $page->assign('aliases', $aliases);
         $page->assign('account_types', XDB::iterator('SELECT * FROM account_types ORDER BY type'));
         $page->assign('skins', XDB::iterator('SELECT id, name FROM skins ORDER BY name'));
index e080e48..d59ee1d 100644 (file)
@@ -82,19 +82,18 @@ class EmailModule extends PLModule
         $aliases = XDB::iterator("SELECT  CONCAT(s.email, '@', d.name) AS email, (s.type = 'forlife') AS forlife,
                                           (s.email REGEXP '\\\\.[0-9]{2}$') AS hundred_year,
                                           FIND_IN_SET('bestalias', s.flags) AS bestalias, s.expire,
-                                          (d.name = {?}) AS alias
+                                          (s.type = 'alias_aux') AS alias
                                     FROM  email_source_account  AS s
                               INNER JOIN  email_virtual_domains AS d ON (s.domain = d.id)
                                    WHERE  s.uid = {?}
                                 ORDER BY  !alias, s.email",
-                                 $globals->mail->alias_dom, $user->id());
+                                 $user->id());
         $page->assign('aliases', $aliases);
 
-        $alias = XDB::fetchOneCell('SELECT  COUNT(s.email)
-                                      FROM  email_source_account  AS s
-                                INNER JOIN  email_virtual_domains AS d ON (s.domain = d.id)
-                                     WHERE  s.uid = {?} AND d.name = {?}',
-                                   $user->id(), $globals->mail->alias_dom);
+        $alias = XDB::fetchOneCell('SELECT  COUNT(email)
+                                      FROM  email_source_account
+                                     WHERE  uid = {?} AND type = \'alias_aux\'',
+                                   $user->id());
         $page->assign('alias', $alias);
 
 
@@ -120,22 +119,20 @@ class EmailModule extends PLModule
         if ($action == 'delete') {
             S::assert_xsrf_token();
 
-            XDB::execute('DELETE  s
-                            FROM  email_source_account  AS s
-                      INNER JOIN  email_virtual_domains AS d ON (s.domain = d.id)
-                           WHERE  s.uid = {?} AND d.name = {?}',
-                         $user->id(), $globals->mail->alias_dom);
+            XDB::execute('DELETE FROM  email_source_account
+                                WHERE  uid = {?} AND type = \'alias_aux\'',
+                         $user->id());
 
             require_once 'emails.inc.php';
             fix_bestalias($user);
         }
 
-        // Fetch existing @alias_dom aliases.
+        // Fetch existing auxiliary aliases.
         list($alias, $old_alias) = XDB::fetchOneRow('SELECT  CONCAT(s.email, \'@\', d.name), s.email
                                                        FROM  email_source_account  AS s
                                                  INNER JOIN  email_virtual_domains AS d ON (s.domain = d.id)
-                                                      WHERE  s.uid = {?} AND d.name = {?}',
-                                                    $user->id(), $globals->mail->alias_dom);
+                                                      WHERE  s.uid = {?} AND s.type = \'alias_aux\'',
+                                                    $user->id());
         $visibility = $user->hasProfile() && ($user->profile(true)->alias_pub == 'public');
         $page->assign('current', $alias);
         $page->assign('user', $user);
@@ -164,11 +161,10 @@ class EmailModule extends PLModule
                 return;
             } else {
                 // Checks if the alias has already been given.
-                $res = XDB::query('SELECT  COUNT(s.email)
-                                     FROM  email_source_account  AS s
-                               INNER JOIN  email_virtual_domains AS d ON (s.domain = d.id)
-                                    WHERE  s.email = {?} AND d.name = {?}',
-                                  $new_alias, $globals->mail->alias_dom);
+                $res = XDB::query('SELECT  COUNT(email)
+                                     FROM  email_source_account
+                                    WHERE  email = {?} AND type = \'alias_aux\'',
+                                  $new_alias);
                 if ($res->fetchOneCell() > 0) {
                     $page->trigError("L'alias $new_alias a déja été attribué. Tu ne peux donc pas l'obtenir.");
                     return;
@@ -284,8 +280,8 @@ class EmailModule extends PLModule
                          INNER JOIN  email_virtual_domains AS m ON (s.domain = m.id)
                          INNER JOIN  email_virtual_domains AS d ON (m.id = d.aliasing)
                               WHERE  s.uid = {?}
-                           ORDER BY  NOT (m.name = {?}), s.email, d.name',
-                            $user->id(), $globals->mail->alias_dom);
+                           ORDER BY  NOT(s.type = \'alias_aux\'), s.email, d.name',
+                            $user->id());
         $page->assign('alias', $alias->fetchAllAssoc());
 
         $page->assign('emails', $redirect->emails);
index db7c506..e8172fe 100644 (file)
@@ -21,8 +21,6 @@
 
 function smarty_insert_getUsername()
 {
-    global $globals;
-
     $id = Cookie::i('uid', -1);
     $id = S::v('uid', $id);
 
@@ -32,16 +30,14 @@ function smarty_insert_getUsername()
 
     if (Cookie::v('domain', 'login') != 'alias') {
         return XDB::fetchOneCell('SELECT  email
-                                    FROM  email_source_account  AS e
-                              INNER JOIN  email_virtual_domains AS d ON (e.domain = d.id)
-                                   WHERE  e.uid = {?} AND d.name = {?} AND FIND_IN_SET(\'bestalias\', e.flags)',
-                                 $id, $globals->mail->domain);
+                                    FROM  email_source_account
+                                   WHERE  uid = {?} AND type != \'alias_aux\' AND FIND_IN_SET(\'bestalias\', flags)',
+                                 $id);
     } else {
         return XDB::fetchOneCell('SELECT  email
-                                    FROM  email_source_account  AS e
-                              INNER JOIN  email_virtual_domains AS d ON (e.domain = d.id)
-                                   WHERE  e.uid = {?} AND d.name = {?}',
-                                 $id, $globals->mail->alias_dom);
+                                    FROM  email_source_account
+                                   WHERE  uid = {?} AND type = \'alias_aux\'',
+                                 $id);
     }
 
      return '';
index caca7d2..47bcb54 100644 (file)
@@ -19,7 +19,7 @@ CREATE TABLE email_source_account (
   email VARCHAR(255) NOT NULL,
   domain SMALLINT(3) UNSIGNED NOT NULL DEFAULT 1,
   uid INT(11) UNSIGNED NOT NULL,
-  type ENUM('forlife', 'alias') NOT NULL DEFAULT 'forlife',
+  type ENUM('forlife', 'alias', 'alias_aux') NOT NULL DEFAULT 'forlife',
   flags SET('bestalias', 'usage', 'marital') NOT NULL DEFAULT '',
   expire DATE DEFAULT NULL,
   PRIMARY KEY (email, domain),
index 2e6353f..5c63181 100644 (file)
@@ -46,7 +46,7 @@ INSERT INTO  email_source_account (uid, domain, email, type, flags, expire)
        FROM  aliases
       WHERE  type = 'a_vie' OR type = 'alias';
 INSERT INTO  email_source_account (uid, domain, email, type)
-     SELECT  a.uid, @m_domain_id, SUBSTRING_INDEX(v.alias, '@', 1), 'alias'
+     SELECT  a.uid, @m_domain_id, SUBSTRING_INDEX(v.alias, '@', 1), 'alias_aux'
        FROM  virtual          AS v
   LEFT JOIN  virtual_redirect AS vr ON (v.vid = vr.vid)
   LEFT JOIN  accounts         AS a  ON (a.hruid = LEFT(vr.redirect, LOCATE('@', vr.redirect) - 1))