* Fix problem in project model update.

This commit is contained in:
guofeilong
2023-05-12 10:51:20 +08:00
parent f2f432eddd
commit 61ea628e1f
5 changed files with 56 additions and 49 deletions
+1 -1
View File
@@ -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');
+7 -6
View File
@@ -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); // 无迭代的非瀑布项目需要更新。
+40 -35
View File
@@ -1,6 +1,6 @@
#!/usr/bin/env php
<?php
include dirname(__FILE__, 5) . "/test/lib/init.php";
include dirname(__FILE__, 5) . '/test/lib/init.php';
include dirname(__FILE__, 2) . '/project.class.php';
su('admin');
@@ -24,46 +24,51 @@ $tester->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('测试更新影子产品'); // 无产品项目
@@ -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'
+6 -7
View File
@@ -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);
}
/**