* Resolve feedback #843.

This commit is contained in:
zhouxin
2022-12-29 06:41:40 +00:00
parent b3a1c696b2
commit bf3ef7a9ab
8 changed files with 66 additions and 5 deletions
+7 -4
View File
@@ -876,12 +876,15 @@ class actionModel extends model
{
$desc = $this->lang->$objectType->action->{$action->action};
}
elseif($action->action == 'createmr' and strpos($action->extra, '::') !== false)
elseif(strpos('createmr,editmr,removemr', $action->action) !== false and strpos($action->extra, '::') !== false)
{
list($mrCreatedDate, $mrActor, $mrLink) = explode('::', $action->extra);
$mrAction = str_replace('mr', '', $action->action) . 'Action';
list($mrDate, $mrActor, $mrLink) = explode('::', $action->extra);
if(isonlybody()) $mrLink .= ($this->config->requestType == 'GET' ? '&onlybody=yes' : '?onlybody=yes');
$this->app->loadLang('mr');
$desc = sprintf($this->lang->mr->createAction, $mrCreatedDate, $mrActor, $mrLink);
$desc = sprintf($this->lang->mr->$mrAction, $mrDate, $mrActor, $mrLink);
}
elseif($this->config->edition == 'max' and strpos($this->config->action->assetType, ",{$action->objectType},") !== false and $action->action == 'approved')
{
@@ -1118,7 +1121,7 @@ class actionModel extends model
->beginIF($noMultipleExecutions)->andWhere("IF(`objectType` = 'execution', `objectID` NOT " . helper::dbIN($noMultipleExecutions) . ", '1=1')")->fi()
->beginIF($actionCondition)->andWhere("($actionCondition)")->fi()
/* Filter out client login/logout actions. */
->andWhere('action')->notin('disconnectxuanxuan,reconnectxuanxuan,loginxuanxuan,logoutxuanxuan')
->andWhere('action')->notin('disconnectxuanxuan,reconnectxuanxuan,loginxuanxuan,logoutxuanxuan,editmr,removemr')
->andWhere("IF((objectType = 'program'), (objectID in ($programCondition)), '1=1')")
->andWhere("IF((objectType = 'effort'), (objectID in ($efforts)), '1=1')")
->orderBy($orderBy)
+2
View File
@@ -251,7 +251,9 @@ class mr extends control
if(isset($res->message)) return print(js::alert($this->mr->convertApiError($res->message)));
}
$this->dao->delete()->from(TABLE_MR)->where('id')->eq($MRID)->exec();
$this->loadModel('action')->create('mr', $MRID, 'deleted', '', $MR->title);
$this->mr->createMRLinkedAction($MRID, 'removemr');
echo js::locate(inlink('browse'), 'parent');
}
+2
View File
@@ -17,6 +17,8 @@ $lang->mr->diff = 'View diff';
$lang->mr->viewInGit = 'View in APP';
$lang->mr->link = 'Link of stories,Bugs,tasks';
$lang->mr->createAction = '%s, <strong>%s</strong> submitted a <a href="%s">Merge Request</a>.';
$lang->mr->editAction = '%s, <strong>%s</strong> edited <a href="%s">Merge Request</a>。';
$lang->mr->removeAction = '%s, <strong>%s</strong> deleted <a href="%s">Merge Request</a>。';
$lang->mr->linkList = 'Link List of stories,Bugs,tasks';
$lang->mr->linkStory = 'Link Stories';
+2
View File
@@ -17,6 +17,8 @@ $lang->mr->diff = 'View diff';
$lang->mr->viewInGit = 'View in APP';
$lang->mr->link = 'Link of stories,Bugs,tasks';
$lang->mr->createAction = '%s, <strong>%s</strong> submitted a <a href="%s">Merge Request</a>.';
$lang->mr->editAction = '%s, <strong>%s</strong> edited <a href="%s">Merge Request</a>。';
$lang->mr->removeAction = '%s, <strong>%s</strong> deleted <a href="%s">Merge Request</a>。';
$lang->mr->linkList = 'Link List of stories,Bugs,tasks';
$lang->mr->linkStory = 'Link Stories';
+2
View File
@@ -17,6 +17,8 @@ $lang->mr->diff = 'View diff';
$lang->mr->viewInGit = 'View in APP';
$lang->mr->link = 'Link of stories,Bugs,tasks';
$lang->mr->createAction = '%s, <strong>%s</strong> submitted a <a href="%s">Merge Request</a>.';
$lang->mr->editAction = '%s, <strong>%s</strong> edited <a href="%s">Merge Request</a>。';
$lang->mr->removeAction = '%s, <strong>%s</strong> deleted <a href="%s">Merge Request</a>。';
$lang->mr->linkList = 'Link List of stories,Bugs,tasks';
$lang->mr->linkStory = 'Link Stories';
+2
View File
@@ -17,6 +17,8 @@ $lang->mr->diff = 'View diff';
$lang->mr->viewInGit = 'View in APP';
$lang->mr->link = 'Link of stories,Bugs,tasks';
$lang->mr->createAction = '%s, <strong>%s</strong> submitted a <a href="%s">Merge Request</a>.';
$lang->mr->editAction = '%s, <strong>%s</strong> edited <a href="%s">Merge Request</a>。';
$lang->mr->removeAction = '%s, <strong>%s</strong> deleted <a href="%s">Merge Request</a>。';
$lang->mr->linkList = 'Link List of stories,Bugs,tasks';
$lang->mr->linkStory = 'Link Stories';
+2
View File
@@ -17,6 +17,8 @@ $lang->mr->diff = '比对代码';
$lang->mr->viewInGit = '在应用中查看';
$lang->mr->link = '关联需求、Bug、任务';
$lang->mr->createAction = '%s, 由 <strong>%s</strong> 提交了 <a href="%s">合并请求</a>。';
$lang->mr->editAction = '%s, 由 <strong>%s</strong> 编辑了 <a href="%s">合并请求</a>。';
$lang->mr->removeAction = '%s, 由 <strong>%s</strong> 删除了 <a href="%s">合并请求</a>。';
$lang->mr->linkList = '浏览关联需求、Bug、任务';
$lang->mr->linkStory = '关联需求';
+47 -1
View File
@@ -416,10 +416,36 @@ class mrModel extends model
$this->linkObjects($MR);
$this->loadModel('action')->create('mr', $MRID, 'edited');
$this->createMRLinkedAction($MRID, 'editmr', $MR->editedDate);
if(dao::isError()) return array('result' => 'fail', 'message' => dao::getError());
return array('result' => 'success', 'message' => $this->lang->saveSuccess, 'locate' => helper::createLink('mr', 'browse'));
}
}
/**
* Create createmr,editmr,removemr action.
*
* @param int $MRID
* @param string $action createmr|editmr|removemr
* @param string $actionDate
* @access public
* @return void
*/
public function createMRLinkedAction($MRID, $action, $actionDate = '')
{
$this->loadModel('action');
if(empty($actionDate)) $actionDate = helper::now();
$MRAction = $actionDate . '::' . $this->app->user->account . '::' . helper::createLink('mr', 'view', "mr={$MRID}");
$linkedStories = $this->getLinkedObjectPairs($MRID, 'story');
$linkedTasks = $this->getLinkedObjectPairs($MRID, 'task');
$linkedBugs = $this->getLinkedObjectPairs($MRID, 'bug');
foreach($linkedStories as $storyID) $this->action->create('story', $storyID, $action, '', $MRAction);
foreach($linkedTasks as $taskID) $this->action->create('task', $taskID, $action, '', $MRAction);
foreach($linkedBugs as $bugID) $this->action->create('bug', $bugID, $action, '', $MRAction);
}
/**
* sync MR from GitLab API to Zentao database.
@@ -1725,6 +1751,26 @@ class mrModel extends model
->fetchPairs();
}
/**
* Get story,task,bug pairs which linked MR.
*
* @param int $MRID
* @param string $objectType story|task|bug
* @access public
* @return array
*/
public function getLinkedObjectPairs($MRID, $objectType = 'story')
{
$table = $this->config->objectTables[$objectType];
return $this->dao->select('relation.BID')->from(TABLE_RELATION)->alias('relation')
->leftJoin($table)->alias('object')->on('relation.BID = object.id')
->where('relation.AType')->eq('mr')
->andWhere('relation.BType')->eq($objectType)
->andWhere('relation.AID')->eq($MRID)
->andWhere('object.deleted')->eq(0)
->fetchPairs();
}
/**
* Get diff commits of MR.
*