Only notifies user about a broken redirection twice a month, fixes a few things.
[platal.git] / modules / email.php
index d59ee1d..d872eda 100644 (file)
@@ -67,24 +67,32 @@ class EmailModule extends PLModule
                            WHERE  uid = {?}", $user->id());
             // Then gives the bestalias flag to the given email.
             list($email, $domain) = explode('@', $email);
-            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);
+            XDB::execute("UPDATE  email_source_account
+                             SET  flags = CONCAT_WS(',', IF(flags = '', NULL, flags), 'bestalias')
+                           WHERE  uid = {?} AND email = {?}", $user->id(), $email);
+            XDB::execute('UPDATE  accounts              AS a
+                      INNER JOIN  email_virtual_domains AS d ON (d.name = {?})
+                             SET  a.best_domain = d.id
+                           WHERE  a.uid = {?}',
+                         $domain, $user->id());
 
             // 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.
             fix_bestalias($user);
+            // Then refetch the user to update its bestalias.
+            S::set('user', User::getWithUID(S::user()->id()));
         }
 
         // Fetch and display aliases.
         $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,
-                                          (s.type = 'alias_aux') AS alias
+                                          (s.email REGEXP '\\\\.[0-9]{2}$') AS hundred_year, s.expire,
+                                          (FIND_IN_SET('bestalias', s.flags) AND a.best_domain = d.id) AS bestalias,
+                                          ((s.type = 'alias_aux') AND d.aliasing = d.id) AS alias
                                     FROM  email_source_account  AS s
-                              INNER JOIN  email_virtual_domains AS d ON (s.domain = d.id)
+                              INNER JOIN  accounts              AS a ON (s.uid = a.uid)
+                              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 = {?}
                                 ORDER BY  !alias, s.email",
                                  $user->id());
@@ -103,6 +111,13 @@ class EmailModule extends PLModule
         // Display active redirections.
         $redirect = new Redirect($user);
         $page->assign('mails', $redirect->active_emails());
+
+        // User's mail domains.
+        $mail_domains = array($user->alternateEmailDomain());
+        $mail_domains[] = User::$sub_mail_domains['all'] . $globals->mail->domain;
+        $mail_domains[] = User::$sub_mail_domains['all'] . $globals->mail->domain2;
+        $page->assign('main_email_domain', $user->mainEmailDomain());
+        $page->assign('mail_domains', $mail_domains);
     }
 
     function handler_alias($page, $action = null, $value = null)
@@ -283,6 +298,7 @@ class EmailModule extends PLModule
                            ORDER BY  NOT(s.type = \'alias_aux\'), s.email, d.name',
                             $user->id());
         $page->assign('alias', $alias->fetchAllAssoc());
+        $page->assign('best_email', $user->bestEmail());
 
         $page->assign('emails', $redirect->emails);
 
@@ -643,11 +659,8 @@ class EmailModule extends PLModule
             S::assert_xsrf_token();
 
             $email = Post::t('email');
-            list(, $domain) = explode('@', $email);
-            $domain = strtolower($domain);
 
-            if ($domain == $globals->mail->alias_dom || $domain == $globals->mail->alias_dom2
-                || $domain == $globals->mail->domain || $domain == $globals->mail->domain2) {
+            if (!User::isForeignEmailAddress($email)) {
                 $page->assign('neuneu', true);
             } else {
                 $user = mark_broken_email($email);
@@ -820,9 +833,10 @@ class EmailModule extends PLModule
 
                 foreach ($broken_list as $email) {
                     if ($user = mark_broken_email($email, true)) {
-                        if ($user['nb_mails'] > 0) {
+                        if ($user['nb_mails'] > 0 && $user['notify']) {
                             $mail = new PlMailer('emails/broken.mail.tpl');
-                            $mail->addTo('"' . $user['full_name'] . '" <' . $user['alias'] . '@' . Platal::globals()->mail->domain . '>');
+                            $dest = User::getSilentWithUID($user['uid']);
+                            $mail->setTo($dest);
                             $mail->assign('user', $user);
                             $mail->assign('email', $email);
                             $mail->send();