app/soc/views/models/program.py
changeset 643 b57d538a9dd3
child 647 355ac73823a1
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/app/soc/views/models/program.py	Mon Dec 01 21:38:25 2008 +0000
@@ -0,0 +1,160 @@
+#!/usr/bin/python2.5
+#
+# Copyright 2008 the Melange authors.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+"""Views for Programs.
+"""
+
+__authors__ = [
+    '"Sverre Rabbelier" <sverre@rabbelier.nl>',
+  ]
+
+
+from google.appengine.api import users
+
+from django import forms
+from django.utils.translation import ugettext_lazy
+
+from soc.logic import dicts
+from soc.logic import cleaning
+from soc.logic.models import sponsor as sponsor_logic
+from soc.views.helper import redirects
+from soc.views.models import base
+from soc.views.models import sponsor as sponsor_view
+from soc.views import helper
+
+import soc.logic.models.program
+
+
+class View(base.View):
+  """View methods for the Sponsor model.
+  """
+
+  DEF_CREATE_INSTRUCTION_MSG_FMT = ugettext_lazy(
+      'Please use this form to select a Sponsor for the new Program')
+
+  def __init__(self, original_params=None):
+    """Defines the fields and methods required for the base View class
+    to provide the user with list, public, create, edit and delete views.
+
+    Params:
+      original_params: a dict with params for this View 
+    """    
+
+    params = {}
+    params['logic'] = soc.logic.models.program.logic
+
+    params['name'] = "Program"
+    params['name_short'] = "Program"
+    params['name_plural'] = "Programs"
+    params['url_name'] = "program"
+    params['module_name'] = "program"
+
+    params['extra_dynaexclude'] = ['home']
+    params['create_extra_dynafields'] = {
+        'scope_path': forms.CharField(widget=forms.HiddenInput,
+                                   required=False),
+         'clean_link_id': cleaning.clean_link_id,
+        }
+
+    params = dicts.merge(original_params, params)
+
+    base.View.__init__(self, params=params)
+
+  def create(self, request, page_name=None, params=None, **kwargs):
+    """Specialized create view to enforce needing a scope_path
+
+    This view simply gives control to the base.View.create if the
+    scope_path is specified in kwargs. If it is not present, it
+    instead displays the result of self.selectSponsor. Refer to the
+    respective docstrings on what they do.
+
+    Args: 
+      see base.View.create
+    """
+
+    if 'scope_path' in kwargs:
+      return super(View, self).create(request, page_name=page_name,
+          params=params, **kwargs)
+
+    params = dicts.merge(params, self._params)
+    return self.selectSponsor(request, page_name, params)
+
+  def selectSponsor(self, request, page_name, params):
+    """Displays a list page allowing the user to select a Sponsor
+
+    After having selected the Sponsor, the user is redirected to the
+    'create a new program' page with the scope_path set appropriately.
+
+    Params usage:
+      The params dictionary is passed to getCreateProgramRedirect from
+        the redirects module, please see the docstring for
+        getCreateProgramRedirect on how it uses it.
+      The params dictionary is also passed to getListContent from
+        the helper.list module, please refer to its docstring also.
+      The params dictionary is passed to self._list as well, refer
+        to its docstring for details on how it uses it.
+
+    Args:
+      request: the standard Django HTTP request object
+      page_name: the page name displayed in templates as page and header title
+      params: a dict with params for this View
+    """
+
+    new_params = {}
+    new_params['list_action'] = (redirects.getCreateProgramRedirect, params)
+    new_params['instruction_text'] = \
+        self.DEF_CREATE_INSTRUCTION_MSG_FMT % self._params
+
+    params = dicts.merge(new_params, params)
+    params = dicts.merge(params, sponsor_view.view._params)
+
+    content = helper.lists.getListContent(request, params, sponsor_logic.logic)
+    contents = [content]
+
+    return self._list(request, params, contents, page_name)
+
+  def _editGet(self, request, entity, form):
+    """See base.View._editGet().
+    """
+
+    # fill in the email field with the data from the entity
+    form.fields['scope_path'].initial = entity.scope_path
+
+  def getDjangoURLPatterns(self, params=None):
+    """See base.View.getDjangoURLPatterns().
+    """
+
+    default_patterns = self._params['django_patterns_defaults']
+    default_patterns += [
+        (r'^%(url_name)s/create/(?P<scope_path>%(ulnp)s)$',
+            'soc.views.models.%s.create', 'Create %(name_short)s')]
+
+    params = {}
+    params['django_patterns_defaults'] = default_patterns
+
+    params = dicts.merge(params, self._params)
+    patterns = super(View, self).getDjangoURLPatterns(params)
+
+    return patterns
+
+
+view = View()
+
+create = view.create
+delete = view.delete
+edit = view.edit
+list = view.list
+public = view.public