| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201 |
- <?php
- /**
- * The ajaxgetdropmenu view file of project module of ZenTaoPMS.
- *
- * @copyright Copyright 2023 禅道软件(青岛)有限公司(ZenTao Software (Qingdao) Co., Ltd. www.cnezsoft.com)
- * @author Sun Guangming<sunguangming@easycorp.ltd>
- * @package project
- * @version $Id
- * @link https://www.zentao.net
- */
- namespace zin;
- if(in_array("{$module}-{$method}", $config->index->oldPages))
- {
- include '../view/ajaxgetdropmenu.html.php';
- return;
- }
- /**
- * 获取项目所属分组。
- * Get project group.
- *
- * @param object $project
- * @return string
- */
- $getProjectGroup = function($project) use($involvedProjects): string
- {
- if(isset($involvedProjects[$project->id]) && $project->status != 'closed') return 'my';
- if($project->status == 'closed') return 'closed';
- return 'other';
- };
- $projectNames = array();
- foreach($projects as $programID => $programProjects)
- {
- $projectNames = array_merge($projectNames, array_column($programProjects, 'name'));
- }
- $projectPinyinNames = common::convert2Pinyin($projectNames);
- if($extra == 'selectmode')
- {
- /**
- * 定义每个分组下的选项数据列表。
- * Define the grouped data list.
- */
- $data = array();
- /* 处理分组数据。Process grouped data. */
- foreach($projects as $programID => $programProjects)
- {
- $programID = isset($programs[$programID]) ? $programID : 0;
- if(empty($data[$programID]))
- {
- $programItem = array();
- $programItem['id'] = $programID;
- $programItem['text'] = isset($programs[$programID]) ? zget($programs, $programID) : $lang->project->emptyProgram;
- $programItem['subtitle'] = $lang->program->common;
- $programItem['items'] = array();
- $data[$programID] = $programItem;
- }
- else
- {
- $programItem = $data[$programID];
- }
- foreach($programProjects as $index => $project)
- {
- $item = array();
- $item['id'] = $project->id;
- $item['text'] = $project->name;
- $item['icon'] = $project->model == 'scrum' ? 'sprint' : $project->model;
- $item['keys'] = zget($projectPinyinNames, $project->name, '');
- $item['value'] = $project->id;
- $data[$programID]['items'][] = $item;
- }
- }
- $data = array_values($data);
- renderJson($data);
- }
- elseif(!empty($project->isTpl))
- {
- /* 模板单独渲染。 */
- foreach($projects as $programID => $programProjects)
- {
- foreach($programProjects as $index => $project)
- {
- $item = array();
- $item['id'] = $project->id;
- $item['text'] = $project->name;
- $item['icon'] = $project->model == 'scrum' ? 'sprint' : $project->model;
- $item['keys'] = zget($projectPinyinNames, $project->name, '');
- $item['involved'] = isset($involvedProjects[$project->id]);
- $item['url'] = helper::createLink('project', 'execution', "status=undone&projectID={$project->id}");
- $data[] = $item;
- }
- }
- $json = array();
- $json['data'] = $data;
- $json['searchHint'] = $lang->searchAB;
- $json['itemType'] = 'project';
- renderJson($json);
- }
- else
- {
- /**
- * 定义每个分组下的选项数据列表。
- * Define the grouped data list.
- */
- $data = array('my' => array(), 'other' => array(), 'closed' => array());
- /**
- * 定义高亮的分组标签。
- * Define the active group.
- */
- $activeGroup = '';
- /* 处理分组数据。Process grouped data. */
- foreach($projects as $programID => $programProjects)
- {
- $programID = isset($programs[$programID]) ? $programID : 0;
- $programItem = array();
- $programItem['id'] = $programID;
- $programItem['type'] = 'program';
- $programItem['text'] = isset($programs[$programID]) ? zget($programs, $programID) : $lang->project->emptyProgram;
- $programItem['items'] = array();
- if(!$programID) $programItem['label'] = '';
- foreach($programProjects as $index => $project)
- {
- $group = $getProjectGroup($project);
- $item = array();
- $item['id'] = $project->id;
- $item['text'] = $project->name;
- $item['icon'] = $project->model == 'scrum' ? 'sprint' : $project->model;
- $item['keys'] = zget($projectPinyinNames, $project->name, '');
- $item['involved'] = isset($involvedProjects[$project->id]);
- if($useLink == 1)
- {
- $item['url'] = sprintf($link, $project->id);
- if((empty($project->multiple) || $project->type == 'kanban' || $project->model == 'kanban') && strpos($link, 'ajaxSwitchBelong') === false) $item['url'] = helper::createLink('project', 'index', "projectID={$project->id}");
- }
- else
- {
- $item['url'] = '#';
- }
- if(empty($activeGroup) && $projectID == $project->id) $activeGroup = $group;
- if($config->systemMode == 'light' || $config->vision == 'lite' || !helper::hasFeature('program'))
- {
- $data[$group][] = $item;
- }
- else
- {
- if(!isset($data[$group][$programID])) $data[$group][$programID] = $programItem;
- $data[$group][$programID]['items'][] = $item;
- }
- }
- }
- /* 将分组数据转换为索引数组。Format grouped data to indexed array. */
- foreach($data as $key => $value) $data[$key] = array_values($value);
- /**
- * 定义每个分组名称信息,包括可展开的已关闭分组。
- * Define every group name, include expanded group.
- */
- $tabs = array();
- $tabs[] = array('name' => 'my', 'text' => $lang->project->mine, 'active' => $activeGroup === 'my');
- $tabs[] = array('name' => 'other', 'text' => $lang->project->other, 'active' => $activeGroup === 'other');
- $tabs[] = array('name' => 'closed', 'text' => $lang->project->closedProject);
- /**
- * 定义最终的 JSON 数据。
- * Define the final json data.
- */
- $json = array();
- $json['data'] = $data;
- $json['tabs'] = $tabs;
- $json['searchHint'] = $lang->searchAB;
- $json['labelMap'] = array('program' => $lang->program->common);
- $json['expandName'] = 'closed';
- $json['itemType'] = 'project';
- /**
- * 渲染 JSON 字符串并发送到客户端。
- * Render json data to string and send to client.
- */
- renderJson($json);
- }
|