From ef6f379dc35310709d514d68bb5bc02d82036039 Mon Sep 17 00:00:00 2001 From: sunguangming Date: Wed, 16 Aug 2023 15:02:55 +0800 Subject: [PATCH] * Refactor project::edit. --- module/project/control.php | 10 ++-- module/project/model.php | 15 +++--- module/project/ui/edit.html.php | 85 ++++++++++++++++++++++++++++++--- module/project/zen.php | 7 ++- 4 files changed, 97 insertions(+), 20 deletions(-) diff --git a/module/project/control.php b/module/project/control.php index 764b502640..e14f0e6137 100644 --- a/module/project/control.php +++ b/module/project/control.php @@ -393,7 +393,7 @@ class project extends control * @access public * @return void */ - public function create($model = 'scrum', $programID = 0, $copyProjectID = 0, $extra = '') + public function create(string $model = 'scrum', int $programID = 0, int $copyProjectID = 0, string $extra = '') { $this->session->set('projectModel', $model); @@ -448,10 +448,9 @@ class project extends control * @param string $from * @access public */ - public function edit(string $projectID, string $from = '') + public function edit(int $projectID, string $from = '') { - $projectID = (int)$projectID; - $project = $this->project->getByID($projectID); + $project = $this->project->getByID($projectID); $this->project->setMenu($projectID); if($project->model == 'kanban') @@ -466,6 +465,8 @@ class project extends control $postData = form::data($this->config->project->form->edit); $newProject = $this->projectZen->prepareProject($postData, $project->hasProduct); + if(dao::isError()) return $this->send(array('result' => 'fail', 'message' => dao::getError())); + $changes = $this->project->update($newProject, $project); if($changes) { @@ -486,7 +487,6 @@ class project extends control $locateLink = ($this->session->projectList and $from != 'view') ? $this->session->projectList : inLink('view', "projectID=$projectID"); return $this->send(array('result' => 'success', 'message' => $this->lang->saveSuccess, 'locate' => $locateLink)); } - unset($this->lang->project->modelList['']); $this->projectZen->buildEditForm($projectID, $project); } diff --git a/module/project/model.php b/module/project/model.php index 1d542987f6..81243847b8 100755 --- a/module/project/model.php +++ b/module/project/model.php @@ -1283,8 +1283,8 @@ class projectModel extends model /* 对比新旧白名单检查是否需要更新白名单。*/ /* Check if whitelist shoud update .*/ $projectID = $oldProject->id; - $whitelist = array_filter(explode(',', $project->whitelist)); - $oldWhitelist = array_filter(explode(',', $oldProject->whitelist)); + $whitelist = array_filter(explode(',', (string)$project->whitelist)); + $oldWhitelist = array_filter(explode(',', (string)$oldProject->whitelist)); if(count($oldWhitelist) != count($whitelist) || !empty(array_diff($oldWhitelist, $whitelist))) { if(!$oldProject->hasProduct) @@ -1388,15 +1388,14 @@ class projectModel extends model /* 更新项目表。*/ /* Update project table. */ - $success = $this->projectTao->doUpdate($projectID, $project); - if(!$success) return false; + if(!$this->projectTao->doUpdate($projectID, $project)) return false; /* 更新项目的关联信息。*/ /* Update relation info of this project. */ - $this->updateUserView($projectID, $project->acl); // 更新用户视图。 - $this->updateShadowProduct($project, $oldProject); // 更新影子产品关联信息。 - $this->updateWhitelist($project, $oldProject); // 更新关联的白名单列表。 - $this->updateProductStage($projectID, $oldProject->stageBy); // 更新关联的所有产品的阶段。 + $this->updateUserView($projectID, $project->acl); // 更新用户视图。 + $this->updateShadowProduct($project, $oldProject); // 更新影子产品关联信息。 + $this->updateWhitelist($project, $oldProject); // 更新关联的白名单列表。 + $this->updateProductStage($projectID, (string)$oldProject->stageBy); // 更新关联的所有产品的阶段。 $this->file->updateObjectID((string)$this->post->uid, $projectID, 'project'); // 通过uid更新文件id。 diff --git a/module/project/ui/edit.html.php b/module/project/ui/edit.html.php index a535903e28..e8bd63919f 100644 --- a/module/project/ui/edit.html.php +++ b/module/project/ui/edit.html.php @@ -17,6 +17,7 @@ jsVar('ignore', $lang->project->ignore); jsVar('unLinkProductTip', $lang->project->unLinkProductTip); jsVar('allProducts', $allProducts); jsVar('branchGroups', $branchGroups); +jsVar('programTip', $lang->program->tips); $projectModelItems = array(); foreach($lang->project->modelList as $key => $text) @@ -195,7 +196,12 @@ formPanel ( setClass('pl-2 flex self-center'), setStyle(array('color' => 'var(--form-label-color)')), - icon('help') + icon + ( + 'help', + set('data-toggle', 'tooltip'), + set('id', 'programHover'), + ) ) ), formGroup @@ -256,11 +262,13 @@ formPanel formGroup ( set::width('1/4'), - set::name('PM'), - set::control('select'), - set::value($project->PM), set::label($lang->project->PM), - set::items($PMUsers) + picker + ( + set::name('PM'), + set::value($project->PM), + set::items($PMUsers) + ), ), formRow ( @@ -350,7 +358,72 @@ formPanel ) ) ), - empty($linkedProducts) ? null : $productGroup, + empty($linkedProducts) ? + formRow + ( + setClass('productBox'), + formGroup + ( + set::width('1/2'), + set('id', 'linkProduct'), + set::label($lang->project->manageProducts), + set::required(true), + inputGroup + ( + div + ( + setClass('grow'), + picker + ( + set::name('products[0]'), + set::items($allProducts), + ) + ), + ) + ), + formGroup + ( + set::width('1/4'), + setClass('hidden'), + inputGroup + ( + $lang->product->branchName['branch'], + picker + ( + set::name("branch[0][]"), + ) + ), + ), + formGroup + ( + set::width('1/2'), + inputGroup + ( + set::id("plan0"), + $lang->project->associatePlan, + picker + ( + set::name('plans[0][]'), + set::items(null), + ) + ), + div + ( + setClass('pl-2 flex self-center line-btn'), + btn + ( + setClass('btn ghost addLine'), + icon('plus') + ), + btn + ( + setClass('btn ghost removeLine'), + icon('trash'), + $i == 0 ? set::disabled(true) : null + ), + ) + ), + ) : $productGroup, ($model == 'waterfall' || $model == 'waterfallplus') ? formRow ( setClass("stageBy $stageByClass"), diff --git a/module/project/zen.php b/module/project/zen.php index 1a1e86a6a1..18e057adcd 100644 --- a/module/project/zen.php +++ b/module/project/zen.php @@ -93,7 +93,11 @@ class projectZen extends project if($hasProduct) { /* Check if products not empty. */ - if(!count(array_filter($this->post->products))) return false; + if(!$this->post->products || !count(array_filter($this->post->products))) + { + dao::$errors['products[0]'] = $this->lang->project->error->productNotEmpty; + return false; + } $project->parent = (int)$project->parent; /* Check if products and branch valid. */ @@ -165,6 +169,7 @@ class projectZen extends project return false; } + /* 如果没有选择长期,则判断计划结束日期不能为空. */ if($this->post->delta != 999 and !$project->end) { dao::$errors['end'] = $this->lang->project->copyProject->endTips;