web/views/actions.py
author Sylvain Thénault <sylvain.thenault@logilab.fr>
Tue, 16 Feb 2010 10:33:48 +0100
changeset 4595 bb08a75832e6
parent 4583 356f08325072
child 4932 dce5ebe5d598
permissions -rw-r--r--
backport crypto/captcha utilities from the registration cube
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
     1
"""Set of HTML base actions
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
     2
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
     3
:organization: Logilab
4212
ab6573088b4a update copyright: welcome 2010
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 3689
diff changeset
     4
:copyright: 2001-2010 LOGILAB S.A. (Paris, FRANCE), license is LGPL v2.
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
     5
:contact: http://www.logilab.fr/ -- mailto:contact@logilab.fr
1977
606923dff11b big bunch of copyright / docstring update
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 1829
diff changeset
     6
:license: GNU Lesser General Public License, v2.1 - http://www.gnu.org/licenses
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
     7
"""
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
     8
__docformat__ = "restructuredtext en"
2121
9a14e1ee0eab cleanup
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1977
diff changeset
     9
_ = unicode
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    10
4412
eaff00ef0a71 add action to list entities of the CWEType currently displayed
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 4320
diff changeset
    11
from cubicweb.schema import display_name
2657
de974465d381 [appobject] kill VObject class, move base selector classes to appobject
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2652
diff changeset
    12
from cubicweb.appobject import objectify_selector
3495
438576c5b1d1 [ui] turn footer items into actions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3272
diff changeset
    13
from cubicweb.selectors import (EntitySelector, yes,
4320
4efd4c306746 closes #345410: two_lines_rset, two_cols_rset, two_etypes_rset are badly named
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4252
diff changeset
    14
    one_line_rset, multi_lines_rset, one_etype_rset, relation_possible,
1829
f54710fcdd62 avoid SelectAction selection to crash on startup views
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 1551
diff changeset
    15
    nonempty_rset, non_final_entity,
631
99f5852f8604 major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents: 554
diff changeset
    16
    authenticated_user, match_user_groups, match_search_state,
4412
eaff00ef0a71 add action to list entities of the CWEType currently displayed
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 4320
diff changeset
    17
    has_permission, has_add_permission, implements,
631
99f5852f8604 major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents: 554
diff changeset
    18
    )
3484
52e6c8d62ac6 fix some actions selectors
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3481
diff changeset
    19
from cubicweb.web import uicfg, controller, action
824
a5e6acffde30 merge, split baseviews (new csvexport, xmlrss and editviews modules)
sylvain.thenault@logilab.fr
parents: 822
diff changeset
    20
from cubicweb.web.views import linksearch_select_url, vid_from_rset
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    21
1178
8d9b705168d3 actions specific selector
sylvain.thenault@logilab.fr
parents: 1132
diff changeset
    22
8d9b705168d3 actions specific selector
sylvain.thenault@logilab.fr
parents: 1132
diff changeset
    23
class has_editable_relation(EntitySelector):
8d9b705168d3 actions specific selector
sylvain.thenault@logilab.fr
parents: 1132
diff changeset
    24
    """accept if some relations for an entity found in the result set is
8d9b705168d3 actions specific selector
sylvain.thenault@logilab.fr
parents: 1132
diff changeset
    25
    editable by the logged user.
8d9b705168d3 actions specific selector
sylvain.thenault@logilab.fr
parents: 1132
diff changeset
    26
8d9b705168d3 actions specific selector
sylvain.thenault@logilab.fr
parents: 1132
diff changeset
    27
    See `EntitySelector` documentation for behaviour when row is not specified.
8d9b705168d3 actions specific selector
sylvain.thenault@logilab.fr
parents: 1132
diff changeset
    28
    """
1452
546b9884d92c delete spaces, use .row .col instead of fixed 0 0
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
    29
1178
8d9b705168d3 actions specific selector
sylvain.thenault@logilab.fr
parents: 1132
diff changeset
    30
    def score_entity(self, entity):
8d9b705168d3 actions specific selector
sylvain.thenault@logilab.fr
parents: 1132
diff changeset
    31
        # if user has no update right but it can modify some relation,
8d9b705168d3 actions specific selector
sylvain.thenault@logilab.fr
parents: 1132
diff changeset
    32
        # display action anyway
3504
aadeab85af7c bad merge
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3503
diff changeset
    33
        form = entity._cw.vreg['forms'].select('edition', entity._cw,
4583
356f08325072 cleanup
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4490
diff changeset
    34
                                               entity=entity)
3476
6e927b729ae1 [uicfg, autoform] more consistent/powerful autoform_section rtags by using formtype/section; deprecates autoform_is_inlined; refactor automatci form and renderer thanks to this
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3451
diff changeset
    35
        for dummy in form.editable_relations():
1178
8d9b705168d3 actions specific selector
sylvain.thenault@logilab.fr
parents: 1132
diff changeset
    36
            return 1
3476
6e927b729ae1 [uicfg, autoform] more consistent/powerful autoform_section rtags by using formtype/section; deprecates autoform_is_inlined; refactor automatci form and renderer thanks to this
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3451
diff changeset
    37
        try:
6e927b729ae1 [uicfg, autoform] more consistent/powerful autoform_section rtags by using formtype/section; deprecates autoform_is_inlined; refactor automatci form and renderer thanks to this
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3451
diff changeset
    38
            editableattrs = form.editable_attributes(strict=True)
6e927b729ae1 [uicfg, autoform] more consistent/powerful autoform_section rtags by using formtype/section; deprecates autoform_is_inlined; refactor automatci form and renderer thanks to this
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3451
diff changeset
    39
        except TypeError:
6e927b729ae1 [uicfg, autoform] more consistent/powerful autoform_section rtags by using formtype/section; deprecates autoform_is_inlined; refactor automatci form and renderer thanks to this
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3451
diff changeset
    40
            warn('[3.6] %s: editable_attributes now take strict=False as '
6e927b729ae1 [uicfg, autoform] more consistent/powerful autoform_section rtags by using formtype/section; deprecates autoform_is_inlined; refactor automatci form and renderer thanks to this
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3451
diff changeset
    41
                 'optional argument', DeprecationWarning)
6e927b729ae1 [uicfg, autoform] more consistent/powerful autoform_section rtags by using formtype/section; deprecates autoform_is_inlined; refactor automatci form and renderer thanks to this
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3451
diff changeset
    42
            editableattrs = form.editable_attributes()
3730
d6f95bd1032d editable-attributes return a list of 2-uple
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3720
diff changeset
    43
        for rschema, role in editableattrs:
3689
deb13e88e037 follow yams 0.25 api changes to improve performance
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3495
diff changeset
    44
            if not rschema.final:
1178
8d9b705168d3 actions specific selector
sylvain.thenault@logilab.fr
parents: 1132
diff changeset
    45
                return 1
8d9b705168d3 actions specific selector
sylvain.thenault@logilab.fr
parents: 1132
diff changeset
    46
        return 0
8d9b705168d3 actions specific selector
sylvain.thenault@logilab.fr
parents: 1132
diff changeset
    47
728
a95b284150d1 first pass to use __select__ instead of __selectors__
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 714
diff changeset
    48
@objectify_selector
2161
200481e7b156 prepare time where it won't be mandatory to give rset to select()
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2121
diff changeset
    49
def match_searched_etype(cls, req, rset=None, **kwargs):
631
99f5852f8604 major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents: 554
diff changeset
    50
    return req.match_search_state(rset)
99f5852f8604 major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents: 554
diff changeset
    51
728
a95b284150d1 first pass to use __select__ instead of __selectors__
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 714
diff changeset
    52
@objectify_selector
2161
200481e7b156 prepare time where it won't be mandatory to give rset to select()
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2121
diff changeset
    53
def view_is_not_default_view(cls, req, rset=None, **kwargs):
631
99f5852f8604 major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents: 554
diff changeset
    54
    # interesting if it propose another view than the current one
99f5852f8604 major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents: 554
diff changeset
    55
    vid = req.form.get('vid')
3451
6b46d73823f5 [api] work in progress, use __regid__, cw_*, etc.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 3377
diff changeset
    56
    if vid and vid != vid_from_rset(req, rset, req.vreg.schema):
631
99f5852f8604 major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents: 554
diff changeset
    57
        return 1
99f5852f8604 major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents: 554
diff changeset
    58
    return 0
99f5852f8604 major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents: 554
diff changeset
    59
728
a95b284150d1 first pass to use __select__ instead of __selectors__
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 714
diff changeset
    60
@objectify_selector
2161
200481e7b156 prepare time where it won't be mandatory to give rset to select()
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2121
diff changeset
    61
def addable_etype_empty_rset(cls, req, rset=None, **kwargs):
631
99f5852f8604 major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents: 554
diff changeset
    62
    if rset is not None and not rset.rowcount:
99f5852f8604 major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents: 554
diff changeset
    63
        rqlst = rset.syntax_tree()
99f5852f8604 major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents: 554
diff changeset
    64
        if len(rqlst.children) > 1:
99f5852f8604 major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents: 554
diff changeset
    65
            return 0
99f5852f8604 major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents: 554
diff changeset
    66
        select = rqlst.children[0]
99f5852f8604 major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents: 554
diff changeset
    67
        if len(select.defined_vars) == 1 and len(select.solutions) == 1:
99f5852f8604 major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents: 554
diff changeset
    68
            rset._searched_etype = select.solutions[0].itervalues().next()
4087
2b8bc4cfd6ee api update
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3890
diff changeset
    69
            eschema = req.vreg.schema.eschema(rset._searched_etype)
3689
deb13e88e037 follow yams 0.25 api changes to improve performance
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3495
diff changeset
    70
            if not (eschema.final or eschema.is_subobject(strict=True)) \
631
99f5852f8604 major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents: 554
diff changeset
    71
                   and eschema.has_perm(req, 'add'):
99f5852f8604 major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents: 554
diff changeset
    72
                return 1
99f5852f8604 major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents: 554
diff changeset
    73
    return 0
99f5852f8604 major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents: 554
diff changeset
    74
2470
569d6641f08c cleanup
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2439
diff changeset
    75
# generic 'main' actions #######################################################
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    76
3484
52e6c8d62ac6 fix some actions selectors
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3481
diff changeset
    77
class SelectAction(action.Action):
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    78
    """base class for link search actions. By default apply on
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    79
    any size entity result search it the current state is 'linksearch'
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    80
    if accept match.
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    81
    """
3377
dd9d292b6a6d use __regid__ instead of id on appobject classes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3293
diff changeset
    82
    __regid__ = 'select'
3484
52e6c8d62ac6 fix some actions selectors
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3481
diff changeset
    83
    __select__ = (match_search_state('linksearch') & nonempty_rset()
52e6c8d62ac6 fix some actions selectors
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3481
diff changeset
    84
                  & match_searched_etype())
1452
546b9884d92c delete spaces, use .row .col instead of fixed 0 0
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
    85
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    86
    title = _('select')
1452
546b9884d92c delete spaces, use .row .col instead of fixed 0 0
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
    87
    category = 'mainactions'
631
99f5852f8604 major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents: 554
diff changeset
    88
    order = 0
1452
546b9884d92c delete spaces, use .row .col instead of fixed 0 0
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
    89
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    90
    def url(self):
3451
6b46d73823f5 [api] work in progress, use __regid__, cw_*, etc.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 3377
diff changeset
    91
        return linksearch_select_url(self._cw, self.cw_rset)
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    92
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    93
3484
52e6c8d62ac6 fix some actions selectors
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3481
diff changeset
    94
class CancelSelectAction(action.Action):
3377
dd9d292b6a6d use __regid__ instead of id on appobject classes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3293
diff changeset
    95
    __regid__ = 'cancel'
707
21a59b468f1a __selectors__ -> __select__
sylvain.thenault@logilab.fr
parents: 696
diff changeset
    96
    __select__ = match_search_state('linksearch')
1452
546b9884d92c delete spaces, use .row .col instead of fixed 0 0
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
    97
631
99f5852f8604 major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents: 554
diff changeset
    98
    title = _('cancel select')
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    99
    category = 'mainactions'
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   100
    order = 10
1452
546b9884d92c delete spaces, use .row .col instead of fixed 0 0
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   101
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   102
    def url(self):
3451
6b46d73823f5 [api] work in progress, use __regid__, cw_*, etc.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 3377
diff changeset
   103
        target, eid, r_type, searched_type = self._cw.search_state[1]
6b46d73823f5 [api] work in progress, use __regid__, cw_*, etc.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 3377
diff changeset
   104
        return self._cw.build_url(str(eid),
6b46d73823f5 [api] work in progress, use __regid__, cw_*, etc.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 3377
diff changeset
   105
                                  vid='edition', __mode='normal')
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   106
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   107
3484
52e6c8d62ac6 fix some actions selectors
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3481
diff changeset
   108
class ViewAction(action.Action):
3377
dd9d292b6a6d use __regid__ instead of id on appobject classes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3293
diff changeset
   109
    __regid__ = 'view'
3484
52e6c8d62ac6 fix some actions selectors
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3481
diff changeset
   110
    __select__ = (action.Action.__select__ &
707
21a59b468f1a __selectors__ -> __select__
sylvain.thenault@logilab.fr
parents: 696
diff changeset
   111
                  match_user_groups('users', 'managers') &
1452
546b9884d92c delete spaces, use .row .col instead of fixed 0 0
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   112
                  view_is_not_default_view() &
707
21a59b468f1a __selectors__ -> __select__
sylvain.thenault@logilab.fr
parents: 696
diff changeset
   113
                  non_final_entity())
1452
546b9884d92c delete spaces, use .row .col instead of fixed 0 0
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   114
631
99f5852f8604 major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents: 554
diff changeset
   115
    title = _('view')
1452
546b9884d92c delete spaces, use .row .col instead of fixed 0 0
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   116
    category = 'mainactions'
631
99f5852f8604 major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents: 554
diff changeset
   117
    order = 0
1452
546b9884d92c delete spaces, use .row .col instead of fixed 0 0
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   118
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   119
    def url(self):
3451
6b46d73823f5 [api] work in progress, use __regid__, cw_*, etc.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 3377
diff changeset
   120
        params = self._cw.form.copy()
2701
afcc19c92072 fix #344895: view action should skip navigation parameters
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2161
diff changeset
   121
        for param in ('vid', '__message') + controller.NAV_FORM_PARAMETERS:
afcc19c92072 fix #344895: view action should skip navigation parameters
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2161
diff changeset
   122
            params.pop(param, None)
3451
6b46d73823f5 [api] work in progress, use __regid__, cw_*, etc.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 3377
diff changeset
   123
        return self._cw.build_url(self._cw.relative_path(includeparams=False),
6b46d73823f5 [api] work in progress, use __regid__, cw_*, etc.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 3377
diff changeset
   124
                                  **params)
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   125
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   126
3484
52e6c8d62ac6 fix some actions selectors
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3481
diff changeset
   127
class ModifyAction(action.Action):
3377
dd9d292b6a6d use __regid__ instead of id on appobject classes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3293
diff changeset
   128
    __regid__ = 'edit'
3484
52e6c8d62ac6 fix some actions selectors
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3481
diff changeset
   129
    __select__ = (action.Action.__select__ & one_line_rset() &
707
21a59b468f1a __selectors__ -> __select__
sylvain.thenault@logilab.fr
parents: 696
diff changeset
   130
                  (has_permission('update') | has_editable_relation('add')))
1452
546b9884d92c delete spaces, use .row .col instead of fixed 0 0
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   131
631
99f5852f8604 major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents: 554
diff changeset
   132
    title = _('modify')
99f5852f8604 major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents: 554
diff changeset
   133
    category = 'mainactions'
99f5852f8604 major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents: 554
diff changeset
   134
    order = 10
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   135
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   136
    def url(self):
3451
6b46d73823f5 [api] work in progress, use __regid__, cw_*, etc.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 3377
diff changeset
   137
        entity = self.cw_rset.get_entity(self.cw_row or 0, self.cw_col or 0)
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   138
        return entity.absolute_url(vid='edition')
1452
546b9884d92c delete spaces, use .row .col instead of fixed 0 0
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   139
401
bc55a104d636 cleanup, backport manage perm action from jpl
sylvain.thenault@logilab.fr
parents: 328
diff changeset
   140
3484
52e6c8d62ac6 fix some actions selectors
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3481
diff changeset
   141
class MultipleEditAction(action.Action):
3377
dd9d292b6a6d use __regid__ instead of id on appobject classes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3293
diff changeset
   142
    __regid__ = 'muledit' # XXX get strange conflicts if id='edit'
4320
4efd4c306746 closes #345410: two_lines_rset, two_cols_rset, two_etypes_rset are badly named
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4252
diff changeset
   143
    __select__ = (action.Action.__select__ & multi_lines_rset() &
3484
52e6c8d62ac6 fix some actions selectors
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3481
diff changeset
   144
                  one_etype_rset() & has_permission('update'))
631
99f5852f8604 major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents: 554
diff changeset
   145
99f5852f8604 major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents: 554
diff changeset
   146
    title = _('modify')
401
bc55a104d636 cleanup, backport manage perm action from jpl
sylvain.thenault@logilab.fr
parents: 328
diff changeset
   147
    category = 'mainactions'
bc55a104d636 cleanup, backport manage perm action from jpl
sylvain.thenault@logilab.fr
parents: 328
diff changeset
   148
    order = 10
1452
546b9884d92c delete spaces, use .row .col instead of fixed 0 0
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   149
401
bc55a104d636 cleanup, backport manage perm action from jpl
sylvain.thenault@logilab.fr
parents: 328
diff changeset
   150
    def url(self):
3451
6b46d73823f5 [api] work in progress, use __regid__, cw_*, etc.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 3377
diff changeset
   151
        return self._cw.build_url('view', rql=self.cw_rset.rql, vid='muledit')
401
bc55a104d636 cleanup, backport manage perm action from jpl
sylvain.thenault@logilab.fr
parents: 328
diff changeset
   152
bc55a104d636 cleanup, backport manage perm action from jpl
sylvain.thenault@logilab.fr
parents: 328
diff changeset
   153
2470
569d6641f08c cleanup
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2439
diff changeset
   154
# generic "more" actions #######################################################
401
bc55a104d636 cleanup, backport manage perm action from jpl
sylvain.thenault@logilab.fr
parents: 328
diff changeset
   155
3484
52e6c8d62ac6 fix some actions selectors
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3481
diff changeset
   156
class ManagePermissionsAction(action.Action):
3377
dd9d292b6a6d use __regid__ instead of id on appobject classes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3293
diff changeset
   157
    __regid__ = 'managepermission'
3484
52e6c8d62ac6 fix some actions selectors
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3481
diff changeset
   158
    __select__ = (action.Action.__select__ & one_line_rset() &
52e6c8d62ac6 fix some actions selectors
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3481
diff changeset
   159
                  non_final_entity() & match_user_groups('managers'))
631
99f5852f8604 major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents: 554
diff changeset
   160
401
bc55a104d636 cleanup, backport manage perm action from jpl
sylvain.thenault@logilab.fr
parents: 328
diff changeset
   161
    title = _('manage permissions')
bc55a104d636 cleanup, backport manage perm action from jpl
sylvain.thenault@logilab.fr
parents: 328
diff changeset
   162
    category = 'moreactions'
1551
a41c1c0a9e13 fix manage permission order
sylvain.thenault@logilab.fr
parents: 1545
diff changeset
   163
    order = 15
401
bc55a104d636 cleanup, backport manage perm action from jpl
sylvain.thenault@logilab.fr
parents: 328
diff changeset
   164
707
21a59b468f1a __selectors__ -> __select__
sylvain.thenault@logilab.fr
parents: 696
diff changeset
   165
    @classmethod
4490
d45cde54d464 backport stable branch and some vreg cleanups:
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4462
diff changeset
   166
    def __registered__(cls, reg):
d45cde54d464 backport stable branch and some vreg cleanups:
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4462
diff changeset
   167
        if 'require_permission' in reg.schema:
822
e3d8db01f3f5 test_views fixes
sylvain.thenault@logilab.fr
parents: 786
diff changeset
   168
            cls.__select__ = (one_line_rset() & non_final_entity() &
e3d8db01f3f5 test_views fixes
sylvain.thenault@logilab.fr
parents: 786
diff changeset
   169
                              (match_user_groups('managers')
1398
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1263
diff changeset
   170
                               | relation_possible('require_permission', 'subject', 'CWPermission',
822
e3d8db01f3f5 test_views fixes
sylvain.thenault@logilab.fr
parents: 786
diff changeset
   171
                                                   action='add')))
4490
d45cde54d464 backport stable branch and some vreg cleanups:
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4462
diff changeset
   172
        return super(ManagePermissionsAction, cls).__registered__(reg)
1452
546b9884d92c delete spaces, use .row .col instead of fixed 0 0
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   173
401
bc55a104d636 cleanup, backport manage perm action from jpl
sylvain.thenault@logilab.fr
parents: 328
diff changeset
   174
    def url(self):
3451
6b46d73823f5 [api] work in progress, use __regid__, cw_*, etc.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 3377
diff changeset
   175
        return self.cw_rset.get_entity(self.cw_row or 0, self.cw_col or 0).absolute_url(vid='security')
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   176
1452
546b9884d92c delete spaces, use .row .col instead of fixed 0 0
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   177
3484
52e6c8d62ac6 fix some actions selectors
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3481
diff changeset
   178
class DeleteAction(action.Action):
3377
dd9d292b6a6d use __regid__ instead of id on appobject classes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3293
diff changeset
   179
    __regid__ = 'delete'
3484
52e6c8d62ac6 fix some actions selectors
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3481
diff changeset
   180
    __select__ = action.Action.__select__ & has_permission('delete')
1452
546b9884d92c delete spaces, use .row .col instead of fixed 0 0
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   181
631
99f5852f8604 major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents: 554
diff changeset
   182
    title = _('delete')
1452
546b9884d92c delete spaces, use .row .col instead of fixed 0 0
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   183
    category = 'moreactions'
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   184
    order = 20
1452
546b9884d92c delete spaces, use .row .col instead of fixed 0 0
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   185
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   186
    def url(self):
3451
6b46d73823f5 [api] work in progress, use __regid__, cw_*, etc.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 3377
diff changeset
   187
        if len(self.cw_rset) == 1:
6b46d73823f5 [api] work in progress, use __regid__, cw_*, etc.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 3377
diff changeset
   188
            entity = self.cw_rset.get_entity(self.cw_row or 0, self.cw_col or 0)
6b46d73823f5 [api] work in progress, use __regid__, cw_*, etc.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 3377
diff changeset
   189
            return self._cw.build_url(entity.rest_path(), vid='deleteconf')
6b46d73823f5 [api] work in progress, use __regid__, cw_*, etc.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 3377
diff changeset
   190
        return self._cw.build_url(rql=self.cw_rset.printable_rql(), vid='deleteconf')
1452
546b9884d92c delete spaces, use .row .col instead of fixed 0 0
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   191
546b9884d92c delete spaces, use .row .col instead of fixed 0 0
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   192
3484
52e6c8d62ac6 fix some actions selectors
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3481
diff changeset
   193
class CopyAction(action.Action):
3377
dd9d292b6a6d use __regid__ instead of id on appobject classes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3293
diff changeset
   194
    __regid__ = 'copy'
3484
52e6c8d62ac6 fix some actions selectors
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3481
diff changeset
   195
    __select__ = (action.Action.__select__ & one_line_rset()
52e6c8d62ac6 fix some actions selectors
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3481
diff changeset
   196
                  & has_permission('add'))
1452
546b9884d92c delete spaces, use .row .col instead of fixed 0 0
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   197
631
99f5852f8604 major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents: 554
diff changeset
   198
    title = _('copy')
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   199
    category = 'moreactions'
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   200
    order = 30
1452
546b9884d92c delete spaces, use .row .col instead of fixed 0 0
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   201
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   202
    def url(self):
3451
6b46d73823f5 [api] work in progress, use __regid__, cw_*, etc.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 3377
diff changeset
   203
        entity = self.cw_rset.get_entity(self.cw_row or 0, self.cw_col or 0)
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   204
        return entity.absolute_url(vid='copy')
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   205
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   206
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   207
class AddNewAction(MultipleEditAction):
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   208
    """when we're seeing more than one entity with the same type, propose to
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   209
    add a new one
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   210
    """
3377
dd9d292b6a6d use __regid__ instead of id on appobject classes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3293
diff changeset
   211
    __regid__ = 'addentity'
3484
52e6c8d62ac6 fix some actions selectors
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3481
diff changeset
   212
    __select__ = (action.Action.__select__ &
707
21a59b468f1a __selectors__ -> __select__
sylvain.thenault@logilab.fr
parents: 696
diff changeset
   213
                  (addable_etype_empty_rset()
4462
c57c8176b8c2 reorganize, cleanup and properly document base selectors. Kill the may_add_relation selector.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4419
diff changeset
   214
                   | (multi_lines_rset() & one_etype_rset() & has_add_permission()))
707
21a59b468f1a __selectors__ -> __select__
sylvain.thenault@logilab.fr
parents: 696
diff changeset
   215
                  )
631
99f5852f8604 major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents: 554
diff changeset
   216
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   217
    category = 'moreactions'
401
bc55a104d636 cleanup, backport manage perm action from jpl
sylvain.thenault@logilab.fr
parents: 328
diff changeset
   218
    order = 40
1452
546b9884d92c delete spaces, use .row .col instead of fixed 0 0
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   219
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   220
    @property
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   221
    def rsettype(self):
3451
6b46d73823f5 [api] work in progress, use __regid__, cw_*, etc.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 3377
diff changeset
   222
        if self.cw_rset:
6b46d73823f5 [api] work in progress, use __regid__, cw_*, etc.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 3377
diff changeset
   223
            return self.cw_rset.description[0][0]
6b46d73823f5 [api] work in progress, use __regid__, cw_*, etc.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 3377
diff changeset
   224
        return self.cw_rset._searched_etype
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   225
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   226
    @property
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   227
    def title(self):
3451
6b46d73823f5 [api] work in progress, use __regid__, cw_*, etc.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 3377
diff changeset
   228
        return self._cw.__('add a %s' % self.rsettype) # generated msgid
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   229
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   230
    def url(self):
3451
6b46d73823f5 [api] work in progress, use __regid__, cw_*, etc.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 3377
diff changeset
   231
        return self._cw.build_url('add/%s' % self.rsettype)
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   232
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   233
3484
52e6c8d62ac6 fix some actions selectors
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3481
diff changeset
   234
class AddRelatedActions(action.Action):
3219
be8cfc00ae04 edit box refactoring to gain more control by using actions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2715
diff changeset
   235
    """fill 'addrelated' sub-menu of the actions box"""
3377
dd9d292b6a6d use __regid__ instead of id on appobject classes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3293
diff changeset
   236
    __regid__ = 'addrelated'
3504
aadeab85af7c bad merge
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3503
diff changeset
   237
    __select__ = action.Action.__select__ & one_line_rset() & non_final_entity()
3219
be8cfc00ae04 edit box refactoring to gain more control by using actions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2715
diff changeset
   238
be8cfc00ae04 edit box refactoring to gain more control by using actions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2715
diff changeset
   239
    submenu = _('addrelated')
be8cfc00ae04 edit box refactoring to gain more control by using actions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2715
diff changeset
   240
    order = 20
be8cfc00ae04 edit box refactoring to gain more control by using actions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2715
diff changeset
   241
be8cfc00ae04 edit box refactoring to gain more control by using actions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2715
diff changeset
   242
    def fill_menu(self, box, menu):
be8cfc00ae04 edit box refactoring to gain more control by using actions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2715
diff changeset
   243
        # when there is only one item in the sub-menu, replace the sub-menu by
be8cfc00ae04 edit box refactoring to gain more control by using actions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2715
diff changeset
   244
        # item's title prefixed by 'add'
3451
6b46d73823f5 [api] work in progress, use __regid__, cw_*, etc.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 3377
diff changeset
   245
        menu.label_prefix = self._cw._('add')
3228
7b05b2709439 [actions] refactor: extract actual_actions from fill_menu to work with table filter form
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3219
diff changeset
   246
        super(AddRelatedActions, self).fill_menu(box, menu)
7b05b2709439 [actions] refactor: extract actual_actions from fill_menu to work with table filter form
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3219
diff changeset
   247
7b05b2709439 [actions] refactor: extract actual_actions from fill_menu to work with table filter form
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3219
diff changeset
   248
    def actual_actions(self):
3451
6b46d73823f5 [api] work in progress, use __regid__, cw_*, etc.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 3377
diff changeset
   249
        entity = self.cw_rset.get_entity(self.cw_row or 0, self.cw_col or 0)
3219
be8cfc00ae04 edit box refactoring to gain more control by using actions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2715
diff changeset
   250
        eschema = entity.e_schema
be8cfc00ae04 edit box refactoring to gain more control by using actions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2715
diff changeset
   251
        for rschema, teschema, x in self.add_related_schemas(entity):
be8cfc00ae04 edit box refactoring to gain more control by using actions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2715
diff changeset
   252
            if x == 'subject':
be8cfc00ae04 edit box refactoring to gain more control by using actions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2715
diff changeset
   253
                label = 'add %s %s %s %s' % (eschema, rschema, teschema, x)
be8cfc00ae04 edit box refactoring to gain more control by using actions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2715
diff changeset
   254
                url = self.linkto_url(entity, rschema, teschema, 'object')
be8cfc00ae04 edit box refactoring to gain more control by using actions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2715
diff changeset
   255
            else:
be8cfc00ae04 edit box refactoring to gain more control by using actions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2715
diff changeset
   256
                label = 'add %s %s %s %s' % (teschema, rschema, eschema, x)
be8cfc00ae04 edit box refactoring to gain more control by using actions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2715
diff changeset
   257
                url = self.linkto_url(entity, rschema, teschema, 'subject')
3451
6b46d73823f5 [api] work in progress, use __regid__, cw_*, etc.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 3377
diff changeset
   258
            yield self.build_action(self._cw._(label), url)
3219
be8cfc00ae04 edit box refactoring to gain more control by using actions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2715
diff changeset
   259
be8cfc00ae04 edit box refactoring to gain more control by using actions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2715
diff changeset
   260
    def add_related_schemas(self, entity):
be8cfc00ae04 edit box refactoring to gain more control by using actions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2715
diff changeset
   261
        """this is actually used ui method to generate 'addrelated' actions from
be8cfc00ae04 edit box refactoring to gain more control by using actions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2715
diff changeset
   262
        the schema.
be8cfc00ae04 edit box refactoring to gain more control by using actions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2715
diff changeset
   263
be8cfc00ae04 edit box refactoring to gain more control by using actions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2715
diff changeset
   264
        If you don't want any auto-generated actions, you should overrides this
be8cfc00ae04 edit box refactoring to gain more control by using actions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2715
diff changeset
   265
        method to return an empty list. If you only want some, you can configure
be8cfc00ae04 edit box refactoring to gain more control by using actions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2715
diff changeset
   266
        them by using uicfg.actionbox_appearsin_addmenu
be8cfc00ae04 edit box refactoring to gain more control by using actions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2715
diff changeset
   267
        """
be8cfc00ae04 edit box refactoring to gain more control by using actions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2715
diff changeset
   268
        appearsin_addmenu = uicfg.actionbox_appearsin_addmenu
3451
6b46d73823f5 [api] work in progress, use __regid__, cw_*, etc.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 3377
diff changeset
   269
        req = self._cw
3219
be8cfc00ae04 edit box refactoring to gain more control by using actions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2715
diff changeset
   270
        eschema = entity.e_schema
be8cfc00ae04 edit box refactoring to gain more control by using actions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2715
diff changeset
   271
        for role, rschemas in (('subject', eschema.subject_relations()),
be8cfc00ae04 edit box refactoring to gain more control by using actions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2715
diff changeset
   272
                               ('object', eschema.object_relations())):
be8cfc00ae04 edit box refactoring to gain more control by using actions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2715
diff changeset
   273
            for rschema in rschemas:
3689
deb13e88e037 follow yams 0.25 api changes to improve performance
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3495
diff changeset
   274
                if rschema.final:
3219
be8cfc00ae04 edit box refactoring to gain more control by using actions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2715
diff changeset
   275
                    continue
be8cfc00ae04 edit box refactoring to gain more control by using actions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2715
diff changeset
   276
                for teschema in rschema.targets(eschema, role):
be8cfc00ae04 edit box refactoring to gain more control by using actions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2715
diff changeset
   277
                    if not appearsin_addmenu.etype_get(eschema, rschema,
be8cfc00ae04 edit box refactoring to gain more control by using actions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2715
diff changeset
   278
                                                       role, teschema):
be8cfc00ae04 edit box refactoring to gain more control by using actions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2715
diff changeset
   279
                        continue
3877
7ca53fc72a0a reldefsecurity branch :
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3689
diff changeset
   280
                    rdef = rschema.role_rdef(eschema, teschema, role)
7ca53fc72a0a reldefsecurity branch :
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3689
diff changeset
   281
                    # check the relation can be added
7ca53fc72a0a reldefsecurity branch :
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3689
diff changeset
   282
                    # XXX consider autoform_permissions_overrides?
7ca53fc72a0a reldefsecurity branch :
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3689
diff changeset
   283
                    if role == 'subject'and not rdef.has_perm(
7ca53fc72a0a reldefsecurity branch :
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3689
diff changeset
   284
                        req, 'add', fromeid=entity.eid):
7ca53fc72a0a reldefsecurity branch :
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3689
diff changeset
   285
                        continue
7ca53fc72a0a reldefsecurity branch :
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3689
diff changeset
   286
                    if role == 'object'and not rdef.has_perm(
7ca53fc72a0a reldefsecurity branch :
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3689
diff changeset
   287
                        req, 'add', toeid=entity.eid):
7ca53fc72a0a reldefsecurity branch :
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3689
diff changeset
   288
                        continue
7ca53fc72a0a reldefsecurity branch :
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3689
diff changeset
   289
                    # check the target types can be added as well
7ca53fc72a0a reldefsecurity branch :
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3689
diff changeset
   290
                    if teschema.may_have_permission('add', req):
3219
be8cfc00ae04 edit box refactoring to gain more control by using actions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2715
diff changeset
   291
                        yield rschema, teschema, role
be8cfc00ae04 edit box refactoring to gain more control by using actions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2715
diff changeset
   292
be8cfc00ae04 edit box refactoring to gain more control by using actions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2715
diff changeset
   293
    def linkto_url(self, entity, rtype, etype, target):
3451
6b46d73823f5 [api] work in progress, use __regid__, cw_*, etc.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 3377
diff changeset
   294
        return self._cw.build_url('add/%s' % etype,
6b46d73823f5 [api] work in progress, use __regid__, cw_*, etc.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 3377
diff changeset
   295
                                  __linkto='%s:%s:%s' % (rtype, entity.eid, target),
6b46d73823f5 [api] work in progress, use __regid__, cw_*, etc.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 3377
diff changeset
   296
                                  __redirectpath=entity.rest_path(), # should not be url quoted!
6b46d73823f5 [api] work in progress, use __regid__, cw_*, etc.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 3377
diff changeset
   297
                                  __redirectvid=self._cw.form.get('vid', ''))
3219
be8cfc00ae04 edit box refactoring to gain more control by using actions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2715
diff changeset
   298
be8cfc00ae04 edit box refactoring to gain more control by using actions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2715
diff changeset
   299
4413
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 4412
diff changeset
   300
class ViewSameCWEType(action.Action):
4412
eaff00ef0a71 add action to list entities of the CWEType currently displayed
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 4320
diff changeset
   301
    """when displaying the schema of a CWEType, offer to list entities of that type
eaff00ef0a71 add action to list entities of the CWEType currently displayed
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 4320
diff changeset
   302
    """
4413
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 4412
diff changeset
   303
    __regid__ = 'entitiesoftype'
4412
eaff00ef0a71 add action to list entities of the CWEType currently displayed
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 4320
diff changeset
   304
    __select__ = one_line_rset() & implements('CWEType')
eaff00ef0a71 add action to list entities of the CWEType currently displayed
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 4320
diff changeset
   305
    category = 'mainactions'
eaff00ef0a71 add action to list entities of the CWEType currently displayed
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 4320
diff changeset
   306
    order = 40
eaff00ef0a71 add action to list entities of the CWEType currently displayed
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 4320
diff changeset
   307
eaff00ef0a71 add action to list entities of the CWEType currently displayed
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 4320
diff changeset
   308
    @property
eaff00ef0a71 add action to list entities of the CWEType currently displayed
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 4320
diff changeset
   309
    def etype(self):
4419
1f777d13a76b refactor to use the 3.6 API
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 4413
diff changeset
   310
        return self.cw_rset.get_entity(0,0).name
4412
eaff00ef0a71 add action to list entities of the CWEType currently displayed
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 4320
diff changeset
   311
eaff00ef0a71 add action to list entities of the CWEType currently displayed
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 4320
diff changeset
   312
    @property
eaff00ef0a71 add action to list entities of the CWEType currently displayed
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 4320
diff changeset
   313
    def title(self):
4419
1f777d13a76b refactor to use the 3.6 API
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 4413
diff changeset
   314
        return self._cw.__('view all %s') % display_name(self._cw, self.etype, 'plural').lower()
4412
eaff00ef0a71 add action to list entities of the CWEType currently displayed
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 4320
diff changeset
   315
eaff00ef0a71 add action to list entities of the CWEType currently displayed
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 4320
diff changeset
   316
    def url(self):
4419
1f777d13a76b refactor to use the 3.6 API
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 4413
diff changeset
   317
        return self._cw.build_url(self.etype)
4412
eaff00ef0a71 add action to list entities of the CWEType currently displayed
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 4320
diff changeset
   318
401
bc55a104d636 cleanup, backport manage perm action from jpl
sylvain.thenault@logilab.fr
parents: 328
diff changeset
   319
# logged user actions #########################################################
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   320
3504
aadeab85af7c bad merge
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3503
diff changeset
   321
class UserPreferencesAction(action.Action):
3377
dd9d292b6a6d use __regid__ instead of id on appobject classes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3293
diff changeset
   322
    __regid__ = 'myprefs'
707
21a59b468f1a __selectors__ -> __select__
sylvain.thenault@logilab.fr
parents: 696
diff changeset
   323
    __select__ = authenticated_user()
1452
546b9884d92c delete spaces, use .row .col instead of fixed 0 0
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   324
631
99f5852f8604 major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents: 554
diff changeset
   325
    title = _('user preferences')
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   326
    category = 'useractions'
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   327
    order = 10
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   328
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   329
    def url(self):
3451
6b46d73823f5 [api] work in progress, use __regid__, cw_*, etc.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 3377
diff changeset
   330
        return self._cw.build_url(self.__regid__)
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   331
401
bc55a104d636 cleanup, backport manage perm action from jpl
sylvain.thenault@logilab.fr
parents: 328
diff changeset
   332
3504
aadeab85af7c bad merge
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3503
diff changeset
   333
class UserInfoAction(action.Action):
3377
dd9d292b6a6d use __regid__ instead of id on appobject classes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3293
diff changeset
   334
    __regid__ = 'myinfos'
707
21a59b468f1a __selectors__ -> __select__
sylvain.thenault@logilab.fr
parents: 696
diff changeset
   335
    __select__ = authenticated_user()
1452
546b9884d92c delete spaces, use .row .col instead of fixed 0 0
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   336
631
99f5852f8604 major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents: 554
diff changeset
   337
    title = _('personnal informations')
401
bc55a104d636 cleanup, backport manage perm action from jpl
sylvain.thenault@logilab.fr
parents: 328
diff changeset
   338
    category = 'useractions'
bc55a104d636 cleanup, backport manage perm action from jpl
sylvain.thenault@logilab.fr
parents: 328
diff changeset
   339
    order = 20
bc55a104d636 cleanup, backport manage perm action from jpl
sylvain.thenault@logilab.fr
parents: 328
diff changeset
   340
bc55a104d636 cleanup, backport manage perm action from jpl
sylvain.thenault@logilab.fr
parents: 328
diff changeset
   341
    def url(self):
3451
6b46d73823f5 [api] work in progress, use __regid__, cw_*, etc.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 3377
diff changeset
   342
        return self._cw.build_url('cwuser/%s'%self._cw.user.login, vid='edition')
401
bc55a104d636 cleanup, backport manage perm action from jpl
sylvain.thenault@logilab.fr
parents: 328
diff changeset
   343
bc55a104d636 cleanup, backport manage perm action from jpl
sylvain.thenault@logilab.fr
parents: 328
diff changeset
   344
3504
aadeab85af7c bad merge
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3503
diff changeset
   345
class LogoutAction(action.Action):
3377
dd9d292b6a6d use __regid__ instead of id on appobject classes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3293
diff changeset
   346
    __regid__ = 'logout'
707
21a59b468f1a __selectors__ -> __select__
sylvain.thenault@logilab.fr
parents: 696
diff changeset
   347
    __select__ = authenticated_user()
1452
546b9884d92c delete spaces, use .row .col instead of fixed 0 0
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   348
631
99f5852f8604 major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents: 554
diff changeset
   349
    title = _('logout')
401
bc55a104d636 cleanup, backport manage perm action from jpl
sylvain.thenault@logilab.fr
parents: 328
diff changeset
   350
    category = 'useractions'
bc55a104d636 cleanup, backport manage perm action from jpl
sylvain.thenault@logilab.fr
parents: 328
diff changeset
   351
    order = 30
bc55a104d636 cleanup, backport manage perm action from jpl
sylvain.thenault@logilab.fr
parents: 328
diff changeset
   352
bc55a104d636 cleanup, backport manage perm action from jpl
sylvain.thenault@logilab.fr
parents: 328
diff changeset
   353
    def url(self):
3451
6b46d73823f5 [api] work in progress, use __regid__, cw_*, etc.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 3377
diff changeset
   354
        return self._cw.build_url(self.__regid__)
401
bc55a104d636 cleanup, backport manage perm action from jpl
sylvain.thenault@logilab.fr
parents: 328
diff changeset
   355
1452
546b9884d92c delete spaces, use .row .col instead of fixed 0 0
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   356
401
bc55a104d636 cleanup, backport manage perm action from jpl
sylvain.thenault@logilab.fr
parents: 328
diff changeset
   357
# site actions ################################################################
bc55a104d636 cleanup, backport manage perm action from jpl
sylvain.thenault@logilab.fr
parents: 328
diff changeset
   358
3504
aadeab85af7c bad merge
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3503
diff changeset
   359
class ManagersAction(action.Action):
631
99f5852f8604 major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents: 554
diff changeset
   360
    __abstract__ = True
707
21a59b468f1a __selectors__ -> __select__
sylvain.thenault@logilab.fr
parents: 696
diff changeset
   361
    __select__ = match_user_groups('managers')
631
99f5852f8604 major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents: 554
diff changeset
   362
401
bc55a104d636 cleanup, backport manage perm action from jpl
sylvain.thenault@logilab.fr
parents: 328
diff changeset
   363
    category = 'siteactions'
bc55a104d636 cleanup, backport manage perm action from jpl
sylvain.thenault@logilab.fr
parents: 328
diff changeset
   364
bc55a104d636 cleanup, backport manage perm action from jpl
sylvain.thenault@logilab.fr
parents: 328
diff changeset
   365
    def url(self):
3451
6b46d73823f5 [api] work in progress, use __regid__, cw_*, etc.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 3377
diff changeset
   366
        return self._cw.build_url(self.__regid__)
401
bc55a104d636 cleanup, backport manage perm action from jpl
sylvain.thenault@logilab.fr
parents: 328
diff changeset
   367
1452
546b9884d92c delete spaces, use .row .col instead of fixed 0 0
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   368
401
bc55a104d636 cleanup, backport manage perm action from jpl
sylvain.thenault@logilab.fr
parents: 328
diff changeset
   369
class SiteConfigurationAction(ManagersAction):
3377
dd9d292b6a6d use __regid__ instead of id on appobject classes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3293
diff changeset
   370
    __regid__ = 'siteconfig'
401
bc55a104d636 cleanup, backport manage perm action from jpl
sylvain.thenault@logilab.fr
parents: 328
diff changeset
   371
    title = _('site configuration')
631
99f5852f8604 major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents: 554
diff changeset
   372
    order = 10
401
bc55a104d636 cleanup, backport manage perm action from jpl
sylvain.thenault@logilab.fr
parents: 328
diff changeset
   373
1452
546b9884d92c delete spaces, use .row .col instead of fixed 0 0
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   374
401
bc55a104d636 cleanup, backport manage perm action from jpl
sylvain.thenault@logilab.fr
parents: 328
diff changeset
   375
class ManageAction(ManagersAction):
3377
dd9d292b6a6d use __regid__ instead of id on appobject classes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3293
diff changeset
   376
    __regid__ = 'manage'
401
bc55a104d636 cleanup, backport manage perm action from jpl
sylvain.thenault@logilab.fr
parents: 328
diff changeset
   377
    title = _('manage')
631
99f5852f8604 major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents: 554
diff changeset
   378
    order = 20
401
bc55a104d636 cleanup, backport manage perm action from jpl
sylvain.thenault@logilab.fr
parents: 328
diff changeset
   379
2439
77d8dd77acb3 [cleanup] fix tests
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 2433
diff changeset
   380
class SiteInfoAction(ManagersAction):
3377
dd9d292b6a6d use __regid__ instead of id on appobject classes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3293
diff changeset
   381
    __regid__ = 'siteinfo'
dd9d292b6a6d use __regid__ instead of id on appobject classes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3293
diff changeset
   382
    __select__ = match_user_groups('users','managers')
2433
1d46c016a564 #197873: quick access to info for bug report
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 2161
diff changeset
   383
    title = _('info')
1d46c016a564 #197873: quick access to info for bug report
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 2161
diff changeset
   384
    order = 30
1d46c016a564 #197873: quick access to info for bug report
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 2161
diff changeset
   385
401
bc55a104d636 cleanup, backport manage perm action from jpl
sylvain.thenault@logilab.fr
parents: 328
diff changeset
   386
3504
aadeab85af7c bad merge
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3503
diff changeset
   387
# footer actions ###############################################################
aadeab85af7c bad merge
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3503
diff changeset
   388
aadeab85af7c bad merge
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3503
diff changeset
   389
class PoweredByAction(action.Action):
3645
7272b793d7c9 3.6 updates
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3504
diff changeset
   390
    __regid__ = 'poweredby'
3495
438576c5b1d1 [ui] turn footer items into actions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3272
diff changeset
   391
    __select__ = yes()
438576c5b1d1 [ui] turn footer items into actions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3272
diff changeset
   392
438576c5b1d1 [ui] turn footer items into actions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3272
diff changeset
   393
    category = 'footer'
438576c5b1d1 [ui] turn footer items into actions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3272
diff changeset
   394
    order = 3
438576c5b1d1 [ui] turn footer items into actions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3272
diff changeset
   395
    title = _('powered by CubicWeb')
438576c5b1d1 [ui] turn footer items into actions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3272
diff changeset
   396
438576c5b1d1 [ui] turn footer items into actions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3272
diff changeset
   397
    def url(self):
438576c5b1d1 [ui] turn footer items into actions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3272
diff changeset
   398
        return 'http://www.cubicweb.org'
438576c5b1d1 [ui] turn footer items into actions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3272
diff changeset
   399
438576c5b1d1 [ui] turn footer items into actions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3272
diff changeset
   400
2652
3753f3a07ca1 [refactoring] moved rtags specification in web/views
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 2470
diff changeset
   401
## default actions ui configuration ###########################################
3753f3a07ca1 [refactoring] moved rtags specification in web/views
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 2470
diff changeset
   402
3753f3a07ca1 [refactoring] moved rtags specification in web/views
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 2470
diff changeset
   403
addmenu = uicfg.actionbox_appearsin_addmenu
3753f3a07ca1 [refactoring] moved rtags specification in web/views
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 2470
diff changeset
   404
addmenu.tag_subject_of(('*', 'require_permission', '*'), False)
3753f3a07ca1 [refactoring] moved rtags specification in web/views
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 2470
diff changeset
   405
addmenu.tag_subject_of(('*', 'wf_info_for', '*'), False)
3753f3a07ca1 [refactoring] moved rtags specification in web/views
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 2470
diff changeset
   406
addmenu.tag_object_of(('*', 'wf_info_for', '*'), False)
3753f3a07ca1 [refactoring] moved rtags specification in web/views
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 2470
diff changeset
   407
addmenu.tag_object_of(('*', 'state_of', 'CWEType'), True)
3753f3a07ca1 [refactoring] moved rtags specification in web/views
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 2470
diff changeset
   408
addmenu.tag_object_of(('*', 'transition_of', 'CWEType'), True)
3753f3a07ca1 [refactoring] moved rtags specification in web/views
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 2470
diff changeset
   409
addmenu.tag_object_of(('*', 'relation_type', 'CWRType'), True)
3753f3a07ca1 [refactoring] moved rtags specification in web/views
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 2470
diff changeset
   410
addmenu.tag_object_of(('*', 'from_entity', 'CWEType'), False)
3753f3a07ca1 [refactoring] moved rtags specification in web/views
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 2470
diff changeset
   411
addmenu.tag_object_of(('*', 'to_entity', 'CWEType'), False)
3753f3a07ca1 [refactoring] moved rtags specification in web/views
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 2470
diff changeset
   412
addmenu.tag_object_of(('*', 'in_group', 'CWGroup'), True)
3753f3a07ca1 [refactoring] moved rtags specification in web/views
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 2470
diff changeset
   413
addmenu.tag_object_of(('*', 'bookmarked_by', 'CWUser'), True)
3753f3a07ca1 [refactoring] moved rtags specification in web/views
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 2470
diff changeset
   414
addmenu.tag_subject_of(('Transition', 'destination_state', '*'), True)
3753f3a07ca1 [refactoring] moved rtags specification in web/views
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 2470
diff changeset
   415
addmenu.tag_object_of(('*', 'allowed_transition', 'Transition'), True)
3753f3a07ca1 [refactoring] moved rtags specification in web/views
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 2470
diff changeset
   416
addmenu.tag_object_of(('*', 'destination_state', 'State'), True)
3753f3a07ca1 [refactoring] moved rtags specification in web/views
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 2470
diff changeset
   417
addmenu.tag_subject_of(('State', 'allowed_transition', '*'), True)