* Fix problem in project model update.
This commit is contained in:
@@ -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');
|
||||
|
||||
@@ -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); // 无迭代的非瀑布项目需要更新。
|
||||
|
||||
@@ -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'
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user