browse.html.php 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. <?php
  2. /**
  3. * The browse view file of review module of ZenTaoPMS.
  4. * @copyright Copyright 2009-2024 禅道软件(青岛)有限公司(ZenTao Software (Qingdao) Co., Ltd. www.zentao.net)
  5. * @license ZPL(https://zpl.pub/page/zplv12.html) or AGPL(https://www.gnu.org/licenses/agpl-3.0.en.html)
  6. * @author Mengyi Liu
  7. * @package review
  8. * @link https://www.zentao.net
  9. */
  10. namespace zin;
  11. if($project->model != 'ipd') unset($lang->review->typeList['decision']);
  12. jsVar('canEditCM', hasPriv('cm', 'edit'));
  13. jsVar('canEditChange', hasPriv('projectchange', 'edit'));
  14. $viewName = $lang->review->typeList[$type];
  15. $items = array();
  16. foreach($lang->review->typeList as $key => $value)
  17. {
  18. if(!$hasDeliverable && $key == 'deliverable') continue;
  19. if(!$hasBaseline && $key == 'baseline') continue;
  20. if(!$hasProjectchange && $key == 'projectchange') continue;
  21. $items[] = array('text' => $value, 'url' => createLink('review', 'browse', "projectID={$projectID}&type={$key}&browseType={$browseType}&orderBy={$orderBy}&param={$param}&recTotal={$recTotal}&recPerPage={$recPerPage}&pageID={$pageID}"));
  22. }
  23. $dropdown = in_array($project->model, array('scrum', 'agileplus')) ? null : dropdown
  24. (
  25. to('trigger', btn($viewName, setClass('ghost'))),
  26. set::items($items)
  27. );
  28. $queryMenuLink = createLink('review', 'browse', "projectID={$projectID}&type={$type}&browseType={$browseType}&orderBy={$orderBy}&param={queryID}");
  29. featureBar
  30. (
  31. to::before($dropdown),
  32. set::current($browseType),
  33. set::linkParams("project={$projectID}&type={$type}&browseType={key}&orderBy={$orderBy}&param={$param}&recTotal={$recTotal}&recPerPage={$recPerPage}&pageID={$pageID}"),
  34. set::queryMenuLinkCallback(array(function ($key) use ($queryMenuLink) {
  35. return str_replace('{queryID}', (string)$key, $queryMenuLink);
  36. })),
  37. li(searchToggle(set::open($browseType == 'bysearch')))
  38. );
  39. $canBeChanged = common::canModify('project', $project);
  40. if(in_array($project->model, array('scrum', 'aglieplus')) && !hasPriv('review', 'submitdeliverable')) $canBeChanged = false;
  41. if(!isInModal())
  42. {
  43. toolbar
  44. (
  45. $canBeChanged && hasPriv('review', 'create') ? btn
  46. (
  47. setClass('primary review-create-btn'),
  48. set::icon('plus'),
  49. set::url(createLink('review', 'create', "project={$projectID}")),
  50. $lang->review->create
  51. ) : null
  52. );
  53. }
  54. $cols = $this->loadModel('datatable')->getSetting('review');
  55. if($browseType == 'reviewing' || $browseType == 'done')
  56. {
  57. $checkInfo = sprintf($lang->review->pageSummary, count($reviewList));
  58. }
  59. else
  60. {
  61. $waitReviews = $reviewingReviews = $passReviews = $auditingReviews = $doneReviews = 0;
  62. foreach($reviewList as $review)
  63. {
  64. if($review->status === 'draft') $waitReviews ++;
  65. if($review->status === 'reviewing') $reviewingReviews ++;
  66. if($review->status === 'pass') $passReviews ++;
  67. }
  68. $checkInfo = str_replace(array('%total%', '%wait%', '%reviewing%', '%pass%'), array(count($reviewList), $waitReviews, $reviewingReviews, $passReviews), $lang->review->pageAllSummary);
  69. }
  70. $reviewList = initTableData($reviewList, $cols, $this->review);
  71. foreach($reviewList as $reviewID => $review)
  72. {
  73. $review->rawCategory = $review->category;
  74. if($review->type == 'baseline') $review->category = $lang->review->typeList['baseline'];
  75. if($review->type == 'projectchange') $review->category = $lang->review->typeList['projectchange'];
  76. if($review->type == 'decision' && $review->category) $review->category = zget($pointPairs, $review->category, '');
  77. if($review->type == 'deliverable' && $review->category) $review->category = zget($deliverablePairs, $review->category, '');
  78. if(!empty($review->reviewedBy))
  79. {
  80. $reviewedBy = array();
  81. foreach(explode(',', $review->reviewedBy) as $reviewer)
  82. {
  83. if(!$reviewer) continue;
  84. $reviewedBy[$reviewer] = $users[$reviewer];
  85. }
  86. $reviewList[$reviewID]->reviewedBy = implode(',', array_filter($reviewedBy));
  87. }
  88. foreach($review->actions as $actionID => $action)
  89. {
  90. if($action['name'] == 'recall' && $review->status == 'reviewing' && $this->approval->canCancel($review)) $reviewList[$reviewID]->actions[$actionID]['disabled'] = false;
  91. if($action['name'] == 'progress' && empty($review->approval)) $reviewList[$reviewID]->actions[$actionID]['disabled'] = true;
  92. }
  93. }
  94. dtable
  95. (
  96. set::cols($cols),
  97. set::data(array_values($reviewList)),
  98. set::userMap($users),
  99. set::customCols(true),
  100. set::checkable(false),
  101. set::orderBy($orderBy),
  102. set::sortLink(inlink('browse', "project={$projectID}&type={$type}&browseType={$browseType}&orderBy={name}_{sortType}&param={$param}&recTotal={$pager->recTotal}&recPerPage={$pager->recPerPage}")),
  103. set::checkInfo(jsRaw("function(checkedIDList){return {html: '{$checkInfo}'}}")),
  104. set::footPager(usePager()),
  105. set::onRenderCell(jsRaw('window.renderCellCallback')),
  106. set::footer(array($checkInfo, 'flex','pager')),
  107. set::createTip($lang->review->create),
  108. set::createLink($canBeChanged && hasPriv('review', 'create') ? createLink('review', 'create', "project={$projectID}") : '')
  109. );
  110. render();