* Optimize code for the build bugs function of bug-batchEdit.

This commit is contained in:
liumengyi
2023-05-23 14:18:27 +08:00
parent 87c5857cdc
commit bb83cfd278
2 changed files with 57 additions and 102 deletions
+20 -16
View File
@@ -142,22 +142,26 @@ $config->bug->form->batchCreate['os'] = array('required' => false, 'ty
$config->bug->form->batchCreate['browser'] = array('required' => false, 'type' => 'array', 'default' => '', 'filter' => 'join');
$config->bug->form->batchCreate['keywords'] = array('required' => false, 'type' => 'string', 'default' => '');
$config->bug->form->batchEdit = array();
$config->bug->form->batchEdit['types'] = array('required' => false, 'type' => 'array', 'default' => array());
$config->bug->form->batchEdit['severities'] = array('required' => false, 'type' => 'array', 'default' => array());
$config->bug->form->batchEdit['pris'] = array('required' => false, 'type' => 'array', 'default' => array());
$config->bug->form->batchEdit['titles'] = array('required' => true, 'type' => 'array', 'default' => array());
$config->bug->form->batchEdit['branches'] = array('required' => false, 'type' => 'array', 'default' => array());
$config->bug->form->batchEdit['modules'] = array('required' => false, 'type' => 'array', 'default' => array());
$config->bug->form->batchEdit['plans'] = array('required' => false, 'type' => 'array', 'default' => array());
$config->bug->form->batchEdit['assignedTos'] = array('required' => false, 'type' => 'array', 'default' => array());
$config->bug->form->batchEdit['deadlines'] = array('required' => false, 'type' => 'array', 'default' => array());
$config->bug->form->batchEdit['os'] = array('required' => false, 'type' => 'array', 'default' => array());
$config->bug->form->batchEdit['browsers'] = array('required' => false, 'type' => 'array', 'default' => array());
$config->bug->form->batchEdit['keywords'] = array('required' => false, 'type' => 'array', 'default' => array());
$config->bug->form->batchEdit['resolvedBys'] = array('required' => false, 'type' => 'array', 'default' => array());
$config->bug->form->batchEdit['resolutions'] = array('required' => false, 'type' => 'array', 'default' => array());
$config->bug->form->batchEdit['duplicateBugs'] = array('required' => false, 'type' => 'array', 'default' => array());
$config->bug->form->batchEdit = common::formConfig('bug', 'batchEdit');
$config->bug->form->batchEdit['id'] = array('required' => false, 'type' => 'int');
$config->bug->form->batchEdit['type'] = array('required' => false, 'type' => 'string', 'default' => '');
$config->bug->form->batchEdit['severity'] = array('required' => false, 'type' => 'int', 'default' => 0);
$config->bug->form->batchEdit['pri'] = array('required' => false, 'type' => 'int', 'default' => 0);
$config->bug->form->batchEdit['title'] = array('required' => true, 'type' => 'string', 'default' => '');
$config->bug->form->batchEdit['branch'] = array('required' => false, 'type' => 'int', 'default' => 0);
$config->bug->form->batchEdit['module'] = array('required' => false, 'type' => 'int', 'default' => 0);
$config->bug->form->batchEdit['plan'] = array('required' => false, 'type' => 'int', 'default' => 0);
$config->bug->form->batchEdit['assignedTo'] = array('required' => false, 'type' => 'string', 'default' => '');
$config->bug->form->batchEdit['deadline'] = array('required' => false, 'type' => 'date', 'default' => '');
$config->bug->form->batchEdit['os'] = array('required' => false, 'type' => 'array', 'default' => '', 'filter' => 'join');
$config->bug->form->batchEdit['browser'] = array('required' => false, 'type' => 'array', 'default' => '', 'filter' => 'join');
$config->bug->form->batchEdit['keywords'] = array('required' => false, 'type' => 'string', 'default' => '');
$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['lastEditedDate'] = array('required' => false, 'type' => 'date', 'default' => helper::now());
$config->bug->form->confirm = array();
$config->bug->form->confirm['pri'] = array('required' => false, 'type' => 'int', 'default' => 3);
+37 -86
View File
@@ -1923,98 +1923,49 @@ class bugZen extends bug
$bugIdList = $this->post->bugIDList ? $this->post->bugIDList : array();
if(empty($bugIdList)) return array();
/* Get input data. */
$data = form::data($this->config->bug->form->batchEdit)->get();
/* Get bugs and old bugs. */
$bugs = form::batchData($this->config->bug->form->batchEdit)->get();
$oldBugs = $this->bug->getByIdList($bugIdList);
/* Get extend fields and old bugs. */
$extendFields = $this->bug->getFlowExtendFields();
$oldBugs = $this->bug->getByIdList($bugIdList);
/* Initialize variable. */
$bugs = array();
$now = helper::now();
foreach($bugIdList as $bugID)
/* Process bugs. */
$now = helper::now();
$account = $this->app->user->account;
foreach($bugs as $bug)
{
$oldBug = $oldBugs[$bugID];
$oldBug = $oldBugs[$bug->id];
$os = array_filter($data->os[$bugID]);
$browsers = array_filter($data->browsers[$bugID]);
$duplicateBug = $data->duplicateBugs[$bugID] ? $data->duplicateBugs[$bugID] : $oldBug->duplicateBug;
$bug->os = implode(',', $bug->os);
$bug->browser = implode(',', $bug->browser);
/* Init bug. */
$bug = new stdclass();
$bug->id = $bugID;
$bug->lastEditedBy = $this->app->user->account;
$bug->lastEditedDate = $now;
$bug->type = zget($data->types, $bugID);
$bug->severity = zget($data->severities, $bugID);
$bug->pri = zget($data->pris, $bugID);
$bug->title = zget($data->titles, $bugID);
$bug->plan = zget($data->plans, $bugID, 0);
$bug->branch = zget($data->branches, $bugID, 0);
$bug->module = zget($data->modules, $bugID, $oldBug->module);
$bug->assignedTo = $oldBug->status == 'closed' ? $oldBug->assignedTo : $data->assignedTos[$bugID];
$bug->deadline = zget($data->deadlines, $bugID);
$bug->resolvedBy = zget($data->resolvedBys, $bugID);
$bug->keywords = zget($data->keywords, $bugID);
$bug->os = implode(',', $os);
$bug->browser = implode(',', $browsers);
$bug->resolution = zget($data->resolutions, $bugID);
$bug->duplicateBug = $bug->resolution != '' && $bug->resolution != 'duplicate' ? 0 : $duplicateBug;
/* If bug is closed, the assignee will not be changed. */
if($oldBug->status == 'closed') $bug->assignedTo = $oldBug->assignedTo;
/* Process bug. */
$bugs[$bugID] = $this->buildDataForBatchEdit($bug, $oldBug, $extendFields);
unset($bug);
/* If resolution of the bug is not duplicate, duplicateBug is zero. */
if($bug->resolution != '' && $bug->resolution != 'duplicate') $bug->duplicateBug = 0;
/* If assignee is changes, set the assigned date. */
if($bug->assignedTo != $oldBug->assignedTo) $bug->assignedDate = $now;
/* If resolution is not empty, set the confirmed. */
if($bug->resolution != '') $bug->confirmed = 1;
/* If the bug is resolved, set resolved date and bug status. */
if(($bug->resolvedBy != '' || $bug->resolution != '') && strpos(',resolved,closed,', ",{$oldBug->status},") === false)
{
$bug->resolvedDate = $now;
$bug->status = 'resolved';
}
/* If the bug without resolver is resolved, set resolver. */
if($bug->resolution != '' && $bug->resolvedBy == '') $bug->resolvedBy = $this->app->user->account;
/* If the bug without assignee is resolved, set assignee and assigned date. */
if($bug->resolution != '' && $bug->assignedTo == '')
{
$bug->assignedTo = $oldBug->openedBy;
$bug->assignedDate = $now;
}
}
return $bugs;
}
/**
* 为批量编辑 bug 构造数据。
* Construct data for batch edit bugs.
*
* @param object $bug
* @param object $oldBug
* @param array $extendFields
* @access protected
* @return object
*/
protected function buildDataForBatchEdit(object $bug, object $oldBug, array $extendFields): object
{
$now = helper::now();
/* If assignee is changes, set the assigned date. */
if($bug->assignedTo != $oldBug->assignedTo) $bug->assignedDate = $now;
/* If resolution is not empty, set the confirmed. */
if($bug->resolution != '') $bug->confirmed = 1;
/* If the bug is resolved, set resolved date and bug status. */
if(($bug->resolvedBy != '' || $bug->resolution != '') && strpos(',resolved,closed,', ",{$oldBug->status},") === false)
{
$bug->resolvedDate = $now;
$bug->status = 'resolved';
}
/* If the bug without solver is resolved, set solver. */
if($bug->resolution != '' && $bug->resolvedBy == '') $bug->resolvedBy = $this->app->user->account;
/* If the bug without assignee is resolved, set assignee and assigned date. */
if($bug->resolution != '' && $bug->assignedTo == '')
{
$bug->assignedTo = $oldBug->openedBy;
$bug->assignedDate = $now;
}
/* Set extend fields. */
foreach($extendFields as $extendField)
{
$bug->{$extendField->field} = $this->post->{$extendField->field}[$bug->id];
if(is_array($bug->{$extendField->field})) $bug->{$extendField->field} = implode(',', $bug->{$extendField->field});
$bug->{$extendField->field} = htmlSpecialString($bug->{$extendField->field});
}
return $bug;
}
}