Skip to content

Commit 78abdf4

Browse files
authored
Merge pull request #395 from gopeak/dev
Dev
2 parents e394bcc + f879263 commit 78abdf4

35 files changed

+1306
-116
lines changed

app/classes/IssueFavFilterLogic.php

Lines changed: 50 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,62 @@
1010
namespace main\app\classes;
1111

1212
use main\app\model\issue\IssueFilterModel;
13+
use main\app\model\project\ProjectFlagModel;
1314
use main\app\model\user\UserModel;
1415
use main\app\model\issue\IssueModel;
1516

1617
class IssueFavFilterLogic
1718
{
19+
20+
public static $preDefinedFilter = [
21+
'assignee_mine' => ['name' => '分配我的', 'description' => '分配我的事项'],
22+
'my_unsolved' => ['name' => '我未解决', 'description' => '分配我未解决的事项'],
23+
'my_followed' => ['name' => '我关注的', 'description' => '我关注的事项'],
24+
'my_assistant_issue' => ['name' => '我协助的', 'description' => '我协助的事项'],
25+
'my_report' => ['name' => '我报告的', 'description' => '我报告的事项'],
26+
//'active_sprint_unsolved' => ['name' => '当前迭代未解决的', 'title' => '当前活跃迭代的未解决事项'],
27+
];
28+
29+
1830
public $displayNum = 8;
1931

32+
/**
33+
* @throws \Exception
34+
*/
35+
public static function fetchProjectFilters($projectId)
36+
{
37+
$projectFlagModel = new ProjectFlagModel();
38+
$filterFlagRow = $projectFlagModel->getByFlag($projectId, "filter_json");
39+
if (!isset($filterFlagRow['flag'])){
40+
$preDefinedFilterArr = null;
41+
}else{
42+
$preDefinedFilterArr = json_decode($filterFlagRow['value'], true);
43+
}
44+
$arr = [];
45+
foreach (IssueFavFilterLogic::$preDefinedFilter as $key =>$item) {
46+
$row = $item;
47+
$row['key'] = $key;
48+
$row['is_pre_defined'] = '1';
49+
$row['filter'] = '';
50+
$row['is_show'] = '0';
51+
if ( is_array($preDefinedFilterArr) && in_array($key, $preDefinedFilterArr)){
52+
$row['is_show'] = '1';
53+
}
54+
if (is_null($preDefinedFilterArr)){
55+
$row['is_show'] = '1';
56+
}
57+
$arr[] = $row;
58+
}
59+
$issueFilterModel = new IssueFilterModel();
60+
$userFilters = $issueFilterModel->getRowsByKey("*", ['projectid'=>$projectId, 'share_scope'=>'project'], null, 'order_weight desc');
61+
foreach ($userFilters as $userFilter) {
62+
$userFilter['key'] = $userFilter['id'];
63+
$userFilter['is_pre_defined'] = '0';
64+
$arr[] = $userFilter;
65+
}
66+
return $arr;
67+
}
68+
2069
public function getCurUserFavFilterByProject($projectId = null)
2170
{
2271
$filterModel = IssueFilterModel::getInstance();
@@ -73,7 +122,7 @@ public function getCurUserFavFilter()
73122
* @return array
74123
* @throws \Exception
75124
*/
76-
public function saveFilter($name, $filter, $description = '', $shared = '', $projectId=null)
125+
public function saveFilter($name, $filter, $description = '', $shared = '', $projectId = null)
77126
{
78127
$filterModel = IssueFilterModel::getInstance();
79128
$info = [];

app/classes/IssueFilterLogic.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -463,9 +463,6 @@ public function getList($page = 1, $pageSize = 50)
463463
}
464464

465465
$orderBy = 'id';
466-
if (isset($_GET['sort_field'])) {
467-
$orderBy = trimStr($_GET['sort_field']);
468-
}
469466
$sortBy = 'DESC';
470467
if (isset($_GET['sort_by']) && !empty($_GET['sort_by'])) {
471468
$sortBy = trimStr($_GET['sort_by']);
@@ -483,6 +480,9 @@ public function getList($page = 1, $pageSize = 50)
483480
$orderBy = 'updated';
484481
$sortBy = 'DESC';
485482
}
483+
if (isset($_GET['sort_field'])) {
484+
$orderBy = trimStr($_GET['sort_field']);
485+
}
486486

487487
$start = $pageSize * ($page - 1);
488488
$limit = " limit $start, " . $pageSize;

app/classes/IssueLogic.php

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
use main\app\model\field\FieldModel;
1515
use main\app\model\issue\IssueAssistantsModel;
1616
use main\app\model\issue\IssueFileAttachmentModel;
17+
use main\app\model\issue\IssueFilterModel;
1718
use main\app\model\issue\IssueFixVersionModel;
1819
use main\app\model\issue\IssueEffectVersionModel;
1920
use main\app\model\issue\IssueLabelDataModel;
@@ -22,6 +23,7 @@
2223
use main\app\model\issue\IssueModel;
2324
use main\app\model\issue\IssuePriorityModel;
2425
use main\app\model\issue\IssueResolveModel;
26+
use main\app\model\project\ProjectFlagModel;
2527
use main\app\model\project\ProjectModel;
2628
use main\app\model\project\ProjectModuleModel;
2729
use main\app\model\TimelineModel;
@@ -85,6 +87,22 @@ class IssueLogic
8587
'plan_date'
8688
];
8789

90+
/**
91+
* @param $projectId
92+
* @return mixed|null
93+
* @throws \Doctrine\DBAL\DBALException
94+
*/
95+
public static function fetchProjectDisplayFields($projectId)
96+
{
97+
$projectFlagModel = new ProjectFlagModel();
98+
$value = $projectFlagModel->getValueByFlag($projectId, "display_field_json");
99+
if (is_null($value)){
100+
return self::$defaultDisplayFields;
101+
}else{
102+
$projectDisplayFieldArr = json_decode($value, true);
103+
}
104+
return $projectDisplayFieldArr;
105+
}
88106

89107
/**
90108
* @param $issueId
@@ -793,7 +811,7 @@ public static function getUserIssueDisplayFields($userId, $projectId)
793811
$row = $displayFieldsModel->getByUserProject($userId, $projectId);
794812

795813
if (!isset($row['fields'])) {
796-
return $fields;
814+
return self::fetchProjectDisplayFields($projectId);
797815
}
798816
$tmp = explode(',', $row['fields']);
799817
if (!empty($tmp)) {

app/classes/LogOperatingLogic.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ class LogOperatingLogic
2727
const MODULE_NAME_ISSUE = '事项';
2828
const MODULE_NAME_ADMIN = '系统';
2929
const MODULE_NAME_USER = '用户';
30+
const MODULE_NAME_PROJECT_SETTING = '项目设置';
3031

3132
/**
3233
* 根据条件获取日志内容,并按照视图需要格式化数据

app/classes/UserLogic.php

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -772,6 +772,17 @@ public static function getLastCreateIssueData($userId ,$project)
772772
$finalData = $arr;
773773
}
774774
}
775+
if (isset($finalData["issue_type"])) {
776+
$projectId = $project["id"];
777+
$issueTypes = (new IssueTypeLogic())->getIssueType($projectId);
778+
$issueTypesIdArr = array_column($issueTypes, "id");
779+
if (!in_array($finalData["issue_type"], $issueTypesIdArr)){
780+
$finalData["issue_type"] = $issueTypesIdArr[0];
781+
}
782+
}
783+
784+
785+
775786
return $finalData;
776787
}
777788
}

app/ctrl/BaseUserCtrl.php

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -186,6 +186,10 @@ public function __construct()
186186
'_permCreateIssue',
187187
isset($this->projectPermArr[\main\app\classes\PermissionLogic::CREATE_ISSUES]) ? true : false
188188
);
189+
$this->addGVar(
190+
'_permProjectAdmin',
191+
isset($this->projectPermArr[\main\app\classes\PermissionLogic::ADMINISTER_PROJECTS]) ? true : false
192+
);
189193

190194
$this->addGVar('_is_admin ', $this->isAdmin ? 'true' : 'false');
191195

app/ctrl/admin/Project.php

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -234,7 +234,6 @@ public function delete()
234234
// 分发事件
235235
$event = new CommonPlacedEvent($this, $project);
236236
$this->dispatcher->dispatch($event, Events::onProjectDelete);
237-
238237
$this->ajaxSuccess('操作成功');
239238
}
240239

app/ctrl/issue/Main.php

Lines changed: 44 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
use main\app\model\issue\ExtraWorkerDayModel;
3030
use main\app\model\issue\HolidayModel;
3131
use main\app\model\project\ProjectCatalogLabelModel;
32+
use main\app\model\project\ProjectFlagModel;
3233
use main\app\model\project\ProjectGanttSettingModel;
3334
use main\app\model\project\ProjectLabelModel;
3435
use main\app\model\project\ProjectModel;
@@ -176,7 +177,19 @@ public function pageIndex()
176177
$data['description_templates'] = $descTplModel->getAll(false);
177178
// 表格视图的显示字段
178179
$issueLogic = new IssueLogic();
179-
$data['display_fields'] = $issueLogic->getUserIssueDisplayFields(UserAuth::getId(), $data['project_id']);
180+
$projectFlagModel = new ProjectFlagModel();
181+
$isUserDisplayField = $projectFlagModel->getValueByFlag($data['project_id'], "is_user_display_field");
182+
if(is_null($isUserDisplayField)){
183+
$data['is_user_display_field'] = "1";
184+
}else{
185+
$data['is_user_display_field'] = $isUserDisplayField;
186+
}
187+
$data['user_display_fields'] = $issueLogic->getUserIssueDisplayFields(UserAuth::getId(), $data['project_id']);
188+
if ($data['is_user_display_field'] !=="1"){
189+
$data['display_fields'] = IssueLogic::fetchProjectDisplayFields($data['project_id']);
190+
}else{
191+
$data['display_fields'] = $data['user_display_fields'];
192+
}
180193
$uiDisplayFields = IssueLogic::$uiDisplayFields;
181194
$fieldsArr = FieldModel::getInstance()->getCustomFields();
182195
$fieldsIdArr = array_column($fieldsArr, 'title', 'name');
@@ -221,11 +234,18 @@ public function pageIndex()
221234
} else {
222235
$data['sprints'] = $sprintModel->getAllItems(false);
223236
}
224-
225237
$data['project_catalog'] = (new ProjectCatalogLabelModel())->getByProject($data['project_id']);
226-
227238
$data['last_create_data'] = UserLogic::getLastCreateIssueData($userId, $data['project']);
228-
239+
// 项目过滤器
240+
$data['ProjectFilterArr'] = IssueFavFilterLogic::fetchProjectFilters($data['project_id']);
241+
// 表格显示头像还是名称
242+
$projectFlagModel = new ProjectFlagModel();
243+
$isTableDisplayAvatar = $projectFlagModel->getValueByFlag($data['project_id'], "is_table_display_avatar");
244+
if(is_null($isTableDisplayAvatar)){
245+
$data['is_table_display_avatar'] = "1";
246+
}else{
247+
$data['is_table_display_avatar'] = $isTableDisplayAvatar;
248+
}
229249
$this->render('gitlab/issue/list.php', $data);
230250
}
231251

@@ -660,6 +680,16 @@ public function filter()
660680
}
661681

662682
}
683+
// 表格显示头像还是名称
684+
$projectId = isset($_GET['project']) ? intval($_GET['project']) : null;
685+
$projectFlagModel = new ProjectFlagModel();
686+
$isTableDisplayAvatar = $projectFlagModel->getValueByFlag($projectId, "is_table_display_avatar");
687+
if(is_null($isTableDisplayAvatar)){
688+
$data['is_table_display_avatar'] = "1";
689+
}else{
690+
$data['is_table_display_avatar'] = $isTableDisplayAvatar;
691+
}
692+
663693
list($ret, $data['issues'], $total) = $issueFilterLogic->getList($page, $pageSize);
664694
if ($ret) {
665695
$this->response($data, $total, $page, $pageSize);
@@ -815,9 +845,13 @@ public function saveFilter($name = '', $filter = '', $description = '', $shared
815845
if (isset($_REQUEST['sort_by']) && !empty($_REQUEST['sort_by'])) {
816846
$arr[] = 'sort_by:' . $_REQUEST['sort_by'];
817847
}
848+
$shareScope = '';
849+
if (isset($_REQUEST['is_project_filter']) && $_REQUEST['is_project_filter']=="1") {
850+
$shareScope = 'project';
851+
}
818852
//print_r($arr);
819853
$filter = implode(" ", $arr);
820-
list($ret, $msg) = $IssueFavFilterLogic->saveFilter($name, $filter, $description, $shared, $projectId);
854+
list($ret, $msg) = $IssueFavFilterLogic->saveFilter($name, $filter, $description, $shareScope, $projectId);
821855
if ($ret) {
822856
$info = [];
823857
$info['name'] = $name;
@@ -867,6 +901,11 @@ public function saveAdvFilter()
867901
if(isset($_POST['sort_by'])){
868902
$info['adv_query_sort_by'] = $_POST['sort_by'];
869903
}
904+
$shareScope = '';
905+
if (isset($_REQUEST['is_project_filter']) && $_REQUEST['is_project_filter']=="1") {
906+
$shareScope = 'project';
907+
}
908+
$info['share_scope'] = $shareScope;
870909
list($ret, $msg) = $filterModel->insert($info);
871910
if ($ret) {
872911
$event = new CommonPlacedEvent($this, $info);

app/ctrl/project/Main.php

Lines changed: 71 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
namespace main\app\ctrl\project;
77

88
use main\app\classes\ConfigLogic;
9+
use main\app\classes\IssueLogic;
910
use main\app\classes\LogOperatingLogic;
1011
use main\app\classes\PermissionGlobal;
1112
use main\app\classes\PermissionLogic;
@@ -19,11 +20,13 @@
1920
use main\app\ctrl\issue\Main as IssueMain;
2021
use main\app\event\CommonPlacedEvent;
2122
use main\app\event\Events;
23+
use main\app\model\field\FieldModel;
2224
use main\app\model\issue\IssueTypeModel;
2325
use main\app\model\issue\IssueTypeSchemeModel;
2426
use main\app\model\issue\WorkflowSchemeModel;
2527
use main\app\model\OrgModel;
2628
use main\app\model\ActivityModel;
29+
use main\app\model\project\ProjectFlagModel;
2730
use main\app\model\project\ProjectIssueTypeSchemeDataModel;
2831
use main\app\model\project\ProjectLabelModel;
2932
use main\app\model\project\ProjectMainExtraModel;
@@ -382,6 +385,65 @@ public function pageSettingsProfile()
382385
$this->render('gitlab/project/setting_basic_info.php', $data);
383386
}
384387

388+
/**
389+
* @throws \Exception
390+
*/
391+
public function pageSettingsDisplayField()
392+
{
393+
if (!PermissionGlobal::check(UserAuth::getId(), PermissionGlobal::MANAGER_PROJECT_PERM_ID)) {
394+
if (!isset($this->projectPermArr[PermissionLogic::ADMINISTER_PROJECTS])) {
395+
$this->warn('提 示', '您没有权限访问该页面,需要项目管理权限');
396+
die;
397+
}
398+
}
399+
$projectModel = new ProjectModel();
400+
$data['title'] = '设置';
401+
$data['nav_links_active'] = 'setting';
402+
$data['sub_nav_active'] = 'display_field';
403+
404+
$data['root_domain'] = ROOT_URL;
405+
$data = RewriteUrl::setProjectData($data);
406+
407+
// 表格视图的显示字段
408+
$issueLogic = new IssueLogic();
409+
$data['display_fields'] = $issueLogic->fetchProjectDisplayFields($data['project_id']);
410+
411+
$uiDisplayFields = IssueLogic::$uiDisplayFields;
412+
$fieldsArr = FieldModel::getInstance()->getCustomFields();
413+
$fieldsIdArr = array_column($fieldsArr, 'title', 'name');
414+
$data['uiDisplayFields'] = array_merge($uiDisplayFields, $fieldsIdArr);
415+
416+
$projectFlagModel = new ProjectFlagModel();
417+
$isUserDisplayField = $projectFlagModel->getValueByFlag($data['project_id'], "is_user_display_field");
418+
if(is_null($isUserDisplayField)){
419+
$data['is_user_display_field'] = "1";
420+
}else{
421+
$data['is_user_display_field'] = $isUserDisplayField;
422+
}
423+
$this->render('gitlab/project/setting_display_field.twig', $data);
424+
}
425+
426+
427+
/**
428+
* @throws \Exception
429+
*/
430+
public function pageSettingsFilter()
431+
{
432+
if (!PermissionGlobal::check(UserAuth::getId(), PermissionGlobal::MANAGER_PROJECT_PERM_ID)) {
433+
if (!isset($this->projectPermArr[PermissionLogic::ADMINISTER_PROJECTS])) {
434+
$this->warn('提 示', '您没有权限访问该页面,需要项目管理权限');
435+
die;
436+
}
437+
}
438+
$data['title'] = '设置';
439+
$data['nav_links_active'] = 'setting';
440+
$data['sub_nav_active'] = 'filter';
441+
$data['root_domain'] = ROOT_URL;
442+
$data = RewriteUrl::setProjectData($data);
443+
//print_r($data['project']);die;
444+
$this->render('gitlab/project/setting_filter.twig', $data);
445+
}
446+
385447

386448
/**
387449
* @throws \Exception
@@ -442,7 +504,7 @@ public function pageSettingIssue()
442504
$data['issueTypeArr'] = (new IssueTypeModel())->getAllItems(false);
443505

444506
$data['rememberFieldArr'] = [
445-
'issue_type'=>'事项类型',
507+
// 'issue_type'=>'事项类型', // 因为与"默认事项类型"功能相冲突,新版本3.2.0 取消此选项
446508
'module'=>'模 块',
447509
'assignee'=>'经办人',
448510
'fix_version'=>'解决版本',
@@ -452,6 +514,14 @@ public function pageSettingIssue()
452514
$data = RewriteUrl::setProjectData($data);
453515
$data['project']['remember_last_issue_field'] = json_decode($data['project']['remember_last_issue_field'], true);
454516

517+
518+
$projectFlagModel = new ProjectFlagModel();
519+
$isTableDisplayAvatar = $projectFlagModel->getValueByFlag($data['project_id'], "is_table_display_avatar");
520+
if(is_null($isTableDisplayAvatar)){
521+
$data['project']['is_table_display_avatar'] = "1";
522+
}else{
523+
$data['project']['is_table_display_avatar'] = $isTableDisplayAvatar;
524+
}
455525
//print_r($data['project']);die;
456526
$this->render('gitlab/project/setting_issue.php', $data);
457527
}

0 commit comments

Comments
 (0)