log.html.php 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161
  1. <?php
  2. /**
  3. * The log view file of repo 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 Zeng Gang<zenggang@easycorp.ltd>
  7. * @package repo
  8. * @link https://www.zentao.net
  9. */
  10. namespace zin;
  11. $module = $app->tab == 'devops' ? 'repo' : $app->tab;
  12. /* Project switch in second level nav. */
  13. dropmenu
  14. (
  15. set::module($module),
  16. set::tab($module),
  17. set::url(createLink($module, 'ajaxGetDropMenu', "objectID=$objectID&module={$app->rawModule}&method={$app->rawMethod}"))
  18. );
  19. $diffLink = $this->repo->createLink('diff', "repoID=$repoID&objectID=$objectID&entry=" . $this->repo->encodePath($entry) . "&oldrevision={oldRevision}&newRevision={newRevision}");
  20. jsVar('diffLink', $diffLink);
  21. jsVar('appTab', $app->tab);
  22. /* Prepare breadcrumb navigation data. */
  23. $breadcrumbItems = array();
  24. $path ? $breadcrumbItems[] = h::a
  25. (
  26. set::href($this->repo->createLink('log', "repoID=$repoID&branchID=&objectID=$objectID")),
  27. set('data-app', $app->tab),
  28. h::span('/', setStyle('margin', '0 5px'))
  29. ) : null;
  30. $paths = explode('/', $entry);
  31. $fileName = array_pop($paths);
  32. $postPath = '';
  33. foreach($paths as $pathName)
  34. {
  35. $postPath .= $pathName . '/';
  36. $breadcrumbItems[] = h::a
  37. (
  38. set::href($this->repo->createLink('log', "repoID=$repoID&branchID=&objectID=$objectID&entry=" . $this->repo->encodePath($postPath))),
  39. set('data-app', $app->tab),
  40. trim($pathName, '/')
  41. );
  42. $breadcrumbItems[] = h::span('/', setStyle('margin', '0 5px'));
  43. }
  44. if($fileName) $breadcrumbItems[] = h::span($fileName);
  45. foreach($logs as $log)
  46. {
  47. $log->revision = substr($log->revision, 0, 10);
  48. if (empty($log->relationField)) continue;
  49. $log->relations = '<div class="relationsField" title="' . $log->relationFieldTips . '">';
  50. foreach (array('stories' => 'story', 'designs' => 'design', 'tasks' => 'task', 'bugs' => 'bug') as $key => $value)
  51. {
  52. if (!empty($log->relationField[$key]))
  53. {
  54. $log->relations .= html::commonButton($lang->repo->{$value}, '', 'btn size-sm mx-2');
  55. foreach ($log->relationField[$key] as $item)
  56. {
  57. $log->relations .= html::a($item->url, '#' . $item->id);
  58. }
  59. }
  60. }
  61. $log->relations .= '</div>';
  62. }
  63. /* Disbale check all checkbox of table header */
  64. $config->repo->logDtable->fieldList['revision']['checkbox'] = jsRaw('(rowID) => rowID !== \'HEADER\'');
  65. $config->repo->logDtable->fieldList['revision']['link'] = array('module' => 'repo', 'method' => 'revision', 'params' => "repoID={$repoID}&objectID={$objectID}&revision={revision}");
  66. $logs = initTableData($logs, $config->repo->logDtable->fieldList);
  67. $footToolbar['items'][] = array('text' => $lang->repo->diff, 'className' => "size-sm btn-diff", 'btnType' => 'primary disabled', 'onClick' => jsRaw('window.diffClick'));
  68. /* Prepare repo select data. */
  69. $branchMenus = array();
  70. $tagMenus = array();
  71. $selected = '';
  72. foreach($branches as $branchName)
  73. {
  74. $selected = $branchName == $branchID ? $branchName : $selected;
  75. $base64BranchID = helper::safe64Encode(base64_encode($branchName));
  76. $branchLink = $this->createLink('repo', 'log', "repoID=$repoID&branchID=$base64BranchID&objectID=$objectID");
  77. $branchMenus[] = array('text' => $branchName, 'id' => $branchName, 'keys' => zget(common::convert2Pinyin(array($branchName), $branchName), ''), 'url' => $branchLink, 'data-app' => $app->tab);
  78. }
  79. foreach($tags as $tagName)
  80. {
  81. $selected = $tagName == $branchID ? $tagName : $selected;
  82. $base64TagID = helper::safe64Encode(base64_encode($tagName));
  83. $tagLink = $this->createLink('repo', 'log', "repoID=$repoID&branchID=$base64TagID&objectID=$objectID&path=");
  84. $tagMenus[] = array('text' => $tagName, 'id' => $tagName, 'keys' => zget(common::convert2Pinyin(array($tagName), $tagName), ''), 'url' => $tagLink, 'data-app' => $app->tab);
  85. }
  86. $menuData = array('branch' => $branchMenus, 'tag' => $tagMenus);
  87. $tabs = array(array('name' => 'branch', 'text' => $lang->repo->branch), array('name' => 'tag', 'text' => $lang->repo->tag));
  88. \zin\featureBar(
  89. /* Set back button. */
  90. in_array($source, array('browse')) ? backBtn
  91. (
  92. setClass('mr-5'),
  93. set::icon('back'),
  94. set::type('secondary'),
  95. set::back('repo-browse'),
  96. $lang->goback
  97. ) : null,
  98. formGroup
  99. (
  100. set::className('repo-select'),
  101. set::required(true),
  102. /* Switch projects. */
  103. (in_array($app->tab, array('project', 'execution')) && count($repoPairs) > 1) ? dropmenu
  104. (
  105. set::id('logRepoDropmenu'),
  106. set::text($repo->name),
  107. set::objectID($repo->id),
  108. set::url(createLink('repo', 'ajaxGetDropMenu', "repoID={$repo->id}&module=repo&method=log&projectID={$objectID}"))
  109. ) : null,
  110. /* Switch branches and labels. */
  111. ($repo->SCM != 'Subversion' && ($branches || $tags)) ? dropmenu
  112. (
  113. setID('logRepoBranchDropMenu'),
  114. set::objectID($selected),
  115. set::text($selected),
  116. set::data(array('data' => $menuData, 'tabs' => $tabs))
  117. ) : null
  118. ),
  119. $breadcrumbItems,
  120. div
  121. (
  122. $repo->SCM != 'Subversion' ? setClass('ml-4') : null,
  123. searchToggle
  124. (
  125. set::module('repoCommits'),
  126. set::open($browseType == 'bysearch')
  127. )
  128. )
  129. );
  130. dtable
  131. (
  132. set::id('repo-logs-table'),
  133. set::cols($config->repo->logDtable->fieldList),
  134. set::data($logs),
  135. set::onCheckChange(jsRaw('window.checkedChange')),
  136. set::canRowCheckable(jsRaw('function(rowID){return canRowCheckable(rowID);}')),
  137. set::footToolbar($footToolbar),
  138. set::footer(array('toolbar', 'flex', 'pager')),
  139. set::footPager(usePager('pager', 'noTotalCount')),
  140. set::showToolbarOnChecked(false)
  141. );
  142. render();