* Finish mergeprogram.

This commit is contained in:
wangyuting
2023-08-16 10:26:13 +08:00
parent c231f32ad4
commit 0b4a034adb
9 changed files with 173 additions and 136 deletions
+1 -1
View File
@@ -34,7 +34,7 @@ class actionModel extends model
{
if(strtolower($actionType) == 'commented' and empty($comment)) return false;
$actor = $actor ? $actor : $this->app->user->account;
$actor = $actor ? $actor : (!empty($this->app->user->account) ? $this->app->user->account : 'system');
$actionType = strtolower($actionType);
$actor = ($actionType == 'openedbysystem' or $actionType == 'closedbysystem') ? '' : $actor;
if($actor == 'guest' and $actionType == 'logout') return false;
+10 -10
View File
@@ -34,7 +34,7 @@ $config->bug->form->create['mailto'] = array('required' => false, 'type' =>
$config->bug->form->create['keywords'] = array('required' => false, 'type' => 'string', 'default' => '');
$config->bug->form->create['status'] = array('required' => false, 'type' => 'string', 'default' => 'active');
$config->bug->form->create['issueKey'] = array('required' => false, 'type' => 'string', 'default' => '');
$config->bug->form->create['openedBy'] = array('required' => false, 'type' => 'string', 'default' => $app->user->account);
$config->bug->form->create['openedBy'] = array('required' => false, 'type' => 'string', 'default' => isset($app->user->account) ? $app->user->account : '');
$config->bug->form->create['openedDate'] = array('required' => false, 'type' => 'date', 'default' => helper::now());
$config->bug->form->edit = array();
@@ -80,16 +80,16 @@ $config->bug->form->close = array();
$config->bug->form->close['status'] = array('required' => false, 'type' => 'string', 'default' => 'closed');
$config->bug->form->close['confirmed'] = array('required' => false, 'type' => 'int', 'default' => 1);
$config->bug->form->close['assignedDate'] = array('required' => false, 'type' => 'date', 'default' => helper::now());
$config->bug->form->close['lastEditedBy'] = array('required' => false, 'type' => 'string', 'default' => $app->user->account);
$config->bug->form->close['lastEditedBy'] = array('required' => false, 'type' => 'string', 'default' => isset($app->user->account) ? $app->user->account : '');
$config->bug->form->close['lastEditedDate'] = array('required' => false, 'type' => 'date', 'default' => helper::now());
$config->bug->form->close['closedBy'] = array('required' => false, 'type' => 'string', 'default' => $app->user->account);
$config->bug->form->close['closedBy'] = array('required' => false, 'type' => 'string', 'default' => isset($app->user->account) ? $app->user->account : '');
$config->bug->form->close['closedDate'] = array('required' => false, 'type' => 'date', 'default' => helper::now());
$config->bug->form->close['comment'] = array('required' => false, 'type' => 'string', 'default' => '', 'control' => 'editor');
$config->bug->form->assignTo = array();
$config->bug->form->assignTo['assignedTo'] = array('required' => false, 'type' => 'string', 'default' => '');
$config->bug->form->assignTo['assignedDate'] = array('required' => false, 'type' => 'date', 'default' => helper::now());
$config->bug->form->assignTo['lastEditedBy'] = array('required' => false, 'type' => 'string', 'default' => $app->user->account);
$config->bug->form->assignTo['lastEditedBy'] = array('required' => false, 'type' => 'string', 'default' => isset($app->user->account) ? $app->user->account : '');
$config->bug->form->assignTo['lastEditedDate'] = array('required' => false, 'type' => 'date', 'default' => helper::now());
$config->bug->form->assignTo['mailto'] = array('required' => false, 'type' => 'array', 'default' => array(''), 'filter' => 'join');
$config->bug->form->assignTo['comment'] = array('required' => false, 'type' => 'string', 'default' => '', 'control' => 'editor');
@@ -99,11 +99,11 @@ $config->bug->form->resolve['status'] = array('required' => false, 'type
$config->bug->form->resolve['confirmed'] = array('required' => false, 'type' => 'int', 'default' => 1);
$config->bug->form->resolve['resolvedBuild'] = array('required' => false, 'type' => 'int', 'default' => 0);
$config->bug->form->resolve['resolution'] = array('required' => false, 'type' => 'string', 'default' => '');
$config->bug->form->resolve['resolvedBy'] = array('required' => false, 'type' => 'string', 'default' => $app->user->account);
$config->bug->form->resolve['resolvedBy'] = array('required' => false, 'type' => 'string', 'default' => isset($app->user->account) ? $app->user->account : '');
$config->bug->form->resolve['resolvedDate'] = array('required' => false, 'type' => 'date', 'default' => helper::now());
$config->bug->form->resolve['assignedTo'] = array('required' => false, 'type' => 'string', 'default' => '');
$config->bug->form->resolve['assignedDate'] = array('required' => false, 'type' => 'date', 'default' => helper::now());
$config->bug->form->resolve['lastEditedBy'] = array('required' => false, 'type' => 'string', 'default' => $app->user->account);
$config->bug->form->resolve['lastEditedBy'] = array('required' => false, 'type' => 'string', 'default' => isset($app->user->account) ? $app->user->account : '');
$config->bug->form->resolve['lastEditedDate'] = array('required' => false, 'type' => 'date', 'default' => helper::now());
$config->bug->form->resolve['duplicateBug'] = array('required' => false, 'type' => 'int', 'default' => 0);
$config->bug->form->resolve['buildName'] = array('required' => false, 'type' => 'string', 'default' => '');
@@ -115,7 +115,7 @@ $config->bug->form->activate = array();
$config->bug->form->activate['assignedTo'] = array('required' => false, 'type' => 'string', 'default' => '');
$config->bug->form->activate['openedBuild'] = array('required' => false, 'type' => 'array', 'default' => array(), 'filter' => 'join');
$config->bug->form->activate['assignedDate'] = array('required' => false, 'type' => 'date', 'default' => helper::now());
$config->bug->form->activate['lastEditedBy'] = array('required' => false, 'type' => 'string', 'default' => $app->user->account);
$config->bug->form->activate['lastEditedBy'] = array('required' => false, 'type' => 'string', 'default' => isset($app->user->account) ? $app->user->account : '');
$config->bug->form->activate['lastEditedDate'] = array('required' => false, 'type' => 'date', 'default' => helper::now());
$config->bug->form->activate['activatedDate'] = array('required' => false, 'type' => 'date', 'default' => helper::now());
$config->bug->form->activate['resolution'] = array('required' => false, 'type' => 'string', 'default' => '');
@@ -147,7 +147,7 @@ $config->bug->form->batchActivate['closedDate'] = array('required' => false,
$config->bug->form->batchActivate['duplicateBug'] = array('required' => false, 'type' => 'int', 'default' => 0);
$config->bug->form->batchActivate['toTask'] = array('required' => false, 'type' => 'int', 'default' => 0);
$config->bug->form->batchActivate['toStory'] = array('required' => false, 'type' => 'int', 'default' => 0);
$config->bug->form->batchActivate['lastEditedBy'] = array('required' => false, 'type' => 'string', 'default' => $app->user->account);
$config->bug->form->batchActivate['lastEditedBy'] = array('required' => false, 'type' => 'string', 'default' => isset($app->user->account) ? $app->user->account : '');
$config->bug->form->batchActivate['lastEditedDate'] = array('required' => false, 'type' => 'date', 'default' => helper::now());
$config->bug->form->batchCreate = common::formConfig('bug', 'batchCreate');
@@ -185,7 +185,7 @@ $config->bug->form->batchEdit['keywords'] = array('required' => false, 'ty
$config->bug->form->batchEdit['resolvedBy'] = array('required' => false, 'type' => 'string', 'default' => '');
$config->bug->form->batchEdit['resolution'] = array('required' => false, 'type' => 'string', 'default' => '');
$config->bug->form->batchEdit['duplicateBug'] = array('required' => false, 'type' => 'int', 'default' => 0);
$config->bug->form->batchEdit['lastEditedBy'] = array('required' => false, 'type' => 'string', 'default' => $app->user->account);
$config->bug->form->batchEdit['lastEditedBy'] = array('required' => false, 'type' => 'string', 'default' => isset($app->user->account) ? $app->user->account : '');
$config->bug->form->batchEdit['lastEditedDate'] = array('required' => false, 'type' => 'date', 'default' => helper::now());
$config->bug->form->confirm = array();
@@ -195,6 +195,6 @@ $config->bug->form->confirm['status'] = array('required' => false, 'type
$config->bug->form->confirm['mailto'] = array('required' => false, 'type' => 'array', 'default' => array(''), 'filter' => 'join');
$config->bug->form->confirm['assignedTo'] = array('required' => false, 'type' => 'string', 'default' => '');
$config->bug->form->confirm['assignedDate'] = array('required' => false, 'type' => 'date', 'default' => helper::now());
$config->bug->form->confirm['lastEditedBy'] = array('required' => false, 'type' => 'string', 'default' => $app->user->account);
$config->bug->form->confirm['lastEditedBy'] = array('required' => false, 'type' => 'string', 'default' => isset($app->user->account) ? $app->user->account : '');
$config->bug->form->confirm['lastEditedDate'] = array('required' => false, 'type' => 'date', 'default' => helper::now());
$config->bug->form->confirm['comment'] = array('required' => false, 'type' => 'string', 'default' => '', 'control' => 'editor');
+1 -1
View File
@@ -22,7 +22,7 @@ $config->testcase->form->create['stepType'] = array('required' => false, 'ty
$config->testcase->form->create['keywords'] = array('required' => false, 'type' => 'string', 'default' => '');
$config->testcase->form->create['status'] = array('required' => false, 'type' => 'string', 'default' => 'wait');
$config->testcase->form->create['version'] = array('required' => false, 'type' => 'int', 'default' => 1);
$config->testcase->form->create['openedBy'] = array('required' => false, 'type' => 'string', 'default' => $app->user->account);
$config->testcase->form->create['openedBy'] = array('required' => false, 'type' => 'string', 'default' => isset($app->user->account) ? $app->user->account : '');
$config->testcase->form->create['openedDate'] = array('required' => false, 'type' => 'date', 'default' => helper::now());
$config->testcase->form->batchCreate = common::formConfig('testcase', 'batchCreate');
+22 -20
View File
@@ -309,11 +309,14 @@ class upgrade extends control
}
/* Create Program. */
$result = $this->upgrade->createProgram($linkedProducts, $linkedSprints);
if(dao::isError()) return $this->send(array('result' => 'fail', 'message' => dao::getError()));
if(isset($result['result']) && $result['result'] == 'fail') return $this->send($result);
list($programID, $projectList, $lineID) = $this->upgrade->createProgram($linkedProducts, $linkedSprints);
if(dao::isError()) return print(js::error(dao::getError()));
/* Process merged products and projects. */
if($_POST['projectType'] == 'execution')
if($projectType == 'execution')
{
/* Use historical projects as execution upgrades. */
$this->upgrade->processMergedData($programID, $projectList, $lineID, $linkedProducts, $linkedSprints);
@@ -324,7 +327,7 @@ class upgrade extends control
$singleProducts = array_diff($linkedProducts, $sprintProducts);
foreach($linkedSprints as $sprint)
{
$this->upgrade->processMergedData($programID, $projectList[$sprint], $lineID, array($sprintProducts[$sprint] => $sprintProducts[$sprint]), array($sprint => $sprint));
$this->upgrade->processMergedData($programID, zget($projectList, $sprint, array()), $lineID, array($sprintProducts[$sprint] => $sprintProducts[$sprint]), array($sprint => $sprint));
}
}
@@ -362,13 +365,13 @@ class upgrade extends control
/* Create Program. */
list($programID, $projectList, $lineID) = $this->upgrade->createProgram($linkedProducts, $linkedSprints);
if(dao::isError()) return print(js::error(dao::getError()));
if(dao::isError()) return $this->send(array('result' => 'fail', 'message' => dao::getError()));
/* Process productline. */
$this->dao->delete()->from(TABLE_MODULE)->where('`root`')->eq(0)->andWhere('`type`')->eq('line')->exec();
/* Process merged products and projects. */
if($_POST['projectType'] == 'execution')
if($projectType == 'execution')
{
/* Use historical projects as execution upgrades. */
$this->upgrade->processMergedData($programID, $projectList, $lineID, $linkedProducts, $linkedSprints);
@@ -392,9 +395,9 @@ class upgrade extends control
/* Create Program. */
list($programID, $projectList, $lineID) = $this->upgrade->createProgram(array(), $linkedSprints);
if(dao::isError()) return print(js::error(dao::getError()));
if(dao::isError()) return $this->send(array('result' => 'fail', 'message' => dao::getError()));
if($_POST['projectType'] == 'execution')
if($projectType == 'execution')
{
/* Use historical projects as execution upgrades. */
$this->upgrade->processMergedData($programID, $projectList, $lineID, array(), $linkedSprints);
@@ -414,9 +417,9 @@ class upgrade extends control
/* Create Program. */
list($programID, $projectList, $lineID) = $this->upgrade->createProgram(array(), $linkedSprints);
if(dao::isError()) return print(js::error(dao::getError()));
if(dao::isError()) return $this->send(array('result' => 'fail', 'message' => dao::getError()));
if($_POST['projectType'] == 'execution')
if($projectType == 'execution')
{
/* Use historical projects as execution upgrades. */
$this->upgrade->processMergedData($programID, $projectList, $lineID, array(), $linkedSprints);
@@ -431,13 +434,12 @@ class upgrade extends control
}
/* If is more-link sprints, and as project upgrade, set old relation into new project. */
$projectProducts = $this->dao->select('product,project,branch,plan')->from(TABLE_PROJECTPRODUCT)
->where('project')->in($linkedSprints)
->fetchAll();
$projectProducts = $this->dao->select('product,project,branch,plan')->from(TABLE_PROJECTPRODUCT)->where('project')->in($linkedSprints)->fetchAll();
foreach($projectProducts as $projectProduct)
{
$data = new stdclass();
$data->project = $_POST['projectType'] == 'execution' ? $projectList : $projectList[$projectProduct->project];
$data->project = $projectType == 'execution' ? $projectList : $projectList[$projectProduct->project];
$data->product = $projectProduct->product;
$data->plan = $projectProduct->plan;
$data->branch = $projectProduct->branch;
@@ -446,7 +448,7 @@ class upgrade extends control
}
}
return print(js::locate($this->createLink('upgrade', 'mergeProgram', "type=$type&programID=$programID&projectType=$projectType"), 'parent'));
return $this->send(array('result' => 'success', 'message' => $this->lang->saveSuccess, 'load' => $this->createLink('upgrade', 'mergeProgram', "type=$type&programID=$programID&projectType=$projectType")));
}
/* Get no merged product and project count. */
@@ -468,7 +470,7 @@ class upgrade extends control
/* Update sprints history. */
$sprints = $this->dao->select('id')->from(TABLE_PROJECT)->where('type')->eq('sprint')->fetchAll('id');
$this->dao->update(TABLE_ACTION)->set('objectType')->eq('execution')->where('objectID')->in(array_keys($sprints))->andWhere('objectType')->eq('project')->exec();
return print(js::locate($this->createLink('upgrade', 'mergeRepo')));
$this->locate($this->createLink('upgrade', 'mergeRepo'));
}
$this->view->noMergedProductCount = $noMergedProductCount;
@@ -654,7 +656,7 @@ class upgrade extends control
$this->view->programs = $programs;
$this->view->programID = $programID;
$this->view->projects = $this->upgrade->getProjectPairsByProgram($currentProgramID);
$this->view->lines = $currentProgramID ? $this->loadModel('product')->getLinePairs($currentProgramID) : array('' => '');
$this->view->lines = $currentProgramID ? $this->loadModel('product')->getLinePairs($currentProgramID) : array();
$this->view->users = $this->loadModel('user')->getPairs('noclosed|noempty');
$this->view->groups = $this->loadModel('group')->getPairs();
$this->view->systemMode = $systemMode;
@@ -675,7 +677,7 @@ class upgrade extends control
if($_POST)
{
$mergeMode = $this->post->projectType;
if($mergeMode == 'manually') $this->locate(inlink('mergeProgram'));
if($mergeMode == 'manually') return $this->send(array('result' => 'success', 'load' => inlink('mergeProgram')));
if($mode == 'light') $programID = $this->loadModel('setting')->getItem('owner=system&module=common&section=global&key=defaultProgram');
if($mode == 'ALM') $programID = $this->loadModel('program')->createDefaultProgram();
@@ -762,7 +764,7 @@ class upgrade extends control
$this->dao->delete()->from(TABLE_BLOCK)->exec();
$this->dao->delete()->from(TABLE_CONFIG)->where('`key`')->eq('blockInited')->exec();
$this->loadModel('setting')->deleteItems('owner=system&module=common&section=global&key=upgradeStep');
return $this->send(array('result' => 'success', 'load' => inlink('afterExec', 'fromVersion=&processed=no')));
$this->locate(inlink('afterExec', 'fromVersion=&processed=no'));
}
$this->view->title = $this->lang->upgrade->mergeRepo;
@@ -828,11 +830,11 @@ class upgrade extends control
{
$this->view->title = $this->lang->upgrade->consistency;
$this->view->alterSQL = $alterSQL;
return print($this->display('upgrade', 'consistency'));
return $this->display('upgrade', 'consistency');
}
$extFiles = $this->upgrade->getExtFiles();
if(!empty($extFiles) and $skipMoveFile == 'no') return print(js::locate(inlink('moveExtFiles', "fromVersion=$fromVersion")));
if(!empty($extFiles) and $skipMoveFile == 'no') $this->locate(inlink('moveExtFiles', "fromVersion=$fromVersion"));
$response = $this->upgrade->removeEncryptedDir();
if($response['result'] == 'fail')
+82 -15
View File
@@ -96,24 +96,25 @@ window.changeProjectType = function()
{
$('[name=projectAcl]').attr('disabled', 'disabled');
$('[name=programAcl]').removeAttr('disabled');
$(".projectName input").attr('disabled' ,'disabled');
$(".projectName .picker-field").zui('picker').render({disabled: true});
}
if(projectType == 'execution')
{
$('[name=programAcl]').attr('disabled', 'disabled');
$('[name=projectAcl]').removeAttr('disabled');
$(".projectName input").removeAttr('disabled');
$(".projectName .picker-field").zui('picker').render({disabled: false});
}
changeNewProject();
}
window.changeNewProgram = function()
{
const checkedNewProgram = $('.programName').not('.hidden').find('input[name=newProgram]').prop('checked');
const checkedNewProgram = $('input[name=newProgram]').prop('checked');
$('input[name=newProgram]').prop('checked', checkedNewProgram);
$('form .program-no-exist').toggleClass('hidden', !checkedNewProgram);
$('form .program-exist').toggleClass('hidden', checkedNewProgram);
$('#programs').toggleClass('hidden', checkedNewProgram);
$('#programName').toggleClass('hidden', !checkedNewProgram);
if(checkedNewProgram)
{
$('#programs').attr('disabled', 'disabled');
@@ -126,11 +127,10 @@ window.changeNewProgram = function()
window.changeNewProject = function()
{
const checkedNewProject = $('.projectName').not('.hidden').find('input[name=newProject]').prop('checked');
const checkedNewProject = $('input[name=newProject]').prop('checked');
$('input[name=newProject]').prop('checked', checkedNewProject);
$('form .project-no-exist').toggleClass('hidden', !checkedNewProject);
$('form .project-exist').toggleClass('hidden', checkedNewProject);
$('#projects').toggleClass('hidden', checkedNewProject);
$('#projectName').toggleClass('hidden', !checkedNewProject);
if(checkedNewProject)
{
@@ -144,11 +144,10 @@ window.changeNewProject = function()
window.changeNewLine = function()
{
const checkedNewLine = $('.lineName').not('.hidden').find('input[name=newLine]').prop('checked');
const checkedNewLine = $('input[name=newLine]').prop('checked');
$('input[name=newLine]').prop('checked', checkedNewLine);
$('form .line-no-exist').toggleClass('hidden', !checkedNewLine);
$('form .line-exist').toggleClass('hidden', checkedNewLine);
$('#lines').toggleClass('hidden', checkedNewLine);
$('#lineName').toggleClass('hidden', !checkedNewLine);
if(checkedNewLine)
{
$('#lines').attr('disabled', 'disabled');
@@ -181,6 +180,53 @@ window.changeLongTime = function()
}
}
window.clickSubmit = function()
{
if(type == 'productline')
{
var checkedProductCount = $("input[name^='products']:checked").length;
if(checkedProductCount <= 0)
{
alert(errorNoProduct);
return false;
}
}
else if(type == 'product')
{
var checkedProductCount = $("input[name^='products']:checked").length;
if(checkedProductCount <= 0)
{
alert(errorNoProduct);
return false;
}
var executionCount = 0;
var checkedExecutionCount = 0;
$("input[name^='products']:checked").each(function()
{
var productID = $(this).val()
executionCount += $("[data-product='" + productID + "']").length;
checkedExecutionCount += $("[data-product='" + productID + "']:checked").length;
});
if(executionCount !== 0 && checkedExecutionCount === 0)
{
alert(errorNoExecution);
return false;
}
}
else
{
var checkedExecutionCount = $("input[name^='sprints']:checked").length;
if(checkedExecutionCount === 0)
{
alert(errorNoExecution);
return false;
}
}
}
window.checkAllLines = function()
{
let allChecked = true;
@@ -247,12 +293,34 @@ window.checkGroupProducts = function(lineID, productID)
window.buildForm = function()
{
initFormData();
setProgramName();
setProgramBegin();
setProgramEnd();
setProjectStatus();
setProjectPM();
}
window.setProgramName = function()
{
const programID = $('input[name^=products]:checked').data('programid');
if(programID)
{
$('.programName').not('.hidden').find('input[name=newProgram]').prop('checked', false);
changeNewProgram();
$('input[name=newProgram]').attr('disabled', 'disabled');
$('#programs').zui('picker').$.changeState({value: programID.toString()});
$("#programs").zui('picker').render({disabled: true});
$('#programID').val(programID);
getProjectByProgram(programID);
}
else
{
$('input[name=newProgram]').removeAttr('disabled');
$("#programs").zui('picker').render({disabled: false});
$('#programID').val('');
}
}
window.setProgramBegin = function()
{
let minBegin = today;
@@ -324,7 +392,6 @@ window.initFormData = function()
{
$('#programBox').toggleClass('hidden', mode == 'light');
$('.programParams').toggleClass('hidden', $('[name^=sprints]:checked').length == 0);
$('.projectName').toggleClass('hidden', $('[name^=sprints]:checked').length == 0 || projectType == 'project');
$('.programForm').toggleClass('hidden', $('[name^=sprints]:checked').length != 0 && projectType == 'project' && mode == 'light');
if($('[name^=sprints]:checked').length == 0)
+44 -36
View File
@@ -4746,19 +4746,30 @@ class upgradeModel extends model
$data = fixer::input('post')->get();
$account = isset($this->app->user->account) ? $this->app->user->account : '';
$projectType = zget($data, 'projectType', 'project');
if(isset($data->newProgram))
{
if(!$this->post->longTime and !$this->post->end and isset($data->begin)) return print(js::alert(sprintf($this->lang->error->notempty, $this->lang->upgrade->end)));
if(isset($data->projectName) and $data->projectType == 'execution' and empty($data->projectName)) return print(js::alert(sprintf($this->lang->error->notempty, $this->lang->upgrade->projectName)));
if($data->projectType == 'project')
if(empty($data->programName))
{
$projectPairs = $this->dao->select('id,name')->from(TABLE_EXECUTION)
->where('deleted')->eq('0')
->andWhere('id')->in($projectIdList)
->fetchPairs();
dao::$errors['programName'][] = sprintf($this->lang->error->notempty, $this->lang->upgrade->programName);
return false;
}
if(!$this->post->longTime and !$this->post->end and isset($data->begin))
{
dao::$errors['end'][] = sprintf($this->lang->error->notempty, $this->lang->upgrade->end);
return false;
}
if(isset($data->projectName) and $projectType == 'execution' and empty($data->projectName))
{
dao::$errors['projectName'][] = sprintf($this->lang->error->notempty, $this->lang->upgrade->projectName);
return false;
}
if($projectType == 'project')
{
$projectPairs = $this->dao->select('id,name')->from(TABLE_EXECUTION)->where('deleted')->eq('0')->andWhere('id')->in($projectIdList)->fetchPairs();
$projectNames = array();
$duplicateList = '';
foreach($projectPairs as $projectID => $projectName)
@@ -4773,11 +4784,7 @@ class upgradeModel extends model
$projectNames[$projectName] = $projectID;
}
if($duplicateList)
{
echo "<script>new parent.$.zui.ModalTrigger({url: parent.$.createLink('upgrade', 'renameObject', 'type=project&duplicateList=$duplicateList', '', 1), type: 'iframe', width:'40%'}).show();</script>";
die;
}
if($duplicateList) return array('result' => 'fail', 'callback' => "loadModal('" . helper::createLink('upgrade', 'renameObject', "type=project&duplicateList={$duplicateList}") . "')");
}
/* Insert program. */
@@ -4792,7 +4799,7 @@ class upgradeModel extends model
$program->openedVersion = $this->config->version;
$program->acl = isset($data->programAcl) ? $data->programAcl : 'open';
$program->days = $this->computeDaysDelta($program->begin, $program->end);
$program->PM = $data->projectType == 'project' ? $data->PM : '';
$program->PM = $projectType == 'project' ? zget($data, 'PM', '') : '';
$program->vision = 'rnd';
$this->app->loadLang('program');
@@ -4840,8 +4847,8 @@ class upgradeModel extends model
$line->root = $programID;
$line->order = $maxOrder;
$this->dao->insert(TABLE_MODULE)->data($line)->exec();
$lineID = $this->dao->lastInsertID();
$lineID = $this->dao->lastInsertID();
$path = ",$lineID,";
$this->dao->update(TABLE_MODULE)->set('path')->eq($path)->where('id')->eq($lineID)->exec();
@@ -4852,20 +4859,25 @@ class upgradeModel extends model
}
else
{
$lineID = $data->lines;
$lineID = !empty($data->lines) ? $data->lines : 0;
}
if(!isset($data->sprints)) return array($programID, 0, $lineID);
$projectList = array();
if(isset($data->newProject))
{
if(!$this->post->longTime and !$this->post->end) return print(js::alert(sprintf($this->lang->error->notempty, $this->lang->upgrade->end)));
if(!$this->post->longTime and !$this->post->end)
{
dao::$errors['end'][] = sprintf($this->lang->error->notempty, $this->lang->upgrade->end);
return false;
}
/* Create a project. */
$this->loadModel('action');
$this->app->loadLang('doc');
$this->lang->project->name = $this->lang->upgrade->projectName;
if($data->projectType == 'execution')
if($projectType == 'execution')
{
/* Use historical projects as execution upgrades. */
$projectList = $this->createProject($programID, $data);
@@ -4891,11 +4903,7 @@ class upgradeModel extends model
}
}
if($duplicateList)
{
echo "<script>new parent.$.zui.ModalTrigger({url: parent.$.createLink('upgrade', 'renameObject', 'type=project&duplicateList=$duplicateList', '', 1), type: 'iframe', width:'40%'}).show();</script>";
die;
}
if($duplicateList) return array('result' => 'fail', 'callback' => "loadModal('" . helper::createLink('upgrade', 'renameObject', "type=project&duplicateList={$duplicateList}") . "')");
foreach($projectIdList as $projectID)
{
@@ -4911,7 +4919,7 @@ class upgradeModel extends model
}
}
}
else
else if(!empty($data->projects))
{
$projectList = $data->projects;
$this->dao->update(TABLE_PROJECT)->set('status')->eq($data->projectStatus)->where('id')->eq($projectList)->exec();
@@ -4941,7 +4949,7 @@ class upgradeModel extends model
$project->model = 'scrum';
$project->parent = $programID;
$project->status = $data->projectStatus;
$project->team = empty($data->team) ? $data->team : $data->projectName;
$project->team = !empty($data->team) ? $data->team : $data->projectName;
$project->begin = $data->begin;
$project->end = isset($data->end) ? $data->end : LONG_TIME;
$project->days = $this->computeDaysDelta($project->begin, $project->end);
@@ -5025,17 +5033,17 @@ class upgradeModel extends model
*/
public function processMergedData($programID, $projectID, $lineID = 0, $productIdList = array(), $sprintIdList = array())
{
if(!$projectID) return false;
/* No project is created when there are no sprints. */
if(!$sprintIdList) return false;
/* Product linked objects. */
$this->dao->update(TABLE_RELEASE)->set('project')->eq($projectID)->where('product')->in($productIdList)->exec();
/* Compute product acl. */
$this->computeProductAcl($productIdList, $programID, $lineID);
/* No project is created when there are no sprints. */
if(!$sprintIdList) return;
if(!$projectID) return print(js::alert($this->lang->upgrade->projectEmpty));
$this->dao->update(TABLE_BUG)->set('project')->eq($projectID)->where('product')->in($productIdList)->andWhere('project')->eq(0)->exec();
$this->dao->update(TABLE_TESTREPORT)->set('project')->eq($projectID)->where('product')->in($productIdList)->andWhere('project')->eq(0)->exec();
$this->dao->update(TABLE_TESTSUITE)->set('project')->eq($projectID)->where('product')->in($productIdList)->andWhere('project')->eq(0)->exec();
@@ -6423,7 +6431,7 @@ class upgradeModel extends model
{
$isOldVersion = false;
$fromVersion = str_replace('_', '.', $fromVersion);
if(is_numeric($fromVersion[0]) and version_compare($fromVersion, '12.5.3', '<='))
if(is_numeric($fromVersion[0]) and version_compare($fromVersion, '12.0.0', '<='))
{
$isOldVersion = true;
}
@@ -6898,11 +6906,11 @@ class upgradeModel extends model
*/
public function processBugLinkBug()
{
$bugs = $this->dao->select('id,relatedBug')->from(TABLE_BUG)->where('relatedBug')->ne('')->fetchPairs();
foreach($bugs as $bugID => $relatedBugs)
$bugs = $this->dao->select('id,linkBug')->from(TABLE_BUG)->where('linkBug')->ne('')->fetchPairs();
foreach($bugs as $bugID => $linkBugs)
{
$relatedBugs = explode(',', $relatedBugs);
$this->dao->update(TABLE_BUG)->set("relatedBug = TRIM(BOTH ',' from CONCAT(relatedbug, ',$bugID'))")->where('id')->in($relatedBugs)->andWhere('id')->ne($bugID)->andWhere("CONCAT(',', relatedBug, ',')")->notlike("%,$bugID,%")->exec();
$linkBugs = explode(',', $linkBugs);
$this->dao->update(TABLE_BUG)->set("linkBug = TRIM(BOTH ',' from CONCAT(relatedbug, ',$bugID'))")->where('id')->in($linkBugs)->andWhere('id')->ne($bugID)->andWhere("CONCAT(',', linkBug, ',')")->notlike("%,$bugID,%")->exec();
}
return !dao::isError();
+11 -51
View File
@@ -31,31 +31,17 @@ $createProgram = function($data)
set::class('programForm mt-4 form-grid'),
formGroup
(
set::class('programName hidden program-exist'),
set::label($lang->upgrade->existProgram),
set::required(true),
inputGroup
(
picker(set::id('programs'), set::name('programs'), set::items($data->programs), set::value($data->programID), set('data-on', 'change'), set('data-call', 'changePrograms')),
span
(
set('class', 'input-group-addon'),
checkbox(set::name('newProgram'), set::text($lang->upgrade->newProgram), set::value(1), set::checked(true), set('data-on', 'change'), set('data-call', 'changeNewProgram'))
),
)
),
formGroup
(
set::class('programName program-no-exist'),
set::class('programName'),
set::label($lang->upgrade->programName),
set::required(true),
inputGroup
(
picker(set::id('programs'), set::name('programs'), set::items($data->programs), set::value($data->programID), set('data-on', 'change'), set('data-call', 'changePrograms'), set::class('hidden')),
input(set::name('programName')),
span
(
set('class', 'input-group-addon'),
checkbox(set::name('newProgram'), set::text($lang->upgrade->newProgram), set::value(0), set::checked(true), set('data-on', 'change'), set('data-call', 'changeNewProgram'))
checkbox(set::name('newProgram'), set::text($lang->upgrade->newProgram), set::value('0'), set::checked(true), set('data-on', 'change'), set('data-call', 'changeNewProgram'))
),
input(set::class('hidden'), set::name('programID'))
)
@@ -71,29 +57,16 @@ $createProgram = function($data)
),
formGroup
(
set::class('projectName hidden project-exist'),
set::label($lang->upgrade->existProject),
inputGroup
(
picker(set::id('projects'), set::name('projects'), set::items($data->projects), set::class('picker-field')),
span
(
set('class', 'input-group-addon'),
checkbox(set::name('newProject'), set::text($lang->upgrade->newProgram), set::value(1), set::checked(true), set('data-on', 'change'), set('data-call', 'changeNewProject'))
)
)
),
formGroup
(
set::class('projectName hidden project-no-exist'),
set::class('projectName hidden'),
set::label($lang->upgrade->projectName),
inputGroup
(
input(set::name('projectName'), set::value(isset($data->sprintName) ? $data->sprintName : '')),
picker(set::id('projects'), set::name('projects'), set::items($data->projects), set::class('picker-field hidden')),
span
(
set('class', 'input-group-addon'),
checkbox(set::name('newProject'), set::text($lang->upgrade->newProgram), set::value(0), set::checked(true), set('data-on', 'change'), set('data-call', 'changeNewProject'))
set('class', 'input-group-addon ' . (count($data->projects) ? '' : 'hidden')),
checkbox(set::name('newProject'), set::text($lang->upgrade->newProgram), set::value('0'), set::checked(true), set('data-on', 'change'), set('data-call', 'changeNewProject'))
)
)
),
@@ -108,29 +81,16 @@ $createProgram = function($data)
),
formGroup
(
set::class('lineName hidden line-exist'),
set::label($lang->upgrade->existLine),
inputGroup
(
picker(set::id('lines'), set::name('lines'), set::items($data->lines)),
span
(
set('class', 'input-group-addon'),
checkbox(set::name('newLine'), set::text($lang->upgrade->newProgram), set::value(1), set::checked(true), set('data-on', 'change'), set('data-call', 'changeNewLine'))
)
)
),
formGroup
(
set::class('lineName line-no-exist'),
set::class('lineName'),
set::label($lang->upgrade->line),
inputGroup
(
picker(set::id('lines'), set::name('lines'), set::items($data->lines), set::class('hidden')),
input(set::name('lineName'), set::value(isset($data->lineName) ? $data->lineName : '')),
span
(
set('class', 'input-group-addon'),
checkbox(set::name('newLine'), set::text($lang->upgrade->newProgram), set::value(0), set::checked(true), set('data-on', 'change'), set('data-call', 'changeNewLine'))
set('class', 'input-group-addon ' . (count($data->lines) ? '' : 'hidden')),
checkbox(set::name('newLine'), set::text($lang->upgrade->newProgram), set::value('0'), set::checked(true), set('data-on', 'change'), set('data-call', 'changeNewLine'))
)
)
),
+1 -2
View File
@@ -87,7 +87,7 @@ $getMergeData = function($data)
set::class('border p-4 overflow-hidden'),
div
(
set::class('flex'),
set::class('flex mb-4'),
cell
(
set::width('1/3'),
@@ -109,7 +109,6 @@ $getMergeData = function($data)
),
div
(
set::class('mt-4'),
$checkBoxGroup
)
),
+1
View File
@@ -43,6 +43,7 @@ div
form
(
set::actions(''),
set::ajax(array('beforeSubmit' => jsRaw("clickSubmit"))),
div
(
div