web/views/workflow.py
changeset 4075 e710f4052bd6
parent 4004 c52619c738a5
child 4087 2b8bc4cfd6ee
equal deleted inserted replaced
4074:9cce43f52c61 4075:e710f4052bd6
    15 from logilab.common.graph import escape, GraphGenerator, DotBackend
    15 from logilab.common.graph import escape, GraphGenerator, DotBackend
    16 
    16 
    17 from cubicweb import Unauthorized, view
    17 from cubicweb import Unauthorized, view
    18 from cubicweb.selectors import (implements, has_related_entities, one_line_rset,
    18 from cubicweb.selectors import (implements, has_related_entities, one_line_rset,
    19                                 relation_possible, match_form_params,
    19                                 relation_possible, match_form_params,
    20                                 entity_implements, score_entity)
    20                                 implements, score_entity)
    21 from cubicweb.interfaces import IWorkflowable
    21 from cubicweb.interfaces import IWorkflowable
    22 from cubicweb.view import EntityView
    22 from cubicweb.view import EntityView
    23 from cubicweb.schema import display_name
    23 from cubicweb.schema import display_name
    24 from cubicweb.web import uicfg, stdmsgs, action, component, form, action
    24 from cubicweb.web import uicfg, stdmsgs, action, component, form, action
    25 from cubicweb.web import formfields as ff, formwidgets as fwdgs
    25 from cubicweb.web import formfields as ff, formwidgets as fwdgs
    78     def redirectpath(self, entity):
    78     def redirectpath(self, entity):
    79         return entity.rest_path()
    79         return entity.rest_path()
    80 
    80 
    81     def get_form(self, entity, transition, **kwargs):
    81     def get_form(self, entity, transition, **kwargs):
    82         # XXX used to specify both rset/row/col and entity in case implements
    82         # XXX used to specify both rset/row/col and entity in case implements
    83         # selector (and not entity_implements) is used on custom form
    83         # selector (and not implements) is used on custom form
    84         form = self._cw.vreg['forms'].select(
    84         form = self._cw.vreg['forms'].select(
    85             'changestate', self._cw, entity=entity, transition=transition,
    85             'changestate', self._cw, entity=entity, transition=transition,
    86             redirect_path=self.redirectpath(entity), **kwargs)
    86             redirect_path=self.redirectpath(entity), **kwargs)
    87         trinfo = self._cw.vreg['etypes'].etype_class('TrInfo')(self._cw)
    87         trinfo = self._cw.vreg['etypes'].etype_class('TrInfo')(self._cw)
    88         trinfo.eid = self._cw.varmaker.next()
    88         trinfo.eid = self._cw.varmaker.next()
   231                   for e in getattr(wf, 'reverse_%s' % wfrelation)
   231                   for e in getattr(wf, 'reverse_%s' % wfrelation)
   232                   if rschema.has_perm(req, 'add', toeid=e.eid))
   232                   if rschema.has_perm(req, 'add', toeid=e.eid))
   233 
   233 
   234 
   234 
   235 class TransitionEditionForm(autoform.AutomaticEntityForm):
   235 class TransitionEditionForm(autoform.AutomaticEntityForm):
   236     __select__ = entity_implements('Transition')
   236     __select__ = implements('Transition')
   237 
   237 
   238     def workflow_states_for_relation(self, targetrelation):
   238     def workflow_states_for_relation(self, targetrelation):
   239         eids = self.edited_entity.linked_to('transition_of', 'subject')
   239         eids = self.edited_entity.linked_to('transition_of', 'subject')
   240         if eids:
   240         if eids:
   241             return workflow_items_for_relation(self.req, eids[0], 'state_of',
   241             return workflow_items_for_relation(self.req, eids[0], 'state_of',
   252             return self.workflow_states_for_relation('allowed_transition')
   252             return self.workflow_states_for_relation('allowed_transition')
   253         return self.object_relation_vocabulary(rtype, limit)
   253         return self.object_relation_vocabulary(rtype, limit)
   254 
   254 
   255 
   255 
   256 class StateEditionForm(autoform.AutomaticEntityForm):
   256 class StateEditionForm(autoform.AutomaticEntityForm):
   257     __select__ = entity_implements('State')
   257     __select__ = implements('State')
   258 
   258 
   259     def subject_allowed_transition_vocabulary(self, rtype, limit=None):
   259     def subject_allowed_transition_vocabulary(self, rtype, limit=None):
   260         if not self.edited_entity.has_eid():
   260         if not self.edited_entity.has_eid():
   261             eids = self.edited_entity.linked_to('state_of', 'subject')
   261             eids = self.edited_entity.linked_to('state_of', 'subject')
   262             if eids:
   262             if eids: