1515# BASIS, AND THERE IS NO OBLIGATION WHATSOEVER TO PROVIDE MAINTENANCE,
1616# SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
1717#
18- # $Id: cgi_client.py,v 1.81 2001-12-12 23:55:00 richard Exp $
18+ # $Id: cgi_client.py,v 1.82 2001-12-15 19:24:39 rochecompaan Exp $
1919
2020__doc__ = """
2121WWW request handler (also used in the stand-alone server).
@@ -314,32 +314,10 @@ def shownode(self, message=None):
314314 try :
315315 props , changed = parsePropsFromForm (self .db , cl , self .form ,
316316 self .nodeid )
317-
318- # set status to chatting if 'unread' or 'resolved'
319- if not changed .has_key ('status' ):
320- try :
321- # determine the id of 'unread','resolved' and 'chatting'
322- unread_id = self .db .status .lookup ('unread' )
323- resolved_id = self .db .status .lookup ('resolved' )
324- chatting_id = self .db .status .lookup ('chatting' )
325- except KeyError :
326- pass
327- else :
328- if (not props .has_key ('status' ) or
329- props ['status' ] == unread_id or
330- props ['status' ] == resolved_id ):
331- props ['status' ] = chatting_id
332- changed ['status' ] = chatting_id
333-
334- # get the change note
335- change_note = cl .generateChangeNote (self .nodeid , changed )
336-
337- # make the changes
338- cl .set (self .nodeid , ** props )
339-
340- # handle linked nodes and change message generation
341- self ._post_editnode (self .nodeid , change_note )
342-
317+ # make changes to the node
318+ self ._changenode (props )
319+ # handle linked nodes
320+ self ._post_editnode (self .nodeid )
343321 # and some nice feedback for the user
344322 if changed :
345323 message = _ ('%(changes)s edited ok' )% {'changes' :
@@ -455,37 +433,52 @@ def _createnode(self):
455433 pass
456434 else :
457435 props ['status' ] = unread_id
436+ # add assignedto to the nosy list
437+ if props .has_key ('assignedto' ):
438+ assignedto_id = props ['assignedto' ]
439+ if props .has_key ('nosy' ) and not assignedto_id in props ['nosy' ]:
440+ props ['nosy' ].append (assignedto_id )
441+ else :
442+ props ['nosy' ] = [assignedto_id ]
443+ # check for messages
444+ message = self ._handle_message ()
445+ if message :
446+ props ['messages' ] = [message ]
447+ # create the node and return it's id
458448 return cl .create (** props )
459449
460- def _post_editnode (self , nid , change_note = '' ):
461- ''' do the linking and message sending part of the node creation
450+ def _changenode (self , props ):
451+ ''' change the node based on the contents of the form
462452 '''
463- cn = self .classname
464- cl = self .db .classes [cn ]
465- # link if necessary
466- keys = self .form .keys ()
467- for key in keys :
468- if key == ':multilink' :
469- value = self .form [key ].value
470- if type (value ) != type ([]): value = [value ]
471- for value in value :
472- designator , property = value .split (':' )
473- link , nodeid = roundupdb .splitDesignator (designator )
474- link = self .db .classes [link ]
475- value = link .get (nodeid , property )
476- value .append (nid )
477- link .set (nodeid , ** {property : value })
478- elif key == ':link' :
479- value = self .form [key ].value
480- if type (value ) != type ([]): value = [value ]
481- for value in value :
482- designator , property = value .split (':' )
483- link , nodeid = roundupdb .splitDesignator (designator )
484- link = self .db .classes [link ]
485- link .set (nodeid , ** {property : nid })
486-
487- # handle file attachments
488- files = cl .get (nid , 'files' )
453+ cl = self .db .classes [self .classname ]
454+ # set status to chatting if 'unread' or 'resolved'
455+ try :
456+ # determine the id of 'unread','resolved' and 'chatting'
457+ unread_id = self .db .status .lookup ('unread' )
458+ resolved_id = self .db .status .lookup ('resolved' )
459+ chatting_id = self .db .status .lookup ('chatting' )
460+ except KeyError :
461+ pass
462+ else :
463+ if (props ['status' ] == unread_id or props ['status' ] == resolved_id ):
464+ props ['status' ] = chatting_id
465+ # add assignedto to the nosy list
466+ if props .has_key ('assignedto' ):
467+ assignedto_id = props ['assignedto' ]
468+ if not assignedto_id in props ['nosy' ]:
469+ props ['nosy' ].append (assignedto_id )
470+ # create the message
471+ message = self ._handle_message ()
472+ if message :
473+ props ['messages' ] = cl .get (self .nodeid , 'messages' ) + [message ]
474+ # make the changes
475+ cl .set (self .nodeid , ** props )
476+
477+ def _handle_message (self ):
478+ ''' generate and edit message '''
479+
480+ # handle file attachments
481+ files = []
489482 if self .form .has_key ('__file' ):
490483 file = self .form ['__file' ]
491484 if file .filename :
@@ -495,14 +488,10 @@ def _post_editnode(self, nid, change_note=''):
495488 # create the new file entry
496489 files .append (self .db .file .create (type = mime_type ,
497490 name = file .filename , content = file .file .read ()))
498- # and save the reference
499- cl .set (nid , files = files )
500-
501- #
502- # generate an edit message
503- #
504491
505492 # we don't want to do a message if none of the following is true...
493+ cn = self .classname
494+ cl = self .db .classes [self .classname ]
506495 props = cl .getprops ()
507496 note = None
508497 if self .form .has_key ('__note' ):
@@ -513,7 +502,7 @@ def _post_editnode(self, nid, change_note=''):
513502 return
514503 if not props ['messages' ].classname == 'msg' :
515504 return
516- if not (len ( cl . get ( nid , 'nosy' , []) ) or note ):
505+ if not (self . form . has_key ( 'nosy' ) or note ):
517506 return
518507
519508 # handle the note
@@ -528,20 +517,41 @@ def _post_editnode(self, nid, change_note=''):
528517 ' the web.\n ' )% {'classname' : cn }
529518 m = [summary ]
530519
531- # append the change note
532- if change_note :
533- m .append (change_note )
534-
535520 # now create the message
536521 content = '\n ' .join (m )
537522 message_id = self .db .msg .create (author = self .getuid (),
538523 recipients = [], date = date .Date ('.' ), summary = summary ,
539524 content = content , files = files )
540525
541526 # update the messages property
542- messages = cl .get (nid , 'messages' )
543- messages .append (message_id )
544- cl .set (nid , messages = messages , files = files )
527+ return message_id
528+
529+ def _post_editnode (self , nid ):
530+ ''' do the linking part of the node creation
531+ '''
532+ cn = self .classname
533+ cl = self .db .classes [cn ]
534+ # link if necessary
535+ keys = self .form .keys ()
536+ for key in keys :
537+ if key == ':multilink' :
538+ value = self .form [key ].value
539+ if type (value ) != type ([]): value = [value ]
540+ for value in value :
541+ designator , property = value .split (':' )
542+ link , nodeid = roundupdb .splitDesignator (designator )
543+ link = self .db .classes [link ]
544+ value = link .get (nodeid , property )
545+ value .append (nid )
546+ link .set (nodeid , ** {property : value })
547+ elif key == ':link' :
548+ value = self .form [key ].value
549+ if type (value ) != type ([]): value = [value ]
550+ for value in value :
551+ designator , property = value .split (':' )
552+ link , nodeid = roundupdb .splitDesignator (designator )
553+ link = self .db .classes [link ]
554+ link .set (nodeid , ** {property : nid })
545555
546556 def newnode (self , message = None ):
547557 ''' Add a new node to the database.
@@ -574,7 +584,7 @@ def newnode(self, message=None):
574584 props = {}
575585 try :
576586 nid = self ._createnode ()
577- # handle linked nodes and change message generation
587+ # handle linked nodes
578588 self ._post_editnode (nid )
579589 # and some nice feedback for the user
580590 message = _ ('%(classname)s created ok' )% {'classname' : cn }
@@ -1090,6 +1100,9 @@ def parsePropsFromForm(db, cl, form, nodeid=0):
10901100
10911101#
10921102# $Log: not supported by cvs2svn $
1103+ # Revision 1.81 2001/12/12 23:55:00 richard
1104+ # Fixed some problems with user editing
1105+ #
10931106# Revision 1.80 2001/12/12 23:27:14 richard
10941107# Added a Zope frontend for roundup.
10951108#
0 commit comments