Merge remote branch 'origin/platal-0.10.2'
[platal.git] / include / validations / aliases.inc.php
index 9cd0b0b..3a692be 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 /***************************************************************************
- *  Copyright (C) 2003-2006 Polytechnique.org                              *
+ *  Copyright (C) 2003-2010 Polytechnique.org                              *
  *  http://opensource.polytechnique.org/                                   *
  *                                                                         *
  *  This program is free software; you can redistribute it and/or modify   *
@@ -25,24 +25,24 @@ class AliasReq extends Validate
 {
     // {{{ properties
 
-    var $alias;
-    var $raison;
-    var $unique = true;
+    public $alias;
+    public $raison;
+    public $unique = true;
 
-    var $old='';
-    var $public='private';
-    
-    var $rules = "Interdire ce qui peut nous servir (virus@, postmaster@, ...),
+    public $old='';
+    public $public='private';
+
+    public $rules = "Interdire ce qui peut nous servir (virus@, postmaster@&hellip;),
                   les alias vulgaires, et les prenom.nom (sauf si c'est pour l'utilisateur prenom.nom).
-                  Pas de contrainte pour les tirets ou les points, en revanche le souligné (_) est interdit";
+                  Pas de contrainte pour les tirets ou les points, en revanche le souligné (_) est interdit.";
 
     // }}}
     // {{{ constructor
 
-    function AliasReq ($_uid, $_alias, $_raison, $_public, $_stamp=0)
+    public function __construct(User &$_user, $_alias, $_raison, $_public, $_stamp=0)
     {
         global $globals;
-        $this->Validate($_uid, true, 'alias', $_stamp);
+        parent::__construct($_user, true, 'alias', $_stamp);
         $this->alias  = $_alias.'@'.$globals->mail->alias_dom;
         $this->raison = $_raison;
         $this->public = $_public;
@@ -51,30 +51,37 @@ class AliasReq extends Validate
                 SELECT  v.alias
                   FROM  virtual_redirect AS vr
             INNER JOIN  virtual          AS v  ON (v.vid=vr.vid AND v.alias LIKE '%@{$globals->mail->alias_dom}')
-                 WHERE  vr.redirect={?} OR vr.redirect={?}",
-                 "{$this->forlife}@{$globals->mail->domain}", "{$this->forlife}@{$globals->mail->domain2}");
+                 WHERE  vr.redirect = {?} OR vr.redirect = {?}",
+                $this->user->forlifeEmail(),
+                // TODO: remove this über-ugly hack. The issue is that you need
+                // to remove all @m4x.org addresses in virtual_redirect first.
+                $this->user->login() . '@' . $globals->mail->domain2);
         $this->old = $res->fetchOneCell();
-        if (empty($this->old)) { unset($this->old); }
+        if (empty($this->old)) {
+            unset($this->old);
+        }
     }
 
     // }}}
     // {{{ function get_request()
 
-    function get_request($uid)
+    static public function get_request($uid)
     {
-        return parent::get_request($uid,'alias');
+        return parent::get_typed_request($uid, 'alias');
     }
 
     // }}}
     // {{{ function formu()
 
-    function formu()
-    { return 'include/form.valid.aliases.tpl'; }
+    public function formu()
+    {
+        return 'include/form.valid.aliases.tpl';
+    }
 
     // }}}
     // {{{ function _mail_subj
 
-    function _mail_subj()
+    protected function _mail_subj()
     {
         return "[Polytechnique.org/MELIX] Demande de l'alias {$this->alias}";
     }
@@ -82,31 +89,47 @@ class AliasReq extends Validate
     // }}}
     // {{{ function _mail_body
 
-    function _mail_body($isok)
+    protected function _mail_body($isok)
     {
         if ($isok) {
-            return "  L'adresse mail {$this->alias} que tu avais demandée vient d'être créée, tu peux désormais l'utiliser à ta convenance.".(($this->public == 'public')?" A ta demande, cette adresse apparaît maintenant sur ta fiche.":"");
+            return "  L'adresse email {$this->alias} que tu avais demandée vient d'être créée, tu peux désormais l'utiliser à ta convenance." . (($this->public == 'public') ? " À ta demande, cette adresse apparaît maintenant sur ta fiche." : "");
         } else {
-            return "  La demande que tu avais faite pour l'alias {$this->alias} a été refusée.";
+            return "  La demande que tu avais faite pour l'alias {$this->alias} a été refusée.";
         }
     }
 
     // }}}
-    // {{{ function commit()
+    // {{{ function shorter_domain
 
-    function commit ()
+    private function shorter_domain()
     {
         global $globals;
-        
-        XDB::execute("UPDATE auth_user_quick SET emails_alias_pub = {?} WHERE user_id = {?}", $this->public, $this->uid);
+
+        $mail = $globals->mail;
+
+        if (empty($mail->domain2) || strlen($mail->domain2) > strlen($mail->domain)) {
+            return $mail->domain;
+        } else {
+            return $mail->domain2;
+        }
+    }
+
+    // }}}
+    // {{{ function commit()
+
+    public function commit ()
+    {
+        XDB::execute("UPDATE auth_user_quick SET emails_alias_pub = {?} WHERE user_id = {?}",
+                     $this->public, $this->user->id());
 
         if ($this->old) {
-            return XDB::execute('UPDATE virtual SET alias={?} WHERE alias={?}', $this->alias, $this->old);
+            return XDB::execute("UPDATE virtual SET alias = {?} WHERE alias = {?}",
+                                $this->alias, $this->old);
         } else {
-            XDB::execute('INSERT INTO virtual SET alias={?},type="user"', $this->alias);
-            $vid = mysql_insert_id();
-            $dom = $globals->mail->shorter_domain();
-            return XDB::query('INSERT INTO virtual_redirect (vid,redirect) VALUES ({?}, {?})', $vid, $this->forlife.'@'.$dom);
+            XDB::execute("INSERT INTO virtual SET alias = {?},type='user'", $this->alias);
+            $vid = XDB::insertId();
+            return XDB::query("INSERT INTO virtual_redirect (vid,redirect) VALUES ({?}, {?})",
+                              $vid, $this->user->forlifeEmail());
         }
     }
 
@@ -115,5 +138,5 @@ class AliasReq extends Validate
 
 // }}}
 
-// vim:set et sw=4 sts=4 sws=4 foldmethod=marker:
+// vim:set et sw=4 sts=4 sws=4 foldmethod=marker enc=utf-8:
 ?>