From aab4661d8b58f90c7604024173e21c0fbb0d5383 Mon Sep 17 00:00:00 2001
From: Vincent Zanotti
Date: Fri, 22 Feb 2008 10:30:02 +0100
Subject: [PATCH] Adds the user interface for per-user activation/deactivation
of IMAP email backup.
Signed-off-by: Vincent Zanotti
---
include/emails.inc.php | 42 ++++++++++++++++++++++++++++++++++++++
modules/email.php | 24 ++++++++++++++++++++++
templates/emails/index.tpl | 20 ++++++++++++++++--
templates/emails/redirect.tpl | 30 +++++++++++++++++++++++++++
upgrade/0.9.16/03_mail_storage.sql | 4 ++++
5 files changed, 118 insertions(+), 2 deletions(-)
create mode 100644 upgrade/0.9.16/03_mail_storage.sql
diff --git a/include/emails.inc.php b/include/emails.inc.php
index f03f801..35b76d3 100644
--- a/include/emails.inc.php
+++ b/include/emails.inc.php
@@ -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:
?>
diff --git a/modules/email.php b/modules/email.php
index 708bd5b..e3f5e8e 100644
--- a/modules/email.php
+++ b/modules/email.php
@@ -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)
diff --git a/templates/emails/index.tpl b/templates/emails/index.tpl
index bdcb4b3..a5312c8 100644
--- a/templates/emails/index.tpl
+++ b/templates/emails/index.tpl
@@ -92,16 +92,32 @@ ton homonyme et toi-même ne disposeraient plus que des adresses de la forme pre
{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} :
{iterate from=$mails item=m}
- {$m.email}
{/iterate}
{/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} :
+
+ {/if}
{test_email}
Si tu souhaites modifier ce reroutage de ton courrier,
- il te suffit de te rendre ici !
+ il te suffit de te rendre ici !
diff --git a/templates/emails/redirect.tpl b/templates/emails/redirect.tpl
index df51b53..30b7e61 100644
--- a/templates/emails/redirect.tpl
+++ b/templates/emails/redirect.tpl
@@ -208,6 +208,36 @@
{/if}
+Tes comptes de stockage de courrier
+
+ 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.
+ Attention : il ne s'agit que d'un service de secours, dont la disponibilité n'est pas garantie.
+
+
+
+
{if $eleve}
Pour les Ãlèves (non encore diplômés)
diff --git a/upgrade/0.9.16/03_mail_storage.sql b/upgrade/0.9.16/03_mail_storage.sql
new file mode 100644
index 0000000..7739c95
--- /dev/null
+++ b/upgrade/0.9.16/03_mail_storage.sql
@@ -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:
--
2.1.4