17 # with CubicWeb. If not, see <http://www.gnu.org/licenses/>. |
17 # with CubicWeb. If not, see <http://www.gnu.org/licenses/>. |
18 """workflow views: |
18 """workflow views: |
19 |
19 |
20 * IWorkflowable views and forms |
20 * IWorkflowable views and forms |
21 * workflow entities views (State, Transition, TrInfo) |
21 * workflow entities views (State, Transition, TrInfo) |
22 |
|
23 """ |
22 """ |
24 __docformat__ = "restructuredtext en" |
23 __docformat__ = "restructuredtext en" |
25 _ = unicode |
24 _ = unicode |
26 |
25 |
27 import tempfile |
26 import tempfile |
32 |
31 |
33 from cubicweb import Unauthorized, view |
32 from cubicweb import Unauthorized, view |
34 from cubicweb.selectors import (implements, has_related_entities, one_line_rset, |
33 from cubicweb.selectors import (implements, has_related_entities, one_line_rset, |
35 relation_possible, match_form_params, |
34 relation_possible, match_form_params, |
36 implements, score_entity) |
35 implements, score_entity) |
|
36 from cubicweb.utils import make_uid |
37 from cubicweb.interfaces import IWorkflowable |
37 from cubicweb.interfaces import IWorkflowable |
38 from cubicweb.view import EntityView |
38 from cubicweb.view import EntityView |
39 from cubicweb.schema import display_name |
39 from cubicweb.schema import display_name |
40 from cubicweb.web import uicfg, stdmsgs, action, component, form, action |
40 from cubicweb.web import uicfg, stdmsgs, action, component, form, action |
41 from cubicweb.web import formfields as ff, formwidgets as fwdgs |
41 from cubicweb.web import formfields as ff, formwidgets as fwdgs |
413 os.close(pmap) |
413 os.close(pmap) |
414 # image file |
414 # image file |
415 fd, tmpfile = tempfile.mkstemp('.png') |
415 fd, tmpfile = tempfile.mkstemp('.png') |
416 os.close(fd) |
416 os.close(fd) |
417 generator.generate(visitor, prophdlr, tmpfile, mapfile) |
417 generator.generate(visitor, prophdlr, tmpfile, mapfile) |
|
418 filekeyid = make_uid() |
|
419 self._cw.session.data[filekeyid] = tmpfile |
418 self.w(u'<img src="%s" alt="%s" usemap="#%s" />' % ( |
420 self.w(u'<img src="%s" alt="%s" usemap="#%s" />' % ( |
419 xml_escape(entity.absolute_url(vid='wfimage', tmpfile=tmpfile)), |
421 xml_escape(entity.absolute_url(vid='tmppng', tmpfile=filekeyid)), |
420 xml_escape(self._cw._('graphical workflow for %s') % entity.name), |
422 xml_escape(self._cw._('graphical workflow for %s') % entity.name), |
421 wfname)) |
423 wfname)) |
422 stream = open(mapfile, 'r').read() |
424 stream = open(mapfile, 'r').read() |
423 stream = stream.decode(self._cw.encoding) |
425 stream = stream.decode(self._cw.encoding) |
424 self.w(stream) |
426 self.w(stream) |
425 os.unlink(mapfile) |
427 os.unlink(mapfile) |
426 |
428 |
427 class WorkflowImageView(TmpFileViewMixin, view.EntityView): |
429 |
428 __regid__ = 'wfimage' |
430 class TmpPngView(TmpFileViewMixin, view.EntityView): |
429 __select__ = implements('Workflow') |
431 __regid__ = 'tmppng' |
|
432 __select__ = match_form_params('tmpfile') |
430 content_type = 'image/png' |
433 content_type = 'image/png' |
|
434 binary = True |
431 |
435 |
432 def cell_call(self, row=0, col=0): |
436 def cell_call(self, row=0, col=0): |
433 tmpfile = self._cw.form.get('tmpfile', None) |
437 tmpfile = self._cw.session.data[self._cw.form['tmpfile']] |
|
438 print 'tmpfile', tmpfile |
434 self.w(open(tmpfile, 'rb').read()) |
439 self.w(open(tmpfile, 'rb').read()) |
435 os.unlink(tmpfile) |
440 #os.unlink(tmpfile) |