From c372740a37b226213c833c9c91e373141ead4d09 Mon Sep 17 00:00:00 2001 From: Luis Fernando Saisa Lopez Date: Mon, 8 Jul 2013 16:27:14 +0000 Subject: [PATCH 1/3] BUG 12253 "Cuando se borra un caso por PM, este caso no..." SOLVED - Cuando se borra un caso por PM, este caso no se borra en los PM Reportes. - Problema resuelto, cuando se ejecuta un proceso que tenga Report Tables, al borrar el caso tambien se eliminara los registros de los Report Tables. * Available from version ProcessMaker-2.5.2-testing.1 --- workflow/engine/classes/class.pmTable.php | 53 ++++++ .../engine/controllers/adhocUserProxy.php | 152 +++++++++--------- .../engine/methods/cases/cases_Delete.php | 5 + 3 files changed, 136 insertions(+), 74 deletions(-) diff --git a/workflow/engine/classes/class.pmTable.php b/workflow/engine/classes/class.pmTable.php index 5a9f950ad..eb893d19f 100755 --- a/workflow/engine/classes/class.pmTable.php +++ b/workflow/engine/classes/class.pmTable.php @@ -864,5 +864,58 @@ class PmTable $m->execute( $args ); $m->runBuild(); } + + public function reportTableDeleteRecord($applicationUid) + { + $criteria1 = new Criteria("workflow"); + + //SELECT + $criteria1->addSelectColumn(ApplicationPeer::PRO_UID); + + //FROM + + //WHERE + $criteria1->add(ApplicationPeer::APP_UID, $applicationUid); + + //QUERY + $rsCriteria1 = ApplicationPeer::doSelectRS($criteria1); + $rsCriteria1->setFetchmode(ResultSet::FETCHMODE_ASSOC); + + while ($rsCriteria1->next()) { + $row1 = $rsCriteria1->getRow(); + $processUid = $row1["PRO_UID"]; + + $criteria2 = new Criteria("workflow"); + + //SELECT + $criteria2->addSelectColumn(AdditionalTablesPeer::ADD_TAB_NAME); + + //FROM + + //WHERE + $criteria2->add(AdditionalTablesPeer::PRO_UID, $processUid); + + //QUERY + $rsCriteria2 = AdditionalTablesPeer::doSelectRS($criteria2); + $rsCriteria2->setFetchmode(ResultSet::FETCHMODE_ASSOC); + + while ($rsCriteria2->next()) { + $row2 = $rsCriteria2->getRow(); + $tableName = $row2["ADD_TAB_NAME"]; + + $tableName = str_replace("_", " ", $tableName); + $tableName = str_replace(" ", "", ucwords(strtolower($tableName))); + + //DELETE + require_once (PATH_WORKSPACE . "classes" . PATH_SEP . "$tableName.php"); + + $criteria3 = new Criteria("workflow"); + + eval("\$criteria3->add(" . $tableName . "Peer::APP_UID, \$applicationUid);"); + eval($tableName . "Peer::doDelete(\$criteria3);"); + } + + } + } } diff --git a/workflow/engine/controllers/adhocUserProxy.php b/workflow/engine/controllers/adhocUserProxy.php index 75af2e669..3ca3c4ba7 100755 --- a/workflow/engine/controllers/adhocUserProxy.php +++ b/workflow/engine/controllers/adhocUserProxy.php @@ -1,77 +1,81 @@ -getGroupsOfTask( $_SESSION['TASK'], 2 ); - $aAdhocUsers = array (); - $oGroups = new Groups(); - foreach ($aAux as $aGroup) { - $aUsers = $oGroups->getUsersOfGroup( $aGroup['GRP_UID'] ); - foreach ($aUsers as $aUser) { - if ($aUser['USR_UID'] != $_SESSION['USER_LOGGED']) { - $aAdhocUsers[] = $aUser['USR_UID']; - } - } - } - $aAux = $oTasks->getUsersOfTask( $_SESSION['TASK'], 2 ); - foreach ($aAux as $aUser) { - if ($aUser['USR_UID'] != $_SESSION['USER_LOGGED']) { - $aAdhocUsers[] = $aUser['USR_UID']; - } - } - require_once 'classes/model/Users.php'; - $oCriteria = new Criteria( 'workflow' ); - $oCriteria->addSelectColumn( UsersPeer::USR_UID ); - $oCriteria->addSelectColumn( UsersPeer::USR_FIRSTNAME ); - $oCriteria->addSelectColumn( UsersPeer::USR_LASTNAME ); - $oCriteria->add( UsersPeer::USR_UID, $aAdhocUsers, Criteria::IN ); - $oDataset = UsersPeer::doSelectRS( $oCriteria ); - $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); - $aData = array (); - while ($oDataset->next()) { - $aData[] = $oDataset->getRow(); - } - - $this->data = $aData; - - } + function adhocAssignUsersk ($params) + { + + G::LoadClass( 'groups' ); + G::LoadClass( 'tasks' ); + $oTasks = new Tasks(); + $aAux = $oTasks->getGroupsOfTask( $_SESSION['TASK'], 2 ); + $aAdhocUsers = array (); + $oGroups = new Groups(); + foreach ($aAux as $aGroup) { + $aUsers = $oGroups->getUsersOfGroup( $aGroup['GRP_UID'] ); + foreach ($aUsers as $aUser) { + if ($aUser['USR_UID'] != $_SESSION['USER_LOGGED']) { + $aAdhocUsers[] = $aUser['USR_UID']; + } + } + } + $aAux = $oTasks->getUsersOfTask( $_SESSION['TASK'], 2 ); + foreach ($aAux as $aUser) { + if ($aUser['USR_UID'] != $_SESSION['USER_LOGGED']) { + $aAdhocUsers[] = $aUser['USR_UID']; + } + } + require_once 'classes/model/Users.php'; + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->addSelectColumn( UsersPeer::USR_UID ); + $oCriteria->addSelectColumn( UsersPeer::USR_FIRSTNAME ); + $oCriteria->addSelectColumn( UsersPeer::USR_LASTNAME ); + $oCriteria->add( UsersPeer::USR_UID, $aAdhocUsers, Criteria::IN ); + $oDataset = UsersPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $aData = array (); + while ($oDataset->next()) { + $aData[] = $oDataset->getRow(); + } + + $this->data = $aData; + + } //assign user adhoc - function reassignCase ($params) - { - $cases = new Cases(); - $cases->reassignCase( $_SESSION['APPLICATION'], $_SESSION['INDEX'], $_SESSION['USER_LOGGED'], $_POST['USR_UID'], $_POST['THETYPE'] ); - $this->success = true; - } + function reassignCase ($params) + { + $cases = new Cases(); + $cases->reassignCase( $_SESSION['APPLICATION'], $_SESSION['INDEX'], $_SESSION['USER_LOGGED'], $_POST['USR_UID'], $_POST['THETYPE'] ); + $this->success = true; + } //delete case adhoc - function deleteCase ($params) - { - $ainfoCase = array (); - try { - $applicationUID = (isset( $_POST['APP_UID'] )) ? $_POST['APP_UID'] : $_SESSION['APPLICATION']; - $app = new Application(); - $caseData = $app->load( $applicationUID ); - $data['APP_NUMBER'] = $caseData['APP_NUMBER']; - - $oCase = new Cases(); - $oCase->removeCase( $applicationUID ); - - $this->success = true; - $this->msg = G::LoadTranslation( 'ID_CASE_DELETED_SUCCESSFULLY', SYS_LANG, $data ); - } catch (Exception $e) { - $this->success = false; - $this->msg = $e->getMessage(); - } - } - -} -//End adhocUserProxy - + function deleteCase ($params) + { + $ainfoCase = array (); + try { + $applicationUID = (isset( $_POST['APP_UID'] )) ? $_POST['APP_UID'] : $_SESSION['APPLICATION']; + $app = new Application(); + $caseData = $app->load( $applicationUID ); + $data['APP_NUMBER'] = $caseData['APP_NUMBER']; + + G::LoadClass("pmTable"); + + $pmTable = new PmTable(); + $pmTable->reportTableDeleteRecord($applicationUID); + + $oCase = new Cases(); + $oCase->removeCase( $applicationUID ); + + $this->success = true; + $this->msg = G::LoadTranslation( 'ID_CASE_DELETED_SUCCESSFULLY', SYS_LANG, $data ); + } catch (Exception $e) { + $this->success = false; + $this->msg = $e->getMessage(); + } + } + +} +//End adhocUserProxy diff --git a/workflow/engine/methods/cases/cases_Delete.php b/workflow/engine/methods/cases/cases_Delete.php index 5fa4c0182..d708cec45 100755 --- a/workflow/engine/methods/cases/cases_Delete.php +++ b/workflow/engine/methods/cases/cases_Delete.php @@ -43,7 +43,12 @@ try { $oCase = new Cases(); if (isset( $_POST['APP_UIDS'] )) { $ids = explode( ',', $_POST['APP_UIDS'] ); + + G::LoadClass("pmTable"); + $pmTable = new PmTable(); + foreach ($ids as $id) { + $pmTable->reportTableDeleteRecord($id); $oCase->removeCase( $id ); } From d6380df70b099bc09b24b49165d4237d2b09ca6b Mon Sep 17 00:00:00 2001 From: Luis Fernando Saisa Lopez Date: Tue, 9 Jul 2013 17:13:27 -0400 Subject: [PATCH 2/3] BUG 12253 "Cuando se borra un caso por PM, este caso no..." SOLVED - Cuando se borra un caso por PM, este caso no se borra en los PM Reportes. - Problema resuelto, cuando se ejecuta un proceso que tenga Report Tables, al borrar el caso tambien se eliminara los registros de los Report Tables. * Available from version ProcessMaker-2.5.2-testing.1 --- workflow/engine/classes/class.case.php | 59 +++++++++++++++++++ workflow/engine/classes/class.pmTable.php | 53 ----------------- .../engine/controllers/adhocUserProxy.php | 6 +- .../engine/methods/cases/cases_Delete.php | 2 +- 4 files changed, 61 insertions(+), 59 deletions(-) diff --git a/workflow/engine/classes/class.case.php b/workflow/engine/classes/class.case.php index 26dd943a7..63c2dbad7 100755 --- a/workflow/engine/classes/class.case.php +++ b/workflow/engine/classes/class.case.php @@ -6554,4 +6554,63 @@ class Cases } return false; } + + public function reportTableDeleteRecord($applicationUid) + { + $criteria1 = new Criteria("workflow"); + + //SELECT + $criteria1->addSelectColumn(ApplicationPeer::PRO_UID); + + //FROM + + //WHERE + $criteria1->add(ApplicationPeer::APP_UID, $applicationUid); + + //QUERY + $rsCriteria1 = ApplicationPeer::doSelectRS($criteria1); + $rsCriteria1->setFetchmode(ResultSet::FETCHMODE_ASSOC); + + $rsCriteria1->next(); + $row1 = $rsCriteria1->getRow(); + + $processUid = $row1["PRO_UID"]; + + $criteria2 = new Criteria("workflow"); + + //SELECT + $criteria2->addSelectColumn(AdditionalTablesPeer::ADD_TAB_NAME); + + //FROM + + //WHERE + + $criteria2->add(AdditionalTablesPeer::PRO_UID, $processUid); + + //QUERY + $rsCriteria2 = AdditionalTablesPeer::doSelectRS($criteria2); + $rsCriteria2->setFetchmode(ResultSet::FETCHMODE_ASSOC); + + G::LoadClass("pmTable"); + $pmTable = new PmTable(); + + while ($rsCriteria2->next()) { + try { + $row2 = $rsCriteria2->getRow(); + $tableName = $row2["ADD_TAB_NAME"]; + $pmTableName = $pmTable->toCamelCase($tableName); + + //DELETE + require_once (PATH_WORKSPACE . "classes" . PATH_SEP . "$pmTableName.php"); + + $criteria3 = new Criteria("workflow"); + + eval("\$criteria3->add(" . $pmTableName . "Peer::APP_UID, \$applicationUid);"); + eval($pmTableName . "Peer::doDelete(\$criteria3);"); + + } catch (Exception $e) { + throw $e; + } + } + } } diff --git a/workflow/engine/classes/class.pmTable.php b/workflow/engine/classes/class.pmTable.php index eb893d19f..5a9f950ad 100755 --- a/workflow/engine/classes/class.pmTable.php +++ b/workflow/engine/classes/class.pmTable.php @@ -864,58 +864,5 @@ class PmTable $m->execute( $args ); $m->runBuild(); } - - public function reportTableDeleteRecord($applicationUid) - { - $criteria1 = new Criteria("workflow"); - - //SELECT - $criteria1->addSelectColumn(ApplicationPeer::PRO_UID); - - //FROM - - //WHERE - $criteria1->add(ApplicationPeer::APP_UID, $applicationUid); - - //QUERY - $rsCriteria1 = ApplicationPeer::doSelectRS($criteria1); - $rsCriteria1->setFetchmode(ResultSet::FETCHMODE_ASSOC); - - while ($rsCriteria1->next()) { - $row1 = $rsCriteria1->getRow(); - $processUid = $row1["PRO_UID"]; - - $criteria2 = new Criteria("workflow"); - - //SELECT - $criteria2->addSelectColumn(AdditionalTablesPeer::ADD_TAB_NAME); - - //FROM - - //WHERE - $criteria2->add(AdditionalTablesPeer::PRO_UID, $processUid); - - //QUERY - $rsCriteria2 = AdditionalTablesPeer::doSelectRS($criteria2); - $rsCriteria2->setFetchmode(ResultSet::FETCHMODE_ASSOC); - - while ($rsCriteria2->next()) { - $row2 = $rsCriteria2->getRow(); - $tableName = $row2["ADD_TAB_NAME"]; - - $tableName = str_replace("_", " ", $tableName); - $tableName = str_replace(" ", "", ucwords(strtolower($tableName))); - - //DELETE - require_once (PATH_WORKSPACE . "classes" . PATH_SEP . "$tableName.php"); - - $criteria3 = new Criteria("workflow"); - - eval("\$criteria3->add(" . $tableName . "Peer::APP_UID, \$applicationUid);"); - eval($tableName . "Peer::doDelete(\$criteria3);"); - } - - } - } } diff --git a/workflow/engine/controllers/adhocUserProxy.php b/workflow/engine/controllers/adhocUserProxy.php index 3ca3c4ba7..3d6562e9c 100755 --- a/workflow/engine/controllers/adhocUserProxy.php +++ b/workflow/engine/controllers/adhocUserProxy.php @@ -61,12 +61,8 @@ class adhocUserProxy extends HttpProxyController $caseData = $app->load( $applicationUID ); $data['APP_NUMBER'] = $caseData['APP_NUMBER']; - G::LoadClass("pmTable"); - - $pmTable = new PmTable(); - $pmTable->reportTableDeleteRecord($applicationUID); - $oCase = new Cases(); + $oCase->reportTableDeleteRecord($applicationUID); $oCase->removeCase( $applicationUID ); $this->success = true; diff --git a/workflow/engine/methods/cases/cases_Delete.php b/workflow/engine/methods/cases/cases_Delete.php index d708cec45..f6397ef72 100755 --- a/workflow/engine/methods/cases/cases_Delete.php +++ b/workflow/engine/methods/cases/cases_Delete.php @@ -48,7 +48,7 @@ try { $pmTable = new PmTable(); foreach ($ids as $id) { - $pmTable->reportTableDeleteRecord($id); + $oCase->reportTableDeleteRecord($id); $oCase->removeCase( $id ); } From 3678fb601132d813f5575562c52a787afd7ef5e9 Mon Sep 17 00:00:00 2001 From: Luis Fernando Saisa Lopez Date: Wed, 10 Jul 2013 10:02:21 -0400 Subject: [PATCH 3/3] BUG 12253 "Cuando se borra un caso por PM, este caso no..." SOLVED - Cuando se borra un caso por PM, este caso no se borra en los PM Reportes. - Problema resuelto, cuando se ejecuta un proceso que tenga Report Tables, al borrar el caso tambien se eliminara los registros de los Report Tables. * Available from version ProcessMaker-2.5.2-testing.1 --- workflow/engine/classes/class.case.php | 5 +++-- workflow/engine/controllers/adhocUserProxy.php | 1 - workflow/engine/methods/cases/cases_Delete.php | 6 ------ 3 files changed, 3 insertions(+), 9 deletions(-) diff --git a/workflow/engine/classes/class.case.php b/workflow/engine/classes/class.case.php index 63c2dbad7..ac5877d49 100755 --- a/workflow/engine/classes/class.case.php +++ b/workflow/engine/classes/class.case.php @@ -1100,7 +1100,6 @@ class Cases $criteria = new Criteria("workflow"); $criteria->add(AppSolrQueuePeer::APP_UID, $sAppUid); AppSolrQueuePeer::doDelete($criteria); - //Before delete verify if is a child case $oCriteria2 = new Criteria('workflow'); $oCriteria2->add(SubApplicationPeer::APP_UID, $sAppUid); @@ -1118,10 +1117,12 @@ class Cases $oCriteria2->add(SubApplicationPeer::APP_PARENT, $sAppUid); SubApplicationPeer::doDelete($oCriteria2); + //Delete records of the Report Table + $this->reportTableDeleteRecord($sAppUid); + //Delete record of the APPLICATION table (trigger: delete records of the APP_CACHE_VIEW table) $application = new Application(); $result = $application->remove($sAppUid); - //delete application from index if ($this->appSolr != null) { $this->appSolr->deleteApplicationSearchIndex($sAppUid); diff --git a/workflow/engine/controllers/adhocUserProxy.php b/workflow/engine/controllers/adhocUserProxy.php index 3d6562e9c..b98439cd0 100755 --- a/workflow/engine/controllers/adhocUserProxy.php +++ b/workflow/engine/controllers/adhocUserProxy.php @@ -62,7 +62,6 @@ class adhocUserProxy extends HttpProxyController $data['APP_NUMBER'] = $caseData['APP_NUMBER']; $oCase = new Cases(); - $oCase->reportTableDeleteRecord($applicationUID); $oCase->removeCase( $applicationUID ); $this->success = true; diff --git a/workflow/engine/methods/cases/cases_Delete.php b/workflow/engine/methods/cases/cases_Delete.php index f6397ef72..9b8bef0ed 100755 --- a/workflow/engine/methods/cases/cases_Delete.php +++ b/workflow/engine/methods/cases/cases_Delete.php @@ -43,15 +43,9 @@ try { $oCase = new Cases(); if (isset( $_POST['APP_UIDS'] )) { $ids = explode( ',', $_POST['APP_UIDS'] ); - - G::LoadClass("pmTable"); - $pmTable = new PmTable(); - foreach ($ids as $id) { - $oCase->reportTableDeleteRecord($id); $oCase->removeCase( $id ); } - if (count( $_POST['APP_UIDS'] ) > 1) { echo 'The Case was deleted successfully'; } else {