X-Git-Url: http://git.polytechnique.org/?a=blobdiff_plain;f=include%2Fvalidations%2Flistes.inc.php;h=35b79debe99e51b341c354b905203b0619d1b640;hb=c886c975766cc8c3b53d3d73a4bf592824577d93;hp=47471e4934ed94c689e3ab65e8ec0fb11189f063;hpb=ebd515f95f03f8a87f9b846d65e179b39a535222;p=platal.git diff --git a/include/validations/listes.inc.php b/include/validations/listes.inc.php index 47471e4..35b79de 100644 --- a/include/validations/listes.inc.php +++ b/include/validations/listes.inc.php @@ -27,6 +27,8 @@ class ListeReq extends Validate public $liste; public $desc; + public $asso; + public $domain; public $advertise; public $modlevel; @@ -40,12 +42,14 @@ class ListeReq extends Validate // }}} // {{{ constructor - public function __construct($_uid, $_liste, $_desc, $_advertise, $_modlevel, - $_inslevel, $_owners, $_members, $_stamp=0) + public function __construct($_uid, $_asso, $_liste, $_domain, $_desc, $_advertise, + $_modlevel, $_inslevel, $_owners, $_members, $_stamp=0) { parent::__construct($_uid, false, 'liste', $_stamp); + $this->asso = $_asso; $this->liste = $_liste; + $this->domain = $_domain; $this->desc = $_desc; $this->advertise = $_advertise; $this->modlevel = $_modlevel; @@ -75,9 +79,20 @@ class ListeReq extends Validate 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; } @@ -95,9 +110,9 @@ class ListeReq extends Validate protected function _mail_body($isok) { if ($isok) { - return " La mailing list {$this->liste} que tu avais demandée vient d'être créée."; + return " La liste de diffusion {$this->liste} que tu avais demandée vient d'être créée."; } 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} a été refusée."; } } @@ -106,15 +121,51 @@ class ListeReq extends Validate public function commit() { - $list = new MMList(S::v('uid'), S::v('password')); + 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) { + $res = XDB::query( + "SELECT a.alias, b.alias + FROM x4dat.aliases AS a + LEFT JOIN x4dat.aliases AS b ON (a.id=b.id AND b.type = 'a_vie') + WHERE a.alias={?} AND a.type!='homonyme'", $member); + list($alias, $blias) = $res->fetchOneRow(); + $alias = empty($blias) ? $alias : $blias; + XDB::query( + "INSERT INTO x4dat.virtual_redirect (vid,redirect) + SELECT vid, {?} + FROM x4dat.virtual + WHERE alias={?}", $alias . "@" . $globals->mail->domain, $new); + } + return 1; + } + + $list = new MMList(S::v('uid'), S::v('password'), $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", $liste."-unsubscribe") as $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; }