This commit is contained in:
caoyanyi
2023-04-27 10:48:27 +08:00
6 changed files with 171 additions and 10 deletions
+5 -3
View File
File diff suppressed because one or more lines are too long
+38
View File
@@ -0,0 +1,38 @@
<?php
declare(strict_types=1);
$config->bug->createform = array();
$config->bug->createform['title'] = array('required' => true, 'type' => 'string', 'filter' => 'trim');
$config->bug->createform['openedBuild'] = array('required' => true, 'type' => 'array', 'filter' => 'join');
$config->bug->createform['product'] = array('required' => false, 'type' => 'int', 'default' => 0);
$config->bug->createform['branch'] = array('required' => false, 'type' => 'int', 'default' => 0);
$config->bug->createform['module'] = array('required' => false, 'type' => 'int', 'default' => 0);
$config->bug->createform['project'] = array('required' => false, 'type' => 'int', 'default' => 0);
$config->bug->createform['execution'] = array('required' => false, 'type' => 'int', 'default' => 0);
$config->bug->createform['assignedTo'] = array('required' => false, 'type' => 'string', 'default' => '');
$config->bug->createform['deadline'] = array('required' => false, 'type' => 'date', 'default' => '');
$config->bug->createform['feedbackBy'] = array('required' => false, 'type' => 'string', 'default' => '');
$config->bug->createform['notifyEmail'] = array('required' => false, 'type' => 'string', 'default' => '');
$config->bug->createform['type'] = array('required' => false, 'type' => 'string', 'default' => '');
$config->bug->createform['os'] = array('required' => false, 'type' => 'array', 'default' => array(''), 'filter' => 'join');
$config->bug->createform['browser'] = array('required' => false, 'type' => 'array', 'default' => array(''), 'filter' => 'join');
$config->bug->createform['color'] = array('required' => false, 'type' => 'string', 'default' => '');
$config->bug->createform['severity'] = array('required' => false, 'type' => 'int', 'default' => 3);
$config->bug->createform['pri'] = array('required' => false, 'type' => 'int', 'default' => 3);
$config->bug->createform['steps'] = array('required' => false, 'type' => 'string', 'default' => '<p>[步骤]</p><br/><p>[结果]</p><br/><p>[期望]</p><br/>');
$config->bug->createform['story'] = array('required' => false, 'type' => 'int', 'default' => 0);
$config->bug->createform['task'] = array('required' => false, 'type' => 'int', 'default' => 0);
$config->bug->createform['oldTaskID'] = array('required' => false, 'type' => 'int', 'default' => 0);
$config->bug->createform['case'] = array('required' => false, 'type' => 'int', 'default' => 0);
$config->bug->createform['caseVersion'] = array('required' => false, 'type' => 'int', 'default' => 0);
$config->bug->createform['result'] = array('required' => false, 'type' => 'int', 'default' => 0);
$config->bug->createform['testtask'] = array('required' => false, 'type' => 'int', 'default' => 0);
$config->bug->createform['mailto'] = array('required' => false, 'type' => 'array', 'default' => array(''), 'filter' => 'join');
$config->bug->createform['keywords'] = array('required' => false, 'type' => 'string', 'default' => '');
$config->bug->createform['status'] = array('required' => false, 'type' => 'string', 'default' => 'active');
$config->bug->createform['issueKey'] = array('required' => false, 'type' => 'string', 'default' => '');
$config->bug->createform['uid'] = array('required' => false, 'type' => 'string', 'default' => '');
+103
View File
@@ -0,0 +1,103 @@
<?php
declare(strict_types=1);
class bugZen extends bug
{
/**
* 处理请求数据
* Processing request data.
*
* @param object $formData
* @return object|false
*/
protected function beforeCreate(object $formData): object|bool
{
$now = helper::now();
$bug = $formData->setDefault('openedBy', $this->app->user->account)
->setDefault('openedDate', $now)
->setIF($this->lang->navGroup->bug != 'qa', 'project', $this->session->project)
->setIF($this->post->assignedTo != '', 'assignedDate', $now)
->setIF($this->post->story != false, 'storyVersion', $this->loadModel('story')->getVersion($this->post->story))
->setIF(strpos($this->config->bug->create->requiredFields, 'deadline') !== false, 'deadline', $this->post->deadline)
->setIF(strpos($this->config->bug->create->requiredFields, 'execution') !== false, 'execution', $this->post->execution)
->stripTags($this->config->bug->editor->create['id'], $this->config->allowedTags)
->cleanInt('product,execution,module,severity')
->remove('files,labels,uid,oldTaskID,contactListMenu,region,lane,ticket,deleteFiles,resultFiles')
->get();
$bug = $this->loadModel('file')->processImgURL($bug, $this->config->bug->editor->create['id'], $formData->rawdata->uid);
return $bug;
}
/**
* 创建bug。
* Create a bug.
*
* @param object $bug
* @access protected
* @return array|false
*/
protected function doCreate(object $bug): array|bool
{
/* Check repeat bug. */
$result = $this->loadModel('common')->removeDuplicate('bug', $bug, "product={$bug->product}");
if($result and $result['stop']) return array('status' => 'exists', 'id' => $result['duplicate']);
return $this->bug->create($bug);
}
/**
* 创建bug后数据处理
* Do thing after create a bug.
*
* @param object $bug
* @param object $formData
* @param string $extra
* @return void
*/
protected function afterCreate(object $bug, object $formData, string $extras): void
{
$extras = str_replace(array(',', ' '), array('&', ''), $extras);
parse_str($extras, $output);
$from = isset($output['from']) ? $output['from'] : '';
if(isset($formData->rawdata['resultFiles']))
{
$resultFiles = $formData->rawdata['resultFiles'];
if(isset($formData->rawdata['deleteFiles']))
{
foreach($formData->rawdata['deleteFiles'] as $deletedCaseFileID) $resultFiles = trim(str_replace(",$deletedCaseFileID,", ',', ",$resultFiles,"), ',');
}
$files = $this->dao->select('*')->from(TABLE_FILE)->where('id')->in($resultFiles)->fetchAll('id');
foreach($files as $file)
{
unset($file->id);
$file->objectType = 'bug';
$file->objectID = $bugID;
$this->dao->insert(TABLE_FILE)->data($file)->exec();
}
}
$this->file->updateObjectID($formData->rawdata->uid, $bugID, 'bug');
$this->file->saveUpload('bug', $bugID);
empty($bug->case) ? $this->loadModel('score')->create('bug', 'create', $bugID) : $this->loadModel('score')->create('bug', 'createFormCase', $bug->case);
if($bug->execution)
{
$this->loadModel('kanban');
$laneID = isset($output['laneID']) ? $output['laneID'] : 0;
if(!empty($formData->rawdata['lane'])) $laneID = $formData->rawdata['lane'];
$columnID = $this->kanban->getColumnIDByLaneID($laneID, 'unconfirmed');
if(empty($columnID)) $columnID = isset($output['columnID']) ? $output['columnID'] : 0;
if(!empty($laneID) and !empty($columnID)) $this->kanban->addKanbanCell($bug->execution, $laneID, $columnID, 'bug', $bugID);
if(empty($laneID) or empty($columnID)) $this->kanban->updateLane($bug->execution, 'bug');
}
/* Callback the callable method to process the related data for object that is transfered to bug. */
if($from && is_callable(array($this, $this->config->bug->fromObjects[$from]['callback']))) call_user_func(array($this, $this->config->bug->fromObjects[$from]['callback']), $bugID);
}
}
+2
View File
@@ -2159,6 +2159,7 @@ class groupModel extends model
{
$key = "{$module}-{$method}";
$priv = new stdclass();
$priv->id = $key;
$priv->module = $module;
$priv->method = $method;
$priv->action = $key;
@@ -2181,6 +2182,7 @@ class groupModel extends model
$key = "{$module}-{$method}";
$priv = new stdclass();
$priv->id = $key;
$priv->module = $module;
$priv->method = $method;
$priv->action = $key;
+6 -2
View File
@@ -159,7 +159,7 @@ class screenModel extends model
}
}
foreach($scheme->componentList as $component)
foreach($scheme->componentList as $index => $component)
{
if(!empty($component->isGroup))
{
@@ -168,10 +168,14 @@ class screenModel extends model
$groupComponent = $this->getLatestChart($groupComponent);
}
}
else
else if($component)
{
$component = $this->getLatestChart($component);
}
else
{
unset($scheme->componentList[$index]);
}
}
return $scheme;
+17 -5
View File
@@ -8209,11 +8209,21 @@ class upgradeModel extends model
$pivots = $this->dao->select('*')->from(TABLE_PIVOT)->fetchAll('id');
foreach($pivots as $pivotID => $pivot)
{
if(is_numeric($pivot->group)) continue;
$modules = explode(',', $pivot->group);
/* Upgrade group only pivot written by sql, group is string (possibly use , separated). */
$continue = false;
foreach($modules as $module)
{
if(is_numeric($module)) $continue = true;
}
if($continue) continue;
$insertGroup = array();
$modules = explode(',', $pivot->group);
foreach($modules as $module) $insertGroup[] = $pivotModules[$module];
foreach($modules as $module)
{
if($module) $insertGroup[] = $pivotModules[$module];
}
$this->dao->update(TABLE_PIVOT)->set('`group`')->eq(implode(',', $insertGroup))->where('id')->eq($pivotID)->exec();
}
@@ -8437,6 +8447,9 @@ class upgradeModel extends model
$screen->createdDate = $dashboard->createdDate;
$this->dao->insert(TABLE_SCREEN)->data($screen)->exec();
}
$this->dao->exec("ALTER TABLE " . TABLE_CHART . " DROP `dataset`");
$this->dao->exec("ALTER TABLE " . TABLE_PIVOT . " DROP `dataset`");
}
/**
@@ -8861,8 +8874,6 @@ class upgradeModel extends model
if(dao::isError()) return false;
$this->dao->exec("ALTER TABLE " . TABLE_CHART . " DROP `dataset`");
return !dao::isError();
}
@@ -8887,6 +8898,7 @@ class upgradeModel extends model
$pivot->sql = $table->sql;
$pivot->createdBy = $table->createdBy;
$pivot->createdDate = $table->createdDate;
$pivot->dataset = $table->dataset;
$name = array();
$name['zh-cn'] = $table->name;