ajaxgetdropmenu.html.php 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201
  1. <?php
  2. /**
  3. * The ajaxgetdropmenu view file of project module of ZenTaoPMS.
  4. *
  5. * @copyright Copyright 2023 禅道软件(青岛)有限公司(ZenTao Software (Qingdao) Co., Ltd. www.cnezsoft.com)
  6. * @author Sun Guangming<sunguangming@easycorp.ltd>
  7. * @package project
  8. * @version $Id
  9. * @link https://www.zentao.net
  10. */
  11. namespace zin;
  12. if(in_array("{$module}-{$method}", $config->index->oldPages))
  13. {
  14. include '../view/ajaxgetdropmenu.html.php';
  15. return;
  16. }
  17. /**
  18. * 获取项目所属分组。
  19. * Get project group.
  20. *
  21. * @param object $project
  22. * @return string
  23. */
  24. $getProjectGroup = function($project) use($involvedProjects): string
  25. {
  26. if(isset($involvedProjects[$project->id]) && $project->status != 'closed') return 'my';
  27. if($project->status == 'closed') return 'closed';
  28. return 'other';
  29. };
  30. $projectNames = array();
  31. foreach($projects as $programID => $programProjects)
  32. {
  33. $projectNames = array_merge($projectNames, array_column($programProjects, 'name'));
  34. }
  35. $projectPinyinNames = common::convert2Pinyin($projectNames);
  36. if($extra == 'selectmode')
  37. {
  38. /**
  39. * 定义每个分组下的选项数据列表。
  40. * Define the grouped data list.
  41. */
  42. $data = array();
  43. /* 处理分组数据。Process grouped data. */
  44. foreach($projects as $programID => $programProjects)
  45. {
  46. $programID = isset($programs[$programID]) ? $programID : 0;
  47. if(empty($data[$programID]))
  48. {
  49. $programItem = array();
  50. $programItem['id'] = $programID;
  51. $programItem['text'] = isset($programs[$programID]) ? zget($programs, $programID) : $lang->project->emptyProgram;
  52. $programItem['subtitle'] = $lang->program->common;
  53. $programItem['items'] = array();
  54. $data[$programID] = $programItem;
  55. }
  56. else
  57. {
  58. $programItem = $data[$programID];
  59. }
  60. foreach($programProjects as $index => $project)
  61. {
  62. $item = array();
  63. $item['id'] = $project->id;
  64. $item['text'] = $project->name;
  65. $item['icon'] = $project->model == 'scrum' ? 'sprint' : $project->model;
  66. $item['keys'] = zget($projectPinyinNames, $project->name, '');
  67. $item['value'] = $project->id;
  68. $data[$programID]['items'][] = $item;
  69. }
  70. }
  71. $data = array_values($data);
  72. renderJson($data);
  73. }
  74. elseif(!empty($project->isTpl))
  75. {
  76. /* 模板单独渲染。 */
  77. foreach($projects as $programID => $programProjects)
  78. {
  79. foreach($programProjects as $index => $project)
  80. {
  81. $item = array();
  82. $item['id'] = $project->id;
  83. $item['text'] = $project->name;
  84. $item['icon'] = $project->model == 'scrum' ? 'sprint' : $project->model;
  85. $item['keys'] = zget($projectPinyinNames, $project->name, '');
  86. $item['involved'] = isset($involvedProjects[$project->id]);
  87. $item['url'] = helper::createLink('project', 'execution', "status=undone&projectID={$project->id}");
  88. $data[] = $item;
  89. }
  90. }
  91. $json = array();
  92. $json['data'] = $data;
  93. $json['searchHint'] = $lang->searchAB;
  94. $json['itemType'] = 'project';
  95. renderJson($json);
  96. }
  97. else
  98. {
  99. /**
  100. * 定义每个分组下的选项数据列表。
  101. * Define the grouped data list.
  102. */
  103. $data = array('my' => array(), 'other' => array(), 'closed' => array());
  104. /**
  105. * 定义高亮的分组标签。
  106. * Define the active group.
  107. */
  108. $activeGroup = '';
  109. /* 处理分组数据。Process grouped data. */
  110. foreach($projects as $programID => $programProjects)
  111. {
  112. $programID = isset($programs[$programID]) ? $programID : 0;
  113. $programItem = array();
  114. $programItem['id'] = $programID;
  115. $programItem['type'] = 'program';
  116. $programItem['text'] = isset($programs[$programID]) ? zget($programs, $programID) : $lang->project->emptyProgram;
  117. $programItem['items'] = array();
  118. if(!$programID) $programItem['label'] = '';
  119. foreach($programProjects as $index => $project)
  120. {
  121. $group = $getProjectGroup($project);
  122. $item = array();
  123. $item['id'] = $project->id;
  124. $item['text'] = $project->name;
  125. $item['icon'] = $project->model == 'scrum' ? 'sprint' : $project->model;
  126. $item['keys'] = zget($projectPinyinNames, $project->name, '');
  127. $item['involved'] = isset($involvedProjects[$project->id]);
  128. if($useLink == 1)
  129. {
  130. $item['url'] = sprintf($link, $project->id);
  131. if((empty($project->multiple) || $project->type == 'kanban' || $project->model == 'kanban') && strpos($link, 'ajaxSwitchBelong') === false) $item['url'] = helper::createLink('project', 'index', "projectID={$project->id}");
  132. }
  133. else
  134. {
  135. $item['url'] = '#';
  136. }
  137. if(empty($activeGroup) && $projectID == $project->id) $activeGroup = $group;
  138. if($config->systemMode == 'light' || $config->vision == 'lite' || !helper::hasFeature('program'))
  139. {
  140. $data[$group][] = $item;
  141. }
  142. else
  143. {
  144. if(!isset($data[$group][$programID])) $data[$group][$programID] = $programItem;
  145. $data[$group][$programID]['items'][] = $item;
  146. }
  147. }
  148. }
  149. /* 将分组数据转换为索引数组。Format grouped data to indexed array. */
  150. foreach($data as $key => $value) $data[$key] = array_values($value);
  151. /**
  152. * 定义每个分组名称信息,包括可展开的已关闭分组。
  153. * Define every group name, include expanded group.
  154. */
  155. $tabs = array();
  156. $tabs[] = array('name' => 'my', 'text' => $lang->project->mine, 'active' => $activeGroup === 'my');
  157. $tabs[] = array('name' => 'other', 'text' => $lang->project->other, 'active' => $activeGroup === 'other');
  158. $tabs[] = array('name' => 'closed', 'text' => $lang->project->closedProject);
  159. /**
  160. * 定义最终的 JSON 数据。
  161. * Define the final json data.
  162. */
  163. $json = array();
  164. $json['data'] = $data;
  165. $json['tabs'] = $tabs;
  166. $json['searchHint'] = $lang->searchAB;
  167. $json['labelMap'] = array('program' => $lang->program->common);
  168. $json['expandName'] = 'closed';
  169. $json['itemType'] = 'project';
  170. /**
  171. * 渲染 JSON 字符串并发送到客户端。
  172. * Render json data to string and send to client.
  173. */
  174. renderJson($json);
  175. }