* Optimize bug edit, change render opened and resolved builds with ajax.

This commit is contained in:
chaideqing
2023-06-28 02:29:06 +00:00
parent f83c1aa38d
commit 7c4c863e3c
3 changed files with 100 additions and 50 deletions
+57 -30
View File
@@ -1093,34 +1093,6 @@ class bug extends control
$this->view->position[] = html::a($this->createLink('bug', 'browse', "productID=$productID"), $this->products[$productID]);
$this->view->position[] = $this->lang->bug->edit;
/* Assign. */
$allBuilds = $this->loadModel('build')->getBuildPairs($productID, 'all', 'noempty');
if($executionID)
{
$openedBuilds = $this->build->getBuildPairs($productID, $bug->branch, 'noempty,noterminate,nodone,withbranch,noreleased', $executionID, 'execution');
}
elseif($projectID)
{
$openedBuilds = $this->build->getBuildPairs($productID, $bug->branch, 'noempty,noterminate,nodone,withbranch,noreleased', $projectID, 'project');
}
else
{
$openedBuilds = $this->build->getBuildPairs($productID, $bug->branch, 'noempty,noterminate,nodone,withbranch,noreleased');
}
/* Set the openedBuilds list. */
$oldOpenedBuilds = array();
$bugOpenedBuilds = explode(',', $bug->openedBuild);
foreach($bugOpenedBuilds as $buildID)
{
if(isset($allBuilds[$buildID])) $oldOpenedBuilds[$buildID] = $allBuilds[$buildID];
}
$openedBuilds = $openedBuilds + $oldOpenedBuilds;
/* Set the resolvedBuilds list. */
$oldResolvedBuild = array();
if(($bug->resolvedBuild) and isset($allBuilds[$bug->resolvedBuild])) $oldResolvedBuild[$bug->resolvedBuild] = $allBuilds[$bug->resolvedBuild];
$projectID = $this->lang->navGroup->bug == 'project' ? $this->session->project : 0;
if($this->app->tab == 'execution' or $this->app->tab == 'project')
@@ -1221,13 +1193,68 @@ class bug extends control
$this->view->users = $this->user->getPairs('', "$bug->assignedTo,$bug->resolvedBy,$bug->closedBy,$bug->openedBy");
$this->view->assignedToList = $assignedToList;
$this->view->cases = array('' => '') + $cases;
$this->view->openedBuilds = $openedBuilds;
$this->view->resolvedBuilds = array('' => '') + $openedBuilds + $oldResolvedBuild;
$this->view->actions = $this->action->getList('bug', $bugID);
$this->display();
}
/**
* Ajax get opened and resolved builds.
*
* @param int $bugID
* @access public
* @return mixed
*/
public function ajaxGetAllBuilds($bugID)
{
$bug = $this->bug->getById($bugID);
$productID = $bug->product;
$executionID = $bug->execution;
$projectID = $bug->project;
$allBuilds = $this->loadModel('build')->getBuildPairs($productID, 'all', 'noempty');
if($executionID)
{
$openedBuilds = $this->build->getBuildPairs($productID, $bug->branch, 'noempty,noterminate,nodone,withbranch,noreleased', $executionID, 'execution');
}
elseif($projectID)
{
$openedBuilds = $this->build->getBuildPairs($productID, $bug->branch, 'noempty,noterminate,nodone,withbranch,noreleased', $projectID, 'project');
}
else
{
$openedBuilds = $this->build->getBuildPairs($productID, $bug->branch, 'noempty,noterminate,nodone,withbranch,noreleased');
}
/* Set the openedBuilds list. */
$oldOpenedBuilds = array();
$bugOpenedBuilds = explode(',', $bug->openedBuild);
foreach($bugOpenedBuilds as $buildID)
{
if(isset($allBuilds[$buildID])) $oldOpenedBuilds[$buildID] = $allBuilds[$buildID];
}
$openedBuilds = $openedBuilds + $oldOpenedBuilds;
/* Set the resolvedBuilds list. */
$oldResolvedBuild = array();
if(($bug->resolvedBuild) and isset($allBuilds[$bug->resolvedBuild])) $oldResolvedBuild[$bug->resolvedBuild] = $allBuilds[$bug->resolvedBuild];
$builds = new stdclass();
$builds->openedBuilds = array_map(function($key, $value)
{
return (object) array('value' => $key, 'text' => $value);
}, array_keys($openedBuilds), array_values($openedBuilds));
$resolvedBuilds = $openedBuilds + $oldResolvedBuild;
$builds->resolvedBuilds = array_map(function($key, $value)
{
return (object) array('value' => $key, 'text' => $value);
}, array_keys($resolvedBuilds), array_values($resolvedBuilds));
$builds->resolvedBuildName = zget($resolvedBuilds, $bug->resolvedBuild);
echo json_encode($builds);
}
/**
* Batch edit bug.
*
+40 -17
View File
@@ -15,23 +15,7 @@ $(function()
initPicker($('#case'));
initPicker($('#duplicateBug'));
resolution = $('#resolution').val();
if(resolution == 'fixed')
{
$('#resolvedBuildBox').change(function()
{
if($('#resolvedBuild').val() != oldResolvedBuild)
{
confirmResult = confirm(confirmUnlinkBuild);
if(!confirmResult)
{
var resolvedBuildPicker = $('#resolvedBuild').data('zui.picker');
resolvedBuildPicker.setValue(oldResolvedBuild);
}
}
});
}
getAllBuilds();
$('#duplicateBug').picker(
{
@@ -58,6 +42,45 @@ $(function()
$pkResolvedBuild.closest('.picker').css('width', $pkResolvedBuild.closest('td').width() - $pkResolvedBuild.closest('td').find('.input-group-btn').width());
});
/**
* Get all builds and set confirm string.
*
* @access public
* @return void
*/
function getAllBuilds()
{
$.get(createLink('bug', 'ajaxGetAllBuilds', 'bugID=' + bugID), function(data)
{
var openedBuilds = data.openedBuilds;
$('#openedBuild').data('zui.picker').destroy();
$('#openedBuild').picker({list: openedBuilds});
$('#openedBuild').data('zui.picker').setValue(oldOpenedBuild);
var resolvedBuilds = data.resolvedBuilds;
$('#resolvedBuild').data('zui.picker').destroy();
$('#resolvedBuild').picker({list: resolvedBuilds});
$('#resolvedBuild').data('zui.picker').setValue(oldResolvedBuild);
resolution = $('#resolution').val();
if(resolution == 'fixed')
{
$('#resolvedBuildBox').change(function()
{
if($('#resolvedBuild').val() != oldResolvedBuild)
{
confirmUnlinkBuild = confirmUnlinkBuild.replace('%s', data.resolvedBuildName);
confirmResult = confirm(confirmUnlinkBuild);
if(!confirmResult)
{
var resolvedBuildPicker = $('#resolvedBuild').data('zui.picker');
resolvedBuildPicker.setValue(oldResolvedBuild);
}
}
});
}
}, 'json');
}
/**
* Set duplicate field.
*
+3 -3
View File
@@ -24,7 +24,7 @@ js::set('oldStoryID' , $bug->story);
js::set('oldTaskID' , $bug->task);
js::set('oldOpenedBuild' , $bug->openedBuild);
js::set('oldResolvedBuild' , $bug->resolvedBuild);
js::set('confirmUnlinkBuild' , sprintf($lang->bug->confirmUnlinkBuild, zget($resolvedBuilds, $bug->resolvedBuild)));
js::set('confirmUnlinkBuild' , $lang->bug->confirmUnlinkBuild);
js::set('tab' , $this->app->tab);
js::set('bugID' , $bug->id);
js::set('bugBranch' , $bug->branch);
@@ -242,7 +242,7 @@ if($this->app->tab == 'project') js::set('objectID', $bug->project);
<th><?php echo $lang->bug->openedBuild;?></th>
<td>
<div id='openedBuildBox' class='input-group'>
<?php echo html::select('openedBuild[]', $openedBuilds, $bug->openedBuild, 'size=4 multiple=multiple class="picker-select form-control"');?>
<?php echo html::select('openedBuild[]', array(), '', 'size=4 multiple=multiple class="picker-select form-control"');?>
<span class='input-group-btn'><?php echo html::commonButton($lang->bug->allBuilds, "class='btn' onclick='loadAllBuilds(this)'")?></span>
</div>
</td>
@@ -259,7 +259,7 @@ if($this->app->tab == 'project') js::set('objectID', $bug->project);
<th><?php echo $lang->bug->resolvedBuild;?></th>
<td>
<div id='resolvedBuildBox' class='input-group'>
<?php echo html::select('resolvedBuild', $resolvedBuilds, $bug->resolvedBuild, "class='form-control picker-select'");?>
<?php echo html::select('resolvedBuild', array(), '', "class='form-control picker-select'");?>
<span class='input-group-btn'><?php echo html::commonButton($lang->bug->allBuilds, "class='btn' onclick='loadAllBuilds(this)'")?></span>
</div>
</td>