56 |
56 |
57 * `fieldsets_in_order`: fieldset name sequence, to control order |
57 * `fieldsets_in_order`: fieldset name sequence, to control order |
58 """ |
58 """ |
59 __regid__ = 'base' |
59 __regid__ = 'base' |
60 |
60 |
61 internal_fields = ('__errorurl',) + NAV_FORM_PARAMETERS |
|
62 |
61 |
63 # attributes overrideable by subclasses or through __init__ |
62 # attributes overrideable by subclasses or through __init__ |
64 needs_js = ('cubicweb.ajax.js', 'cubicweb.edition.js',) |
63 needs_js = ('cubicweb.ajax.js', 'cubicweb.edition.js',) |
65 needs_css = ('cubicweb.form.css',) |
64 needs_css = ('cubicweb.form.css',) |
66 domid = 'form' |
|
67 action = None |
65 action = None |
68 onsubmit = "return freezeFormButtons('%(domid)s');" |
66 onsubmit = "return freezeFormButtons('%(domid)s');" |
69 cssclass = None |
67 cssclass = None |
70 cssstyle = None |
68 cssstyle = None |
71 cwtarget = None |
69 cwtarget = None |
72 redirect_path = None |
70 redirect_path = None |
73 copy_nav_params = False |
|
74 form_buttons = None |
71 form_buttons = None |
75 form_renderer_id = 'default' |
72 form_renderer_id = 'default' |
76 fieldsets_in_order = None |
73 fieldsets_in_order = None |
77 |
|
78 def __init__(self, req, rset=None, row=None, col=None, |
|
79 submitmsg=None, mainform=True, |
|
80 **kwargs): |
|
81 super(FieldsForm, self).__init__(req, rset=rset, row=row, col=col) |
|
82 self.fields = list(self.__class__._fields_) |
|
83 for key, val in kwargs.items(): |
|
84 if key in NAV_FORM_PARAMETERS: |
|
85 self.add_hidden(key, val) |
|
86 elif hasattr(self.__class__, key) and not key[0] == '_': |
|
87 setattr(self, key, val) |
|
88 else: |
|
89 self.cw_extra_kwargs[key] = val |
|
90 # skip other parameters, usually given for selection |
|
91 # (else write a custom class to handle them) |
|
92 if mainform: |
|
93 self.add_hidden('__errorurl', self.session_key()) |
|
94 self.add_hidden('__domid', self.domid) |
|
95 self.restore_previous_post(self.session_key()) |
|
96 |
|
97 # XXX why do we need two different variables (mainform and copy_nav_params ?) |
|
98 if self.copy_nav_params: |
|
99 for param in NAV_FORM_PARAMETERS: |
|
100 if not param in kwargs: |
|
101 value = req.form.get(param) |
|
102 if value: |
|
103 self.add_hidden(param, value) |
|
104 if submitmsg is not None: |
|
105 self.add_hidden('__message', submitmsg) |
|
106 if 'domid' in kwargs:# session key changed |
|
107 self.restore_previous_post(self.session_key()) |
|
108 |
74 |
109 @property |
75 @property |
110 def needs_multipart(self): |
76 def needs_multipart(self): |
111 """true if the form needs enctype=multipart/form-data""" |
77 """true if the form needs enctype=multipart/form-data""" |
112 return any(field.needs_multipart for field in self.fields) |
78 return any(field.needs_multipart for field in self.fields) |