the mailing list admin pages are DONE !!
authorx2000habouzit <x2000habouzit>
Fri, 10 Sep 2004 22:28:39 +0000 (22:28 +0000)
committerx2000habouzit <x2000habouzit>
Fri, 10 Sep 2004 22:28:39 +0000 (22:28 +0000)
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
scripts/mailman/mailman-rpc.py
templates/listes/liste.tpl

index c587aaa..9bda9e8 100644 (file)
@@ -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);
index cd76a75..f8014f4 100755 (executable)
@@ -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:
index e21d773..841e76c 100644 (file)
@@ -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 @@
     <td>
       {foreach from=$xs item=x}
       {if $promo}
-      <a href="javascript:x()" onclick="popWin('{"fiche.php"|url}?user={$x.l}')">{$x.n}</a>
+      <a href="javascript:x()" onclick="popWin('{"fiche.php"|url}?user={$x.l}')">{$x.n}</a><br />
       {else}
-      {$x.l}
+      {$x.l}<br />
       {/if}
       {/foreach}
     </td>
@@ -92,9 +92,9 @@
     <td>
       {foreach from=$xs item=x}
       {if $promo}
-      <a href="javascript:x()" onclick="popWin('{"fiche.php"|url}?user={$x.l}')">{$x.n}</a>
+      <a href="javascript:x()" onclick="popWin('{"fiche.php"|url}?user={$x.l}')">{$x.n}</a><br />
       {else}
-      {$x.l}
+      {$x.l}<br />
       {/if}
       {/foreach}
     </td>
   Administrer la liste
 </div>
 
+<p>
+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"
+</p>
+
+<form method='post' action='{$smarty.server.REQUEST_URI}'>
+  <table class='tinybicol'>
+    <tr>
+      <th>modifier les abonnés</th>
+      <th>modifier les modérateurs</th>
+    </tr>
+    <tr>
+      <td>
+        <input type='text' name='member' />
+      </td>
+      <td>
+        <input type='text' name='owner' />
+      </td>
+    </tr>
+    <tr class='center'>
+      <td>
+        <input type='submit' name='add_member' value='ajouter' />
+        &nbsp;
+        <input type='submit' name='del_member' value='supprimer' />
+      </td>
+      <td>
+        <input type='submit' name='add_owner' value='ajouter' />
+        &nbsp;
+        <input type='submit' name='del_owner' value='supprimer' />
+      </td>
+    </tr>
+  </table>
+</form>
+
+<p>
+Un message est adressé automatiquement à toute personne ajoutée à la liste de diffusion.  Voici le
+message actuellement envoyé : il est modifiable à volonté !
+</p>
+
+<form method='post' action='{$smarty.server.REQUEST_URI}'>
+  <div class='center'>
+    <textarea cols='50' rows='8' name='info'>{$details.info}</textarea><br />
+    <input type='submit' name='update' value='mettre à jour' />
+  </div>
+</form>
+
 {/if}
 
 {/if}