This commit is contained in:
hufangzhou
2021-07-13 14:11:37 +08:00
23 changed files with 313 additions and 108 deletions
+9
View File
@@ -0,0 +1,9 @@
$(function()
{
$('[name=mode]').change(function()
{
var mode = $(this).val();
if(mode == 'classic') $('#modeTips').html(newTips);
if(mode == 'new') $('#modeTips').html(classicTips);
})
})
+4 -3
View File
@@ -213,9 +213,10 @@ else
$lang->custom->workingList['full'] = 'Full Management of Dev';
$lang->custom->menuTip = 'Click to show/hide navigation bar. Drag to swtich display order.';
$lang->custom->saveFail = 'Failed to save!';
$lang->custom->page = ' Page';
$lang->custom->menuTip = 'Click to show/hide navigation bar. Drag to swtich display order.';
$lang->custom->saveFail = 'Failed to save!';
$lang->custom->page = ' Page';
$lang->custom->changeClassicTip = 'The module of Program will be hidden, if you switch to Version 12.5.3 and below.';
$lang->custom->scoreStatus[1] = 'On';
$lang->custom->scoreStatus[0] = 'Off';
+4 -3
View File
@@ -213,9 +213,10 @@ else
$lang->custom->workingList['full'] = 'Application Lifecycle Management';
$lang->custom->menuTip = 'Click to show/hide the menu. Drag to switch display order.';
$lang->custom->saveFail = 'Failed to save!';
$lang->custom->page = ' Page';
$lang->custom->menuTip = 'Click to show/hide the menu. Drag to switch display order.';
$lang->custom->saveFail = 'Failed to save!';
$lang->custom->page = ' Page';
$lang->custom->changeClassicTip = 'The module of Program will be hidden, if you switch to Version 12.5.3 and below.';
$lang->custom->scoreStatus[1] = 'On';
$lang->custom->scoreStatus[0] = 'Off';
+4 -3
View File
@@ -213,9 +213,10 @@ else
$lang->custom->workingList['full'] = 'Application Lifecycle Management';
$lang->custom->menuTip = "Cliquez pour montrer/cacher le menu. Déplacez pour changer l'ordre d'affichage.";
$lang->custom->saveFail = 'Echec de la sauvegarde !';
$lang->custom->page = ' Page';
$lang->custom->menuTip = "Cliquez pour montrer/cacher le menu. Déplacez pour changer l'ordre d'affichage.";
$lang->custom->saveFail = 'Echec de la sauvegarde !';
$lang->custom->page = ' Page';
$lang->custom->changeClassicTip = 'The module of Program will be hidden, if you switch to Version 12.5.3 and below.';
$lang->custom->scoreStatus[1] = 'On';
$lang->custom->scoreStatus[0] = 'Off';
+4 -3
View File
@@ -213,9 +213,10 @@ else
$lang->custom->workingList['full'] = 'Quản lý vòng đời ứng dụng';
$lang->custom->menuTip = 'Click để hiện/ẩn menu. Kéo thả để chuyển vị trí hiển thị.';
$lang->custom->saveFail = 'Lưu thất bại!';
$lang->custom->page = '';
$lang->custom->menuTip = 'Click để hiện/ẩn menu. Kéo thả để chuyển vị trí hiển thị.';
$lang->custom->saveFail = 'Lưu thất bại!';
$lang->custom->page = '';
$lang->custom->changeClassicTip = 'The module of Program will be hidden, if you switch to Version 12.5.3 and below.';
$lang->custom->scoreStatus[1] = 'On';
$lang->custom->scoreStatus[0] = 'Off';
+4 -3
View File
@@ -213,9 +213,10 @@ else
$lang->custom->workingList['full'] = '完整研发管理工具';
$lang->custom->menuTip = '点击显示或隐藏导航条目,拖拽来更改显示顺序。';
$lang->custom->saveFail = '保存失败!';
$lang->custom->page = '页面';
$lang->custom->menuTip = '点击显示或隐藏导航条目,拖拽来更改显示顺序。';
$lang->custom->saveFail = '保存失败!';
$lang->custom->page = '页面';
$lang->custom->changeClassicTip = '切换为老版本的习惯后,系统将取消项目集功能。';
$lang->custom->scoreStatus[1] = '开启';
$lang->custom->scoreStatus[0] = '关闭';
+3 -1
View File
@@ -11,6 +11,8 @@
*/
?>
<?php include 'header.html.php';?>
<?php js::set('newTips', $lang->upgrade->selectedModeTips['new'])?>
<?php js::set('classicTips', $lang->custom->changeClassicTip)?>
<div id='mainContent' class='main-content'>
<form class="load-indicator main-form" method='post'>
<div class='main-header'>
@@ -27,7 +29,7 @@
<label class="radio-inline"><input type="radio" name="mode" value="classic" <?php echo $mode == 'classic'? "checked='checked'" : ''; echo $isDisabled;?> id="modeclassic"><?php echo $lang->upgrade->to15Mode['classic'];?></label>
<label class="radio-inline"><input type="radio" name="mode" value="new" <?php echo $mode == 'new'? "checked='checked'" : ''; echo $isDisabled;?> id="modenew"><?php echo $lang->upgrade->to15Mode['new'];?></label>
</p>
<p class='text-info'><?php echo $lang->upgrade->selectedModeTips['new'];?></p>
<p class='text-info' id='modeTips'><?php echo $mode == 'new' ? $lang->custom->changeClassicTip : $lang->upgrade->selectedModeTips['new'];?></p>
</td>
</tr>
<tr>
+1 -1
View File
@@ -534,7 +534,7 @@ class docModel extends model
->join('mailto', ',')
->remove('comment,files,labels,uid,contactListMenu')
->get();
$doc = $this->loadModel('file')->processImgURL($doc, $this->config->doc->editor->edit['id'], $this->post->uid);
if($doc->contentType == 'markdown') $doc->content = $this->post->content;
if(!empty($doc->acl) and $doc->acl == 'private') $doc->users = $oldDoc->addedBy;
+2 -2
View File
@@ -30,7 +30,7 @@ $sessionString .= session_name() . '=' . session_id();
var url = createLink('file', 'download', 'fileID=' + fileID + '&mouse=left') + sessionString;
var width = (windowWidth > imageWidth) ? ((imageWidth < windowWidth * 0.5) ? windowWidth * 0.5 : imageWidth) : windowWidth;
var checkExtension = fileTitle.lastIndexOf('.' + extension) == (fileTitle.length - extension.length - 1);
if(fileTypes.indexOf(extension) >= 0 && checkExtension)
if(fileTypes.indexOf(extension) >= 0 && checkExtension && config.onlybody != 'yes')
{
$('<a>').modalTrigger({url: url, type: 'iframe', width: width}).trigger('click');
}
@@ -80,7 +80,7 @@ $sessionString .= session_name() . '=' . session_id();
}
echo "<li title='{$uploadDate}'>" . html::a($this->createLink('file', 'download', "fileID=$file->id") . $sessionString, $fileTitle . " <span class='text-muted'>({$fileSize})</span>", '_blank', "onclick=\"return downloadFile($file->id, '$file->extension', $imageWidth, '$file->title')\"");
$objectType = zget($this->config->file->objectType, $file->objectType);
$objectType = zget($this->config->file->objectType, $file->objectType);
if(common::hasPriv($objectType, 'edit', $object))
{
echo "<span class='right-icon'>&nbsp; ";
+4 -2
View File
@@ -532,7 +532,7 @@ $lang->release->methodOrder[70] = 'changeStatus';
/* Execution. */
$lang->resource->execution = new stdclass();
$lang->resource->execution->index = 'index';
//$lang->resource->execution->index = 'index';
$lang->resource->execution->view = 'view';
$lang->resource->execution->browse = 'browse';
$lang->resource->execution->create = 'createExec';
@@ -571,7 +571,7 @@ $lang->resource->execution->linkStory = 'linkStory';
$lang->resource->execution->unlinkStory = 'unlinkStory';
$lang->resource->execution->batchUnlinkStory = 'batchUnlinkStory';
//$lang->resource->execution->updateOrder = 'updateOrder';
$lang->resource->execution->kanban = 'kanbanAction';
$lang->resource->execution->kanban = 'kanban';
$lang->resource->execution->printKanban = 'printKanbanAction';
$lang->resource->execution->tree = 'treeAction';
$lang->resource->execution->treeTask = 'treeOnlyTask';
@@ -586,6 +586,7 @@ $lang->resource->execution->whitelist = 'whitelist';
$lang->resource->execution->addWhitelist = 'addWhitelist';
$lang->resource->execution->unbindWhitelist = 'unbindWhitelist';
$lang->resource->execution->storyEstimate = 'storyEstimate';
$lang->resource->execution->executionkanban = 'kanbanAction';
//if($config->systemMode == 'classic') $lang->resource->project->list = 'list';
//$lang->execution->methodOrder[0] = 'index';
@@ -642,6 +643,7 @@ $lang->execution->methodOrder[245] = 'whitelist';
$lang->execution->methodOrder[250] = 'addWhitelist';
$lang->execution->methodOrder[255] = 'unbindWhitelist';
$lang->execution->methodOrder[260] = 'storyEstimate';
$lang->execution->methodOrder[265] = 'executionkanban';
/* Task. */
$lang->resource->task = new stdclass();
+1 -1
View File
@@ -103,7 +103,7 @@ class stakeholder extends control
{
if($_POST)
{
$stakeholderList = $this->stakeholder->batchCreate();
$stakeholderList = $this->stakeholder->batchCreate($projectID);
if($this->viewType == 'json') $this->send(array('result' => 'success', 'message' => $this->lang->saveSuccess, 'idList' => $stakeholderList));
die(js::locate($this->createLink('stakeholder', 'browse', "projectID=$projectID"), 'parent'));
}
+24 -6
View File
@@ -95,6 +95,17 @@ class stakeholderModel extends model
if(!dao::isError())
{
$this->loadModel('user')->updateUserView($stakeholder->objectID, $stakeholder->objectType, $stakeholder->user);
/* Update linked products view. */
if($stakeholder->objectType == 'project' and $stakeholder->objectID)
{
$products = $this->loadModel('product')->getProductPairsByProject($stakeholder->objectID);
if(!empty($products))
{
foreach($products as $productID => $productName) $this->user->updateUserView($productID, 'product', $stakeholder->user);
}
}
return $stakeholderID;
}
return false;
@@ -106,15 +117,15 @@ class stakeholderModel extends model
* @access public
* @return array
*/
public function batchCreate()
public function batchCreate($projectID)
{
$this->loadModel('action');
$data = (array)fixer::input('post')->get();
$members = $this->loadModel('user')->getTeamMemberPairs($this->session->project, 'project');
$members = $this->loadModel('user')->getTeamMemberPairs($projectID, 'project');
$accounts = array_unique($data['accounts']);
$oldJoin = $this->dao->select('`user`, createdDate')->from(TABLE_STAKEHOLDER)->where('objectID')->eq((int)$this->session->project)->andWhere('objectType')->eq('project')->fetchPairs();
$this->dao->delete()->from(TABLE_STAKEHOLDER)->where('objectID')->eq((int)$this->session->project)->andWhere('objectType')->eq('project')->exec();
$oldJoin = $this->dao->select('`user`, createdDate')->from(TABLE_STAKEHOLDER)->where('objectID')->eq($projectID)->andWhere('objectType')->eq('project')->fetchPairs();
$this->dao->delete()->from(TABLE_STAKEHOLDER)->where('objectID')->eq($projectID)->andWhere('objectType')->eq('project')->exec();
$stakeholderList = array();
foreach($accounts as $key => $account)
@@ -122,7 +133,7 @@ class stakeholderModel extends model
if(empty($account)) continue;
$stakeholder = new stdclass();
$stakeholder->objectID = $this->session->project;
$stakeholder->objectID = $projectID;
$stakeholder->objectType = 'project';
$stakeholder->user = $account;
$stakeholder->type = in_array($account, array_keys($members)) ? 'inside' : 'outside';
@@ -142,7 +153,14 @@ class stakeholderModel extends model
$changedAccounts = array_merge($changedAccounts, array_diff($oldAccounts, $accounts));
$changedAccounts = array_unique($changedAccounts);
$this->loadModel('user')->updateUserView($this->session->project, 'project', $changedAccounts);
$this->loadModel('user')->updateUserView($projectID, 'project', $changedAccounts);
/* Update linked products view. */
$products = $this->loadModel('product')->getProductPairsByProject($projectID);
if(!empty($products))
{
foreach($products as $productID => $productName) $this->user->updateUserView($productID, 'product', $changedAccounts);
}
return $stakeholderList;
}
+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';
+2
View File
@@ -4251,6 +4251,8 @@ class upgradeModel extends model
if(isset($data->newProgram))
{
if(!$this->post->longTime and !$this->post->end and isset($data->begin)) die(js::alert(sprintf($this->lang->error->notempty, $this->lang->upgrade->end)));
/* Insert program. */
$program = new stdclass();
$program->name = $data->programName;
+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;?>
+1 -1
View File
@@ -35,7 +35,7 @@
<table class='table table-hover table-form'>
<thead>
<tr>
<th><?php echo $lang->upgrade->project;?></th>
<th><?php echo $lang->projectCommon;?></th>
<th class='divider'></th>
<th class='w-p50'><?php echo $lang->upgrade->selectProject;?></th>
</tr>