From 1f497cc6f62720e2d42e164f3a8aebd90ebba16d Mon Sep 17 00:00:00 2001 From: "Paula V. Quispe" Date: Wed, 4 Mar 2015 18:42:47 -0400 Subject: [PATCH] I solved the issue PM-1649 ./processmaker migrate-new-cases-lists --- workflow/engine/bin/tasks/cliWorkspaces.php | 56 +++++- workflow/engine/classes/class.wsTools.php | 172 ++++++++++++++++++ .../engine/classes/model/AppCacheView.php | 40 ++++ workflow/engine/classes/model/GroupUser.php | 28 +++ .../engine/classes/model/ListCompleted.php | 1 + workflow/engine/classes/model/ListInbox.php | 2 + workflow/engine/classes/model/ListPaused.php | 2 + .../engine/classes/model/ListUnassigned.php | 75 +++++++- .../classes/model/ListUnassignedGroup.php | 90 +++++++++ workflow/engine/classes/model/TaskUser.php | 41 +++++ 10 files changed, 500 insertions(+), 7 deletions(-) diff --git a/workflow/engine/bin/tasks/cliWorkspaces.php b/workflow/engine/bin/tasks/cliWorkspaces.php index 517f8f68f..77bc71c49 100755 --- a/workflow/engine/bin/tasks/cliWorkspaces.php +++ b/workflow/engine/bin/tasks/cliWorkspaces.php @@ -1,4 +1,4 @@ -getMessage()) . "\n"; } } -/*----------------------------------********---------------------------------*/ + +function migrate_new_cases_lists($command, $args) { + $workspaces = get_workspaces_from_args($args); + $checkOnly = (strcmp($command, "migrate") == 0); + foreach ($workspaces as $workspace) { + if ($checkOnly){ + print_r("Checking database in ".pakeColor::colorize($workspace->name, "INFO")."\n"); + } else { + print_r("Upgrading database in ".pakeColor::colorize($workspace->name, "INFO")."\n"); + } + try { + $ws = $workspace->name; + $sContent = file_get_contents (PATH_DB . $ws . PATH_SEP . 'db.php'); + if (strpos($sContent, 'rb_')) { + $workspace->onedb = false; + } else { + $workspace->onedb = true; + } + //check if is the tables List are empty + $changes = $workspace->listFirstExecution('check'); + if ($workspace->onedb && $changes != true) { + $workspace->migrateList($workspace->name); + } + if ($changes) { + if ($checkOnly) { + echo "-> Schema fixed\n"; + } + } else { + echo "> List tables are done\n"; + } + } catch (Exception $e) { + echo "> Error: ".CLI::error($e->getMessage()) . "\n"; + } + } +} +/*----------------------------------********---------------------------------*/ \ No newline at end of file diff --git a/workflow/engine/classes/class.wsTools.php b/workflow/engine/classes/class.wsTools.php index 8b715140c..0ec8989be 100755 --- a/workflow/engine/classes/class.wsTools.php +++ b/workflow/engine/classes/class.wsTools.php @@ -1842,5 +1842,177 @@ class workspaceTools throw $e; } } + /** + * Migrate all cases to New list + * + * return all LIST TABLES with data + */ + public function migrateList ($workSpace){ + $this->initPropel(true); + $appCache = new AppCacheView(); + G::LoadClass("case"); + $case = new Cases(); + + //Select data CANCELLED + $canCriteria = $appCache->getSelAllColumns(); + $canCriteria->add(AppCacheViewPeer::APP_STATUS, "CANCELLED", CRITERIA::EQUAL); + $canCriteria->add(AppCacheViewPeer::DEL_LAST_INDEX, "1", CRITERIA::EQUAL); + $rsCriteria = AppCacheViewPeer::doSelectRS($canCriteria); + $rsCriteria->setFetchmode(ResultSet::FETCHMODE_ASSOC); + //Insert data LIST_CANCELED + while ($rsCriteria->next()) { + $row = $rsCriteria->getRow(); + $listCanceled = new ListCanceled(); + $listCanceled->remove($row["APP_UID"]); + $listCanceled->setDeleted(false); + $listCanceled->create($row); + } + CLI::logging("> Completed table LIST_CANCELED\n"); + + //Select data COMPLETED + $comCriteria = $appCache->getSelAllColumns(); + $comCriteria->add(AppCacheViewPeer::APP_STATUS, "COMPLETED", CRITERIA::EQUAL); + $comCriteria->add(AppCacheViewPeer::DEL_LAST_INDEX, "1", CRITERIA::EQUAL); + $rsCriteria = AppCacheViewPeer::doSelectRS($comCriteria); + $rsCriteria->setFetchmode(ResultSet::FETCHMODE_ASSOC); + //Insert new data LIST_COMPLETED + while ($rsCriteria->next()) { + $row = $rsCriteria->getRow(); + $listCompleted = new ListCompleted(); + $listCompleted->remove($row["APP_UID"]); + $listCompleted->setDeleted(false); + $listCompleted->create($row); + } + CLI::logging("> Completed table LIST_COMPLETED\n"); + + //Select data TO_DO OR DRAFT + $inbCriteria = $appCache->getSelAllColumns(); + //$inbCriteria->add(AppCacheViewPeer::DEL_THREAD_STATUS, "OPEN", CRITERIA::EQUAL); + $inbCriteria->add(AppCacheViewPeer::APP_STATUS, "CANCELLED", CRITERIA::NOT_EQUAL); + $inbCriteria->add(AppCacheViewPeer::APP_STATUS, "COMPLETED", CRITERIA::NOT_EQUAL); + $rsCriteria = AppCacheViewPeer::doSelectRS($inbCriteria); + $rsCriteria->setFetchmode(ResultSet::FETCHMODE_ASSOC); + //Insert new data LIST_INBOX + while ($rsCriteria->next()) { + $row = $rsCriteria->getRow(); + if($row["DEL_THREAD_STATUS"] == 'OPEN'){ + $listInbox = new ListInbox(); + $listInbox->remove($row["APP_UID"],$row["DEL_INDEX"]); + $listInbox->setDeleted(false); + $listInbox->create($row); + } else { + // create participated List when the thread is CLOSED + $listParticipatedHistory = new ListParticipatedHistory(); + $listParticipatedHistory->remove($row['APP_UID'],$row['DEL_INDEX']); + $listParticipatedHistory = new ListParticipatedHistory(); + $listParticipatedHistory->create($row); + $listParticipatedLast = new ListParticipatedLast(); + $listParticipatedLast->remove($row['APP_UID'], $row['USR_UID'],$row['DEL_INDEX']); + $listParticipatedLast = new ListParticipatedLast(); + $listParticipatedLast->create($row); + $listParticipatedLast = new ListParticipatedLast(); + $listParticipatedLast->refresh($row); + } + + } + CLI::logging("> Completed table LIST_INBOX\n"); + //With this List is populated the LIST_PARTICIPATED_HISTORY and LIST_PARTICIPATED_LAST + CLI::logging("> Completed table LIST_PARTICIPATED_HISTORY\n"); + CLI::logging("> Completed table LIST_PARTICIPATED_LAST\n"); + + //Select data TO_DO OR DRAFT CASES CREATED BY AN USER + $myiCriteria = $appCache->getSelAllColumns(); + $myiCriteria->add(AppCacheViewPeer::DEL_INDEX, "1", CRITERIA::EQUAL); + $rsCriteria = AppCacheViewPeer::doSelectRS($myiCriteria); + $rsCriteria->setFetchmode(ResultSet::FETCHMODE_ASSOC); + //Insert new data LIST_MY_INBOX + while ($rsCriteria->next()) { + $row = $rsCriteria->getRow(); + $listMyInbox = new ListMyInbox(); + $listMyInbox ->remove($row["APP_UID"],$row["USR_UID"]); + $listMyInbox->setDeleted(false); + $listMyInbox->create($row); + } + CLI::logging("> Completed table LIST_MY_INBOX\n"); + + //Select data PAUSED + $delaycriteria = new Criteria("workflow"); + $delaycriteria->addSelectColumn(AppDelayPeer::APP_UID); + $delaycriteria->addSelectColumn(AppDelayPeer::PRO_UID); + $delaycriteria->addSelectColumn(AppDelayPeer::APP_DEL_INDEX); + $delaycriteria->addSelectColumn(AppCacheViewPeer::APP_NUMBER); + $delaycriteria->addJoin( AppCacheViewPeer::APP_UID, AppDelayPeer::APP_UID, Criteria::INNER_JOIN ); + $rsCriteria = AppDelayPeer::doSelectRS($delaycriteria); + $rsCriteria->setFetchmode(ResultSet::FETCHMODE_ASSOC); + //Insert new data LIST_PAUSED + while ($rsCriteria->next()) { + $row = $rsCriteria->getRow(); + $data = $row; + $data["DEL_INDEX"] = $row["APP_DEL_INDEX"]; + $listPaused = new ListPaused(); + $listPaused->remove($data["APP_UID"],$data["DEL_INDEX"]); + $listPaused->setDeleted(false); + $listPaused->create($data); + } + CLI::logging("> Completed table LIST_PAUSED\n"); + + //Select and Insert LIST_UNASSIGNED + $unaCriteria = $appCache->getSelAllColumns(); + $unaCriteria->add(AppCacheViewPeer::USR_UID, "", CRITERIA::EQUAL); + $rsCriteria = AppCacheViewPeer::doSelectRS($unaCriteria); + $rsCriteria->setFetchmode(ResultSet::FETCHMODE_ASSOC); + $del = new ListUnassignedPeer(); + $del->doDeleteAll(); + $del = new ListUnassignedGroupPeer(); + $del->doDeleteAll(); + while ($rsCriteria->next()) { + $row = $rsCriteria->getRow(); + $listUnassigned = new ListUnassigned(); + $unaUid = $listUnassigned->generateData($row["APP_UID"],$row["PREVIOUS_USR_UID"]); + } + CLI::logging("> Completed table LIST_UNASSIGNED\n"); + CLI::logging("> Completed table LIST_UNASSIGNED_GROUP\n"); + $this->listFirstExecution('insert'); + return true; + } + /** + * This function checks if List tables are going to migrated + * + * return boolean value + */ + public function listFirstExecution ($action){ + $this->initPropel(true); + switch ($action) { + case 'insert': + $conf = new Configuration(); + $data["CFG_UID"] ='MIGRATED_LIST'; + $data["OBJ_UID"] ='list'; + $data["CFG_VALUE"]='true'; + $data["PRO_UID"] ='list'; + $data["USR_UID"] ='list'; + $data["APP_UID"] ='list'; + $conf->create($data); + return true; + break; + case 'check': + $criteria = new Criteria("workflow"); + $criteria->addSelectColumn(ConfigurationPeer::CFG_UID); + $criteria->add(ConfigurationPeer::CFG_UID, "MIGRATED_LIST", CRITERIA::EQUAL); + $rsCriteria = AppCacheViewPeer::doSelectRS($criteria); + $rsCriteria->setFetchmode(ResultSet::FETCHMODE_ASSOC); + $aRows = array (); + while ($rsCriteria->next()) { + $aRows[] = $rsCriteria->getRow(); + } + if(empty($aRows)){ + return false; //If is false continue with the migrated + } else { + return true; //Stop + } + break; + default: + return true; + } + } } diff --git a/workflow/engine/classes/model/AppCacheView.php b/workflow/engine/classes/model/AppCacheView.php index b0a9441f5..71e0be44d 100755 --- a/workflow/engine/classes/model/AppCacheView.php +++ b/workflow/engine/classes/model/AppCacheView.php @@ -1752,5 +1752,45 @@ class AppCacheView extends BaseAppCacheView } } } + /** + * Get all columns by APP_CACHE_VIEW + * + * @return object criteria + */ + public function getSelAllColumns(){ + $criteria = new Criteria("workflow"); + $criteria->addSelectColumn(AppCacheViewPeer::APP_UID); + $criteria->addSelectColumn(AppCacheViewPeer::DEL_INDEX); + $criteria->addSelectColumn(AppCacheViewPeer::DEL_LAST_INDEX); + $criteria->addSelectColumn(AppCacheViewPeer::APP_NUMBER); + $criteria->addSelectColumn(AppCacheViewPeer::APP_STATUS); + $criteria->addSelectColumn(AppCacheViewPeer::USR_UID); + $criteria->addSelectColumn(AppCacheViewPeer::PREVIOUS_USR_UID); + $criteria->addSelectColumn(AppCacheViewPeer::TAS_UID); + $criteria->addSelectColumn(AppCacheViewPeer::PRO_UID); + $criteria->addSelectColumn(AppCacheViewPeer::DEL_DELEGATE_DATE); + $criteria->addSelectColumn(AppCacheViewPeer::DEL_INIT_DATE); + $criteria->addSelectColumn(AppCacheViewPeer::DEL_TASK_DUE_DATE); + $criteria->addSelectColumn(AppCacheViewPeer::DEL_FINISH_DATE); + $criteria->addSelectColumn(AppCacheViewPeer::DEL_THREAD_STATUS); + $criteria->addSelectColumn(AppCacheViewPeer::APP_THREAD_STATUS); + $criteria->addSelectColumn(AppCacheViewPeer::APP_TITLE); + $criteria->addSelectColumn(AppCacheViewPeer::APP_PRO_TITLE); + $criteria->addSelectColumn(AppCacheViewPeer::APP_TAS_TITLE); + $criteria->addSelectColumn(AppCacheViewPeer::APP_CURRENT_USER); + $criteria->addSelectColumn(AppCacheViewPeer::APP_DEL_PREVIOUS_USER); + $criteria->addSelectColumn(AppCacheViewPeer::DEL_PRIORITY); + $criteria->addSelectColumn(AppCacheViewPeer::DEL_DURATION); + $criteria->addSelectColumn(AppCacheViewPeer::DEL_QUEUE_DURATION); + $criteria->addSelectColumn(AppCacheViewPeer::DEL_DELAY_DURATION); + $criteria->addSelectColumn(AppCacheViewPeer::DEL_STARTED); + $criteria->addSelectColumn(AppCacheViewPeer::DEL_FINISHED); + $criteria->addSelectColumn(AppCacheViewPeer::DEL_DELAYED); + $criteria->addSelectColumn(AppCacheViewPeer::APP_CREATE_DATE); + $criteria->addSelectColumn(AppCacheViewPeer::APP_FINISH_DATE); + $criteria->addSelectColumn(AppCacheViewPeer::APP_UPDATE_DATE); + $criteria->addSelectColumn(AppCacheViewPeer::APP_OVERDUE_PERCENTAGE); + return $criteria; + } } diff --git a/workflow/engine/classes/model/GroupUser.php b/workflow/engine/classes/model/GroupUser.php index 5bf2e6980..0316637b8 100755 --- a/workflow/engine/classes/model/GroupUser.php +++ b/workflow/engine/classes/model/GroupUser.php @@ -149,6 +149,34 @@ class GroupUser extends BaseGroupUser } } + return $rows; + } + /** + * Get all users assigned to Group + * + * @param string $gprUid + * @return array $rows + */ + public function getAllGroupUser ($gprUid) + { + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->add( GroupUserPeer::GRP_UID, $gprUid ); + $oDataset = GroupUserPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + + $rows = Array (); + while ($oDataset->next()) { + $row = $oDataset->getRow(); + $g = new Groupwf(); + try { + $grpRow = $g->load( $row['GRP_UID'] ); + $row = array_merge( $row, $grpRow ); + $rows[] = $row; + } catch (Exception $e) { + continue; + } + } + return $rows; } } diff --git a/workflow/engine/classes/model/ListCompleted.php b/workflow/engine/classes/model/ListCompleted.php index 2b9a38d21..47dcd53f4 100644 --- a/workflow/engine/classes/model/ListCompleted.php +++ b/workflow/engine/classes/model/ListCompleted.php @@ -73,6 +73,7 @@ class ListCompleted extends BaseListCompleted $data['DEL_CURRENT_USR_USERNAME'] = $aRow['USR_USERNAME']; $data['DEL_CURRENT_USR_FIRSTNAME'] = $aRow['USR_FIRSTNAME']; $data['DEL_CURRENT_USR_LASTNAME'] = $aRow['USR_LASTNAME']; + $data['DEL_PREVIOUS'] = isset($data['DEL_PREVIOUS']) ? $data['DEL_PREVIOUS'] : ""; if ($data['DEL_PREVIOUS'] != 0) { $criteria = new Criteria(); diff --git a/workflow/engine/classes/model/ListInbox.php b/workflow/engine/classes/model/ListInbox.php index 403c9a7f6..065fe8b50 100644 --- a/workflow/engine/classes/model/ListInbox.php +++ b/workflow/engine/classes/model/ListInbox.php @@ -39,6 +39,8 @@ class ListInbox extends BaseListInbox // create participated history $listParticipatedHistory = new ListParticipatedHistory(); + $listParticipatedHistory->remove($data['APP_UID'],$data['DEL_INDEX']); + $listParticipatedHistory = new ListParticipatedHistory(); $listParticipatedHistory->create($data); // create participated history diff --git a/workflow/engine/classes/model/ListPaused.php b/workflow/engine/classes/model/ListPaused.php index a88e85f54..b9539d64a 100644 --- a/workflow/engine/classes/model/ListPaused.php +++ b/workflow/engine/classes/model/ListPaused.php @@ -47,6 +47,7 @@ class ListPaused extends BaseListPaused { $data['APP_PRO_TITLE'] = $aRow['CON_VALUE']; $criteria = new Criteria(); + $criteria->addSelectColumn(AppDelegationPeer::USR_UID); $criteria->addSelectColumn(AppDelegationPeer::TAS_UID); $criteria->addSelectColumn(AppDelegationPeer::DEL_INIT_DATE); $criteria->addSelectColumn(AppDelegationPeer::DEL_DELEGATE_DATE); @@ -58,6 +59,7 @@ class ListPaused extends BaseListPaused { $dataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); $dataset->next(); $aRow = $dataset->getRow(); + $data['USR_UID'] = isset($data['USR_UID']) ? $data['USR_UID'] : $aRow['USR_UID']; $data['TAS_UID'] = $aRow['TAS_UID']; $data['DEL_INIT_DATE'] = $aRow['DEL_INIT_DATE']; $data['DEL_DUE_DATE'] = $aRow['DEL_TASK_DUE_DATE']; diff --git a/workflow/engine/classes/model/ListUnassigned.php b/workflow/engine/classes/model/ListUnassigned.php index 588a032d2..f091480fc 100644 --- a/workflow/engine/classes/model/ListUnassigned.php +++ b/workflow/engine/classes/model/ListUnassigned.php @@ -17,7 +17,7 @@ require_once 'classes/model/om/BaseListUnassigned.php'; class ListUnassigned extends BaseListUnassigned { /** - * Create List Inbox Table + * Create List Unassigned Table * * @param type $data * @return type @@ -44,7 +44,7 @@ class ListUnassigned extends BaseListUnassigned } /** - * Update List Inbox Table + * Update List Unassigned Table * * @param type $data * @return type @@ -72,19 +72,18 @@ class ListUnassigned extends BaseListUnassigned } /** - * Remove List Inbox + * Remove List Unassigned * * @param type $seqName * @return type * @throws type * */ - public function remove ($app_uid, $del_index) + public function remove ($app_uid) { $con = Propel::getConnection( ListUnassignedPeer::DATABASE_NAME ); try { $this->setAppUid($app_uid); - $this->setDelIndex($del_index); $con->begin(); $this->delete(); @@ -96,6 +95,7 @@ class ListUnassigned extends BaseListUnassigned } public function newRow ($data, $delPreviusUsrUid) { + $data['UNA_UID'] = (isset($data['UNA_UID'])) ? $data['UNA_UID']: G::GenerateUniqueId() ; $data['DEL_PREVIOUS_USR_UID'] = $delPreviusUsrUid; $data['DEL_DUE_DATE'] = $data['DEL_TASK_DUE_DATE']; @@ -163,6 +163,7 @@ class ListUnassigned extends BaseListUnassigned } self::create($data); + return $data['UNA_UID']; } public function loadFilters (&$criteria, $filters) @@ -315,5 +316,69 @@ class ListUnassigned extends BaseListUnassigned } return $resp; } + /** + * Generate Data + * + * @return object criteria + */ + public function generateData($appUid,$delPreviusUsrUid){ + try { + G::LoadClass("case"); + + //Generate data + $case = new Cases(); + + $criteria = new Criteria("workflow"); + + $criteria->addSelectColumn(AppDelegationPeer::APP_UID); + $criteria->addSelectColumn(AppDelegationPeer::DEL_INDEX); + $criteria->addSelectColumn(ApplicationPeer::APP_DATA); + $criteria->addSelectColumn(AppDelegationPeer::PRO_UID); + $criteria->addSelectColumn(AppDelegationPeer::DEL_TASK_DUE_DATE); + $criteria->addSelectColumn(TaskPeer::TAS_UID); + $criteria->addSelectColumn(TaskPeer::TAS_GROUP_VARIABLE); + $criteria->addJoin(AppDelegationPeer::APP_UID, ApplicationPeer::APP_UID, Criteria::LEFT_JOIN); + $criteria->addJoin(AppDelegationPeer::TAS_UID, TaskPeer::TAS_UID, Criteria::LEFT_JOIN); + $criteria->add(TaskPeer::TAS_ASSIGN_TYPE, "SELF_SERVICE", Criteria::EQUAL); + //$criteria->add(TaskPeer::TAS_GROUP_VARIABLE, "", Criteria::NOT_EQUAL); + $criteria->add(AppDelegationPeer::USR_UID, "", Criteria::EQUAL); + $criteria->add(AppDelegationPeer::DEL_THREAD_STATUS, "OPEN", Criteria::EQUAL); + $criteria->add(AppDelegationPeer::APP_UID, $appUid, Criteria::EQUAL); + + $rsCriteria = AppDelegationPeer::doSelectRS($criteria); + $rsCriteria->setFetchmode(ResultSet::FETCHMODE_ASSOC); + while ($rsCriteria->next()) { + $row = $rsCriteria->getRow(); + + $applicationData = $case->unserializeData($row["APP_DATA"]); + $taskGroupVariable = trim($row["TAS_GROUP_VARIABLE"], " @#"); + $delPreviusUsrUid = ''; + $unaUid = $this->newRow($row,$delPreviusUsrUid); + //Selfservice by group + if ($taskGroupVariable != "" && isset($applicationData[$taskGroupVariable]) && trim($applicationData[$taskGroupVariable]) != "") { + $gprUid = trim($applicationData[$taskGroupVariable]); + //Define Users by Group + $gpr = new GroupUser(); + $arrayUsers = $gpr->getAllGroupUser($gprUid); + foreach($arrayUsers as $urow){ + $newRow["USR_UID"] = $urow["USR_UID"]; + $listUnassignedGpr = new ListUnassignedGroup(); + $listUnassignedGpr->newRow($unaUid,$urow["USR_UID"],"GROUP",$gprUid); + } + } else { + //Define all users assigned to Task + $task = new TaskUser(); + $arrayUsers = $task->getAllUsersTask($row["TAS_UID"]); + foreach($arrayUsers as $urow){ + $newRow["USR_UID"] = $urow["USR_UID"]; + $listUnassignedGpr = new ListUnassignedGroup(); + $listUnassignedGpr->newRow($unaUid,$urow["USR_UID"],"USER",""); + } + } + } + } catch (Exception $e) { + throw $e; + } + } } diff --git a/workflow/engine/classes/model/ListUnassignedGroup.php b/workflow/engine/classes/model/ListUnassignedGroup.php index c735ae4f4..9d7538fd2 100644 --- a/workflow/engine/classes/model/ListUnassignedGroup.php +++ b/workflow/engine/classes/model/ListUnassignedGroup.php @@ -15,5 +15,95 @@ require_once 'classes/model/om/BaseListUnassignedGroup.php'; * @package classes.model */ class ListUnassignedGroup extends BaseListUnassignedGroup { + /** + * Create List Unassigned Group Table + * + * @param type $data + * @return type + * + */ + public function create($data) + { + $con = Propel::getConnection( ListUnassignedGroupPeer::DATABASE_NAME ); + try { + $this->fromArray( $data, BasePeer::TYPE_FIELDNAME ); + if ($this->validate()) { + $result = $this->save(); + } else { + $e = new Exception( "Failed Validation in class " . get_class( $this ) . "." ); + $e->aValidationFailures = $this->getValidationFailures(); + throw ($e); + } + $con->commit(); + return $result; + } catch(Exception $e) { + $con->rollback(); + throw ($e); + } + } + /** + * Update List Unassigned Group Table + * + * @param type $data + * @return type + * @throws type + */ + public function update($data) + { + $con = Propel::getConnection( ListUnassignedGroupPeer::DATABASE_NAME ); + try { + $con->begin(); + $this->setNew( false ); + $this->fromArray( $data, BasePeer::TYPE_FIELDNAME ); + if ($this->validate()) { + $result = $this->save(); + $con->commit(); + return $result; + } else { + $con->rollback(); + throw (new Exception( "Failed Validation in class " . get_class( $this ) . "." )); + } + } catch (Exception $e) { + $con->rollback(); + throw ($e); + } + } + /** + * Remove List Unassigned Group + * + * @param type $seqName + * @return type + * @throws type + * + */ + public function remove ($app_uid,$una_uid) + { + $con = Propel::getConnection( ListUnassignedGroupPeer::DATABASE_NAME ); + try { + $this->setAppUid($app_uid); + $this->setUnaUid($una_uid); + $con->begin(); + $this->delete(); + $con->commit(); + } catch (Exception $e) { + $con->rollback(); + throw ($e); + } + } + /** + * newRow List Unassigned Group + * + * @param type $seqName + * @return type + * @throws type + * + */ + public function newRow($unaUid, $usrUid, $type, $typeUid=''){ + $data['UNA_UID'] = $unaUid; + $data['USR_UID'] = $usrUid; + $data['TYPE'] = $type; + $data['TYP_UID'] = $typeUid; + self::create($data); + } } // ListUnassignedGroup diff --git a/workflow/engine/classes/model/TaskUser.php b/workflow/engine/classes/model/TaskUser.php index 5545b6703..f6fd80923 100755 --- a/workflow/engine/classes/model/TaskUser.php +++ b/workflow/engine/classes/model/TaskUser.php @@ -194,5 +194,46 @@ class TaskUser extends BaseTaskUser return $result; } + /** + * Get All users assigned to task + * + * @param string $TAS_UID + * @return array users info + * + */ + public function getAllUsersTask ($TAS_UID) + { + require_once 'classes/model/Users.php'; + + $groupsTask = array (); + $usersTask = array (); + + //getting task's users + $criteria = new Criteria( 'workflow' ); + $criteria->addSelectColumn( UsersPeer::USR_FIRSTNAME ); + $criteria->addSelectColumn( UsersPeer::USR_LASTNAME ); + $criteria->addSelectColumn( UsersPeer::USR_USERNAME ); + $criteria->addSelectColumn( TaskUserPeer::TAS_UID ); + $criteria->addSelectColumn( TaskUserPeer::USR_UID ); + $criteria->addSelectColumn( TaskUserPeer::TU_TYPE ); + $criteria->addSelectColumn( TaskUserPeer::TU_RELATION ); + $criteria->addJoin( TaskUserPeer::USR_UID, UsersPeer::USR_UID, Criteria::LEFT_JOIN ); + $criteria->add( TaskUserPeer::TAS_UID, $TAS_UID ); + $dataset = TaskUserPeer::doSelectRS( $criteria ); + $dataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + while ($dataset->next()) { + $row = $dataset->getRow(); + if($row["TU_RELATION"] == 2){ + $gpr = new GroupUser(); + $array = $gpr->getAllGroupUser($row["USR_UID"]); + foreach($array as $urow){ + $usersTask[] = $urow; + } + }else{ + $usersTask[] = $row; + } + } + return $usersTask; + } }