mapjira2zentao.html.php 9.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272
  1. <?php
  2. /**
  3. * The map jira to zentao view file of convert 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 Gang Liu <liugang@easycorp.ltd>
  7. * @package convert
  8. * @link https://www.zentao.net
  9. */
  10. namespace zin;
  11. include('jiraside.html.php');
  12. $buildHeader = function(string $label): h
  13. {
  14. return div
  15. (
  16. setClass("flex-1 text-center text-md font-bold"),
  17. $label
  18. );
  19. };
  20. $buildJira = function(string $name, string $label, int $value): h
  21. {
  22. return div
  23. (
  24. setClass("flex-1 text-center"),
  25. $label,
  26. input
  27. (
  28. set::type('hidden'),
  29. set::name("{$name}[]"),
  30. set::value($value)
  31. )
  32. );
  33. };
  34. $buildZenTao = function(string $name, array $items, $index = '', string $key = '', string $default = '') use($jiraRelation, $defaultValue): h
  35. {
  36. $default = !empty($defaultValue[$name][$key]) ? $defaultValue[$name][$key] : $default;
  37. return div
  38. (
  39. setClass("flex-1 mx-2"),
  40. picker
  41. (
  42. set::name("{$name}[$index]"),
  43. set::items($items),
  44. set::value(!empty($jiraRelation[$name][$index]) ? $jiraRelation[$name][$index] : $default)
  45. )
  46. );
  47. };
  48. $rows = array();
  49. if($step == 'object')
  50. {
  51. $rows[] = div
  52. (
  53. setClass('panel-title'),
  54. span(setClass('text-lg'), $lang->convert->jira->steps[$step]),
  55. span
  56. (
  57. icon('help self-center text-warning mr-1 pl-2'),
  58. setClass('self-center font-medium text-gray'),
  59. $lang->convert->jira->mapObjectNotice
  60. )
  61. );
  62. $rows[] = formRow
  63. (
  64. $buildHeader($lang->convert->jira->jiraObject),
  65. $buildHeader($lang->convert->jira->zentaoObject)
  66. );
  67. foreach($issueTypeList as $id => $issueType)
  68. {
  69. $value = $issueType->pname;
  70. $rows[] = formRow
  71. (
  72. $buildJira('jiraObject', $value, $id),
  73. $buildZenTao('zentaoObject', $zentaoObjects, $id, $value)
  74. );
  75. }
  76. }
  77. if(!empty($jiraRelation['zentaoObject']) && in_array($step, array_keys($jiraRelation['zentaoObject'])))
  78. {
  79. if(!empty($fieldList))
  80. {
  81. $rows[] = div
  82. (
  83. setClass('panel-title'),
  84. span(setClass('text-lg whitespace-nowrap'), $lang->convert->jira->objectField),
  85. span
  86. (
  87. icon('help self-center text-warning mr-1 pl-2'),
  88. setClass('self-center font-medium text-gray'),
  89. $lang->convert->jira->mapFieldNotice
  90. )
  91. );
  92. $rows[] = formRow
  93. (
  94. $buildHeader(sprintf($lang->convert->jira->jiraField, zget($issueTypeList[$step], 'pname', ''))),
  95. $buildHeader(sprintf($lang->convert->jira->zentaoField, zget($zentaoObjects, $jiraRelation['zentaoObject'][$step])))
  96. );
  97. $zentaoFields = $this->convert->getZentaoFields($jiraRelation['zentaoObject'][$step]);
  98. foreach($fieldList as $id => $field)
  99. {
  100. $rows[] = formRow
  101. (
  102. $buildJira("jiraField$step", $field, $id),
  103. $buildZenTao("zentaoField$step", $zentaoFields, $id, $field, 'add_field')
  104. );
  105. }
  106. $rows[] = divider();
  107. }
  108. if(!empty($statusList))
  109. {
  110. $zentaoStatusList = $this->convert->getZentaoStatus($jiraRelation['zentaoObject'][$step]);
  111. $defaultStatus = $this->convert->convertStatus($jiraRelation['zentaoObject'][$step], '', '');
  112. $rows[] = div
  113. (
  114. setClass('panel-title'),
  115. span(setClass('text-lg whitespace-nowrap'), $lang->convert->jira->objectStatus),
  116. span
  117. (
  118. icon('help self-center text-warning mr-1 pl-2'),
  119. setClass('self-center font-medium text-gray'),
  120. sprintf($lang->convert->jira->mapStatusNotice, zget($zentaoStatusList, $defaultStatus))
  121. )
  122. );
  123. $rows[] = formRow
  124. (
  125. $buildHeader(sprintf($lang->convert->jira->jiraStatus, zget($issueTypeList[$step], 'pname', ''))),
  126. $buildHeader(sprintf($lang->convert->jira->zentaoStatus, zget($zentaoObjects, $jiraRelation['zentaoObject'][$step]))),
  127. in_array($jiraRelation['zentaoObject'][$step], array('requirement', 'story', 'epic')) ? $buildHeader(sprintf($lang->convert->jira->zentaoStage, zget($zentaoObjects, $jiraRelation['zentaoObject'][$step]))) : null
  128. );
  129. foreach($statusList as $id => $status)
  130. {
  131. $rows[] = formRow
  132. (
  133. $buildJira("jiraStatus$step", $status, $id),
  134. $buildZenTao("zentaoStatus$step", $zentaoStatusList, $id, $status),
  135. in_array($jiraRelation['zentaoObject'][$step], array('requirement', 'story', 'epic')) ? $buildZenTao("zentaoStage$step", $lang->story->stageList, $id, $status) : null
  136. );
  137. }
  138. }
  139. if(!empty($jiraActions))
  140. {
  141. $rows[] = formRow
  142. (
  143. setClass('hidden'),
  144. $buildHeader(sprintf($lang->convert->jira->jiraAction, zget($issueTypeList[$step], 'pname', ''))),
  145. $buildHeader(sprintf($lang->convert->jira->zentaoAction, zget($zentaoObjects, $jiraRelation['zentaoObject'][$step])))
  146. );
  147. $zentaoActions = $this->convert->getZentaoActions($jiraRelation['zentaoObject'][$step]);
  148. foreach($jiraActions['actions'] as $id => $action)
  149. {
  150. $value = $action['name'];
  151. $rows[] = formRow
  152. (
  153. setClass('hidden'),
  154. $buildJira("jiraAction$step", $value, $id),
  155. $buildZenTao("zentaoAction$step", $zentaoActions, $id, $value, 'add_action')
  156. );
  157. }
  158. }
  159. if(in_array($jiraRelation['zentaoObject'][$step], array('bug', 'task', 'story', 'requirement', 'epic', 'feedback', 'ticket')))
  160. {
  161. $rows[] = divider();
  162. $rows[] = div
  163. (
  164. setClass('panel-title'),
  165. span(setClass('text-lg whitespace-nowrap'), $lang->convert->jira->objectResolution),
  166. span
  167. (
  168. icon('help self-center text-warning mr-1 pl-2'),
  169. setClass('self-center font-medium text-gray'),
  170. $lang->convert->jira->mapReasonNotice
  171. )
  172. );
  173. $rows[] = formRow
  174. (
  175. $buildHeader(sprintf($lang->convert->jira->jiraResolution, zget($issueTypeList[$step], 'pname', ''))),
  176. $buildHeader(sprintf($jiraRelation['zentaoObject'][$step] == 'bug' ? $lang->convert->jira->zentaoResolution : $lang->convert->jira->zentaoReason, zget($zentaoObjects, $jiraRelation['zentaoObject'][$step])))
  177. );
  178. foreach($resolutionList as $id => $resolution)
  179. {
  180. $value = $resolution->pname;
  181. $module = $jiraRelation['zentaoObject'][$step];
  182. if($module) $app->loadLang($module);
  183. if($module == 'epic' || $module == 'story' || $module == 'requirement') $module = 'story';
  184. if($module == 'bug')
  185. {
  186. $reasonList = $lang->bug->resolutionList + array('add_resolution' => $lang->convert->add);
  187. }
  188. else if($module == 'feedback' || $module == 'ticket')
  189. {
  190. $reasonList = $lang->{$module}->closedReasonList + array('add_closedReason' => $lang->convert->add);
  191. }
  192. else
  193. {
  194. $reasonList = $lang->{$module}->reasonList + array('add_reason' => $lang->convert->add);
  195. }
  196. if($module == 'epic' || $module == 'story' || $module == 'requirement') unset($reasonList['subdivided']);
  197. $rows[] = formRow
  198. (
  199. $buildJira("jiraResolution$step", $value, $id),
  200. $module == 'bug' ? $buildZenTao("zentaoResolution$step", $reasonList, $id, $value) : $buildZenTao("zentaoReason$step", $reasonList, $id, $value)
  201. );
  202. }
  203. }
  204. }
  205. if($step == 'relation')
  206. {
  207. $rows[] = div
  208. (
  209. setClass('panel-title'),
  210. span(setClass('text-lg'), $lang->convert->jira->steps[$step]),
  211. span
  212. (
  213. icon('help self-center text-warning mr-1 pl-2'),
  214. setClass('self-center font-medium text-gray'),
  215. $lang->convert->jira->mapRelationNotice
  216. )
  217. );
  218. $rows[] = formRow
  219. (
  220. $buildHeader($lang->convert->jira->jiraLinkType),
  221. $buildHeader($lang->convert->jira->zentaoLinkType)
  222. );
  223. $relationList = $this->convert->getZentaoRelationList();
  224. foreach($linkTypeList as $id => $linkType)
  225. {
  226. $value = $linkType->linkname;
  227. $rows[] = formRow
  228. (
  229. $buildJira('jiraLinkType', $value, $id),
  230. $buildZenTao('zentaoLinkType', $relationList, $id)
  231. );
  232. }
  233. }
  234. div
  235. (
  236. setClass('flex'),
  237. panel
  238. (
  239. setClass('w-1/4 mr-4 overflow-y-scroll scrollbar-thin scrollbar-hover'),
  240. setStyle(array('max-height' => 'calc(100vh - 130px)')),
  241. $items
  242. ),
  243. panel
  244. (
  245. setClass('flex-1 m-0 p-0 overflow-y-scroll scrollbar-thin scrollbar-hover'),
  246. setStyle(array('max-height' => 'calc(100vh - 130px)')),
  247. formPanel
  248. (
  249. on::change('[name^="zentaoField"]', 'changeField'),
  250. setClass('p-0'),
  251. set::actionsClass('hidden'),
  252. $rows
  253. )
  254. )
  255. );
  256. render();