[cpif] r377 - in trunk: . backend frontend-web

svn at argo.es svn at argo.es
Tue Sep 25 00:26:07 CEST 2007


Author: jcea
Date: Tue Sep 25 00:26:04 2007
New Revision: 377

Log:
Primeros pasos para permitir que los usuarios intercambien
mensajes de forma privada.

Aun queda tela que cortar.

De momento, a menos que se sepa lo que se hace, *NO*
se debe configurar la instalacion CPIF para permitir
correo personal entre usuarios.



Modified:
   trunk/TODO
   trunk/backend/database.py
   trunk/backend/upgrade.py
   trunk/frontend-web/url_edit_config.py
   trunk/frontend-web/url_edit_metatags.py

Modified: trunk/TODO
==============================================================================
--- trunk/TODO	(original)
+++ trunk/TODO	Tue Sep 25 00:26:04 2007
@@ -385,3 +385,37 @@
 - 20070914: FRONTAL WEB: En el log de acceso web, registrar el usuario
   autentificado en cada hit.
 
+- 20070924: El usuario "anonimo" tiene un metatag en el "storage" asignado
+  para mensajes privados. Obviamente no lo necesita.
+
+- 20070924: Cuando damos de alta a un usuario nuevo, se recorre toda
+  la lista de metatags, buscando los publicos, que son una minoria.
+
+- 20070924: FRONTAL WEB: Cuando se an~aden metatags nuevos a un foro,
+  el metatag de mensajes privados de los usuarios ya existentes aparecera
+  en medio de los otros metatags, en vez de al final.
+
+- 20070924: De momento no permitimos que los usuarios tengan mensajes
+  privados entre ellos. Para evitar que abran hilos nuevos en metatag
+  de mensajes privados, implemento control de escritura en los metatags.
+
+  A todos los efectos, es como cerrar un hilo.
+
+  En la implementacion actual, cerrar un metatag impide tambien que se
+  escriban mensajes en los hilos contenidos en dicho metatag. Hay que
+  meditar esta idea, sobre todo pensando que un hilo puede aparecer
+  en varios metatags, algunos de los cuales pueden estar cerrados.
+ 
+- 20070924: FRONTAL WEB: Cuando se hace un POST y no tenemos permiso,
+  ocurren errores, etc, CPIF no lee el cuerpo del POST y se producira
+  un error cuando el usuario intente realizar otra peticion por el
+  mismo TCP/IP. El error es del tipo:
+
+  Error response
+
+  Error code 400.
+
+  Message: Bad request syntax ('-----------------------------18103908688533555111236688432').
+
+  Error code explanation: 400 = Bad request syntax or unsupported method. 
+

Modified: trunk/backend/database.py
==============================================================================
--- trunk/backend/database.py	(original)
+++ trunk/backend/database.py	Tue Sep 25 00:26:04 2007
@@ -1,7 +1,7 @@
 # $Id$
 
 
-VERSION_DB="2007091306"
+VERSION_DB="2007092404"
 
 import globales
 
@@ -74,6 +74,7 @@
     conf=PersistentDict()
     conf["thread_len"]=10
     conf["allow_anonymous"]=True
+    conf["allow_private_messages"]=False
     conf["http_max_clients"]=16
     conf["http_initial_timeout"]=30
     conf["http_keep_alive_timeout"]=5
@@ -355,8 +356,13 @@
     clave=str(random.randint(0,sys.maxint))
 
   bt=BTree()
-  for i in root["metatags"]["metatags"].iterkeys() :
-    bt[i]=BTree()
+  for num_metatag,metatag in root["metatags"]["metatags"].items() :
+    if "public" in metatag :
+      bt[num_metatag]=BTree()
+
+  metatag_privado=metatag_add(conn,"Mensajes privados de "+nick,private=True)
+  bt[metatag_privado]=BTree()
+
   usuarios["usuarios"][nick_normalizado]=PersistentDict(
                        {"ultimo mensaje conocido":root["mensajes"]["num_mensajes"],
                         "punto de lectura no leidos":bt,
@@ -373,8 +379,11 @@
                         "cookie":None,
                         "monitor metatags":BTree(),
                         "monitor hilos":BTree(),
+                        "metatag_privado":metatag_privado,
                         "nick":nick})
 
+  toggle_monitor_metatag(conn,nick,metatag_privado)
+
   if do_backup_users :
     f=open("claves.backup","w")
     for i,j in conn.get_root()["usuarios"]["usuarios"].items() :
@@ -399,7 +408,7 @@
   else :
     return OpenID+"/" in OpenIDs
 
-def metatag_add(conn,nombre,moderadores=[]) :
+def metatag_add(conn,nombre,moderadores=[],private=False) :
   from durus.btree import BTree
   from durus.persistent_dict import PersistentDict
 
@@ -407,19 +416,31 @@
   metatags=root["metatags"]
   num_mt=metatags["num_metatags"]
   metatags["num_metatags"]+=1
-  metatags["metatags"][num_mt]=PersistentDict({"nombre":nombre,
-                                               "num_hilos":0,
-                                               "TS2hilo":BTree(),
-                                               "moderadores":moderadores,
-                                               "monitor":BTree(),
-                                               "sticky_threads":set(),
-                                              })
-
-  for usuario in root["usuarios"]["usuarios"].itervalues() :
-    usuario["punto de lectura no leidos"][num_mt]=BTree()
+  d=PersistentDict({"nombre":nombre,
+                    "num_hilos":0,
+                    "TS2hilo":BTree(),
+                    "moderadores":moderadores,
+                    "monitor":BTree(),
+                    "sticky_threads":set(),
+                   })
+
+  metatags["metatags"][num_mt]=d
+
+  if not private :
+    d["public"]=True
+    for usuario in root["usuarios"]["usuarios"].itervalues() :
+      usuario["punto de lectura no leidos"][num_mt]=BTree()
 
   return num_mt
 
+def metatag_add_user(conn,metatag,usuario) :
+  root=conn.get_root()
+  usuario=root["usuarios"]["usuarios"][normaliza_nick(usuario)]
+  plnl=usuario["punto de lectura no leidos"]
+  if metatag not in plnl :
+    from durus.btree import BTree
+    plnl[metatag]=BTree()
+
 def get_message_source(conn,num_msg) :
   root=conn.get_root()
   msg=root["mensajes"]["mensajes"].get(num_msg)
@@ -669,8 +690,10 @@
 
   posicion_hilos_no_leidos.clear()
 
-def user_has_metatag_access(conn,usuario,metatag) :
-  return metatag in conn.get_root()["usuarios"]["usuarios"][normaliza_nick(usuario)]["punto de lectura no leidos"]
+def user_has_metatag_access(conn,usuario,metatag,write=False) :
+  usuario=conn.get_root()["usuarios"]["usuarios"][normaliza_nick(usuario)]
+  if write and (metatag==usuario["metatag_privado"]) : return False  # De momento no permitimos mensajes privados
+  return metatag in usuario["punto de lectura no leidos"]
 
 def get_metatags(conn,usuario) :
   metatags=[]
@@ -693,6 +716,7 @@
   u=root["usuarios"]["usuarios"][nick_norm]
 
   if metatag in u["monitor metatags"] :
+    if metatag==u["metatag_privado"] : return None,True
     del u["monitor metatags"][metatag]
     del root["metatags"]["metatags"][metatag]["monitor"][nick_norm]
     return None,False

Modified: trunk/backend/upgrade.py
==============================================================================
--- trunk/backend/upgrade.py	(original)
+++ trunk/backend/upgrade.py	Tue Sep 25 00:26:04 2007
@@ -345,3 +345,59 @@
       del root["usuarios"]["usuarios"]["jcea"]["tz"]
     conn.commit()
 
+  if root["version del foro"]=="2007091306" :
+    print "Actualizando la base de datos: 2007091306 -> 2007092401"
+    root["version del foro"]="2007092401"
+
+    root["config"]["allow_private_messages"]=False
+
+    import database
+    for nick,usuario in root["usuarios"]["usuarios"].items() :
+      metatag_privado=database.metatag_add(conn,"Mensajes privados de "+usuario["nick"],private=True)
+      usuario["metatag_privado"]=metatag_privado
+      database.metatag_add_user(conn,metatag_privado,nick)
+
+    conn.commit()
+
+  if root["version del foro"]=="2007092401" :
+    print "Actualizando la base de datos: 2007092401 -> 2007092402"
+    root["version del foro"]="2007092402"
+
+# Anonymous user has no private messages
+    anonimo=root["usuarios"]["usuarios"][""]
+    del anonimo["punto de lectura no leidos"][anonimo["metatag_privado"]]
+
+    import database
+    for nick,usuario in root["usuarios"]["usuarios"].items() :
+      if not nick : continue  # Anonymous user
+      metatag_privado=usuario["metatag_privado"]
+      if metatag_privado not in usuario["monitor metatags"] :
+        database.toggle_monitor_metatag(conn,nick,metatag_privado)
+
+    conn.commit()
+
+  if root["version del foro"]=="2007092402" :
+    print "Actualizando la base de datos: 2007092402 -> 2007092403"
+    root["version del foro"]="2007092403"
+    privados=set()
+    for usuario in root["usuarios"]["usuarios"].values() :
+      privados.add(usuario["metatag_privado"])
+    for num_metatag,metatag in root["metatags"]["metatags"].items() :
+      if num_metatag not in privados :
+        metatag["public"]=True
+    conn.commit()
+
+  if root["version del foro"]=="2007092403" :
+    print "Actualizando la base de datos: 2007092403 -> 2007092404"
+    root["version del foro"]="2007092404"
+
+    import database
+    for nick,usuario in root["usuarios"]["usuarios"].items() :
+      if "metatag_privado" in usuario : continue
+      metatag_privado=database.metatag_add(conn,"Mensajes privados de "+usuario["nick"],private=True)
+      usuario["metatag_privado"]=metatag_privado
+      database.metatag_add_user(conn,metatag_privado,nick)
+      database.toggle_monitor_metatag(conn,nick,metatag_privado)
+
+    conn.commit()
+

Modified: trunk/frontend-web/url_edit_config.py
==============================================================================
--- trunk/frontend-web/url_edit_config.py	(original)
+++ trunk/frontend-web/url_edit_config.py	Tue Sep 25 00:26:04 2007
@@ -17,6 +17,7 @@
 
   texto=['<tr><td>Number of messages per page on a thread</td><td><input type="text" name="thread_len" size="5" value="%d" /></td></tr>' %globales.thread_len]
   texto.append('<tr><td>Allow anonymous access?</td><td><input type="checkbox" name="allow_anonymous" %s /></td></tr>' % ("CHECKED" if globales.allow_anonymous else ""))
+  texto.append('<tr><td>Allow private messaging between users?</td><td><input type="checkbox" name="allow_private_messages" %s /></td></tr>' % ("CHECKED" if globales.allow_private_messages else ""))
   texto.append('<tr><td>Simultaneous HTTP connections</td><td><input type="text" name="http_max_clients" size="5" value="%d" /></td></tr>' %globales.http_max_clients)
   texto.append('<tr><td>Specify initial HTTP timeout</td><td><input type="text" name="http_initial_timeout" size="5" value="%d" /></td></tr>' %globales.http_initial_timeout)
   texto.append('<tr><td>Keep-alive timeout<br/>(if zero or False, no keep-alive support)</td><td><input type="text" name="http_keep_alive_timeout" size="5" value="%d" /></td></tr>' %globales.http_keep_alive_timeout)

Modified: trunk/frontend-web/url_edit_metatags.py
==============================================================================
--- trunk/frontend-web/url_edit_metatags.py	(original)
+++ trunk/frontend-web/url_edit_metatags.py	Tue Sep 25 00:26:04 2007
@@ -17,12 +17,13 @@
   root=conn.get_root()
 
   texto=['<tr><th colspan="2">Cambiar los nombres de los metatags</th><td>Moderadores</td></tr>']
-  for i in root["metatags"]["metatags"].items() :
-    nombre=i[1]["nombre"]
-    moderadores=",".join(i[1]["moderadores"])
+  for num_metatag,metatag in root["metatags"]["metatags"].items() :
+    if "public" not in metatag : continue
+    nombre=metatag["nombre"]
+    moderadores=",".join(metatag["moderadores"])
     texto.append('<tr><td>%s</td><td><input type="text" name="metatag%d" size="60" value="" /></td> \
                       <td><input type="text" name="moderators%d" size="40" value="%s" /></td></tr>'
-                      % (nombre,i[0],i[0],moderadores))
+                      % (nombre,num_metatag,num_metatag,moderadores))
 
   texto.append('<tr><td>&nbsp;</td><td>&nbsp;</td></tr>')
 



More information about the cpif mailing list