From 04d5809cfeb4b8554b899b6148c3b2dd80ae767a Mon Sep 17 00:00:00 2001 From: wangchunsheng Date: Sat, 15 Dec 2012 13:20:52 +0000 Subject: [PATCH] * task#980, when create story, sort the po at the first. --- module/story/control.php | 2 +- module/user/model.php | 33 +++++++++++++++++++++++++-------- 2 files changed, 26 insertions(+), 9 deletions(-) diff --git a/module/story/control.php b/module/story/control.php index a8d2206769..a125bc9faa 100644 --- a/module/story/control.php +++ b/module/story/control.php @@ -80,7 +80,7 @@ class story extends control break; } } - $users = $this->user->getPairs('nodeleted'); + $users = $this->user->getPairs('nodeleted|pofirst'); $moduleOptionMenu = $this->tree->getOptionMenu($productID, $viewType = 'story'); /* Set menu. */ diff --git a/module/user/model.php b/module/user/model.php index 30b4f9c9db..cb1a357b13 100644 --- a/module/user/model.php +++ b/module/user/model.php @@ -59,26 +59,43 @@ class userModel extends model /** * Get the account=>relaname pairs. * - * @param string $params noletter|noempty|noclosed|nodeleted|withguest, can be sets of theme + * @param string $params noletter|noempty|noclosed|nodeleted|withguest|pofirst|devfirst|qafirst|pmfirst, can be sets of theme * @access public * @return array */ public function getPairs($params = '') { - $users = $this->dao->select('account, realname')->from(TABLE_USER) - ->beginIF(strpos($params, 'nodeleted') !== false) - ->where('deleted')->eq(0) - ->fi() - ->orderBy('account')->fetchPairs(); - foreach($users as $account => $realName) + /* Set the query fields and orderBy condition. + * + * If there's xxfirst in the params, use INSTR function to get the position of role fields in a order string, + * thus to make sure users of this role at first. + */ + $fields = 'account, realname'; + if(strpos($params, 'pofirst') !== false) $fields .= ", INSTR(',po,', role) AS roleOrder"; + if(strpos($params, 'devfirst')!== false) $fields .= ", INSTR(',dev,', role) AS roleOrder"; + if(strpos($params, 'qafirst') !== false) $fields .= ", INSTR(',qa,', role) AS roleOrder"; + if(strpos($params, 'pmfirst') !== false) $fields .= ", INSTR(',pm,', role) AS roleOrder"; + $orderBy = strpos($params, 'first') !== false ? 'roleOrder DESC, account' : 'account'; + + /* Get raw records. */ + $users = $this->dao->select($fields)->from(TABLE_USER) + ->beginIF(strpos($params, 'nodeleted') !== false)->where('deleted')->eq(0)->fi() + ->orderBy($orderBy) + ->fetchAll('account'); + + /* Cycle the user records to append the first letter of his account. */ + foreach($users as $account => $user) { $firstLetter = ucfirst(substr($account, 0, 1)) . ':'; if(strpos($params, 'noletter') !== false) $firstLetter = ''; - $users[$account] = $firstLetter . ($realName ? $realName : $account); + $users[$account] = $firstLetter . ($user->realname ? $user->realname : $account); } + + /* Append empty, closed, and guest users. */ if(strpos($params, 'noempty') === false) $users = array('' => '') + $users; if(strpos($params, 'noclosed') === false) $users = $users + array('closed' => 'Closed'); if(strpos($params, 'withguest') !== false) $users = $users + array('guest' => 'Guest'); + return $users; }