[cpif] r330 - in trunk: . backend frontend-web frontend-web/skins/default
svn at argo.es
svn at argo.es
Thu Sep 6 14:39:09 CEST 2007
Author: jcea
Date: Thu Sep 6 14:39:06 2007
New Revision: 330
Log:
Los moderadores y el "master" pueden marcar un hilo como
'solo lectura'. Falta mejorar la parte del skin, no obstante.
Added:
trunk/frontend-web/url_toggle_readonly.py
- copied, changed from r329, /trunk/frontend-web/url_stop.py
Modified:
trunk/TODO
trunk/backend/database.py
trunk/backend/upgrade.py
trunk/frontend-web/skins.py
trunk/frontend-web/skins/default/body_show_thread.html
trunk/frontend-web/skins/default/body_show_thread_anonymous.html
trunk/frontend-web/url_nuevo_post_POST.py
Modified: trunk/TODO
==============================================================================
--- trunk/TODO (original)
+++ trunk/TODO Thu Sep 6 14:39:06 2007
@@ -330,3 +330,12 @@
estamos haciendo una verificacion OpenID, no estamos bloqueando
el "storage", permitiendo asi accesos concurrentes.
+- 20070906: FRONTAL WEB: Modificar el skin para marcar los hilos
+ "solo lectura" y para eliminar la opcion de escribir respuesta.
+
+- 20070906: FRONTAL WEB: El cambio de estado de "solo lectura"
+ debe hacerse por AJAX.
+
+- 20070906: La comprobacion de moderadores requiere normalizar
+ los nicks cada vez.
+
Modified: trunk/backend/database.py
==============================================================================
--- trunk/backend/database.py (original)
+++ trunk/backend/database.py Thu Sep 6 14:39:06 2007
@@ -1,7 +1,7 @@
# $Id$
-VERSION_DB="2007090302"
+VERSION_DB="2007090601"
import globales
@@ -633,4 +633,33 @@
thr["monitor"][usuario]=None
u["monitor hilos"][thread]=None
return None,True
-
+
+def check_moderator_or_master_status(conn,usuario,num_thread) :
+ root=conn.get_root()
+ hilos=root["hilos"]["hilos"]
+ metatags=root["metatags"]["metatags"]
+ if num_thread not in hilos : return False # Thread doesn't exist
+ usuario=normaliza_nick(usuario)
+ if usuario=="master" : return True
+ for metatag in hilos[num_thread]["metatags"] :
+ for moderador in metatags[metatag]["moderadores"] :
+ if usuario==normaliza_nick(moderador) : return True
+ return False
+
+def check_permissions_readonly(conn,usuario,num_thread) :
+ return check_moderator_or_master_status(conn,usuario,num_thread)
+
+def thread_is_readonly(conn,hilo) :
+ root=conn.get_root()
+ hilos=root["hilos"]["hilos"]
+ return (hilo not in hilos) or ("read only" in hilos[hilo])
+
+def toogle_thread_readonly(conn,num_thread) :
+ root=conn.get_root()
+ hilo=root["hilos"]["hilos"][num_thread]
+ if "read only" in hilo :
+ del hilo["read only"]
+ return False
+ hilo["read only"]=None
+ return True
+
Modified: trunk/backend/upgrade.py
==============================================================================
--- trunk/backend/upgrade.py (original)
+++ trunk/backend/upgrade.py Thu Sep 6 14:39:06 2007
@@ -293,3 +293,8 @@
del usuarios2nicks,normaliza_nick
conn.commit()
+ if root["version del foro"]=="2007090302" :
+ print "Actualizando la base de datos: 2007090302 -> 2007090601"
+ root["version del foro"]="2007090601"
+ conn.commit()
+
Modified: trunk/frontend-web/skins.py
==============================================================================
--- trunk/frontend-web/skins.py (original)
+++ trunk/frontend-web/skins.py Thu Sep 6 14:39:06 2007
@@ -53,6 +53,7 @@
'/stop': [],
'/nuevo_usuario_POST': [],
'/perfil_POST': [],
+ '/toggle_readonly': [],
}
import os
Modified: trunk/frontend-web/skins/default/body_show_thread.html
==============================================================================
--- trunk/frontend-web/skins/default/body_show_thread.html (original)
+++ trunk/frontend-web/skins/default/body_show_thread.html Thu Sep 6 14:39:06 2007
@@ -35,6 +35,7 @@
<li><a href="%(link_metatag)s">Volver al subforo '%(metatag_title)s'</a></li>
<li><a href="/">Página principal</a></li>
<li>%(auth)s</li>
+ <li><a href="/toggle_readonly/%(thread_num)d">Marcar/desmarcar este hilo como 'solo lectura'</a></li>
<li><a href="/nuevo_usuario">Dar de alta un nuevo usuario</a></li>
<li><a href="/edit_metatags">Editar Metatags</a></li>
<li><a href="/edit_config">Editar configuración de CPIF</a></li>
Modified: trunk/frontend-web/skins/default/body_show_thread_anonymous.html
==============================================================================
--- trunk/frontend-web/skins/default/body_show_thread_anonymous.html (original)
+++ trunk/frontend-web/skins/default/body_show_thread_anonymous.html Thu Sep 6 14:39:06 2007
@@ -18,6 +18,7 @@
<li><a href="%(link_metatag)s">Volver al subforo '%(metatag_title)s'</a></li>
<li><a href="/">Página principal</a></li>
<li>%(auth)s</li>
+ <li><a href="/toggle_readonly/%(thread_num)d">Marcar/desmarcar este hilo como 'solo lectura'</a></li>
<li><a href="/nuevo_usuario">Dar de alta un nuevo usuario</a></li>
<li><a href="/edit_metatags">Editar Metatags</a></li>
<li><a href="/edit_config">Editar configuración de CPIF</a></li>
Modified: trunk/frontend-web/url_nuevo_post_POST.py
==============================================================================
--- trunk/frontend-web/url_nuevo_post_POST.py (original)
+++ trunk/frontend-web/url_nuevo_post_POST.py Thu Sep 6 14:39:06 2007
@@ -27,6 +27,9 @@
if not database.user_has_metatag_access(conn,usuario,metatag) :
return None
+ if database.thread_is_readonly(conn,hilo) :
+ return pagina_error(path,usuario,"Este hilo es 'solo lectura'")
+
import cgi
ctype,pdict=cgi.parse_header(handler.headers.getheader('content-type'))
cuerpo=cgi.FieldStorage(fp=handler.rfile,headers=handler.headers,environ={'REQUEST_METHOD':'POST'},keep_blank_values=1)
Copied: trunk/frontend-web/url_toggle_readonly.py (from r329, /trunk/frontend-web/url_stop.py)
==============================================================================
--- /trunk/frontend-web/url_stop.py (original)
+++ trunk/frontend-web/url_toggle_readonly.py Thu Sep 6 14:39:06 2007
@@ -2,17 +2,24 @@
from globales import monitor
-def gestiona_url(handler,path,usuario) :
- if len(path)!=1 : return None
+ at monitor
+def gestiona_url(conn,handler,path,usuario) :
+ try :
+ if len(path)!=2 : return None
+ num_thread=int(path[1])
+ except :
+ return None
- import skins
- pagina = skins.Skin(path,usuario)
- pagina.load_dict({"page_title": "cpif - parando el servicio"})
+ if not usuario : return None
- if usuario!="master" :
- pagina.load_dict({"generic_message": "<h2>Solo el usuario 'master' puede parar el servicio</h2>"})
- else:
- handler.must_stop=True
- pagina.load_dict({"generic_message": "<h2>PARAMOS EL SERVICIO!!</h2>"})
+ import database
+ if not database.check_permissions_readonly(conn,usuario,num_thread) :
+ import skins
+ pagina = skins.Skin(path,usuario)
+ pagina.load_dict({"page_title": "cpif - Toogle ReadOnly"})
+ pagina.load_dict({"generic_message": "<h2>Necesitas ser 'master' o moderador para llevar a cabo esta acción</h2>"})
+ return(pagina.web())
+
+ database.toogle_thread_readonly(conn,num_thread)
+ return (302,{"Location":"/hilo/%d" %num_thread}, "")
- return(pagina.web())
More information about the cpif
mailing list