Switch to side-by-side view

--- 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)