[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&aacute;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&oacute;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&aacute;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&oacute;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&oacute;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