diff --git a/workflow/engine/classes/model/Process.php b/workflow/engine/classes/model/Process.php index b1372574c..0e5159baa 100755 --- a/workflow/engine/classes/model/Process.php +++ b/workflow/engine/classes/model/Process.php @@ -48,6 +48,8 @@ class Process extends BaseProcess * @var string */ protected $pro_title = ''; + public $dir = 'ASC'; + public $sort = ''; /** * Get the [Pro_title] column value. @@ -387,7 +389,12 @@ class Process extends BaseProcess } } - usort( $processes, 'ordProcessByProTitle' ); + if ($this->dir=='ASC') { + usort( $processes, array($this, "ordProcessAsc") ); + } else { + usort( $processes, array($this, "ordProcessDesc") ); + } + return $processes; } @@ -589,7 +596,7 @@ class Process extends BaseProcess public function getAllProcesses ($start, $limit, $category = null, $processName = null, $counters = true, $reviewSubProcess = false) { - require_once PATH_RBAC . "model/RbacUsers.php"; + require_once PATH_RBAC . "model/RbacUsers.php"; require_once "classes/model/ProcessCategory.php"; require_once "classes/model/Users.php"; @@ -629,14 +636,7 @@ class Process extends BaseProcess $this->tmpCriteria = clone $oCriteria; - if ($start != '') { - $oCriteria->setOffset( $start ); - } - if ($limit != '' && ! isset( $category ) && ! isset( $processName )) { - $oCriteria->setLimit( $limit ); - } - - //execute a query to obtain numbers, how many cases there are by process + //execute a query to obtain numbers, how many cases there are by process if ($counters) { $casesCnt = $this->getCasesCountInAllProcesses(); } @@ -741,8 +741,22 @@ class Process extends BaseProcess $aProcesses[] = $process; } + + $memcache = & PMmemcached::getSingleton( SYS_SYS ); + if (isset($memcache) && $memcache->enabled == 1 ) { + return $aProcesses; + } + + if ($limit == '') { + $limit = count($aProcesses); + } + if ($this->dir=='ASC') { + usort( $aProcesses, array($this, "ordProcessAsc") ); + } else { + usort( $aProcesses, array($this, "ordProcessDesc") ); + } + $aProcesses = array_splice($aProcesses, $start, $limit); - usort( $aProcesses, 'ordProcessByProTitle' ); return $aProcesses; } @@ -848,16 +862,38 @@ class Process extends BaseProcess $r = $memcache->delete( $memkeyTotal ); } } -} + + public function orderMemcache($dataMemcache, $start, $limit) + { + if ($this->dir=='ASC') { + usort( $dataMemcache, array($this, "ordProcessAsc") ); + } else { + usort( $dataMemcache, array($this, "ordProcessDesc") ); + } + $dataMemcache = array_splice($dataMemcache, $start, $limit); + return $dataMemcache; + } -function ordProcessByProTitle ($a, $b) -{ - if ($a['PRO_TITLE'] > $b['PRO_TITLE']) { - return 1; - } elseif ($a['PRO_TITLE'] < $b['PRO_TITLE']) { - return - 1; - } else { - return 0; + public function ordProcessAsc ($a, $b) + { + if ($a[$this->sort] > $b[$this->sort]) { + return 1; + } elseif ($a[$this->sort] < $b[$this->sort]) { + return - 1; + } else { + return 0; + } + } + + public function ordProcessDesc ($a, $b) + { + if ($a[$this->sort] > $b[$this->sort]) { + return - 1; + } elseif ($a[$this->sort] < $b[$this->sort]) { + return 1; + } else { + return 0; + } } } diff --git a/workflow/engine/methods/processes/processesList.php b/workflow/engine/methods/processes/processesList.php index ec0fa3716..084e9bd12 100755 --- a/workflow/engine/methods/processes/processesList.php +++ b/workflow/engine/methods/processes/processesList.php @@ -26,26 +26,29 @@ require_once 'classes/model/Process.php'; $start = isset( $_POST['start'] ) ? $_POST['start'] : 0; $limit = isset( $_POST['limit'] ) ? $_POST['limit'] : ''; +$dir = isset( $_POST['dir'] ) ? $_POST['dir'] : 'ASC'; +$sort = isset( $_POST['sort'] ) ? $_POST['sort'] : ''; $oProcess = new Process(); +$oProcess->dir = $dir; +$oProcess->sort = $sort; //$memcache = & PMmemcached::getSingleton( SYS_SYS ); $memkey = 'no memcache'; $memcacheUsed = 'not used'; $totalCount = 0; - if (isset( $_POST['category'] ) && $_POST['category'] !== '') { if (isset( $_POST['processName'] )) - $proData = $oProcess->getAllProcesses( $start, $limit, $_POST['category'], $_POST['processName'] ); + $proData = $oProcess->getAllProcesses( $start, $limit, $_POST['category'], $_POST['processName']); else - $proData = $oProcess->getAllProcesses( $start, $limit, $_POST['category'] ); + $proData = $oProcess->getAllProcesses( $start, $limit, $_POST['category']); } else { if (isset( $_POST['processName'] )) { $memkey = 'processList-' . $start . '-' . $limit . '-' . $_POST['processName']; $memcacheUsed = 'yes'; if (($proData = $memcache->get( $memkey )) === false) { - $proData = $oProcess->getAllProcesses( $start, $limit, null, $_POST['processName'] ); + $proData = $oProcess->getAllProcesses( $start, $limit, null, $_POST['processName']); $memcache->set( $memkey, $proData, PMmemcached::ONE_HOUR ); $memcacheUsed = 'no'; } @@ -54,12 +57,14 @@ if (isset( $_POST['category'] ) && $_POST['category'] !== '') { $memkeyTotal = $memkey . '-total'; $memcacheUsed = 'yes'; if (($proData = $memcache->get( $memkey )) === false || ($totalCount = $memcache->get( $memkeyTotal )) === false) { - $proData = $oProcess->getAllProcesses( $start, $limit ); + $proData = $oProcess->getAllProcesses( $start, $limit); $totalCount = $oProcess->getAllProcessesCount(); $memcache->set( $memkey, $proData, PMmemcached::ONE_HOUR ); $memcache->set( $memkeyTotal, $totalCount, PMmemcached::ONE_HOUR ); $memcacheUsed = 'no'; - } + } else { + $proData = $oProcess->orderMemcache($proData, $start, $limit); + } } } $r = new stdclass(); diff --git a/workflow/engine/templates/processes/main.js b/workflow/engine/templates/processes/main.js index de6584167..5b7eecca9 100755 --- a/workflow/engine/templates/processes/main.js +++ b/workflow/engine/templates/processes/main.js @@ -37,6 +37,7 @@ Ext.onReady(function(){ store = new Ext.data.GroupingStore( { //var store = new Ext.data.Store( { + remoteSort: true, proxy : new Ext.data.HttpProxy({ url: 'processesList' }),