zentaomax.php 8.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266
  1. <?php
  2. /**
  3. * Get Nc list.
  4. *
  5. * @param int $browseType
  6. * @param string $orderBy
  7. * @param object $pager
  8. * @param string $status
  9. *
  10. * @access public
  11. * @return object
  12. */
  13. public function getNcList($browseType, $orderBy, $pager, $status = '')
  14. {
  15. $account = $this->app->user->account;
  16. return $this->dao->select('t1.*,t2.model')->from(TABLE_NC)->alias('t1')
  17. ->leftjoin(TABLE_PROJECT)->alias('t2')->on('t1.project = t2.id')
  18. ->where('t1.deleted')->eq(0)
  19. ->andWhere('t2.deleted')->eq(0)
  20. ->beginIF(!$this->app->user->admin)->andWhere('t1.project')->in($this->app->user->view->projects . ',' . $this->app->user->view->sprints)->fi()
  21. ->beginIF($browseType == 'assignedToMe')->andWhere('t1.assignedTo')->eq($account)->fi()
  22. ->beginIF($browseType == 'createdByMe')->andWhere('t1.createdBy')->eq($account)->fi()
  23. ->beginIF($browseType == 'resolvedByMe')->andWhere('t1.resolvedBy')->eq($account)->fi()
  24. ->beginIF($browseType == 'closedByMe')->andWhere('t1.closedBy')->eq($account)->fi()
  25. ->beginIF($status)->andWhere('t1.status')->in($status)->fi()
  26. ->orderBy('t1.' . $orderBy)
  27. ->page($pager)
  28. ->fetchAll('id');
  29. }
  30. /**
  31. * Get products pairs.
  32. *
  33. * @access public
  34. * @return array
  35. */
  36. public function getProductPairs()
  37. {
  38. return $this->dao->select('id, name')->from(TABLE_PRODUCT)
  39. ->where('deleted')->eq(0)
  40. ->beginIF(!$this->app->user->admin)->andWhere('id')->in($this->app->user->view->products)->fi()
  41. ->fetchPairs();
  42. }
  43. /**
  44. * AJAX: get project.
  45. *
  46. * @param string $browseType
  47. * @access public
  48. * @return string
  49. */
  50. public function ajaxGetProject($browseType)
  51. {
  52. $reviewProject = $this->loadModel('project')->getReviewProject();
  53. $projectName = array();
  54. foreach($reviewProject as $project)
  55. {
  56. $projectName[] = $project->name;
  57. }
  58. $projectPinYin = common::convert2Pinyin($projectName);
  59. $projectLink = helper::createLink('my', 'review', "program=%s&browseType=$browseType");
  60. $listLink = '';
  61. foreach($reviewProject as $item)
  62. {
  63. $listLink .= html::a(sprintf($projectLink, $item->id), '<i class="icon icon-folder-outline"></i>' . $item->name, '', 'title="' . $item->name . '" data-key="' . zget($projectPinYin, $item->name) . '"');
  64. }
  65. $html = '<div class="table-row"><div class="table-col col-left"><div class="list-group">' . $listLink . '</div>';
  66. $html .= '<div class="col-footer">';
  67. $html .= html::a(sprintf($projectLink, 0), '<i class="icon icon-cards-view muted"></i>' . $this->lang->exportTypeList['all'], '', 'class="not-list-item"');
  68. $html .= '</div></div>';
  69. $html .= '<div class="table-col col-right"><div class="list-group"></div>';
  70. return $html;
  71. }
  72. /**
  73. * Print cell data.
  74. *
  75. * @param object $col
  76. * @param object $review
  77. * @param array $users
  78. * @param array $products
  79. * @param array $pendingList
  80. * @access public
  81. * @return void
  82. */
  83. public function reviewPrintCell($col, $review, $users, $products = array(), $pendingList = array())
  84. {
  85. $canView = common::hasPriv('my', 'review');
  86. $canBatchAction = false;
  87. $account = $this->app->user->account;
  88. $id = $col->id;
  89. if($col->show)
  90. {
  91. $class = "c-$id";
  92. $title = '';
  93. if($id == 'id') $class .= ' cell-id';
  94. if($id == 'status')
  95. {
  96. $class .= ' status-' . $review->status;
  97. }
  98. if($id == 'result')
  99. {
  100. $class .= ' status-' . $review->result;
  101. }
  102. if($id == 'title')
  103. {
  104. $class .= ' text-left';
  105. $title = "title='{$review->title}'";
  106. }
  107. if($id == 'reviewedBy')
  108. {
  109. $reviewedByList = '';
  110. $reviewedBy = explode(',', trim($review->reviewedBy, ','));
  111. foreach($reviewedBy as $key => $account)
  112. {
  113. $account = trim($account);
  114. if(empty($account)) continue;
  115. $reviewedByList .= zget($users, $account) . " ";
  116. $reviewedBy[$key] = zget($users, $account);
  117. }
  118. $title = "title='{$reviewedByList}'";
  119. $reviewedBy = count($reviewedBy) > 1 ? $reviewedBy[0] . ' ...' : $reviewedBy[0];
  120. }
  121. echo "<td class='" . $class . "' $title>";
  122. switch($id)
  123. {
  124. case 'id':
  125. if($canBatchAction)
  126. {
  127. echo html::checkbox('reviewIDList', array($review->id => '')) . html::a(helper::createLink('review', 'view', "reviewID=$review->id"), sprintf('%03d', $review->id));
  128. }
  129. else
  130. {
  131. printf('%03d', $review->id);
  132. }
  133. break;
  134. case 'title':
  135. echo html::a(helper::createLink('review', 'view', "reviewID=$review->id", '', '', $review->project), $review->title);
  136. break;
  137. case 'category':
  138. echo zget($this->lang->baseline->objectList, $review->category);
  139. break;
  140. case 'product':
  141. echo zget($products, $review->product);
  142. break;
  143. case 'version':
  144. echo $review->version;
  145. break;
  146. case 'status':
  147. echo zget($this->lang->review->statusList, $review->status);
  148. break;
  149. case 'reviewedBy':
  150. echo $reviewedBy;
  151. break;
  152. case 'createdBy':
  153. echo zget($users, $review->createdBy);
  154. break;
  155. case 'createdDate':
  156. echo $review->createdDate;
  157. break;
  158. case 'deadline':
  159. echo $review->deadline;
  160. break;
  161. case 'lastReviewedDate':
  162. echo $review->lastReviewedDate;
  163. break;
  164. case 'lastAuditedDate':
  165. echo $review->lastAuditedDate;
  166. break;
  167. case 'result':
  168. if($review->status == 'reviewing') break;
  169. echo zget($this->lang->review->resultList, $review->result);
  170. break;
  171. case 'auditResult':
  172. echo zget($this->lang->review->auditResultList, $review->auditResult);
  173. break;
  174. case 'actions':
  175. $params = "reviewID=$review->id&from={$this->app->rawMethod}";
  176. if(isset($pendingList[$review->id]))
  177. {
  178. common::printIcon('review', 'assess', $params, $review, 'list', 'glasses');
  179. }
  180. else
  181. {
  182. common::printIcon('review', 'assess', $params, $review, 'list', 'glasses', '', 'disabled');
  183. }
  184. $review->approval = isset($review->approval) ? $review->approval : 0;
  185. common::printIcon('approval', 'progress', "approvalID=$review->approval", $review, 'list', 'list-alt', '', 'iframe', 1);
  186. }
  187. echo '</td>';
  188. }
  189. }
  190. /**
  191. * 获取审计列表。
  192. * Get audit list.
  193. *
  194. * @param string $browseType
  195. * @param string $orderBy
  196. * @param object $pager
  197. * @access public
  198. * @return array
  199. */
  200. public function getAuditList($browseType, $orderBy, $pager = null)
  201. {
  202. $account = $this->app->user->account;
  203. $reviewSQL = '';
  204. if(in_array($browseType, array('auditByMe', 'createdByMe')))
  205. {
  206. $reviewSQL = $this->dao->select('objectID')->from(TABLE_ACTION)
  207. ->where('actor')->eq($account)
  208. ->andWhere('objectType')->eq('review')
  209. ->andWhere('action')->eq($browseType == 'auditByMe' ? 'audited' : 'toaudit')
  210. ->get();
  211. }
  212. $reviews = $this->dao->select('t1.*, t2.version, t2.category, t2.product')->from(TABLE_REVIEW)->alias('t1')
  213. ->leftJoin(TABLE_OBJECT)->alias('t2')->on('t1.object=t2.id')
  214. ->where('t1.deleted')->eq(0)
  215. ->beginIF(in_array($browseType, array('auditByMe', 'createdByMe')))->andWhere('t1.id')->subIn($reviewSQL)->fi()
  216. ->orderBy($orderBy)
  217. ->page($pager)
  218. ->fetchAll('id');
  219. $approvals = $this->dao->select('max(approval) as approval,objectID')->from(TABLE_APPROVALOBJECT)
  220. ->where('objectType')->eq('review')
  221. ->andWhere('objectID')->in(array_keys($reviews))
  222. ->groupBy('objectID')
  223. ->fetchAll('objectID');
  224. $pendingReviews = $this->loadModel('approval')->getPendingReviews('review');
  225. foreach($reviews as $id => $review)
  226. {
  227. $reviews[$id]->approval = isset($approvals[$id]) ? $approvals[$id]->approval : 0;
  228. $reviews[$id]->isPending = !empty($pendingReviews[$id]);
  229. }
  230. return $reviews;
  231. }
  232. /**
  233. * 获取基线列表。
  234. * Get baseline list.
  235. *
  236. * @param string $browseType
  237. * @param string $orderBy
  238. * @param object $pager
  239. * @access public
  240. * @return array
  241. */
  242. public function getBaselineList($browseType, $orderBy, $pager = null)
  243. {
  244. return $this->dao->select('*')->from(TABLE_OBJECT)
  245. ->where('deleted')->eq(0)
  246. ->andWhere('type')->eq('taged')
  247. ->beginIF($browseType == 'createdBy')->andWhere('createdBy')->eq($this->app->user->account)->fi()
  248. ->orderBy($orderBy)
  249. ->page($pager)
  250. ->fetchAll();
  251. }