reworked index/members/trombi to support vhost schemes
authorx2000habouzit <x2000habouzit>
Thu, 23 Sep 2004 15:40:45 +0000 (15:40 +0000)
committerx2000habouzit <x2000habouzit>
Thu, 23 Sep 2004 15:40:45 +0000 (15:40 +0000)
htdocs/listes/index.php
htdocs/listes/members.php [moved from htdocs/listes/liste.php with 94% similarity]
htdocs/listes/trombi.php
scripts/mailman/mailman-rpc.py
templates/listes/index.tpl
templates/listes/listes.inc.tpl
templates/listes/members.tpl [moved from templates/listes/liste.tpl with 98% similarity]
templates/listes/trombi.tpl

index ad4849a..ad6f885 100644 (file)
  *  Foundation, Inc.,                                                      *
  *  59 Temple Place, Suite 330, Boston, MA  02111-1307  USA                *
  ***************************************************************************
-        $Id: index.php,v 1.3 2004-09-22 12:51:07 x2000habouzit Exp $
+        $Id: index.php,v 1.4 2004-09-23 15:40:45 x2000habouzit Exp $
  ***************************************************************************/
 
 require("auto.prepend.inc.php");
 new_skinned_page('listes/index.tpl', AUTH_MDP);
 include('xml-rpc-client.inc.php');
+
 $res = $globals->db->query("SELECT password FROM auth_user_md5 WHERE user_id={$_SESSION['uid']}");
 list($pass) = mysql_fetch_row($res);
 mysql_free_result($res);
 
 $client = new xmlrpc_client("http://{$_SESSION['uid']}:$pass@localhost:4949");
-if(isset($_GET['del'])) { $client->unsubscribe($_GET['del']); header('Location: index.php'); }
-if(isset($_GET['add'])) { $client->subscribe($_GET['add']); }
+if(isset($_GET['del'])) {
+    $client->unsubscribe('polytechnique.org',$_GET['del']);
+    header('Location: index.php');
+}
+if(isset($_GET['add'])) {
+    $client->subscribe('polytechnique.org',$_GET['add']);
+    header('Location: index.php');
+}
 
-$listes = $client->get_lists();
+$listes = $client->get_lists('polytechnique.org');
 $page->assign_by_ref('listes',$listes);
 $page->run();
 ?>
similarity index 94%
rename from htdocs/listes/liste.php
rename to htdocs/listes/members.php
index ef0f3fd..6a4d62d 100644 (file)
  *  Foundation, Inc.,                                                      *
  *  59 Temple Place, Suite 330, Boston, MA  02111-1307  USA                *
  ***************************************************************************
-        $Id: liste.php,v 1.7 2004-09-21 16:14:35 x2000habouzit Exp $
+        $Id: members.php,v 1.1 2004-09-23 15:40:45 x2000habouzit Exp $
  ***************************************************************************/
 
 if(empty($_REQUEST['liste'])) header('Location: index.php');
 $liste = strtolower($_REQUEST['liste']);
 
 require("auto.prepend.inc.php");
-new_skinned_page('listes/liste.tpl', AUTH_COOKIE, true);
+new_skinned_page('listes/members.tpl', AUTH_COOKIE, true);
 include('xml-rpc-client.inc.php');
 
 $res = $globals->db->query("SELECT password FROM auth_user_md5 WHERE user_id={$_SESSION['uid']}");
@@ -33,7 +33,7 @@ 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);
+$members = $client->get_members('polytechnique.org', $liste);
 
 if(is_array($members)) {
     $membres = Array();
index 81f4cdd..344551b 100644 (file)
@@ -18,7 +18,7 @@
  *  Foundation, Inc.,                                                      *
  *  59 Temple Place, Suite 330, Boston, MA  02111-1307  USA                *
  ***************************************************************************
-        $Id: trombi.php,v 1.3 2004-09-22 08:42:25 x2000habouzit Exp $
+        $Id: trombi.php,v 1.4 2004-09-23 15:40:45 x2000habouzit Exp $
  ***************************************************************************/
 
 if(empty($_REQUEST['liste'])) header('Location: index.php');
@@ -34,7 +34,7 @@ list($pass) = mysql_fetch_row($res);
 mysql_free_result($res);
 
 $client = new xmlrpc_client("http://{$_SESSION['uid']}:$pass@localhost:4949");
-$members = $client->get_members_limit($liste,$npage,30);
+$members = $client->get_members_limit('polytechnique.org',$liste,$npage,30);
 
 if(is_array($members)) {
     $membres = Array();
index 0fe4dff..41ce4a0 100755 (executable)
@@ -18,7 +18,7 @@
 #*  Foundation, Inc.,                                                      *
 #*  59 Temple Place, Suite 330, Boston, MA  02111-1307  USA                *
 #***************************************************************************
-#       $Id: mailman-rpc.py,v 1.29 2004-09-23 11:03:20 x2000habouzit Exp $
+#       $Id: mailman-rpc.py,v 1.30 2004-09-23 15:40:46 x2000habouzit Exp $
 #***************************************************************************
 
 import base64, MySQLdb, os, getopt, sys, MySQLdb.converters
@@ -109,75 +109,57 @@ def connectDB():
     db.ping()
     return db.cursor()
 
+def is_owner(userdesc,perms,mlist):
+    return ( perms == 'admin' and mm_cfg.ADMIN_ML_OWNER in mlist.owner ) or ( userdesc.address in mlist.owner )
+
 def is_admin_on(userdesc,perms,mlist):
     return ( perms == 'admin' ) or ( userdesc.address in mlist.owner )
 
 #-------------------------------------------------------------------------------
-# users procedures
+# users procedures for [ index.php ]
 #
 
-def get_lists((userdesc,perms)):
+def get_lists((userdesc,perms),vhost):
+    prefix = vhost.lower()+'-'
     names = Utils.list_names()
     names.sort()
     result = []
     for name in names:
+        if not name.startswith(prefix):
+            continue
         try:
-            mlist = MailList.MailList(name, lock=0)
+            mlist = MailList.MailList(name)
         except:
             continue
-        is_member = userdesc.address in mlist.getRegularMemberKeys()
-        is_admin  = mm_cfg.ADMIN_ML_OWNER in mlist.owner
-        is_owner  = ( perms == 'admin' and is_admin ) or ( userdesc.address in mlist.owner )
+        is_member  = userdesc.address in mlist.getRegularMemberKeys()
+        is_admin   = mm_cfg.ADMIN_ML_OWNER in mlist.owner
+        is_owner   = ( perms == 'admin' and is_admin ) or ( userdesc.address in mlist.owner )
+        is_pending = False
+        for id in mlist.GetSubscriptionIds():
+            if userdesc.address == mlist.GetRecord(id)[1]:
+                is_pending = True
+                break
         if mlist.advertised or is_member or is_owner:
             result.append( {
-                    'list' : name,
+                    'list' : str('-').join(name.split('-')[1:]),
                     'desc' : mlist.description,
                     'diff' : mlist.generic_nonmember_action,
-                    'ins'  : mlist.subscribe_policy > 0,
+                    'ins'  : mlist.subscribe_policy > 1,
                     'priv' : (1-mlist.advertised)+2*is_admin,
                     'welc' : mlist.welcome_msg,
-                    'you'  : is_member + 2*is_owner
+                    'sub'  : is_pending + 2*is_member,
+                    'own'  : is_owner
                     } )
+        mlist.Unlock()
     return result
 
-def get_members((userdesc,perms),listname):
-    try:
-        mlist = MailList.MailList(listname, lock=0)
-    except:
-        return 0
-    members = mlist.getRegularMemberKeys()
-    is_member = userdesc.address in members
-    is_admin  = mm_cfg.ADMIN_ML_OWNER in mlist.owner
-    is_owner  = ( perms == 'admin' and is_admin ) or ( userdesc.address in mlist.owner )
-    if mlist.advertised or is_member or is_owner or ( perms == 'admin' ):
-        members.sort()
-        details = { 'addr' : listname+'@polytechnique.org',
-                    'desc' : mlist.description,
-                    'diff' : mlist.generic_nonmember_action,
-                    'ins'  : mlist.subscribe_policy > 0,
-                    'priv' : (1-mlist.advertised)+2*is_admin,
-                    'welc' : mlist.welcome_msg,
-                    'you'  : is_member + 2*is_owner
-                  }
-        members = map(lambda member: (mlist.getMemberName(member) or '', member), members)
-        return (details,members,mlist.owner)
-    return 0
-
-def get_members_limit((userdesc,perms),listname,page,nb_per_page):
-    try:
-        details,members,owners = get_members((userdesc,perms),listname)
-    except:
-        return 0
-    i = (int(page)-1) * int(nb_per_page)
-    return (details,members[i:i+int(nb_per_page)],owners,(len(members)-1)/int(nb_per_page)+1)
-
-def subscribe((userdesc,perms),listname):
+def subscribe((userdesc,perms),vhost,listname):
     try:
-        mlist = MailList.MailList(listname)
+        mlist = MailList.MailList(vhost+'-'+listname)
     except:
         return 0
     try:
-        if ( mlist.subscribe_policy in (0,1) ) or ( userdesc.address in mlist.owner ) or ( mm_cfg.ADMIN_ML_OWNER in mlist.owner ):
+        if ( mlist.subscribe_policy in (0,1) ) or is_owner(userdesc,perms,mlist):
             result = 2
             mlist.ApprovedAddMember(userdesc)
         else:
@@ -192,9 +174,9 @@ def subscribe((userdesc,perms),listname):
     mlist.Unlock()
     return result
 
-def unsubscribe((userdesc,perms),listname):
+def unsubscribe((userdesc,perms),vhost,listname):
     try:
-        mlist = MailList.MailList(listname)
+        mlist = MailList.MailList(vhost+'-'+listname)
     except:
         return 0
     try:
@@ -207,6 +189,41 @@ def unsubscribe((userdesc,perms),listname):
         return 0
 
 #-------------------------------------------------------------------------------
+# users procedures for [ index.php ]
+#
+
+def get_members((userdesc,perms),vhost,listname):
+    try:
+        mlist = MailList.MailList(vhost+'-'+listname, lock=0)
+    except:
+        return 0
+    members   = mlist.getRegularMemberKeys()
+    is_member = userdesc.address in members
+    is_admin  = mm_cfg.ADMIN_ML_OWNER in mlist.owner
+    is_owner  = ( perms == 'admin' and is_admin ) or ( userdesc.address in mlist.owner )
+    if mlist.advertised or is_member or is_owner or ( perms == 'admin' ):
+        members.sort()
+        details = { 'addr' : listname+'@polytechnique.org',
+                    'desc' : mlist.description,
+                    'diff' : mlist.generic_nonmember_action,
+                    'ins'  : mlist.subscribe_policy > 0,
+                    'priv' : (1-mlist.advertised)+2*is_admin,
+                    'welc' : mlist.welcome_msg,
+                    'you'  : is_member + 2*is_owner
+                  }
+        members = map(lambda member: (mlist.getMemberName(member) or '', member), members)
+        return (details,members,mlist.owner)
+    return 0
+
+def get_members_limit((userdesc,perms),vhost,listname,page,nb_per_page):
+    try:
+        details,members,owners = get_members((userdesc,perms),vhost,listname)
+    except:
+        return 0
+    i = (int(page)-1) * int(nb_per_page)
+    return (details,members[i:i+int(nb_per_page)],owners,(len(members)-1)/int(nb_per_page)+1)
+
+#-------------------------------------------------------------------------------
 # owners procedures
 #
 
index b0e6e4d..e3751d4 100644 (file)
  *  Foundation, Inc.,                                                      *
  *  59 Temple Place, Suite 330, Boston, MA  02111-1307  USA                *
  ***************************************************************************
-        $Id: index.tpl,v 1.5 2004-09-22 12:51:08 x2000habouzit Exp $
+        $Id: index.tpl,v 1.6 2004-09-23 15:40:46 x2000habouzit Exp $
  ***************************************************************************}
 
-{if $smarty.request.add}
-<p class='erreur'>
-Ta demande d'inscription sur {$smarty.request.add} a été prise en compte.
-</p>
-{/if}
-
 <div class="rubrique">
   Listes de diffusion de Polytechnique.org
 </div>
index 87fbcba..43f7494 100644 (file)
@@ -17,7 +17,7 @@
  *  Foundation, Inc.,                                                      *
  *  59 Temple Place, Suite 330, Boston, MA  02111-1307  USA                *
  ***************************************************************************
-        $Id: listes.inc.tpl,v 1.4 2004-09-22 12:51:08 x2000habouzit Exp $
+        $Id: listes.inc.tpl,v 1.5 2004-09-23 15:40:46 x2000habouzit Exp $
  ***************************************************************************}
 
 <table class='bicol' cellpadding='0' cellspacing='0'>
   {if $liste.priv >= $min && $liste.priv <= $max|default:$min}
   <tr class='{cycle values="impair,pair"}'>
     <td>
-      {if $liste.you>1}
-      <a href='admin.php?liste={$liste.list}'>{$liste.list}</a>
+      <a href='members.php?liste={$liste.list}'>{$liste.list}</a>
+      {if $liste.own}
       [<a href='moderate.php?liste={$liste.list}'>mod</a>]
       {elseif $smarty.session.perms eq admin}
-      <a href='admin.php?liste={$liste.list}'>{$liste.list}</a>
-      <span class='erreur'>[<a href='moderate.php?liste={$liste.list}'>mod</a>]</span>
-      {else}
-      <a href='liste.php?liste={$liste.list}'>{$liste.list}</a>
+      [<span class='erreur'><a href='moderate.php?liste={$liste.list}'>mod</a></span>]
       {/if}
     </td>
     <td>{$liste.desc}</td>
     <td class='center'>{if $liste.diff}modérée{else}libre{/if}</td>
     <td class='center'>{if $liste.ins}modérée{else}libre{/if}</td>
     <td class='right'>
-      {if $liste.you is odd}
+      {if $liste.sub eq 2}
       <a href='{$smarty.server.PHP_SELF}?del={$liste.list}'>me désinscrire</a>
+      {elseif $liste.sub eq 1}
+      <span class='erreur'>en cours</span>
       {elseif $liste.ins}
-      <a href='{$smarty.server.PHP_SELF}?add={$liste.list}'>demander une inscription</a>
+      <a href='{$smarty.server.PHP_SELF}?add={$liste.list}'>demander son inscription</a>
       {else}
       <a href='{$smarty.server.PHP_SELF}?add={$liste.list}'>m'inscrire</a>
       {/if}
similarity index 98%
rename from templates/listes/liste.tpl
rename to templates/listes/members.tpl
index 6e3d31e..10ecb10 100644 (file)
@@ -17,7 +17,7 @@
  *  Foundation, Inc.,                                                      *
  *  59 Temple Place, Suite 330, Boston, MA  02111-1307  USA                *
  ***************************************************************************
-        $Id: liste.tpl,v 1.9 2004-09-21 16:14:35 x2000habouzit Exp $
+        $Id: members.tpl,v 1.1 2004-09-23 15:40:46 x2000habouzit Exp $
  ***************************************************************************}
 
 {dynamic}
index b911c3f..b6f4fa7 100644 (file)
@@ -17,7 +17,7 @@
  *  Foundation, Inc.,                                                      *
  *  59 Temple Place, Suite 330, Boston, MA  02111-1307  USA                *
  ***************************************************************************
-        $Id: trombi.tpl,v 1.3 2004-09-22 08:42:26 x2000habouzit Exp $
+        $Id: trombi.tpl,v 1.4 2004-09-23 15:40:46 x2000habouzit Exp $
  ***************************************************************************}
 
 {dynamic}
   </tr>
   <tr>
     <td colspan='2' class='center'>
-      {if $details.you > 1 || $smarty.session.perms eq admin}
-      <a href='admin.php?liste={$smarty.request.liste}'>Page de la liste</a>
-      {else}
-      <a href='liste.php?liste={$smarty.request.liste}'>Page de la liste</a>
-      {/if}
+      <a href='members.php?liste={$smarty.request.liste}'>Page de la liste</a>
     </td>
   </tr>    
 </table>