From 1f497cc6f62720e2d42e164f3a8aebd90ebba16d Mon Sep 17 00:00:00 2001 From: "Paula V. Quispe" Date: Wed, 4 Mar 2015 18:42:47 -0400 Subject: [PATCH 01/35] 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; + } } From 3785bbabfe3eaa8eed20901c276ef3f03fdf4bb4 Mon Sep 17 00:00:00 2001 From: Roly Rudy Gutierrez Pinto Date: Thu, 5 Mar 2015 18:14:04 -0400 Subject: [PATCH 02/35] IMPROVEMENT --- workflow/engine/classes/class.pmDynaform.php | 73 ++++++++++++-------- 1 file changed, 46 insertions(+), 27 deletions(-) diff --git a/workflow/engine/classes/class.pmDynaform.php b/workflow/engine/classes/class.pmDynaform.php index a6e6806be..04f9e1a26 100644 --- a/workflow/engine/classes/class.pmDynaform.php +++ b/workflow/engine/classes/class.pmDynaform.php @@ -11,7 +11,6 @@ class pmDynaform { public static $instance = null; - private $debugMode = false; public $dyn_uid = null; public $record = null; public $app_data = null; @@ -88,13 +87,30 @@ class pmDynaform } } //query & options - if ($key === "type" && ($value === "text" || $value === "textarea" || $value === "dropdown" || $value === "suggest" || $value === "checkbox" || $value === "radio")) { + if ($key === "type" && ($value === "text" || $value === "textarea" || $value === "dropdown" || $value === "suggest" || $value === "checkbox" || $value === "radio" || $value === "datetime")) { + if (!isset($json->data)) { + $json->data = array( + "value" => "", + "label" => "" + ); + } if (!isset($json->dbConnection)) $json->dbConnection = "none"; if (!isset($json->sql)) $json->sql = ""; if (!isset($json->options)) $json->options = array(); + else { + //convert stdClass to array + $option = array(); + foreach ($json->options as $valueOptions) { + array_push($option, array( + "value" => $valueOptions->value, + "label" => $valueOptions->label + )); + } + $json->options = $option; + } if ($json->dbConnection !== "none" && $json->sql !== "") { $cnn = Propel::getConnection($json->dbConnection); $stmt = $cnn->createStatement(); @@ -107,22 +123,40 @@ class pmDynaform ); array_push($json->options, $option); } - if (isset($json->options[0])) { - $json->data = $json->options[0]; - } + } + if (isset($json->options[0])) { + $json->data = $json->options[0]; } } //data - if ($key === "type" && ($value === "text" || $value === "textarea" || $value === "dropdown" || $value === "checkbox" || $value === "radio")) { + if ($key === "type" && ($value === "text" || $value === "textarea" || $value === "suggest" || $value === "dropdown" || $value === "checkbox" || $value === "radio" || $value === "datetime")) { $json->data = array( - "value" => isset($this->data[$json->name]) ? $this->data[$json->name] : "", - "label" => isset($this->data[$json->name . "_label"]) ? $this->data[$json->name . "_label"] : "" + "value" => isset($this->data[$json->name]) ? $this->data[$json->name] : $json->data["value"], + "label" => isset($this->data[$json->name . "_label"]) ? $this->data[$json->name . "_label"] : $json->data["label"] ); } - if ($key === "type" && ($value === "suggest")) { + if ($key === "type" && ($value === "checkbox")) { $json->data = array( - "value" => isset($this->data[$json->name . "_label"]) ? $this->data[$json->name . "_label"] : "", - "label" => isset($this->data[$json->name]) ? $this->data[$json->name] : "" + "value" => isset($this->data[$json->name]) ? $this->data[$json->name] : array(), + "label" => isset($this->data[$json->name . "_label"]) ? $this->data[$json->name . "_label"] : "[]" + ); + } + if ($key === "type" && ($value === "file")) { + $oCriteria = new Criteria("workflow"); + $oCriteria->addSelectColumn(AppDocumentPeer::APP_DOC_UID); + $oCriteria->addSelectColumn(AppDocumentPeer::DOC_VERSION); + $oCriteria->add(AppDocumentPeer::APP_UID, $this->app_data["APPLICATION"]); + $oCriteria->add(AppDocumentPeer::APP_DOC_FIELDNAME, $json->name); + $rs = AppDocumentPeer::doSelectRS($oCriteria); + $rs->setFetchmode(ResultSet::FETCHMODE_ASSOC); + $links = array(); + while ($rs->next()) { + $row = $rs->getRow(); + array_push($links, "../cases/cases_ShowDocument?a=" . $row["APP_DOC_UID"] . "&v=" . $row["DOC_VERSION"]); + } + $json->data = array( + "value" => $links, + "label" => isset($this->data[$json->name . "_label"]) ? $this->data[$json->name . "_label"] : "[]" ); } //grid @@ -135,7 +169,7 @@ class pmDynaform $cells = array(); foreach ($json->columns as $column) { //data - if ($column->type === "text" || $column->type === "textarea" || $column->type === "dropdown") { + if ($column->type === "text" || $column->type === "textarea" || $column->type === "dropdown" || $column->type === "datetime") { array_push($cells, array( "value" => isset($row[$column->name]) ? $row[$column->name] : "", "label" => isset($row[$column->name . "_label"]) ? $row[$column->name . "_label"] : "" @@ -217,14 +251,12 @@ class pmDynaform $file = file_get_contents(PATH_HOME . 'public_html/lib/pmdynaform/build/pmdynaform.html'); $file = str_replace("{javascript}", $javascrip, $file); - $this->debug(); echo $file; exit(); } public function printEdit($pm_run_outside_main_app, $application, $headData, $step_mode = 'EDIT') { - error_log(print_r($this->app_data, true)); ob_clean(); $json = G::json_decode($this->record["DYN_CONTENT"]); $this->jsonr($json); @@ -263,8 +295,6 @@ class pmDynaform $file = file_get_contents(PATH_HOME . 'public_html/lib/pmdynaform/build/pmdynaform.html'); $file = str_replace("{javascript}", $javascrip, $file); - - $this->debug(); echo $file; exit(); } @@ -300,7 +330,6 @@ class pmDynaform $file = file_get_contents(PATH_HOME . 'public_html/lib/pmdynaform/build/pmdynaform.html'); $file = str_replace("{javascript}", $javascrip, $file); - $this->debug(); echo $file; exit(); } @@ -317,7 +346,6 @@ class pmDynaform $file = file_get_contents(PATH_HOME . 'public_html/lib/pmdynaform/build/pmdynaform.html'); $file = str_replace("{javascript}", $javascrip, $file); - $this->debug(); echo $file; exit(); } @@ -389,13 +417,4 @@ class pmDynaform return array('dsn' => $dsn, 'username' => DB_USER, 'password' => DB_PASS); } - private function debug() - { - if ($this->debugMode) { - echo "
";
-            echo G::json_encode(array($this->app_data, $this->data));
-            echo "
"; - } - } - } From 276259381da03aa782328916b71a8ebf4a1a7804 Mon Sep 17 00:00:00 2001 From: Roly Rudy Gutierrez Pinto Date: Thu, 5 Mar 2015 18:17:47 -0400 Subject: [PATCH 03/35] IMPROVEMENT --- workflow/engine/classes/class.pmDynaform.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/workflow/engine/classes/class.pmDynaform.php b/workflow/engine/classes/class.pmDynaform.php index 04f9e1a26..64a56f04d 100644 --- a/workflow/engine/classes/class.pmDynaform.php +++ b/workflow/engine/classes/class.pmDynaform.php @@ -141,7 +141,7 @@ class pmDynaform "label" => isset($this->data[$json->name . "_label"]) ? $this->data[$json->name . "_label"] : "[]" ); } - if ($key === "type" && ($value === "file")) { + if ($key === "type" && ($value === "file") && isset($this->app_data["APPLICATION"])) { $oCriteria = new Criteria("workflow"); $oCriteria->addSelectColumn(AppDocumentPeer::APP_DOC_UID); $oCriteria->addSelectColumn(AppDocumentPeer::DOC_VERSION); From 3fb5ea87343ddb8a0187cc3f4516909b911eccab Mon Sep 17 00:00:00 2001 From: rodrigo quelca Date: Fri, 6 Mar 2015 08:56:16 -0400 Subject: [PATCH 04/35] remove designer layout --- workflow/engine/templates/designer/index.html | 33 +++++-------------- 1 file changed, 8 insertions(+), 25 deletions(-) diff --git a/workflow/engine/templates/designer/index.html b/workflow/engine/templates/designer/index.html index b5007983a..aff334230 100644 --- a/workflow/engine/templates/designer/index.html +++ b/workflow/engine/templates/designer/index.html @@ -78,49 +78,32 @@ {$stringBpmn} -
+ -
+ -
+
- -
-
-
-
-
-
-
-
-
- -
- -
+
- - -
-
@@ -130,8 +113,8 @@
    -
  • - +
  • +