Changeset 2109


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

LoReality?:
o Messager is working

Location:
trunk/loreality
Files:
2 added
13 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) 
  • trunk/loreality/loreality/controllers/mission.py

    r2106 r2109  
    2121import uuid 
    2222from pylons.i18n.translation import _, ungettext 
    23 class MisField: 
    24     name = "" 
    25     formtype = "" 
    26     def __init__( self, **kwargs): 
    27         self.__dict__.update( kwargs ) 
    28  
    29  
    3023class MissionController(BaseController): 
    31     misfields = [ 
    32             MisField(name="name"          ,t_name=_("name")          ,formtype="text"), 
    33             MisField(name="description"   ,t_name=_("description")   ,formtype="text"), 
    34             MisField(name="date"          ,t_name=_("date")          ,formtype="text"), 
    35             MisField(name="situation"     ,t_name=_("situation")     ,formtype="textarea"), 
    36             MisField(name="objectives"    ,t_name=_("objectives")    ,formtype="textarea"), 
    37             MisField(name="flightplan"    ,t_name=_("flight plan")   ,formtype="textarea"), 
    38             MisField(name="threat"        ,t_name=_("threat")        ,formtype="textarea"), 
    39             MisField(name="others"        ,t_name=_("others")        ,formtype="textarea") 
     24    formfields = [ 
     25            FormField(name="name"          ,t_name=_("name")          ,formtype="text"), 
     26            FormField(name="description"   ,t_name=_("description")   ,formtype="text"), 
     27            FormField(name="date"          ,t_name=_("date")          ,formtype="text"), 
     28            FormField(name="situation"     ,t_name=_("situation")     ,formtype="textarea"), 
     29            FormField(name="objectives"    ,t_name=_("objectives")    ,formtype="textarea"), 
     30            FormField(name="flightplan"    ,t_name=_("flight plan")   ,formtype="textarea"), 
     31            FormField(name="threat"        ,t_name=_("threat")        ,formtype="textarea"), 
     32            FormField(name="others"        ,t_name=_("others")        ,formtype="textarea") 
    4033            ] 
    4134    #-------------------------------------------------------------- 
     
    6053        c.heading = mission.name 
    6154        c.mission = mission 
    62         c.misfields = self.misfields 
     55        c.formfields = self.formfields 
    6356        c.available_pilots = self._get_pilots(mission.pilots) 
    6457 
     
    9285                    abort(404) 
    9386 
    94                 for f in self.misfields: 
     87                for f in self.formfields: 
    9588                    setattr(mission, f.name, result[f.name] ) 
    9689 
     
    112105        c.heading = "Edit %s"%mission.name 
    113106        c.mission = mission 
    114         c.misfields = self.misfields 
     107        c.formfields = self.formfields 
    115108        c.available_pilots = self._get_pilots(mission.pilots) 
    116109 
    117110        if not values: values = {} 
    118111 
    119         for f in self.misfields: 
     112        for f in self.formfields: 
    120113            values[f.name] = getattr(mission, f.name ) 
    121114 
  • trunk/loreality/loreality/controllers/squadron.py

    r2106 r2109  
    2222import uuid 
    2323 
    24 class SquField: 
    25     name = "" 
    26     formtype = "" 
    27     def __init__( self, **kwargs): 
    28         self.__dict__.update( kwargs ) 
    29  
    30  
    3124class SquadronController(BaseController): 
    32     squfields = [ 
    33             SquField(name="name"          ,t_name=_("name")          ,formtype="text"), 
    34             SquField(name="plane"         ,t_name=_("plane")   ,formtype="text"), 
     25    formfields = [ 
     26            FormField(name="name"          ,t_name=_("name")          ,formtype="text"), 
     27            FormField(name="plane"         ,t_name=_("plane")   ,formtype="text"), 
    3528            ] 
    3629    #-------------------------------------------------------------- 
     
    4942        c.heading = _("Squadrons") 
    5043        c.squadrons = squadrons 
    51         c.squfields = self.squfields 
     44        c.formfields = self.formfields 
    5245        c.available_pilots = self._get_pilots() 
    5346 
     
    6659        c.heading = squadron.name 
    6760        c.squadron = squadron 
    68         c.squfields = self.squfields 
     61        c.formfields = self.formfields 
    6962        c.available_pilots = self._get_pilots(squadron.pilots) 
    7063 
     
    9790                    abort(404) 
    9891 
    99                 for f in self.squfields: 
     92                for f in self.formfields: 
    10093                    setattr(squadron, f.name, result[f.name] ) 
    10194 
     
    118111        c.heading = "Edit %s"%squadron.name 
    119112        c.squadron = squadron 
    120         c.squfields = self.squfields 
     113        c.formfields = self.formfields 
    121114        c.available_pilots = self._get_pilots(squadron.pilots) 
    122115 
    123116        if not values: values = {} 
    124117 
    125         for f in self.squfields: 
     118        for f in self.formfields: 
    126119            values[f.name] = getattr(squadron, f.name ) 
    127120 
  • trunk/loreality/loreality/lib/helpers.py

    r2102 r2109  
    99from webhelpers.html.tags import * 
    1010from loreality.lib import auth 
     11from loreality.lib import msg 
    1112from webhelpers.html.tags import stylesheet_link 
    1213 
  • trunk/loreality/loreality/model/databases.py

    r2108 r2109  
    99 
    1010from loreality.model import meta 
    11 import uuid 
     11import uuid, datetime 
    1212metadata = schema.MetaData() 
    1313 
     
    9393    __tablename__ = 'messages' 
    9494    id = sa.Column(UUID(), primary_key=True,default=uuid.uuid4) 
    95     title = sa.Column(sa.types.String, nullable=False) 
    96     from_ = sa.Column(sa.types.String) 
     95    subject = sa.Column(sa.types.String, nullable=False) 
     96    from_ = sa.Column(UUID()) 
    9797    text = sa.Column(sa.types.String) 
    98     date = sa.Column(sa.types.String) 
     98    date = sa.Column(sa.types.DateTime) 
     99    unread = sa.Column( sa.types.Boolean ) 
    99100    pilot_id = sa.Column(UUID(), ForeignKey('pilots.id')) 
     101 
     102    def __init__(self): 
     103        self.unread = True 
     104 
     105    def copy(self): 
     106        msg = Message() 
     107        msg.subject = self.subject 
     108        msg.from_ = self.from_ 
     109        msg.text = self.text 
     110        msg.date = self.date 
     111 
     112        meta.Session.add(msg) 
     113        return msg 
    100114#---------------------------------------------------------------- 
    101115class Pilot(Base): 
     
    107121 
    108122    messages = orm.relation("Message", backref="pilot") 
     123    messages_unread = sa.Column(sa.types.Integer, nullable=False) 
    109124 
    110125    def __init__( self, name, login ): 
    111126        self.name = name 
    112127        self.login = login 
     128        self.messages_unread = 0 
     129 
     130    def send_message( self, message ): 
     131        message.date = datetime.datetime.now() 
     132        self.messages.append( message ) 
     133        if message.unread: 
     134            self.messages_unread += 1 
  • trunk/loreality/loreality/model/form.py

    r2106 r2109  
    66from formencode.foreach import ForEach 
    77from formencode.api import NoDefault 
     8 
     9class FormField: 
     10    name = "" 
     11    formtype = "" 
     12    def __init__( self, **kwargs): 
     13        self.__dict__.update( kwargs ) 
    814 
    915class CampaignNameForm(Schema): 
     
    5763    plane =  String() 
    5864 
     65class MessageForm(Schema): 
     66    allow_extra_fields = True 
     67    filter_extra_fields = True 
     68 
     69    pre_validators = [variabledecode.NestedVariables()] 
     70    subject =  String(not_empty=True) 
     71    # pilots = ForEach( Pilot()) 
     72    text =  String() 
     73 
  • trunk/loreality/loreality/public/style.css

    r2108 r2109  
    5757 
    5858/* MESSAGER */ 
    59 .message, .from, .title, .date{ 
    60  width: 80%; 
     59div.message_box { 
     60 display: right; 
     61 font-size: x-small; 
     62} 
     63div.message { 
    6164 display: inline; 
    6265 border: solid black 1px; 
     66 width: 80%; 
    6367 background: #AAAAAA; 
     68 font-size: small; 
    6469} 
    65 .date{ 
    66     width: 20%; 
     70 
     71div.message span#subject { 
     72    font-weight: bold; 
     73    font-size: large; 
     74    margin-right: 30px; 
    6775} 
    68 .from{ 
    69     width: 30%; 
     76div.message_open{ 
     77 width: 80%; 
     78 border: solid black 1px; 
     79 background: #ffffff; 
     80 color: #000000; 
     81 margin-bottom: 20px; 
    7082} 
    71 .title{ 
    72     width: 50%; 
     83div.message_open span{ 
     84 color: red; 
    7385} 
     86 
  • trunk/loreality/loreality/templates/base/index.html

    r2105 r2109  
    2020                ${self.heading()} 
    2121            </div> 
     22                % if h.auth.authorized(h.auth.is_valid_user) and not (request.urlvars['controller'] == 'account' and request.urlvars['action'] == 'signout'): 
     23            <div id="message_box"> 
     24                You have <a href="${h.url_for(controller='messager', action='index')}">${h.msg.nb_messages(request.environ['REMOTE_USER'])} new messages</a>. 
     25            </div> 
     26                % endif 
    2227            <div id="sign"> 
    2328                % if h.auth.authorized(h.auth.is_valid_user) and not (request.urlvars['controller'] == 'account' and request.urlvars['action'] == 'signout'): 
  • trunk/loreality/loreality/templates/derived/page/messager.html

    r2108 r2109  
    33<h2>Messager</h2> 
    44% for message in c.messages: 
     5% if message.id == c.message_open: 
     6<div class="message_open"> 
     7% else: 
    58<div class="message"> 
    6     <span class="from">${message.from_}</span> 
    7     <span class="date">${message.date}</span> 
    8     <span class="title">${message.title}</span> 
     9% endif 
     10% if message.id == c.message_open: 
     11<span><a href=${h.url_for(controller='messager', action='index',id=message.id) } class="action">${h.msg.get_from(message)} | ${message.date.strftime("%c")}  <span id="subject">${message.subject}</span></a></span> 
     12    <div id="text">${message.text}</div> 
     13    <a href=${h.url_for(controller='messager', action='create',id=message.id) } class="action">[Reply]</a> 
     14% else: 
     15<span><a href=${h.url_for(controller='messager', action='open',id=message.id) } class="action">${h.msg.get_from(message)} | ${message.date.strftime("%c")} | <span id="subject"> ${message.subject}</span></a></span> 
     16% endif 
     17    <a href=${h.url_for(controller='messager', action='delete',id=message.id) } class="action">[Delete]</a> 
    918</div> 
     19<br/> 
    1020% endfor 
     21 
     22<a href=${h.url_for(controller='messager', action='create', id=None)}>[New message]</a> 
     23 
  • trunk/loreality/loreality/templates/derived/page/mission_edit.html

    r2106 r2109  
    88    ${h.form(h.url_for(controller='mission', action='process', id=c.mission.id))} 
    99 
    10     % for f in c.misfields: 
     10    % for f in c.formfields: 
    1111    <label for="${f.name}">${f.t_name.capitalize()}</label><br /> 
    1212    ${eval("h."+ f.formtype +"(name='" + f.name+ "')")}<br /> 
     
    1414 
    1515    ${h.submit(name="action", value="Modify")} 
    16     </fieldset> 
    1716    ${h.end_form()} 
    1817%endif 
  • trunk/loreality/loreality/templates/derived/page/squadron_edit.html

    r2106 r2109  
    88    ${h.form(h.url_for(controller='squadron', action='process', id=c.squadron.id))} 
    99 
    10     % for f in c.squfields: 
     10    % for f in c.formfields: 
    1111    <label for="${f.name}">${f.t_name.capitalize()}</label><br /> 
    1212    ${eval("h."+ f.formtype +"(name='" + f.name+ "')")}<br /> 
  • trunk/loreality/loreality/websetup.py

    r2108 r2109  
    4141 
    4242    log.info("Adding mission...") 
     43    #---------------- 
    4344    cam = Campaign("My Campaign") 
    4445 
     46    #---------------- 
    4547    mis = Mission("mission 1") 
    4648    meta.Session.add(mis) 
    4749    cam.missions.append( mis ) 
    4850 
     51    #---------------- 
    4952    squ = Squadron("12th") 
    5053    squ.plane = "F-15C" 
    5154    meta.Session.add( squ ) 
    5255 
    53     pil = Pilot("DArt", "DArt") 
    54     meta.Session.add( pil ) 
    55     mis.pilots.append( pil ) 
    56     squ.pilots.append( pil ) 
     56    #---------------- 
     57    dart = Pilot("DArt", "DArt") 
     58    meta.Session.add( dart ) 
     59    mis.pilots.append( dart ) 
     60    squ.pilots.append( dart ) 
    5761 
     62    #---------------- 
     63    tolteque = Pilot("Tolteque", "Tolteque") 
     64    meta.Session.add( tolteque ) 
     65    mis.pilots.append( tolteque ) 
     66    squ.pilots.append( tolteque ) 
     67 
     68    #---------------- 
     69    squ = Squadron("92nd") 
     70    squ.plane = "Su-27" 
     71    meta.Session.add( squ ) 
     72 
     73    #---------------- 
     74    majorbug = Pilot("MajorBug", "MBug") 
     75    meta.Session.add( majorbug ) 
     76    mis.pilots.append( majorbug ) 
     77    squ.pilots.append( majorbug ) 
     78 
     79    #---------------- 
     80    mis = Mission("mission 2") 
     81    meta.Session.add(mis) 
     82    mis.pilots.append( majorbug ) 
     83    cam.missions.append( mis ) 
     84 
     85    #---------------- 
     86    meta.Session.commit() 
     87    #---------------- 
    5888    msg = Message() 
    59     msg.from_ = "Tolteque" 
     89    msg.from_ = tolteque.id 
    6090    msg.date = "23/12/2010" 
    61     msg.title = "Info" 
     91    msg.subject = "Info" 
    6292    msg.text = """ 
    6393    C'est super 
    6494    """ 
    6595    meta.Session.add( msg ) 
    66     pil.messages.append( msg ) 
     96    dart.send_message( msg ) 
    6797 
    68     pil = Pilot("Tolteque", "Tolteque") 
    69     meta.Session.add( pil ) 
    70     mis.pilots.append( pil ) 
    71     squ.pilots.append( pil ) 
     98    #---------------- 
     99    msg = Message() 
     100    msg.from_ = majorbug.id 
     101    msg.date = "24/12/2010" 
     102    msg.subject = "Joyeux" 
     103    msg.text = """ 
     104    Joyeux Noel 
     105    et bonne annee 
     106    """ 
     107    meta.Session.add( msg ) 
     108    dart.send_message( msg ) 
     109    #---------------- 
     110    msg = Message() 
     111    msg.from_ = tolteque.id 
     112    msg.date = "24/12/2010" 
     113    msg.subject = "Joyeux aussi" 
     114    msg.text = """ 
     115    Joyeux Noel 
     116    et bonne annee aussi 
     117    """ 
     118    meta.Session.add( msg ) 
     119    dart.send_message( msg ) 
    72120 
    73     squ = Squadron("92nd") 
    74     squ.plane = "Su-27" 
    75     meta.Session.add( squ ) 
    76121 
    77     pil = Pilot("MajorBug", "MBug") 
    78     meta.Session.add( pil ) 
    79     mis.pilots.append( pil ) 
    80     squ.pilots.append( pil ) 
    81122 
    82     mis = Mission("mission 2") 
    83     meta.Session.add(mis) 
    84     mis.pilots.append( pil ) 
    85     cam.missions.append( mis ) 
    86  
     123    #---------------- 
    87124    meta.Session.commit() 
    88125    log.info("Successfully set up.") 
Note: See TracChangeset for help on using the changeset viewer.