* Add buildBatchUpdateProjects method.

This commit is contained in:
tianshujie
2023-08-24 15:32:16 +08:00
parent ff51cbe282
commit 5753ec3612
4 changed files with 91 additions and 31 deletions
+3 -31
View File
@@ -1353,9 +1353,10 @@ class projectModel extends model
}
/**
* 批量更新项目。
* Batch update projects.
*
* @param array $data
* @param array $data
* @access public
* @return array|false
*/
@@ -1364,36 +1365,7 @@ class projectModel extends model
$projects = array();
$allChanges = array();
$oldProjects = $this->getByIdList(array_keys($data));
$extendFields = $this->getFlowExtendFields();
foreach($data as $projectID => $project)
{
$projectID = (int)$projectID;
$projects[$projectID] = new stdClass();
$projects[$projectID]->id = $projectID;
$projects[$projectID]->name = $project->name;
$projects[$projectID]->model = $oldProjects[$projectID]->model;
$projects[$projectID]->PM = $project->PM;
$projects[$projectID]->begin = $project->begin;
$projects[$projectID]->end = $project->end == $this->lang->project->longTime ? LONG_TIME : $project->end;
$projects[$projectID]->acl = $project->acl;
$projects[$projectID]->lastEditedBy = $this->app->user->account;
$projects[$projectID]->lastEditedDate = helper::now();
if(isset($project->parent)) $projects[$projectID]->parent = $project->parent;
if(isset($project->code)) $projects[$projectID]->code = $project->code;
if($project->end == $this->lang->project->longTime) $projects[$projectID]->days = 0;
foreach($extendFields as $extendField)
{
$projects[$projectID]->{$extendField->field} = $project->{$extendField->field};
if(is_array($projects[$projectID]->{$extendField->field})) $projects[$projectID]->{$extendField->field} = implode(',', $projects[$projectID]->{$extendField->field});
$projects[$projectID]->{$extendField->field} = htmlSpecialString($projects[$projectID]->{$extendField->field});
}
}
if(dao::isError()) return false;
$projects = $this->projectTao->buildBatchUpdateProjects($data, $oldProjects);
$this->loadModel('execution');
$this->lang->error->unique = $this->lang->error->repeat;
+47
View File
@@ -552,6 +552,53 @@ class projectTao extends projectModel
return helper::createLink('project', 'testcase', "projectID=%s");
}
/**
* 构造批量更新项目的数据。
* Build bathc update project data.
*
* @param array $data
* @param array $oldProjects
* @access protected
* @return array
*/
protected function buildBatchUpdateProjects(array $data, array $oldProjects): array
{
if(empty($data)) return array();
$extendFields = $this->getFlowExtendFields();
$projects = array();
foreach($data as $projectID => $project)
{
$projectID = (int)$projectID;
$projects[$projectID] = new stdClass();
$projects[$projectID]->id = $projectID;
$projects[$projectID]->name = $project->name;
$projects[$projectID]->model = $oldProjects[$projectID]->model;
$projects[$projectID]->PM = $project->PM;
$projects[$projectID]->begin = $project->begin;
$projects[$projectID]->end = $project->end == $this->lang->project->longTime ? LONG_TIME : $project->end;
$projects[$projectID]->acl = $project->acl;
$projects[$projectID]->lastEditedBy = $this->app->user->account;
$projects[$projectID]->lastEditedDate = helper::now();
if(isset($project->parent)) $projects[$projectID]->parent = $project->parent;
if(isset($project->code)) $projects[$projectID]->code = $project->code;
if($project->end == $this->lang->project->longTime) $projects[$projectID]->days = 0;
foreach($extendFields as $extendField)
{
$projects[$projectID]->{$extendField->field} = $project->{$extendField->field};
if(is_array($projects[$projectID]->{$extendField->field})) $projects[$projectID]->{$extendField->field} = implode(',', $projects[$projectID]->{$extendField->field});
$projects[$projectID]->{$extendField->field} = htmlSpecialString($projects[$projectID]->{$extendField->field});
}
}
return $projects;
}
/**
* 删除项目团队成员。
* Delete project team member.
+21
View File
@@ -470,4 +470,25 @@ class Project
$this->project->createProductDocLib($productID);
return $this->project->dao->select('*')->from(TABLE_DOCLIB)->where('type')->eq('product')->andWhere('product')->eq($productID)->fetch();
}
/**
* 构造批量更新项目的数据。
* Build bathc update project data.
*
* @param array $projectIdList
* @access public
* @return array
*/
public function buildBatchUpdateProjectsTest(array $projectIdList): array
{
$oldProjects = $this->project->getByIdList($projectIdList);
$newProjects = array();
foreach($oldProjects as $projectID => $project)
{
$newProjects[$projectID] = $project;
$newProjects[$projectID]->name = '更新' . $project->name;
$newProjects[$projectID]->PM = 'admin';
}
return $this->project->buildBatchUpdateProjects($newProjects, $oldProjects);
}
}
@@ -0,0 +1,20 @@
#!/usr/bin/env php
<?php
include dirname(__FILE__, 5) . "/test/lib/init.php";
include dirname(__FILE__, 2) . '/project.class.php';
su('admin');
zdTable('project')->config('project')->gen(5);
/**
title=测试 projectModel->buildBatchUpdateProjects();
timeout=0
cid=1
*/
$projectTester = new project();
r($projectTester->buildBatchUpdateProjectsTest(array())) && p() && e('0'); // 测试空数据
r($projectTester->buildBatchUpdateProjectsTest(array(1, 2, 3))) && p('1:name,PM') && e('更新敏捷项目1,admin'); // 测试构造项目ID为1、2、3的更新数据