author | Sylvain Thénault <sylvain.thenault@logilab.fr> |
Fri, 11 Jun 2010 13:00:19 +0200 | |
branch | stable |
changeset 5733 | d00d1fab42af |
parent 5684 | 015755f67e46 |
child 5685 | 17883ced01f8 |
child 5737 | ae49022bf411 |
permissions | -rw-r--r-- |
5421
8167de96c523
proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4995
diff
changeset
|
1 |
# copyright 2003-2010 LOGILAB S.A. (Paris, FRANCE), all rights reserved. |
8167de96c523
proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4995
diff
changeset
|
2 |
# contact http://www.logilab.fr/ -- mailto:contact@logilab.fr |
8167de96c523
proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4995
diff
changeset
|
3 |
# |
8167de96c523
proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4995
diff
changeset
|
4 |
# This file is part of CubicWeb. |
8167de96c523
proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4995
diff
changeset
|
5 |
# |
8167de96c523
proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4995
diff
changeset
|
6 |
# CubicWeb is free software: you can redistribute it and/or modify it under the |
8167de96c523
proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4995
diff
changeset
|
7 |
# terms of the GNU Lesser General Public License as published by the Free |
8167de96c523
proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4995
diff
changeset
|
8 |
# Software Foundation, either version 2.1 of the License, or (at your option) |
8167de96c523
proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4995
diff
changeset
|
9 |
# any later version. |
8167de96c523
proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4995
diff
changeset
|
10 |
# |
5424
8ecbcbff9777
replace logilab-common by CubicWeb in disclaimer
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5421
diff
changeset
|
11 |
# CubicWeb is distributed in the hope that it will be useful, but WITHOUT |
5421
8167de96c523
proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4995
diff
changeset
|
12 |
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS |
8167de96c523
proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4995
diff
changeset
|
13 |
# FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more |
8167de96c523
proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4995
diff
changeset
|
14 |
# details. |
8167de96c523
proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4995
diff
changeset
|
15 |
# |
8167de96c523
proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4995
diff
changeset
|
16 |
# You should have received a copy of the GNU Lesser General Public License along |
8167de96c523
proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4995
diff
changeset
|
17 |
# with CubicWeb. If not, see <http://www.gnu.org/licenses/>. |
1091
b5e253c0dd13
a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents:
984
diff
changeset
|
18 |
"""workflow views: |
b5e253c0dd13
a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents:
984
diff
changeset
|
19 |
|
b5e253c0dd13
a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents:
984
diff
changeset
|
20 |
* IWorkflowable views and forms |
b5e253c0dd13
a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents:
984
diff
changeset
|
21 |
* workflow entities views (State, Transition, TrInfo) |
0 | 22 |
""" |
23 |
__docformat__ = "restructuredtext en" |
|
1739 | 24 |
_ = unicode |
0 | 25 |
|
5224
34e669b6fd95
[mq]: worklfow view
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5174
diff
changeset
|
26 |
import tempfile |
34e669b6fd95
[mq]: worklfow view
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5174
diff
changeset
|
27 |
import os |
34e669b6fd95
[mq]: worklfow view
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5174
diff
changeset
|
28 |
|
2312
af4d8f75c5db
use xml_escape
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2005
diff
changeset
|
29 |
from logilab.mtconverter import xml_escape |
1091
b5e253c0dd13
a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents:
984
diff
changeset
|
30 |
from logilab.common.graph import escape, GraphGenerator, DotBackend |
822 | 31 |
|
1091
b5e253c0dd13
a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents:
984
diff
changeset
|
32 |
from cubicweb import Unauthorized, view |
3219
be8cfc00ae04
edit box refactoring to gain more control by using actions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3216
diff
changeset
|
33 |
from cubicweb.selectors import (implements, has_related_entities, one_line_rset, |
3867
06ac8f00a99f
fix vocabulary for destination_state/allowed_transitions when creating state or transition
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3805
diff
changeset
|
34 |
relation_possible, match_form_params, |
4075
e710f4052bd6
use implements instead of entity_implements
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4004
diff
changeset
|
35 |
implements, score_entity) |
5682
5628247f51ce
[security] view was giving web access to every fs file accessible by the web server process. Fix this security hole by storing file in session data, not direct form parameters
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5426
diff
changeset
|
36 |
from cubicweb.utils import make_uid |
1091
b5e253c0dd13
a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents:
984
diff
changeset
|
37 |
from cubicweb.interfaces import IWorkflowable |
2438
576f4d51f826
[cleanup] fix deprecation warnings
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
2381
diff
changeset
|
38 |
from cubicweb.view import EntityView |
3215
bf30ab5ba6ee
fix workflow graph views and tabs for the new wf system, remove useless view and action (actually useless since introduction of tabbed entity type view
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2920
diff
changeset
|
39 |
from cubicweb.schema import display_name |
3262
12ffb1e95771
uicfg tweaks for wf
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3228
diff
changeset
|
40 |
from cubicweb.web import uicfg, stdmsgs, action, component, form, action |
2920
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2726
diff
changeset
|
41 |
from cubicweb.web import formfields as ff, formwidgets as fwdgs |
3867
06ac8f00a99f
fix vocabulary for destination_state/allowed_transitions when creating state or transition
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3805
diff
changeset
|
42 |
from cubicweb.web.views import TmpFileViewMixin, forms, primary, autoform |
5224
34e669b6fd95
[mq]: worklfow view
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5174
diff
changeset
|
43 |
from cubicweb.web.views.tabs import TabbedPrimaryView, PrimaryTab |
3306
bf50dc056edd
[wf] uicfg tweaks
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3304
diff
changeset
|
44 |
|
3487
2e705d9fdaf1
[views] workflow primary view: do not show states and transitions in side boxes
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
3350
diff
changeset
|
45 |
_pvs = uicfg.primaryview_section |
2e705d9fdaf1
[views] workflow primary view: do not show states and transitions in side boxes
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
3350
diff
changeset
|
46 |
_pvs.tag_subject_of(('Workflow', 'initial_state', '*'), 'hidden') |
2e705d9fdaf1
[views] workflow primary view: do not show states and transitions in side boxes
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
3350
diff
changeset
|
47 |
_pvs.tag_object_of(('*', 'state_of', 'Workflow'), 'hidden') |
2e705d9fdaf1
[views] workflow primary view: do not show states and transitions in side boxes
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
3350
diff
changeset
|
48 |
_pvs.tag_object_of(('*', 'transition_of', 'Workflow'), 'hidden') |
5239
471554b842d2
[schema view] the final touch. Things are getting nicely displayed, and code clean
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5224
diff
changeset
|
49 |
_pvs.tag_object_of(('*', 'wf_info_for', '*'), 'hidden') |
471554b842d2
[schema view] the final touch. Things are getting nicely displayed, and code clean
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5224
diff
changeset
|
50 |
for rtype in ('in_state', 'by_transition', 'from_state', 'to_state'): |
471554b842d2
[schema view] the final touch. Things are getting nicely displayed, and code clean
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5224
diff
changeset
|
51 |
_pvs.tag_subject_of(('*', rtype, '*'), 'hidden') |
471554b842d2
[schema view] the final touch. Things are getting nicely displayed, and code clean
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5224
diff
changeset
|
52 |
_pvs.tag_object_of(('*', rtype, '*'), 'hidden') |
471554b842d2
[schema view] the final touch. Things are getting nicely displayed, and code clean
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5224
diff
changeset
|
53 |
_pvs.tag_object_of(('*', 'wf_info_for', '*'), 'hidden') |
3487
2e705d9fdaf1
[views] workflow primary view: do not show states and transitions in side boxes
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
3350
diff
changeset
|
54 |
|
3262
12ffb1e95771
uicfg tweaks for wf
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3228
diff
changeset
|
55 |
_abaa = uicfg.actionbox_appearsin_addmenu |
12ffb1e95771
uicfg tweaks for wf
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3228
diff
changeset
|
56 |
_abaa.tag_subject_of(('BaseTransition', 'condition', 'RQLExpression'), False) |
12ffb1e95771
uicfg tweaks for wf
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3228
diff
changeset
|
57 |
_abaa.tag_subject_of(('State', 'allowed_transition', 'BaseTransition'), False) |
12ffb1e95771
uicfg tweaks for wf
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3228
diff
changeset
|
58 |
_abaa.tag_object_of(('SubWorkflowExitPoint', 'destination_state', 'State'), |
12ffb1e95771
uicfg tweaks for wf
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3228
diff
changeset
|
59 |
False) |
4995
1817b87c7f67
[web] move workflow related uicfg stuff to the workflow module
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4780
diff
changeset
|
60 |
_abaa.tag_subject_of(('*', 'wf_info_for', '*'), False) |
1817b87c7f67
[web] move workflow related uicfg stuff to the workflow module
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4780
diff
changeset
|
61 |
_abaa.tag_object_of(('*', 'wf_info_for', '*'), False) |
1817b87c7f67
[web] move workflow related uicfg stuff to the workflow module
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4780
diff
changeset
|
62 |
|
1817b87c7f67
[web] move workflow related uicfg stuff to the workflow module
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4780
diff
changeset
|
63 |
_abaa.tag_object_of(('*', 'state_of', 'CWEType'), True) |
1817b87c7f67
[web] move workflow related uicfg stuff to the workflow module
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4780
diff
changeset
|
64 |
_abaa.tag_object_of(('*', 'transition_of', 'CWEType'), True) |
1817b87c7f67
[web] move workflow related uicfg stuff to the workflow module
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4780
diff
changeset
|
65 |
_abaa.tag_subject_of(('Transition', 'destination_state', '*'), True) |
1817b87c7f67
[web] move workflow related uicfg stuff to the workflow module
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4780
diff
changeset
|
66 |
_abaa.tag_object_of(('*', 'allowed_transition', 'Transition'), True) |
1817b87c7f67
[web] move workflow related uicfg stuff to the workflow module
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4780
diff
changeset
|
67 |
_abaa.tag_object_of(('*', 'destination_state', 'State'), True) |
1817b87c7f67
[web] move workflow related uicfg stuff to the workflow module
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4780
diff
changeset
|
68 |
_abaa.tag_subject_of(('State', 'allowed_transition', '*'), True) |
3306
bf50dc056edd
[wf] uicfg tweaks
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3304
diff
changeset
|
69 |
_abaa.tag_object_of(('State', 'state_of', 'Workflow'), True) |
bf50dc056edd
[wf] uicfg tweaks
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3304
diff
changeset
|
70 |
_abaa.tag_object_of(('Transition', 'transition_of', 'Workflow'), True) |
bf50dc056edd
[wf] uicfg tweaks
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3304
diff
changeset
|
71 |
_abaa.tag_object_of(('WorkflowTransition', 'transition_of', 'Workflow'), True) |
bf50dc056edd
[wf] uicfg tweaks
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3304
diff
changeset
|
72 |
|
bf50dc056edd
[wf] uicfg tweaks
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3304
diff
changeset
|
73 |
_afs = uicfg.autoform_section |
3659 | 74 |
_afs.tag_subject_of(('TrInfo', 'to_state', '*'), 'main', 'hidden') |
75 |
_afs.tag_subject_of(('TrInfo', 'from_state', '*'), 'main', 'hidden') |
|
76 |
_afs.tag_object_of(('State', 'allowed_transition', '*'), 'main', 'attributes') |
|
3306
bf50dc056edd
[wf] uicfg tweaks
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3304
diff
changeset
|
77 |
|
1091
b5e253c0dd13
a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents:
984
diff
changeset
|
78 |
|
b5e253c0dd13
a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents:
984
diff
changeset
|
79 |
# IWorkflowable views ######################################################### |
b5e253c0dd13
a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents:
984
diff
changeset
|
80 |
|
2920
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2726
diff
changeset
|
81 |
class ChangeStateForm(forms.CompositeEntityForm): |
3377
dd9d292b6a6d
use __regid__ instead of id on appobject classes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3369
diff
changeset
|
82 |
__regid__ = 'changestate' |
1504
c6051f141807
register to catalog, delete-trailing-whitespaces
sylvain.thenault@logilab.fr
parents:
1398
diff
changeset
|
83 |
|
1995
ec95eaa2b711
turn renderers into appobjects
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
1977
diff
changeset
|
84 |
form_renderer_id = 'base' # don't want EntityFormRenderer |
3805
ad0b38e1a4eb
[web ui] rename form buttons to ok/cancel where workflow change state
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
3513
diff
changeset
|
85 |
form_buttons = [fwdgs.SubmitButton(), |
ad0b38e1a4eb
[web ui] rename form buttons to ok/cancel where workflow change state
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
3513
diff
changeset
|
86 |
fwdgs.Button(stdmsgs.BUTTON_CANCEL, cwaction='cancel')] |
1091
b5e253c0dd13
a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents:
984
diff
changeset
|
87 |
|
1504
c6051f141807
register to catalog, delete-trailing-whitespaces
sylvain.thenault@logilab.fr
parents:
1398
diff
changeset
|
88 |
|
2920
64322aa83a1d
start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2726
diff
changeset
|
89 |
class ChangeStateFormView(form.FormViewMixIn, view.EntityView): |
3377
dd9d292b6a6d
use __regid__ instead of id on appobject classes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3369
diff
changeset
|
90 |
__regid__ = 'statuschange' |
1091
b5e253c0dd13
a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents:
984
diff
changeset
|
91 |
title = _('status change') |
3335
3c035436ca65
statuschange form view only works w/ one entity, fix selector accordingly
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3307
diff
changeset
|
92 |
__select__ = (one_line_rset() & implements(IWorkflowable) |
3c035436ca65
statuschange form view only works w/ one entity, fix selector accordingly
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3307
diff
changeset
|
93 |
& match_form_params('treid')) |
0 | 94 |
|
1091
b5e253c0dd13
a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents:
984
diff
changeset
|
95 |
def cell_call(self, row, col): |
3451
6b46d73823f5
[api] work in progress, use __regid__, cw_*, etc.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3377
diff
changeset
|
96 |
entity = self.cw_rset.get_entity(row, col) |
6b46d73823f5
[api] work in progress, use __regid__, cw_*, etc.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3377
diff
changeset
|
97 |
transition = self._cw.entity_from_eid(self._cw.form['treid']) |
3920
366b30a6f9f6
refactor to ease overriding
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3868
diff
changeset
|
98 |
form = self.get_form(entity, transition) |
3998
94cc7cad3d2d
backport stable into default
Sylvain Thénault <sylvain.thenault@logilab.fr>
diff
changeset
|
99 |
self.w(u'<h4>%s %s</h4>\n' % (self._cw._(transition.name), |
1305
395ef7f2b95b
cleanup, remove some unnecessary (sometime buggy) stuff
sylvain.thenault@logilab.fr
parents:
1304
diff
changeset
|
100 |
entity.view('oneline'))) |
4780
58432e8e7dde
fix a Depression Warning
Alain Leufroy <alain.leufroy@logilab.fr>
parents:
4646
diff
changeset
|
101 |
msg = self._cw._('status will change from %(st1)s to %(st2)s') % { |
3920
366b30a6f9f6
refactor to ease overriding
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3868
diff
changeset
|
102 |
'st1': entity.printable_state, |
4646
322c3dd96dd5
[workflow] finish refactoring introduced by 021035b9a7ab for 'go back' transition:
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4436
diff
changeset
|
103 |
'st2': self._cw._(transition.destination(entity).name)} |
1091
b5e253c0dd13
a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents:
984
diff
changeset
|
104 |
self.w(u'<p>%s</p>\n' % msg) |
4167
73e649a7797d
fix render (formerly form_render) prototype
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4159
diff
changeset
|
105 |
self.w(form.render()) |
3920
366b30a6f9f6
refactor to ease overriding
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3868
diff
changeset
|
106 |
|
366b30a6f9f6
refactor to ease overriding
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3868
diff
changeset
|
107 |
def redirectpath(self, entity): |
366b30a6f9f6
refactor to ease overriding
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3868
diff
changeset
|
108 |
return entity.rest_path() |
366b30a6f9f6
refactor to ease overriding
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3868
diff
changeset
|
109 |
|
366b30a6f9f6
refactor to ease overriding
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3868
diff
changeset
|
110 |
def get_form(self, entity, transition, **kwargs): |
366b30a6f9f6
refactor to ease overriding
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3868
diff
changeset
|
111 |
# XXX used to specify both rset/row/col and entity in case implements |
4075
e710f4052bd6
use implements instead of entity_implements
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4004
diff
changeset
|
112 |
# selector (and not implements) is used on custom form |
3998
94cc7cad3d2d
backport stable into default
Sylvain Thénault <sylvain.thenault@logilab.fr>
diff
changeset
|
113 |
form = self._cw.vreg['forms'].select( |
94cc7cad3d2d
backport stable into default
Sylvain Thénault <sylvain.thenault@logilab.fr>
diff
changeset
|
114 |
'changestate', self._cw, entity=entity, transition=transition, |
3920
366b30a6f9f6
refactor to ease overriding
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3868
diff
changeset
|
115 |
redirect_path=self.redirectpath(entity), **kwargs) |
3451
6b46d73823f5
[api] work in progress, use __regid__, cw_*, etc.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3377
diff
changeset
|
116 |
trinfo = self._cw.vreg['etypes'].etype_class('TrInfo')(self._cw) |
6b46d73823f5
[api] work in progress, use __regid__, cw_*, etc.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3377
diff
changeset
|
117 |
trinfo.eid = self._cw.varmaker.next() |
6b46d73823f5
[api] work in progress, use __regid__, cw_*, etc.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3377
diff
changeset
|
118 |
subform = self._cw.vreg['forms'].select('edition', self._cw, entity=trinfo, |
4159
6b2b20c73d59
refactor form field value handling, to get a nicer api and an easier algorithm to get field's value
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4090
diff
changeset
|
119 |
mainform=False) |
6b2b20c73d59
refactor form field value handling, to get a nicer api and an easier algorithm to get field's value
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4090
diff
changeset
|
120 |
subform.field_by_name('wf_info_for', 'subject').value = entity.eid |
6b2b20c73d59
refactor form field value handling, to get a nicer api and an easier algorithm to get field's value
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4090
diff
changeset
|
121 |
trfield = subform.field_by_name('by_transition', 'subject') |
6b2b20c73d59
refactor form field value handling, to get a nicer api and an easier algorithm to get field's value
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4090
diff
changeset
|
122 |
trfield.widget = fwdgs.HiddenInput() |
6b2b20c73d59
refactor form field value handling, to get a nicer api and an easier algorithm to get field's value
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4090
diff
changeset
|
123 |
trfield.value = transition.eid |
3513
c002f6488631
[form] replace is_subform by parent_form, carrying more information at the same cost
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3487
diff
changeset
|
124 |
form.add_subform(subform) |
3920
366b30a6f9f6
refactor to ease overriding
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3868
diff
changeset
|
125 |
return form |
1091
b5e253c0dd13
a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents:
984
diff
changeset
|
126 |
|
b5e253c0dd13
a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents:
984
diff
changeset
|
127 |
|
2440
8e6b83e3b6b5
#343227: display the workflow history of any entity
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
2438
diff
changeset
|
128 |
class WFHistoryView(EntityView): |
3377
dd9d292b6a6d
use __regid__ instead of id on appobject classes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3369
diff
changeset
|
129 |
__regid__ = 'wfhistory' |
3948
24a25b676671
make wfhistory non selectable for entities without record in its workflow history
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3920
diff
changeset
|
130 |
__select__ = relation_possible('wf_info_for', role='object') & \ |
24a25b676671
make wfhistory non selectable for entities without record in its workflow history
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3920
diff
changeset
|
131 |
score_entity(lambda x: x.workflow_history) |
3998
94cc7cad3d2d
backport stable into default
Sylvain Thénault <sylvain.thenault@logilab.fr>
diff
changeset
|
132 |
|
1091
b5e253c0dd13
a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents:
984
diff
changeset
|
133 |
title = _('Workflow history') |
b5e253c0dd13
a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents:
984
diff
changeset
|
134 |
|
b5e253c0dd13
a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents:
984
diff
changeset
|
135 |
def cell_call(self, row, col, view=None): |
3451
6b46d73823f5
[api] work in progress, use __regid__, cw_*, etc.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3377
diff
changeset
|
136 |
_ = self._cw._ |
6b46d73823f5
[api] work in progress, use __regid__, cw_*, etc.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3377
diff
changeset
|
137 |
eid = self.cw_rset[row][col] |
1091
b5e253c0dd13
a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents:
984
diff
changeset
|
138 |
sel = 'Any FS,TS,WF,D' |
b5e253c0dd13
a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents:
984
diff
changeset
|
139 |
rql = ' ORDERBY D DESC WHERE WF wf_info_for X,'\ |
b5e253c0dd13
a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents:
984
diff
changeset
|
140 |
'WF from_state FS, WF to_state TS, WF comment C,'\ |
b5e253c0dd13
a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents:
984
diff
changeset
|
141 |
'WF creation_date D' |
3451
6b46d73823f5
[api] work in progress, use __regid__, cw_*, etc.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3377
diff
changeset
|
142 |
if self._cw.vreg.schema.eschema('CWUser').has_perm(self._cw, 'read'): |
1091
b5e253c0dd13
a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents:
984
diff
changeset
|
143 |
sel += ',U,C' |
b5e253c0dd13
a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents:
984
diff
changeset
|
144 |
rql += ', WF owned_by U?' |
b5e253c0dd13
a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents:
984
diff
changeset
|
145 |
displaycols = range(5) |
b5e253c0dd13
a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents:
984
diff
changeset
|
146 |
headers = (_('from_state'), _('to_state'), _('comment'), _('date'), |
1504
c6051f141807
register to catalog, delete-trailing-whitespaces
sylvain.thenault@logilab.fr
parents:
1398
diff
changeset
|
147 |
_('CWUser')) |
1091
b5e253c0dd13
a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents:
984
diff
changeset
|
148 |
else: |
b5e253c0dd13
a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents:
984
diff
changeset
|
149 |
sel += ',C' |
b5e253c0dd13
a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents:
984
diff
changeset
|
150 |
displaycols = range(4) |
b5e253c0dd13
a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents:
984
diff
changeset
|
151 |
headers = (_('from_state'), _('to_state'), _('comment'), _('date')) |
b5e253c0dd13
a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents:
984
diff
changeset
|
152 |
rql = '%s %s, X eid %%(x)s' % (sel, rql) |
b5e253c0dd13
a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents:
984
diff
changeset
|
153 |
try: |
5174
78438ad513ca
#759035: Automate addition of eid cachekey in RQL analysis
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4995
diff
changeset
|
154 |
rset = self._cw.execute(rql, {'x': eid}) |
1091
b5e253c0dd13
a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents:
984
diff
changeset
|
155 |
except Unauthorized: |
b5e253c0dd13
a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents:
984
diff
changeset
|
156 |
return |
b5e253c0dd13
a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents:
984
diff
changeset
|
157 |
if rset: |
b5e253c0dd13
a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents:
984
diff
changeset
|
158 |
self.wview('table', rset, title=_(self.title), displayactions=False, |
b5e253c0dd13
a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents:
984
diff
changeset
|
159 |
displaycols=displaycols, headers=headers) |
b5e253c0dd13
a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents:
984
diff
changeset
|
160 |
|
b5e253c0dd13
a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents:
984
diff
changeset
|
161 |
|
2440
8e6b83e3b6b5
#343227: display the workflow history of any entity
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
2438
diff
changeset
|
162 |
class WFHistoryVComponent(component.EntityVComponent): |
8e6b83e3b6b5
#343227: display the workflow history of any entity
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
2438
diff
changeset
|
163 |
"""display the workflow history for entities supporting it""" |
3377
dd9d292b6a6d
use __regid__ instead of id on appobject classes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3369
diff
changeset
|
164 |
__regid__ = 'wfhistory' |
2440
8e6b83e3b6b5
#343227: display the workflow history of any entity
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
2438
diff
changeset
|
165 |
__select__ = WFHistoryView.__select__ & component.EntityVComponent.__select__ |
8e6b83e3b6b5
#343227: display the workflow history of any entity
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
2438
diff
changeset
|
166 |
context = 'navcontentbottom' |
8e6b83e3b6b5
#343227: display the workflow history of any entity
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
2438
diff
changeset
|
167 |
title = _('Workflow history') |
8e6b83e3b6b5
#343227: display the workflow history of any entity
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
2438
diff
changeset
|
168 |
|
8e6b83e3b6b5
#343227: display the workflow history of any entity
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
2438
diff
changeset
|
169 |
def cell_call(self, row, col, view=None): |
3451
6b46d73823f5
[api] work in progress, use __regid__, cw_*, etc.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3377
diff
changeset
|
170 |
self.wview('wfhistory', self.cw_rset, row=row, col=col, view=view) |
1091
b5e253c0dd13
a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents:
984
diff
changeset
|
171 |
|
3219
be8cfc00ae04
edit box refactoring to gain more control by using actions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3216
diff
changeset
|
172 |
|
be8cfc00ae04
edit box refactoring to gain more control by using actions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3216
diff
changeset
|
173 |
# workflow actions ############################################################# |
be8cfc00ae04
edit box refactoring to gain more control by using actions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3216
diff
changeset
|
174 |
|
be8cfc00ae04
edit box refactoring to gain more control by using actions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3216
diff
changeset
|
175 |
class WorkflowActions(action.Action): |
be8cfc00ae04
edit box refactoring to gain more control by using actions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3216
diff
changeset
|
176 |
"""fill 'workflow' sub-menu of the actions box""" |
3377
dd9d292b6a6d
use __regid__ instead of id on appobject classes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3369
diff
changeset
|
177 |
__regid__ = 'workflow' |
3219
be8cfc00ae04
edit box refactoring to gain more control by using actions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3216
diff
changeset
|
178 |
__select__ = (action.Action.__select__ & one_line_rset() & |
be8cfc00ae04
edit box refactoring to gain more control by using actions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3216
diff
changeset
|
179 |
relation_possible('in_state')) |
be8cfc00ae04
edit box refactoring to gain more control by using actions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3216
diff
changeset
|
180 |
|
be8cfc00ae04
edit box refactoring to gain more control by using actions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3216
diff
changeset
|
181 |
submenu = _('workflow') |
be8cfc00ae04
edit box refactoring to gain more control by using actions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3216
diff
changeset
|
182 |
order = 10 |
be8cfc00ae04
edit box refactoring to gain more control by using actions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3216
diff
changeset
|
183 |
|
be8cfc00ae04
edit box refactoring to gain more control by using actions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3216
diff
changeset
|
184 |
def fill_menu(self, box, menu): |
3451
6b46d73823f5
[api] work in progress, use __regid__, cw_*, etc.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3377
diff
changeset
|
185 |
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
|
186 |
menu.label = u'%s: %s' % (self._cw._('state'), entity.printable_state) |
3219
be8cfc00ae04
edit box refactoring to gain more control by using actions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3216
diff
changeset
|
187 |
menu.append_anyway = True |
3228
7b05b2709439
[actions] refactor: extract actual_actions from fill_menu to work with table filter form
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3220
diff
changeset
|
188 |
super(WorkflowActions, 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:
3220
diff
changeset
|
189 |
|
7b05b2709439
[actions] refactor: extract actual_actions from fill_menu to work with table filter form
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3220
diff
changeset
|
190 |
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
|
191 |
entity = self.cw_rset.get_entity(self.cw_row or 0, self.cw_col or 0) |
3228
7b05b2709439
[actions] refactor: extract actual_actions from fill_menu to work with table filter form
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3220
diff
changeset
|
192 |
hastr = False |
3219
be8cfc00ae04
edit box refactoring to gain more control by using actions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3216
diff
changeset
|
193 |
for tr in entity.possible_transitions(): |
be8cfc00ae04
edit box refactoring to gain more control by using actions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3216
diff
changeset
|
194 |
url = entity.absolute_url(vid='statuschange', treid=tr.eid) |
3451
6b46d73823f5
[api] work in progress, use __regid__, cw_*, etc.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3377
diff
changeset
|
195 |
yield self.build_action(self._cw._(tr.name), url) |
3228
7b05b2709439
[actions] refactor: extract actual_actions from fill_menu to work with table filter form
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3220
diff
changeset
|
196 |
hastr = True |
3219
be8cfc00ae04
edit box refactoring to gain more control by using actions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3216
diff
changeset
|
197 |
# don't propose to see wf if user can't pass any transition |
3228
7b05b2709439
[actions] refactor: extract actual_actions from fill_menu to work with table filter form
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3220
diff
changeset
|
198 |
if hastr: |
3219
be8cfc00ae04
edit box refactoring to gain more control by using actions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3216
diff
changeset
|
199 |
wfurl = entity.current_workflow.absolute_url() |
3451
6b46d73823f5
[api] work in progress, use __regid__, cw_*, etc.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3377
diff
changeset
|
200 |
yield self.build_action(self._cw._('view workflow'), wfurl) |
3219
be8cfc00ae04
edit box refactoring to gain more control by using actions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3216
diff
changeset
|
201 |
if entity.workflow_history: |
be8cfc00ae04
edit box refactoring to gain more control by using actions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3216
diff
changeset
|
202 |
wfurl = entity.absolute_url(vid='wfhistory') |
3451
6b46d73823f5
[api] work in progress, use __regid__, cw_*, etc.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3377
diff
changeset
|
203 |
yield self.build_action(self._cw._('view history'), wfurl) |
3219
be8cfc00ae04
edit box refactoring to gain more control by using actions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3216
diff
changeset
|
204 |
|
be8cfc00ae04
edit box refactoring to gain more control by using actions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3216
diff
changeset
|
205 |
|
be8cfc00ae04
edit box refactoring to gain more control by using actions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3216
diff
changeset
|
206 |
# workflow entity types views ################################################## |
1091
b5e253c0dd13
a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents:
984
diff
changeset
|
207 |
|
3867
06ac8f00a99f
fix vocabulary for destination_state/allowed_transitions when creating state or transition
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3805
diff
changeset
|
208 |
_pvs = uicfg.primaryview_section |
06ac8f00a99f
fix vocabulary for destination_state/allowed_transitions when creating state or transition
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3805
diff
changeset
|
209 |
_pvs.tag_subject_of(('Workflow', 'initial_state', '*'), 'hidden') |
06ac8f00a99f
fix vocabulary for destination_state/allowed_transitions when creating state or transition
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3805
diff
changeset
|
210 |
_pvs.tag_object_of(('*', 'state_of', 'Workflow'), 'hidden') |
06ac8f00a99f
fix vocabulary for destination_state/allowed_transitions when creating state or transition
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3805
diff
changeset
|
211 |
_pvs.tag_object_of(('*', 'transition_of', 'Workflow'), 'hidden') |
5224
34e669b6fd95
[mq]: worklfow view
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5174
diff
changeset
|
212 |
_pvs.tag_object_of(('*', 'default_workflow', 'Workflow'), 'hidden') |
3867
06ac8f00a99f
fix vocabulary for destination_state/allowed_transitions when creating state or transition
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3805
diff
changeset
|
213 |
|
06ac8f00a99f
fix vocabulary for destination_state/allowed_transitions when creating state or transition
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3805
diff
changeset
|
214 |
_abaa = uicfg.actionbox_appearsin_addmenu |
06ac8f00a99f
fix vocabulary for destination_state/allowed_transitions when creating state or transition
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3805
diff
changeset
|
215 |
_abaa.tag_subject_of(('BaseTransition', 'condition', 'RQLExpression'), False) |
06ac8f00a99f
fix vocabulary for destination_state/allowed_transitions when creating state or transition
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3805
diff
changeset
|
216 |
_abaa.tag_subject_of(('State', 'allowed_transition', 'BaseTransition'), False) |
06ac8f00a99f
fix vocabulary for destination_state/allowed_transitions when creating state or transition
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3805
diff
changeset
|
217 |
_abaa.tag_object_of(('SubWorkflowExitPoint', 'destination_state', 'State'), |
06ac8f00a99f
fix vocabulary for destination_state/allowed_transitions when creating state or transition
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3805
diff
changeset
|
218 |
False) |
06ac8f00a99f
fix vocabulary for destination_state/allowed_transitions when creating state or transition
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3805
diff
changeset
|
219 |
_abaa.tag_object_of(('State', 'state_of', 'Workflow'), True) |
06ac8f00a99f
fix vocabulary for destination_state/allowed_transitions when creating state or transition
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3805
diff
changeset
|
220 |
_abaa.tag_object_of(('BaseTransition', 'transition_of', 'Workflow'), False) |
06ac8f00a99f
fix vocabulary for destination_state/allowed_transitions when creating state or transition
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3805
diff
changeset
|
221 |
_abaa.tag_object_of(('Transition', 'transition_of', 'Workflow'), True) |
06ac8f00a99f
fix vocabulary for destination_state/allowed_transitions when creating state or transition
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3805
diff
changeset
|
222 |
_abaa.tag_object_of(('WorkflowTransition', 'transition_of', 'Workflow'), True) |
06ac8f00a99f
fix vocabulary for destination_state/allowed_transitions when creating state or transition
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3805
diff
changeset
|
223 |
|
5224
34e669b6fd95
[mq]: worklfow view
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5174
diff
changeset
|
224 |
class WorkflowPrimaryView(TabbedPrimaryView): |
3867
06ac8f00a99f
fix vocabulary for destination_state/allowed_transitions when creating state or transition
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3805
diff
changeset
|
225 |
__select__ = implements('Workflow') |
5224
34e669b6fd95
[mq]: worklfow view
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5174
diff
changeset
|
226 |
tabs = [ _('wf_tab_info'), _('wfgraph'),] |
34e669b6fd95
[mq]: worklfow view
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5174
diff
changeset
|
227 |
default_tab = 'wf_tab_info' |
3867
06ac8f00a99f
fix vocabulary for destination_state/allowed_transitions when creating state or transition
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3805
diff
changeset
|
228 |
|
06ac8f00a99f
fix vocabulary for destination_state/allowed_transitions when creating state or transition
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3805
diff
changeset
|
229 |
|
1091
b5e253c0dd13
a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents:
984
diff
changeset
|
230 |
class CellView(view.EntityView): |
3377
dd9d292b6a6d
use __regid__ instead of id on appobject classes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3369
diff
changeset
|
231 |
__regid__ = 'cell' |
728
a95b284150d1
first pass to use __select__ instead of __selectors__
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
688
diff
changeset
|
232 |
__select__ = implements('TrInfo') |
1504
c6051f141807
register to catalog, delete-trailing-whitespaces
sylvain.thenault@logilab.fr
parents:
1398
diff
changeset
|
233 |
|
0 | 234 |
def cell_call(self, row, col, cellvid=None): |
3451
6b46d73823f5
[api] work in progress, use __regid__, cw_*, etc.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3377
diff
changeset
|
235 |
self.w(self.cw_rset.get_entity(row, col).view('reledit', rtype='comment')) |
795
63f4f81e19f1
restore appropriate in State's incontext view, moved it into wfentities
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
728
diff
changeset
|
236 |
|
63f4f81e19f1
restore appropriate in State's incontext view, moved it into wfentities
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
728
diff
changeset
|
237 |
|
1091
b5e253c0dd13
a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents:
984
diff
changeset
|
238 |
class StateInContextView(view.EntityView): |
795
63f4f81e19f1
restore appropriate in State's incontext view, moved it into wfentities
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
728
diff
changeset
|
239 |
"""convenience trick, State's incontext view should not be clickable""" |
3377
dd9d292b6a6d
use __regid__ instead of id on appobject classes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3369
diff
changeset
|
240 |
__regid__ = 'incontext' |
795
63f4f81e19f1
restore appropriate in State's incontext view, moved it into wfentities
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
728
diff
changeset
|
241 |
__select__ = implements('State') |
1504
c6051f141807
register to catalog, delete-trailing-whitespaces
sylvain.thenault@logilab.fr
parents:
1398
diff
changeset
|
242 |
|
795
63f4f81e19f1
restore appropriate in State's incontext view, moved it into wfentities
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
728
diff
changeset
|
243 |
def cell_call(self, row, col): |
3460
e4843535db25
[api] some more _cw / __regid__, automatic tests now pass again
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3451
diff
changeset
|
244 |
self.w(xml_escape(self._cw.view('textincontext', self.cw_rset, |
e4843535db25
[api] some more _cw / __regid__, automatic tests now pass again
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3451
diff
changeset
|
245 |
row=row, col=col))) |
795
63f4f81e19f1
restore appropriate in State's incontext view, moved it into wfentities
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
728
diff
changeset
|
246 |
|
5224
34e669b6fd95
[mq]: worklfow view
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5174
diff
changeset
|
247 |
class WorkflowTabTextView(PrimaryTab): |
34e669b6fd95
[mq]: worklfow view
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5174
diff
changeset
|
248 |
__regid__ = 'wf_tab_info' |
34e669b6fd95
[mq]: worklfow view
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5174
diff
changeset
|
249 |
__select__ = PrimaryTab.__select__ & one_line_rset() & implements('Workflow') |
34e669b6fd95
[mq]: worklfow view
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5174
diff
changeset
|
250 |
|
34e669b6fd95
[mq]: worklfow view
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5174
diff
changeset
|
251 |
def render_entity_attributes(self, entity): |
34e669b6fd95
[mq]: worklfow view
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5174
diff
changeset
|
252 |
_ = self._cw._ |
34e669b6fd95
[mq]: worklfow view
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5174
diff
changeset
|
253 |
self.w(u'<div>%s</div>' % (entity.printable_value('description'))) |
34e669b6fd95
[mq]: worklfow view
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5174
diff
changeset
|
254 |
self.w(u'<span>%s%s</span>' % (_("workflow_of").capitalize(), _(" :"))) |
34e669b6fd95
[mq]: worklfow view
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5174
diff
changeset
|
255 |
html = [] |
34e669b6fd95
[mq]: worklfow view
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5174
diff
changeset
|
256 |
for e in entity.workflow_of: |
34e669b6fd95
[mq]: worklfow view
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5174
diff
changeset
|
257 |
view = e.view('outofcontext') |
34e669b6fd95
[mq]: worklfow view
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5174
diff
changeset
|
258 |
if entity.eid == e.default_workflow[0].eid: |
34e669b6fd95
[mq]: worklfow view
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5174
diff
changeset
|
259 |
view += u' <span>[%s]</span>' % _('default_workflow') |
34e669b6fd95
[mq]: worklfow view
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5174
diff
changeset
|
260 |
html.append(view) |
34e669b6fd95
[mq]: worklfow view
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5174
diff
changeset
|
261 |
self.w(', '.join(v for v in html)) |
34e669b6fd95
[mq]: worklfow view
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5174
diff
changeset
|
262 |
self.w(u'<h2>%s</h2>' % _("Transition_plural")) |
34e669b6fd95
[mq]: worklfow view
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5174
diff
changeset
|
263 |
rset = self._cw.execute( |
34e669b6fd95
[mq]: worklfow view
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5174
diff
changeset
|
264 |
'Any T,T,DS,T,TT ORDERBY TN WHERE T transition_of WF, WF eid %(x)s,' |
34e669b6fd95
[mq]: worklfow view
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5174
diff
changeset
|
265 |
'T type TT, T name TN, T destination_state DS?', {'x': entity.eid}) |
34e669b6fd95
[mq]: worklfow view
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5174
diff
changeset
|
266 |
self.wview('editable-table', rset, 'null', |
34e669b6fd95
[mq]: worklfow view
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5174
diff
changeset
|
267 |
cellvids={ 1: 'trfromstates', 2: 'outofcontext', 3:'trsecurity',}, |
34e669b6fd95
[mq]: worklfow view
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5174
diff
changeset
|
268 |
headers = (_('Transition'), _('from_state'), |
34e669b6fd95
[mq]: worklfow view
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5174
diff
changeset
|
269 |
_('to_state'), _('permissions'), _('type') ), |
34e669b6fd95
[mq]: worklfow view
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5174
diff
changeset
|
270 |
) |
34e669b6fd95
[mq]: worklfow view
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5174
diff
changeset
|
271 |
|
34e669b6fd95
[mq]: worklfow view
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5174
diff
changeset
|
272 |
|
34e669b6fd95
[mq]: worklfow view
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5174
diff
changeset
|
273 |
class TransitionSecurityTextView(view.EntityView): |
34e669b6fd95
[mq]: worklfow view
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5174
diff
changeset
|
274 |
__regid__ = 'trsecurity' |
34e669b6fd95
[mq]: worklfow view
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5174
diff
changeset
|
275 |
__select__ = implements('Transition') |
34e669b6fd95
[mq]: worklfow view
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5174
diff
changeset
|
276 |
|
34e669b6fd95
[mq]: worklfow view
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5174
diff
changeset
|
277 |
def cell_call(self, row, col): |
34e669b6fd95
[mq]: worklfow view
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5174
diff
changeset
|
278 |
_ = self._cw._ |
34e669b6fd95
[mq]: worklfow view
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5174
diff
changeset
|
279 |
entity = self.cw_rset.get_entity(self.cw_row, self.cw_col) |
34e669b6fd95
[mq]: worklfow view
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5174
diff
changeset
|
280 |
if entity.require_group: |
34e669b6fd95
[mq]: worklfow view
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5174
diff
changeset
|
281 |
self.w(u'<div>%s%s %s</div>' % |
34e669b6fd95
[mq]: worklfow view
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5174
diff
changeset
|
282 |
(_('groups'), _(" :"), |
34e669b6fd95
[mq]: worklfow view
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5174
diff
changeset
|
283 |
u', '.join((g.view('incontext') for g |
34e669b6fd95
[mq]: worklfow view
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5174
diff
changeset
|
284 |
in entity.require_group)))) |
34e669b6fd95
[mq]: worklfow view
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5174
diff
changeset
|
285 |
if entity.condition: |
34e669b6fd95
[mq]: worklfow view
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5174
diff
changeset
|
286 |
self.w(u'<div>%s%s %s</div>' % |
34e669b6fd95
[mq]: worklfow view
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5174
diff
changeset
|
287 |
( _('conditions'), _(" :"), |
34e669b6fd95
[mq]: worklfow view
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5174
diff
changeset
|
288 |
u'<br/>'.join((e.dc_title() for e |
34e669b6fd95
[mq]: worklfow view
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5174
diff
changeset
|
289 |
in entity.condition)))) |
34e669b6fd95
[mq]: worklfow view
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5174
diff
changeset
|
290 |
|
34e669b6fd95
[mq]: worklfow view
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5174
diff
changeset
|
291 |
class TransitionAllowedTextView(view.EntityView): |
34e669b6fd95
[mq]: worklfow view
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5174
diff
changeset
|
292 |
__regid__ = 'trfromstates' |
34e669b6fd95
[mq]: worklfow view
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5174
diff
changeset
|
293 |
__select__ = implements('Transition') |
34e669b6fd95
[mq]: worklfow view
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5174
diff
changeset
|
294 |
|
34e669b6fd95
[mq]: worklfow view
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5174
diff
changeset
|
295 |
def cell_call(self, row, col): |
34e669b6fd95
[mq]: worklfow view
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5174
diff
changeset
|
296 |
entity = self.cw_rset.get_entity(self.cw_row, self.cw_col) |
34e669b6fd95
[mq]: worklfow view
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5174
diff
changeset
|
297 |
self.w(u', '.join((e.view('outofcontext') for e |
34e669b6fd95
[mq]: worklfow view
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5174
diff
changeset
|
298 |
in entity.reverse_allowed_transition))) |
34e669b6fd95
[mq]: worklfow view
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5174
diff
changeset
|
299 |
|
1091
b5e253c0dd13
a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents:
984
diff
changeset
|
300 |
|
3867
06ac8f00a99f
fix vocabulary for destination_state/allowed_transitions when creating state or transition
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3805
diff
changeset
|
301 |
# workflow entity types edition ################################################ |
06ac8f00a99f
fix vocabulary for destination_state/allowed_transitions when creating state or transition
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3805
diff
changeset
|
302 |
|
06ac8f00a99f
fix vocabulary for destination_state/allowed_transitions when creating state or transition
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3805
diff
changeset
|
303 |
_afs = uicfg.autoform_section |
4004
c52619c738a5
api renaming update
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents:
3998
diff
changeset
|
304 |
_afs.tag_subject_of(('TrInfo', 'to_state', '*'), 'main', 'hidden') |
c52619c738a5
api renaming update
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents:
3998
diff
changeset
|
305 |
_afs.tag_subject_of(('TrInfo', 'from_state', '*'), 'main', 'hidden') |
c52619c738a5
api renaming update
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents:
3998
diff
changeset
|
306 |
_afs.tag_object_of(('State', 'allowed_transition', '*'), 'main', 'attributes') |
c52619c738a5
api renaming update
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents:
3998
diff
changeset
|
307 |
_afs.tag_subject_of(('State', 'allowed_transition', '*'), 'main', 'attributes') |
3867
06ac8f00a99f
fix vocabulary for destination_state/allowed_transitions when creating state or transition
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3805
diff
changeset
|
308 |
|
06ac8f00a99f
fix vocabulary for destination_state/allowed_transitions when creating state or transition
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3805
diff
changeset
|
309 |
def workflow_items_for_relation(req, wfeid, wfrelation, targetrelation): |
06ac8f00a99f
fix vocabulary for destination_state/allowed_transitions when creating state or transition
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3805
diff
changeset
|
310 |
wf = req.entity_from_eid(wfeid) |
06ac8f00a99f
fix vocabulary for destination_state/allowed_transitions when creating state or transition
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3805
diff
changeset
|
311 |
rschema = req.vreg.schema[targetrelation] |
06ac8f00a99f
fix vocabulary for destination_state/allowed_transitions when creating state or transition
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3805
diff
changeset
|
312 |
return sorted((e.view('combobox'), e.eid) |
06ac8f00a99f
fix vocabulary for destination_state/allowed_transitions when creating state or transition
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3805
diff
changeset
|
313 |
for e in getattr(wf, 'reverse_%s' % wfrelation) |
06ac8f00a99f
fix vocabulary for destination_state/allowed_transitions when creating state or transition
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3805
diff
changeset
|
314 |
if rschema.has_perm(req, 'add', toeid=e.eid)) |
06ac8f00a99f
fix vocabulary for destination_state/allowed_transitions when creating state or transition
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3805
diff
changeset
|
315 |
|
06ac8f00a99f
fix vocabulary for destination_state/allowed_transitions when creating state or transition
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3805
diff
changeset
|
316 |
|
06ac8f00a99f
fix vocabulary for destination_state/allowed_transitions when creating state or transition
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3805
diff
changeset
|
317 |
class TransitionEditionForm(autoform.AutomaticEntityForm): |
4075
e710f4052bd6
use implements instead of entity_implements
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4004
diff
changeset
|
318 |
__select__ = implements('Transition') |
1504
c6051f141807
register to catalog, delete-trailing-whitespaces
sylvain.thenault@logilab.fr
parents:
1398
diff
changeset
|
319 |
|
3868
161a5f7d1190
oops, fix wf entity types vocabulary while in creation
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3867
diff
changeset
|
320 |
def workflow_states_for_relation(self, targetrelation): |
3867
06ac8f00a99f
fix vocabulary for destination_state/allowed_transitions when creating state or transition
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3805
diff
changeset
|
321 |
eids = self.edited_entity.linked_to('transition_of', 'subject') |
06ac8f00a99f
fix vocabulary for destination_state/allowed_transitions when creating state or transition
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3805
diff
changeset
|
322 |
if eids: |
4087 | 323 |
return workflow_items_for_relation(self._cw, eids[0], 'state_of', |
3867
06ac8f00a99f
fix vocabulary for destination_state/allowed_transitions when creating state or transition
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3805
diff
changeset
|
324 |
targetrelation) |
06ac8f00a99f
fix vocabulary for destination_state/allowed_transitions when creating state or transition
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3805
diff
changeset
|
325 |
return [] |
06ac8f00a99f
fix vocabulary for destination_state/allowed_transitions when creating state or transition
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3805
diff
changeset
|
326 |
|
06ac8f00a99f
fix vocabulary for destination_state/allowed_transitions when creating state or transition
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3805
diff
changeset
|
327 |
def subject_destination_state_vocabulary(self, rtype, limit=None): |
06ac8f00a99f
fix vocabulary for destination_state/allowed_transitions when creating state or transition
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3805
diff
changeset
|
328 |
if not self.edited_entity.has_eid(): |
06ac8f00a99f
fix vocabulary for destination_state/allowed_transitions when creating state or transition
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3805
diff
changeset
|
329 |
return self.workflow_states_for_relation('destination_state') |
06ac8f00a99f
fix vocabulary for destination_state/allowed_transitions when creating state or transition
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3805
diff
changeset
|
330 |
return self.subject_relation_vocabulary(rtype, limit) |
06ac8f00a99f
fix vocabulary for destination_state/allowed_transitions when creating state or transition
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3805
diff
changeset
|
331 |
|
06ac8f00a99f
fix vocabulary for destination_state/allowed_transitions when creating state or transition
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3805
diff
changeset
|
332 |
def object_allowed_transition_vocabulary(self, rtype, limit=None): |
06ac8f00a99f
fix vocabulary for destination_state/allowed_transitions when creating state or transition
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3805
diff
changeset
|
333 |
if not self.edited_entity.has_eid(): |
06ac8f00a99f
fix vocabulary for destination_state/allowed_transitions when creating state or transition
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3805
diff
changeset
|
334 |
return self.workflow_states_for_relation('allowed_transition') |
3957
4a71754bf5eb
oops, this is an object relation
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3953
diff
changeset
|
335 |
return self.object_relation_vocabulary(rtype, limit) |
3867
06ac8f00a99f
fix vocabulary for destination_state/allowed_transitions when creating state or transition
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3805
diff
changeset
|
336 |
|
06ac8f00a99f
fix vocabulary for destination_state/allowed_transitions when creating state or transition
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3805
diff
changeset
|
337 |
|
06ac8f00a99f
fix vocabulary for destination_state/allowed_transitions when creating state or transition
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3805
diff
changeset
|
338 |
class StateEditionForm(autoform.AutomaticEntityForm): |
4075
e710f4052bd6
use implements instead of entity_implements
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4004
diff
changeset
|
339 |
__select__ = implements('State') |
3867
06ac8f00a99f
fix vocabulary for destination_state/allowed_transitions when creating state or transition
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3805
diff
changeset
|
340 |
|
06ac8f00a99f
fix vocabulary for destination_state/allowed_transitions when creating state or transition
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3805
diff
changeset
|
341 |
def subject_allowed_transition_vocabulary(self, rtype, limit=None): |
06ac8f00a99f
fix vocabulary for destination_state/allowed_transitions when creating state or transition
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3805
diff
changeset
|
342 |
if not self.edited_entity.has_eid(): |
3868
161a5f7d1190
oops, fix wf entity types vocabulary while in creation
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3867
diff
changeset
|
343 |
eids = self.edited_entity.linked_to('state_of', 'subject') |
3867
06ac8f00a99f
fix vocabulary for destination_state/allowed_transitions when creating state or transition
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3805
diff
changeset
|
344 |
if eids: |
4087 | 345 |
return workflow_items_for_relation(self._cw, eids[0], 'transition_of', |
3867
06ac8f00a99f
fix vocabulary for destination_state/allowed_transitions when creating state or transition
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3805
diff
changeset
|
346 |
'allowed_transition') |
06ac8f00a99f
fix vocabulary for destination_state/allowed_transitions when creating state or transition
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3805
diff
changeset
|
347 |
return [] |
1091
b5e253c0dd13
a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents:
984
diff
changeset
|
348 |
|
1504
c6051f141807
register to catalog, delete-trailing-whitespaces
sylvain.thenault@logilab.fr
parents:
1398
diff
changeset
|
349 |
|
3215
bf30ab5ba6ee
fix workflow graph views and tabs for the new wf system, remove useless view and action (actually useless since introduction of tabbed entity type view
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2920
diff
changeset
|
350 |
# workflow images ############################################################## |
1091
b5e253c0dd13
a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents:
984
diff
changeset
|
351 |
|
b5e253c0dd13
a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents:
984
diff
changeset
|
352 |
class WorkflowDotPropsHandler(object): |
b5e253c0dd13
a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents:
984
diff
changeset
|
353 |
def __init__(self, req): |
b5e253c0dd13
a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents:
984
diff
changeset
|
354 |
self._ = req._ |
1504
c6051f141807
register to catalog, delete-trailing-whitespaces
sylvain.thenault@logilab.fr
parents:
1398
diff
changeset
|
355 |
|
1091
b5e253c0dd13
a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents:
984
diff
changeset
|
356 |
def node_properties(self, stateortransition): |
b5e253c0dd13
a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents:
984
diff
changeset
|
357 |
"""return default DOT drawing options for a state or transition""" |
3304
2b18276b21ab
[ui] translate state/tr names in wf image
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3262
diff
changeset
|
358 |
props = {'label': stateortransition.printable_value('name'), |
5224
34e669b6fd95
[mq]: worklfow view
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5174
diff
changeset
|
359 |
'fontname': 'Courier', 'fontsize':10, |
34e669b6fd95
[mq]: worklfow view
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5174
diff
changeset
|
360 |
'href': stateortransition.absolute_url(), |
34e669b6fd95
[mq]: worklfow view
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5174
diff
changeset
|
361 |
} |
1091
b5e253c0dd13
a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents:
984
diff
changeset
|
362 |
if hasattr(stateortransition, 'state_of'): |
b5e253c0dd13
a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents:
984
diff
changeset
|
363 |
props['shape'] = 'box' |
b5e253c0dd13
a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents:
984
diff
changeset
|
364 |
props['style'] = 'filled' |
b5e253c0dd13
a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents:
984
diff
changeset
|
365 |
if stateortransition.reverse_initial_state: |
5224
34e669b6fd95
[mq]: worklfow view
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5174
diff
changeset
|
366 |
props['fillcolor'] = '#88CC88' |
1091
b5e253c0dd13
a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents:
984
diff
changeset
|
367 |
else: |
b5e253c0dd13
a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents:
984
diff
changeset
|
368 |
props['shape'] = 'ellipse' |
b5e253c0dd13
a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents:
984
diff
changeset
|
369 |
descr = [] |
b5e253c0dd13
a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents:
984
diff
changeset
|
370 |
tr = stateortransition |
b5e253c0dd13
a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents:
984
diff
changeset
|
371 |
if descr: |
b5e253c0dd13
a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents:
984
diff
changeset
|
372 |
props['label'] += escape('\n'.join(descr)) |
b5e253c0dd13
a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents:
984
diff
changeset
|
373 |
return props |
1504
c6051f141807
register to catalog, delete-trailing-whitespaces
sylvain.thenault@logilab.fr
parents:
1398
diff
changeset
|
374 |
|
1091
b5e253c0dd13
a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents:
984
diff
changeset
|
375 |
def edge_properties(self, transition, fromstate, tostate): |
b5e253c0dd13
a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents:
984
diff
changeset
|
376 |
return {'label': '', 'dir': 'forward', |
b5e253c0dd13
a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents:
984
diff
changeset
|
377 |
'color': 'black', 'style': 'filled'} |
b5e253c0dd13
a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents:
984
diff
changeset
|
378 |
|
b5e253c0dd13
a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents:
984
diff
changeset
|
379 |
|
b5e253c0dd13
a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents:
984
diff
changeset
|
380 |
class WorkflowVisitor: |
b5e253c0dd13
a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents:
984
diff
changeset
|
381 |
def __init__(self, entity): |
b5e253c0dd13
a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents:
984
diff
changeset
|
382 |
self.entity = entity |
b5e253c0dd13
a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents:
984
diff
changeset
|
383 |
|
b5e253c0dd13
a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents:
984
diff
changeset
|
384 |
def nodes(self): |
b5e253c0dd13
a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents:
984
diff
changeset
|
385 |
for state in self.entity.reverse_state_of: |
b5e253c0dd13
a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents:
984
diff
changeset
|
386 |
state.complete() |
b5e253c0dd13
a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents:
984
diff
changeset
|
387 |
yield state.eid, state |
b5e253c0dd13
a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents:
984
diff
changeset
|
388 |
for transition in self.entity.reverse_transition_of: |
b5e253c0dd13
a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents:
984
diff
changeset
|
389 |
transition.complete() |
b5e253c0dd13
a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents:
984
diff
changeset
|
390 |
yield transition.eid, transition |
1504
c6051f141807
register to catalog, delete-trailing-whitespaces
sylvain.thenault@logilab.fr
parents:
1398
diff
changeset
|
391 |
|
1091
b5e253c0dd13
a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents:
984
diff
changeset
|
392 |
def edges(self): |
b5e253c0dd13
a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents:
984
diff
changeset
|
393 |
for transition in self.entity.reverse_transition_of: |
b5e253c0dd13
a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents:
984
diff
changeset
|
394 |
for incomingstate in transition.reverse_allowed_transition: |
b5e253c0dd13
a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents:
984
diff
changeset
|
395 |
yield incomingstate.eid, transition.eid, transition |
4646
322c3dd96dd5
[workflow] finish refactoring introduced by 021035b9a7ab for 'go back' transition:
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4436
diff
changeset
|
396 |
for outgoingstate in transition.potential_destinations(): |
322c3dd96dd5
[workflow] finish refactoring introduced by 021035b9a7ab for 'go back' transition:
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4436
diff
changeset
|
397 |
yield transition.eid, outgoingstate.eid, transition |
1091
b5e253c0dd13
a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents:
984
diff
changeset
|
398 |
|
b5e253c0dd13
a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents:
984
diff
changeset
|
399 |
|
5224
34e669b6fd95
[mq]: worklfow view
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5174
diff
changeset
|
400 |
class WorkflowGraphView(view.EntityView): |
34e669b6fd95
[mq]: worklfow view
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5174
diff
changeset
|
401 |
__regid__ = 'wfgraph' |
34e669b6fd95
[mq]: worklfow view
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5174
diff
changeset
|
402 |
__select__ = EntityView.__select__ & one_line_rset() & implements('Workflow') |
34e669b6fd95
[mq]: worklfow view
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5174
diff
changeset
|
403 |
|
34e669b6fd95
[mq]: worklfow view
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5174
diff
changeset
|
404 |
def cell_call(self, row, col): |
34e669b6fd95
[mq]: worklfow view
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5174
diff
changeset
|
405 |
entity = self.cw_rset.get_entity(row, col) |
34e669b6fd95
[mq]: worklfow view
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5174
diff
changeset
|
406 |
visitor = WorkflowVisitor(entity) |
34e669b6fd95
[mq]: worklfow view
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5174
diff
changeset
|
407 |
prophdlr = WorkflowDotPropsHandler(self._cw) |
34e669b6fd95
[mq]: worklfow view
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5174
diff
changeset
|
408 |
wfname = 'workflow%s' % str(entity.eid) |
34e669b6fd95
[mq]: worklfow view
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5174
diff
changeset
|
409 |
generator = GraphGenerator(DotBackend(wfname, None, |
34e669b6fd95
[mq]: worklfow view
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5174
diff
changeset
|
410 |
ratio='compress', size='30,10')) |
34e669b6fd95
[mq]: worklfow view
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5174
diff
changeset
|
411 |
# map file |
34e669b6fd95
[mq]: worklfow view
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5174
diff
changeset
|
412 |
pmap, mapfile = tempfile.mkstemp(".map", wfname) |
34e669b6fd95
[mq]: worklfow view
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5174
diff
changeset
|
413 |
os.close(pmap) |
34e669b6fd95
[mq]: worklfow view
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5174
diff
changeset
|
414 |
# image file |
34e669b6fd95
[mq]: worklfow view
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5174
diff
changeset
|
415 |
fd, tmpfile = tempfile.mkstemp('.png') |
34e669b6fd95
[mq]: worklfow view
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5174
diff
changeset
|
416 |
os.close(fd) |
34e669b6fd95
[mq]: worklfow view
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5174
diff
changeset
|
417 |
generator.generate(visitor, prophdlr, tmpfile, mapfile) |
5682
5628247f51ce
[security] view was giving web access to every fs file accessible by the web server process. Fix this security hole by storing file in session data, not direct form parameters
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5426
diff
changeset
|
418 |
filekeyid = make_uid() |
5628247f51ce
[security] view was giving web access to every fs file accessible by the web server process. Fix this security hole by storing file in session data, not direct form parameters
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5426
diff
changeset
|
419 |
self._cw.session.data[filekeyid] = tmpfile |
5224
34e669b6fd95
[mq]: worklfow view
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5174
diff
changeset
|
420 |
self.w(u'<img src="%s" alt="%s" usemap="#%s" />' % ( |
5682
5628247f51ce
[security] view was giving web access to every fs file accessible by the web server process. Fix this security hole by storing file in session data, not direct form parameters
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5426
diff
changeset
|
421 |
xml_escape(entity.absolute_url(vid='tmppng', tmpfile=filekeyid)), |
5224
34e669b6fd95
[mq]: worklfow view
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5174
diff
changeset
|
422 |
xml_escape(self._cw._('graphical workflow for %s') % entity.name), |
34e669b6fd95
[mq]: worklfow view
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5174
diff
changeset
|
423 |
wfname)) |
34e669b6fd95
[mq]: worklfow view
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5174
diff
changeset
|
424 |
stream = open(mapfile, 'r').read() |
34e669b6fd95
[mq]: worklfow view
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5174
diff
changeset
|
425 |
stream = stream.decode(self._cw.encoding) |
34e669b6fd95
[mq]: worklfow view
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5174
diff
changeset
|
426 |
self.w(stream) |
34e669b6fd95
[mq]: worklfow view
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5174
diff
changeset
|
427 |
os.unlink(mapfile) |
34e669b6fd95
[mq]: worklfow view
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5174
diff
changeset
|
428 |
|
5682
5628247f51ce
[security] view was giving web access to every fs file accessible by the web server process. Fix this security hole by storing file in session data, not direct form parameters
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5426
diff
changeset
|
429 |
|
5628247f51ce
[security] view was giving web access to every fs file accessible by the web server process. Fix this security hole by storing file in session data, not direct form parameters
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5426
diff
changeset
|
430 |
class TmpPngView(TmpFileViewMixin, view.EntityView): |
5628247f51ce
[security] view was giving web access to every fs file accessible by the web server process. Fix this security hole by storing file in session data, not direct form parameters
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5426
diff
changeset
|
431 |
__regid__ = 'tmppng' |
5628247f51ce
[security] view was giving web access to every fs file accessible by the web server process. Fix this security hole by storing file in session data, not direct form parameters
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5426
diff
changeset
|
432 |
__select__ = match_form_params('tmpfile') |
1091
b5e253c0dd13
a bit of reorganisation inside web/views:
sylvain.thenault@logilab.fr
parents:
984
diff
changeset
|
433 |
content_type = 'image/png' |
5682
5628247f51ce
[security] view was giving web access to every fs file accessible by the web server process. Fix this security hole by storing file in session data, not direct form parameters
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5426
diff
changeset
|
434 |
binary = True |
1504
c6051f141807
register to catalog, delete-trailing-whitespaces
sylvain.thenault@logilab.fr
parents:
1398
diff
changeset
|
435 |
|
5224
34e669b6fd95
[mq]: worklfow view
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5174
diff
changeset
|
436 |
def cell_call(self, row=0, col=0): |
5682
5628247f51ce
[security] view was giving web access to every fs file accessible by the web server process. Fix this security hole by storing file in session data, not direct form parameters
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5426
diff
changeset
|
437 |
tmpfile = self._cw.session.data[self._cw.form['tmpfile']] |
5224
34e669b6fd95
[mq]: worklfow view
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5174
diff
changeset
|
438 |
self.w(open(tmpfile, 'rb').read()) |
5684
015755f67e46
[workflow image] remove debug code
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5682
diff
changeset
|
439 |
os.unlink(tmpfile) |