* Finish mergeprogram.
This commit is contained in:
@@ -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
@@ -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');
|
||||
|
||||
@@ -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
@@ -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§ion=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§ion=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')
|
||||
|
||||
@@ -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
@@ -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();
|
||||
|
||||
@@ -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'))
|
||||
)
|
||||
)
|
||||
),
|
||||
|
||||
@@ -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
|
||||
)
|
||||
),
|
||||
|
||||
@@ -43,6 +43,7 @@ div
|
||||
form
|
||||
(
|
||||
set::actions(''),
|
||||
set::ajax(array('beforeSubmit' => jsRaw("clickSubmit"))),
|
||||
div
|
||||
(
|
||||
div
|
||||
|
||||
Reference in New Issue
Block a user