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: |