# HG changeset patch # User Sverre Rabbelier # Date 1228662149 0 # Node ID 8baf8367340d968da05a110ab2270745c253b254 # Parent 4e8eefe95748ae2095ea3eb71836c7f16b5b9ad6 Dynamically add sidebar items for programs This adds sidebar items for programs as appropriate. From the docstring: A menu item is generated for each program that is currently running. The public page for each program is added as menu item, as well as all public documents for that program. Additionally, we allow access to a program's public page to everyone, even if the user is not logged in. Patch by: Sverre Rabbelier diff -r 4e8eefe95748 -r 8baf8367340d app/soc/views/models/program.py --- a/app/soc/views/models/program.py Sun Dec 07 15:02:03 2008 +0000 +++ b/app/soc/views/models/program.py Sun Dec 07 15:02:29 2008 +0000 @@ -30,10 +30,13 @@ from soc.logic import cleaning from soc.logic import dicts from soc.logic.models import sponsor as sponsor_logic +from soc.logic.models import document as document_logic from soc.views import helper +from soc.views.helper import access from soc.views.helper import redirects from soc.views.models import base from soc.views.models import sponsor as sponsor_view +from soc.views.models import document as document_view import soc.logic.models.program @@ -48,10 +51,15 @@ Params: params: a dict with params for this View - """ + """ + + rights = {} + rights['any_access'] = [access.allow] + rights['public'] = [access.allow] new_params = {} new_params['logic'] = soc.logic.models.program.logic + new_params['rights'] = rights new_params['scope_view'] = sponsor_view new_params['scope_redirect'] = redirects.getCreateRedirect @@ -74,6 +82,65 @@ super(View, self).__init__(params=params) + def _getItemsForProgram(self, entity, params): + """Returns the menu items for one specifc program + + Args: + entity: the program for which the entry should be constructed + params: a dict with params for this View. + """ + + filter = { + 'scope_path': entity.key().name(), + 'is_featured': True, + } + + doc_params = document_view.view.getParams() + entities = document_logic.logic.getForFields(filter) + + submenus = [] + + # add a link to the home page + submenu = {} + submenu['title'] = "Home" + submenu['url'] = redirects.getPublicRedirect(entity, params) + submenus.append(submenu) + + # add a link to all featured documents + for entity in entities: + submenu = {} + submenu['title'] = entity.short_name + submenu['url'] = redirects.getPublicRedirect(entity, doc_params) + submenus.append(submenu) + + return submenus + + def getExtraMenus(self, request, params=None): + """Returns the extra menu's for this view. + + A menu item is generated for each program that is currently + running. The public page for each program is added as menu item, + as well as all public documents for that program. + + Args: + request: unused + params: a dict with params for this View. + """ + + params = dicts.merge(params, self._params) + logic = params['logic'] + + entities = logic.getForLimitAndOffset(1000) + + menus = [] + + for entity in entities: + menu = {} + menu['heading'] = entity.short_name + menu['items'] = self._getItemsForProgram(entity, params) + menus.append(menu) + + return menus view = View() diff -r 4e8eefe95748 -r 8baf8367340d app/soc/views/sitemap/build.py --- a/app/soc/views/sitemap/build.py Sun Dec 07 15:02:03 2008 +0000 +++ b/app/soc/views/sitemap/build.py Sun Dec 07 15:02:29 2008 +0000 @@ -48,6 +48,7 @@ sidebar.addMenu(host.view.getSidebarLinks) sidebar.addMenu(request.view.getSidebarLinks) sidebar.addMenu(program.view.getSidebarLinks) +sidebar.addMenu(program.view.getExtraMenus) sidebar.addMenu(organization.view.getSidebarLinks) sitemap.addPages(presence.view.getDjangoURLPatterns())