From 5753ec361289e2b889566e359e49794779ca5565 Mon Sep 17 00:00:00 2001 From: tianshujie Date: Thu, 24 Aug 2023 15:32:08 +0800 Subject: [PATCH] * Add buildBatchUpdateProjects method. --- module/project/model.php | 34 ++------------ module/project/tao.php | 47 +++++++++++++++++++ module/project/test/project.class.php | 21 +++++++++ .../test/tao/buildbatchupdateprojects.php | 20 ++++++++ 4 files changed, 91 insertions(+), 31 deletions(-) create mode 100644 module/project/test/tao/buildbatchupdateprojects.php diff --git a/module/project/model.php b/module/project/model.php index 5a55dbc164..ff1ef30baf 100755 --- a/module/project/model.php +++ b/module/project/model.php @@ -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; diff --git a/module/project/tao.php b/module/project/tao.php index dc166c20e4..2786f2ee2e 100755 --- a/module/project/tao.php +++ b/module/project/tao.php @@ -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. diff --git a/module/project/test/project.class.php b/module/project/test/project.class.php index 854851b7b7..032dd8dbed 100644 --- a/module/project/test/project.class.php +++ b/module/project/test/project.class.php @@ -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); + } } diff --git a/module/project/test/tao/buildbatchupdateprojects.php b/module/project/test/tao/buildbatchupdateprojects.php new file mode 100644 index 0000000000..e3fae1a1d4 --- /dev/null +++ b/module/project/test/tao/buildbatchupdateprojects.php @@ -0,0 +1,20 @@ +#!/usr/bin/env php +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的更新数据