+
+ {$lang->gitlab->group->manageMembers}");?>
+
+
+diff --git a/module/gitlab/control.php b/module/gitlab/control.php index 4c032b8446..4c00ae87be 100644 --- a/module/gitlab/control.php +++ b/module/gitlab/control.php @@ -304,6 +304,7 @@ class gitlab extends control { $gitlabGroupList = $this->gitlab->apiGetGroups($gitlabID, $orderBy); + $this->view->title = $this->lang->gitlab->common . $this->lang->colon . $this->lang->gitlab->browseGroup; $this->view->gitlabID = $gitlabID; $this->view->gitlabGroupList = $gitlabGroupList; $this->view->orderBy = $orderBy; @@ -329,6 +330,7 @@ class gitlab extends control $gitlab = $this->gitlab->getByID($gitlabID); + $this->view->title = $this->lang->gitlab->common . $this->lang->colon . $this->lang->gitlab->group->create; $this->view->gitlab = $gitlab; $this->view->gitlabID = $gitlabID; $this->display(); @@ -355,12 +357,129 @@ class gitlab extends control $gitlab = $this->gitlab->getByID($gitlabID); $group = $this->gitlab->apiGetSingleGroup($gitlabID, $groupID); + $this->view->title = $this->lang->gitlab->common . $this->lang->colon . $this->lang->gitlab->group->edit; $this->view->gitlab = $gitlab; $this->view->group = $group; $this->view->gitlabID = $gitlabID; $this->display(); } + /** + * Delete a gitlab group. + * + * @param int $gitlabID + * @param int $groupID + * @access public + * @return void + */ + public function deleteGroup($gitlabID, $groupID, $confirm = 'no') + { + if($confirm != 'yes') die(js::confirm($this->lang->gitlab->group->confirmDelete , inlink('deleteGroup', "gitlabID=$gitlabID&groupID=$groupID&confirm=yes"))); + + $reponse = $this->gitlab->apiDeleteGroup($gitlabID, $groupID); + if(!$reponse or substr($reponse->message, 0, 2) == '20') die(js::reload('parent')); + die(js::alert($reponse->message)); + } + + /** + * Manage a gitlab group members. + * + * @param int $gitlabID + * @param int $groupID + * @access public + * @return void + */ + public function manageGroupMembers($gitlabID, $groupID) + { + if($_POST) + { + $data = (array) fixer::input('post')->get(); + extract($data); + + $ids = array_filter($ids); + if(count($ids) != count(array_unique($ids))) return $this->send(array('result' => 'fail', 'message' => $this->lang->gitlab->group->repeatError)); + $newMembers = array(); + foreach($ids as $key => $id) + { + /* Check whether each member has selected accesslevel. */ + if(empty($levels[$key])) return $this->send(array('result' => 'fail', 'message' => $this->lang->gitlab->group->memberAccessLevel . $this->lang->gitlab->group->emptyError )); + + $newMembers[$id] = (object)array('access_level'=>$levels[$key], 'expires_at'=>$expires[$key]); + } + + $currentMembers = $this->gitlab->apiGetGroupMembers($gitlabID, $groupID); + + /* Get the updated,deleted data. */ + $addedMembers = $deletedMembers = $updatedMembers = array(); + foreach($currentMembers as $currentMember) + { + if(empty($newMembers[$currentMember->id])) + { + $deletedMembers[] = $currentMember->id; + } + else + { + if($newMembers[$currentMember->id]->access_level != $currentMember->access_level or $newMembers[$currentMember->id]->expires_at != $currentMember->expires_at) $updatedMembers[] = (object)array('user_id' => $currentMember->id, 'access_level' => $newMembers[$currentMember->id]->access_level, 'expires_at' => $newMembers[$currentMember->id]->expires_at); + } + } + /* Get the added data. */ + foreach($newMembers as $id => $newMember) + { + $exist = FALSE; + foreach($currentMembers as $currentMember) + { + if($currentMember->id == $id) + { + $exist = TRUE; + break; + } + } + if($exist == FALSE) $addedMembers[] = (object)array('user_id' => $id, 'access_level' => $newMembers[$id]->access_level, 'expires_at' => $newMembers[$id]->expires_at); + } + + if(count($addedMembers) > 0) + { + foreach($addedMembers as $addedMember) + { + $this->gitlab->apiCreateGroupMember($gitlabID, $groupID, $addedMember); + } + } + if(count($updatedMembers) > 0) + { + foreach($updatedMembers as $updatedMember) + { + $this->gitlab->apiUpdateGroupMember($gitlabID, $groupID, $updatedMember); + } + } + if(count($deletedMembers) > 0) + { + foreach($deletedMembers as $deletedMemberID) + { + $this->gitlab->apiDeleteGroupMember($gitlabID, $groupID, $deletedMemberID); + } + } + + return $this->send(array('result' => 'success', 'message' => $this->lang->saveSuccess, 'locate' => inlink('groupBrowse', "gitlabID=$gitlabID"))); + } + + /* Get gitlab users data. */ + $gitlabUserList = $this->gitlab->apiGetUsers($gitlabID); + $gitlabUsers = array(''=>''); + foreach($gitlabUserList as $gitlabUser) + { + $gitlabUsers[$gitlabUser->id] = $gitlabUser->realname; + } + + $accessLevels = $this->lang->gitlab->accessLevels; + $currentMembers = $this->gitlab->apiGetGroupMembers($gitlabID, $groupID); + + $this->view->title = $this->lang->gitlab->common . $this->lang->colon . $this->lang->gitlab->group->manageMembers; + $this->view->currentMembers = $currentMembers; + $this->view->gitlabUsers = $gitlabUsers; + $this->view->gitlabID = $gitlabID; + $this->display(); + } + /** * Browse gitlab project. * @@ -370,6 +489,7 @@ class gitlab extends control */ public function userBrowse($gitlabID) { + $this->view->title = $this->lang->gitlab->common . $this->lang->colon . $this->lang->gitlab->browseUser; $this->view->gitlabID = $gitlabID; $this->view->gitlabUserList = $this->gitlab->apiGetUsers($gitlabID); $this->display(); @@ -394,6 +514,7 @@ class gitlab extends control $userPairs = $this->loadModel('user')->getPairs('noclosed|noletter'); + $this->view->title = $this->lang->gitlab->common . $this->lang->colon . $this->lang->gitlab->user->create; $this->view->userPairs = $userPairs; $this->view->gitlabID = $gitlabID; $this->display(); @@ -421,6 +542,7 @@ class gitlab extends control $user = $this->gitlab->apiGetSingleUser($gitlabID, $userID); $zentaoBindAccount = $this->dao->select('account')->from(TABLE_OAUTH)->where('providerType')->eq('gitlab')->andWhere('providerID')->eq($gitlabID)->andWhere('openID')->eq($user->id)->fetch('account'); + $this->view->title = $this->lang->gitlab->common . $this->lang->colon . $this->lang->gitlab->user->edit; $this->view->user = $user; $this->view->userPairs = $userPairs; $this->view->zentaoBindAccount = $zentaoBindAccount; @@ -454,6 +576,7 @@ class gitlab extends control */ public function projectBrowse($gitlabID) { + $this->view->title = $this->lang->gitlab->common . $this->lang->colon . $this->lang->gitlab->browseProject; $this->view->gitlabID = $gitlabID; $this->view->gitlabProjectList = $this->gitlab->apiGetProjects($gitlabID); $this->display(); @@ -488,6 +611,7 @@ class gitlab extends control if($namespace->kind == 'group') $namespaces[$namespace->id] = $namespace->path; } + $this->view->title = $this->lang->gitlab->common . $this->lang->colon . $this->lang->gitlab->project->create; $this->view->gitlab = $gitlab; $this->view->user = $user; $this->view->namespaces = $namespaces; @@ -514,6 +638,8 @@ class gitlab extends control } $project = $this->gitlab->apiGetSingleProject($gitlabID, $projectID); + + $this->view->title = $this->lang->gitlab->common . $this->lang->colon . $this->lang->gitlab->project->edit; $this->view->project = $project; $this->view->gitlabID = $gitlabID; $this->display(); diff --git a/module/gitlab/js/managegroupmembers.js b/module/gitlab/js/managegroupmembers.js new file mode 100644 index 0000000000..589e0ffc61 --- /dev/null +++ b/module/gitlab/js/managegroupmembers.js @@ -0,0 +1,46 @@ +/** + * Save team members. + * + * @access public + * @return void + */ +function saveMembers() +{ + $('#saveBtn').addClass('hidden'); + $('#submit').removeClass('hidden'); + $('#submit').click(); +} + +/** + * Add item. + * + * @param object $obj + * @access public + * @return void + */ +function addItem(obj) +{ + var item = $('#addItem').html().replace(/%i%/g, i); + $(obj).closest('tr').after('
| + | '') + $this->lang->gitlab->accessLevels, '', "class='form-control'");?> | ++ | + ", '', "onclick='addItem(this)' class='btn btn-link'");?> + ", '', "onclick='deleteItem(this)' class='btn btn-link'");?> + | +