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