+// class EmailStorage {{{1
+// Implementation of Email for email storage backends from Polytechnique.org.
+class EmailStorage extends Email
+{
+ // Shortname to realname mapping for known mail storage backends.
+ private $display_names = array(
+ 'imap' => 'Accès de secours aux emails (IMAP)',
+ 'googleapps' => 'Compte Google Apps',
+ );
+
+ // Retrieves the current list of actives storages.
+ private function get_storages()
+ {
+ $res = XDB::query("SELECT mail_storage
+ FROM auth_user_md5
+ WHERE user_id = {?}", $this->uid);
+ return new FlagSet($res->fetchOneCell());
+ }
+
+ // Updates the list of active storages.
+ private function set_storages($storages)
+ {
+ XDB::execute("UPDATE auth_user_md5
+ SET mail_storage = {?}
+ WHERE user_id = {?}", $storages->flags(), $this->uid);
+ }
+
+ // Returns the list of allowed storages for the @p user.
+ static public function get_allowed_storages($uid)
+ {
+ global $globals;
+ $storages = array();
+
+ // Google Apps storage is available for users with valid Google Apps account.
+ require_once 'googleapps.inc.php';
+ if ($globals->mailstorage->googleapps_domain &&
+ GoogleAppsAccount::account_status($uid) == 'active') {
+ $storages[] = 'googleapps';
+ }
+
+ // IMAP storage is always visible to administrators, and is allowed for
+ // everyone when the service is marked as 'active'.
+ if ($globals->mailstorage->imap_active || S::has_perms()) {
+ $storages[] = 'imap';
+ }
+
+ return $storages;
+ }
+
+
+ public function __construct($uid, $name)
+ {
+ $this->uid = $uid;
+ $this->email = $name;
+ $this->display_email = (isset($this->display_names[$name]) ? $this->display_names[$name] : $name);
+
+ $storages = $this->get_storages();
+ $this->sufficient = ($name == 'googleapps');
+ $this->active = $storages->hasFlag($name);
+ $this->broken = false;
+ $this->disabled = false;
+ $this->rewrite = '';
+ $this->panne = $this->last = $this->panne_level = 0;
+ }
+
+ public function activate()
+ {
+ if (!$this->active) {
+ $storages = $this->get_storages();
+ $storages->addFlag($this->email);
+ $this->set_storages($storages);
+ $this->active = true;
+ }
+ }
+
+ public function deactivate()
+ {
+ if ($this->active) {
+ $storages = $this->get_storages();
+ $storages->rmFlag($this->email);
+ $this->set_storages($storages);
+ $this->active = false;
+ }
+
+ }
+
+ // Source rewrite can't be enabled for email storage addresses.
+ public function set_rewrite($rewrite) {}