From 9ccd73120adb1fbc95494f165c27375023f19fb4 Mon Sep 17 00:00:00 2001 From: x2000habouzit Date: Fri, 10 Sep 2004 22:28:39 +0000 Subject: [PATCH] the mailing list admin pages are DONE !! oh yeah, it can do the same as before :) now I still have to manage the subscription on first page and the ML 'trombino' --- htdocs/listes/liste.php | 38 +++++++++++++++++++++++++--- scripts/mailman/mailman-rpc.py | 53 ++++++++++++++++++++++----------------- templates/listes/liste.tpl | 56 ++++++++++++++++++++++++++++++++++++++---- 3 files changed, 117 insertions(+), 30 deletions(-) diff --git a/htdocs/listes/liste.php b/htdocs/listes/liste.php index c587aaa..9bda9e8 100644 --- a/htdocs/listes/liste.php +++ b/htdocs/listes/liste.php @@ -18,7 +18,7 @@ * Foundation, Inc., * * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * *************************************************************************** - $Id: liste.php,v 1.1 2004-09-10 21:28:53 x2000habouzit Exp $ + $Id: liste.php,v 1.2 2004-09-10 22:28:39 x2000habouzit Exp $ ***************************************************************************/ if(empty($_REQUEST['liste'])) header('Location: index.php'); @@ -33,8 +33,40 @@ list($pass) = mysql_fetch_row($res); mysql_free_result($res); $client = new xmlrpc_client("http://{$_SESSION['uid']}:$pass@localhost:4949"); -$members = $client->get_members($liste); +if(isset($_REQUEST['info'])) $client->set_welcome($liste, $_REQUEST['info']); + +if(isset($_REQUEST['add_member']) && isset($_REQUEST['member'])) { + $client->mass_subscribe($liste, Array($_REQUEST['member'])); +} + +if(isset($_REQUEST['del_member']) && isset($_REQUEST['member'])) { + $res = $globals->db->query("SELECT b.alias + FROM aliases AS a + INNER JOIN aliases AS b ON (a.id=b.id AND b.type='a_vie') + WHERE a.alias='{$_REQUEST['member']}'"); + if($forlife = mysql_fetch_row($res)) { + $client->mass_unsubscribe($liste, $forlife); + } + mysql_free_result($res); +} + +if(isset($_REQUEST['add_owner']) && isset($_REQUEST['owner'])) { + $client->add_owner($liste, $_REQUEST['owner']); +} + +if(isset($_REQUEST['del_owner']) && isset($_REQUEST['owner'])) { + $res = $globals->db->query("SELECT b.alias + FROM aliases AS a + INNER JOIN aliases AS b ON (a.id=b.id AND b.type='a_vie') + WHERE a.alias='{$_REQUEST['owner']}'"); + if(list($forlife) = mysql_fetch_row($res)) { + $client->del_owner($liste, $forlife); + } + mysql_free_result($res); +} + +$members = $client->get_members($liste); if(is_array($members)) { $membres = Array(); foreach($members[1] as $member) { @@ -60,7 +92,7 @@ if(is_array($members)) { } mysql_free_result($res); } - ksort($membres); + ksort($moderos); $page->assign_by_ref('details', $members[0]); $page->assign_by_ref('members', $membres); diff --git a/scripts/mailman/mailman-rpc.py b/scripts/mailman/mailman-rpc.py index cd76a75..f8014f4 100755 --- a/scripts/mailman/mailman-rpc.py +++ b/scripts/mailman/mailman-rpc.py @@ -1,6 +1,6 @@ #!/usr/bin/env python #*************************************************************************** -#* Copyright (C) 2004 Polytechnique.org * +#* Copyright (C) 2namelytechnique.org * #* http://opensource.polytechnique.org/ * #* * #* This program is free software; you can redistribute it and/or modify * @@ -18,7 +18,7 @@ #* Foundation, Inc., * #* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * #*************************************************************************** -# $Id: mailman-rpc.py,v 1.15 2004-09-10 21:28:53 x2000habouzit Exp $ +# $Id: mailman-rpc.py,v 1.16 2004-09-10 22:28:39 x2000habouzit Exp $ #*************************************************************************** import base64, MySQLdb @@ -77,15 +77,15 @@ class BasicAuthXMLRPCRequestHandler(SimpleXMLRPCRequestHandler): self.end_headers() def getUser(self, uid, md5): - mysql.execute ("""SELECT u.prenom,u.nom,a.alias,u.perms + mysql.execute ("""SELECT CONCAT(u.prenom, ' ',u.nom),a.alias,u.perms FROM auth_user_md5 AS u INNER JOIN aliases AS a ON a.id=u.user_id WHERE u.user_id = '%s' AND u.password = '%s' LIMIT 1""" %( uid, md5 ) ) if int(mysql.rowcount) is 1: - user = mysql.fetchone() - userdesc = UserDesc(user[2]+'@polytechnique.org', user[0]+' '+user[1], None, 0) - return (userdesc,user[3]) + name,forlife,perms = mysql.fetchone() + userdesc = UserDesc(forlife+'@polytechnique.org', name, None, 0) + return (userdesc,perms) else: return None @@ -204,20 +204,21 @@ def mass_subscribe((userdesc,perms),listname,users): return 0 try: if not is_admin_on(userdesc, perms, mlist): - return None + return 0 members = mlist.getRegularMemberKeys() added = [] for user in users: - if user+'@polytechnique.org' in members: - continue - mysql.execute ("""SELECT CONCAT(u.prenom,' ',u.nom) + mysql.execute ("""SELECT CONCAT(u.prenom,' ',u.nom), f.alias FROM auth_user_md5 AS u - INNER JOIN aliases AS a ON (a.id=u.user_id AND alias='%s') + INNER JOIN aliases AS f ON (f.id=u.user_id AND f.type='a_vie') + INNER JOIN aliases AS a ON (a.id=u.user_id AND a.alias='%s') LIMIT 1""" %( user ) ) if int(mysql.rowcount) is 1: - row = mysql.fetchone() - userd = UserDesc(user+'@polytechnique.org', row[0], None, 0) + name, forlife = mysql.fetchone() + if forlife+'@polytechnique.org' in members: + continue + userd = UserDesc(forlife+'@polytechnique.org', name, None, 0) mlist.ApprovedAddMember(userd) added.append( (userd.fullname, userd.address) ) mlist.Save() @@ -225,14 +226,14 @@ def mass_subscribe((userdesc,perms),listname,users): mlist.Unlock() return added -def mass_unsubscribe((userdesc,prems),listname,users): +def mass_unsubscribe((userdesc,perms),listname,users): try: mlist = MailList.MailList(listname) except: return 0 try: if not is_admin_on(userdesc, perms, mlist): - return None + return 0 map(lambda user: mlist.ApprovedDeleteMember(user+'@polytechnique.org', None, 0, 0), users) mlist.Save() @@ -247,11 +248,17 @@ def add_owner((userdesc,perms),listname,user): return 0 try: if not is_admin_on(userdesc, perms, mlist): - return None - addr = user+'@polytechnique.org' - if addr not in mlist.owner: - mlist.owner.append(addr) - mlist.Save() + return 0 + mysql.execute ("""SELECT f.alias + FROM aliases AS f + INNER JOIN aliases AS a ON (a.id=f.id AND a.alias='%s') + WHERE f.type='a_vie' + LIMIT 1""" %( user ) ) + if int(mysql.rowcount) is 1: + forlife = mysql.fetchone()[0] + if forlife+'@polytechnique.org' not in mlist.owner: + mlist.owner.append(forlife+'@polytechnique.org') + mlist.Save() finally: mlist.Unlock() return True @@ -263,7 +270,9 @@ def del_owner((userdesc,perms),listname,user): return 0 try: if not is_admin_on(userdesc, perms, mlist): - return None + return 0 + if len(mlist.owner) < 2: + return 0 mlist.owner.remove(user+'@polytechnique.org') mlist.Save() finally: @@ -277,7 +286,7 @@ def set_welcome((userdesc,perms),listname,info): return 0 try: if not is_admin_on(userdesc, perms, mlist): - return None + return 0 mlist.info = info mlist.Save() finally: diff --git a/templates/listes/liste.tpl b/templates/listes/liste.tpl index e21d773..841e76c 100644 --- a/templates/listes/liste.tpl +++ b/templates/listes/liste.tpl @@ -17,7 +17,7 @@ * Foundation, Inc., * * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * *************************************************************************** - $Id: liste.tpl,v 1.1 2004-09-10 21:28:53 x2000habouzit Exp $ + $Id: liste.tpl,v 1.2 2004-09-10 22:28:39 x2000habouzit Exp $ ***************************************************************************} {dynamic} @@ -71,9 +71,9 @@ {foreach from=$xs item=x} {if $promo} - {$x.n} + {$x.n}
{else} - {$x.l} + {$x.l}
{/if} {/foreach} @@ -92,9 +92,9 @@ {foreach from=$xs item=x} {if $promo} - {$x.n} + {$x.n}
{else} - {$x.l} + {$x.l}
{/if} {/foreach} @@ -107,6 +107,52 @@ Administrer la liste +

+Pour entrer un utilisateur, il faut remplir les champs prévus à cet effet par son login, +c'est-à-dire "prenom.nom" ou "prenom.nom.promo" +

+ +
+ + + + + + + + + + + + + +
modifier les abonnésmodifier les modérateurs
+ + + +
+ +   + + + +   + +
+
+ +

+Un message est adressé automatiquement à toute personne ajoutée à la liste de diffusion. Voici le +message actuellement envoyé : il est modifiable à volonté ! +

+ +
+
+
+ +
+
+ {/if} {/if} -- 2.1.4