* Add select all.

This commit is contained in:
tianshujie98
2021-07-13 13:38:14 +08:00
parent 7ef07b30ba
commit 6977cf91ed
9 changed files with 246 additions and 79 deletions
+3 -3
View File
@@ -410,7 +410,7 @@ class upgrade extends control
$productlines = $this->dao->select('*')->from(TABLE_MODULE)->where('type')->eq('line')->andWhere('root')->eq(0)->orderBy('id_desc')->fetchAll('id');
$noMergedProducts = $this->dao->select('*')->from(TABLE_PRODUCT)->where('line')->in(array_keys($productlines))->orderBy('id_desc')->fetchAll('id');
if(empty($productlines) || empty($noMergedProducts)) $this->locate($this->createLink('upgrade', 'mergeProgram', 'type=product'));
if(empty($productlines) || empty($noMergedProducts)) $this->locate($this->createLink('upgrade', 'mergeProgram', "type=product&programID=0&projectType=$projectType"));
$noMergedSprints = $this->dao->select('t1.*')->from(TABLE_PROJECT)->alias('t1')
->leftJoin(TABLE_PROJECTPRODUCT)->alias('t2')->on('t1.id=t2.project')
@@ -482,7 +482,7 @@ class upgrade extends control
/* Add products without sprints. */
$noMergedProducts += $this->dao->select('*')->from(TABLE_PRODUCT)->where('program')->eq(0)->fetchAll('id');
if(empty($noMergedProducts)) $this->locate($this->createLink('upgrade', 'mergeProgram', 'type=sprint'));
if(empty($noMergedProducts)) $this->locate($this->createLink('upgrade', 'mergeProgram', "type=sprint&programID=0&projectType=$projectType"));
/* Group project by product. */
@@ -506,7 +506,7 @@ class upgrade extends control
$projectProducts = $this->dao->select('*')->from(TABLE_PROJECTPRODUCT)->where('project')->in(array_keys($noMergedSprints))->fetchGroup('project', 'product');
foreach($projectProducts as $sprintID => $products) unset($noMergedSprints[$sprintID]);
if(empty($noMergedSprints)) $this->locate($this->createLink('upgrade', 'mergeProgram', 'type=moreLink'));
if(empty($noMergedSprints)) $this->locate($this->createLink('upgrade', 'mergeProgram', "type=moreLink"));
$this->view->noMergedSprints = $noMergedSprints;
}
+1
View File
@@ -30,3 +30,4 @@ div.divider {vertical-align: middle;}
#source .lineGroup .productList {width: 170px;}
#lineList .checkbox-primary {display: inline-block;}
.main-row .side-col .check-allLine > label {font-weight: 700}
.sprintGroup {margin-left: 6px;}
+213 -49
View File
@@ -1,14 +1,48 @@
$(function()
{
var checkedProduct = true;
var productLine = $('.nav li.active').attr('lineid');
$("[id^='products\[" + productLine + "\]']").each(function()
if($('[id^=productLines]').length > 0)
{
if(!$(this).prop('checked')) checkedProduct = false;
})
$("[id^='productLines\[" + productLine + "\]']").prop('checked', checkedProduct);
$('#checkAllProducts').prop('checked', checkedProduct);
$('#checkAllProjects').prop('checked', checkedProduct);
var checkedProduct = true;
var productLine = $('.nav li.active').attr('lineid');
$("[id^='products\[" + productLine + "\]']").each(function()
{
if(!$(this).prop('checked'))
{
checkedProduct = false;
return false;
}
})
$("[id^='productLines\[" + productLine + "\]']").prop('checked', checkedProduct);
$('#checkAllProducts').prop('checked', checkedProduct);
$('#checkAllProjects').prop('checked', checkedProduct);
}
else if($('[id^=products]').length > 0)
{
var checkedProduct = true;
$('[id^=products]').each(function()
{
if(!$(this).prop('checked'))
{
checkedProduct = false;
return false;
}
})
$('#checkAllProducts').prop('checked', checkedProduct);
$('#checkAllProjects').prop('checked', checkedProduct);
}
else if($('[id^=sprints]').length > 0)
{
var checkedProject = true;
$('[id^=sprints]').each(function()
{
if(!$(this).prop('checked'))
{
checkedProject = false;
return false;
}
})
$('#checkAllProjects').prop('checked', checkedProject);
}
/* Define drag to select relevant parameters. */
var options = {
@@ -23,31 +57,6 @@ $(function()
var checkedProduct = true;
var checkedProject = true;
/* All products selected. */
$("[id^='products\[" + lineID + "\]']").each(function()
{
if(!$(this).prop('checked')) checkedProduct = false;
})
$('#checkAllProducts').prop('checked', checkedProduct);
$("[id^='productLines\[" + lineID + "\]']").prop('checked', checkedProduct);
/* All projects selected. */
$("[id^='sprints\[" + lineID + "\]']").each(function()
{
if(!$(this).prop('checked'))
{
checkedProject = false;
}
else
{
var productID = $(this).attr('data-product');
if(productID && $('[data-productid=' + productID + ']').length > 0 && !$('[data-productid=' + productID + ']').prop('checked')) $('[data-productid=' + productID + ']').prop('checked', true);
}
})
$('#checkAllProjects').prop('checked', checkedProject);
$('#checkAllProducts').prop('checked', checkedProject);
$("[id^='productLines\[" + lineID + "\]']").prop('checked', checkedProject);
/* Select the product line of the current page. */
if($('.nav li.active').find('[id^=productLines]').prop('checked'))
{
@@ -58,6 +67,82 @@ $(function()
$("[id^='sprints\[" + lineID + "\]'").prop('checked', true);
}
/* All products selected. */
if($('[id^=productLines]').length > 0)
{
$("[id^='products\[" + lineID + "\]']").each(function()
{
if(!$(this).prop('checked'))
{
checkedProduct = false;
}
else
{
$('[data-product=' + $(this).val() +']').prop('checked', true);
}
})
$("[id^='productLines\[" + lineID + "\]']").prop('checked', checkedProduct);
}
else
{
$("[id^=products]").each(function()
{
if(!$(this).prop('checked'))
{
checkedProduct = false;
}
else
{
$('[data-product=' + $(this).val() +']').prop('checked', true);
}
})
}
$('#checkAllProducts').prop('checked', checkedProduct);
/* All projects selected. */
if($('[id^=productLines]').length > 0)
{
$("[id^='sprints\[" + lineID + "\]']").each(function()
{
if(!$(this).prop('checked'))
{
checkedProject = false;
}
else
{
var productID = $(this).attr('data-product');
if(productID && $('[data-productid=' + productID + ']').length > 0 && !$('[data-productid=' + productID + ']').prop('checked')) $('[data-productid=' + productID + ']').prop('checked', true);
}
})
}
else if($('[id^=products]').length > 0)
{
$("[id^=sprints]").each(function()
{
if(!$(this).prop('checked'))
{
checkedProject = false;
}
else
{
var productID = $(this).attr('data-product');
if(productID && $('[data-productid=' + productID + ']').length > 0 && !$('[data-productid=' + productID + ']').prop('checked')) $('[data-productid=' + productID + ']').prop('checked', true);
}
})
}
else
{
$("[id^=sprints]").each(function()
{
if(!$(this).prop('checked'))
{
checkedProject = false;
return false;
}
})
}
$('#checkAllProjects').prop('checked', checkedProject);
/* All product lines selected. */
$('[name^=productLines]').each(function()
{
@@ -413,10 +498,29 @@ $(function()
var checked = true;
var lineID = $(this).attr('data-line');
$("[id^='products\[" + lineID + "\]']").each(function()
if($('[id^=productLines]').length > 0)
{
if(!$(this).prop('checked')) checked = false;
})
$("[id^='products\[" + lineID + "\]']").each(function()
{
if(!$(this).prop('checked'))
{
checked = false;
return false;
}
})
}
else if($('[id^=products]').length > 0)
{
$("[id^=products]").each(function()
{
if(!$(this).prop('checked'))
{
checked = false;
return false;
}
})
}
$('#checkAllProducts').prop('checked', checked);
$("[id^='productLines\[" + lineID + "\]']").prop('checked', checked);
@@ -433,10 +537,28 @@ $(function()
}
var checkedSprint = true;
$("[id^='sprints\[" + lineID + "\]']").each(function()
if($('[id^=productLines]').length > 0)
{
if(!$(this).prop('checked')) checkedSprint = false;
})
$("[id^='sprints\[" + lineID + "\]']").each(function()
{
if(!$(this).prop('checked'))
{
checkedSprint = false;
return false;
}
})
}
else if($('[id^=products]').length > 0)
{
$("[id^=sprints]").each(function()
{
if(!$(this).prop('checked'))
{
checkedSprint = false;
return false;
}
})
}
$('#checkAllProjects').prop('checked', checkedSprint);
setProgramBegin(programBegin);
@@ -450,18 +572,60 @@ $(function()
{
var checked = true;
var checkedProduct = true;
var lineID = $(this).attr('data-line');
$("[id^='sprints\[" + lineID + "\]']").each(function()
if($('[id^=productLines]').length > 0)
{
if(!$(this).prop('checked')) checked = false;
})
var lineID = $(this).attr('data-line');
$("[id^='sprints\[" + lineID + "\]']").each(function()
{
if(!$(this).prop('checked'))
{
checked = false;
return false;
}
})
$("[id^='products\[" + lineID + "\]']").each(function()
{
if(!$(this).prop('checked'))
{
checkedProduct = false;
return false;
}
})
}
else if($('[id^=products]').length > 0)
{
$("[id^=sprints]").each(function()
{
if(!$(this).prop('checked'))
{
checked = false;
return false;
}
})
$("[id^=products]").each(function()
{
if(!$(this).prop('checked'))
{
checkedProduct = false;
return false;
}
})
}
else if($('[id^=sprints]').length > 0)
{
$("[id^=sprints]").each(function()
{
if(!$(this).prop('checked'))
{
checked = false;
return false;
}
})
}
$('#checkAllProjects').prop('checked', checked);
$("[id^='products\[" + lineID + "\]']").each(function()
{
if(!$(this).prop('checked')) checkedProduct = false;
})
$('#checkAllProducts').prop('checked', checkedProduct);
if($(this).prop('checked'))
+5 -5
View File
@@ -118,10 +118,10 @@ $lang->upgrade->selectProject = 'The target project';
$lang->upgrade->newProgram = 'Create';
$lang->upgrade->projectEmpty = 'Project must be not empty.';
$lang->upgrade->mergeSummary = "Dear users, there are %s products and %s iterations in your system waiting for Migration. By System Calculation, we recommend your migration plan as follows, you can also adjust according to your own situation:";
$lang->upgrade->mergeByProductLine = "PRODUCTLINE-BASED iterations: Consolidate the entire product line and the products and iterations below it into one large project.";
$lang->upgrade->mergeByProduct = "PRODUCT-BASED iterations: You can select multiple products and their lower iterations to merge into a large project, or you can select a product to merge its lower iterations into a larger project";
$lang->upgrade->mergeByProject = "Independent iterations: You can select several iterations and merge them into one large project, or merge them independently";
$lang->upgrade->mergeSummary = "Dear users, there are %s {$lang->productCommon} and %s {$lang->projectCommon} in your system waiting for Migration. By System Calculation, we recommend your migration plan as follows, you can also adjust according to your own situation:";
$lang->upgrade->mergeByProductLine = "PRODUCTLINE-BASED {$lang->projectCommon}: Consolidate the entire product line and the {$lang->productCommon} and {$lang->projectCommon} below it into one large project.";
$lang->upgrade->mergeByProduct = "PRODUCT-BASED {$lang->projectCommon}: You can select multiple {$lang->productCommon} and their lower {$lang->projectCommon} to merge into a large project, or you can select a {$lang->productCommon} to merge its lower {$lang->projectCommon} into a larger project";
$lang->upgrade->mergeByProject = "Independent {$lang->projectCommon}: You can select several {$lang->projectCommon} and merge them into one large project, or merge them independently";
$lang->upgrade->mergeByMoreLink = "{$lang->projectCommon} that relates multiple {$lang->productCommon}: select which project the {$lang->projectCommon} belongs to.";
$lang->upgrade->mergeRepoTips = "Merge the selected version library under the selected product.";
@@ -137,7 +137,7 @@ $lang->upgrade->createProjectTip = <<<EOT
<p>ZenTao will create an item in Execute with the same name of {$lang->projectCommon} according to the data in {$lang->projectCommon}, and move the tasks, stories, and bugs in {$lang->projectCommon} to it.</p>
EOT;
$lang->upgrade->createExecutionTip = <<<EOT
<p>ZenTao will upgrade existing {$lang->projectCommon} as Iteration.</p>
<p>ZenTao will upgrade existing {$lang->projectCommon} as execution.</p>
<p>After the upgrade, the data of existing {$lang->projectCommon} will be in a Project - Execute of the new version .</p>
EOT;
+5 -5
View File
@@ -105,10 +105,10 @@ $lang->upgrade->selectProject = 'The target project';
$lang->upgrade->newProgram = 'Create';
$lang->upgrade->projectEmpty = 'Project must be not empty.';
$lang->upgrade->mergeSummary = "Dear users, there are %s products and %s iterations in your system waiting for Migration. By System Calculation, we recommend your migration plan as follows, you can also adjust according to your own situation:";
$lang->upgrade->mergeByProductLine = "PRODUCTLINE-BASED iterations: Consolidate the entire product line and the products and iterations below it into one large project.";
$lang->upgrade->mergeByProduct = "PRODUCT-BASED iterations: You can select multiple products and their lower iterations to merge into a large project, or you can select a product to merge its lower iterations into a larger project";
$lang->upgrade->mergeByProject = "Independent iterations: You can select several iterations and merge them into one large project, or merge them independently";
$lang->upgrade->mergeSummary = "Dear users, there are %s {$lang->productCommon} and %s {$lang->projectCommon} in your system waiting for Migration. By System Calculation, we recommend your migration plan as follows, you can also adjust according to your own situation:";
$lang->upgrade->mergeByProductLine = "PRODUCTLINE-BASED {$lang->projectCommon}: Consolidate the entire product line and the {$lang->productCommon} and {$lang->projectCommon} below it into one large project.";
$lang->upgrade->mergeByProduct = "PRODUCT-BASED {$lang->projectCommon}: You can select multiple {$lang->productCommon} and their lower {$lang->projectCommon} to merge into a large project, or you can select a {$lang->productCommon} to merge its lower {$lang->projectCommon} into a larger project";
$lang->upgrade->mergeByProject = "Independent {$lang->projectCommon}: You can select several {$lang->projectCommon} and merge them into one large project, or merge them independently";
$lang->upgrade->mergeByMoreLink = "{$lang->projectCommon} that relates multiple {$lang->productCommon}: select which project the {$lang->projectCommon} belongs to.";
$lang->upgrade->mergeRepoTips = "Merge the selected version library under the selected product.";
$lang->upgrade->needBuild4Add = 'Full text retrieval has been added in this upgrade. Need create index. Please go [Admin->System->BuildIndex] page to build index.';
@@ -121,7 +121,7 @@ $lang->upgrade->createProjectTip = <<<EOT
<p>ZenTao will create an item in Execute with the same name of {$lang->projectCommon} according to the data in {$lang->projectCommon}, and move the tasks, stories, and bugs in {$lang->projectCommon} to it.</p>
EOT;
$lang->upgrade->createExecutionTip = <<<EOT
<p>ZenTao will upgrade existing {$lang->projectCommon} as Iteration.</p>
<p>ZenTao will upgrade existing {$lang->projectCommon} as execution.</p>
<p>After the upgrade, the data of existing {$lang->projectCommon} will be in a Project - Execute of the new version .</p>
EOT;
+5 -5
View File
@@ -119,10 +119,10 @@ $lang->upgrade->selectProject = 'The target project';
$lang->upgrade->newProgram = 'Create';
$lang->upgrade->projectEmpty = 'Project must be not empty.';
$lang->upgrade->mergeSummary = "Dear users, there are %s products and %s iterations in your system waiting for Migration. By System Calculation, we recommend your migration plan as follows, you can also adjust according to your own situation:";
$lang->upgrade->mergeByProductLine = "PRODUCTLINE-BASED iterations: Consolidate the entire product line and the products and iterations below it into one large project.";
$lang->upgrade->mergeByProduct = "PRODUCT-BASED iterations: You can select multiple products and their lower iterations to merge into a large project, or you can select a product to merge its lower iterations into a larger project";
$lang->upgrade->mergeByProject = "Independent iterations: You can select several iterations and merge them into one large project, or merge them independently";
$lang->upgrade->mergeSummary = "Dear users, there are %s {$lang->productCommon} and %s {$lang->projectCommon} in your system waiting for Migration. By System Calculation, we recommend your migration plan as follows, you can also adjust according to your own situation:";
$lang->upgrade->mergeByProductLine = "PRODUCTLINE-BASED {$lang->projectCommon}: Consolidate the entire product line and the {$lang->productCommon} and {$lang->projectCommon} below it into one large project.";
$lang->upgrade->mergeByProduct = "PRODUCT-BASED {$lang->projectCommon}: You can select multiple {$lang->productCommon} and their lower {$lang->projectCommon} to merge into a large project, or you can select a {$lang->productCommon} to merge its lower {$lang->projectCommon} into a larger project";
$lang->upgrade->mergeByProject = "Independent {$lang->projectCommon}: You can select several {$lang->projectCommon} and merge them into one large project, or merge them independently";
$lang->upgrade->mergeByMoreLink = "{$lang->projectCommon} that relates multiple {$lang->productCommon}: select which project the {$lang->projectCommon} belongs to.";
$lang->upgrade->mergeRepoTips = "Merge the selected version library under the selected product.";
@@ -138,7 +138,7 @@ $lang->upgrade->createProjectTip = <<<EOT
<p>ZenTao will create an item in Execute with the same name of {$lang->projectCommon} according to the data in {$lang->projectCommon}, and move the tasks, stories, and bugs in {$lang->projectCommon} to it.</p>
EOT;
$lang->upgrade->createExecutionTip = <<<EOT
<p>ZenTao will upgrade existing {$lang->projectCommon} as Iteration.</p>
<p>ZenTao will upgrade existing {$lang->projectCommon} as execution.</p>
<p>After the upgrade, the data of existing {$lang->projectCommon} will be in a Project - Execute of the new version .</p>
EOT;
+5 -5
View File
@@ -119,10 +119,10 @@ $lang->upgrade->selectProject = 'The target project';
$lang->upgrade->newProgram = 'Create';
$lang->upgrade->projectEmpty = 'Project must be not empty.';
$lang->upgrade->mergeSummary = "Dear users, there are %s products and %s iterations in your system waiting for Migration. By System Calculation, we recommend your migration plan as follows, you can also adjust according to your own situation:";
$lang->upgrade->mergeByProductLine = "PRODUCTLINE-BASED iterations: Consolidate the entire product line and the products and iterations below it into one large project.";
$lang->upgrade->mergeByProduct = "PRODUCT-BASED iterations: You can select multiple products and their lower iterations to merge into a large project, or you can select a product to merge its lower iterations into a larger project";
$lang->upgrade->mergeByProject = "Independent iterations: You can select several iterations and merge them into one large project, or merge them independently";
$lang->upgrade->mergeSummary = "Dear users, there are %s {$lang->productCommon} and %s {$lang->projectCommon} in your system waiting for Migration. By System Calculation, we recommend your migration plan as follows, you can also adjust according to your own situation:";
$lang->upgrade->mergeByProductLine = "PRODUCTLINE-BASED {$lang->projectCommon}: Consolidate the entire product line and the {$lang->productCommon} and {$lang->projectCommon} below it into one large project.";
$lang->upgrade->mergeByProduct = "PRODUCT-BASED {$lang->projectCommon}: You can select multiple {$lang->productCommon} and their lower {$lang->projectCommon} to merge into a large project, or you can select a {$lang->productCommon} to merge its lower {$lang->projectCommon} into a larger project";
$lang->upgrade->mergeByProject = "Independent {$lang->projectCommon}: You can select several {$lang->projectCommon} and merge them into one large project, or merge them independently";
$lang->upgrade->mergeByMoreLink = "{$lang->projectCommon} that relates multiple {$lang->productCommon}: select which project the {$lang->projectCommon} belongs to.";
$lang->upgrade->mergeRepoTips = "Merge the selected version library under the selected product.";
$lang->upgrade->needBuild4Add = 'Full text retrieval has been added in this upgrad. Vui lòng create an index.';
@@ -135,7 +135,7 @@ $lang->upgrade->createProjectTip = <<<EOT
<p>ZenTao will create an item in Execute with the same name of {$lang->projectCommon} according to the data in {$lang->projectCommon}, and move the tasks, stories, and bugs in {$lang->projectCommon} to it.</p>
EOT;
$lang->upgrade->createExecutionTip = <<<EOT
<p>ZenTao will upgrade existing {$lang->projectCommon} as Iteration.</p>
<p>ZenTao will upgrade existing {$lang->projectCommon} as execution.</p>
<p>After the upgrade, the data of existing {$lang->projectCommon} will be in a Project - Execute of the new version .</p>
EOT;
+5 -5
View File
@@ -106,10 +106,10 @@ $lang->upgrade->selectProject = '目标项目';
$lang->upgrade->newProgram = '新建';
$lang->upgrade->projectEmpty = '所属项目不能为空!';
$lang->upgrade->mergeSummary = "尊敬的用户,您的系统中共有%s个产品,%s个迭代等待迁移。";
$lang->upgrade->mergeByProductLine = "以产品线组织的产品和迭代:将整个产品线及其下面的产品和迭代归并到一个项目集和项目中,也可以分开归并。";
$lang->upgrade->mergeByProduct = "以产品组织的迭代:可以选择多个产品及其下面的迭代归并到一个项目集和项目中,也可以选择某一个产品将其下面所属的迭代归并到项目集和项目中。";
$lang->upgrade->mergeByProject = "独立的迭代:可以选择若干迭代归并到一个项目中,也可以独立归并。";
$lang->upgrade->mergeSummary = "尊敬的用户,您的系统中共有%s个{$lang->productCommon},%s个{$lang->projectCommon}等待迁移。";
$lang->upgrade->mergeByProductLine = "以产品线组织的{$lang->productCommon}和{$lang->projectCommon}:将整个产品线及其下面的{$lang->productCommon}和{$lang->projectCommon}归并到一个项目集和项目中,也可以分开归并。";
$lang->upgrade->mergeByProduct = "以{$lang->productCommon}组织的{$lang->projectCommon}:可以选择多个{$lang->productCommon}及其下面的{$lang->projectCommon}归并到一个项目集和项目中,也可以选择某一个{$lang->productCommon}将其下面所属的{$lang->projectCommon}归并到项目集和项目中。";
$lang->upgrade->mergeByProject = "独立的{$lang->projectCommon}:可以选择若干{$lang->projectCommon}归并到一个项目中,也可以独立归并。";
$lang->upgrade->mergeByMoreLink = "关联多个{$lang->productCommon}的{$lang->projectCommon}:选择这个{$lang->projectCommon}归属于哪一个项目。";
$lang->upgrade->mergeRepoTips = "将选中的版本库归并到所选产品下。";
$lang->upgrade->needBuild4Add = '本次升级需要创建索引。请到 [后台->系统->重建索引] 页面,重新创建索引。';
@@ -123,7 +123,7 @@ $lang->upgrade->createProjectTip = <<<EOT
EOT;
$lang->upgrade->createExecutionTip = <<<EOT
<p>系统会把历史的{$lang->projectCommon}作为迭代进行升级。</p>
<p>系统会把历史的{$lang->projectCommon}作为执行进行升级。</p>
<p>升级后历史的{$lang->projectCommon}数据将对应新版本中项目下的执行。</p>
EOT;
include dirname(__FILE__) . '/version.php';
+4 -2
View File
@@ -8,9 +8,11 @@
<div class='table-col' id='source'>
<div class='cell'>
<div class='lineGroup-title'>
<div class='item'><strong><?php echo $lang->upgrade->project;?></strong></div>
<div class='item checkbox-primary' title="<?php echo $lang->selectAll?>">
<input type='checkbox' id='checkAllProjects'><label for='checkAllProjects'><strong><?php echo $lang->projectCommon;?></strong></label>
</div>
</div>
<div class='line-groups'>
<div class='line-groups sprintGroup'>
<?php foreach($noMergedSprints as $sprintID => $sprint):?>
<?php echo html::checkBox("sprints", array($sprint->id => $sprint->name), $sprint->id, "data-begin='{$sprint->begin}' data-end='{$sprint->end}' data-status='{$sprint->status}' data-pm='{$sprint->PM}'");?>
<?php endforeach;?>