author | Sylvain Thénault <sylvain.thenault@logilab.fr> |
Thu, 21 Jan 2010 10:48:00 +0100 | |
changeset 4306 | 01e5efc0d823 |
parent 4252 | 6c4f109c2b03 |
child 4320 | 4efd4c306746 |
permissions | -rw-r--r-- |
0 | 1 |
"""Set of HTML base actions |
2 |
||
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 | 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 | 7 |
""" |
8 |
__docformat__ = "restructuredtext en" |
|
2121 | 9 |
_ = unicode |
0 | 10 |
|
2657
de974465d381
[appobject] kill VObject class, move base selector classes to appobject
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2652
diff
changeset
|
11 |
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
|
12 |
from cubicweb.selectors import (EntitySelector, yes, |
1132 | 13 |
one_line_rset, two_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
|
14 |
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
|
15 |
authenticated_user, match_user_groups, match_search_state, |
1178 | 16 |
has_permission, has_add_permission, |
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
|
17 |
) |
3484
52e6c8d62ac6
fix some actions selectors
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3481
diff
changeset
|
18 |
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
|
19 |
from cubicweb.web.views import linksearch_select_url, vid_from_rset |
0 | 20 |
|
1178 | 21 |
|
22 |
class has_editable_relation(EntitySelector): |
|
23 |
"""accept if some relations for an entity found in the result set is |
|
24 |
editable by the logged user. |
|
25 |
||
26 |
See `EntitySelector` documentation for behaviour when row is not specified. |
|
27 |
""" |
|
1452
546b9884d92c
delete spaces, use .row .col instead of fixed 0 0
sylvain.thenault@logilab.fr
parents:
1398
diff
changeset
|
28 |
|
1178 | 29 |
def score_entity(self, entity): |
30 |
# if user has no update right but it can modify some relation, |
|
31 |
# display action anyway |
|
3504 | 32 |
form = entity._cw.vreg['forms'].select('edition', entity._cw, |
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
|
33 |
entity=entity) |
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
|
34 |
for dummy in form.editable_relations(): |
1178 | 35 |
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
|
36 |
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
|
37 |
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
|
38 |
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
|
39 |
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
|
40 |
'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
|
41 |
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
|
42 |
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
|
43 |
if not rschema.final: |
1178 | 44 |
return 1 |
45 |
return 0 |
|
46 |
||
728
a95b284150d1
first pass to use __select__ instead of __selectors__
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
714
diff
changeset
|
47 |
@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
|
48 |
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
|
49 |
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
|
50 |
|
728
a95b284150d1
first pass to use __select__ instead of __selectors__
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
714
diff
changeset
|
51 |
@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
|
52 |
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
|
53 |
# 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
|
54 |
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
|
55 |
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
|
56 |
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
|
57 |
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
|
58 |
|
728
a95b284150d1
first pass to use __select__ instead of __selectors__
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
714
diff
changeset
|
59 |
@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
|
60 |
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
|
61 |
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
|
62 |
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
|
63 |
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
|
64 |
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
|
65 |
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
|
66 |
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
|
67 |
rset._searched_etype = select.solutions[0].itervalues().next() |
4087 | 68 |
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
|
69 |
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
|
70 |
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
|
71 |
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
|
72 |
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
|
73 |
|
2470 | 74 |
# generic 'main' actions ####################################################### |
0 | 75 |
|
3484
52e6c8d62ac6
fix some actions selectors
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3481
diff
changeset
|
76 |
class SelectAction(action.Action): |
0 | 77 |
"""base class for link search actions. By default apply on |
78 |
any size entity result search it the current state is 'linksearch' |
|
79 |
if accept match. |
|
80 |
""" |
|
3377
dd9d292b6a6d
use __regid__ instead of id on appobject classes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3293
diff
changeset
|
81 |
__regid__ = 'select' |
3484
52e6c8d62ac6
fix some actions selectors
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3481
diff
changeset
|
82 |
__select__ = (match_search_state('linksearch') & nonempty_rset() |
52e6c8d62ac6
fix some actions selectors
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3481
diff
changeset
|
83 |
& match_searched_etype()) |
1452
546b9884d92c
delete spaces, use .row .col instead of fixed 0 0
sylvain.thenault@logilab.fr
parents:
1398
diff
changeset
|
84 |
|
0 | 85 |
title = _('select') |
1452
546b9884d92c
delete spaces, use .row .col instead of fixed 0 0
sylvain.thenault@logilab.fr
parents:
1398
diff
changeset
|
86 |
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
|
87 |
order = 0 |
1452
546b9884d92c
delete spaces, use .row .col instead of fixed 0 0
sylvain.thenault@logilab.fr
parents:
1398
diff
changeset
|
88 |
|
0 | 89 |
def url(self): |
3451
6b46d73823f5
[api] work in progress, use __regid__, cw_*, etc.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3377
diff
changeset
|
90 |
return linksearch_select_url(self._cw, self.cw_rset) |
0 | 91 |
|
92 |
||
3484
52e6c8d62ac6
fix some actions selectors
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3481
diff
changeset
|
93 |
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
|
94 |
__regid__ = 'cancel' |
707 | 95 |
__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
|
96 |
|
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
|
97 |
title = _('cancel select') |
0 | 98 |
category = 'mainactions' |
99 |
order = 10 |
|
1452
546b9884d92c
delete spaces, use .row .col instead of fixed 0 0
sylvain.thenault@logilab.fr
parents:
1398
diff
changeset
|
100 |
|
0 | 101 |
def url(self): |
3451
6b46d73823f5
[api] work in progress, use __regid__, cw_*, etc.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3377
diff
changeset
|
102 |
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
|
103 |
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
|
104 |
vid='edition', __mode='normal') |
0 | 105 |
|
106 |
||
3484
52e6c8d62ac6
fix some actions selectors
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3481
diff
changeset
|
107 |
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
|
108 |
__regid__ = 'view' |
3484
52e6c8d62ac6
fix some actions selectors
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3481
diff
changeset
|
109 |
__select__ = (action.Action.__select__ & |
707 | 110 |
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
|
111 |
view_is_not_default_view() & |
707 | 112 |
non_final_entity()) |
1452
546b9884d92c
delete spaces, use .row .col instead of fixed 0 0
sylvain.thenault@logilab.fr
parents:
1398
diff
changeset
|
113 |
|
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
|
114 |
title = _('view') |
1452
546b9884d92c
delete spaces, use .row .col instead of fixed 0 0
sylvain.thenault@logilab.fr
parents:
1398
diff
changeset
|
115 |
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
|
116 |
order = 0 |
1452
546b9884d92c
delete spaces, use .row .col instead of fixed 0 0
sylvain.thenault@logilab.fr
parents:
1398
diff
changeset
|
117 |
|
0 | 118 |
def url(self): |
3451
6b46d73823f5
[api] work in progress, use __regid__, cw_*, etc.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3377
diff
changeset
|
119 |
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
|
120 |
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
|
121 |
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
|
122 |
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
|
123 |
**params) |
0 | 124 |
|
125 |
||
3484
52e6c8d62ac6
fix some actions selectors
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3481
diff
changeset
|
126 |
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
|
127 |
__regid__ = 'edit' |
3484
52e6c8d62ac6
fix some actions selectors
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3481
diff
changeset
|
128 |
__select__ = (action.Action.__select__ & one_line_rset() & |
707 | 129 |
(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
|
130 |
|
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
|
131 |
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
|
132 |
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
|
133 |
order = 10 |
0 | 134 |
|
135 |
def url(self): |
|
3451
6b46d73823f5
[api] work in progress, use __regid__, cw_*, etc.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3377
diff
changeset
|
136 |
entity = self.cw_rset.get_entity(self.cw_row or 0, self.cw_col or 0) |
0 | 137 |
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
|
138 |
|
401
bc55a104d636
cleanup, backport manage perm action from jpl
sylvain.thenault@logilab.fr
parents:
328
diff
changeset
|
139 |
|
3484
52e6c8d62ac6
fix some actions selectors
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3481
diff
changeset
|
140 |
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
|
141 |
__regid__ = 'muledit' # XXX get strange conflicts if id='edit' |
3484
52e6c8d62ac6
fix some actions selectors
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3481
diff
changeset
|
142 |
__select__ = (action.Action.__select__ & two_lines_rset() & |
52e6c8d62ac6
fix some actions selectors
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3481
diff
changeset
|
143 |
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
|
144 |
|
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 |
title = _('modify') |
401
bc55a104d636
cleanup, backport manage perm action from jpl
sylvain.thenault@logilab.fr
parents:
328
diff
changeset
|
146 |
category = 'mainactions' |
bc55a104d636
cleanup, backport manage perm action from jpl
sylvain.thenault@logilab.fr
parents:
328
diff
changeset
|
147 |
order = 10 |
1452
546b9884d92c
delete spaces, use .row .col instead of fixed 0 0
sylvain.thenault@logilab.fr
parents:
1398
diff
changeset
|
148 |
|
401
bc55a104d636
cleanup, backport manage perm action from jpl
sylvain.thenault@logilab.fr
parents:
328
diff
changeset
|
149 |
def url(self): |
3451
6b46d73823f5
[api] work in progress, use __regid__, cw_*, etc.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3377
diff
changeset
|
150 |
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
|
151 |
|
bc55a104d636
cleanup, backport manage perm action from jpl
sylvain.thenault@logilab.fr
parents:
328
diff
changeset
|
152 |
|
2470 | 153 |
# generic "more" actions ####################################################### |
401
bc55a104d636
cleanup, backport manage perm action from jpl
sylvain.thenault@logilab.fr
parents:
328
diff
changeset
|
154 |
|
3484
52e6c8d62ac6
fix some actions selectors
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3481
diff
changeset
|
155 |
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
|
156 |
__regid__ = 'managepermission' |
3484
52e6c8d62ac6
fix some actions selectors
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3481
diff
changeset
|
157 |
__select__ = (action.Action.__select__ & one_line_rset() & |
52e6c8d62ac6
fix some actions selectors
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3481
diff
changeset
|
158 |
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
|
159 |
|
401
bc55a104d636
cleanup, backport manage perm action from jpl
sylvain.thenault@logilab.fr
parents:
328
diff
changeset
|
160 |
title = _('manage permissions') |
bc55a104d636
cleanup, backport manage perm action from jpl
sylvain.thenault@logilab.fr
parents:
328
diff
changeset
|
161 |
category = 'moreactions' |
1551 | 162 |
order = 15 |
401
bc55a104d636
cleanup, backport manage perm action from jpl
sylvain.thenault@logilab.fr
parents:
328
diff
changeset
|
163 |
|
707 | 164 |
@classmethod |
2820
66b31686d92b
rename registered to __registered__
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2715
diff
changeset
|
165 |
def __registered__(cls, vreg): |
690
ea613e8a5e4f
should add relation_possible selector only if require_permission is in the schema
sylvain.thenault@logilab.fr
parents:
660
diff
changeset
|
166 |
if 'require_permission' in vreg.schema: |
822 | 167 |
cls.__select__ = (one_line_rset() & non_final_entity() & |
168 |
(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
|
169 |
| relation_possible('require_permission', 'subject', 'CWPermission', |
822 | 170 |
action='add'))) |
2820
66b31686d92b
rename registered to __registered__
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2715
diff
changeset
|
171 |
return super(ManagePermissionsAction, cls).__registered__(vreg) |
1452
546b9884d92c
delete spaces, use .row .col instead of fixed 0 0
sylvain.thenault@logilab.fr
parents:
1398
diff
changeset
|
172 |
|
401
bc55a104d636
cleanup, backport manage perm action from jpl
sylvain.thenault@logilab.fr
parents:
328
diff
changeset
|
173 |
def url(self): |
3451
6b46d73823f5
[api] work in progress, use __regid__, cw_*, etc.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3377
diff
changeset
|
174 |
return self.cw_rset.get_entity(self.cw_row or 0, self.cw_col or 0).absolute_url(vid='security') |
0 | 175 |
|
1452
546b9884d92c
delete spaces, use .row .col instead of fixed 0 0
sylvain.thenault@logilab.fr
parents:
1398
diff
changeset
|
176 |
|
3484
52e6c8d62ac6
fix some actions selectors
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3481
diff
changeset
|
177 |
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
|
178 |
__regid__ = 'delete' |
3484
52e6c8d62ac6
fix some actions selectors
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3481
diff
changeset
|
179 |
__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
|
180 |
|
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
|
181 |
title = _('delete') |
1452
546b9884d92c
delete spaces, use .row .col instead of fixed 0 0
sylvain.thenault@logilab.fr
parents:
1398
diff
changeset
|
182 |
category = 'moreactions' |
0 | 183 |
order = 20 |
1452
546b9884d92c
delete spaces, use .row .col instead of fixed 0 0
sylvain.thenault@logilab.fr
parents:
1398
diff
changeset
|
184 |
|
0 | 185 |
def url(self): |
3451
6b46d73823f5
[api] work in progress, use __regid__, cw_*, etc.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3377
diff
changeset
|
186 |
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
|
187 |
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
|
188 |
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
|
189 |
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
|
190 |
|
546b9884d92c
delete spaces, use .row .col instead of fixed 0 0
sylvain.thenault@logilab.fr
parents:
1398
diff
changeset
|
191 |
|
3484
52e6c8d62ac6
fix some actions selectors
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3481
diff
changeset
|
192 |
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
|
193 |
__regid__ = 'copy' |
3484
52e6c8d62ac6
fix some actions selectors
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3481
diff
changeset
|
194 |
__select__ = (action.Action.__select__ & one_line_rset() |
52e6c8d62ac6
fix some actions selectors
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3481
diff
changeset
|
195 |
& has_permission('add')) |
1452
546b9884d92c
delete spaces, use .row .col instead of fixed 0 0
sylvain.thenault@logilab.fr
parents:
1398
diff
changeset
|
196 |
|
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
|
197 |
title = _('copy') |
0 | 198 |
category = 'moreactions' |
199 |
order = 30 |
|
1452
546b9884d92c
delete spaces, use .row .col instead of fixed 0 0
sylvain.thenault@logilab.fr
parents:
1398
diff
changeset
|
200 |
|
0 | 201 |
def url(self): |
3451
6b46d73823f5
[api] work in progress, use __regid__, cw_*, etc.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3377
diff
changeset
|
202 |
entity = self.cw_rset.get_entity(self.cw_row or 0, self.cw_col or 0) |
0 | 203 |
return entity.absolute_url(vid='copy') |
204 |
||
205 |
||
206 |
class AddNewAction(MultipleEditAction): |
|
207 |
"""when we're seeing more than one entity with the same type, propose to |
|
208 |
add a new one |
|
209 |
""" |
|
3377
dd9d292b6a6d
use __regid__ instead of id on appobject classes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3293
diff
changeset
|
210 |
__regid__ = 'addentity' |
3484
52e6c8d62ac6
fix some actions selectors
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3481
diff
changeset
|
211 |
__select__ = (action.Action.__select__ & |
707 | 212 |
(addable_etype_empty_rset() |
728
a95b284150d1
first pass to use __select__ instead of __selectors__
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
714
diff
changeset
|
213 |
| (two_lines_rset() & one_etype_rset & has_add_permission())) |
707 | 214 |
) |
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
|
215 |
|
0 | 216 |
category = 'moreactions' |
401
bc55a104d636
cleanup, backport manage perm action from jpl
sylvain.thenault@logilab.fr
parents:
328
diff
changeset
|
217 |
order = 40 |
1452
546b9884d92c
delete spaces, use .row .col instead of fixed 0 0
sylvain.thenault@logilab.fr
parents:
1398
diff
changeset
|
218 |
|
0 | 219 |
@property |
220 |
def rsettype(self): |
|
3451
6b46d73823f5
[api] work in progress, use __regid__, cw_*, etc.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3377
diff
changeset
|
221 |
if self.cw_rset: |
6b46d73823f5
[api] work in progress, use __regid__, cw_*, etc.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3377
diff
changeset
|
222 |
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
|
223 |
return self.cw_rset._searched_etype |
0 | 224 |
|
225 |
@property |
|
226 |
def title(self): |
|
3451
6b46d73823f5
[api] work in progress, use __regid__, cw_*, etc.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3377
diff
changeset
|
227 |
return self._cw.__('add a %s' % self.rsettype) # generated msgid |
0 | 228 |
|
229 |
def url(self): |
|
3451
6b46d73823f5
[api] work in progress, use __regid__, cw_*, etc.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3377
diff
changeset
|
230 |
return self._cw.build_url('add/%s' % self.rsettype) |
0 | 231 |
|
232 |
||
3484
52e6c8d62ac6
fix some actions selectors
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3481
diff
changeset
|
233 |
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
|
234 |
"""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
|
235 |
__regid__ = 'addrelated' |
3504 | 236 |
__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
|
237 |
|
be8cfc00ae04
edit box refactoring to gain more control by using actions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2715
diff
changeset
|
238 |
submenu = _('addrelated') |
be8cfc00ae04
edit box refactoring to gain more control by using actions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2715
diff
changeset
|
239 |
order = 20 |
be8cfc00ae04
edit box refactoring to gain more control by using actions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2715
diff
changeset
|
240 |
|
be8cfc00ae04
edit box refactoring to gain more control by using actions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2715
diff
changeset
|
241 |
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
|
242 |
# 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
|
243 |
# 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
|
244 |
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
|
245 |
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
|
246 |
|
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 |
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
|
248 |
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
|
249 |
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
|
250 |
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
|
251 |
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
|
252 |
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
|
253 |
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
|
254 |
else: |
be8cfc00ae04
edit box refactoring to gain more control by using actions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2715
diff
changeset
|
255 |
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
|
256 |
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
|
257 |
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
|
258 |
|
be8cfc00ae04
edit box refactoring to gain more control by using actions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2715
diff
changeset
|
259 |
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
|
260 |
"""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
|
261 |
the schema. |
be8cfc00ae04
edit box refactoring to gain more control by using actions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2715
diff
changeset
|
262 |
|
be8cfc00ae04
edit box refactoring to gain more control by using actions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2715
diff
changeset
|
263 |
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
|
264 |
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
|
265 |
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
|
266 |
""" |
be8cfc00ae04
edit box refactoring to gain more control by using actions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2715
diff
changeset
|
267 |
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
|
268 |
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
|
269 |
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
|
270 |
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
|
271 |
('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
|
272 |
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
|
273 |
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
|
274 |
continue |
be8cfc00ae04
edit box refactoring to gain more control by using actions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2715
diff
changeset
|
275 |
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
|
276 |
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
|
277 |
role, teschema): |
be8cfc00ae04
edit box refactoring to gain more control by using actions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2715
diff
changeset
|
278 |
continue |
3877
7ca53fc72a0a
reldefsecurity branch :
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3689
diff
changeset
|
279 |
rdef = rschema.role_rdef(eschema, teschema, role) |
7ca53fc72a0a
reldefsecurity branch :
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3689
diff
changeset
|
280 |
# check the relation can be added |
7ca53fc72a0a
reldefsecurity branch :
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3689
diff
changeset
|
281 |
# XXX consider autoform_permissions_overrides? |
7ca53fc72a0a
reldefsecurity branch :
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3689
diff
changeset
|
282 |
if role == 'subject'and not rdef.has_perm( |
7ca53fc72a0a
reldefsecurity branch :
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3689
diff
changeset
|
283 |
req, 'add', fromeid=entity.eid): |
7ca53fc72a0a
reldefsecurity branch :
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3689
diff
changeset
|
284 |
continue |
7ca53fc72a0a
reldefsecurity branch :
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3689
diff
changeset
|
285 |
if role == 'object'and not rdef.has_perm( |
7ca53fc72a0a
reldefsecurity branch :
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3689
diff
changeset
|
286 |
req, 'add', toeid=entity.eid): |
7ca53fc72a0a
reldefsecurity branch :
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3689
diff
changeset
|
287 |
continue |
7ca53fc72a0a
reldefsecurity branch :
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3689
diff
changeset
|
288 |
# check the target types can be added as well |
7ca53fc72a0a
reldefsecurity branch :
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3689
diff
changeset
|
289 |
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
|
290 |
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
|
291 |
|
be8cfc00ae04
edit box refactoring to gain more control by using actions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2715
diff
changeset
|
292 |
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
|
293 |
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
|
294 |
__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
|
295 |
__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
|
296 |
__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
|
297 |
|
be8cfc00ae04
edit box refactoring to gain more control by using actions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2715
diff
changeset
|
298 |
|
401
bc55a104d636
cleanup, backport manage perm action from jpl
sylvain.thenault@logilab.fr
parents:
328
diff
changeset
|
299 |
# logged user actions ######################################################### |
0 | 300 |
|
3504 | 301 |
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
|
302 |
__regid__ = 'myprefs' |
707 | 303 |
__select__ = authenticated_user() |
1452
546b9884d92c
delete spaces, use .row .col instead of fixed 0 0
sylvain.thenault@logilab.fr
parents:
1398
diff
changeset
|
304 |
|
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
|
305 |
title = _('user preferences') |
0 | 306 |
category = 'useractions' |
307 |
order = 10 |
|
308 |
||
309 |
def url(self): |
|
3451
6b46d73823f5
[api] work in progress, use __regid__, cw_*, etc.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3377
diff
changeset
|
310 |
return self._cw.build_url(self.__regid__) |
0 | 311 |
|
401
bc55a104d636
cleanup, backport manage perm action from jpl
sylvain.thenault@logilab.fr
parents:
328
diff
changeset
|
312 |
|
3504 | 313 |
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
|
314 |
__regid__ = 'myinfos' |
707 | 315 |
__select__ = authenticated_user() |
1452
546b9884d92c
delete spaces, use .row .col instead of fixed 0 0
sylvain.thenault@logilab.fr
parents:
1398
diff
changeset
|
316 |
|
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
|
317 |
title = _('personnal informations') |
401
bc55a104d636
cleanup, backport manage perm action from jpl
sylvain.thenault@logilab.fr
parents:
328
diff
changeset
|
318 |
category = 'useractions' |
bc55a104d636
cleanup, backport manage perm action from jpl
sylvain.thenault@logilab.fr
parents:
328
diff
changeset
|
319 |
order = 20 |
bc55a104d636
cleanup, backport manage perm action from jpl
sylvain.thenault@logilab.fr
parents:
328
diff
changeset
|
320 |
|
bc55a104d636
cleanup, backport manage perm action from jpl
sylvain.thenault@logilab.fr
parents:
328
diff
changeset
|
321 |
def url(self): |
3451
6b46d73823f5
[api] work in progress, use __regid__, cw_*, etc.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3377
diff
changeset
|
322 |
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
|
323 |
|
bc55a104d636
cleanup, backport manage perm action from jpl
sylvain.thenault@logilab.fr
parents:
328
diff
changeset
|
324 |
|
3504 | 325 |
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
|
326 |
__regid__ = 'logout' |
707 | 327 |
__select__ = authenticated_user() |
1452
546b9884d92c
delete spaces, use .row .col instead of fixed 0 0
sylvain.thenault@logilab.fr
parents:
1398
diff
changeset
|
328 |
|
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
|
329 |
title = _('logout') |
401
bc55a104d636
cleanup, backport manage perm action from jpl
sylvain.thenault@logilab.fr
parents:
328
diff
changeset
|
330 |
category = 'useractions' |
bc55a104d636
cleanup, backport manage perm action from jpl
sylvain.thenault@logilab.fr
parents:
328
diff
changeset
|
331 |
order = 30 |
bc55a104d636
cleanup, backport manage perm action from jpl
sylvain.thenault@logilab.fr
parents:
328
diff
changeset
|
332 |
|
bc55a104d636
cleanup, backport manage perm action from jpl
sylvain.thenault@logilab.fr
parents:
328
diff
changeset
|
333 |
def url(self): |
3451
6b46d73823f5
[api] work in progress, use __regid__, cw_*, etc.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3377
diff
changeset
|
334 |
return self._cw.build_url(self.__regid__) |
401
bc55a104d636
cleanup, backport manage perm action from jpl
sylvain.thenault@logilab.fr
parents:
328
diff
changeset
|
335 |
|
1452
546b9884d92c
delete spaces, use .row .col instead of fixed 0 0
sylvain.thenault@logilab.fr
parents:
1398
diff
changeset
|
336 |
|
401
bc55a104d636
cleanup, backport manage perm action from jpl
sylvain.thenault@logilab.fr
parents:
328
diff
changeset
|
337 |
# site actions ################################################################ |
bc55a104d636
cleanup, backport manage perm action from jpl
sylvain.thenault@logilab.fr
parents:
328
diff
changeset
|
338 |
|
3504 | 339 |
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
|
340 |
__abstract__ = True |
707 | 341 |
__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
|
342 |
|
401
bc55a104d636
cleanup, backport manage perm action from jpl
sylvain.thenault@logilab.fr
parents:
328
diff
changeset
|
343 |
category = 'siteactions' |
bc55a104d636
cleanup, backport manage perm action from jpl
sylvain.thenault@logilab.fr
parents:
328
diff
changeset
|
344 |
|
bc55a104d636
cleanup, backport manage perm action from jpl
sylvain.thenault@logilab.fr
parents:
328
diff
changeset
|
345 |
def url(self): |
3451
6b46d73823f5
[api] work in progress, use __regid__, cw_*, etc.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3377
diff
changeset
|
346 |
return self._cw.build_url(self.__regid__) |
401
bc55a104d636
cleanup, backport manage perm action from jpl
sylvain.thenault@logilab.fr
parents:
328
diff
changeset
|
347 |
|
1452
546b9884d92c
delete spaces, use .row .col instead of fixed 0 0
sylvain.thenault@logilab.fr
parents:
1398
diff
changeset
|
348 |
|
401
bc55a104d636
cleanup, backport manage perm action from jpl
sylvain.thenault@logilab.fr
parents:
328
diff
changeset
|
349 |
class SiteConfigurationAction(ManagersAction): |
3377
dd9d292b6a6d
use __regid__ instead of id on appobject classes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3293
diff
changeset
|
350 |
__regid__ = 'siteconfig' |
401
bc55a104d636
cleanup, backport manage perm action from jpl
sylvain.thenault@logilab.fr
parents:
328
diff
changeset
|
351 |
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
|
352 |
order = 10 |
401
bc55a104d636
cleanup, backport manage perm action from jpl
sylvain.thenault@logilab.fr
parents:
328
diff
changeset
|
353 |
|
1452
546b9884d92c
delete spaces, use .row .col instead of fixed 0 0
sylvain.thenault@logilab.fr
parents:
1398
diff
changeset
|
354 |
|
401
bc55a104d636
cleanup, backport manage perm action from jpl
sylvain.thenault@logilab.fr
parents:
328
diff
changeset
|
355 |
class ManageAction(ManagersAction): |
3377
dd9d292b6a6d
use __regid__ instead of id on appobject classes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3293
diff
changeset
|
356 |
__regid__ = 'manage' |
401
bc55a104d636
cleanup, backport manage perm action from jpl
sylvain.thenault@logilab.fr
parents:
328
diff
changeset
|
357 |
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
|
358 |
order = 20 |
401
bc55a104d636
cleanup, backport manage perm action from jpl
sylvain.thenault@logilab.fr
parents:
328
diff
changeset
|
359 |
|
2439
77d8dd77acb3
[cleanup] fix tests
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
2433
diff
changeset
|
360 |
class SiteInfoAction(ManagersAction): |
3377
dd9d292b6a6d
use __regid__ instead of id on appobject classes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3293
diff
changeset
|
361 |
__regid__ = 'siteinfo' |
dd9d292b6a6d
use __regid__ instead of id on appobject classes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3293
diff
changeset
|
362 |
__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
|
363 |
title = _('info') |
1d46c016a564
#197873: quick access to info for bug report
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
2161
diff
changeset
|
364 |
order = 30 |
1d46c016a564
#197873: quick access to info for bug report
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
2161
diff
changeset
|
365 |
|
401
bc55a104d636
cleanup, backport manage perm action from jpl
sylvain.thenault@logilab.fr
parents:
328
diff
changeset
|
366 |
|
3504 | 367 |
# footer actions ############################################################### |
368 |
||
369 |
class PoweredByAction(action.Action): |
|
3645
7272b793d7c9
3.6 updates
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3504
diff
changeset
|
370 |
__regid__ = 'poweredby' |
3495
438576c5b1d1
[ui] turn footer items into actions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3272
diff
changeset
|
371 |
__select__ = yes() |
438576c5b1d1
[ui] turn footer items into actions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3272
diff
changeset
|
372 |
|
438576c5b1d1
[ui] turn footer items into actions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3272
diff
changeset
|
373 |
category = 'footer' |
438576c5b1d1
[ui] turn footer items into actions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3272
diff
changeset
|
374 |
order = 3 |
438576c5b1d1
[ui] turn footer items into actions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3272
diff
changeset
|
375 |
title = _('powered by CubicWeb') |
438576c5b1d1
[ui] turn footer items into actions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3272
diff
changeset
|
376 |
|
438576c5b1d1
[ui] turn footer items into actions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3272
diff
changeset
|
377 |
def url(self): |
438576c5b1d1
[ui] turn footer items into actions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3272
diff
changeset
|
378 |
return 'http://www.cubicweb.org' |
438576c5b1d1
[ui] turn footer items into actions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3272
diff
changeset
|
379 |
|
438576c5b1d1
[ui] turn footer items into actions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3272
diff
changeset
|
380 |
|
2652
3753f3a07ca1
[refactoring] moved rtags specification in web/views
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
2470
diff
changeset
|
381 |
## default actions ui configuration ########################################### |
3753f3a07ca1
[refactoring] moved rtags specification in web/views
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
2470
diff
changeset
|
382 |
|
3753f3a07ca1
[refactoring] moved rtags specification in web/views
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
2470
diff
changeset
|
383 |
addmenu = uicfg.actionbox_appearsin_addmenu |
3753f3a07ca1
[refactoring] moved rtags specification in web/views
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
2470
diff
changeset
|
384 |
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
|
385 |
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
|
386 |
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
|
387 |
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
|
388 |
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
|
389 |
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
|
390 |
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
|
391 |
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
|
392 |
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
|
393 |
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
|
394 |
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
|
395 |
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
|
396 |
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
|
397 |
addmenu.tag_subject_of(('State', 'allowed_transition', '*'), True) |