Ignore:
Timestamp:
07/02/10 14:49:40 (23 months ago)
Author:
dart
Message:

LoReality?:
o Manage campaign, mission, and becin pilots

File:
1 edited

Legend:

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

    r2099 r2100  
    88import loreality.model as model 
    99 
     10import loreality.lib.helpers as h 
     11from loreality.model.form import * 
     12 
     13from authkit.authorize.pylons_adaptors import authorize 
     14from pylons.decorators import validate 
     15 
     16from formencode import htmlfill, variabledecode 
     17from formencode.validators import Invalid 
     18import uuid 
    1019 
    1120log = logging.getLogger(__name__) 
     
    1322class CampaignController(BaseController): 
    1423 
    15     def index(self): 
     24    def index(self, values=None, errors=None ): 
    1625        c.title = "LoReality" 
    1726        c.heading = "Campaign" 
    18         c.campaign_title = "My Campaign" 
    1927        c.campaigns = meta.Session.query(model.Campaign).all() 
    2028 
    21         return  render('/derived/page/campaign.html') 
     29        html = render('/derived/page/campaign.html') 
     30        return  htmlfill.render(html, defaults=values, errors=errors) 
     31 
     32    def process(self, id=None): 
     33        action = request.params.getone('action') 
     34        values = dict(request.params) 
     35        # Don't use the values field for repopulation 
     36        del values['action'] 
     37        if action=='Add campaign': 
     38            # Assume we are trying to save the form 
     39            schema = CampaignNameForm() 
     40            try: 
     41                result = schema.to_python(dict(request.params), c) 
     42            except Invalid, e: 
     43                return self.index( 
     44                    values=values, 
     45                    errors=variabledecode.variable_encode( 
     46                        e.unpack_errors() or {}, 
     47                        add_repetitions=False 
     48                    ) 
     49                ) 
     50            else: 
     51                camp = model.Campaign( result['name_campaign'] ) 
     52                meta.Session.add(camp) 
     53                meta.Session.commit() 
     54                return self.index()  
     55        elif action=='Add mission': 
     56            # Assume we are trying to save the form 
     57            schema = MissionNameForm() 
     58            try: 
     59                result = schema.to_python(dict(request.params), c) 
     60            except Invalid, e: 
     61                return self.index( 
     62                    values=values, 
     63                    errors=variabledecode.variable_encode( 
     64                        e.unpack_errors() or {}, 
     65                        add_repetitions=False 
     66                    ) 
     67                ) 
     68            else: 
     69                campaign_q = meta.Session.query(model.Campaign) 
     70                campaign = campaign_q.filter_by(id=uuid.UUID(id)).first() 
     71                if campaign is None: 
     72                    abort(404) 
     73 
     74                mis = model.Mission( result["name_mission"] ) 
     75                meta.Session.add( mis ) 
     76                campaign.missions.append( mis ) 
     77 
     78                meta.Session.commit() 
     79                return self.edit(id) 
     80        elif action=='Modify': 
     81            # Assume we are trying to save the form 
     82            schema = CampaignForm() 
     83            try: 
     84                result = schema.to_python(dict(request.params), c) 
     85            except Invalid, e: 
     86                return self.index( 
     87                    values=values, 
     88                    errors=variabledecode.variable_encode( 
     89                        e.unpack_errors() or {}, 
     90                        add_repetitions=False 
     91                    ) 
     92                ) 
     93            else: 
     94                campaign_q = meta.Session.query(model.Campaign) 
     95                campaign = campaign_q.filter_by(id=uuid.UUID(id)).first() 
     96                if campaign is None: 
     97                    abort(404) 
     98 
     99                campaign.name = result["name"] 
     100                meta.Session.commit() 
     101                return self.edit(id=id)  
     102        else: 
     103            raise Exception('Invalid action %s'%action) 
     104 
     105    @authorize(h.auth.is_creator) 
     106    def edit(self, id=None, values=None, errors=None  ): 
     107        if id is None: 
     108            abort(404) 
     109        campaign_q = meta.Session.query(model.Campaign) 
     110        campaign = campaign_q.filter_by(id=uuid.UUID(id)).first() 
     111        if campaign is None: 
     112            abort(404) 
     113 
     114        c.title = "LoReality" 
     115        c.heading = "Edit %s"%campaign.name 
     116        c.campaign = campaign 
     117 
     118        if not values: values = {} 
     119        values["name"] = campaign.name 
     120 
     121        html = render('/derived/page/campaign_edit.html') 
     122        return  htmlfill.render(html, defaults=values, errors=errors) 
     123 
     124    @authorize(h.auth.is_creator) 
     125    def delete(self, id): 
     126        values = dict(request.params) 
     127        missionid = values["missionid"] 
     128        if id is None: 
     129            abort(404) 
     130        campaign_q = meta.Session.query(model.Campaign) 
     131        campaign = campaign_q.filter_by(id=uuid.UUID(id)).first() 
     132        if campaign is None: 
     133            abort(404) 
     134 
     135        if missionid is None: 
     136            abort(404) 
     137        mission_q = meta.Session.query(model.Mission) 
     138        mission = mission_q.filter_by(id=uuid.UUID(missionid)).first() 
     139        if mission is None: 
     140            abort(404) 
     141        
     142        #- del now 
     143        campaign.missions.remove( mission ) 
     144        meta.Session.delete( mission ) 
     145        meta.Session.commit() 
     146        return self.edit( id ) 
     147 
     148    @authorize(h.auth.is_creator) 
     149    def deletecampaign(self, id): 
     150        if id is None: 
     151            abort(404) 
     152        campaign_q = meta.Session.query(model.Campaign) 
     153        campaign = campaign_q.filter_by(id=uuid.UUID(id)).first() 
     154        if campaign is None: 
     155            abort(404) 
     156 
     157        #- del now 
     158        for mis in campaign.missions: 
     159            campaign.missions.remove( mis ) 
     160            meta.Session.delete( mis ) 
     161        meta.Session.delete( campaign ) 
     162        meta.Session.commit() 
     163        return self.index() 
Note: See TracChangeset for help on using the changeset viewer.