diff --git a/workflow/engine/content/translations/english/processmaker.en.po b/workflow/engine/content/translations/english/processmaker.en.po
index 7e54c4e29..1872d7e25 100644
--- a/workflow/engine/content/translations/english/processmaker.en.po
+++ b/workflow/engine/content/translations/english/processmaker.en.po
@@ -24283,6 +24283,12 @@ msgstr "New BPMN Project"
msgid "The following case is a \"Script-Task\""
msgstr "The following case is a \"Script-Task\""
+# TRANSLATION
+# LABEL/ID_ROUTE_TO_TASK_SERVICE_TASK
+#: LABEL/ID_ROUTE_TO_TASK_SERVICE_TASK
+msgid "The following case is a \"Service-Task\""
+msgstr "The following case is a \"Service-Task\""
+
# TRANSLATION
# LABEL/ID_MAFE_0d82790b0612935992bd564a17ce37d6
#: LABEL/ID_MAFE_0d82790b0612935992bd564a17ce37d6
diff --git a/workflow/engine/controllers/designer.php b/workflow/engine/controllers/designer.php
index 62f2aa641..24d370c97 100644
--- a/workflow/engine/controllers/designer.php
+++ b/workflow/engine/controllers/designer.php
@@ -154,6 +154,26 @@ class Designer extends Controller
}
}
+ //plugin set source path
+ $sourceCss = array();
+ $sourceJs = array();
+
+ $pluginRegistry = &PMPluginRegistry::getSingleton();
+ $srcPath = $pluginRegistry->getDesignerSourcePath();
+
+ foreach ($srcPath as $key => $value) {
+ $ext = pathinfo($value->pathFile, PATHINFO_EXTENSION);
+ if ($ext === "css") {
+ $sourceCss[] = $value->pathFile;
+ }
+ if ($ext === "js") {
+ $sourceJs[] = $value->pathFile;
+ }
+ }
+
+ $this->setVar('sourceCss', $sourceCss);
+ $this->setVar('sourceJs', $sourceJs);
+
$this->render();
}
diff --git a/workflow/engine/data/mysql/insert.sql b/workflow/engine/data/mysql/insert.sql
index b9ac61d2e..1d7483135 100644
--- a/workflow/engine/data/mysql/insert.sql
+++ b/workflow/engine/data/mysql/insert.sql
@@ -5580,6 +5580,7 @@ INSERT INTO TRANSLATION (TRN_CATEGORY,TRN_ID,TRN_LANG,TRN_VALUE,TRN_UPDATE_DATE
( 'LABEL','ID_NEW_PROJECT','en','New Project','2015-08-18') ,
( 'LABEL','ID_NEW_BPMN_PROJECT','en','New BPMN Project','2015-08-18') ,
( 'LABEL','ID_ROUTE_TO_TASK_SCRIPT_TASK','en','The following case is a "Script-Task"','2015-08-18') ,
+( 'LABEL','ID_ROUTE_TO_TASK_SERVICE_TASK','en','The following case is a "Service-Task"','2016-11-25') ,
( 'LABEL','ID_MAFE_0d82790b0612935992bd564a17ce37d6','en','Quit','2016-08-12') ,
( 'LABEL','ID_MAFE_16f49c0f891dce505db0ffe478aff96f','en','Next →','2016-08-12') ,
( 'LABEL','ID_MAFE_064626e308f7d6587778df2924ea847c','en','← Back','2016-08-12') ,
diff --git a/workflow/engine/methods/cases/cases_Step.php b/workflow/engine/methods/cases/cases_Step.php
index a1517ad8c..b1e6dc36d 100644
--- a/workflow/engine/methods/cases/cases_Step.php
+++ b/workflow/engine/methods/cases/cases_Step.php
@@ -978,6 +978,9 @@ try {
$optionTaskType = (isset($aFields["TASK"][$sKey]["NEXT_TASK"]["TAS_TYPE"]))? $aFields["TASK"][$sKey]["NEXT_TASK"]["TAS_TYPE"] : "";
switch ($optionTaskType) {
+ case "SERVICE-TASK":
+ $aFields["TASK"][$sKey]["NEXT_TASK"]["USR_UID"] = G::LoadTranslation("ID_ROUTE_TO_TASK_SERVICE_TASK");
+ break;
case "SCRIPT-TASK":
$aFields["TASK"][$sKey]["NEXT_TASK"]["USR_UID"] = G::LoadTranslation("ID_ROUTE_TO_TASK_SCRIPT_TASK");
break;
diff --git a/workflow/engine/src/ProcessMaker/Project/Adapter/BpmnWorkflow.php b/workflow/engine/src/ProcessMaker/Project/Adapter/BpmnWorkflow.php
index 2928f50e9..dc5751410 100644
--- a/workflow/engine/src/ProcessMaker/Project/Adapter/BpmnWorkflow.php
+++ b/workflow/engine/src/ProcessMaker/Project/Adapter/BpmnWorkflow.php
@@ -205,9 +205,22 @@ class BpmnWorkflow extends Project\Bpmn
$activityCurrent = \BpmnActivityPeer::retrieveByPK($actUid);
- if ($activityCurrent->getActType() == "TASK" && $activityCurrent->getActTaskType() == "SCRIPTTASK") {
- $taskData["TAS_TYPE"] = "SCRIPT-TASK";
- $taskData["TAS_ASSIGN_TYPE"] = "BALANCED";
+ if ($activityCurrent->getActType() == "TASK") {
+ switch ($activityCurrent->getActTaskType()) {
+ case 'SCRIPTTASK':
+ $taskData["TAS_TYPE"] = "SCRIPT-TASK";
+ $taskData["TAS_ASSIGN_TYPE"] = "BALANCED";
+ break;
+ case 'SERVICETASK':
+ $registry = \PMPluginRegistry::getSingleton();
+ $taskData["TAS_TYPE"] = "NORMAL";
+ //The plugin pmConnectors will be moved to the core in pm.3.3
+ if ($registry->getStatusPlugin('pmConnectors') === 'enabled') {
+ $taskData["TAS_TYPE"] = "SERVICE-TASK";
+ $taskData["TAS_ASSIGN_TYPE"] = "BALANCED";
+ }
+ break;
+ }
}
$this->wp->addTask($taskData);
@@ -254,6 +267,8 @@ class BpmnWorkflow extends Project\Bpmn
));
}
+ $taskData = self::__updateServiceTask($activityBefore, $activityCurrent, $taskData);
+
if($activityCurrent->getActLoopType() == "PARALLEL"){
$task = \TaskPeer::retrieveByPK($actUid);
if($task->getTasAssignType() == "BALANCED" || $task->getTasAssignType() == "MANUAL" || $task->getTasAssignType() == "EVALUATE" || $task->getTasAssignType() == "REPORT_TO" || $task->getTasAssignType() == "SELF_SERVICE"){
@@ -271,6 +286,62 @@ class BpmnWorkflow extends Project\Bpmn
$this->wp->updateTask($actUid, $taskData);
}
+ /**
+ * @param $actUid
+ * @param $data
+ */
+ public function sincronizeActivityData($actUid, $data)
+ {
+ $registry = \PMPluginRegistry::getSingleton();
+ $taskData = \TaskPeer::retrieveByPK($actUid);
+ //The plugin pmConnectors will be moved to the core in pm.3.3
+ if ($taskData->getTasType() == 'SERVICE-TASK' && $registry->getStatusPlugin('pmConnectors') !== 'enabled') {
+ $taskData = array();
+ $taskData["TAS_TYPE"] = "NORMAL";
+ $taskData["TAS_ASSIGN_TYPE"] = "BALANCED";
+ $this->wp->updateTask($actUid, $taskData);
+ }
+ }
+
+ /**
+ * @param null $activityBefore
+ * @param null $activityCurrent
+ * @param $taskData
+ * @return mixed
+ */
+ static function __updateServiceTask($activityBefore, $activityCurrent, $taskData)
+ {
+ $registry = \PMPluginRegistry::getSingleton();
+ if ($activityBefore->getActTaskType() != "SERVICETASK" && $activityCurrent->getActTaskType() == "SERVICETASK") {
+ //The plugin pmConnectors will be moved to the core in pm.3.3
+ if ($registry->getStatusPlugin('pmConnectors') === 'enabled') {
+ $taskData["TAS_TYPE"] = "SERVICE-TASK";
+ $taskData["TAS_ASSIGN_TYPE"] = "BALANCED";
+ } else {
+ $taskData["TAS_TYPE"] = "NORMAL";
+ $taskData["TAS_ASSIGN_TYPE"] = "BALANCED";
+ }
+ }
+
+ if ($activityBefore->getActTaskType() == "SERVICETASK" && $activityCurrent->getActTaskType() != "SERVICETASK") {
+ $taskData["TAS_TYPE"] = "NORMAL";
+ $taskData["TAS_ASSIGN_TYPE"] = "BALANCED";
+ if($activityCurrent->getActTaskType() == "SCRIPTTASK"){
+ $taskData["TAS_TYPE"] = "SCRIPT-TASK";
+ }
+ //The plugin pmConnectors will be moved to the core in pm.3.3
+ if ($registry->getStatusPlugin('pmConnectors') === 'enabled') {
+ $pathFile = PATH_PLUGINS . 'pmConnectors' . PATH_SEP . 'src' . PATH_SEP . 'Services' . PATH_SEP . 'BusinessModel' . PATH_SEP . 'PmConnectors' . PATH_SEP . 'ServiceTaskBM.php';
+ if (is_file($pathFile)) {
+ require_once $pathFile;
+ $serviceTask = new \Services\BusinessModel\PmConnectors\ServiceTaskBM();
+ $serviceTask->deleteByActivityUid($activityCurrent->getPrjUid(), $activityCurrent->getActUid());
+ }
+ }
+ }
+ return $taskData;
+ }
+
public function removeActivity($actUid)
{
$activity = \BpmnActivityPeer::retrieveByPK($actUid);
@@ -1530,7 +1601,6 @@ class BpmnWorkflow extends Project\Bpmn
$activityData = Util\ArrayUtil::boolToIntValues($activityData);
$activity = $bwp->getActivity($activityData["ACT_UID"]);
-
if ($forceInsert || is_null($activity)) {
if ($generateUid) {
//Generate and update UID
@@ -1552,7 +1622,7 @@ class BpmnWorkflow extends Project\Bpmn
} else {
Util\Logger::log("Update Activity ({$activityData["ACT_UID"]}) Skipped - No changes required");
}
-
+ $bwp->sincronizeActivityData($activityData["ACT_UID"], $activityData);
$diagram["activities"][$i] = $activityData;
$whiteList[] = $activityData["ACT_UID"];
diff --git a/workflow/engine/src/ProcessMaker/Project/Workflow.php b/workflow/engine/src/ProcessMaker/Project/Workflow.php
index 277dd329f..9c98e058d 100644
--- a/workflow/engine/src/ProcessMaker/Project/Workflow.php
+++ b/workflow/engine/src/ProcessMaker/Project/Workflow.php
@@ -230,6 +230,19 @@ class Workflow extends Handler
$this->removeSupProcess($this->proUid, $tasUid);
}
+ if ($tasType == "SERVICE-TASK") {
+ $registry = \PMPluginRegistry::getSingleton();
+ //The plugin pmConnectors will be moved to the core in pm.3.3
+ if ($registry->getStatusPlugin('pmConnectors') === 'enabled') {
+ $pathFile = PATH_PLUGINS . 'pmConnectors' . PATH_SEP . 'src' . PATH_SEP . 'Services' . PATH_SEP . 'BusinessModel' . PATH_SEP . 'PmConnectors' . PATH_SEP . 'ServiceTaskBM.php';
+ if (is_file($pathFile)) {
+ require_once $pathFile;
+ $serviceTask = new \Services\BusinessModel\PmConnectors\ServiceTaskBM();
+ $serviceTask->deleteByActivityUid($this->proUid, $tasUid);
+ }
+ }
+ }
+
} catch (\Exception $e) {
self::log("Exception: ", $e->getMessage(), "Trace: ", $e->getTraceAsString());
throw $e;
diff --git a/workflow/engine/templates/cases/cases_ScreenDerivation.html b/workflow/engine/templates/cases/cases_ScreenDerivation.html
index b4f5a96ff..d744e6ae4 100644
--- a/workflow/engine/templates/cases/cases_ScreenDerivation.html
+++ b/workflow/engine/templates/cases/cases_ScreenDerivation.html
@@ -98,6 +98,11 @@
|
{$data.NEXT_TASK.USR_UID}{$data.NEXT_TASK.USR_HIDDEN_FIELD} |
+ {elseif ($data.NEXT_TASK.TAS_TYPE == "SERVICE-TASK")}
+
+ |
+ {$data.NEXT_TASK.USR_UID}{$data.NEXT_TASK.USR_HIDDEN_FIELD} |
+
{elseif ($data.NEXT_TASK.TAS_TYPE == "INTERMEDIATE-CATCH-TIMER-EVENT")}
| {$NEXT_TASK_LABEL}: |
diff --git a/workflow/engine/templates/designer/index.html b/workflow/engine/templates/designer/index.html
index e20bf7763..a40df5785 100644
--- a/workflow/engine/templates/designer/index.html
+++ b/workflow/engine/templates/designer/index.html
@@ -71,6 +71,9 @@
+ {foreach from=$sourceCss item=pathFile}
+
+ {/foreach}
+ {foreach from=$sourceJs item=pathFile}
+
+ {/foreach}
{/if}