--- a/ForgeBlog/forgeblog/main.py
+++ b/ForgeBlog/forgeblog/main.py
@@ -12,12 +12,14 @@
from formencode import validators
from webob import exc
+from ming.orm import session
+
# Pyforge-specific imports
from allura.app import Application, ConfigOption, SitemapEntry
from allura.app import DefaultAdminController
from allura.lib import helpers as h
from allura.lib.search import search
-from allura.lib.decorators import require_post
+from allura.lib.decorators import require_post, Property
from allura.lib.security import has_access, require_access
from allura.lib import widgets as w
from allura.lib.widgets.subscriptions import SubscribeForm
@@ -56,6 +58,7 @@
ordinal=14
installable=True
config_options = Application.config_options
+ default_external_feeds = []
icons={
24:'images/blog_24.png',
32:'images/blog_32.png',
@@ -66,6 +69,24 @@
Application.__init__(self, project, config)
self.root = RootController()
self.admin = BlogAdminController(self)
+
+ @Property
+ def external_feeds_list():
+ def fget(self):
+ globals = BM.Globals.query.get(app_config_id=self.config._id)
+ if globals is not None:
+ external_feeds = globals.external_feeds
+ else:
+ external_feeds = self.default_external_feeds
+ return external_feeds
+ def fset(self, new_external_feeds):
+ globals = BM.Globals.query.get(app_config_id=self.config._id)
+ if globals is not None:
+ globals.external_feeds = new_external_feeds
+ elif len(new_external_feeds) > 0:
+ globals = BM.Globals(app_config_id=self.config._id, root=new_external_feeds)
+ if globals is not None:
+ session(globals).flush()
@property
@h.exceptionless([], log)
@@ -94,7 +115,11 @@
return links
def admin_menu(self):
- return super(ForgeBlogApp, self).admin_menu(force_options=True)
+ admin_url = c.project.url() + 'admin/' + self.config.options.mount_point + '/'
+ links = [SitemapEntry('External feeds', admin_url + 'exfeed', className='admin_modal')]
+ links += super(ForgeBlogApp, self).admin_menu(force_options=True)
+ return links
+ #return super(ForgeBlogApp, self).admin_menu(force_options=True)
def install(self, project):
'Set up any default permissions and roles here'
@@ -359,3 +384,34 @@
self.app.config.options['show_discussion'] = show_discussion and True or False
flash('Blog options updated')
redirect(h.really_unicode(c.project.url()+'admin/tools').encode('utf-8'))
+
+ @without_trailing_slash
+ @expose('jinja:forgeblog:templates/blog/admin_exfeed.html')
+ def exfeed(self):
+ #self.app.external_feeds_list = ['feed1', 'feed2']
+ #log.info("EXFEED: %s" % self.app.external_feeds_list)
+ feeds_list = []
+ for feed in self.app.external_feeds_list:
+ feeds_list.append(feed)
+ return dict(app=self.app,
+ feeds_list=feeds_list,
+ allow_config=has_access(self.app, 'configure')())
+
+ @without_trailing_slash
+ @expose()
+ @require_post()
+ def set_exfeed(self, **kw):
+ new_exfeed = kw.get('new_exfeed', None)
+ exfeed_val = kw.get('exfeed', [])
+ if type(exfeed_val) == unicode:
+ exfeed_list = []
+ exfeed_list.append(exfeed_val)
+ else:
+ exfeed_list = exfeed_val
+
+ if new_exfeed is not None and new_exfeed != '':
+ exfeed_list.append(new_exfeed)
+
+ self.app.external_feeds_list = exfeed_list
+ flash('External feeds updated')
+ redirect(c.project.url()+'admin/tools')