--- a/ForgeDownloads/forgedownloads/dl_main.py
+++ b/ForgeDownloads/forgedownloads/dl_main.py
@@ -4,6 +4,7 @@
# Non-stdlib imports
import pkg_resources
from tg import expose, validate, redirect, response, config
+from tg.decorators import with_trailing_slash, without_trailing_slash
from pylons import g, c, request
from pymongo.bson import ObjectId
@@ -36,6 +37,7 @@
def __init__(self, project, config):
Application.__init__(self, project, config)
self.root = RootController()
+ self.admin = DownloadAdminController(self)
@property
@h.exceptionless([], log)
@@ -48,19 +50,25 @@
return []
def admin_menu(self):
- return super(ForgeDownloadsApp, self).admin_menu()
+ admin_url = c.project.url()+'admin/'+self.config.options.mount_point+'/'
+ links = super(ForgeDownloadsApp, self).admin_menu()
+ if has_artifact_access('configure', app=self)():
+ links.append(SitemapEntry('Options', admin_url + 'options', className='nav_child'))
+ return links
def install(self, project):
'Set up any default permissions and roles here'
super(ForgeDownloadsApp, self).install(project)
# Setup permissions
role_anon = ProjectRole.query.get(name='*anonymous')._id
+ c.project.show_download_button = True
self.config.acl.update(
configure=c.project.acl['tool'],
read=[role_anon])
def uninstall(self, project):
"Remove all the tool's artifacts from the database"
+ c.project.show_download_button = False
super(ForgeDownloadsApp, self).uninstall(project)
class RootController(object):
@@ -80,3 +88,26 @@
d['selected'] = True
return d
return dict(menu=[ _entry(s) for s in c.project.sitemap() ] )
+
+class DownloadAdminController(DefaultAdminController):
+
+ def _check_security(self):
+ require(has_artifact_access('admin', app=self.app), 'Admin access required')
+
+ @with_trailing_slash
+ def index(self):
+ redirect('options')
+
+ @expose('forgedownloads.templates.admin_options')
+ def options(self):
+ return dict(app=self.app,
+ allow_config=has_artifact_access('configure', app=self.app)())
+
+ @h.vardec
+ @expose()
+ def update_options(self, **kw):
+ show_download_button = kw.pop('show_download_button', '')
+ if bool(show_download_button) != c.project.show_download_button:
+ h.log_action(log, 'update project download button').info('')
+ c.project.show_download_button = bool(show_download_button)
+ redirect(request.referrer)