app/soc/views/models/base.py
changeset 606 65d35584ee31
parent 605 4a384d412640
child 610 e0bd276ffd82
--- a/app/soc/views/models/base.py	Sat Nov 29 00:12:16 2008 +0000
+++ b/app/soc/views/models/base.py	Sat Nov 29 00:12:47 2008 +0000
@@ -25,6 +25,7 @@
 
 
 from django import http
+from django import forms
 from django.conf.urls import defaults
 from django.utils.translation import ugettext_lazy
 
@@ -33,12 +34,14 @@
 import soc.views.helper.lists
 import soc.views.helper.responses
 
+from soc.logic import cleaning
 from soc.logic import dicts
 from soc.logic import models
 from soc.models import linkable
 from soc.views import helper
 from soc.views import out_of_band
 from soc.views.helper import access
+from soc.views.helper import dynaform
 
 
 class View(object):
@@ -163,9 +166,48 @@
         self.DEF_SUBMIT_MSG_PARAM_NAME: self.DEF_SUBMIT_MSG_PROFILE_SAVED,
         }
 
+    new_params['dynabase'] = helper.forms.BaseForm
+
+    new_params['create_dynainclude'] = [] + params.get('extra_dynainclude', [])
+    new_params['create_dynaexclude'] = ['scope', 'scope_path'] + \
+        params.get('extra_dynaexclude', [])
+    new_params['create_dynafields'] = {
+        'clean_link_id': cleaning.clean_new_link_id(params['logic']),
+        'clean_feed_url': cleaning.clean_feed_url,
+        }
+
+    dynafields = {
+        'clean_link_id': cleaning.clean_link_id,
+        'link_id': forms.CharField(widget=helper.widgets.ReadOnlyInput()),
+        }
+    dynafields.update(params.get('extra_dynafields', {}))
+
+    new_params['edit_dynainclude'] = None
+    new_params['edit_dynaexclude'] = None
+    new_params['edit_dynafields'] = dynafields
+
     self._params = dicts.merge(params, new_params)
     self._logic = self._params['logic']
 
+    # These need to be constructed seperately, because they require
+    # parameters that can be defined either in params, or new_params.
+    if 'create_form' not in self._params:
+      self._params['create_form'] = dynaform.newDynaForm(
+        dynabase = self._params['dynabase'],
+        dynamodel = self._logic.getModel(),
+        dynainclude = self._params['create_dynainclude'],
+        dynaexclude = self._params['create_dynaexclude'],
+        dynafields = self._params['create_dynafields'],
+        )
+
+    if 'edit_form' not in self._params:
+      self._params['edit_form'] = dynaform.extendDynaForm(
+        dynaform = self._params['create_form'],
+        dynainclude = self._params['edit_dynainclude'],
+        dynaexclude = self._params['edit_dynaexclude'],
+        dynafields = self._params['edit_dynafields'],
+        )
+
   def public(self, request, page_name=None, params=None, **kwargs):
     """Displays the public page for the entity specified by **kwargs.