From ea97cfbbca1fc239e8e898353d71ec317b308306 Mon Sep 17 00:00:00 2001 From: Roly Rudy Gutierrez Pinto Date: Mon, 20 Aug 2018 10:20:00 -0400 Subject: [PATCH] HOR-4686 --- .../engine/classes/model/AdditionalTables.php | 149 ++++++++++-------- workflow/engine/controllers/pmTablesProxy.php | 86 +++++----- workflow/engine/templates/pmTables/list.js | 6 +- 3 files changed, 134 insertions(+), 107 deletions(-) diff --git a/workflow/engine/classes/model/AdditionalTables.php b/workflow/engine/classes/model/AdditionalTables.php index 60c041a75..1eefa6356 100644 --- a/workflow/engine/classes/model/AdditionalTables.php +++ b/workflow/engine/classes/model/AdditionalTables.php @@ -1069,94 +1069,117 @@ class AdditionalTables extends BaseAdditionalTables return $reportTables; } + /** + * Get all data of AdditionalTables. + * + * @param int $start + * @param int $limit + * @param string $filter + * @param array $process + * @return array + */ public function getAll($start = 0, $limit = 20, $filter = '', $process = null) { - $oCriteria = new Criteria('workflow'); - $oCriteria->addSelectColumn(AdditionalTablesPeer::ADD_TAB_UID); - $oCriteria->addSelectColumn(AdditionalTablesPeer::ADD_TAB_NAME); - $oCriteria->addSelectColumn(AdditionalTablesPeer::ADD_TAB_DESCRIPTION); - $oCriteria->addSelectColumn(AdditionalTablesPeer::ADD_TAB_TYPE); - $oCriteria->addSelectColumn(AdditionalTablesPeer::ADD_TAB_TAG); - $oCriteria->addSelectColumn(AdditionalTablesPeer::PRO_UID); - $oCriteria->addSelectColumn(AdditionalTablesPeer::DBS_UID); + $criteria = new Criteria('workflow'); + $criteria->addSelectColumn(AdditionalTablesPeer::ADD_TAB_UID); + $criteria->addSelectColumn(AdditionalTablesPeer::ADD_TAB_NAME); + $criteria->addSelectColumn(AdditionalTablesPeer::ADD_TAB_DESCRIPTION); + $criteria->addSelectColumn(AdditionalTablesPeer::ADD_TAB_TYPE); + $criteria->addSelectColumn(AdditionalTablesPeer::ADD_TAB_TAG); + $criteria->addSelectColumn(AdditionalTablesPeer::PRO_UID); + $criteria->addSelectColumn(AdditionalTablesPeer::DBS_UID); if (isset($process)) { foreach ($process as $key => $pro_uid) { if ($key == 'equal') { - $oCriteria->add(AdditionalTablesPeer::PRO_UID, $pro_uid, Criteria::EQUAL); + $criteria->add(AdditionalTablesPeer::PRO_UID, $pro_uid, Criteria::EQUAL); } else { - $oCriteria->add(AdditionalTablesPeer::PRO_UID, $pro_uid, Criteria::NOT_EQUAL); + $criteria->add(AdditionalTablesPeer::PRO_UID, $pro_uid, Criteria::NOT_EQUAL); } } } if ($filter != '' && is_string($filter)) { - $oCriteria->add( - $oCriteria->getNewCriterion(AdditionalTablesPeer::ADD_TAB_NAME, '%' . $filter . '%', Criteria::LIKE)->addOr( - $oCriteria->getNewCriterion(AdditionalTablesPeer::ADD_TAB_DESCRIPTION, '%' . $filter . '%', Criteria::LIKE) - ) - ); + $subCriteria2 = $criteria->getNewCriterion(AdditionalTablesPeer::ADD_TAB_DESCRIPTION, '%' + . $filter + . '%', Criteria::LIKE); + $subCriteria1 = $criteria->getNewCriterion(AdditionalTablesPeer::ADD_TAB_NAME, '%' + . $filter + . '%', Criteria::LIKE) + ->addOr($subCriteria2); + $criteria->add($subCriteria1); } - if (isset($_POST['sort'])) { - if ($_POST['dir'] == 'ASC') { - eval('$oCriteria->addAscendingOrderByColumn(AdditionalTablesPeer::' . $_POST['sort'] . ');'); - } else { - eval('$oCriteria->addDescendingOrderByColumn(AdditionalTablesPeer::' . $_POST['sort'] . ');'); + $criteria->addAsColumn("PRO_TITLE", ProcessPeer::PRO_TITLE); + $criteria->addAsColumn("PRO_DESCRIPTION", ProcessPeer::PRO_DESCRIPTION); + $criteria->addJoin(AdditionalTablesPeer::PRO_UID, ProcessPeer::PRO_UID, Criteria::LEFT_JOIN); + + $stringBuild = ''; + $stringSql = "ADDITIONAL_TABLES.ADD_TAB_NAME IN (" + . "SELECT TABLE_NAME " + . "FROM information_schema.tables " + . "WHERE table_schema = DATABASE()" + . ")"; + $buildNumberRows = clone $criteria; + $buildNumberRows->clear(); + $buildNumberRows->addSelectColumn(AdditionalTablesPeer::ADD_TAB_NAME); + $buildNumberRows->addAsColumn("EXISTS_TABLE", $stringSql); + $dataset1 = AdditionalTablesPeer::doSelectRS($buildNumberRows); + $dataset1->setFetchmode(ResultSet::FETCHMODE_ASSOC); + while ($dataset1->next()) { + $row = $dataset1->getRow(); + $stringCount = "'" . G::LoadTranslation('ID_TABLE_NOT_FOUND') . "'"; + if ($row["EXISTS_TABLE"] === "1") { + $stringCount = "(SELECT COUNT(*) FROM " . $row["ADD_TAB_NAME"] . ")"; } + $stringBuild = $stringBuild + . "WHEN '" . $row["ADD_TAB_NAME"] + . "' THEN " . $stringCount + . " \n"; + } + $clauseRows = empty($stringBuild) ? "''" : "(CASE " + . AdditionalTablesPeer::ADD_TAB_NAME + . " " + . $stringBuild + . " END)"; + $criteria->addAsColumn("NUM_ROWS", $clauseRows); + + if (empty($_POST['sort'])) { + $criteria->addAscendingOrderByColumn(AdditionalTablesPeer::ADD_TAB_NAME); } else { - $oCriteria->addAscendingOrderByColumn(AdditionalTablesPeer::ADD_TAB_NAME); + $column = $_POST["sort"]; + if (defined('AdditionalTablesPeer::' . $column)) { + $column = constant('AdditionalTablesPeer::' . $column); + } + if ($column === "NUM_ROWS") { + $column = "IF(" . $column . "='" . G::LoadTranslation('ID_TABLE_NOT_FOUND') . "',-1," . $column . ")"; + } + if ($_POST['dir'] == 'ASC') { + $criteria->addAscendingOrderByColumn($column); + } else { + $criteria->addDescendingOrderByColumn($column); + } } - $criteriaCount = clone $oCriteria; + $criteriaCount = clone $criteria; $count = AdditionalTablesPeer::doCount($criteriaCount); - $oCriteria->setLimit($limit); - $oCriteria->setOffset($start); + $criteria->setLimit($limit); + $criteria->setOffset($start); - $oDataset = AdditionalTablesPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); + $dataset = AdditionalTablesPeer::doSelectRS($criteria); + $dataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $addTables = array(); - $proUids = array(); - - while ($oDataset->next()) { - $row = $oDataset->getRow(); - $row['PRO_TITLE'] = $row['PRO_DESCRIPTION'] = ''; + $addTables = []; + while ($dataset->next()) { + $row = $dataset->getRow(); $addTables[] = $row; - if ($row['PRO_UID'] != '') { - $proUids[] = $row['PRO_UID']; - } } - //process details will have the info about the processes - $procDetails = array(); - - if (count($proUids) > 0) { - //now get the labels for all process, using an array of Uids, - $c = new Criteria('workflow'); - $c->add(ProcessPeer::PRO_UID, $proUids, Criteria::IN); - $dt = ProcessPeer::doSelectRS($c); - $dt->setFetchmode(ResultSet::FETCHMODE_ASSOC); - - while ($dt->next()) { - $row = $dt->getRow(); - $procDetails[$row['PRO_UID']]['PRO_TITLE'] = $row['PRO_TITLE']; - $procDetails[$row['PRO_UID']]['PRO_DESCRIPTION'] = $row['PRO_DESCRIPTION']; - } - - foreach ($addTables as $i => $addTable) { - if (isset($procDetails[$addTable['PRO_UID']]['PRO_TITLE'])) { - $addTables[$i]['PRO_TITLE'] = $procDetails[$addTable['PRO_UID']]['PRO_TITLE']; - } - - if (isset($procDetails[$addTable['PRO_UID']]['PRO_DESCRIPTION'])) { - $addTables[$i]['PRO_DESCRIPTION'] = $procDetails[$addTable['PRO_UID']]['PRO_DESCRIPTION']; - } - } - } - - return array('rows' => $addTables, 'count' => $count); + return [ + 'rows' => $addTables, + 'count' => $count + ]; } /** diff --git a/workflow/engine/controllers/pmTablesProxy.php b/workflow/engine/controllers/pmTablesProxy.php index df7b514b9..ed62a64a1 100644 --- a/workflow/engine/controllers/pmTablesProxy.php +++ b/workflow/engine/controllers/pmTablesProxy.php @@ -26,68 +26,70 @@ class pmTablesProxy extends HttpProxyController * @param string $httpData->limit * @param string $httpData->textFilter */ - public function getList ($httpData) + public function getList($httpData) { $configurations = new Configurations(); $processMap = new ProcessMap(); // setting parameters - $config = $configurations->getConfiguration( 'additionalTablesList', 'pageSize', '', $_SESSION['USER_LOGGED'] ); - $env = $configurations->getConfiguration( 'ENVIRONMENT_SETTINGS', '' ); - $limit_size = isset( $config->pageSize ) ? $config['pageSize'] : 20; - $start = isset( $httpData->start ) ? $httpData->start : 0; - $limit = isset( $httpData->limit ) ? $httpData->limit : $limit_size; - $filter = isset( $httpData->textFilter ) ? $httpData->textFilter : ''; - $pro_uid = isset( $httpData->pro_uid ) ? $httpData->pro_uid : null; + $config = $configurations->getConfiguration('additionalTablesList', 'pageSize', '', $_SESSION['USER_LOGGED']); + $env = $configurations->getConfiguration('ENVIRONMENT_SETTINGS', ''); + $limit_size = isset($config->pageSize) ? $config['pageSize'] : 20; + $start = isset($httpData->start) ? $httpData->start : 0; + $limit = isset($httpData->limit) ? $httpData->limit : $limit_size; + $filter = isset($httpData->textFilter) ? $httpData->textFilter : ''; + $pro_uid = isset($httpData->pro_uid) ? $httpData->pro_uid : null; if ($pro_uid !== null) { - $process = $pro_uid == '' ? array ('not_equal' => $pro_uid - ) : array ('equal' => $pro_uid); - $addTables = AdditionalTables::getAll( false, false, $filter, $process ); + $process = $pro_uid == '' ? ['not_equal' => $pro_uid] : ['equal' => $pro_uid]; + $addTables = AdditionalTables::getAll(false, false, $filter, $process); - $c = $processMap->getReportTablesCriteria( $pro_uid ); - $oDataset = RoutePeer::doSelectRS( $c ); - $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); - $reportTablesOldList = array (); + $c = $processMap->getReportTablesCriteria($pro_uid); + $oDataset = RoutePeer::doSelectRS($c); + $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); + $reportTablesOldList = array(); while ($oDataset->next()) { $reportTablesOldList[] = $oDataset->getRow(); } foreach ($reportTablesOldList as $i => $oldRepTab) { - if($filter != ''){ - if((stripos($oldRepTab['REP_TAB_NAME'], $filter) !== false) || (stripos($oldRepTab['REP_TAB_TITLE'], $filter) !== false)){ - $addTables['rows'][] = array ('ADD_TAB_UID' => $oldRepTab['REP_TAB_UID'],'PRO_UID' => $oldRepTab['PRO_UID'],'DBS_UID' => ($oldRepTab['REP_TAB_CONNECTION'] == 'wf' ? 'workflow' : 'rp'),'ADD_TAB_DESCRIPTION' => $oldRepTab['REP_TAB_TITLE'],'ADD_TAB_NAME' => $oldRepTab['REP_TAB_NAME'],'ADD_TAB_TYPE' => $oldRepTab['REP_TAB_TYPE'],'TYPE' => 'CLASSIC' ); - } - } else { - $addTables['rows'][] = array ('ADD_TAB_UID' => $oldRepTab['REP_TAB_UID'],'PRO_UID' => $oldRepTab['PRO_UID'],'DBS_UID' => ($oldRepTab['REP_TAB_CONNECTION'] == 'wf' ? 'workflow' : 'rp'),'ADD_TAB_DESCRIPTION' => $oldRepTab['REP_TAB_TITLE'],'ADD_TAB_NAME' => $oldRepTab['REP_TAB_NAME'],'ADD_TAB_TYPE' => $oldRepTab['REP_TAB_TYPE'],'TYPE' => 'CLASSIC' ); - } + if ($filter != '') { + if ((stripos($oldRepTab['REP_TAB_NAME'], $filter) !== false) || + (stripos($oldRepTab['REP_TAB_TITLE'], $filter) !== false)) { + $addTables['rows'][] = [ + 'ADD_TAB_UID' => $oldRepTab['REP_TAB_UID'], + 'PRO_UID' => $oldRepTab['PRO_UID'], + 'DBS_UID' => ($oldRepTab['REP_TAB_CONNECTION'] == 'wf' ? 'workflow' : 'rp'), + 'ADD_TAB_DESCRIPTION' => $oldRepTab['REP_TAB_TITLE'], + 'ADD_TAB_NAME' => $oldRepTab['REP_TAB_NAME'], + 'ADD_TAB_TYPE' => $oldRepTab['REP_TAB_TYPE'], + 'TYPE' => 'CLASSIC' + ]; + } + } else { + $addTables['rows'][] = [ + 'ADD_TAB_UID' => $oldRepTab['REP_TAB_UID'], + 'PRO_UID' => $oldRepTab['PRO_UID'], + 'DBS_UID' => ($oldRepTab['REP_TAB_CONNECTION'] == 'wf' ? 'workflow' : 'rp'), + 'ADD_TAB_DESCRIPTION' => $oldRepTab['REP_TAB_TITLE'], + 'ADD_TAB_NAME' => $oldRepTab['REP_TAB_NAME'], + 'ADD_TAB_TYPE' => $oldRepTab['REP_TAB_TYPE'], + 'TYPE' => 'CLASSIC' + ]; + } } $addTables['count'] = count($addTables['rows']); - if($start != 0){ - $addTables['rows'] = array_splice($addTables['rows'], $start); + if ($start != 0) { + $addTables['rows'] = array_splice($addTables['rows'], $start); } $addTables['rows'] = array_splice($addTables['rows'], 0, $limit); } else { - $addTables = AdditionalTables::getAll( $start, $limit, $filter ); + $addTables = AdditionalTables::getAll($start, $limit, $filter); } foreach ($addTables['rows'] as $i => $table) { - try { - $con = Propel::getConnection( PmTable::resolveDbSource( $table['DBS_UID'] ) ); - $stmt = $con->createStatement(); - $rs = $stmt->executeQuery( 'SELECT COUNT(*) AS NUM_ROWS from ' . $table['ADD_TAB_NAME'] ); - if ($rs->next()) { - $r = $rs->getRow(); - $addTables['rows'][$i]['NUM_ROWS'] = $r['NUM_ROWS']; - } else { - $addTables['rows'][$i]['NUM_ROWS'] = 0; - } - - //removing the prefix "PMT" to allow alphabetical order (just in view) - if (substr( $addTables['rows'][$i]['ADD_TAB_NAME'], 0, 4 ) == 'PMT_') { - $addTables['rows'][$i]['ADD_TAB_NAME'] = substr( $addTables['rows'][$i]['ADD_TAB_NAME'], 4 ); - } - } catch (Exception $e) { - $addTables['rows'][$i]['NUM_ROWS'] = G::LoadTranslation( 'ID_TABLE_NOT_FOUND' ); + //removing the prefix "PMT" to allow alphabetical order (just in view) + if (substr($addTables['rows'][$i]['ADD_TAB_NAME'], 0, 4) == 'PMT_') { + $addTables['rows'][$i]['ADD_TAB_NAME'] = substr($addTables['rows'][$i]['ADD_TAB_NAME'], 4); } } diff --git a/workflow/engine/templates/pmTables/list.js b/workflow/engine/templates/pmTables/list.js index dc50178b5..8d3027983 100644 --- a/workflow/engine/templates/pmTables/list.js +++ b/workflow/engine/templates/pmTables/list.js @@ -281,7 +281,7 @@ Ext.onReady(function(){ cmodelColumns.push({header: _('ID_NAME'), dataIndex: 'ADD_TAB_NAME', width: 300, align:'left', renderer: function(v,p,r){ return r.get('TYPE') == 'CLASSIC'? v + ' ('+ _('ID_OLD_VERSION') +')' : v; }}); - cmodelColumns.push({header: _('ID_DESCRIPTION'), dataIndex: 'ADD_TAB_DESCRIPTION', sortable:false, width: 400, hidden:false, align:'left', renderer: function(v,p,r){ + cmodelColumns.push({header: _('ID_DESCRIPTION'), dataIndex: 'ADD_TAB_DESCRIPTION', sortable: true, width: 400, hidden: false, align: 'left', renderer: function (v, p, r) { if (r.get('ADD_TAB_TAG')) { tag = r.get('ADD_TAB_TAG').replace('plugin@', ''); tag = tag.charAt(0).toUpperCase() + tag.slice(1); @@ -304,7 +304,9 @@ Ext.onReady(function(){ cmodelColumns.push({dataIndex: "DBS_UID", hidden: true, hideable: false}); - cmodelColumns.push({header: _('ID_RECORDS'), dataIndex: 'NUM_ROWS', width: 90, align:'left'}); + cmodelColumns.push({header: _('ID_RECORDS'), dataIndex: 'NUM_ROWS', width: 90, align:'left', renderer: function (v, p, r) { + return '
' + v + '
'; + }}); if (PRO_UID === false) { cmodelColumns.push({header: _('ID_PROCESS'), dataIndex: 'PRO_TITLE', width: 180, align:'left'});