10 from logilab.mtconverter import html_escape |
10 from logilab.mtconverter import html_escape |
11 |
11 |
12 from cubicweb.selectors import yes, none_rset, match_user_groups |
12 from cubicweb.selectors import yes, none_rset, match_user_groups |
13 from cubicweb.view import AnyRsetView, StartupView, EntityView |
13 from cubicweb.view import AnyRsetView, StartupView, EntityView |
14 from cubicweb.common.uilib import html_traceback, rest_traceback |
14 from cubicweb.common.uilib import html_traceback, rest_traceback |
15 from cubicweb.web import INTERNAL_FIELD_VALUE, eid_param, stdmsgs |
15 from cubicweb.web import formwidgets |
16 from cubicweb.web.widgets import StaticComboBoxWidget |
16 from cubicweb.web.form import FieldsForm, EntityFieldsForm |
|
17 from cubicweb.web.formfields import guess_field |
|
18 from cubicweb.web.formrenderers import HTableFormRenderer |
17 |
19 |
18 _ = unicode |
20 _ = unicode |
19 |
21 |
20 SUBMIT_MSGID = _('Submit bug report') |
22 SUBMIT_MSGID = _('Submit bug report') |
21 MAIL_SUBMIT_MSGID = _('Submit bug report by mail') |
23 MAIL_SUBMIT_MSGID = _('Submit bug report by mail') |
22 |
|
23 def begin_form(w, entity, redirectvid, redirectpath=None, msg=None): |
|
24 w(u'<form method="post" action="%s">\n' % entity.req.build_url('edit')) |
|
25 w(u'<fieldset>\n') |
|
26 w(u'<input type="hidden" name="__redirectvid" value="%s"/>\n' % redirectvid) |
|
27 w(u'<input type="hidden" name="__redirectpath" value="%s"/>\n' % ( |
|
28 html_escape(redirectpath or entity.rest_path()))) |
|
29 w(u'<input type="hidden" name="eid" value="%s"/>\n' % entity.eid) |
|
30 w(u'<input type="hidden" name="%s" value="%s"/>\n' % ( |
|
31 eid_param('__type', entity.eid), entity.e_schema)) |
|
32 if msg: |
|
33 w(u'<input type="hidden" name="__message" value="%s"/>\n' |
|
34 % html_escape(msg)) |
|
35 |
24 |
36 |
25 |
37 class SecurityManagementView(EntityView): |
26 class SecurityManagementView(EntityView): |
38 """display security information for a given entity""" |
27 """display security information for a given entity""" |
39 id = 'security' |
28 id = 'security' |
87 w(u'</tr>\n') |
76 w(u'</tr>\n') |
88 w(u'</table>') |
77 w(u'</table>') |
89 |
78 |
90 def owned_by_edit_form(self, entity): |
79 def owned_by_edit_form(self, entity): |
91 self.w('<h3>%s</h3>' % self.req._('ownership')) |
80 self.w('<h3>%s</h3>' % self.req._('ownership')) |
92 begin_form(self.w, entity, 'security', msg= _('ownerships have been changed')) |
81 msg = self.req._('ownerships have been changed') |
93 self.w(u'<table border="0">\n') |
82 form = EntityFieldsForm(self.req, None, entity=entity, submitmsg=msg, |
94 self.w(u'<tr><td>\n') |
83 form_buttons=[formwidgets.SubmitButton()], |
95 wdg = entity.get_widget('owned_by') |
84 __redirectvid='security', |
96 self.w(wdg.edit_render(entity)) |
85 __redirectpath=entity.rest_path()) |
97 self.w(u'</td><td>\n') |
86 field = guess_field(entity.__class__, self.schema.rschema('owned_by')) |
98 self.w(self.button_ok()) |
87 form.append_field(field) |
99 self.w(u'</td></tr>\n</table>\n') |
88 self.w(form.form_render()) |
100 self.w(u'</fieldset></form>\n') |
|
101 |
89 |
102 def owned_by_information(self, entity): |
90 def owned_by_information(self, entity): |
103 ownersrset = entity.related('owned_by') |
91 ownersrset = entity.related('owned_by') |
104 if ownersrset: |
92 if ownersrset: |
105 self.w('<h3>%s</h3>' % self.req._('ownership')) |
93 self.w('<h3>%s</h3>' % self.req._('ownership')) |
145 w = self.w |
133 w = self.w |
146 _ = self.req._ |
134 _ = self.req._ |
147 newperm = self.vreg.etype_class('CWPermission')(self.req, None) |
135 newperm = self.vreg.etype_class('CWPermission')(self.req, None) |
148 newperm.eid = self.req.varmaker.next() |
136 newperm.eid = self.req.varmaker.next() |
149 w(u'<p>%s</p>' % _('add a new permission')) |
137 w(u'<p>%s</p>' % _('add a new permission')) |
150 begin_form(w, newperm, 'security', entity.rest_path()) |
138 form = EntityFieldsForm(self.req, None, entity=newperm, |
151 w(u'<input type="hidden" name="%s" value="%s"/>' |
139 form_buttons=[formwidgets.SubmitButton()], |
152 % (eid_param('edito-require_permission', newperm.eid), INTERNAL_FIELD_VALUE)) |
140 __redirectvid='security', |
153 w(u'<input type="hidden" name="%s" value="%s"/>' |
141 __redirectpath=entity.rest_path()) |
154 % (eid_param('require_permission', newperm.eid), entity.eid)) |
142 form.form_add_hidden('require_permission', entity.eid, role='object', eidparam=True) |
155 w(u'<table border="0">\n') |
143 permnames = getattr(entity, '__permissions__', None) |
156 w(u'<tr><th>%s</th><th>%s</th><th>%s</th><th> </th></tr>\n' |
144 if permnames is not None: |
157 % (_("name"), _("label"), _('granted to groups'))) |
145 field = guess_field(newperm.__class__, self.schema.rschema('name'), |
158 if getattr(entity, '__permissions__', None): |
146 widget=formwidgets.Select, choices=permnames) |
159 wdg = StaticComboBoxWidget(self.vreg, self.schema['CWPermission'], |
147 else: |
160 self.schema['name'], self.schema['String'], |
148 field = guess_field(newperm.__class__, self.schema.rschema('name')) |
161 vocabfunc=lambda x: entity.__permissions__) |
149 form.append_field(field) |
162 else: |
150 field = guess_field(newperm.__class__, self.schema.rschema('label')) |
163 wdg = newperm.get_widget('name') |
151 form.append_field(field) |
164 w(u'<tr><td>%s</td>\n' % wdg.edit_render(newperm)) |
152 field = guess_field(newperm.__class__, self.schema.rschema('require_group')) |
165 wdg = newperm.get_widget('label') |
153 form.append_field(field) |
166 w(u'<td>%s</td>\n' % wdg.edit_render(newperm)) |
154 self.w(form.form_render(renderer=HTableFormRenderer())) |
167 wdg = newperm.get_widget('require_group') |
155 |
168 w(u'<td>%s</td>\n' % wdg.edit_render(newperm)) |
|
169 w(u'<td>%s</td></tr>\n' % self.button_ok()) |
|
170 w(u'</table>') |
|
171 w(u'</fieldset></form>\n') |
|
172 |
|
173 def button_ok(self): |
|
174 return (u'<input class="validateButton" type="submit" name="submit" value="%s"/>' |
|
175 % self.req._(stdmsgs.BUTTON_OK)) |
|
176 |
156 |
177 |
157 |
178 class ErrorView(AnyRsetView): |
158 class ErrorView(AnyRsetView): |
179 """default view when no result has been found""" |
159 """default view when no result has been found""" |
180 __select__ = yes() |
160 __select__ = yes() |
231 form = FieldsForm(self.req, set_error_url=False) |
211 form = FieldsForm(self.req, set_error_url=False) |
232 binfo = text_error_description(ex, excinfo, req, eversion, cversions) |
212 binfo = text_error_description(ex, excinfo, req, eversion, cversions) |
233 form.form_add_hidden('description', binfo) |
213 form.form_add_hidden('description', binfo) |
234 form.form_add_hidden('__bugreporting', '1') |
214 form.form_add_hidden('__bugreporting', '1') |
235 if submitmail: |
215 if submitmail: |
236 form.form_buttons = [SubmitButton(MAIL_SUBMIT_MSGID)] |
216 form.form_buttons = [formwidgets.SubmitButton(MAIL_SUBMIT_MSGID)] |
237 form.action = req.build_url('reportbug') |
217 form.action = req.build_url('reportbug') |
238 w(form.form_render()) |
218 w(form.form_render()) |
239 if submiturl: |
219 if submiturl: |
240 form.form_add_hidden('description_format', 'text/rest') |
220 form.form_add_hidden('description_format', 'text/rest') |
241 form.form_buttons = [SubmitButton(SUBMIT_MSGID)] |
221 form.form_buttons = [formwidgets.SubmitButton(SUBMIT_MSGID)] |
242 form.action = submiturl |
222 form.action = submiturl |
243 w(form.form_render()) |
223 w(form.form_render()) |
244 |
224 |
245 |
225 |
246 def exc_message(ex, encoding): |
226 def exc_message(ex, encoding): |