Changeset 2109
- Timestamp:
- 07/12/10 14:48:12 (19 months ago)
- Location:
- trunk/loreality
- Files:
-
- 2 added
- 13 edited
-
development.db (modified) (previous)
-
loreality/controllers/messager.py (modified) (2 diffs)
-
loreality/controllers/mission.py (modified) (4 diffs)
-
loreality/controllers/squadron.py (modified) (5 diffs)
-
loreality/lib/helpers.py (modified) (1 diff)
-
loreality/lib/msg.py (added)
-
loreality/model/databases.py (modified) (3 diffs)
-
loreality/model/form.py (modified) (2 diffs)
-
loreality/public/style.css (modified) (1 diff)
-
loreality/templates/base/index.html (modified) (1 diff)
-
loreality/templates/derived/page/messager.html (modified) (1 diff)
-
loreality/templates/derived/page/messager_edit.html (added)
-
loreality/templates/derived/page/mission_edit.html (modified) (2 diffs)
-
loreality/templates/derived/page/squadron_edit.html (modified) (1 diff)
-
loreality/websetup.py (modified) (1 diff)
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) -
trunk/loreality/loreality/controllers/mission.py
r2106 r2109 21 21 import uuid 22 22 from pylons.i18n.translation import _, ungettext 23 class MisField:24 name = ""25 formtype = ""26 def __init__( self, **kwargs):27 self.__dict__.update( kwargs )28 29 30 23 class 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") 40 33 ] 41 34 #-------------------------------------------------------------- … … 60 53 c.heading = mission.name 61 54 c.mission = mission 62 c. misfields = self.misfields55 c.formfields = self.formfields 63 56 c.available_pilots = self._get_pilots(mission.pilots) 64 57 … … 92 85 abort(404) 93 86 94 for f in self. misfields:87 for f in self.formfields: 95 88 setattr(mission, f.name, result[f.name] ) 96 89 … … 112 105 c.heading = "Edit %s"%mission.name 113 106 c.mission = mission 114 c. misfields = self.misfields107 c.formfields = self.formfields 115 108 c.available_pilots = self._get_pilots(mission.pilots) 116 109 117 110 if not values: values = {} 118 111 119 for f in self. misfields:112 for f in self.formfields: 120 113 values[f.name] = getattr(mission, f.name ) 121 114 -
trunk/loreality/loreality/controllers/squadron.py
r2106 r2109 22 22 import uuid 23 23 24 class SquField:25 name = ""26 formtype = ""27 def __init__( self, **kwargs):28 self.__dict__.update( kwargs )29 30 31 24 class 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"), 35 28 ] 36 29 #-------------------------------------------------------------- … … 49 42 c.heading = _("Squadrons") 50 43 c.squadrons = squadrons 51 c. squfields = self.squfields44 c.formfields = self.formfields 52 45 c.available_pilots = self._get_pilots() 53 46 … … 66 59 c.heading = squadron.name 67 60 c.squadron = squadron 68 c. squfields = self.squfields61 c.formfields = self.formfields 69 62 c.available_pilots = self._get_pilots(squadron.pilots) 70 63 … … 97 90 abort(404) 98 91 99 for f in self. squfields:92 for f in self.formfields: 100 93 setattr(squadron, f.name, result[f.name] ) 101 94 … … 118 111 c.heading = "Edit %s"%squadron.name 119 112 c.squadron = squadron 120 c. squfields = self.squfields113 c.formfields = self.formfields 121 114 c.available_pilots = self._get_pilots(squadron.pilots) 122 115 123 116 if not values: values = {} 124 117 125 for f in self. squfields:118 for f in self.formfields: 126 119 values[f.name] = getattr(squadron, f.name ) 127 120 -
trunk/loreality/loreality/lib/helpers.py
r2102 r2109 9 9 from webhelpers.html.tags import * 10 10 from loreality.lib import auth 11 from loreality.lib import msg 11 12 from webhelpers.html.tags import stylesheet_link 12 13 -
trunk/loreality/loreality/model/databases.py
r2108 r2109 9 9 10 10 from loreality.model import meta 11 import uuid 11 import uuid, datetime 12 12 metadata = schema.MetaData() 13 13 … … 93 93 __tablename__ = 'messages' 94 94 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()) 97 97 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 ) 99 100 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 100 114 #---------------------------------------------------------------- 101 115 class Pilot(Base): … … 107 121 108 122 messages = orm.relation("Message", backref="pilot") 123 messages_unread = sa.Column(sa.types.Integer, nullable=False) 109 124 110 125 def __init__( self, name, login ): 111 126 self.name = name 112 127 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 6 6 from formencode.foreach import ForEach 7 7 from formencode.api import NoDefault 8 9 class FormField: 10 name = "" 11 formtype = "" 12 def __init__( self, **kwargs): 13 self.__dict__.update( kwargs ) 8 14 9 15 class CampaignNameForm(Schema): … … 57 63 plane = String() 58 64 65 class 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 57 57 58 58 /* MESSAGER */ 59 .message, .from, .title, .date{ 60 width: 80%; 59 div.message_box { 60 display: right; 61 font-size: x-small; 62 } 63 div.message { 61 64 display: inline; 62 65 border: solid black 1px; 66 width: 80%; 63 67 background: #AAAAAA; 68 font-size: small; 64 69 } 65 .date{ 66 width: 20%; 70 71 div.message span#subject { 72 font-weight: bold; 73 font-size: large; 74 margin-right: 30px; 67 75 } 68 .from{ 69 width: 30%; 76 div.message_open{ 77 width: 80%; 78 border: solid black 1px; 79 background: #ffffff; 80 color: #000000; 81 margin-bottom: 20px; 70 82 } 71 .title{72 width: 50%;83 div.message_open span{ 84 color: red; 73 85 } 86 -
trunk/loreality/loreality/templates/base/index.html
r2105 r2109 20 20 ${self.heading()} 21 21 </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 22 27 <div id="sign"> 23 28 % 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 3 3 <h2>Messager</h2> 4 4 % for message in c.messages: 5 % if message.id == c.message_open: 6 <div class="message_open"> 7 % else: 5 8 <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> 9 18 </div> 19 <br/> 10 20 % 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 8 8 ${h.form(h.url_for(controller='mission', action='process', id=c.mission.id))} 9 9 10 % for f in c. misfields:10 % for f in c.formfields: 11 11 <label for="${f.name}">${f.t_name.capitalize()}</label><br /> 12 12 ${eval("h."+ f.formtype +"(name='" + f.name+ "')")}<br /> … … 14 14 15 15 ${h.submit(name="action", value="Modify")} 16 </fieldset>17 16 ${h.end_form()} 18 17 %endif -
trunk/loreality/loreality/templates/derived/page/squadron_edit.html
r2106 r2109 8 8 ${h.form(h.url_for(controller='squadron', action='process', id=c.squadron.id))} 9 9 10 % for f in c. squfields:10 % for f in c.formfields: 11 11 <label for="${f.name}">${f.t_name.capitalize()}</label><br /> 12 12 ${eval("h."+ f.formtype +"(name='" + f.name+ "')")}<br /> -
trunk/loreality/loreality/websetup.py
r2108 r2109 41 41 42 42 log.info("Adding mission...") 43 #---------------- 43 44 cam = Campaign("My Campaign") 44 45 46 #---------------- 45 47 mis = Mission("mission 1") 46 48 meta.Session.add(mis) 47 49 cam.missions.append( mis ) 48 50 51 #---------------- 49 52 squ = Squadron("12th") 50 53 squ.plane = "F-15C" 51 54 meta.Session.add( squ ) 52 55 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 ) 57 61 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 #---------------- 58 88 msg = Message() 59 msg.from_ = "Tolteque"89 msg.from_ = tolteque.id 60 90 msg.date = "23/12/2010" 61 msg. title= "Info"91 msg.subject = "Info" 62 92 msg.text = """ 63 93 C'est super 64 94 """ 65 95 meta.Session.add( msg ) 66 pil.messages.append( msg )96 dart.send_message( msg ) 67 97 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 ) 72 120 73 squ = Squadron("92nd")74 squ.plane = "Su-27"75 meta.Session.add( squ )76 121 77 pil = Pilot("MajorBug", "MBug")78 meta.Session.add( pil )79 mis.pilots.append( pil )80 squ.pilots.append( pil )81 122 82 mis = Mission("mission 2") 83 meta.Session.add(mis) 84 mis.pilots.append( pil ) 85 cam.missions.append( mis ) 86 123 #---------------- 87 124 meta.Session.commit() 88 125 log.info("Successfully set up.")
Note: See TracChangeset
for help on using the changeset viewer.
