1- #$Id: actions.py,v 1.16 2004-03-26 00:46:33 richard Exp $
1+ #$Id: actions.py,v 1.17 2004-03-26 04:50:50 richard Exp $
22
33import re , cgi , StringIO , urllib , Cookie , time , random
44
@@ -134,14 +134,36 @@ def handle(self, wcre=re.compile(r'[\s,]+')):
134134 # query string.
135135 url = req .indexargs_href ('' , {})[1 :]
136136
137- # handle editing an existing query
138- try :
139- qid = self .db .query .lookup (queryname )
140- self .db .query .set (qid , klass = self .classname , url = url )
141- except KeyError :
142- # create a query
143- qid = self .db .query .create (name = queryname ,
144- klass = self .classname , url = url )
137+ key = self .db .query .getkey ()
138+ if key :
139+ # edit the old way, only one query per name
140+ try :
141+ qid = self .db .query .lookup (queryname )
142+ self .db .query .set (qid , klass = self .classname , url = url )
143+ except KeyError :
144+ # create a query
145+ qid = self .db .query .create (name = queryname ,
146+ klass = self .classname , url = url )
147+ else :
148+ # edit the new way, query name not a key any more
149+ # see if we match an existing private query
150+ uid = self .db .getuid ()
151+ qids = self .db .query .filter ({}, {'name' : queryname ,
152+ 'private_for' : uid })
153+ if not qids :
154+ # ok, so there's not a private query for the current user
155+ # - see if there's a public one created by them
156+ qids = self .db .query .filter ({}, {'name' : queryname ,
157+ 'private_for' : - 1 , 'creator' : uid })
158+
159+ if qids :
160+ # edit query
161+ qid = qids [0 ]
162+ self .db .query .set (qid , klass = self .classname , url = url )
163+ else :
164+ # create a query
165+ qid = self .db .query .create (name = queryname ,
166+ klass = self .classname , url = url , private_for = uid )
145167
146168 # and add it to the user's query multilink
147169 queries = self .db .user .get (self .userid , 'queries' )
@@ -435,23 +457,21 @@ def _createnode(self, cn, props):
435457 return cl .create (** props )
436458
437459class EditItemAction (_EditAction ):
438- def lastUserActivity (self ):
460+ def lastUserActvity (self ):
439461 if self .form .has_key (':lastactivity' ):
440- return date .Date (self .form [':lastactivity' ].value )
462+ user_actvity = date .Date (self .form [':lastactivity' ].value )
441463 elif self .form .has_key ('@lastactivity' ):
442- return date .Date (self .form ['@lastactivity' ].value )
464+ user_actvity = date .Date (self .form ['@lastactivity' ].value )
443465 else :
444466 return None
445467
446468 def lastNodeActivity (self ):
447469 cl = getattr (self .client .db , self .classname )
448- return cl .get (self .nodeid , 'activity' )
470+ node_activity = cl .get (self .nodeid , 'activity' )
449471
450- def detectCollision (self , userActivity , nodeActivity ):
451- # Result from lastUserActivity may be None. If it is, assume there's no
452- # conflict, or at least not one we can detect.
453- if userActivity :
454- return userActivity < nodeActivity
472+ def detectCollision (self , user_actvity , node_activity ):
473+ if user_activity :
474+ return user_activity < node_activity
455475
456476 def handleCollision (self ):
457477 self .client .template = 'collision'
@@ -462,7 +482,9 @@ def handle(self):
462482 See parsePropsFromForm and _editnodes for special variables.
463483
464484 """
465- if self .detectCollision (self .lastUserActivity (), self .lastNodeActivity ()):
485+ user_activity = self .lastUserActvity ()
486+ if user_activity and self .detectCollision (user_activity ,
487+ self .lastNodeActivity ()):
466488 self .handleCollision ()
467489 return
468490
@@ -488,7 +510,7 @@ def handle(self):
488510 url += '?@ok_message=%s&@template=%s' % (urllib .quote (message ),
489511 urllib .quote (self .template ))
490512 if self .nodeid is None :
491- req = templating .HTMLRequest (self )
513+ req = templating .HTMLRequest (self . client )
492514 url += '&' + req .indexargs_href ('' , {})[1 :]
493515 raise Redirect , url
494516
0 commit comments