Check if timeline exists and when somebody tries to edit non existing timelime display error message. Add TODO regarding error message customization for Timeline. Add support for calendar widget in timeline for both gsoc and ghop programs (gsoc was hardcoded before).
authorPawel Solyga <Pawel.Solyga@gmail.com>
Sat, 24 Jan 2009 11:07:16 +0000
changeset 949 07fdadbd6dc7
parent 948 bd956f419ad9
child 950 8f59df49985b
Check if timeline exists and when somebody tries to edit non existing timelime display error message. Add TODO regarding error message customization for Timeline. Add support for calendar widget in timeline for both gsoc and ghop programs (gsoc was hardcoded before). Patch by: Pawel Solyga Review by: to-be-reviewed
app/soc/views/models/timeline.py
--- a/app/soc/views/models/timeline.py	Sat Jan 24 11:04:15 2009 +0000
+++ b/app/soc/views/models/timeline.py	Sat Jan 24 11:07:16 2009 +0000
@@ -27,9 +27,9 @@
 
 from django import forms
 
-from gsoc.models import timeline
 from soc.logic import dicts
 from soc.logic.models import program as program_logic
+from soc.views.helper import dynaform
 from soc.views.helper import params as params_helper
 from soc.views.models import base
 
@@ -61,36 +61,42 @@
 
     new_params['edit_dynafields'] = []
 
-    timeline_properties = timeline.Timeline.properties()
-    form_fields = {}
-    
-    # add class 'datetime-pick' for each DateTimeField
-    # this is used with datetimepicker js widget
-    for key, value in timeline_properties.iteritems():
-      if isinstance(value, db.DateTimeProperty):
-        form_fields[key] = forms.DateTimeField(required=False,
-          widget=forms.TextInput(attrs={'class':'datetime-pick'}))
-    
-    new_params['create_extra_dynafields'] = form_fields
-
     params = dicts.merge(params, new_params)
 
     super(View, self).__init__(params=params)
 
-    for name, value in program_logic.logic.TIMELINE_LOGIC.iteritems():
-      create_form = params_helper.getCreateForm(self._params, value.getModel())
-      edit_form = params_helper.getEditForm(self._params, create_form)
+    for name, logic_value in program_logic.logic.TIMELINE_LOGIC.iteritems():
+      fields = {}
+      
+      # add class 'datetime-pick' for each DateTimeField
+      # this is used with datetimepicker js widget
+      for prop_key, prop_value in logic_value.getModel().properties().iteritems():
+        if isinstance(prop_value, db.DateTimeProperty):
+          fields[prop_key] = forms.DateTimeField(required=False,
+            widget=forms.TextInput(attrs={'class':'datetime-pick'}))
+      
+      create_form = params_helper.getCreateForm(self._params, logic_value.getModel())
+      edit_form = dynaform.extendDynaForm(
+        dynaform = create_form,
+        dynainclude = self._params['edit_dynainclude'],
+        dynaexclude = self._params['edit_dynaexclude'],
+        dynafields = fields,
+        )
+        
       self._params['edit_form_%s' % name] = edit_form
 
   def edit(self, request, access_type,
            page_name=None, params=None, seed=None, **kwargs):
     """See base.View.edit.
     """
-
     params = dicts.merge(params, self._params)
-
+    
+    # TODO(pawel.solyga): If program doesn't exist for timeline display
+    # customized error message without pointing to 'Create Timeline'
+    
     program = program_logic.logic.getFromKeyName(kwargs['scope_path'])
-    params['edit_form'] = params["edit_form_%s" % program.workflow]
+    if program:
+      params['edit_form'] = params["edit_form_%s" % program.workflow]
 
     return super(View, self).edit(request, access_type, page_name=page_name,
                                   params=params, seed=seed, **kwargs)