From fce02e1ee956bec92b8b164a5cb40981ed44fb34 Mon Sep 17 00:00:00 2001 From: Victor Saisa Lopez Date: Tue, 1 Sep 2015 14:57:25 -0400 Subject: [PATCH] PM-3407 "0018218: Self-service value based not accepting USER ID" SOLVED Issue: 0018218: Self-service value based not accepting USER ID Cause: Nuevo requerimiento de funciones Solution: La asignacion de tipo "Self Service Value Based Assignment" ahora funciona de la siguiente manera: - Si se desea definir a un grupo entonces se tendra el siguiente caso: @@SYS_GROUP_TO_BE_ASSIGNED = "00000000000000000000000groupuid1"; - Si se desea definir a usuarios entonces se tendra el siguiente caso: @@SYS_GROUP_TO_BE_ASSIGNED = array("000000000000000000000000useruid1", "000000000000000000000000useruid2"); - Por lo que el engine reconocera lo siguiente: * A un array como un array de UIDs de usuarios * A un string como un UID de un grupo --- workflow/engine/classes/class.case.php | 20 +++++-- workflow/engine/classes/class.derivation.php | 23 +++++-- .../model/AppAssignSelfServiceValue.php | 9 ++- .../engine/classes/model/AppCacheView.php | 60 +++++++++++-------- .../AppAssignSelfServiceValueMapBuilder.php | 2 +- workflow/engine/config/schema.xml | 3 +- workflow/engine/data/mysql/schema.sql | 2 +- 7 files changed, 79 insertions(+), 40 deletions(-) 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 @@ - + + diff --git a/workflow/engine/data/mysql/schema.sql b/workflow/engine/data/mysql/schema.sql index 98590ec97..c9d2f9370 100755 --- a/workflow/engine/data/mysql/schema.sql +++ b/workflow/engine/data/mysql/schema.sql @@ -2217,7 +2217,7 @@ CREATE TABLE `APP_ASSIGN_SELF_SERVICE_VALUE` `DEL_INDEX` INTEGER default 0 NOT NULL, `PRO_UID` VARCHAR(32) NOT NULL, `TAS_UID` VARCHAR(32) NOT NULL, - `GRP_UID` VARCHAR(32) default '' NOT NULL + `GRP_UID` MEDIUMTEXT default '' NOT NULL )ENGINE=InnoDB DEFAULT CHARSET='utf8'; #----------------------------------------------------------------------------- #-- LIST_INBOX