Ignore:
Timestamp:
07/12/10 14:48:12 (23 months ago)
Author:
dart
Message:

LoReality?:
o Messager is working

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/loreality/loreality/controllers/messager.py

    r2108 r2109  
    2222 
    2323class MessagerController(BaseController): 
     24    formfields = [ 
     25            FormField(name="subject"       ,t_name=_("subject")       ,formtype="text"), 
     26            FormField(name="text"          ,t_name=_("text")          ,formtype="textarea"), 
     27            ] 
    2428 
    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): 
    2643        pilot_q = meta.Session.query(model.Pilot) 
    2744        pilot = pilot_q.filter_by(login=request.environ['REMOTE_USER']).first() 
     
    3047 
    3148        c.messages = pilot.messages  
     49        c.message_open = opened 
    3250        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.