diff --git a/module/project/control.php b/module/project/control.php index b53b889f23..634ba62302 100755 --- a/module/project/control.php +++ b/module/project/control.php @@ -500,7 +500,7 @@ class project extends control $postData = form::data($this->config->project->form->edit); $newProject = $this->projectZen->prepareProject($postData, $project->hasProduct); - $changes = $this->project->update($newProject, $project); + $changes = $this->project->update($newProject, $project, (int)$this->post->uid); if($changes) { $actionID = $this->loadModel('action')->create('project', $projectID, 'edited'); diff --git a/module/project/model.php b/module/project/model.php index 19af584a65..30a62c831a 100755 --- a/module/project/model.php +++ b/module/project/model.php @@ -1427,7 +1427,7 @@ class projectModel extends model $linkedProducts = $this->dao->select('product')->from(TABLE_PROJECTPRODUCT) ->where('project')->eq($projectID) ->fetchPairs(); - $this->personnel->updateWhitelist($whitelist, 'product', current($linkedProducts)); + $this->loadModel('personnel')->updateWhitelist($whitelist, 'product', current($linkedProducts)); } else { @@ -1504,18 +1504,19 @@ class projectModel extends model * 更新项目。 * Update project. * - * @param object $project - * @param object $oldProject + * @param object $project + * @param object $oldProject + * @param int $uid * @access public * @return array|false */ - public function update(object $project, object $oldProject): array|false + public function update(object $project, object $oldProject, int $uid): array|false { /* 通过主键查老项目信息, 处理父节点和图片字段。*/ /* Fetch old project's info and dispose parent and file info. */ $projectID = $oldProject->id; if(!isset($project->parent)) $project->parent = $oldProject->parent; - $project = $this->loadModel('file')->processImgURL($project, $this->config->project->editor->edit['id'], $this->post->uid); + $project = $this->loadModel('file')->processImgURL($project, $this->config->project->editor->edit['id'], $uid); /* 若此项目为多迭代项目, 检查起止日期不得小于迭代的起止日期。*/ /* If this project has multiple stage, check if execution's start and end dates in project's start and end dates. */ @@ -1533,7 +1534,7 @@ class projectModel extends model $this->updateWhitelist($project, $oldProject); // 更新关联的白名单列表。 $this->updateProductStage($projectID, $oldProject->stageBy); // 更新关联的所有产品的阶段。 - $this->file->updateObjectID($this->post->uid, $projectID, 'project'); // 通过uid更新文件id。 + $this->file->updateObjectID($uid, $projectID, 'project'); // 通过uid更新文件id。 if($oldProject->parent != $project->parent) $this->loadModel('program')->fixPath($projectID, $project->parent, $oldProject->path, $oldProject->grade); // 更新项目从属路径。 if(empty($oldProject->multiple) and $oldProject->model != 'waterfall') $this->loadModel('execution')->syncNoMultipleSprint($projectID); // 无迭代的非瀑布项目需要更新。 diff --git a/module/project/test/model/update.php b/module/project/test/model/update.php index 24d36d1586..e372fa1444 100755 --- a/module/project/test/model/update.php +++ b/module/project/test/model/update.php @@ -1,6 +1,6 @@ #!/usr/bin/env php app->loadConfig('execution'); $project = new Project(); -$data = array( - 'parent' => '0', - 'name' => '测试更新项目十', - 'begin' => '2022-07-06', - 'end' => '2022-10-26', - 'acl' => 'private', - 'budget' => '100', - 'budgetUnit' => 'CNY', - 'PM' => 'admin', - 'products' => array(1, 2, 3), - 'whitelist' => array('dev10', 'dev12') -); +$data = new stdclass(); +$data->parent = '0'; +$data->name = '测试更新项目十'; +$data->begin = '2022-07-06'; +$data->end = '2022-10-26'; +$data->acl = 'private'; +$data->budget = '100'; +$data->budgetUnit = 'CNY'; +$data->hasProduct = 1; +$data->PM = 'admin'; +$data->whitelist = 'dev10, dev12'; -$normalProject = $data; +$oldProject = new stdclass(); +$oldProject->id = 1; +$oldProject->stageBy = 'project'; +$oldProject->whitelist = 'dev1, dev2'; -$noProductProject = $data; -$noProductProject['products'] = array(); +$uid = 144312345125125; -$emptyTitleProject = $data; -$emptyTitleProject['name'] = ''; +$normalProject = json_decode(json_encode($data)); -$emptyBeginProject = $data; -$emptyBeginProject['begin'] = ''; +$noProductProject = json_decode(json_encode($data)); +$noProductProject->products = array(); -$emptyEndProject = $data; -$emptyEndProject['end'] = ''; +$emptyTitleProject = json_decode(json_encode($data)); +$emptyTitleProject->name = ''; -$beginGtExecutionBegin = $data; -$beginGtExecutionBegin['begin'] = '2022-08-06'; +$emptyBeginProject = json_decode(json_encode($data)); +$emptyBeginProject->begin = ''; -$withoutProductProject = $data; -$withoutProductProject['hasProduct'] = ''; -$withoutProductProject['name'] = '测试更新影子产品'; -$withoutProductProject['status'] = 'closed'; +$emptyEndProject = json_decode(json_encode($data)); +$emptyEndProject->end = ''; +$beginGtExecutionBegin = json_decode(json_encode($data)); +$beginGtExecutionBegin->begin = '2022-08-07'; -r($project->update(2, $normalProject)) && p('name') && e('测试更新项目十'); // 正常更新项目的情况 -r($project->update(2, $noProductProject)) && p('message:0') && e('最少关联一个产品'); // 未关联产品的项目 -r($project->update(2, $emptyTitleProject)) && p('message[name]:0') && e('『项目名称』不能为空。'); // 更新项目名称为空时 -r($project->update(2, $emptyBeginProject)) && p('message[begin]:0') && e('『计划开始』不能为空。'); // 当计划完成为空时更新项目信息 -r($project->update(2, $emptyEndProject)) && p('message:end') && e('项目的完成日期应大于等于执行的最大完成日期:2022-10-26'); // 当项目的完成日期小于执行的完成日期时 -r($project->update(2, $beginGtExecutionBegin)) && p('message:begin') && e('项目的开始日期应小于等于执行的最小开始日期:2022-07-07'); // 当项目的开始日期大于执行的开始日期时 -r($project->update(2, $withoutProductProject)) && p('name') && e('测试更新影子产品'); // 无产品项目 +$withoutProductProject = json_decode(json_encode($data)); +$withoutProductProject->hasProduct = ''; +$withoutProductProject->name = '测试更新影子产品'; +$withoutProductProject->status = 'closed'; + +r($project->update($normalProject, $oldProject, $uid)) && p('name') && e('测试更新项目十'); // 正常更新项目的情况 +r($project->update($noProductProject, $oldProject, $uid)) && p('message:0') && e('最少关联一个产品'); // 未关联产品的项目 +r($project->update($emptyTitleProject, $oldProject, $uid)) && p('message[name]:0') && e('『项目名称』不能为空。'); // 更新项目名称为空时 +r($project->update($emptyBeginProject, $oldProject, $uid)) && p('message[begin]:0') && e('『计划开始』不能为空。'); // 当计划完成为空时更新项目信息 +r($project->update($emptyEndProject, $oldProject, $uid)) && p('message:end') && e('项目的完成日期应大于等于执行的最大完成日期:2022-10-26'); // 当项目的完成日期小于执行的完成日期时 +r($project->update($beginGtExecutionBegin, $oldProject, $uid)) && p('message:begin') && e('项目的开始日期应小于等于执行的最小开始日期:2022-07-07'); // 当项目的开始日期大于执行的开始日期时 +r($project->update($withoutProductProject, $oldProject, $uid)) && p('name') && e('测试更新影子产品'); // 无产品项目 diff --git a/module/project/test/model/yaml/update/project.yaml b/module/project/test/model/yaml/update/project.yaml index 7e9f1c066d..d46eafc6d9 100644 --- a/module/project/test/model/yaml/update/project.yaml +++ b/module/project/test/model/yaml/update/project.yaml @@ -22,3 +22,5 @@ fields: range: '项目1, 执行1-2, 项目3, 执行3-4, 执行3-5, 无迭代无产品项目6' - field: code range: 'project1, sprint1-2, project3, sprint3-4, sprint3-5, project6' + - field: stageBy + range: 'project, product' diff --git a/module/project/test/project.class.php b/module/project/test/project.class.php index d92550ad1f..b454205a4c 100644 --- a/module/project/test/project.class.php +++ b/module/project/test/project.class.php @@ -110,20 +110,19 @@ class Project /** * Update a project. * - * @param int $projectID - * @param array $data + * @param object $project + * @param object $oldProject + * @param int $uid * @access public * @return void */ - public function update($projectID, $data) + public function update(object $project, object $oldProject, int $uid) { - $_POST = $data; - $this->project->update($projectID); + $this->project->update($project, $oldProject, $uid); - unset($_POST); if(dao::isError()) return array('message' => dao::getError()); - return $this->project->getByID($projectID); + return $this->project->getByID($oldProject->id); } /**