project.html.php 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  1. <?php
  2. /**
  3. * The UI file of product module of ZenTaoPMS.
  4. *
  5. * @copyright Copyright 2009-2023 禅道软件(青岛)有限公司(ZenTao Software (Qingdao) Co., Ltd. www.zentao.net)
  6. * @license ZPL(https://zpl.pub/page/zplv12.html) or AGPL(https://www.gnu.org/licenses/agpl-3.0.en.html)
  7. * @author chen.tao <chentao@easycorp.ltd>
  8. * @package product
  9. * @link https://www.zentao.net
  10. */
  11. namespace zin;
  12. dropmenu(set::text($product->name));
  13. /* Set feature bar. */
  14. featureBar
  15. (
  16. set::current($status),
  17. set::linkParams("status={key}&productID={$product->id}&branch={$branchID}&involved={$involved}&orderBy={$orderBy}&recTotal={$pager->recTotal}&recPerPage={$pager->recPerPage}"),
  18. checkbox
  19. (
  20. set::id('involved'),
  21. set::name('involved'),
  22. set::checked($this->cookie->involved),
  23. set::text($lang->project->mine)
  24. ),
  25. item(set(array
  26. (
  27. 'icon' => "help",
  28. 'text' => '',
  29. 'title' => $lang->product->projectInfo
  30. )))
  31. );
  32. /* Set right toolbar. */
  33. if($branchStatus != 'closed')
  34. {
  35. toolbar
  36. (
  37. !hasPriv('project', 'manageProducts') ? null : item(set(array
  38. (
  39. 'icon' => 'link',
  40. 'text' => $lang->product->link2Project,
  41. 'class' => "secondary",
  42. 'url' => '#link2Project',
  43. 'data-toggle' => 'modal'
  44. ))),
  45. !hasPriv('project', 'create') ? null : item(set(array
  46. (
  47. 'icon' => 'plus',
  48. 'text' => $lang->project->create,
  49. 'class' => "primary create-project-btn",
  50. 'url' => $this->createLink('project', 'createGuide', "programID=$product->program&from=project&productID={$product->id}&branchID=$branchID", '', true),
  51. 'data-toggle' => 'modal',
  52. 'data-type' => 'ajax'
  53. )))
  54. );
  55. }
  56. /* Create link2Project modal. */
  57. modal
  58. (
  59. set::id('link2Project'),
  60. set::title($lang->product->link2Project),
  61. set::footerClass('form-actions'),
  62. setData('size', '500px'),
  63. on::click('#saveButton', 'link2Project(e)'),
  64. to::footer
  65. (
  66. btn(setClass('primary'), set::id('saveButton'), $lang->save),
  67. btn(setClass('default'), set('data-dismiss', 'modal'), $lang->cancel)
  68. ),
  69. picker(setClass('pt-2'), set::name('project'), set::items($projects)),
  70. input(set::type('hidden'), set::name('product'), set::value($product->id)),
  71. input(set::type('hidden'), set::name('branch'), set::value($branchID))
  72. );
  73. /* Get column settings of the data table. */
  74. foreach($config->productProject->showFields as $showField)
  75. {
  76. if(isset($config->project->dtable->fieldList[$showField])) $cols[$showField] = $config->project->dtable->fieldList[$showField];
  77. if($showField == 'program')
  78. {
  79. $cols[$showField]['name'] = 'programName';
  80. $cols[$showField]['fixed'] = 'left';
  81. $cols[$showField]['type'] = 'shortTitle';
  82. $cols[$showField]['checkbox'] = false;
  83. $cols[$showField]['title'] = $lang->project->program;
  84. }
  85. $cols[$showField]['sortType'] = false;
  86. $cols[$showField]['group'] = 0;
  87. }
  88. $cols['id']['checkbox'] = false;
  89. if(!in_array($this->config->systemMode, array('ALM', 'PLM'))) unset($cols['program']);
  90. if(strpos('all,undone', $status) === false) unset($cols['status']);
  91. /* Set extend fields for workflow. */
  92. $extendFieldList = $this->product->getFlowExtendFields();
  93. foreach($extendFieldList as $field => $name)
  94. {
  95. $extCol = $config->product->dtable->extendField;
  96. $extCol['name'] = $field;
  97. $extCol['title'] = $name;
  98. $cols[$field] = $extCol;
  99. }
  100. /* Process data. */
  101. $waitCount = 0;
  102. $doingCount = 0;
  103. $suspendedCount = 0;
  104. $closedCount = 0;
  105. foreach($projectStats as $project)
  106. {
  107. if($project->status == 'wait') $waitCount ++;
  108. if($project->status == 'doing') $doingCount ++;
  109. if($project->status == 'suspended') $suspendedCount ++;
  110. if($project->status == 'closed') $closedCount ++;
  111. }
  112. $summary = sprintf($lang->project->summary, count($projectStats));
  113. if($status == 'all') $summary = sprintf($lang->project->allSummary, count($projectStats), $waitCount, $doingCount, $suspendedCount, $closedCount);
  114. dtable
  115. (
  116. set::cols($cols),
  117. set::data(array_values($projectStats)),
  118. set::onRenderCell(jsRaw('function(result, data){return window.renderCustomCell(result, data);}')),
  119. set::footer(array(array('html' => $summary, 'className' => "text-dark"), 'flex', 'pager')),
  120. set::footPager(usePager()),
  121. set::emptyTip($lang->project->empty),
  122. set::createTip($lang->project->create),
  123. set::createLink($branchStatus != 'closed' && hasPriv('project', 'create') ? createLink('project', 'createGuide', "programID=$product->program&from=project&productID={$product->id}&branchID=$branchID", '', true) : ''),
  124. set::createAttr("data-toggle='modal'")
  125. );
  126. render();