web/views/management.py
branchtls-sprint
changeset 1402 04b7afb14b50
parent 1398 5fe84a5f7035
child 1453 a9841184be7c
equal deleted inserted replaced
1401:56764b1b4887 1402:04b7afb14b50
     1 """management and error screens
     1 """security management and error screens
     2 
     2 
     3 
     3 
     4 :organization: Logilab
     4 :organization: Logilab
     5 :copyright: 2001-2009 LOGILAB S.A. (Paris, FRANCE), all rights reserved.
     5 :copyright: 2001-2009 LOGILAB S.A. (Paris, FRANCE), all rights reserved.
     6 :contact: http://www.logilab.fr/ -- mailto:contact@logilab.fr
     6 :contact: http://www.logilab.fr/ -- mailto:contact@logilab.fr
    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>&nbsp;</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):