86 '__redirectpath', '_cwmsgid', '__message', |
86 '__redirectpath', '_cwmsgid', '__message', |
87 ) ) |
87 ) ) |
88 |
88 |
89 def __init__(self, req, rset=None, row=None, col=None, |
89 def __init__(self, req, rset=None, row=None, col=None, |
90 submitmsg=None, mainform=True, **kwargs): |
90 submitmsg=None, mainform=True, **kwargs): |
91 super(Form, self).__init__(req, rset=rset, row=row, col=col) |
91 # process kwargs first so we can properly pass them to Form and match |
|
92 # order expectation (ie cw_extra_kwargs populated almost first) |
|
93 hiddens, extrakw = self._process_kwargs(kwargs) |
|
94 # now call ancestor init |
|
95 super(Form, self).__init__(req, rset=rset, row=row, col=col, **extrakw) |
|
96 # then continue with further specific initialization |
92 self.fields = list(self.__class__._fields_) |
97 self.fields = list(self.__class__._fields_) |
|
98 for key, val in hiddens: |
|
99 self.add_hidden(key, val) |
93 if mainform: |
100 if mainform: |
94 formid = kwargs.pop('formvid', self.__regid__) |
101 formid = kwargs.pop('formvid', self.__regid__) |
95 self.add_hidden(u'__form_id', formid) |
102 self.add_hidden(u'__form_id', formid) |
96 self._posting = self._cw.form.get('__form_id') == formid |
103 self._posting = self._cw.form.get('__form_id') == formid |
97 for key, val in kwargs.iteritems(): |
|
98 if key in controller.NAV_FORM_PARAMETERS: |
|
99 self.add_hidden(key, val) |
|
100 elif key == 'redirect_path': |
|
101 self.add_hidden(u'__redirectpath', val) |
|
102 elif hasattr(self.__class__, key) and not key[0] == '_': |
|
103 setattr(self, key, val) |
|
104 else: |
|
105 self.cw_extra_kwargs[key] = val |
|
106 # skip other parameters, usually given for selection |
|
107 # (else write a custom class to handle them) |
|
108 if mainform: |
104 if mainform: |
109 self.add_hidden(u'__errorurl', self.session_key()) |
105 self.add_hidden(u'__errorurl', self.session_key()) |
110 self.add_hidden(u'__domid', self.domid) |
106 self.add_hidden(u'__domid', self.domid) |
111 self.restore_previous_post(self.session_key()) |
107 self.restore_previous_post(self.session_key()) |
112 # XXX why do we need two different variables (mainform and copy_nav_params ?) |
108 # XXX why do we need two different variables (mainform and copy_nav_params ?) |
116 value = req.form.get(param) |
112 value = req.form.get(param) |
117 if value: |
113 if value: |
118 self.add_hidden(param, value) |
114 self.add_hidden(param, value) |
119 if submitmsg is not None: |
115 if submitmsg is not None: |
120 self.set_message(submitmsg) |
116 self.set_message(submitmsg) |
|
117 |
|
118 def _process_kwargs(self, kwargs): |
|
119 hiddens = [] |
|
120 extrakw = {} |
|
121 # search for navigation parameters and customization of existing |
|
122 # attributes; remaining stuff goes in extrakwargs |
|
123 for key, val in kwargs.iteritems(): |
|
124 if key in controller.NAV_FORM_PARAMETERS: |
|
125 hiddens.append( (key, val) ) |
|
126 elif key == 'redirect_path': |
|
127 hiddens.append( (u'__redirectpath', val) ) |
|
128 elif hasattr(self.__class__, key) and not key[0] == '_': |
|
129 setattr(self, key, val) |
|
130 else: |
|
131 extrakw[key] = val |
|
132 return hiddens, extrakw |
121 |
133 |
122 def set_message(self, submitmsg): |
134 def set_message(self, submitmsg): |
123 """sets a submitmsg if exists, using _cwmsgid mechanism """ |
135 """sets a submitmsg if exists, using _cwmsgid mechanism """ |
124 cwmsgid = self._cw.set_redirect_message(submitmsg) |
136 cwmsgid = self._cw.set_redirect_message(submitmsg) |
125 self.add_hidden(u'_cwmsgid', cwmsgid) |
137 self.add_hidden(u'_cwmsgid', cwmsgid) |