web/form.py
branchstable
changeset 4668 9f82f81bf13d
parent 4252 6c4f109c2b03
child 4683 c375d50eaad3
equal deleted inserted replaced
4667:6c8eccb1b695 4668:9f82f81bf13d
    13 from logilab.common.deprecation import deprecated
    13 from logilab.common.deprecation import deprecated
    14 
    14 
    15 from cubicweb.appobject import AppObject
    15 from cubicweb.appobject import AppObject
    16 from cubicweb.view import NOINDEX, NOFOLLOW
    16 from cubicweb.view import NOINDEX, NOFOLLOW
    17 from cubicweb import tags
    17 from cubicweb import tags
    18 from cubicweb.web import stdmsgs, httpcache, formfields
    18 from cubicweb.web import stdmsgs, httpcache, formfields, controller
    19 
    19 
    20 
    20 
    21 class FormViewMixIn(object):
    21 class FormViewMixIn(object):
    22     """abstract form view mix-in"""
    22     """abstract form view mix-in"""
    23     category = 'form'
    23     category = 'form'
    67 
    67 
    68 class Form(AppObject):
    68 class Form(AppObject):
    69     __metaclass__ = metafieldsform
    69     __metaclass__ = metafieldsform
    70     __registry__ = 'forms'
    70     __registry__ = 'forms'
    71 
    71 
       
    72     internal_fields = ('__errorurl',) + controller.NAV_FORM_PARAMETERS
       
    73 
    72     parent_form = None
    74     parent_form = None
    73     force_session_key = None
    75     force_session_key = None
    74 
    76     domid = 'form'
    75     def __init__(self, req, rset, **kwargs):
    77     copy_nav_params = False
    76         super(Form, self).__init__(req, rset=rset, **kwargs)
    78 
    77         self.restore_previous_post(self.session_key())
    79     def __init__(self, req, rset=None, row=None, col=None,
       
    80                  submitmsg=None, mainform=True, **kwargs):
       
    81         super(Form, self).__init__(req, rset=rset, row=row, col=col)
       
    82         self.fields = list(self.__class__._fields_)
       
    83         self.add_hidden(u'__form_id', kwargs.pop('formvid', self.__regid__))
       
    84         for key, val in kwargs.iteritems():
       
    85             if key in controller.NAV_FORM_PARAMETERS:
       
    86                 self.add_hidden(key, val)
       
    87             elif key == 'redirect_path':
       
    88                 self.add_hidden(u'__redirectpath', val)
       
    89             elif hasattr(self.__class__, key) and not key[0] == '_':
       
    90                 setattr(self, key, val)
       
    91             else:
       
    92                 self.cw_extra_kwargs[key] = val
       
    93             # skip other parameters, usually given for selection
       
    94             # (else write a custom class to handle them)
       
    95         if mainform:
       
    96             self.add_hidden(u'__errorurl', self.session_key())
       
    97             self.add_hidden(u'__domid', self.domid)
       
    98             self.restore_previous_post(self.session_key())
       
    99         # XXX why do we need two different variables (mainform and copy_nav_params ?)
       
   100         if self.copy_nav_params:
       
   101             for param in controller.NAV_FORM_PARAMETERS:
       
   102                 if not param in kwargs:
       
   103                     value = req.form.get(param)
       
   104                     if value:
       
   105                         self.add_hidden(param, value)
       
   106         if submitmsg is not None:
       
   107             self.add_hidden(u'__message', submitmsg)
    78 
   108 
    79     @property
   109     @property
    80     def root_form(self):
   110     def root_form(self):
    81         """return the root form"""
   111         """return the root form"""
    82         if self.parent_form is None:
   112         if self.parent_form is None: