view.html.php 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175
  1. <?php
  2. /**
  3. * The view view file of design 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 Shujie Tian<tianshujie@easycorp.ltd>
  7. * @package design
  8. * @link https://www.zentao.net
  9. */
  10. namespace zin;
  11. jsVar('type', strtolower($design->type));
  12. /* 版本列表。Version list. */
  13. $versions = array();
  14. for($i = $design->version; $i >= 1; $i--)
  15. {
  16. $versionItem = setting()
  17. ->text("#{$i}")
  18. ->url(inlink('view', "designID={$design->id}&version=$i"));
  19. $versionItem->selected($version == $i);
  20. $versions[] = $versionItem;
  21. }
  22. $versionBtn = count($versions) > 1 ? to::title(dropdown
  23. (
  24. btn(set::type('ghost'), setClass('text-link font-normal text-base'), "#{$version}"),
  25. set::items($versions)
  26. )) : null;
  27. detailHeader
  28. (
  29. set::backUrl(createLink('design', 'browse', "projectID={$design->project}")),
  30. to::title(entityLabel(set(array('entityID' => $design->id, 'level' => 1, 'text' => $design->name))), $design->deleted ? span(setClass('label danger'), $lang->deleted) : null),
  31. $versionBtn
  32. );
  33. $canModify = common::canModify('project', $project);
  34. /* Construct suitable actions for the current task. */
  35. $operateMenus = array();
  36. foreach($config->design->view->operateList['main'] as $operate)
  37. {
  38. if(!$canModify || !common::hasPriv('design', $operate) || $design->deleted || !$this->design->isClickable($design, $operate)) continue;
  39. if(empty($repos) && $operate == 'linkCommit')
  40. {
  41. $config->design->actionList[$operate]['url'] = createLink('repo', 'create', "projectID={$design->project}");
  42. $config->design->actionList[$operate]['data-app'] = 'project';
  43. unset($config->design->actionList[$operate]['data-toggle']);
  44. }
  45. $operateMenus[] = $config->design->actionList[$operate];
  46. }
  47. /* Construct common actions for task. */
  48. $commonActions = array();
  49. foreach($config->design->view->operateList['common'] as $operate)
  50. {
  51. if(!$canModify || !common::hasPriv('design', $operate) || $design->deleted || !empty($design->frozen)) continue;
  52. if($operate == 'delete') $config->design->actionList['delete']['class'] = 'ajax-submit';
  53. $commonActions[] = $config->design->actionList[$operate];
  54. }
  55. $moduleName = empty($project->hasProduct) ? 'projectstory' : (isset($design->storyInfo) ? $design->storyInfo->type : 'story');
  56. $storyName = zget($stories, $design->story, '');
  57. $storyItem = array();
  58. if(common::hasPriv($moduleName, 'view'))
  59. {
  60. $storyItem[] = a(
  61. set::href(helper::createLink($moduleName, 'view', "id={$design->story}")),
  62. $storyName
  63. );
  64. }
  65. else
  66. {
  67. $storyItem[] = $storyName;
  68. }
  69. if($this->design->isClickable($design, 'confirmStoryChange'))
  70. {
  71. $storyItem[] = span
  72. (
  73. '(',
  74. $lang->story->changed,
  75. common::hasPriv('design', 'confirmStoryChange') ? a
  76. (
  77. setClass('mx-1 px-1 primary-pale'),
  78. set::href(helper::createLink('design', 'confirmStoryChange', "id={$design->id}")),
  79. $lang->design->confirmStoryChange
  80. ) : '',
  81. ')'
  82. );
  83. }
  84. detailBody
  85. (
  86. $versionBtn,
  87. sectionList
  88. (
  89. section
  90. (
  91. setID('desc'),
  92. set::title($lang->design->desc),
  93. set::content(empty($design->desc) ? $lang->noDesc : $design->desc),
  94. set::useHtml(true)
  95. )
  96. ),
  97. $design->files ? fileList
  98. (
  99. set::files($design->files)
  100. ) : null,
  101. history(),
  102. floatToolbar
  103. (
  104. set::prefix
  105. (
  106. array(array('icon' => 'back', 'text' => $lang->goback, 'data-back' => 'design-browse,projectstory-track,my-effort,my-index', 'data-url' => createLink('design', 'browse', "projectID={$design->project}"), 'className' => 'open-url'))
  107. ),
  108. set::main($operateMenus),
  109. set::suffix($commonActions),
  110. set::object($design)
  111. ),
  112. detailSide
  113. (
  114. tabs
  115. (
  116. set::id('detailTabs'),
  117. tabPane
  118. (
  119. set::title($lang->design->basicInfo),
  120. tableData
  121. (
  122. item
  123. (
  124. set::name($lang->design->type),
  125. zget($lang->design->typeList, $design->type)
  126. ),
  127. item
  128. (
  129. set::name($lang->design->product),
  130. $design->productName
  131. ),
  132. item
  133. (
  134. set::name($lang->design->story),
  135. $storyItem
  136. ),
  137. helper::hasFeature('devops') ? item
  138. (
  139. set::name($lang->design->submission),
  140. html($design->commit)
  141. ) : null,
  142. item
  143. (
  144. set::name($lang->design->assignedTo),
  145. zget($users, $design->assignedTo)
  146. ),
  147. item
  148. (
  149. set::name($lang->design->createdBy),
  150. zget($users, $design->createdBy)
  151. ),
  152. item
  153. (
  154. set::name($lang->design->createdDate),
  155. substr($design->createdDate, 0, 11)
  156. )
  157. )
  158. )
  159. )
  160. )
  161. );
  162. /* ====== Render page ====== */
  163. render();