From 18337e6ae0198a18283aa1dc15a89111d778ec40 Mon Sep 17 00:00:00 2001 From: z Date: Wed, 10 Jun 2020 11:14:33 +0800 Subject: [PATCH] * adjust for merge program. --- module/upgrade/control.php | 122 +++++++++++++++++++++++++++++++++- module/upgrade/lang/zh-cn.php | 11 +++ 2 files changed, 132 insertions(+), 1 deletion(-) diff --git a/module/upgrade/control.php b/module/upgrade/control.php index 8b6a6375fa..7a29fa3df6 100644 --- a/module/upgrade/control.php +++ b/module/upgrade/control.php @@ -139,13 +139,133 @@ class upgrade extends control $fromVersion = isset($_POST['fromVersion']) ? $this->post->fromVersion : $fromVersion; $this->upgrade->execute($fromVersion); - if(!$this->upgrade->isError()) $this->locate(inlink('afterExec', "fromVersion=$fromVersion")); + if(!$this->upgrade->isError()) + { + if(version_compare(str_replace('_', '.', $fromVersion), '15', '<')) $this->locate(inlink('mergeProgram')); + $this->locate(inlink('afterExec', "fromVersion=$fromVersion")); + } $this->view->result = 'fail'; $this->view->errors = $this->upgrade->getError(); $this->display(); } + public function mergeProgram($type = 'productline') + { + if($_POST) + { + } + + $this->view->type = $type; + if($type == 'productline') + { + $productlines = $this->dao->select('*')->from(TABLE_MODULE)->where('type')->eq('line')->fetchAll('id'); + $noMergedProducts = $this->dao->select('*')->from(TABLE_PRODUCT)->where('program')->eq(0)->andWhere('line')->in(array_keys($productlines))->andWhere('deleted')->eq(0)->fetchAll('id'); + if(empty($noMergedProducts)) $this->locate($this->createLink('upgrade', 'mergeProgram', 'type=product')); + + $noMergedProjects = $this->dao->select('t1.*')->from(TABLE_PROJECT)->alias('t1') + ->leftJoin(TABLE_PROJECTPRODUCT)->alias('t2')->on('t1.id=t2.project') + ->where('t1.program')->eq(0) + ->andWhere('t1.template')->eq('') + ->andWhere('t1.deleted')->eq(0) + ->andWhere('t2.product')->in(array_keys($noMergedProducts)) + ->fetchAll('id'); + + $projectProducts = $this->dao->select('*')->from(TABLE_PROJECTPRODUCT)->where('project')->in(array_keys($noMergedProjects))->fetchGroup('project', 'product'); + foreach($projectProducts as $projectID => $products) + { + if(count($products) > 1) unset($noMergedProjects[$projectID]); + } + + $lineGroups = array(); + foreach($noMergedProducts as $product) $lineGroups[$product->line][$product->id] = $product; + + $productGroups = array(); + foreach($noMergedProjects as $project) + { + $projectProduct = zget($projectProducts, $project->id, array()); + if(empty($projectProduct)) continue; + + $productID = key($projectProduct); + $productGroups[$productID][$project->id] = $project; + } + + $productlines; + $this->view->productlines = $productlines; + $this->view->lineGroups = $lineGroups; + $this->view->productGroups = $productGroups; + } + if($type == 'product') + { + $noMergedProducts = $this->dao->select('*')->from(TABLE_PRODUCT)->where('program')->eq(0)->andWhere('deleted')->eq(0)->fetchAll('id'); + if(empty($noMergedProducts)) $this->locate($this->createLink('upgrade', 'mergeProgram', 'type=project')); + + $noMergedProjects = $this->dao->select('t1.*')->from(TABLE_PROJECT)->alias('t1') + ->leftJoin(TABLE_PROJECTPRODUCT)->alias('t2')->on('t1.id=t2.project') + ->where('t1.program')->eq(0) + ->andWhere('t1.template')->eq('') + ->andWhere('t1.deleted')->eq(0) + ->andWhere('t2.product')->in(array_keys($noMergedProducts)) + ->fetchAll('id'); + + $projectProducts = $this->dao->select('*')->from(TABLE_PROJECTPRODUCT)->where('project')->in(array_keys($noMergedProjects))->fetchGroup('project', 'product'); + foreach($projectProducts as $projectID => $products) + { + if(count($products) > 1) unset($noMergedProjects[$projectID]); + } + + $productGroups = array(); + foreach($noMergedProjects as $project) + { + $projectProduct = zget($projectProducts, $project->id, array()); + if(empty($projectProduct)) continue; + + $productID = key($projectProduct); + $productGroups[$productID][$project->id] = $project; + } + $this->view->noMergedProducts = $noMergedProducts; + $this->view->productGroups = $productGroups; + } + if($type == 'project') + { + $noMergedProjects = $this->dao->select('*')->from(TABLE_PROJECT)->where('program')->eq(0)->andWhere('template')->eq('')->andWhere('deleted')->eq(0)->fetchAll('id'); + $projectProducts = $this->dao->select('*')->from(TABLE_PROJECTPRODUCT)->where('project')->in(array_keys($noMergedProjects))->fetchGroup('project', 'product'); + foreach($projectProducts as $projectID => $products) unset($noMergedProjects[$projectID]); + + $this->view->noMergedProjects = $noMergedProjects; + } + if($type == 'moreLink') + { + $noMergedProjects = $this->dao->select('*')->from(TABLE_PROJECT)->where('program')->eq(0)->andWhere('template')->eq('')->andWhere('deleted')->eq(0)->fetchAll('id'); + $projectProducts = $this->dao->select('*')->from(TABLE_PROJECTPRODUCT)->where('project')->in(array_keys($noMergedProjects))->fetchGroup('project', 'product'); + + $productPairs = array(); + foreach($projectProducts as $projectID => $products) + { + foreach($products as $productID => $data) $productPairs[$productID] = $productID; + } + + $programes = $this->dao->select('t1.*,t2.id as productID')->from(TABLE_PROJECT)->alias('t1') + ->leftJoin(TABLE_PRODUCT)->alias('t2')->on('t1.id=t2.program') + ->where('t2.id')->in($productPairs) + ->fetchAll('productID'); + + foreach($noMergedProjects as $projectID => $project) + { + $products = zget($projectProducts, $projectID, array()); + foreach($projects as $productID => $data) + { + $program = zget($programs, $productID, ''); + if($program) $project->programs[$program->id] = $program->name; + } + } + + $this->view->noMergedProjects = $noMergedProjects; + } + + $this->display(); + } + /** * After execute. * diff --git a/module/upgrade/lang/zh-cn.php b/module/upgrade/lang/zh-cn.php index 5e607cce68..f54d753edb 100644 --- a/module/upgrade/lang/zh-cn.php +++ b/module/upgrade/lang/zh-cn.php @@ -47,6 +47,7 @@ $lang->upgrade->forbiddenExt = '以下插件与新版本不兼容,已经自 $lang->upgrade->updateFile = '需要更新附件信息。'; $lang->upgrade->noticeSQL = '检查到你的数据库跟标准不一致,尝试修复失败。请执行以下SQL语句,再刷新页面检查。'; $lang->upgrade->afterDeleted = '以上文件未能删除, 删除后刷新!'; +$lang->upgrade->mergeProgram = '数据归并'; $lang->upgrade->to15Tips = '禅道15版本升级提示'; $lang->upgrade->to15Button = '我已经做好备份,开始升级吧!'; $lang->upgrade->to15Desc = <<upgrade->to15Desc = << EOD; +$lang->upgrade->line = '产品线'; +$lang->upgrade->program = '项目名称'; +$lang->upgrade->product = $lang->productCommon; +$lang->upgrade->project = $lang->projectCommon; + +$lang->upgrade->mergeByProductLine = "以产品线组织的产品和迭代:将整个产品线及其下面的产品和迭代归并到一个大项目中。"; +$lang->upgrade->mergeByProduct = "以产品组织的迭代:可以选择多个产品及其下面的迭代归并到一个大项目中,也可以选择某一个产品将其下面所属的迭代归并到大项目中。"; +$lang->upgrade->mergeByProject = "独立的迭代:可以选择若干迭代归并到一个大项目中,也可以独立归并。"; +$lang->upgrade->mergeByMoreLink = "关联多个产品的迭代:选择这个迭代归属于哪一个产品。"; + include dirname(__FILE__) . '/version.php';