Allows to moderate the lists directly on the lists main page (use a bit of Ajax in...
authorx2003bruneau <x2003bruneau@839d8a87-29fc-0310-9880-83ba4fa771e5>
Mon, 30 Oct 2006 00:53:49 +0000 (00:53 +0000)
committerx2003bruneau <x2003bruneau@839d8a87-29fc-0310-9880-83ba4fa771e5>
Mon, 30 Oct 2006 00:53:49 +0000 (00:53 +0000)
git-svn-id: svn+ssh://murphy/home/svn/platal/trunk@1036 839d8a87-29fc-0310-9880-83ba4fa771e5

bin/lists.rpc.py
htdocs/images/icons/magnifier.gif [new file with mode: 0644]
htdocs/javascript/ajax.js [new file with mode: 0644]
templates/listes/index.tpl
templates/listes/liste.inc.tpl [new file with mode: 0644]
templates/listes/listes.inc.tpl

index 7f5a5f0..62188ed 100755 (executable)
@@ -938,6 +938,7 @@ server = FastXMLRPCServer(("localhost", 4949), BasicAuthXMLRPCRequestHandler)
 
 # index.php
 server.register_function(get_lists)
+server.register_function(get_list_info)
 server.register_function(subscribe)
 server.register_function(unsubscribe)
 # members.php
diff --git a/htdocs/images/icons/magnifier.gif b/htdocs/images/icons/magnifier.gif
new file mode 100644 (file)
index 0000000..203174e
Binary files /dev/null and b/htdocs/images/icons/magnifier.gif differ
diff --git a/htdocs/javascript/ajax.js b/htdocs/javascript/ajax.js
new file mode 100644 (file)
index 0000000..ec485a7
--- /dev/null
@@ -0,0 +1,62 @@
+/***************************************************************************
+ *  Copyright (C) 2003-2006 Polytechnique.org                              *
+ *  http://opensource.polytechnique.org/                                   *
+ *                                                                         *
+ *  This program is free software; you can redistribute it and/or modify   *
+ *  it under the terms of the GNU General Public License as published by   *
+ *  the Free Software Foundation; either version 2 of the License, or      *
+ *  (at your option) any later version.                                    *
+ *                                                                         *
+ *  This program is distributed in the hope that it will be useful,        *
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of         *
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the          *
+ *  GNU General Public License for more details.                           *
+ *                                                                         *
+ *  You should have received a copy of the GNU General Public License      *
+ *  along with this program; if not, write to the Free Software            *
+ *  Foundation, Inc.,                                                      *
+ *  59 Temple Place, Suite 330, Boston, MA  02111-1307  USA                *
+ ***************************************************************************/
+
+Ajax = {
+    xml_client: null,
+    init: false,
+
+    prepare_client: function()
+    {
+        if (!Ajax.init) {
+            if (window.XMLHttpRequest) {
+                Ajax.xml_client = new XMLHttpRequest();
+            } else if (window.ActiveXObject) {
+                try {
+                    Ajax.xml_client = new ActiveXObject("Msxml2.XMLHTTP");
+                } catch (e) {
+                    Ajax.xml_client = new ActiveXObject("Microsoft.XMLHTTP");
+                }
+            }
+            if (Ajax.xml_client == null) {
+                alert("Ton client ne supporte pas Ajax, nécessaire pour certaines fonctionalités de cette page");
+            }
+        }
+        Ajax.init = true;
+    },
+
+    update_html: function(obj, src)
+    {
+        Ajax.prepare_client();
+        if (Ajax.xml_client == null) {
+            return true;
+        }
+        Ajax.xml_client.onreadystatechange =
+            function()
+            {
+                if(Ajax.xml_client.readyState == 4) {
+                    document.getElementById(obj).innerHTML = Ajax.xml_client.responseText;
+                }
+            };
+        Ajax.xml_client.open ('GET', src, true);
+        Ajax.xml_client.send (null);
+        return false;
+    }
+}
+
index 3bde13d..f884eef 100644 (file)
 
 <h2>L'inscription à une liste de diffusion</h2>
 
-<p>
-Pour t'inscrire à une liste il suffit de cliquer sur l'icone
-{icon name=add} située en fin de ligne.
-</p>
-
-<p>
-Certaines listes sont à inscription modérée, l'inscription n'y est pas
-immédiate.  Il faut en effet l'action d'un modérateur de la liste pour valider
-(ou éventuellement refuser) ta candidature.  Ces listes apparaissent avec l'icone 
-{icon name=flag_orange title="en cours"}.
-</p>
+<ul>
+  <li>Pour demander ton inscription à une liste de diffusion, il suffit
+    de cliquer sur l'icône {icon name=add} située en fin de ligne</li>
+  <li>Si la liste est à inscription modérée, l'icône {icon name=flag_orange title="en cours"} 
+    apparaîtra tant que ton inscription n'aura pas été validée par un modérateur</li>
+  <li>Pour te désinscrire d'une liste dont tu es membre, il suffit de cliquer sur la croix
+    {icon name=cross title="désinscription"} située en fin de ligne</li>
+</ul>
 
-<p>
-Pour se désinscrire, il suffit de la même manière de cliquer sur l'icone
-{icon name=cross title="désinscription"}.
+<p class="smaller">Attention : Lorsqu'une liste à laquelle tu es abonné est
+  privée, l'icône {icon name=weather_cloudy} est affichée en début de ligne. 
+  Si tu t'en désinscrits, il ne te sera pas possible de t'y abonner de nouveau
+  sans l'action d'un modérateur
 </p>
 
 <h2>La diffusion sur une liste de diffusion</h2>
@@ -48,53 +46,53 @@ Pour se d
 La diffusion a trois niveaux de modération.  La diffusion peut être :
 </p>
 <ul>
-  <li>libre : tout le monde peut y envoyer des mails, la diffusion y est
+  <li><strong>libre :</strong> tout le monde peut y envoyer des mails, la diffusion y est
   immédiate;</li>
-  <li>restreinte : les membres de la liste peuvent envoyer librement des mails,
+  <li><strong>restreinte :</strong> les membres de la liste peuvent envoyer librement des mails,
   les extérieurs sont modérés;</li>
-  <li>modérée: l'envoi d'un mail à la liste est alors filtré par des
+  <li><strong>modérée:</strong> l'envoi d'un mail à la liste est alors filtré par des
   modérateurs, eux seuls peuvent accepter un message envoyé à la liste.</li>
 </ul>
 
 <p class='smaller'>
-{icon name=wrench title="Modérateur"} indique que tu es modérateur de la liste.<br />
-Les modérateurs jouent également le rôle de gestionnaire.
+{icon name=wrench title="Modérateur"} indique que tu es modérateur de la liste, les modérateurs jouent également le rôle de gestionnaire.<br />
+{icon name=error title="Modérateur mais non-membre"} indque que tu es modérateur de la liste, mais que tu n'en es pas membre.
 </p>
 
-<h2>Demander la création d'une liste de diffusion</h2>
+<h1>Demander la création d'une liste de diffusion</h1>
 
 <p>
 Nos listes ont pour but de réunir des X autour de thèmes ou centres d'intérêt communs.  C'est un
 moyen pratique et efficace de rassembler plusieurs personnes autour d'un projet commun ou d'une
 thématique particulière.
 </p>
-<p>
+
+<p class="center">
 Tu peux demander <a href='lists/create'>la création</a>
 d'une liste de diffusion sur le thème de ton choix.  
 </p>
 
+{if $owner|@count}
+<h1>Listes dont tu es modérateur</h1>
 
-<h1>
-  Listes de diffusion publiques
-</h1>
-
-<p>
-Les listes de diffusion publiques sont visibles par tous les X inscrits à Polytechnique.org.
-</p>
+{include file='listes/listes.inc.tpl' lists=$owner}
+{/if}
+{if $member|@count}
+<h1>Listes dont tu es membre</h1>
 
-{include file='listes/listes.inc.tpl' priv=0}
-
-<h1>
-  Listes de diffusion privées (et de promo)
-</h1>
+{include file='listes/listes.inc.tpl' lists=$member}
+{/if}
+<h1>Listes de diffusion publiques auxquelles tu peux t'inscrire</h1>
 
 <p>
-Si tu te désinscris de ces listes, tu ne seras plus capable de t'y réinscrire par toi-même !
+Les listes de diffusion publiques sont visibles par tous les X inscrits à Polytechnique.org.
 </p>
 
-{include file='listes/listes.inc.tpl' priv=1}
+{if $public|@count}
+{include file='listes/listes.inc.tpl' lists=$public}
 
 <br />
+{/if}
 
 <form method='post' action='lists'>
   <table class='tinybicol' cellspacing='0' cellpadding='2'>
diff --git a/templates/listes/liste.inc.tpl b/templates/listes/liste.inc.tpl
new file mode 100644 (file)
index 0000000..bc289cc
--- /dev/null
@@ -0,0 +1,98 @@
+{**************************************************************************}
+{*                                                                        *}
+{*  Copyright (C) 2003-2006 Polytechnique.org                             *}
+{*  http://opensource.polytechnique.org/                                  *}
+{*                                                                        *}
+{*  This program is free software; you can redistribute it and/or modify  *}
+{*  it under the terms of the GNU General Public License as published by  *}
+{*  the Free Software Foundation; either version 2 of the License, or     *}
+{*  (at your option) any later version.                                   *}
+{*                                                                        *}
+{*  This program is distributed in the hope that it will be useful,       *}
+{*  but WITHOUT ANY WARRANTY; without even the implied warranty of        *}
+{*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *}
+{*  GNU General Public License for more details.                          *}
+{*                                                                        *}
+{*  You should have received a copy of the GNU General Public License     *}
+{*  along with this program; if not, write to the Free Software           *}
+{*  Foundation, Inc.,                                                     *}
+{*  59 Temple Place, Suite 330, Boston, MA  02111-1307  USA               *}
+{*                                                                        *}
+{**************************************************************************}
+
+<td style="width: 16px">
+  {if $liste.own && $liste.sub}
+  {icon name=wrench title="Modérateur"}
+  {elseif $liste.own}
+  {icon name=error title="Modérateur mais non-membre"}
+  {elseif $liste.priv}
+  {icon name=weather_cloudy title="Liste privée"}
+  {/if}
+</td>
+<td>
+  <a href='{$platal->ns}lists/members/{$liste.list}'>{$liste.list}</a> 
+</td>
+<td>
+  {$liste.desc}<br/>
+  {if $liste.subscriptions|@count}
+  <strong>&bull; Demandes d'inscription</strong><br />
+  {foreach from=$liste.subscriptions item=s}
+    <a href='{$platal->ns}lists/moderate/{$liste.list}?sadd={$s.id}'
+        onclick="return Ajax.update_html('list_{$liste.list}', '{$platal->ns}lists/ajax/{$liste.list}?sadd={$s.id}');">
+      {icon name=add title="Accepter"}
+    </a>
+    <a href='{$platal->ns}lists/moderate/{$liste.list}?sid={$s.id}'>
+      {icon name=delete title="Refuser"}
+    </a>
+    {$s.name}
+    {if $s.login}
+    <a href="profile/{$s.login}" class="popup2">{icon name=user_suit title="Afficher la fiche"}</a>
+    {/if}
+    <br />
+  {/foreach}
+  {/if}
+  {if $liste.mails|@count}
+  <strong>&bull; Demandes de modération</strong><br />
+  <span class="smaller">
+  {foreach from=$liste.mails item=m}
+    <a href='{$platal->ns}lists/moderate/{$liste.list}?mid={$m.id}&amp;mok=1'
+        onclick="return Ajax.update_html('list_{$liste.list}', '{$platal->ns}lists/ajax/{$liste.list}?mid={$m.id}&amp;mok=1');">
+      {icon name=add title="Valider le mail"}
+    </a>
+    <a href='{$platal->ns}lists/moderate/{$liste.list}?mid={$m.id}&amp;mdel=1'
+        onclick="return Ajax.update_html('list_{$liste.list}', '{$platal->ns}lists/ajax/{$liste.list}?mid={$m.id}&amp;mdel=1');">
+      {icon name=delete title="Détruire"}
+    </a>
+    De : {$m.sender}<br />
+    <a href='{$platal->ns}lists/moderate/{$liste.list}?mid={$m.id}'>
+      {icon name=magnifier title="Voir le message"}
+    </a>
+    Sujet : {$m.subj|hdc|default:"[pas de sujet]"}<br />
+  {/foreach}
+  </span>
+  {/if}
+</td>
+<td class='center'>
+  {if $liste.diff eq 2}modérée{elseif $liste.diff}restreinte{else}libre{/if}
+</td>
+<td class='center'>
+  {if $liste.ins}modérée{else}libre{/if}
+</td>
+<td class='right'>{$liste.nbsub}</td>
+<td class='right'>
+  {if $liste.sub eq 2}
+  <a href='{$platal->ns}lists?del={$liste.list}'
+      onclick="return Ajax.update_html('list_{$liste.list}', '{$platal->ns}lists/ajax/{$liste.list}?unsubscribe=1');">
+    {icon name=cross title="me désinscrire"}
+  </a>
+  {elseif $liste.sub eq 1}
+  {icon name=flag_orange title='inscription en attente de modération'}
+  {else}
+  <a href='{$platal->ns}lists?add={$liste.list}'
+      onclick="return Ajax.update_html('list_{$liste.list}', '{$platal->ns}lists/ajax/{$liste.list}?subscribe=1');">
+    {icon name=add title="m'inscrire"}
+  </a>
+  {/if}
+ </td>
+
+{* vim:set et sw=2 sts=2 sws=2: *}
index 6a703e1..ae8ab8c 100644 (file)
     <th>Nb</th>
     <th></th>
   </tr>
-  {foreach from=$listes item=liste}
-  {if $liste.priv eq $priv}
-  <tr class='{cycle values="impair,pair"}'>
-    <td style="width: 16px">
-      {if $liste.own}
-      {icon name=wrench title="Modérateur"}
-      {/if}
-    </td>
-    <td>
-      <a href='{$platal->ns}lists/members/{$liste.list}'>{$liste.list}</a> 
-    </td>
-    <td>{$liste.desc}</td>
-    <td class='center'>
-      {if $liste.diff eq 2}modérée{elseif $liste.diff}restreinte{else}libre{/if}
-    </td>
-    <td class='center'>
-      {if $liste.ins}modérée{else}libre{/if}
-    </td>
-    <td class='right'>{$liste.nbsub}</td>
-    <td class='right'>
-      {if $liste.sub eq 2}
-      <a href='{$platal->ns}lists?del={$liste.list}'>
-        {icon name=cross title="me désinscrire"}
-      </a>
-      {elseif $liste.sub eq 1}
-      {icon name=flag_orange title='inscription en attente de modération'}
-      {else}
-      <a href='{$platal->ns}lists?add={$liste.list}'>
-        {icon name=add title="m'inscrire"}</a>
-      {/if}
-    </td>
+  {foreach from=$lists item=liste}
+  <tr class='{cycle values="impair,pair"}' id='list_{$liste.list}'>
+  {include file="listes/liste.inc.tpl"}
   </tr>
-  {/if}
   {/foreach}
 </table>