Merge commit 'origin/fusionax' into account
[platal.git] / include / validations / listes.inc.php
index 5732ef8..5d33ad3 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 /***************************************************************************
- *  Copyright (C) 2003-2007 Polytechnique.org                              *
+ *  Copyright (C) 2003-2009 Polytechnique.org                              *
  *  http://opensource.polytechnique.org/                                   *
  *                                                                         *
  *  This program is free software; you can redistribute it and/or modify   *
 class ListeReq extends Validate
 {
     // {{{ properties
-    
-    var $liste;
-    var $desc;
 
-    var $advertise;
-    var $modlevel;
-    var $inslevel;
+    public $liste;
+    public $desc;
+    public $asso;
+    public $domain;
 
-    var $owners;
-    var $members;
+    public $advertise;
+    public $modlevel;
+    public $inslevel;
 
-    var $rules = "Refuser les listes de binets si elles ne sont pas datées (oui : apv2002@, non : apv@).
+    public $owners;
+    public $members;
+
+    public $rules = "Refuser les listes de binets si elles ne sont pas datées (oui : apv2002@, non : apv@).
         Refuser également des listes qui pourraient nous servir (admin, postmaster,...)";
     // }}}
     // {{{ constructor
-    
-    function ListeReq($_uid, $_liste, $_desc, $_advertise, $_modlevel,
-                      $_inslevel, $_owners, $_members, $_stamp=0)
+
+    public function __construct(User &$_user, $_asso, $_liste, $_domain, $_desc, $_advertise,
+                                $_modlevel, $_inslevel, $_owners, $_members, $_stamp=0)
     {
-        $this->Validate($_uid, true, 'liste', $_stamp);
-        
+        parent::__construct($_user, false, 'liste', $_stamp);
+
+        $this->asso      = $_asso;
         $this->liste     = $_liste;
+        $this->domain    = $_domain;
         $this->desc      = $_desc;
         $this->advertise = $_advertise;
         $this->modlevel  = $_modlevel;
@@ -57,13 +61,15 @@ class ListeReq extends Validate
     // }}}
     // {{{ function formu()
 
-    function formu()
-    { return 'include/form.valid.listes.tpl'; }
+    public function formu()
+    {
+        return 'include/form.valid.listes.tpl';
+    }
 
     // }}}
     // {{{ function editor()
 
-    function editor()
+    public function editor()
     {
         return 'include/form.valid.edit-listes.tpl';
     }
@@ -71,47 +77,90 @@ class ListeReq extends Validate
     // }}}
     // {{{ function handle_editor()
 
-    function handle_editor()
+    protected function handle_editor()
     {
+        global $globals;
+
         if (Env::has('listname')) {
             $this->liste = trim(Env::v('listname'));
         }
+        if (Env::has('domainname')) {
+            $this->domain = trim(Env::v('domainname'));
+        }
+        if (Env::has('assotype')) {
+            $this->asso = trim(Env::v('assotype'));
+        }
+        if (!$this->asso) {
+            $this->domain = $globals->mail->domain;
+        }
         return true;
     }
 
     // }}}
     // {{{ function _mail_subj
 
-    function _mail_subj()
+    protected function _mail_subj()
     {
-        return "[Polytechnique.org/LISTES] Demande de la liste {$this->liste}";
+        return "[Polytechnique.org/LISTES] Demande de la liste {$this->liste}@{$this->domain}";
     }
 
     // }}}
     // {{{ function _mail_body
 
-    function _mail_body($isok)
+    protected function _mail_body($isok)
     {
         if ($isok) {
-            return "  La mailing list {$this->liste} que tu avais demandée vient d'être créée.";
+            return "  Suite à ta demande de création de liste de diffusion, nous avons créé l'adresse {$this->liste}@{$this->domain}, qui est maintenant à ta disposition.";
         } else {
-            return "  La demande que tu avais faite pour la mailing list {$this->liste} a été refusée.";
+            return "  La demande que tu avais faite pour la liste de diffusion {$this->liste}@{$this->domain} a été refusée.";
         }
     }
 
     // }}}
     // {{{ function commit()
 
-    function commit()
+    public function commit()
     {
-        $list = new MMList(S::v('uid'), S::v('password'));
-        $ret = $list->create_list($this->liste, $this->desc, $this->advertise,
+        global $globals;
+
+        if ($this->asso == "alias") {
+            $new = $this->liste . '@' . $this->domain;
+            XDB::query('INSERT INTO x4dat.virtual (alias, type) VALUES({?}, "user")', $new);
+            foreach ($this->members as $member) {
+                $user = User::get($member);
+                if ($user != null) {
+                    XDB::query(
+                        "INSERT INTO  x4dat.virtual_redirect (vid, redirect)
+                              SELECT  vid, {?}
+                                FROM  x4dat.virtual
+                               WHERE  alias = {?}", $user->forlifeEmail(), $new);
+                }
+            }
+            return 1;
+        }
+
+        $list = new MMList(S::user()->id(), $this->domain);
+        $ret = $list->create_list($this->liste, utf8_decode($this->desc), $this->advertise,
                                   $this->modlevel, $this->inslevel,
                                   $this->owners, $this->members);
         $liste = strtolower($this->liste);
-        if ($ret) {
-            foreach(Array($liste, $liste."-owner", $liste."-admin", $liste."-bounces") as $l) {
-                XDB::execute("INSERT INTO aliases (alias,type) VALUES({?}, 'liste')", $l);
+        if ($ret && !$this->asso) {
+            foreach(Array($liste, $liste . "-owner", $liste . "-admin", $liste . "-bounces", $liste . "-unsubscribe") as $l) {
+                XDB::execute("INSERT INTO aliases (alias, type) VALUES({?}, 'liste')", $l);
+            }
+        } elseif ($ret) {
+            foreach (Array('', 'owner', 'admin', 'bounces', 'unsubscribe') as $app) {
+                $mdir = $app == '' ? '+post' : '+' . $app;
+                if (!empty($app)) {
+                    $app  = '-' . $app;
+                }
+                $red = $this->domain . '_' . $liste;
+                XDB::execute('INSERT INTO x4dat.virtual (alias, type)
+                                        VALUES({?}, {?})', $liste . $app . '@' . $this->domain, 'list');
+                XDB::execute('INSERT INTO x4dat.virtual_redirect (vid, redirect)
+                                        VALUES ({?}, {?})', XDB::insertId(),
+                                       $red . $mdir . '@listes.polytechnique.org');
+                $list->mass_subscribe($liste, join(' ', $this->members));
             }
         }
         return $ret;