From 59887c4a8a1f014c1f4107c43deda0d1be994f5d Mon Sep 17 00:00:00 2001 From: =?utf8?q?St=C3=A9phane=20Jacob?= Date: Wed, 18 Jun 2008 20:21:39 +0200 Subject: [PATCH] Automation of the management of associations' mailing lists (Closes #817), Updates Changelog --- ChangeLog | 1 + bin/lists.create_promo.php | 2 +- include/validations/listes.inc.php | 61 +++++++++++- modules/lists.php | 48 +++++++-- templates/include/form.valid.edit-listes.tpl | 9 +- templates/include/form.valid.listes.tpl | 14 ++- templates/lists/create.tpl | 144 +++++++++++++++++++-------- 7 files changed, 219 insertions(+), 60 deletions(-) diff --git a/ChangeLog b/ChangeLog index fd019b3..57e9686 100644 --- a/ChangeLog +++ b/ChangeLog @@ -28,6 +28,7 @@ Bug/Wish: - #761: Fix user comment in moderation mail sent by mailman -FRU - #810: Fix encoding of admin pages -FRU - #813: Fix display of the sample mail refusal message -JAC + - #817: Automation of the management of associations' ML -JAC - #839: Fix warning when adding an external address -FRU - Larger click target to toggle emails in the validation interface -ALK diff --git a/bin/lists.create_promo.php b/bin/lists.create_promo.php index 163e532..438ed90 100755 --- a/bin/lists.create_promo.php +++ b/bin/lists.create_promo.php @@ -17,7 +17,7 @@ EOF; $promo = intval($opt['p']); $owner = $opt['o']; -$req = new ListeReq(0, "promo$promo", "Liste de la promotion $promo", +$req = new ListeReq(0, false, "promo$promo", "polytechnique.org", "Liste de la promotion $promo", 1 /*private*/, 2 /*moderate*/, 0 /*free subscription*/, array($owner), array()); $req->submit(); diff --git a/include/validations/listes.inc.php b/include/validations/listes.inc.php index 47471e4..a2fc0e6 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; @@ -78,6 +82,15 @@ class ListeReq extends Validate 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 = "polytechnique.org"; + } return true; } @@ -106,15 +119,53 @@ 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); } + } else { + if ($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; } diff --git a/modules/lists.php b/modules/lists.php index bc6078b..16d7de9 100644 --- a/modules/lists.php +++ b/modules/lists.php @@ -202,38 +202,68 @@ class ListsModule extends PLModule return; } + $asso = Post::v('asso'); $liste = Post::v('liste'); if (empty($liste)) { - $page->trigError('champs «adresse souhaitée» vide'); + $page->trigError('Le champ «adresse souhaitée» est vide.'); } if (!preg_match("/^[a-zA-Z0-9\-]*$/", $liste)) { - $page->trigError('le nom de la liste ne doit contenir que des lettres non accentuées, chiffres et tirets'); + $page->trigError('Le nom de la liste ne doit contenir que des lettres non accentuées, chiffres et tirets.'); } - $res = XDB::query("SELECT COUNT(*) FROM aliases WHERE alias={?}", $liste); - $n = $res->fetchOneCell(); + if (($asso == "binet") || ($asso == "alias")) { + $promo = Post::i('promo'); + $domain = $promo . '.polytechnique.org'; + + if (($promo < 1921) || ($promo > date('Y'))) { + $page->trigError('La promotion est mal renseignée, elle doit être du type : 2004.'); + } + + $new = $liste . '@' . $domain; + $res = XDB::query('SELECT COUNT(*) FROM x4dat.virtual WHERE alias={?}', $new); + + } else { + if ($asso == "groupex") { + $groupex_name = Post::v('groupex_name'); + + $res_groupe = XDB::query('SELECT mail_domain FROM groupex.asso WHERE nom={?}', $groupex_name); + $domain = $res_groupe->fetchOneCell(); + + if (!$domain) { + $page->trigError('Il n\'y a aucun groupe de ce nom sur Polytechnique.net.'); + } + + $new = $liste . '@' . $domain; + $res = XDB::query('SELECT COUNT(*) FROM x4dat.virtual WHERE alias={?}', $new); + } else { + $res = XDB::query("SELECT COUNT(*) FROM aliases WHERE alias={?}", $liste); + $domain = "polytechnique.org"; + } + } + + $n = $res->fetchOneCell(); if ($n) { - $page->trigError('cet alias est déjà pris'); + $page->trigError('Cette «adresse souhaitée» est déjà prise.'); } if (!Post::v('desc')) { - $page->trigError('le sujet est vide'); + $page->trigError('Le sujet est vide.'); } if (!count($owners)) { - $page->trigError('pas de gestionnaire'); + $page->trigError('Il n\'y a pas de gestionnaire.'); } if (count($members)<4) { - $page->trigError('pas assez de membres'); + $page->trigError('Il n\'y a pas assez de membres.'); } if (!$page->nb_errs()) { $page->assign('created', true); require_once 'validations.inc.php'; - $req = new ListeReq(S::v('uid'), $liste, + $req = new ListeReq(S::v('uid'), $asso, $liste, $domain, Post::v('desc'), Post::i('advertise'), Post::i('modlevel'), Post::i('inslevel'), $owners, $members); diff --git a/templates/include/form.valid.edit-listes.tpl b/templates/include/form.valid.edit-listes.tpl index 2fe9af2..09376ea 100644 --- a/templates/include/form.valid.edit-listes.tpl +++ b/templates/include/form.valid.edit-listes.tpl @@ -20,6 +20,13 @@ {* *} {**************************************************************************} - +Nom de la liste : +
+Type de liste : + + + +
+Domaine : {* vim:set et sw=2 sts=2 sws=2 enc=utf-8: *} diff --git a/templates/include/form.valid.listes.tpl b/templates/include/form.valid.listes.tpl index 9777f2d..7671432 100644 --- a/templates/include/form.valid.listes.tpl +++ b/templates/include/form.valid.listes.tpl @@ -23,7 +23,7 @@ Liste : - {$valid->liste}@polytechnique.org + {$valid->liste}@{$valid->domain} Desc : @@ -32,19 +32,25 @@ + Type de liste : + + {$valid->asso} + + + Propriétés : - + - + - +
visibilité:visibilité : {if $valid->advertise}publique{else}privée{/if}
diffusion:diffusion : {if $valid->modlevel eq 2}modérée{elseif $valid->modlevel}restreinte{else}libre{/if}
inscription:inscription : {if $valid->inslevel}modérée{else}libre{/if}
diff --git a/templates/lists/create.tpl b/templates/lists/create.tpl index fa1f798..8264ec8 100644 --- a/templates/lists/create.tpl +++ b/templates/lists/create.tpl @@ -40,56 +40,120 @@ liste :
- + + + + + + + + + + + + + + + + + + + - + - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - - + - - + - -- 2.1.4
Caractéristiques de la ListeCaractéristiques de la liste
C'est une liste pour :un binetune liste de portée générale ou d'amis
un groupe Xun alias psc, ...
Promotion : + Par exemple : 2004
Nom du groupe X : +
+ Attention : le nom du groupe doit être écrit comme sur Polytechnique.net. +
Adresse souhaitée : - @polytechnique.org + + @.diminutifdugroupe.polytechnique.org
Sujet (bref) : - + +
Propriétés : - - - - - - - - - - - - - - - - - - - -
visibilité :publiqueprivée
diffusion :librerestreintemodérée
inscription :libremodérée
-
visibilité :publiqueprivée
(est-ce que les non membres peuvent voir l'existence de cette liste ?)
diffusion :librerestreintemodérée
(l'envoi d'un mail à cette liste est-il libre, modéré + lorsque l'expéditeur n'appartient pas à la liste ou modéré dans tous les cas ?)
inscription :libremodérée
(détermine si les inscriptions à la liste sont modérées + par les modérateurs de la liste ou non.)
Membres et Gestionnaires
Membres et gestionnaires
Gestionnaires + Gestionnaires : {$owners|nl2br|default:"pas de gestionnaires"}
@@ -98,8 +162,8 @@ liste :
Membres + Membres : {$members|nl2br|default:"pas de membres"}
@@ -108,7 +172,7 @@ liste :
+ Tu peux entrer une liste de membres en entrant plusieurs adresses séparées par des espaces.