Changeset 29

Show
Ignore:
Timestamp:
12/30/06 02:30:39 (5 years ago)
Author:
tim
Message:

Allow for planet configuration from within the admin controller

Location:
trunk
Files:
1 added
7 modified

Legend:

Unmodified
Added
Removed
  • trunk/cogplanet/admin/controller.py

    r20 r29  
    22 
    33from turbogears import database 
    4 from turbogears import controllers, expose, url 
     4from turbogears import controllers, expose, url, error_handler 
    55from turbogears import identity, redirect 
    66from turbogears import validate 
     7from turbogears import validators 
    78from turbogears.widgets import * 
    89 
     
    1011from cogplanet.model import * 
    1112from cogplanet.util import * 
     13 
     14class PlanetFields(WidgetsList): 
     15    id = HiddenField(name="id") 
     16    name = TextField(name="name", attrs={'size':60}) 
     17    display_entries = TextField(name="display_entries", 
     18                                label="Entries to display", 
     19                                validator=validators.Number(), 
     20                                attrs={'size': 60}) 
     21    update_interval = TextField(name="update_interval",  
     22                                label="Update Interval (Minutes)", 
     23                                validator=validators.Number(), 
     24                                attrs={'size': 60}) 
     25 
     26class PlanetForm(TableForm): 
     27    fields = PlanetFields() 
     28    submit_text = "Save Changes" 
    1229 
    1330class FeedFields(WidgetsList): 
     
    1734    xmlurl = TextField(name="xmlurl", label="XML URL", attrs={'size': 60}) 
    1835    updated_at = CalendarDateTimePicker(name="updated_at", label="Updated At") 
    19     update_interval = TextField(name="update_interval", label="Update Interval (Minutes)", attrs={'size': 60}) 
     36    update_interval = TextField(name="update_interval",  
     37                                label="Update Interval (Minutes)", 
     38                                validator=validators.Number(), 
     39                                attrs={'size': 60}) 
    2040     
    2141class FeedForm(TableForm): 
     
    3353    feed_form = FeedForm() 
    3454    import_form = ImportForm() 
     55    planet_form = PlanetForm() 
    3556 
    3657    @expose() 
     
    4768        entry = Entry.selectone(Entry.c.id==id) 
    4869        print entry.content 
    49         return({'entry':entry}) 
     70        planet = Planet.selectone() 
     71        return({'entry':entry, 
     72                'planet':planet}) 
    5073 
    5174    @expose(template="cogplanet.templates.admin.import_feeds") 
     
    5578        if opml_file != None: 
    5679            import_opml(opml_file.file) 
     80        planet = Planet.selectone() 
    5781        # TODO should return the number of feeds imported 
    58         return({'import_form': self.import_form}) 
     82        return({'import_form': self.import_form, 
     83                'planet':planet}) 
     84 
     85    @expose(template="cogplanet.templates.admin.planet") 
     86    @identity.require(identity.in_group("cp_admin")) 
     87    def planet_view(self): 
     88        planet = Planet.selectone() 
     89        return({'planet': planet, 
     90                'planet_form': self.planet_form}) 
     91 
     92    @expose() 
     93    @validate(planet_form) 
     94    @error_handler(planet_view) 
     95    @identity.require(identity.in_group("cp_admin")) 
     96    def planet_update(self, **kw): 
     97        planet = Planet.selectone() 
     98        planet.name = kw['name'] 
     99        planet.display_entries = kw['display_entries'] 
     100        planet.update_interval = kw['update_interval'] 
     101        raise cherrypy.HTTPRedirect('./planet_view') 
    59102 
    60103    @expose() 
     
    97140        if(id != 'new'): 
    98141            feed = Feed.selectone("id=%d" % int(id)) 
     142        planet = Planet.selectone() 
    99143        return({'feed': feed, 
    100                 'feed_form': self.feed_form}) 
     144                'feed_form': self.feed_form, 
     145                'planet': planet}) 
    101146 
    102147    @expose(template="cogplanet.templates.admin.index") 
     
    104149    def index(self): 
    105150        feeds = Feed.select(order_by="name") 
    106         return({"feeds": feeds}) 
     151        planet = Planet.selectone() 
     152        return({"feeds": feeds, 
     153                'planet': planet}) 
  • trunk/cogplanet/controllers.py

    r21 r29  
    3737    # @identity.require(identity.in_group("admin")) 
    3838    def index(self): 
    39         entries = Entry.select(Entry.c.parsed == True, order_by="updated_at DESC", limit=10) 
     39        planet = Planet.selectone() 
     40        entries = Entry.select(Entry.c.parsed == True,  
     41                               order_by="updated_at DESC",  
     42                               limit=planet.display_entries) 
    4043        feeds = Feed.select(order_by="name ASC") 
    41         planet = Planet.selectone() 
    4244        return {"entries":entries, 
    4345                "feeds":feeds, 
  • trunk/cogplanet/model.py

    r21 r29  
    1919        id = column(Integer, primary_key=True) 
    2020        name = column(Unicode, nullable=False) 
     21        display_entries = column(Integer, default=50, nullable=False) 
    2122        update_interval = column(Integer, default=1440, nullable=False) 
    2223        # TODO cascade='delete' (currently unsupported) 
  • trunk/cogplanet/static/css/style.css

    r27 r29  
    6767} 
    6868 
     69#header h1, #header h2 {  
     70  margin: 0; 
     71  padding: 0; 
     72} 
     73 
    6974#menu {  
    7075  background-color: #000; 
  • trunk/cogplanet/templates/admin/layout.html

    r10 r29  
    22 
    33  <head> 
    4     <title>${page_title()}</title> 
     4    <title>${planet.name} ${page_title()}</title> 
    55    <link href="/static/css/style.css" type="text/css" rel="stylesheet" /> 
    66  </head> 
     
    88  <body> 
    99    <div id="header"> 
    10       <h1>CogPlanet :: ${page_title()}</h1> 
     10      <h1>${planet.name}</h1> 
     11      <h2>${page_title()}</h2> 
    1112    </div> 
    1213    <ul id="menu"> 
    1314      <li><a href="" py:attrs="{'href': tg.url('/admin')}">Admin Home</a></li> 
     15      <li><a href="" py:attrs="{'href': tg.url('/admin/planet_view')}">Configuration</a></li> 
    1416      <li><a href="" py:attrs="{'href': tg.url('/admin/new/view')}">Add a Feed</a></li> 
    1517      <li><a href="" py:attrs="{'href': tg.url('/admin/import_feeds')}">Import OPML</a></li> 
     
    1820    <div id="main_content"><content>Default content</content></div> 
    1921 
    20     <div id="footer">Page Footer Text</div> 
     22    <div id="footer"> 
     23      <span style="float:left;">Powered by <a href="http://achievewith.us/projects/cogplanet">CogPlanet</a></span> 
     24      <span style="float:right;">Built on <a href="http://turbogears.org">TurboGears</a></span> 
     25    </div> 
    2126  </body> 
    2227 
  • trunk/cogplanet/templates/index.html

    r27 r29  
    66 
    77<div py:match="content"> 
     8 <div py:if="len(feeds) == 0"> 
     9   <h1>Welcome</h1> 
     10 
     11   <p>This looks like a new planet, so you are probably the new planet 
     12   administrator.  You should log in to 
     13   the <a href="./admin">administration section</a> and add the feeds 
     14   that you want to aggregate.</p> 
     15 
     16   <p>If you have any trouble using CogPlanet, or you feel a desire to 
     17   improve this software, visit 
     18   the <a href="http://achievewith.us/projects/cogplanet">CogPlanet 
     19   Trac</a>.</p> 
     20 
     21 </div> 
     22 
    823 
    924 <div py:for="entry in entries"> 
  • trunk/dev.cfg

    r28 r29  
    55# cogplanet/config/app.cfg 
    66 
    7 easy_config.enabled = False 
     7easy_config.enabled = True 
     8tg.scheduler = True 
    89 
    910# DATABASE