diff --git a/module/gitea/js/binduser.ui.js b/module/gitea/js/binduser.ui.js index 84407a82fa..4bfcde782f 100644 --- a/module/gitea/js/binduser.ui.js +++ b/module/gitea/js/binduser.ui.js @@ -14,3 +14,23 @@ window.renderGitlabUser = function(result, {row}) return result; } + +window.bindUser = function() +{ + const myDTable = $('#table-gitea-binduser').zui('dtable'); + const formData = myDTable.$.getFormData(); + + var bindData = $('#table-gitea-binduser').zui('dtable').$.props.data; + var postData = {}; + postData['giteaUserNames[]'] = []; + for(i in bindData) + { + postData['giteaUserNames[]'].push(bindData[i].giteaID); + postData['zentaoUsers[' + bindData[i].giteaID + ']'] = formData['zentaoUsers[' + bindData[i].giteaID + ']']; + } + + $.ajaxSubmit({ + url: $.createLink('gitea', 'bindUser', 'giteaID=' + giteaID + '&type=' + type), + data: postData + }); +} diff --git a/module/gitea/model.php b/module/gitea/model.php index 9c58c8ca33..b9a4d8605a 100644 --- a/module/gitea/model.php +++ b/module/gitea/model.php @@ -116,7 +116,7 @@ class giteaModel extends model if(count($repeatUsers)) { - dao::$errors[] = sprintf($this->lang->gitea->bindUserError, join(',', $repeatUsers)); + dao::$errors = sprintf($this->lang->gitea->bindUserError, join(',', $repeatUsers)); return false; } diff --git a/module/gitea/ui/binduser.html.php b/module/gitea/ui/binduser.html.php index 39505c6713..9832051775 100644 --- a/module/gitea/ui/binduser.html.php +++ b/module/gitea/ui/binduser.html.php @@ -24,6 +24,8 @@ featureBar toolbar(); jsVar('zentaoUsers', $zentaoUsers); +jsVar('giteaID', $giteaID); +jsVar('type', $type); $config->gitea->dtable->bindUser->fieldList['giteaEmail']['onRenderCell'] = jsRaw('renderGitlabUser'); $config->gitea->dtable->bindUser->fieldList['zentaoUsers']['controlItems'] = $userPairs; form @@ -48,7 +50,7 @@ form array( 'text' => $lang->save, 'btnType' => 'primary', - 'onClick' => jsRaw("() => {\$('#bindForm').trigger('submit')}") + 'onClick' => jsRaw("() => {bindUser()}") ), array( 'text' => $lang->goback, diff --git a/module/gitlab/control.php b/module/gitlab/control.php index f62b242719..ef2be057cd 100644 --- a/module/gitlab/control.php +++ b/module/gitlab/control.php @@ -630,7 +630,7 @@ class gitlab extends control { $message = dao::getError(); foreach($message as &$msg) if(is_string($msg)) $msg = zget($this->lang->gitlab->errorResonse, $msg, $msg); - return $this->send(array('result' => 'fail', 'message' => $message)); + return $this->send(array('result' => 'fail', 'message' => $message)); } return $this->send(array('result' => 'success', 'message' => $this->lang->saveSuccess, 'locate' => inlink('browseUser', "gitlabID=$gitlabID"))); } diff --git a/module/gitlab/js/binduser.ui.js b/module/gitlab/js/binduser.ui.js index a650ba4445..0c8d821099 100644 --- a/module/gitlab/js/binduser.ui.js +++ b/module/gitlab/js/binduser.ui.js @@ -14,3 +14,23 @@ window.renderGitlabUser = function(result, {row}) return result; } + +window.bindUser = function() +{ + const myDTable = $('#table-gitlab-binduser').zui('dtable'); + const formData = myDTable.$.getFormData(); + + var bindData = $('#table-gitlab-binduser').zui('dtable').$.props.data; + var postData = {}; + postData['gitlabUserNames[]'] = []; + for(i in bindData) + { + postData['gitlabUserNames[]'].push(bindData[i].gitlabID); + postData['zentaoUsers[' + bindData[i].gitlabID + ']'] = formData['zentaoUsers[' + bindData[i].gitlabID + ']']; + } + + $.ajaxSubmit({ + url: $.createLink('gitlab', 'bindUser', 'gitlabID=' + gitlabID + '&type=' + type), + data: postData + }); +} diff --git a/module/gitlab/ui/binduser.html.php b/module/gitlab/ui/binduser.html.php index 0f55a2c74a..f1cbeeccc5 100644 --- a/module/gitlab/ui/binduser.html.php +++ b/module/gitlab/ui/binduser.html.php @@ -24,6 +24,8 @@ featureBar toolbar(); jsVar('zentaoUsers', $zentaoUsers); +jsVar('gitlabID', $gitlabID); +jsVar('type', $type); $config->gitlab->dtable->bindUser->fieldList['gitlabEmail']['onRenderCell'] = jsRaw('renderGitlabUser'); $config->gitlab->dtable->bindUser->fieldList['zentaoUsers']['controlItems'] = $userPairs; form @@ -48,7 +50,7 @@ form array( 'text' => $lang->save, 'btnType' => 'primary', - 'onClick' => jsRaw("() => {\$('#bindForm').trigger('submit')}") + 'onClick' => jsRaw("() => {bindUser()}") ), array( 'text' => $lang->goback, diff --git a/module/gogs/js/binduser.ui.js b/module/gogs/js/binduser.ui.js index ed226f7fd7..02c5dd7afb 100644 --- a/module/gogs/js/binduser.ui.js +++ b/module/gogs/js/binduser.ui.js @@ -14,3 +14,23 @@ window.renderGitlabUser = function(result, {row}) return result; } + +window.bindUser = function() +{ + const myDTable = $('#table-gogs-binduser').zui('dtable'); + const formData = myDTable.$.getFormData(); + + var bindData = $('#table-gogs-binduser').zui('dtable').$.props.data; + var postData = {}; + postData['gogsUserNames[]'] = []; + for(i in bindData) + { + postData['gogsUserNames[]'].push(bindData[i].gogsID); + postData['zentaoUsers[' + bindData[i].gogsID + ']'] = formData['zentaoUsers[' + bindData[i].gogsID + ']']; + } + + $.ajaxSubmit({ + url: $.createLink('gogs', 'bindUser', 'gogsID=' + gogsID + '&type=' + type), + data: postData + }); +} diff --git a/module/gogs/ui/binduser.html.php b/module/gogs/ui/binduser.html.php index e63d922aea..3556164078 100644 --- a/module/gogs/ui/binduser.html.php +++ b/module/gogs/ui/binduser.html.php @@ -24,6 +24,8 @@ featureBar toolbar(); jsVar('zentaoUsers', $zentaoUsers); +jsVar('gogsID', $gogsID); +jsVar('type', $type); $config->gogs->dtable->bindUser->fieldList['gogsEmail']['onRenderCell'] = jsRaw('renderGitlabUser'); $config->gogs->dtable->bindUser->fieldList['zentaoUsers']['controlItems'] = $userPairs; form @@ -48,7 +50,7 @@ form array( 'text' => $lang->save, 'btnType' => 'primary', - 'onClick' => jsRaw("() => {\$('#bindForm').trigger('submit')}") + 'onClick' => jsRaw("() => {bindUser()}") ), array( 'text' => $lang->goback, diff --git a/module/mr/control.php b/module/mr/control.php index 94bcd81e8a..acc883aae9 100644 --- a/module/mr/control.php +++ b/module/mr/control.php @@ -288,13 +288,32 @@ class mr extends control $sourceBranch = $this->$scm->apiGetSingleBranch($MR->hostID, $MR->sourceProject, $MR->sourceBranch); $targetBranch = $this->$scm->apiGetSingleBranch($MR->hostID, $MR->targetProject, $MR->targetBranch); - $projectOwner = false; + $projectOwner = $projectEdit = false; if(isset($MR->hostID) and !$this->app->user->admin) { $openID = $this->$scm->getUserIDByZentaoAccount($MR->hostID, $this->app->user->account); if(!$projectOwner and isset($sourceProject->owner->id) and $sourceProject->owner->id == $openID) $projectOwner = true; } + if($scm == 'gitlab') + { + $gitUsers = $this->gitlab->getUserAccountIdPairs($MR->hostID); + $groupIDList = array(0 => 0); + $groups = $this->gitlab->apiGetGroups($MR->hostID, 'name_asc', 'developer'); + foreach($groups as $group) $groupIDList[] = $group->id; + $isDeveloper = $this->gitlab->checkUserAccess($MR->hostID, 0, $sourceProject, $groupIDList, 'developer'); + + if(isset($gitUsers[$this->app->user->account]) && $isDeveloper) $projectEdit = true; + } + elseif($scm == 'gitea') + { + $projectEdit = (isset($sourceProject->allow_merge_commits) and $sourceProject->allow_merge_commits == true) ? true : false; + } + elseif($scm == 'gogs') + { + $projectEdit = (isset($sourceProject->permissions->push) and $sourceProject->permissions->push) ? true : false; + } + $this->view->sourceProjectName = $sourceProject->name_with_namespace; $this->view->targetProjectName = $targetProject->name_with_namespace; $this->view->sourceProjectURL = isset($sourceBranch->web_url) ? $sourceBranch->web_url : ''; @@ -311,6 +330,7 @@ class mr extends control $this->view->compile = $this->loadModel('compile')->getById($MR->compileID); $this->view->compileJob = $MR->jobID ? $this->job->getById($MR->jobID) : false; $this->view->projectOwner = $projectOwner; + $this->view->projectEdit = $projectEdit; $this->view->title = $this->lang->mr->view; $this->view->MR = $MR; diff --git a/module/mr/ui/view.html.php b/module/mr/ui/view.html.php index dc7f258066..d487e59ec2 100644 --- a/module/mr/ui/view.html.php +++ b/module/mr/ui/view.html.php @@ -39,6 +39,7 @@ foreach($config->mr->view->operateList as $operate) if($operate == 'reopen' && (!$MR->synced || $rawMR->state != 'closed')) continue; if($operate == 'delete' && !$projectOwner && !$this->app->user->admin) $action['disabled'] = true; + if($operate == 'edit' && !$projectEdit && !$this->app->user->admin) $action['disabled'] = true; if($operate === 'edit' || $operate === 'delete') {