I solved the issue PM-1649 ./processmaker migrate-new-cases-lists

This commit is contained in:
Paula V. Quispe
2015-03-04 18:42:47 -04:00
parent f4a65aa184
commit 1f497cc6f6
10 changed files with 500 additions and 7 deletions

View File

@@ -1,4 +1,4 @@
<?php
<?php
/**
* cliWorkspaces.php
*
@@ -199,6 +199,19 @@ EOT
);
CLI::taskArg("workspace-name", true, true);
CLI::taskRun("run_check_workspace_disabled_code");
CLI::taskName('migrate-new-cases-lists');
CLI::taskDescription(<<<EOT
Migrating the list cases schema to match the latest version
  Specify the WORKSPACE to migrate from a existing workspace.
If no workspace is specified, then the tables schema will be upgraded or
migrate on all available workspaces.
EOT
);
CLI::taskArg('workspace', true, true);
CLI::taskRun("run_migrate_new_cases_lists");
/*----------------------------------********---------------------------------*/
/**
@@ -286,6 +299,10 @@ function run_database_check($args, $opts) {
database_upgrade("check", $args);
}
function run_migrate_new_cases_lists($args, $opts) {
migrate_new_cases_lists("migrate", $args);
}
function database_upgrade($command, $args) {
$workspaces = get_workspaces_from_args($args);
$checkOnly = (strcmp($command, "check") == 0);
@@ -642,4 +659,39 @@ function run_check_workspace_disabled_code($args, $opts)
echo CLI::error($e->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";
}
}
}
/*----------------------------------********---------------------------------*/

View File

@@ -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;
}
}
}

View File

@@ -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;
}
}

View File

@@ -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;
}
}

View File

@@ -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();

View File

@@ -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

View File

@@ -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'];

View File

@@ -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;
}
}
}

View File

@@ -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

View File

@@ -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;
}
}