story.html.php 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. <?php
  2. /**
  3. * The story view file of projectstory module of ZenTaoPMS.
  4. * @copyright Copyright 2009-2023 禅道软件(青岛)有限公司(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 Tingting Dai <daitingting@easycorp.ltd>
  7. * @package projectstory
  8. * @link https://www.zentao.net
  9. */
  10. namespace zin;
  11. include($this->app->getModuleRoot() . 'ai/ui/promptmenu.html.php');
  12. jsVar('gradeGroup', $gradeGroup);
  13. $projectChangeLink = createLink('projectStory', 'story', "projectID={projectID}&productID=0&branch=&browseType=$browseType&param=$param&storyType=$storyType&orderBy=$orderBy&recTotal={$pager->recTotal}&recPerPage={$pager->recPerPage}&pageID={$pager->pageID}&from=$from&blockID=$blockID");
  14. $insertListLink = createLink('projectStory', 'story', "projectID=$projectID&productID=$productID&branch=$branch&browseType=$browseType&param=$param&storyType=$storyType&orderBy=$orderBy&recTotal={$pager->recTotal}&recPerPage={$pager->recPerPage}&pageID={$pager->pageID}&from=$from&blockID={blockID}");
  15. formPanel
  16. (
  17. setID('zentaolist'),
  18. setClass('mb-4-important'),
  19. set::title(sprintf($this->lang->doc->insertTitle, $this->lang->doc->zentaoList['projectStory'])),
  20. set::actions(array()),
  21. set::showExtra(false),
  22. to::titleSuffix
  23. (
  24. span
  25. (
  26. setClass('text-muted text-sm text-gray-600 font-light'),
  27. span(setClass('text-warning mr-1'), icon('help')),
  28. $lang->doc->previewTip
  29. )
  30. ),
  31. formRow
  32. (
  33. formGroup
  34. (
  35. set::width('1/2'),
  36. set::name('project'),
  37. set::label($lang->doc->project),
  38. set::control(array('required' => false)),
  39. set::items($projects),
  40. set::value($projectID),
  41. set::required(),
  42. span
  43. (
  44. setClass('error-tip text-danger hidden'),
  45. $lang->doc->emptyError
  46. ),
  47. on::change('[name="project"]')->do("loadModal('$projectChangeLink'.replace('{projectID}', $(this).val()))")
  48. )
  49. )
  50. );
  51. $queryMenuLink = createLink('projectStory', 'story', "projectID=$projectID&productID=$productID&branch=$branch&browseType=bySearch&param={queryID}&storyType=$storyType&orderBy=$orderBy&recTotal={$pager->recTotal}&recPerPage={$pager->recPerPage}&pageID={$pager->pageID}&from=$from&blockID=$blockID");
  52. featureBar
  53. (
  54. set::param($param),
  55. set::current($browseType),
  56. set::link(createLink('projectStory', 'story', "projectID=$projectID&productID=$productID&branch=$branch&browseType={key}&param=$param&storyType=$storyType&orderBy=$orderBy&recTotal={$pager->recTotal}&recPerPage={$pager->recPerPage}&pageID={$pager->pageID}&from=$from&blockID=$blockID")),
  57. set::queryMenuLinkCallback(array(function ($key) use ($queryMenuLink) {
  58. return str_replace('{queryID}', (string)$key, $queryMenuLink);
  59. })),
  60. set::isModal(),
  61. set::modalTarget('#stories_table'),
  62. li(searchToggle
  63. (
  64. set::simple(),
  65. set::open($browseType == 'bysearch'),
  66. set::module($config->product->search['module']),
  67. set::target('#docSearchForm'),
  68. set::onSearch(jsRaw('function(){$(this.element).closest(".modal").find("#featureBar .nav-item>.active").removeClass("active").find(".label").hide()}'))
  69. ))
  70. );
  71. div(setID('docSearchForm'));
  72. /* datatable columns. */
  73. $config->story->dtable->fieldlist['title']['title'] = $lang->story->title;
  74. $config->$storyType->dtable->fieldlist['assignedto']['assignlink']['module'] = $storyType;
  75. $setting = $this->loadmodel('datatable')->getsetting('product', 'browse', false, $storyType);
  76. if($storyType != 'story') unset($setting['taskcount'], $setting['bugcount'], $setting['casecount']);
  77. if($storyType == 'story' && $config->edition == 'ipd') unset($setting['roadmap']);
  78. $setting['title']['nestedtoggle'] = false;
  79. if(isset($setting['actions'])) unset($setting['actions']);
  80. foreach($setting as $key => $col)
  81. {
  82. if($key == 'assignedTo') $setting[$key]['type'] = 'user';
  83. $setting[$key]['sortType'] = false;
  84. if(isset($col['link'])) unset($setting[$key]['link']);
  85. if($key == 'title') $setting[$key]['link'] = array('url' => helper::createLink('{type}', 'view', 'storyID={id}&version={version}&param=0&storyType={type}'), 'data-toggle' => 'modal', 'data-size' => 'lg');
  86. }
  87. $cols = array_values($setting);
  88. /* datatable data. */
  89. $data = array();
  90. $options = array('storytasks' => $storyTasks, 'storybugs' => $storyBugs, 'storycases' => $storyCases, 'modules' => $modules, 'plans' => (isset($plans) ? $plans : array()), 'users' => $users, 'execution' => $project, 'roadmaps' => $roadmaps, 'reports' => $reports);
  91. foreach($stories as $story)
  92. {
  93. $story->rawmodule = $story->module;
  94. $story->from = $app->tab;
  95. $options['branches'] = zget($branchOptions, $story->product, array());
  96. $data[] = $this->story->formatStoryForList($story, $options, $storyType, $maxGradeGroup);
  97. }
  98. $footToolbar = array(array('text' => $lang->doc->insertText, 'data-on' => 'click', 'data-call' => "insertListToDoc('#projectStories', 'projectStory', $blockID, '$insertListLink')"));
  99. if($from == 'ai') $footToolbar = array(array('text' => $lang->doc->insertText, 'data-on' => 'click', 'data-call' => "insertListToAI('#projectStories', 'story')"));
  100. dtable
  101. (
  102. set::id('projectStories'),
  103. set::userMap($users),
  104. set::checkable(),
  105. set::cols($cols),
  106. set::data($data),
  107. set::noNestedCheck(),
  108. set::orderBy($orderBy),
  109. set::onRenderCell(jsRaw('window.renderCell')),
  110. set::footPager(usePager()),
  111. set::emptyTip($lang->story->noStory),
  112. set::footToolbar($footToolbar),
  113. set::afterRender(jsCallback()->call('toggleCheckRows', $idList)),
  114. set::onCheckChange(jsRaw('window.checkedChange')),
  115. set::height(400)
  116. );
  117. render();