diff --git a/workflow/engine/classes/class.case.php b/workflow/engine/classes/class.case.php
index ea0f040ef..9dca4e926 100755
--- a/workflow/engine/classes/class.case.php
+++ b/workflow/engine/classes/class.case.php
@@ -493,15 +493,27 @@ class Cases
}
if ($APP_UID != '') {
- $groupsInstance = new Groups();
- $groups = $groupsInstance->getActiveGroupsForAnUser($USR_UID);
$taskInstance = new Task();
+
$taskData = $taskInstance->Load($TAS_UID);
$tasGroupVariable = str_replace(array('@', '#'), '', $taskData['TAS_GROUP_VARIABLE']);
$caseData = $this->LoadCase($APP_UID);
+
if (isset($caseData['APP_DATA'][$tasGroupVariable])) {
- if (trim($caseData['APP_DATA'][$tasGroupVariable]) != '') {
- if (in_array(trim($caseData['APP_DATA'][$tasGroupVariable]), $groups)) {
+ $dataVariable = $caseData["APP_DATA"][$tasGroupVariable];
+
+ if (is_array($dataVariable)) {
+ //UIDs of Users
+ if (!empty($dataVariable) && in_array($USR_UID, $dataVariable)) {
+ return true;
+ }
+ } else {
+ //UID of Group
+ $dataVariable = trim($dataVariable);
+
+ $group = new Groups();
+
+ if (!empty($dataVariable) && in_array($dataVariable, $group->getActiveGroupsForAnUser($USR_UID))) {
return true;
}
}
diff --git a/workflow/engine/classes/class.derivation.php b/workflow/engine/classes/class.derivation.php
index e2b5f5d3d..2d0bc5a61 100755
--- a/workflow/engine/classes/class.derivation.php
+++ b/workflow/engine/classes/class.derivation.php
@@ -751,10 +751,15 @@ class Derivation
if ($taskNextDel->getTasAssignType() == "SELF_SERVICE" && trim($taskNextDel->getTasGroupVariable()) != "") {
$nextTaskGroupVariable = trim($taskNextDel->getTasGroupVariable(), " @#");
- if (isset($appFields["APP_DATA"][$nextTaskGroupVariable]) && trim($appFields["APP_DATA"][$nextTaskGroupVariable]) != "") {
- $appAssignSelfServiceValue = new AppAssignSelfServiceValue();
+ if (isset($appFields["APP_DATA"][$nextTaskGroupVariable])) {
+ $dataVariable = $appFields["APP_DATA"][$nextTaskGroupVariable];
+ $dataVariable = (is_array($dataVariable))? $dataVariable : trim($dataVariable);
- $appAssignSelfServiceValue->create($appFields["APP_UID"], $iNewDelIndex, array("PRO_UID" => $appFields["PRO_UID"], "TAS_UID" => $nextDel["TAS_UID"], "GRP_UID" => trim($appFields["APP_DATA"][$nextTaskGroupVariable])));
+ if (!empty($dataVariable)) {
+ $appAssignSelfServiceValue = new AppAssignSelfServiceValue();
+
+ $appAssignSelfServiceValue->create($appFields["APP_UID"], $iNewDelIndex, array("PRO_UID" => $appFields["PRO_UID"], "TAS_UID" => $nextDel["TAS_UID"], "GRP_UID" => serialize($dataVariable)));
+ }
}
}
}
@@ -1001,10 +1006,15 @@ class Derivation
if ($taskNextDel->getTasAssignType() == "SELF_SERVICE" && trim($taskNextDel->getTasGroupVariable()) != "") {
$nextTaskGroupVariable = trim($taskNextDel->getTasGroupVariable(), " @#");
- if (isset($aOldFields["APP_DATA"][$nextTaskGroupVariable]) && trim($aOldFields["APP_DATA"][$nextTaskGroupVariable]) != "") {
- $appAssignSelfServiceValue = new AppAssignSelfServiceValue();
+ if (isset($aOldFields["APP_DATA"][$nextTaskGroupVariable])) {
+ $dataVariable = $aOldFields["APP_DATA"][$nextTaskGroupVariable];
+ $dataVariable = (is_array($dataVariable))? $dataVariable : trim($dataVariable);
- $appAssignSelfServiceValue->create($aNewCase["APPLICATION"], $aNewCase["INDEX"], array("PRO_UID" => $aNewCase["PROCESS"], "TAS_UID" => $aSP["TAS_UID"], "GRP_UID" => trim($aOldFields["APP_DATA"][$nextTaskGroupVariable])));
+ if (!empty($dataVariable)) {
+ $appAssignSelfServiceValue = new AppAssignSelfServiceValue();
+
+ $appAssignSelfServiceValue->create($aNewCase["APPLICATION"], $aNewCase["INDEX"], array("PRO_UID" => $aNewCase["PROCESS"], "TAS_UID" => $aSP["TAS_UID"], "GRP_UID" => serialize($dataVariable)));
+ }
}
}
@@ -1255,3 +1265,4 @@ class Derivation
}
}
}
+
diff --git a/workflow/engine/classes/model/AppAssignSelfServiceValue.php b/workflow/engine/classes/model/AppAssignSelfServiceValue.php
index 02674c5b7..b0c8742f6 100644
--- a/workflow/engine/classes/model/AppAssignSelfServiceValue.php
+++ b/workflow/engine/classes/model/AppAssignSelfServiceValue.php
@@ -112,8 +112,13 @@ class AppAssignSelfServiceValue extends BaseAppAssignSelfServiceValue
$applicationData = $case->unserializeData($row["APP_DATA"]);
$taskGroupVariable = trim($row["TAS_GROUP_VARIABLE"], " @#");
- if ($taskGroupVariable != "" && isset($applicationData[$taskGroupVariable]) && trim($applicationData[$taskGroupVariable]) != "") {
- $this->create($row["APP_UID"], $row["DEL_INDEX"], array("PRO_UID" => $row["PRO_UID"], "TAS_UID" => $row["TAS_UID"], "GRP_UID" => trim($applicationData[$taskGroupVariable])));
+ if ($taskGroupVariable != "" && isset($applicationData[$taskGroupVariable])) {
+ $dataVariable = $applicationData[$taskGroupVariable];
+ $dataVariable = (is_array($dataVariable))? $dataVariable : trim($dataVariable);
+
+ if (!empty($dataVariable)) {
+ $this->create($row["APP_UID"], $row["DEL_INDEX"], array("PRO_UID" => $row["PRO_UID"], "TAS_UID" => $row["TAS_UID"], "GRP_UID" => serialize($dataVariable)));
+ }
}
}
} catch (Exception $e) {
diff --git a/workflow/engine/classes/model/AppCacheView.php b/workflow/engine/classes/model/AppCacheView.php
index 1c845ffcb..041aebb0a 100755
--- a/workflow/engine/classes/model/AppCacheView.php
+++ b/workflow/engine/classes/model/AppCacheView.php
@@ -338,40 +338,50 @@ class AppCacheView extends BaseAppCacheView
//Get APP_UIDs
$group = new Groups();
- $arrayGroup = $group->getActiveGroupsForAnUser($userUid); //Get Groups of User
+ $arrayUid = $group->getActiveGroupsForAnUser($userUid); //Set UIDs of Groups (Groups of User)
+ $arrayUid[] = $userUid; //Set UID of User
- if (count($arrayGroup) > 0) {
- $criteria = new Criteria("workflow");
+ $criteria = new Criteria("workflow");
- $criteria->setDistinct();
- $criteria->addSelectColumn(AppAssignSelfServiceValuePeer::APP_UID);
- $criteria->addSelectColumn(AppAssignSelfServiceValuePeer::DEL_INDEX);
- $criteria->addSelectColumn(AppAssignSelfServiceValuePeer::TAS_UID);
+ $criteria->setDistinct();
+ $criteria->addSelectColumn(AppAssignSelfServiceValuePeer::APP_UID);
+ $criteria->addSelectColumn(AppAssignSelfServiceValuePeer::DEL_INDEX);
+ $criteria->addSelectColumn(AppAssignSelfServiceValuePeer::TAS_UID);
- $arrayCondition = array();
- $arrayCondition[] = array(AppAssignSelfServiceValuePeer::APP_UID, AppDelegationPeer::APP_UID, Criteria::EQUAL);
- $arrayCondition[] = array(AppAssignSelfServiceValuePeer::DEL_INDEX, AppDelegationPeer::DEL_INDEX, Criteria::EQUAL);
- $arrayCondition[] = array(AppAssignSelfServiceValuePeer::TAS_UID, AppDelegationPeer::TAS_UID, Criteria::EQUAL);
- $criteria->addJoinMC($arrayCondition, Criteria::LEFT_JOIN);
+ $arrayCondition = array();
+ $arrayCondition[] = array(AppAssignSelfServiceValuePeer::APP_UID, AppDelegationPeer::APP_UID, Criteria::EQUAL);
+ $arrayCondition[] = array(AppAssignSelfServiceValuePeer::DEL_INDEX, AppDelegationPeer::DEL_INDEX, Criteria::EQUAL);
+ $arrayCondition[] = array(AppAssignSelfServiceValuePeer::TAS_UID, AppDelegationPeer::TAS_UID, Criteria::EQUAL);
+ $criteria->addJoinMC($arrayCondition, Criteria::LEFT_JOIN);
- $criteria->add(AppDelegationPeer::USR_UID, "", Criteria::EQUAL);
- $criteria->add(AppDelegationPeer::DEL_THREAD_STATUS, "OPEN", Criteria::EQUAL);
- $criteria->add(AppAssignSelfServiceValuePeer::GRP_UID, $arrayGroup, Criteria::IN);
+ $criteria->add(AppDelegationPeer::USR_UID, "", Criteria::EQUAL);
+ $criteria->add(AppDelegationPeer::DEL_THREAD_STATUS, "OPEN", Criteria::EQUAL);
- $rsCriteria = AppAssignSelfServiceValuePeer::doSelectRS($criteria);
- $rsCriteria->setFetchmode(ResultSet::FETCHMODE_ASSOC);
+ $criterionAux = null;
- while ($rsCriteria->next()) {
- $row = $rsCriteria->getRow();
-
- $arrayAppAssignSelfServiceValueData[] = array(
- "APP_UID" => $row["APP_UID"],
- "DEL_INDEX" => $row["DEL_INDEX"],
- "TAS_UID" => $row["TAS_UID"]
- );
+ foreach ($arrayUid as $value) {
+ if (is_null($criterionAux)) {
+ $criterionAux = $criteria->getNewCriterion(AppAssignSelfServiceValuePeer::GRP_UID, "%$value%", Criteria::LIKE);
+ } else {
+ $criterionAux = $criteria->getNewCriterion(AppAssignSelfServiceValuePeer::GRP_UID, "%$value%", Criteria::LIKE)->addOr($criterionAux);
}
}
+ $criteria->add($criterionAux);
+
+ $rsCriteria = AppAssignSelfServiceValuePeer::doSelectRS($criteria);
+ $rsCriteria->setFetchmode(ResultSet::FETCHMODE_ASSOC);
+
+ while ($rsCriteria->next()) {
+ $row = $rsCriteria->getRow();
+
+ $arrayAppAssignSelfServiceValueData[] = array(
+ "APP_UID" => $row["APP_UID"],
+ "DEL_INDEX" => $row["DEL_INDEX"],
+ "TAS_UID" => $row["TAS_UID"]
+ );
+ }
+
//Return
return $arrayAppAssignSelfServiceValueData;
} catch (Exception $e) {
diff --git a/workflow/engine/classes/model/map/AppAssignSelfServiceValueMapBuilder.php b/workflow/engine/classes/model/map/AppAssignSelfServiceValueMapBuilder.php
index bb892365b..fbb727c46 100644
--- a/workflow/engine/classes/model/map/AppAssignSelfServiceValueMapBuilder.php
+++ b/workflow/engine/classes/model/map/AppAssignSelfServiceValueMapBuilder.php
@@ -73,7 +73,7 @@ class AppAssignSelfServiceValueMapBuilder
$tMap->addColumn('TAS_UID', 'TasUid', 'string', CreoleTypes::VARCHAR, true, 32);
- $tMap->addColumn('GRP_UID', 'GrpUid', 'string', CreoleTypes::VARCHAR, true, 32);
+ $tMap->addColumn('GRP_UID', 'GrpUid', 'string', CreoleTypes::LONGVARCHAR, true, null);
} // doBuild()
diff --git a/workflow/engine/config/schema.xml b/workflow/engine/config/schema.xml
index a156bb0c6..9036d7673 100755
--- a/workflow/engine/config/schema.xml
+++ b/workflow/engine/config/schema.xml
@@ -3927,8 +3927,9 @@