Adds the user interface for per-user activation/deactivation of IMAP email backup.
authorVincent Zanotti <vincent.zanotti@polytechnique.org>
Fri, 22 Feb 2008 09:30:02 +0000 (10:30 +0100)
committerVincent Zanotti <vincent.zanotti@polytechnique.org>
Fri, 22 Feb 2008 09:30:02 +0000 (10:30 +0100)
Signed-off-by: Vincent Zanotti <vincent.zanotti@polytechnique.org>
include/emails.inc.php
modules/email.php
templates/emails/index.tpl
templates/emails/redirect.tpl
upgrade/0.9.16/03_mail_storage.sql [new file with mode: 0644]

index f03f801..35b76d3 100644 (file)
@@ -409,5 +409,47 @@ class Redirect
     }
 }
 
+// class MailStorage {{{1
+class MailStorage {
+    protected $uid;
+    protected $name;
+
+    public function __construct($_uid, $_name)
+    {
+        $this->uid = $_uid;
+        $this->name = $_name;
+    }
+
+    public function disable()
+    {
+        $res = XDB::query("SELECT  mail_storage
+                             FROM  auth_user_md5
+                            WHERE  user_id = {?}", $this->uid);
+        $storages = explode(',', $res->fetchOneCell());
+
+        if (in_array($this->name, $storages)) {
+            array_splice($storages, array_search($this->name, $storages), 1);
+            XDB::execute("UPDATE  auth_user_md5
+                             SET  mail_storage = {?}
+                           WHERE  user_id = {?}", implode(',', $storages), $this->uid);
+        }
+    }
+
+    public function enable()
+    {
+        XDB::execute("UPDATE  auth_user_md5
+                         SET  mail_storage = CONCAT_WS(',', IF(mail_storage = '', NULL, mail_storage), {?})
+                       WHERE  user_id = {?} AND
+                              FIND_IN_SET({?}, mail_storage) = 0", $this->name, $this->uid, $this->name);
+    }
+}
+
+class MailStorageIMAP extends MailStorage {
+    public function __construct($_uid)
+    {
+        parent::__construct($_uid, 'imap');
+    }
+}
+
 // vim:set et sw=4 sts=4 sws=4 foldmethod=marker enc=utf-8:
 ?>
index 708bd5b..e3f5e8e 100644 (file)
@@ -68,11 +68,18 @@ class EmailModule extends PLModule
     $homonyme = XDB::query("SELECT alias FROM aliases INNER JOIN homonymes ON (id = homonyme_id) WHERE user_id = {?} AND type = 'homonyme'", $uid);
     $page->assign('homonyme', $homonyme->fetchOneCell());
 
+        // Affichage des redirections de l'utilisateur.
         $sql = "SELECT email
                 FROM emails
                 WHERE uid = {?} AND FIND_IN_SET('active', flags)";
         $page->assign('mails', XDB::iterator($sql, $uid));
 
+        // Affichage des backends actifs de stockage des emails.
+        $sql = "SELECT  mail_storage
+                  FROM  auth_user_md5
+                 WHERE  user_id = {?}";
+        $storages = XDB::query($sql, $uid)->fetchOneCell();
+        $page->assign('storage', explode(',', $storages));
 
         // on regarde si l'utilisateur a un alias et si oui on l'affiche !
         $forlife = S::v('forlife');
@@ -224,6 +231,17 @@ class EmailModule extends PLModule
             $redirect->modify_one_email_redirect($email, $rewrite);
         }
 
+        if ($action == 'storage' && $email == 'imap') {
+            $storage = new MailStorageIMAP(S::v('uid'));
+            $subaction = @func_get_arg(3);
+            if ($subaction == 'active') {
+                $storage->enable();
+            }
+            if ($subaction == 'inactive') {
+                $storage->disable();
+            }
+        }
+
         if (Env::has('emailop')) {
             $actifs = Env::v('emails_actifs', Array());
             print_r(Env::v('emails_rewrite'));
@@ -258,6 +276,12 @@ class EmailModule extends PLModule
         
         $page->assign('alias', $res->fetchAllAssoc());
         $page->assign('emails',$redirect->emails);
+
+        $res = XDB::query(
+                "SELECT  mail_storage
+                   FROM  auth_user_md5
+                  WHERE  user_id = {?}", $uid);
+        $page->assign('storage', explode(',', $res->fetchOneCell()));
     }
 
     function handler_antispam(&$page, $statut_filtre = null)
index bdcb4b3..a5312c8 100644 (file)
@@ -92,16 +92,32 @@ ton homonyme et toi-même ne disposeraient plus que des adresses de la forme pre
       </p>
       {else}
       Actuellement, tout courrier électronique qui t'y est adressé, est envoyé
-      {if $mails->total() eq 1} à l'adresse {else} aux adresses {/if}
+      {if $mails->total() eq 1} à l'adresse{else} aux adresses{/if}&nbsp;:
       <ul>
         {iterate from=$mails item=m}
         <li><strong>{$m.email}</strong></li>
         {/iterate}
       </ul>
       {/if}
+      {if count($storage) neq 0}
+      Ton courrier est également stocké sur {if count($storage) eq 1}le compte suivant{else} les comptes suivants{/if}&nbsp;:
+      <ul>
+        {foreach from=$storage item=s}
+        {if in_array('googleapps', $storage)}
+        <li><a href="https://www.polytechnique.org/Xorg/GoogleApps">
+          <strong>Compte Google Apps / GMail de Polytechnique.org</strong>
+        </a></li>
+        {elseif in_array('imap', $storage)}
+        <li><a href="https://www.polytechnique.org/Xorg/IMAP">
+          <strong>Accès de secours aux emails (IMAP)</strong>
+        </a></li>
+        {/if}
+        {/foreach}
+      </ul>
+      {/if}
       {test_email}
       Si tu souhaites <strong>modifier ce reroutage de ton courrier,</strong>
-      <a href="emails/redirect">il te suffit de te rendre ici !</a>
+      <a href="emails/redirect">il te suffit de te rendre ici&nbsp;!</a>
     </td>
   </tr>
 </table>
index df51b53..30b7e61 100644 (file)
 </fieldset>
 {/if}
 
+<h1>Tes comptes de stockage de courrier</h1>
+<p>
+  Polytechnique.org te propose de conserver les mails que tu reçois, pendant une durée limitée (environ 30 jours).
+  Grâce à ce service, tu disposes d'une sauvegarde de tes mails en secours, au cas où, par exemple, tu effacerais
+  un mail par erreur.<br />
+  <strong>Attention :</strong> il ne s'agit que d'un service de secours, dont la disponibilité n'est pas garantie.
+</p>
+
+<table class="bicol" summary="Compte de stockage">
+  <tr>
+    <th colspan="2">Compte de stockage</th>
+  </tr>
+  <tr class="pair">
+    <td>
+      <a href="https://www.polytechnique.org/Xorg/IMAP">
+        <strong>Accès de secours aux emails (IMAP)</strong>
+      </a><br />Hébergé par Polytechnique.org
+    </td>
+    <td>
+      <form action="emails/redirect/storage/imap/{if in_array('imap', $storage)}inactive{else}active{/if}" method="post">
+        {if in_array('imap', $storage)}
+        <input type="submit" value="Désactiver" />
+        {else}
+        <input type="submit" value="Activer" />
+        {/if}
+      </form>
+    </td>
+  </tr>
+</table>
+
 {if $eleve}
 <h1>Pour les Élèves (non encore diplômés)</h1>
 <p>
diff --git a/upgrade/0.9.16/03_mail_storage.sql b/upgrade/0.9.16/03_mail_storage.sql
new file mode 100644 (file)
index 0000000..7739c95
--- /dev/null
@@ -0,0 +1,4 @@
+ALTER TABLE auth_user_md5 ADD COLUMN mail_storage SET('imap', 'googleapps') DEFAULT '' NOT NULL AFTER smtppass;
+UPDATE auth_user_md5 SET mail_storage = 'imap' WHERE mail_storage = '';
+
+# vim:set syntax=mysql: