diff --git a/module/upgrade/config/upgradeflow.php b/module/upgrade/config/upgradeflow.php index 6a3dc0c145..f7c5e4cc81 100644 --- a/module/upgrade/config/upgradeflow.php +++ b/module/upgrade/config/upgradeflow.php @@ -147,7 +147,7 @@ if($config->edition != 'open') $config->upgrade->execFlow['18_3']['functions'] .= ',processDataset,processChart,processReport,processDashboard'; $config->upgrade->execFlow['18_4_beta1']['functions'] = 'processDeployStepAction,updateBISQL,updatePivotStage'; $config->upgrade->execFlow['20_4']['functions'] .= ',updateTaskRelationPriv'; - $config->upgrade->execFlow['21_7_8']['functions'] .= ',modifyProjectWorkflowGroup,upgradeAuditcl,upgradeProcessAndActivity,addWorkflowGroupOtherActivity,addDefaultDeliverableModule,upgradeDesignToDeliverable,buildinTestcaseStageDeliverable,upgradeDeliverable,buildinBaselineReview,upgradeReviewclCategory,upgradeBaselineObjects,upgradeReviewToDeliverable,upgradeBaseline,addDeliverablePrivs,upgradeStageAndPoint,upgradeObjectOfDecision,upgradeClosedFeature,parseDocFetcherURL,updateWorkflowGroupPriv'; + $config->upgrade->execFlow['21_7_8']['functions'] .= ',modifyProjectWorkflowGroup,upgradeAuditcl,upgradeProcessAndActivity,addWorkflowGroupOtherActivity,addDefaultDeliverableModule,upgradeDesignToDeliverable,buildinTestcaseStageDeliverable,upgradeDeliverable,buildinBaselineReview,upgradeReviewclCategory,upgradeBaselineObjects,upgradeReviewToDeliverable,upgradeBaseline,addDeliverablePrivs,upgradeStageAndPoint,upgradeObjectOfDecision,upgradeClosedFeature,parseDocFetcherURL,updateWorkflowGroupPriv,upgradeReportTemplateObjects'; } if(in_array($this->config->edition, array('max', 'ipd'))) $config->upgrade->execFlow['18_7']['functions'] = 'processOldMetrics,processHistoryDataForMetric,metric-updateMetricDate'; diff --git a/module/upgrade/model.php b/module/upgrade/model.php index 2c830e6fb8..cf427a6a34 100644 --- a/module/upgrade/model.php +++ b/module/upgrade/model.php @@ -12012,6 +12012,7 @@ class upgradeModel extends model $this->loadModel('project'); $codeWorkflowPairs = array(); + $oldNewFlowPairs = array(); foreach($workflows as $workflow) { $projects = $projectGroup[$workflow->id]; @@ -12050,10 +12051,32 @@ class upgradeModel extends model $this->project->copyWorkflow($project->workflowGroup, $newWorkflowGroupID, $table); } + if(!isset($oldNewFlowPairs[$oldWorkflowGroupID])) $oldNewFlowPairs[$oldWorkflowGroupID] = array(); + $oldNewFlowPairs[$oldWorkflowGroupID][] = $newWorkflowGroupID; $codeWorkflowPairs[$code][$oldWorkflowGroupID] = $newWorkflowGroupID; $index++; } } + + /* 处理报告模板的适用流程。*/ + $reportTemplateList = $this->dao->select('id,objects')->from(TABLE_DOC)->where('templateType')->eq('reportTemplate')->fetchPairs('id'); + foreach($reportTemplateList as $templateID => $objects) + { + $newObjects = array(); + $objectIdList = array_filter(explode(',', $objects)); + foreach($objectIdList as $objectID) + { + $newObjects[] = $objectID; + if(!isset($oldNewFlowPairs[$objectID])) continue; + $newObjects = array_merge($newObjects, $oldNewFlowPairs[$objectID]); + } + + if(!empty($newObjects)) + { + $newObjectList = implode(',', array_filter(array_unique($newObjects))); + $this->dao->update(TABLE_DOC)->set('objects')->eq($newObjectList)->where('id')->eq($templateID)->exec(); + } + } } /** @@ -13061,4 +13084,51 @@ class upgradeModel extends model return true; } + + /** + * 处理报告模板中内置的适用流程。 + * Upgrade report template objects. + * + * @access public + * @return bool + */ + public function upgradeReportTemplateObjects(): bool + { + $templateList = $this->dao->select('id,objects')->from(TABLE_DOC)->where('templateType')->eq('reportTemplate')->fetchPairs('id'); + $workflowList = $this->dao->select('id,projectModel,projectType')->from(TABLE_WORKFLOWGROUP)->where('main')->eq('1')->fetchAll('id'); + + $flowGroup = array(); + foreach($workflowList as $flowID => $flow) + { + if(!isset($flowGroup[$flow->projectModel])) $flowGroup[$flow->projectModel] = array(); + if(!isset($flowGroup[$flow->projectModel][$flow->projectType])) $flowGroup[$flow->projectModel][$flow->projectType] = array(); + $flowGroup[$flow->projectModel][$flow->projectType][] = $flowID; + } + + foreach($templateList as $templateID => $objects) + { + $newObjects = array(); + $objectIdList = array_filter(explode(',', $objects)); + foreach($objectIdList as $objectID) + { + $newObjects[] = $objectID; + if(!isset($workflowList[$objectID])) continue; + + $projectModel = $workflowList[$objectID]->projectModel; + $projectType = $workflowList[$objectID]->projectType; + if($projectModel == 'scrum' && $projectType == 'product') $newObjects = array_merge($newObjects, $flowGroup['agileplus']['product']); + if($projectModel == 'scrum' && $projectType == 'project') $newObjects = array_merge($newObjects, $flowGroup['agileplus']['project']); + if($projectModel == 'waterfall' && $projectType == 'product') $newObjects = array_merge($newObjects, $flowGroup['waterfallplus']['product'], $flowGroup['ipd']['ipd'], $flowGroup['ipd']['tpd'], $flowGroup['ipd']['cbb'], $flowGroup['ipd']['cpdproduct']); + if($projectModel == 'waterfall' && $projectType == 'project') $newObjects = array_merge($newObjects, $flowGroup['waterfallplus']['project'], $flowGroup['ipd']['cpdproject']); + } + + if(!empty($newObjects)) + { + $newObjectList = implode(',', array_filter(array_unique($newObjects))); + $this->dao->update(TABLE_DOC)->set('objects')->eq($newObjectList)->where('id')->eq($templateID)->exec(); + } + } + + return true; + } } diff --git a/module/weekly/model.php b/module/weekly/model.php index 8c45c636e7..91c0dfa3d8 100755 --- a/module/weekly/model.php +++ b/module/weekly/model.php @@ -703,7 +703,7 @@ class weeklyModel extends model $now = helper::now(); $cycleConfig = array('turnon' => 'on', 'frequency' => 'week', 'acl' => 'open', 'readGroups' => '', 'readUsers' => '', 'groups' => '', 'users' => ''); - $objects = $this->dao->select('id')->from(TABLE_WORKFLOWGROUP)->where('type')->eq('project')->andWhere('projectModel')->eq('waterfall')->andWhere('status')->eq('normal')->andWhere('vision')->eq($this->config->vision)->andWhere('objectID')->eq(0)->andWhere('deleted')->eq(0)->fetchPairs('id'); + $objects = $this->dao->select('id')->from(TABLE_WORKFLOWGROUP)->where('type')->eq('project')->andWhere('projectModel')->in('waterfall,waterfallplus,ipd')->andWhere('status')->eq('normal')->andWhere('vision')->eq($this->config->vision)->andWhere('objectID')->eq(0)->andWhere('deleted')->eq(0)->fetchPairs('id'); $template = new stdclass(); $template->lib = $libID;