app/soc/views/models/program.py
changeset 700 8baf8367340d
parent 681 48983ecf4665
child 705 0ab17e14df95
--- 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()