HOR-1300 Performance Issue in PMFGroupList function

This commit is contained in:
Ronald Q
2016-06-23 14:03:56 -04:00
parent 7cbc64996a
commit 3cc18d73d7
2 changed files with 36 additions and 27 deletions

View File

@@ -1897,20 +1897,20 @@ function PMFGenerateOutputDocument ($outputID, $sApplication = null, $index = nu
* @label PMF Group List
* @link http://wiki.processmaker.com/index.php/ProcessMaker_Functions#PMFGroupList.28.29
*
* @param string | $search = null | String to search | Optional parameter.
* @param int | $start = null | Start | Optional parameter.
* @param int | $limit = null | Limit | Optional parameter.
* @return array | $rows | List of groups | An array of groups
*
*/
function PMFGroupList () //its test was successfull
function PMFGroupList ($search = null, $start = null, $limit = null) //its test was successfull
{
G::LoadClass( 'wsBase' );
$ws = new wsBase();
$result = $ws->groupList();
$rows = Array ();
$i = 1;
$result = $ws->groupList($search, $start, $limit);
$rows = array();
if (isset( $result )) {
foreach ($result as $item) {
$rows[$i ++] = $item;
}
$rows = array_combine(range(1, count($result)), array_values($result));
}
return $rows;
}

View File

@@ -229,32 +229,41 @@ class wsBase
/**
* get all groups
*
* @param none
* @return $result will return an object
* @param null $search
* @param null $start
* @param null $limit
* @return array|stdClass
*/
public function groupList ()
public function groupList($search = null, $start = null, $limit = null)
{
try {
$result = array ();
$oCriteria = new Criteria( 'workflow' );
$oCriteria->add( GroupwfPeer::GRP_STATUS, 'ACTIVE' );
$oDataset = GroupwfPeer::doSelectRS( $oCriteria );
$oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC );
$oDataset->next();
while ($aRow = $oDataset->getRow()) {
$oGroupwf = new Groupwf();
$arrayGroupwf = $oGroupwf->Load( $aRow['GRP_UID'] );
$result[] = array ('guid' => $aRow['GRP_UID'],'name' => $arrayGroupwf['GRP_TITLE']
);
$oDataset->next();
$criteria = new Criteria('workflow');
$criteria->addSelectColumn(GroupwfPeer::GRP_UID);
$criteria->addSelectColumn(GroupwfPeer::GRP_TITLE);
$criteria->add(GroupwfPeer::GRP_STATUS, 'ACTIVE');
$criteria->addAscendingOrderByColumn(GroupwfPeer::GRP_TITLE);
if ($search) {
$criteria->add(GroupwfPeer::GRP_TITLE, $search, Criteria::EQUAL);
$criteria->addOr(GroupwfPeer::GRP_TITLE, $search . '%', Criteria::LIKE);
$criteria->addOr(GroupwfPeer::GRP_TITLE, '%' . $search, Criteria::LIKE);
$criteria->addOr(GroupwfPeer::GRP_TITLE, '%' . $search . '%', Criteria::LIKE);
}
if ($start) {
$criteria->setOffset($start);
}
if ($limit) {
$criteria->setLimit($limit);
}
$rs = GroupwfPeer::doSelectRS($criteria);
$rs->setFetchmode(ResultSet::FETCHMODE_ASSOC);
$result = array();
while ($rs->next()) {
$rows = $rs->getRow();
$result[] = array('guid' => $rows['GRP_UID'], 'name' => $rows['GRP_TITLE']);
}
return $result;
} catch (Exception $e) {
$result[] = array ('guid' => $e->getMessage(),'name' => $e->getMessage()
);
$result[] = array('guid' => $e->getMessage(), 'name' => $e->getMessage());
return $result;
}
}