Changeset 2109 for trunk/loreality/loreality/controllers/messager.py
- Timestamp:
- 07/12/10 14:48:12 (23 months ago)
- File:
-
- 1 edited
-
trunk/loreality/loreality/controllers/messager.py (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/loreality/loreality/controllers/messager.py
r2108 r2109 22 22 23 23 class MessagerController(BaseController): 24 formfields = [ 25 FormField(name="subject" ,t_name=_("subject") ,formtype="text"), 26 FormField(name="text" ,t_name=_("text") ,formtype="textarea"), 27 ] 24 28 25 def index(self): 29 #-------------------------------------------------------------- 30 def _get_pilots(self): 31 pilot_q = meta.Session.query(model.Pilot) 32 33 me = pilot_q.filter_by(login=request.environ['REMOTE_USER']).first() 34 pilots = pilot_q.all() 35 names = [] 36 for p in pilots: 37 if p is not me: 38 names.append( [str(p.id), p.name] ) 39 return names 40 41 #-------------------------------------------------------------- 42 def index(self, opened=None): 26 43 pilot_q = meta.Session.query(model.Pilot) 27 44 pilot = pilot_q.filter_by(login=request.environ['REMOTE_USER']).first() … … 30 47 31 48 c.messages = pilot.messages 49 c.message_open = opened 32 50 return render('/derived/page/messager.html') 51 #-------------------------------------------------------------- 52 def open(self, id): 53 return self.index(opened=uuid.UUID(id)) 54 #-------------------------------------------------------------- 55 def delete(self, id): 56 message_q = meta.Session.query(model.Message) 57 message = message_q.filter_by(id=uuid.UUID(id)).first() 58 if message is None: 59 abort(404) 60 if message.unread: 61 pilot = message.pilot 62 if pilot: 63 pilot.messages_unread -= 1 64 65 meta.Session.delete( message ) 66 meta.Session.commit() 67 return self.index() 68 #-------------------------------------------------------------- 69 def create(self, id=None, values=None, errors=None ): 70 current_pilot = None 71 if id is None: 72 #- Make new message 73 pilot_q = meta.Session.query(model.Pilot) 74 pilot = pilot_q.filter_by(login=request.environ['REMOTE_USER']).first() 75 if pilot is None: 76 return " pilot" 77 abort(404) 78 79 message = model.Message() 80 message.from_ = "" 81 message.subject = "" 82 message.text = "" 83 message.from_ = pilot.id 84 meta.Session.add( message ) 85 meta.Session.commit() 86 else: 87 message_q = meta.Session.query(model.Message) 88 message = message_q.filter_by(id=uuid.UUID(id)).first() 89 if message is None: 90 abort(404) 91 current_pilot = str(message.from_) 92 #- Here we must have a message 93 c.message = message 94 95 if not values: values = {} 96 values['subject'] = message.subject 97 values['Pilot'] = current_pilot 98 99 c.formfields = self.formfields 100 c.available_pilots = self._get_pilots() 101 102 html = render('/derived/page/messager_edit.html') 103 return htmlfill.render(html, defaults=values, errors=errors) 104 #-------------------------------------------------------------- 105 def process(self, id=None): 106 action = request.params.getone('action') 107 values = dict(request.params) 108 # Don't use the values field for repopulation 109 del values['action'] 110 if action=='Send': 111 # Assume we are trying to save the form 112 schema = MessageForm() 113 try: 114 result = schema.to_python(dict(request.params), c) 115 except Invalid, e: 116 return self.create( 117 id=id, 118 values=values, 119 errors=variabledecode.variable_encode( 120 e.unpack_errors() or {}, 121 add_repetitions=False 122 ) 123 ) 124 else: 125 message_q = meta.Session.query(model.Message) 126 message = message_q.filter_by(id=uuid.UUID(id)).first() 127 if message is None: 128 abort(404) 129 130 for f in self.formfields: 131 setattr(message, f.name, result[f.name] ) 132 133 pilot_q = meta.Session.query(model.Pilot) 134 pilotids = request.params.getall('Pilot') 135 for pilotid in pilotids: 136 pilot = pilot_q.filter_by(id=uuid.UUID(pilotid)).first() 137 msg = message.copy() 138 msg.from_ = pilot.id 139 pilot.send_message( msg ) 140 meta.Session.commit() 141 return self.index() 142 else: 143 raise Exception('Invalid action %s'%action)
Note: See TracChangeset
for help on using the changeset viewer.
