web/form.py
branchstable
changeset 8511 f15e90b914cd
parent 8337 b5275e739a44
child 10080 bc7c3b0f439b
equal deleted inserted replaced
8508:7801f2acd1dc 8511:f15e90b914cd
    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)