feedback.class.php 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. <?php
  2. class feedbackUser extends userModel
  3. {
  4. /**
  5. * Get has feedback priv.
  6. *
  7. * @param object $pager
  8. * @param string $vision
  9. * @access public
  10. * @return array
  11. */
  12. public function getHasFeedbackPriv($pager = null, $vision = 'lite')
  13. {
  14. $groups = $this->dao->select('`group`')->from(TABLE_GROUPPRIV)->where('module')->eq('feedback')->andWhere('method')->eq('create')->fetchPairs('group', 'group');
  15. return $this->dao->select('distinct t1.`account`,t1.realname,t1.feedback')->from(TABLE_USER)->alias('t1')
  16. ->leftJoin(TABLE_USERGROUP)->alias('t2')->on('t1.`account`=t2.`account`')
  17. ->where('t1.deleted')->eq(0)
  18. ->beginIF($vision != 'all')
  19. ->andWhere('t1.visions', true)->eq($vision)
  20. ->orWhere('t2.`group`')->in($groups)
  21. ->markRight(1)->fi()
  22. ->andWhere('t1.`account`')->notIN(trim($this->app->company->admins, ','))
  23. ->orderBy('t1.`account`')
  24. ->page($pager, 't1.`account`')
  25. ->fetchAll('account');
  26. }
  27. /**
  28. * 获取用户名和真实姓名的键值对。
  29. * Get account and realname pairs.
  30. *
  31. * @param string $params noletter|noempty|nodeleted|noclosed|withguest|pofirst|devfirst|qafirst|pmfirst|realname|outside|inside|all, can be sets of theme
  32. * @param string|array $usersToAppended account1,account2
  33. * @param int $maxCount
  34. * @param string|array $accounts
  35. * @access public
  36. * @return array
  37. */
  38. public function getPairs($params = '', $usersToAppended = '', $maxCount = 0, $accounts = '')
  39. {
  40. if(defined('TUTORIAL')) return $this->loadModel('tutorial')->getUserPairs();
  41. /* Set the query fields and orderBy condition.
  42. *
  43. * If there's xxfirst in the params, use INSTR function to get the position of role fields in a order string,
  44. * thus to make sure users of this role at first.
  45. */
  46. $fields = 'id, account, realname, deleted';
  47. $type = (strpos($params, 'outside') === false) ? 'inside' : 'outside';
  48. if(strpos($params, 'pofirst') !== false) $fields .= ", INSTR(',pd,po,', role) AS roleOrder";
  49. if(strpos($params, 'pdfirst') !== false) $fields .= ", INSTR(',po,pd,', role) AS roleOrder";
  50. if(strpos($params, 'qafirst') !== false) $fields .= ", INSTR(',qd,qa,', role) AS roleOrder";
  51. if(strpos($params, 'qdfirst') !== false) $fields .= ", INSTR(',qa,qd,', role) AS roleOrder";
  52. if(strpos($params, 'pmfirst') !== false) $fields .= ", INSTR(',td,pm,', role) AS roleOrder";
  53. if(strpos($params, 'devfirst')!== false) $fields .= ", INSTR(',td,pm,qd,qa,dev,', role) AS roleOrder";
  54. $orderBy = strpos($params, 'first') !== false ? 'roleOrder DESC, account' : 'account';
  55. $keyField = strpos($params, 'useid') !== false ? 'id' : 'account';
  56. $users = $this->dao->select($fields)->from(TABLE_USER)
  57. ->where('1=1')
  58. ->beginIF(strpos($params, 'all') === false)->andWhere('type')->eq($type)->fi()
  59. ->beginIF($accounts)->andWhere('account')->in($accounts)->fi()
  60. ->beginIF(strpos($params, 'nodeleted') !== false or empty($this->config->user->showDeleted))->andWhere('deleted')->eq('0')->fi()
  61. ->beginIF(strpos($params, 'nofeedback') !== false)->andWhere('visions')->ne('lite')->fi()
  62. ->beginIF($accounts)->andWhere('account')->in($accounts)->fi()
  63. ->beginIF($this->config->vision and !in_array($this->app->rawModule, array('kanban', 'feedback')))->andWhere("CONCAT(',', visions, ',')")->like("%,{$this->config->vision},%")->fi()
  64. ->orderBy($orderBy)
  65. ->beginIF($maxCount)->limit($maxCount)->fi()
  66. ->fetchAll($keyField);
  67. $this->processMoreLink($params, $usersToAppended, $maxCount, count($users));
  68. $extraUsers = $this->fetchExtraUsers($usersToAppended, $fields, $keyField);
  69. if($usersToAppended) $users = arrayUnion($users, $extraUsers);
  70. $users = $this->processDisplayValue($users, $params);
  71. $users = $this->setCurrentUserFirst($users);
  72. /* Append empty, closed, and guest users. */
  73. if(strpos($params, 'noclosed') === false) $users['closed'] = 'Closed';
  74. if(strpos($params, 'withguest') !== false) $users['guest'] = 'Guest';
  75. return $users;
  76. }
  77. /**
  78. * Get product users from user view.
  79. *
  80. * @param int $productID
  81. * @access public
  82. * @return array
  83. */
  84. public function getProductViewUsers($productID)
  85. {
  86. if(empty($productID)) return array();
  87. $products = $this->dao->select('*')->from(TABLE_PRODUCT)->where('id')->in($productID)->andWhere('acl')->ne('open')->fetchAll('id');
  88. if(empty($products)) return array();
  89. list($productTeams, $productStakeholders) = $this->getProductMembers($products);
  90. /* Get white list group. */
  91. $whiteListGroup = array();
  92. $stmt = $this->dao->select('objectID,account')->from(TABLE_ACL)
  93. ->where('objectType')->eq('product')
  94. ->andWhere('objectID')->in($productID)
  95. ->query();
  96. while($whiteList = $stmt->fetch()) $whiteListGroup[$whiteList->objectID][$whiteList->account] = $whiteList->account;
  97. /* Get products' admins. */
  98. $productAdmins = $this->loadModel('group')->getAdmins(array($productID), 'products');
  99. /* Get product view list. */
  100. $product = $products[$productID];
  101. $teams = zget($productTeams, $productID, array());
  102. $stakeholders = zget($productStakeholders, $productID, array());
  103. $whiteList = zget($whiteListGroup, $productID, array());
  104. $admins = zget($productAdmins, $productID, array());
  105. return $this->getProductViewListUsers($product, $teams, $stakeholders, $whiteList, $admins);
  106. }
  107. }