25 |
25 |
26 from google.appengine.ext import db |
26 from google.appengine.ext import db |
27 |
27 |
28 from django import forms |
28 from django import forms |
29 |
29 |
30 from gsoc.models import timeline |
|
31 from soc.logic import dicts |
30 from soc.logic import dicts |
32 from soc.logic.models import program as program_logic |
31 from soc.logic.models import program as program_logic |
|
32 from soc.views.helper import dynaform |
33 from soc.views.helper import params as params_helper |
33 from soc.views.helper import params as params_helper |
34 from soc.views.models import base |
34 from soc.views.models import base |
35 |
35 |
36 import soc.logic.models.timeline |
36 import soc.logic.models.timeline |
37 |
37 |
59 |
59 |
60 new_params['django_patterns_defaults'] = patterns |
60 new_params['django_patterns_defaults'] = patterns |
61 |
61 |
62 new_params['edit_dynafields'] = [] |
62 new_params['edit_dynafields'] = [] |
63 |
63 |
64 timeline_properties = timeline.Timeline.properties() |
|
65 form_fields = {} |
|
66 |
|
67 # add class 'datetime-pick' for each DateTimeField |
|
68 # this is used with datetimepicker js widget |
|
69 for key, value in timeline_properties.iteritems(): |
|
70 if isinstance(value, db.DateTimeProperty): |
|
71 form_fields[key] = forms.DateTimeField(required=False, |
|
72 widget=forms.TextInput(attrs={'class':'datetime-pick'})) |
|
73 |
|
74 new_params['create_extra_dynafields'] = form_fields |
|
75 |
|
76 params = dicts.merge(params, new_params) |
64 params = dicts.merge(params, new_params) |
77 |
65 |
78 super(View, self).__init__(params=params) |
66 super(View, self).__init__(params=params) |
79 |
67 |
80 for name, value in program_logic.logic.TIMELINE_LOGIC.iteritems(): |
68 for name, logic_value in program_logic.logic.TIMELINE_LOGIC.iteritems(): |
81 create_form = params_helper.getCreateForm(self._params, value.getModel()) |
69 fields = {} |
82 edit_form = params_helper.getEditForm(self._params, create_form) |
70 |
|
71 # add class 'datetime-pick' for each DateTimeField |
|
72 # this is used with datetimepicker js widget |
|
73 for prop_key, prop_value in logic_value.getModel().properties().iteritems(): |
|
74 if isinstance(prop_value, db.DateTimeProperty): |
|
75 fields[prop_key] = forms.DateTimeField(required=False, |
|
76 widget=forms.TextInput(attrs={'class':'datetime-pick'})) |
|
77 |
|
78 create_form = params_helper.getCreateForm(self._params, logic_value.getModel()) |
|
79 edit_form = dynaform.extendDynaForm( |
|
80 dynaform = create_form, |
|
81 dynainclude = self._params['edit_dynainclude'], |
|
82 dynaexclude = self._params['edit_dynaexclude'], |
|
83 dynafields = fields, |
|
84 ) |
|
85 |
83 self._params['edit_form_%s' % name] = edit_form |
86 self._params['edit_form_%s' % name] = edit_form |
84 |
87 |
85 def edit(self, request, access_type, |
88 def edit(self, request, access_type, |
86 page_name=None, params=None, seed=None, **kwargs): |
89 page_name=None, params=None, seed=None, **kwargs): |
87 """See base.View.edit. |
90 """See base.View.edit. |
88 """ |
91 """ |
89 |
|
90 params = dicts.merge(params, self._params) |
92 params = dicts.merge(params, self._params) |
91 |
93 |
|
94 # TODO(pawel.solyga): If program doesn't exist for timeline display |
|
95 # customized error message without pointing to 'Create Timeline' |
|
96 |
92 program = program_logic.logic.getFromKeyName(kwargs['scope_path']) |
97 program = program_logic.logic.getFromKeyName(kwargs['scope_path']) |
93 params['edit_form'] = params["edit_form_%s" % program.workflow] |
98 if program: |
|
99 params['edit_form'] = params["edit_form_%s" % program.workflow] |
94 |
100 |
95 return super(View, self).edit(request, access_type, page_name=page_name, |
101 return super(View, self).edit(request, access_type, page_name=page_name, |
96 params=params, seed=seed, **kwargs) |
102 params=params, seed=seed, **kwargs) |
97 |
103 |
98 def _editPost(self, request, entity, fields): |
104 def _editPost(self, request, entity, fields): |