web/views/management.py
author Sylvain Thénault <sylvain.thenault@logilab.fr>
Wed, 28 Apr 2010 10:06:01 +0200
branchstable
changeset 5421 8167de96c523
parent 4714 fccda6dd91bf
child 5423 e15abfdcce38
child 5424 8ecbcbff9777
permissions -rw-r--r--
proper licensing information (LGPL-2.1). Hope I get it right this time.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
5421
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4714
diff changeset
     1
# copyright 2003-2010 LOGILAB S.A. (Paris, FRANCE), all rights reserved.
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4714
diff changeset
     2
# contact http://www.logilab.fr/ -- mailto:contact@logilab.fr
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4714
diff changeset
     3
#
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4714
diff changeset
     4
# This file is part of CubicWeb.
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4714
diff changeset
     5
#
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4714
diff changeset
     6
# CubicWeb is free software: you can redistribute it and/or modify it under the
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4714
diff changeset
     7
# terms of the GNU Lesser General Public License as published by the Free
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4714
diff changeset
     8
# Software Foundation, either version 2.1 of the License, or (at your option)
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4714
diff changeset
     9
# any later version.
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4714
diff changeset
    10
#
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4714
diff changeset
    11
# logilab-common is distributed in the hope that it will be useful, but WITHOUT
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4714
diff changeset
    12
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4714
diff changeset
    13
# FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License for more
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4714
diff changeset
    14
# details.
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4714
diff changeset
    15
#
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4714
diff changeset
    16
# You should have received a copy of the GNU Lesser General Public License along
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4714
diff changeset
    17
# with CubicWeb.  If not, see <http://www.gnu.org/licenses/>.
1402
04b7afb14b50 new style security management forms
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
    18
"""security management and error screens
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    19
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    20
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    21
"""
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    22
__docformat__ = "restructuredtext en"
1641
2c80b09d8d86 backport default
sylvain.thenault@logilab.fr
parents: 1569 1618
diff changeset
    23
_ = unicode
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    24
2312
af4d8f75c5db use xml_escape
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2270
diff changeset
    25
from logilab.mtconverter import xml_escape
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    26
1877
10b9feeb7905 anon should not see security management view
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1806
diff changeset
    27
from cubicweb.selectors import yes, none_rset, match_user_groups, authenticated_user
4706
6035e96b64dd added stats for munin collecting #615844 - from 027bbff3659f
arthur
parents: 4297
diff changeset
    28
from cubicweb.view import AnyRsetView, StartupView, EntityView, View
4023
eae23c40627a drop common subpackage
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3998
diff changeset
    29
from cubicweb.uilib import html_traceback, rest_traceback
2270
70c0da0f2181 should use a hidden text area for error description, not an hidden input (else the browser may remove line breaks)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2052
diff changeset
    30
from cubicweb.web import formwidgets as wdgs
1402
04b7afb14b50 new style security management forms
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
    31
from cubicweb.web.formfields import guess_field
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    32
1388
6d5f0ccf31b8 new style form for submitting bug reports
sylvain.thenault@logilab.fr
parents: 836
diff changeset
    33
SUBMIT_MSGID = _('Submit bug report')
6d5f0ccf31b8 new style form for submitting bug reports
sylvain.thenault@logilab.fr
parents: 836
diff changeset
    34
MAIL_SUBMIT_MSGID = _('Submit bug report by mail')
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    35
2005
e8032965f37a turn every form class into appobject. They should not be instantiated manually anymore.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1995
diff changeset
    36
1494
d68aac1cda0d #342695: add new security section to the schema view
Katia Saurfelt <katia.saurfelt@logilab.fr>
parents: 1333
diff changeset
    37
class SecurityViewMixIn(object):
d68aac1cda0d #342695: add new security section to the schema view
Katia Saurfelt <katia.saurfelt@logilab.fr>
parents: 1333
diff changeset
    38
    """display security information for a given schema """
1941
4f38e8b81a1a egroup -> cwgroup #343418
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 1877
diff changeset
    39
1494
d68aac1cda0d #342695: add new security section to the schema view
Katia Saurfelt <katia.saurfelt@logilab.fr>
parents: 1333
diff changeset
    40
    def schema_definition(self, eschema, link=True,  access_types=None):
d68aac1cda0d #342695: add new security section to the schema view
Katia Saurfelt <katia.saurfelt@logilab.fr>
parents: 1333
diff changeset
    41
        w = self.w
3451
6b46d73823f5 [api] work in progress, use __regid__, cw_*, etc.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 3377
diff changeset
    42
        _ = self._cw._
1494
d68aac1cda0d #342695: add new security section to the schema view
Katia Saurfelt <katia.saurfelt@logilab.fr>
parents: 1333
diff changeset
    43
        if not access_types:
d68aac1cda0d #342695: add new security section to the schema view
Katia Saurfelt <katia.saurfelt@logilab.fr>
parents: 1333
diff changeset
    44
            access_types = eschema.ACTIONS
d68aac1cda0d #342695: add new security section to the schema view
Katia Saurfelt <katia.saurfelt@logilab.fr>
parents: 1333
diff changeset
    45
        w(u'<table class="schemaInfo">')
1641
2c80b09d8d86 backport default
sylvain.thenault@logilab.fr
parents: 1569 1618
diff changeset
    46
        w(u'<tr><th>%s</th><th>%s</th><th>%s</th></tr>' % (
1494
d68aac1cda0d #342695: add new security section to the schema view
Katia Saurfelt <katia.saurfelt@logilab.fr>
parents: 1333
diff changeset
    47
            _("permission"), _('granted to groups'), _('rql expressions')))
d68aac1cda0d #342695: add new security section to the schema view
Katia Saurfelt <katia.saurfelt@logilab.fr>
parents: 1333
diff changeset
    48
        for access_type in access_types:
d68aac1cda0d #342695: add new security section to the schema view
Katia Saurfelt <katia.saurfelt@logilab.fr>
parents: 1333
diff changeset
    49
            w(u'<tr>')
3451
6b46d73823f5 [api] work in progress, use __regid__, cw_*, etc.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 3377
diff changeset
    50
            w(u'<td>%s</td>' % self._cw.__('%s_perm' % access_type))
1494
d68aac1cda0d #342695: add new security section to the schema view
Katia Saurfelt <katia.saurfelt@logilab.fr>
parents: 1333
diff changeset
    51
            groups = eschema.get_groups(access_type)
d68aac1cda0d #342695: add new security section to the schema view
Katia Saurfelt <katia.saurfelt@logilab.fr>
parents: 1333
diff changeset
    52
            l = []
d68aac1cda0d #342695: add new security section to the schema view
Katia Saurfelt <katia.saurfelt@logilab.fr>
parents: 1333
diff changeset
    53
            groups = [(_(group), group) for group in groups]
d68aac1cda0d #342695: add new security section to the schema view
Katia Saurfelt <katia.saurfelt@logilab.fr>
parents: 1333
diff changeset
    54
            for trad, group in sorted(groups):
d68aac1cda0d #342695: add new security section to the schema view
Katia Saurfelt <katia.saurfelt@logilab.fr>
parents: 1333
diff changeset
    55
                if link:
2047
6ab574aa5e5f reminder
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2005
diff changeset
    56
                    # XXX we should get a group entity and call its absolute_url
6ab574aa5e5f reminder
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2005
diff changeset
    57
                    # method
1494
d68aac1cda0d #342695: add new security section to the schema view
Katia Saurfelt <katia.saurfelt@logilab.fr>
parents: 1333
diff changeset
    58
                    l.append(u'<a href="%s" class="%s">%s</a><br/>' % (
3451
6b46d73823f5 [api] work in progress, use __regid__, cw_*, etc.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 3377
diff changeset
    59
                    self._cw.build_url('cwgroup/%s' % group), group, trad))
1494
d68aac1cda0d #342695: add new security section to the schema view
Katia Saurfelt <katia.saurfelt@logilab.fr>
parents: 1333
diff changeset
    60
                else:
d68aac1cda0d #342695: add new security section to the schema view
Katia Saurfelt <katia.saurfelt@logilab.fr>
parents: 1333
diff changeset
    61
                    l.append(u'<div class="%s">%s</div>' % (group, trad))
d68aac1cda0d #342695: add new security section to the schema view
Katia Saurfelt <katia.saurfelt@logilab.fr>
parents: 1333
diff changeset
    62
            w(u'<td>%s</td>' % u''.join(l))
d68aac1cda0d #342695: add new security section to the schema view
Katia Saurfelt <katia.saurfelt@logilab.fr>
parents: 1333
diff changeset
    63
            rqlexprs = eschema.get_rqlexprs(access_type)
d68aac1cda0d #342695: add new security section to the schema view
Katia Saurfelt <katia.saurfelt@logilab.fr>
parents: 1333
diff changeset
    64
            w(u'<td>%s</td>' % u'<br/><br/>'.join(expr.expression for expr in rqlexprs))
d68aac1cda0d #342695: add new security section to the schema view
Katia Saurfelt <katia.saurfelt@logilab.fr>
parents: 1333
diff changeset
    65
            w(u'</tr>\n')
d68aac1cda0d #342695: add new security section to the schema view
Katia Saurfelt <katia.saurfelt@logilab.fr>
parents: 1333
diff changeset
    66
        w(u'</table>')
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    67
1494
d68aac1cda0d #342695: add new security section to the schema view
Katia Saurfelt <katia.saurfelt@logilab.fr>
parents: 1333
diff changeset
    68
    def has_schema_modified_permissions(self, eschema, access_types):
d68aac1cda0d #342695: add new security section to the schema view
Katia Saurfelt <katia.saurfelt@logilab.fr>
parents: 1333
diff changeset
    69
        """ return True if eschema's actual permissions are diffrents
d68aac1cda0d #342695: add new security section to the schema view
Katia Saurfelt <katia.saurfelt@logilab.fr>
parents: 1333
diff changeset
    70
        from the default ones
d68aac1cda0d #342695: add new security section to the schema view
Katia Saurfelt <katia.saurfelt@logilab.fr>
parents: 1333
diff changeset
    71
        """
d68aac1cda0d #342695: add new security section to the schema view
Katia Saurfelt <katia.saurfelt@logilab.fr>
parents: 1333
diff changeset
    72
        for access_type in access_types:
d68aac1cda0d #342695: add new security section to the schema view
Katia Saurfelt <katia.saurfelt@logilab.fr>
parents: 1333
diff changeset
    73
            if eschema.get_rqlexprs(access_type):
d68aac1cda0d #342695: add new security section to the schema view
Katia Saurfelt <katia.saurfelt@logilab.fr>
parents: 1333
diff changeset
    74
                return True
d68aac1cda0d #342695: add new security section to the schema view
Katia Saurfelt <katia.saurfelt@logilab.fr>
parents: 1333
diff changeset
    75
            if eschema.get_groups(access_type) != \
d68aac1cda0d #342695: add new security section to the schema view
Katia Saurfelt <katia.saurfelt@logilab.fr>
parents: 1333
diff changeset
    76
                    frozenset(eschema.get_default_groups()[access_type]):
d68aac1cda0d #342695: add new security section to the schema view
Katia Saurfelt <katia.saurfelt@logilab.fr>
parents: 1333
diff changeset
    77
                return True
d68aac1cda0d #342695: add new security section to the schema view
Katia Saurfelt <katia.saurfelt@logilab.fr>
parents: 1333
diff changeset
    78
        return False
d68aac1cda0d #342695: add new security section to the schema view
Katia Saurfelt <katia.saurfelt@logilab.fr>
parents: 1333
diff changeset
    79
1525
cc2e2cbd7019 include dom id of the form in __errorurl in case there are multiple forms in a page
sylvain.thenault@logilab.fr
parents: 1522
diff changeset
    80
1494
d68aac1cda0d #342695: add new security section to the schema view
Katia Saurfelt <katia.saurfelt@logilab.fr>
parents: 1333
diff changeset
    81
class SecurityManagementView(EntityView, SecurityViewMixIn):
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    82
    """display security information for a given entity"""
3377
dd9d292b6a6d use __regid__ instead of id on appobject classes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3230
diff changeset
    83
    __regid__ = 'security'
1877
10b9feeb7905 anon should not see security management view
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1806
diff changeset
    84
    __select__ = EntityView.__select__ & authenticated_user()
10b9feeb7905 anon should not see security management view
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1806
diff changeset
    85
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    86
    title = _('security')
1941
4f38e8b81a1a egroup -> cwgroup #343418
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 1877
diff changeset
    87
1569
99a19875ef1e set progress div in call() to avoid duplication when applied on multiple entities
sylvain.thenault@logilab.fr
parents: 1568
diff changeset
    88
    def call(self):
3451
6b46d73823f5 [api] work in progress, use __regid__, cw_*, etc.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 3377
diff changeset
    89
        self.w(u'<div id="progress">%s</div>' % self._cw._('validating...'))
1569
99a19875ef1e set progress div in call() to avoid duplication when applied on multiple entities
sylvain.thenault@logilab.fr
parents: 1568
diff changeset
    90
        super(SecurityManagementView, self).call()
602
1454282a8b45 [views] cleanup, be less heavy with self.w ...
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 431
diff changeset
    91
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    92
    def cell_call(self, row, col):
3451
6b46d73823f5 [api] work in progress, use __regid__, cw_*, etc.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 3377
diff changeset
    93
        self._cw.add_js('cubicweb.edition.js')
6b46d73823f5 [api] work in progress, use __regid__, cw_*, etc.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 3377
diff changeset
    94
        self._cw.add_css('cubicweb.acl.css')
6b46d73823f5 [api] work in progress, use __regid__, cw_*, etc.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 3377
diff changeset
    95
        entity = self.cw_rset.get_entity(row, col)
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    96
        w = self.w
3451
6b46d73823f5 [api] work in progress, use __regid__, cw_*, etc.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 3377
diff changeset
    97
        _ = self._cw._
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    98
        w(u'<h1><span class="etype">%s</span> <a href="%s">%s</a></h1>'
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    99
          % (entity.dc_type().capitalize(),
2312
af4d8f75c5db use xml_escape
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2270
diff changeset
   100
             xml_escape(entity.absolute_url()),
af4d8f75c5db use xml_escape
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2270
diff changeset
   101
             xml_escape(entity.dc_title())))
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   102
        # first show permissions defined by the schema
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   103
        self.w('<h2>%s</h2>' % _('schema\'s permissions definitions'))
1494
d68aac1cda0d #342695: add new security section to the schema view
Katia Saurfelt <katia.saurfelt@logilab.fr>
parents: 1333
diff changeset
   104
        self.schema_definition(entity.e_schema)
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   105
        self.w('<h2>%s</h2>' % _('manage security'))
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   106
        # ownership information
4045
f4a52abb6f4f cw 3.6 api update
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 4023
diff changeset
   107
        if self._cw.vreg.schema.rschema('owned_by').has_perm(self._cw, 'add',
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   108
                                                    fromeid=entity.eid):
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   109
            self.owned_by_edit_form(entity)
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   110
        else:
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   111
            self.owned_by_information(entity)
1518
8f4d2892e809 eperm -> cwperm
sylvain.thenault@logilab.fr
parents: 1477
diff changeset
   112
        # cwpermissions
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   113
        if 'require_permission' in entity.e_schema.subject_relations():
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   114
            w('<h3>%s</h3>' % _('permissions for this entity'))
4045
f4a52abb6f4f cw 3.6 api update
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 4023
diff changeset
   115
            reqpermschema = self._cw.vreg.schema.rschema('require_permission')
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   116
            self.require_permission_information(entity, reqpermschema)
3451
6b46d73823f5 [api] work in progress, use __regid__, cw_*, etc.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 3377
diff changeset
   117
            if reqpermschema.has_perm(self._cw, 'add', fromeid=entity.eid):
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   118
                self.require_permission_edit_form(entity)
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   119
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   120
    def owned_by_edit_form(self, entity):
3451
6b46d73823f5 [api] work in progress, use __regid__, cw_*, etc.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 3377
diff changeset
   121
        self.w('<h3>%s</h3>' % self._cw._('ownership'))
6b46d73823f5 [api] work in progress, use __regid__, cw_*, etc.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 3377
diff changeset
   122
        msg = self._cw._('ownerships have been changed')
6b46d73823f5 [api] work in progress, use __regid__, cw_*, etc.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 3377
diff changeset
   123
        form = self._cw.vreg['forms'].select('base', self._cw, entity=entity,
2650
18aec79ec3a3 R [vreg] important refactoring of the vregistry, moving behaviour to end dictionnary (and so leaving room for more flexibility ; keep bw compat ; update api usage in cw
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2433
diff changeset
   124
                                         form_renderer_id='base', submitmsg=msg,
18aec79ec3a3 R [vreg] important refactoring of the vregistry, moving behaviour to end dictionnary (and so leaving room for more flexibility ; keep bw compat ; update api usage in cw
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2433
diff changeset
   125
                                         form_buttons=[wdgs.SubmitButton()],
18aec79ec3a3 R [vreg] important refactoring of the vregistry, moving behaviour to end dictionnary (and so leaving room for more flexibility ; keep bw compat ; update api usage in cw
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2433
diff changeset
   126
                                         domid='ownership%s' % entity.eid,
18aec79ec3a3 R [vreg] important refactoring of the vregistry, moving behaviour to end dictionnary (and so leaving room for more flexibility ; keep bw compat ; update api usage in cw
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2433
diff changeset
   127
                                         __redirectvid='security',
18aec79ec3a3 R [vreg] important refactoring of the vregistry, moving behaviour to end dictionnary (and so leaving room for more flexibility ; keep bw compat ; update api usage in cw
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2433
diff changeset
   128
                                         __redirectpath=entity.rest_path())
4045
f4a52abb6f4f cw 3.6 api update
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 4023
diff changeset
   129
        field = guess_field(entity.e_schema, self._cw.vreg.schema.rschema('owned_by'))
1453
a9841184be7c guess_field now takes an entity schema as first argument, not an entity class
sylvain.thenault@logilab.fr
parents: 1402
diff changeset
   130
        form.append_field(field)
4297
5f2081181055 3.6 api update
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4252
diff changeset
   131
        self.w(form.render(display_progress_div=False))
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   132
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   133
    def owned_by_information(self, entity):
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   134
        ownersrset = entity.related('owned_by')
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   135
        if ownersrset:
3451
6b46d73823f5 [api] work in progress, use __regid__, cw_*, etc.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 3377
diff changeset
   136
            self.w('<h3>%s</h3>' % self._cw._('ownership'))
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   137
            self.w(u'<div class="ownerInfo">')
3451
6b46d73823f5 [api] work in progress, use __regid__, cw_*, etc.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 3377
diff changeset
   138
            self.w(self._cw._('this entity is currently owned by') + ' ')
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   139
            self.wview('csv', entity.related('owned_by'), 'null')
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   140
            self.w(u'</div>')
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   141
        # else we don't know if this is because entity has no owner or becayse
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   142
        # user as no access to owner users entities
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   143
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   144
    def require_permission_information(self, entity, reqpermschema):
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   145
        if entity.require_permission:
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   146
            w = self.w
3451
6b46d73823f5 [api] work in progress, use __regid__, cw_*, etc.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 3377
diff changeset
   147
            _ = self._cw._
6b46d73823f5 [api] work in progress, use __regid__, cw_*, etc.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 3377
diff changeset
   148
            if reqpermschema.has_perm(self._cw, 'delete', fromeid=entity.eid):
6b46d73823f5 [api] work in progress, use __regid__, cw_*, etc.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 3377
diff changeset
   149
                delurl = self._cw.build_url('edit', __redirectvid='security',
6b46d73823f5 [api] work in progress, use __regid__, cw_*, etc.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 3377
diff changeset
   150
                                            __redirectpath=entity.rest_path())
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   151
                delurl = delurl.replace('%', '%%')
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   152
                # don't give __delete value to build_url else it will be urlquoted
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   153
                # and this will replace %s by %25s
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   154
                delurl += '&__delete=%s:require_permission:%%s' % entity.eid
2996
866a2c135c33 B #345282 xhtml requires to use &#160; instead of &nbsp;
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 2670
diff changeset
   155
                dellinktempl = u'[<a href="%s" title="%s">-</a>]&#160;' % (
2312
af4d8f75c5db use xml_escape
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2270
diff changeset
   156
                    xml_escape(delurl), _('delete this permission'))
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   157
            else:
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   158
                dellinktempl = None
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   159
            w(u'<table class="schemaInfo">')
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   160
            w(u'<tr><th>%s</th><th>%s</th></tr>' % (_("permission"),
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   161
                                                    _('granted to groups')))
1518
8f4d2892e809 eperm -> cwperm
sylvain.thenault@logilab.fr
parents: 1477
diff changeset
   162
            for cwperm in entity.require_permission:
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   163
                w(u'<tr>')
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   164
                if dellinktempl:
1518
8f4d2892e809 eperm -> cwperm
sylvain.thenault@logilab.fr
parents: 1477
diff changeset
   165
                    w(u'<td>%s%s</td>' % (dellinktempl % cwperm.eid,
8f4d2892e809 eperm -> cwperm
sylvain.thenault@logilab.fr
parents: 1477
diff changeset
   166
                                          cwperm.view('oneline')))
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   167
                else:
1518
8f4d2892e809 eperm -> cwperm
sylvain.thenault@logilab.fr
parents: 1477
diff changeset
   168
                    w(u'<td>%s</td>' % cwperm.view('oneline'))
8f4d2892e809 eperm -> cwperm
sylvain.thenault@logilab.fr
parents: 1477
diff changeset
   169
                w(u'<td>%s</td>' % self.view('csv', cwperm.related('require_group'), 'null'))
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   170
                w(u'</tr>\n')
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   171
            w(u'</table>')
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   172
        else:
3451
6b46d73823f5 [api] work in progress, use __regid__, cw_*, etc.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 3377
diff changeset
   173
            self.w(self._cw._('no associated permissions'))
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   174
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   175
    def require_permission_edit_form(self, entity):
3451
6b46d73823f5 [api] work in progress, use __regid__, cw_*, etc.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 3377
diff changeset
   176
        newperm = self._cw.vreg['etypes'].etype_class('CWPermission')(self._cw)
6b46d73823f5 [api] work in progress, use __regid__, cw_*, etc.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 3377
diff changeset
   177
        newperm.eid = self._cw.varmaker.next()
6b46d73823f5 [api] work in progress, use __regid__, cw_*, etc.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 3377
diff changeset
   178
        self.w(u'<p>%s</p>' % self._cw._('add a new permission'))
6b46d73823f5 [api] work in progress, use __regid__, cw_*, etc.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 3377
diff changeset
   179
        form = self._cw.vreg['forms'].select('base', self._cw, entity=newperm,
2650
18aec79ec3a3 R [vreg] important refactoring of the vregistry, moving behaviour to end dictionnary (and so leaving room for more flexibility ; keep bw compat ; update api usage in cw
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2433
diff changeset
   180
                                         form_buttons=[wdgs.SubmitButton()],
18aec79ec3a3 R [vreg] important refactoring of the vregistry, moving behaviour to end dictionnary (and so leaving room for more flexibility ; keep bw compat ; update api usage in cw
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2433
diff changeset
   181
                                         domid='reqperm%s' % entity.eid,
18aec79ec3a3 R [vreg] important refactoring of the vregistry, moving behaviour to end dictionnary (and so leaving room for more flexibility ; keep bw compat ; update api usage in cw
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2433
diff changeset
   182
                                         __redirectvid='security',
18aec79ec3a3 R [vreg] important refactoring of the vregistry, moving behaviour to end dictionnary (and so leaving room for more flexibility ; keep bw compat ; update api usage in cw
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2433
diff changeset
   183
                                         __redirectpath=entity.rest_path())
4164
119a374c5eb4 form_add_hidden -> add_hidden
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4045
diff changeset
   184
        form.add_hidden('require_permission', entity.eid, role='object',
119a374c5eb4 form_add_hidden -> add_hidden
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4045
diff changeset
   185
                        eidparam=True)
1402
04b7afb14b50 new style security management forms
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   186
        permnames = getattr(entity, '__permissions__', None)
1453
a9841184be7c guess_field now takes an entity schema as first argument, not an entity class
sylvain.thenault@logilab.fr
parents: 1402
diff changeset
   187
        cwpermschema = newperm.e_schema
1402
04b7afb14b50 new style security management forms
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   188
        if permnames is not None:
4045
f4a52abb6f4f cw 3.6 api update
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 4023
diff changeset
   189
            field = guess_field(cwpermschema, self._cw.vreg.schema.rschema('name'),
2270
70c0da0f2181 should use a hidden text area for error description, not an hidden input (else the browser may remove line breaks)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2052
diff changeset
   190
                                widget=wdgs.Select({'size': 1}),
1531
5fc1e6a15147 set size of select widget
sylvain.thenault@logilab.fr
parents: 1525
diff changeset
   191
                                choices=permnames)
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   192
        else:
4045
f4a52abb6f4f cw 3.6 api update
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 4023
diff changeset
   193
            field = guess_field(cwpermschema, self._cw.vreg.schema.rschema('name'))
1402
04b7afb14b50 new style security management forms
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   194
        form.append_field(field)
4045
f4a52abb6f4f cw 3.6 api update
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 4023
diff changeset
   195
        field = guess_field(cwpermschema, self._cw.vreg.schema.rschema('label'))
1402
04b7afb14b50 new style security management forms
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   196
        form.append_field(field)
4045
f4a52abb6f4f cw 3.6 api update
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 4023
diff changeset
   197
        field = guess_field(cwpermschema, self._cw.vreg.schema.rschema('require_group'))
1402
04b7afb14b50 new style security management forms
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   198
        form.append_field(field)
3451
6b46d73823f5 [api] work in progress, use __regid__, cw_*, etc.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 3377
diff changeset
   199
        renderer = self._cw.vreg['formrenderers'].select(
6b46d73823f5 [api] work in progress, use __regid__, cw_*, etc.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 3377
diff changeset
   200
            'htable', self._cw, rset=None, display_progress_div=False)
3953
19aefd78f61b [forms] deprecate form_render(**kwargs) in favor of render(formvalues=None, rendervalues=None, renderer=None)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3220
diff changeset
   201
        self.w(form.render(renderer=renderer))
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   202
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   203
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   204
class ErrorView(AnyRsetView):
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   205
    """default view when no result has been found"""
731
ac4a94e50b60 some more s/__selectors__/__select__ but still more to come
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 691
diff changeset
   206
    __select__ = yes()
3377
dd9d292b6a6d use __regid__ instead of id on appobject classes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3230
diff changeset
   207
    __regid__ = 'error'
602
1454282a8b45 [views] cleanup, be less heavy with self.w ...
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 431
diff changeset
   208
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   209
    def page_title(self):
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   210
        """returns a title according to the result set - used for the
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   211
        title in the HTML header
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   212
        """
3451
6b46d73823f5 [api] work in progress, use __regid__, cw_*, etc.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 3377
diff changeset
   213
        return self._cw._('an error occured')
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   214
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   215
    def call(self):
3451
6b46d73823f5 [api] work in progress, use __regid__, cw_*, etc.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 3377
diff changeset
   216
        req = self._cw.reset_headers()
1388
6d5f0ccf31b8 new style form for submitting bug reports
sylvain.thenault@logilab.fr
parents: 836
diff changeset
   217
        w = self.w
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   218
        ex = req.data.get('ex')#_("unable to find exception information"))
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   219
        excinfo = req.data.get('excinfo')
3451
6b46d73823f5 [api] work in progress, use __regid__, cw_*, etc.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 3377
diff changeset
   220
        title = self._cw._('an error occured')
602
1454282a8b45 [views] cleanup, be less heavy with self.w ...
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 431
diff changeset
   221
        w(u'<h2>%s</h2>' % title)
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   222
        if 'errmsg' in req.data:
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   223
            ex = req.data['errmsg']
174
a2966960d550 get actual exception class instead of 'unicode' in the error view
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 0
diff changeset
   224
            exclass = None
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   225
        else:
174
a2966960d550 get actual exception class instead of 'unicode' in the error view
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 0
diff changeset
   226
            exclass = ex.__class__.__name__
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   227
            ex = exc_message(ex, req.encoding)
3733
c3feb6a33f58 remove some warnings
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3451
diff changeset
   228
        if excinfo is not None and self._cw.vreg.config['print-traceback']:
174
a2966960d550 get actual exception class instead of 'unicode' in the error view
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 0
diff changeset
   229
            if exclass is None:
602
1454282a8b45 [views] cleanup, be less heavy with self.w ...
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 431
diff changeset
   230
                w(u'<div class="tb">%s</div>'
2312
af4d8f75c5db use xml_escape
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2270
diff changeset
   231
                       % xml_escape(ex).replace("\n","<br />"))
174
a2966960d550 get actual exception class instead of 'unicode' in the error view
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 0
diff changeset
   232
            else:
602
1454282a8b45 [views] cleanup, be less heavy with self.w ...
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 431
diff changeset
   233
                w(u'<div class="tb">%s: %s</div>'
2312
af4d8f75c5db use xml_escape
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2270
diff changeset
   234
                       % (exclass, xml_escape(ex).replace("\n","<br />")))
602
1454282a8b45 [views] cleanup, be less heavy with self.w ...
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 431
diff changeset
   235
            w(u'<hr />')
1454282a8b45 [views] cleanup, be less heavy with self.w ...
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 431
diff changeset
   236
            w(u'<div class="tb">%s</div>' % html_traceback(excinfo, ex, ''))
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   237
        else:
2312
af4d8f75c5db use xml_escape
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2270
diff changeset
   238
            w(u'<div class="tb">%s</div>' % (xml_escape(ex).replace("\n","<br />")))
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   239
        # if excinfo is not None, it's probably not a bug
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   240
        if excinfo is None:
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   241
            return
3733
c3feb6a33f58 remove some warnings
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3451
diff changeset
   242
        vcconf = self._cw.vreg.config.vc_config()
602
1454282a8b45 [views] cleanup, be less heavy with self.w ...
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 431
diff changeset
   243
        w(u"<div>")
3451
6b46d73823f5 [api] work in progress, use __regid__, cw_*, etc.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 3377
diff changeset
   244
        eversion = vcconf.get('cubicweb', self._cw._('no version information'))
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   245
        # NOTE: tuple wrapping needed since eversion is itself a tuple
602
1454282a8b45 [views] cleanup, be less heavy with self.w ...
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 431
diff changeset
   246
        w(u"<b>CubicWeb version:</b> %s<br/>\n" % (eversion,))
1388
6d5f0ccf31b8 new style form for submitting bug reports
sylvain.thenault@logilab.fr
parents: 836
diff changeset
   247
        cversions = []
3733
c3feb6a33f58 remove some warnings
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3451
diff changeset
   248
        for cube in self._cw.vreg.config.cubes():
3451
6b46d73823f5 [api] work in progress, use __regid__, cw_*, etc.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 3377
diff changeset
   249
            cubeversion = vcconf.get(cube, self._cw._('no version information'))
1388
6d5f0ccf31b8 new style form for submitting bug reports
sylvain.thenault@logilab.fr
parents: 836
diff changeset
   250
            w(u"<b>Package %s version:</b> %s<br/>\n" % (cube, cubeversion))
6d5f0ccf31b8 new style form for submitting bug reports
sylvain.thenault@logilab.fr
parents: 836
diff changeset
   251
            cversions.append((cube, cubeversion))
602
1454282a8b45 [views] cleanup, be less heavy with self.w ...
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 431
diff changeset
   252
        w(u"</div>")
3200
747d17498cca #345461: drop support for cube_eid / direct bug submission
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2996
diff changeset
   253
        # creates a bug submission link if submit-mail is set
3733
c3feb6a33f58 remove some warnings
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3451
diff changeset
   254
        if self._cw.vreg.config['submit-mail']:
3451
6b46d73823f5 [api] work in progress, use __regid__, cw_*, etc.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 3377
diff changeset
   255
            form = self._cw.vreg['forms'].select('base', self._cw, rset=None,
2650
18aec79ec3a3 R [vreg] important refactoring of the vregistry, moving behaviour to end dictionnary (and so leaving room for more flexibility ; keep bw compat ; update api usage in cw
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2433
diff changeset
   256
                                             mainform=False)
1388
6d5f0ccf31b8 new style form for submitting bug reports
sylvain.thenault@logilab.fr
parents: 836
diff changeset
   257
            binfo = text_error_description(ex, excinfo, req, eversion, cversions)
4164
119a374c5eb4 form_add_hidden -> add_hidden
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4045
diff changeset
   258
            form.add_hidden('description', binfo,
119a374c5eb4 form_add_hidden -> add_hidden
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4045
diff changeset
   259
                            # we must use a text area to keep line breaks
119a374c5eb4 form_add_hidden -> add_hidden
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4045
diff changeset
   260
                            widget=wdgs.TextArea({'class': 'hidden'}))
119a374c5eb4 form_add_hidden -> add_hidden
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4045
diff changeset
   261
            form.add_hidden('__bugreporting', '1')
3200
747d17498cca #345461: drop support for cube_eid / direct bug submission
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2996
diff changeset
   262
            form.form_buttons = [wdgs.SubmitButton(MAIL_SUBMIT_MSGID)]
747d17498cca #345461: drop support for cube_eid / direct bug submission
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2996
diff changeset
   263
            form.action = req.build_url('reportbug')
3953
19aefd78f61b [forms] deprecate form_render(**kwargs) in favor of render(formvalues=None, rendervalues=None, renderer=None)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3220
diff changeset
   264
            w(form.render())
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   265
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   266
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   267
def exc_message(ex, encoding):
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   268
    try:
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   269
        return unicode(ex)
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   270
    except:
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   271
        try:
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   272
            return unicode(str(ex), encoding, 'replace')
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   273
        except:
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   274
            return unicode(repr(ex), encoding, 'replace')
602
1454282a8b45 [views] cleanup, be less heavy with self.w ...
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 431
diff changeset
   275
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   276
def text_error_description(ex, excinfo, req, eversion, cubes):
2312
af4d8f75c5db use xml_escape
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2270
diff changeset
   277
    binfo = rest_traceback(excinfo, xml_escape(ex))
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   278
    binfo += u'\n\n:URL: %s\n' % req.url()
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   279
    if not '__bugreporting' in req.form:
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   280
        binfo += u'\n:form params:\n'
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   281
        binfo += u'\n'.join(u'  * %s = %s' % (k, v) for k, v in req.form.iteritems())
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   282
    binfo += u'\n\n:CubicWeb version: %s\n'  % (eversion,)
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   283
    for pkg, pkgversion in cubes:
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   284
        binfo += u":Package %s version: %s\n" % (pkg, pkgversion)
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   285
    binfo += '\n'
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   286
    return binfo
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   287
1877
10b9feeb7905 anon should not see security management view
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1806
diff changeset
   288
4706
6035e96b64dd added stats for munin collecting #615844 - from 027bbff3659f
arthur
parents: 4297
diff changeset
   289
class CwStats(View):
6035e96b64dd added stats for munin collecting #615844 - from 027bbff3659f
arthur
parents: 4297
diff changeset
   290
    """A textual stats output for monitoring tools such as munin """
6035e96b64dd added stats for munin collecting #615844 - from 027bbff3659f
arthur
parents: 4297
diff changeset
   291
6035e96b64dd added stats for munin collecting #615844 - from 027bbff3659f
arthur
parents: 4297
diff changeset
   292
    __regid__ = 'processinfo'
6035e96b64dd added stats for munin collecting #615844 - from 027bbff3659f
arthur
parents: 4297
diff changeset
   293
    content_type = 'text/txt'
6035e96b64dd added stats for munin collecting #615844 - from 027bbff3659f
arthur
parents: 4297
diff changeset
   294
    templatable = False
6035e96b64dd added stats for munin collecting #615844 - from 027bbff3659f
arthur
parents: 4297
diff changeset
   295
    __select__ = none_rset() & match_user_groups('users', 'managers')
6035e96b64dd added stats for munin collecting #615844 - from 027bbff3659f
arthur
parents: 4297
diff changeset
   296
6035e96b64dd added stats for munin collecting #615844 - from 027bbff3659f
arthur
parents: 4297
diff changeset
   297
    def call(self):
6035e96b64dd added stats for munin collecting #615844 - from 027bbff3659f
arthur
parents: 4297
diff changeset
   298
        stats = self._cw.vreg.config.repository(None).stats()
6035e96b64dd added stats for munin collecting #615844 - from 027bbff3659f
arthur
parents: 4297
diff changeset
   299
        results = []
6035e96b64dd added stats for munin collecting #615844 - from 027bbff3659f
arthur
parents: 4297
diff changeset
   300
        for element in stats:
4713
785299dfc2c0 [i18n] nothing to translate here
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4706
diff changeset
   301
            results.append(u'%s %s' % (element, stats[element]))
785299dfc2c0 [i18n] nothing to translate here
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4706
diff changeset
   302
        self.w(u'\n'.join(results))