* @copyright Copyright (C) 2002-2005 Markus Westphal, * 2006-2008 Malcolm Cowe, 2010 Matteo Lucarelli, * 2010-2012 Uwe Steinmann * @version Release: @package_version@ */ /** * Include parent class */ //require_once("class.Bootstrap.php"); /** * Class which outputs the html page for WorkspaceMgr view * * @category DMS * @package SeedDMS * @author Markus Westphal, Malcolm Cowe, Uwe Steinmann * @copyright Copyright (C) 2002-2005 Markus Westphal, * 2006-2008 Malcolm Cowe, 2010 Matteo Lucarelli, * 2010-2012 Uwe Steinmann * @version Release: @package_version@ */ class SeedDMS_View_WorkflowGraph extends SeedDMS_Theme_Style { function js() { /* {{{ */ $this->workflow = $this->params['workflow']; /* curtransitions is a list of transition that shall be highlighted. * It is used to mark the current transition a user can trigger. * Setting this will automatically show all other transitions with * higher opacity. */ $this->curtransitions = $this->params['transitions']; header('Content-Type: application/javascript; charset=UTF-8'); $renderdata = ''; ?> var cy = cytoscape({ container: document.getElementById('canvas'), style: [ { selector: 'node', style: { 'content': 'data(name)', 'height': 40, 'width': 40, 'text-valign': 'top', 'text-halign': 'center', // 'color': '#fff', 'background-color': '#11479e', // 'text-outline-color': '#11479e', // 'text-outline-width': '3px', // 'font-size': '10px', 'text-wrap': 'wrap' } }, { selector: 'node.action', style: { 'shape': 'roundrectangle', 'height': 30, 'width': 30, 'background-color': '#91479e', // 'text-outline-color': '#91479e' } }, { selector: 'node.current', style: { 'font-weight': 'bold', } }, { selector: 'node.light', style: { 'opacity': '0.3', } }, { selector: 'node.init', style: { 'background-color': '#ff9900', // 'text-outline-color': '#b06000' } }, { selector: 'node.released', style: { 'background-color': '#00b000', 'text-valign': 'bottom', 'text-margin-y': '3px', // 'text-outline-color': '#00b000' } }, { selector: 'node.rejected', style: { 'background-color': '#b00000', 'text-valign': 'bottom', 'text-margin-y': '3px', // 'text-outline-color': '#b00000' } }, { selector: 'edge', style: { 'width': 4, 'curve-style': 'bezier', 'target-arrow-shape': 'triangle', 'line-color': '#9dbaea', 'target-arrow-color': '#9dbaea', 'curve-style': 'bezier' } }, { selector: 'edge.light', style: { 'opacity': '0.3', } } ] }); cy.gridGuide({ discreteDrag: false, guidelinesStyle: { strokeStyle: "red" } }); cy.on('free', 'node', function(evt) { $('#png').attr('src', cy.png({'full': true})); }); cy.on('tap', 'node', function(evt) { var node = evt.target; var scratch = node.scratch('app'); if(typeof scratch !== 'undefined') { noty({ text: (scratch.users ? '

' ?> ' + scratch.users + '

' : '') + (scratch.groups ? ' ' ?> ' + scratch.groups + '

' : ''), type: 'information', dismissQueue: true, layout: 'topCenter', theme: 'defaultTheme', timeout: 4000, killer: true, }); } }); cy.on('zoom', function(evt) { $('#zoom button').text(Math.round(cy.zoom()*100)+'%'); }); printGraph(); ?> cy.layout({ name: 'cose', ready: function() {$('#png').attr('src', cy.png({'full': true}))} }); cy.maxZoom(2.5); cy.minZoom(0.4); $('#zoom button').text(Math.round(cy.zoom()*100)+'%'); $(document).ready(function() { $('body').on('click', '#setlayout', function(ev){ ev.preventDefault(); var element = $(this); cy.layout({name: element.data('layout'), ready: function() {$('#png').attr('src', cy.png({'full': true}))}}); }); $('body').on('click', '#zoom button', function(ev){ cy.zoom(1); cy.center(); }); }); workflow->getTransitions(); if($transitions) { $this->seentrans = array(); $this->states = array(); $this->actions = array(); $highlightstates = array(); foreach($transitions as $transition) { $action = $transition->getAction(); $maxtime = $transition->getMaxTime(); $state = $transition->getState(); $nextstate = $transition->getNextState(); if(1 || !isset($this->actions[$action->getID()])) { $iscurtransition = false; if($this->curtransitions) { foreach($this->curtransitions as $tr) if($transition->getID() == $tr->getID()) $iscurtransition = true; } $this->actions[$action->getID()] = $action->getID(); $transusers = $transition->getUsers(); $unames = array(); foreach($transusers as $transuser) { $unames[] = htmlspecialchars($transuser->getUser()->getLogin().' - '.$transuser->getUser()->getFullName()); } $transgroups = $transition->getGroups(); $gnames = array(); foreach($transgroups as $transgroup) { $gnames[] = htmlspecialchars($transgroup->getGroup()->getName()); } echo "cy.add({ data: { id: 'A".$transition->getID()."-".$action->getID()."', name: \"".str_replace('"', "\\\"", $action->getName())/*.($unames ? "\\n(".str_replace('"', "\\\"", implode(", ", $unames)).")" : '').($gnames ? "\\n(".str_replace('"', "\\\"", implode(", ", $gnames)).")" : '')*/."\" }, classes: 'action".($iscurtransition ? " current" : ($this->curtransitions ? " light" : ""))."'".(!$this->curtransitions || $iscurtransition && $this->curtransitions ? ", scratch: { app: {groups: \"".str_replace('"', "\\\"", implode(", ", $gnames))."\", users: \"".str_replace('"', "\\\"", implode(", ", $unames))."\"} }" : "")." });\n"; } /* Collect all states and remember those which are part of a * current transition. */ if(!isset($this->states[$state->getID()]) || $iscurtransition) { if($iscurtransition) $highlightstates[] = $state->getID(); $this->states[$state->getID()] = $state; } if(!isset($this->states[$nextstate->getID()]) || $iscurtransition) { if($iscurtransition) $highlightstates[] = $nextstate->getID(); $this->states[$nextstate->getID()] = $nextstate; } } foreach($this->states as $state) { $docstatus = $state->getDocumentStatus(); echo "cy.add({ data: { id: 'S".$state->getID()."', name: \"".str_replace('"', "\\\"", $state->getName())."\" }, classes: 'state".($state == $this->workflow->getInitState() ? ' init' : ($docstatus == S_RELEASED ? ' released' : ($docstatus == S_REJECTED ? ' rejected' : ''))).($highlightstates && !in_array($state->getID(), $highlightstates) ? ' light' : '')."' });\n"; } foreach($transitions as $transition) { // if(!in_array($transition->getID(), $this->seentrans)) { $state = $transition->getState(); $nextstate = $transition->getNextState(); $action = $transition->getAction(); $iscurtransition = false; if($this->curtransitions) { foreach($this->curtransitions as $tr) if($transition->getID() == $tr->getID()) $iscurtransition = true; } echo "cy.add({ data: { id: 'E1-".$transition->getID()."', source: 'S".$state->getID()."', target: 'A".$transition->getID()."-".$action->getID()."' }, classes: '".($iscurtransition ? " current" : ($this->curtransitions ? " light" : ""))."', });\n"; echo "cy.add({ data: { id: 'E2-".$transition->getID()."', source: 'A".$transition->getID()."-".$action->getID()."', target: 'S".$nextstate->getID()."' }, classes: '".($iscurtransition ? " current" : ($this->curtransitions ? " light" : ""))."', });\n"; // $this->seentrans[] = $transition->getID(); // } } } ?> params['dms']; $user = $this->params['user']; $this->workflow = $this->params['workflow']; $document = $this->params['document']; if($document) { $latestContent = $document->getLatestContent(); $this->wkflog = $latestContent->getWorkflowLog(); } else { $this->wkflog = array(); } $this->htmlAddHeader( ''."\n"); $this->htmlAddHeader( ''."\n"); $this->htmlAddHeader(' ', 'css'); $this->htmlStartPage(getMLText("admin_tools")); // $this->contentContainerStart(); ?>




contentContainerEnd(); if(method_exists($this, 'js')) echo ''."\n"; echo "\n\n"; } /* }}} */ } ?>