* adjust for merge program.

This commit is contained in:
z
2020-06-10 11:14:33 +08:00
parent b25f67c5ba
commit 18337e6ae0
2 changed files with 132 additions and 1 deletions
+121 -1
View File
@@ -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.
*
+11
View File
@@ -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 = <<<EOD
@@ -73,4 +74,14 @@ $lang->upgrade->to15Desc = <<<EOD
</div>
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';