Adapts user's administration to new mail chain.
authorStéphane Jacob <sj@m4x.org>
Mon, 21 Feb 2011 18:05:34 +0000 (19:05 +0100)
committerStéphane Jacob <sj@m4x.org>
Sun, 27 Feb 2011 22:19:01 +0000 (23:19 +0100)
Signed-off-by: Stéphane Jacob <sj@m4x.org>
classes/user.php
modules/admin.php
templates/admin/user.tpl

index 4c531ea..0407fd3 100644 (file)
@@ -99,7 +99,7 @@ class User extends PlUser
                               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.email = {?} AND d.name = {?}',
-                                 $email, $login);
+                                 $email, $domain);
         if ($res) {
             return $res;
         }
index 41fe1bb..ea0928b 100644 (file)
@@ -616,36 +616,50 @@ class AdminModule extends PLModule
             if ($domain == $globals->mail->alias_dom || $domain == $globals->mail->alias_dom2) {
                 $req = new AliasReq($user, $alias, 'Admin request', false);
                 if ($req->commit()) {
-                    $page->trigSuccess("Nouvel alias '$alias@$domain' attribué");
+                    $page->trigSuccess("Nouvel alias '$alias@$domain' attribué.");
                 } else {
-                    $page->trigError("Impossible d'ajouter l'alias '$alias@$domain', il est probablement déjà attribué");
+                    $page->trigError("Impossible d'ajouter l'alias '$alias@$domain', il est probablement déjà attribué.");
                 }
             } elseif ($domain == $globals->mail->domain || $domain == $globals->mail->domain2) {
-                $res = XDB::execute("INSERT INTO  aliases (uid, alias, type)
-                                          VALUES  ({?}, {?}, 'alias')",
-                                    $user->id(), $alias);
+                XDB::execute('INSERT INTO  email_source_account (email, uid, domain, type, flags)
+                                   SELECT  {?}, {?}, id, \'alias\', \'\'
+                                     FROM  email_virtual_domains
+                                    WHERE  name = {?}',
+                              $alias, $user->id(), $globals->mail->alias_dom);
                 $page->trigSuccess("Nouvel alias '$alias' ajouté");
             } else {
                 $page->trigError("Le domaine '$domain' n'est pas valide");
             }
         } else if (!Post::blank('del_alias')) {
-            XDB::execute("DELETE FROM  aliases
-                                WHERE  uid = {?} AND alias = {?} AND
-                                       type NOT IN ('a_vie', 'homonyme')",
-                         $user->id(), $val);
-            XDB::execute("UPDATE  emails
-                             SET  rewrite = ''
-                           WHERE  uid = {?} AND rewrite LIKE CONCAT({?}, '@%')",
-                         $user->id(), $val);
+            $delete_alias = Post::t('del_alias');
+            list($email, $domain) = explode('@', $delete_alias);
+            XDB::execute('DELETE  s
+                            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.email = {?} AND s.uid = {?} AND d.name = {?} AND type = \'alias\'',
+                          $email, $user->id(), $domain);
+            XDB::execute('UPDATE  email_redirect_account AS r
+                      INNER JOIN  email_virtual_domains  AS m ON (m.name = {?})
+                      INNER JOIN  email_virtual_domains  AS d ON (d.aliasing = m.id)
+                             SET  r.rewrite = \'\'
+                           WHERE  r.uid = {?} AND r.rewrite = CONCAT({?}, \'@\', d.name)',
+                         $domain, $user->id(), $email);
             fix_bestalias($user);
-            $page->trigSuccess("L'alias '$val' a été supprimé");
+            $page->trigSuccess("L'alias '$delete_alias' a été supprimé");
         } else if (!Post::blank('best')) {
-            XDB::execute("UPDATE  aliases
+            $best_alias = Post::t('best');
+            // First delete the bestalias flag from all this user's emails.
+            XDB::execute("UPDATE  email_source_account
                              SET  flags = TRIM(BOTH ',' FROM REPLACE(CONCAT(',', flags, ','), ',bestalias,', ','))
                            WHERE  uid = {?}", $user->id());
-            XDB::execute("UPDATE  aliases
-                             SET  flags = CONCAT_WS(',', IF(flags = '', NULL, flags), 'bestalias')
-                           WHERE  uid = {?} AND alias = {?}", $user->id(), $val);
+            // Then gives the bestalias flag to the given email.
+            list($email, $domain) = explode('@', $best_alias);
+            XDB::execute("UPDATE  email_source_account  AS s
+                      INNER JOIN  email_virtual_domains AS d ON (s.domain = d.id)
+                             SET  s.flags = CONCAT_WS(',', IF(s.flags = '', NULL, s.flags), 'bestalias')
+                           WHERE  s.uid = {?} AND s.email = {?} AND d.name = {?}", $user->id(), $email, $domain);
+
             // As having a non-null bestalias value is critical in
             // plat/al's code, we do an a posteriori check on the
             // validity of the bestalias.
@@ -692,11 +706,16 @@ class AdminModule extends PLModule
 
         // Display active aliases.
         $page->assign('virtuals', $user->emailGroupAliases());
-        $page->assign('aliases', XDB::iterator("SELECT  alias, type='a_vie' AS for_life,
-                                                        FIND_IN_SET('bestalias',flags) AS best, expire
-                                                  FROM  aliases
-                                                 WHERE  uid = {?} AND type != 'homonyme'
-                                              ORDER BY  type != 'a_vie'", $user->id()));
+        $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
+                                    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());
+        $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'));
         $page->assign('profiles', XDB::iterator('SELECT  p.pid, p.hrpid, FIND_IN_SET(\'owner\', ap.perms) AS owner
index 665b3be..dc8794d 100644 (file)
@@ -342,17 +342,17 @@ $(function() {
     {iterate from=$aliases item=a}
     <tr class="{cycle values="impair,pair"}">
       <td>
-        <input type="radio" name='best' {if $a.best}checked="checked"{/if} value='{$a.alias}' onclick="this.form.submit()" />
+        <input type="radio" name='best' {if $a.bestalias}checked="checked"{/if} value='{$a.email}' onclick="this.form.submit()" />
       </td>
       <td>
-        {if $a.for_life}<strong>{$a.alias}</strong>{else}{$a.alias}{/if}
+        {if $a.forlife}<strong>{$a.email}</strong>{elseif $a.alias}<em>{$a.email}</em>{else}{$a.email}{/if}
         {if $a.expire}<span class='erreur'>(expire le {$a.expire|date_format})</span>{/if}
       </td>
-      {if $a.for_life}
+      {if $a.forlife}
       <td>garanti à vie*</td>
       {else}
       <td class="action">
-        <a href="javascript:del_alias('{$a.alias}')">{icon name=cross}</a>
+        <a href="javascript:del_alias('{$a.email}')">{icon name=cross}</a>
       </td>
       {/if}
     </tr>
@@ -491,7 +491,7 @@ $(function() {
 <br />
 <table class="bicol">
   <tr>
-    <th>Virtual aliases auquel l'utilisateur appartient</th>
+    <th>Alias de groupe auquel l'utilisateur appartient</th>
   </tr>
   {foreach from=$virtuals item=virtual}
   <tr class="{cycle values="impair,pair"}">