Merge branch 'master' of https://gitlab.zcorp.cc/easycorp/zentaopms
This commit is contained in:
@@ -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);
|
||||
})
|
||||
})
|
||||
@@ -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';
|
||||
|
||||
@@ -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';
|
||||
|
||||
@@ -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';
|
||||
|
||||
@@ -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';
|
||||
|
||||
@@ -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] = '关闭';
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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'> ";
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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'));
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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;}
|
||||
|
||||
@@ -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'))
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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';
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;?>
|
||||
|
||||
@@ -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>
|
||||
|
||||
Reference in New Issue
Block a user