mirror of
https://github.com/gitbucket/gitbucket.git
synced 2025-11-09 23:15:49 +01:00
(refs #241)Group management improvement is completed in user side
This commit is contained in:
@@ -22,9 +22,7 @@ trait CreateControllerBase extends AccountManagementControllerBase {
|
|||||||
self: RepositoryService with AccountService with WikiService with LabelsService with ActivityService
|
self: RepositoryService with AccountService with WikiService with LabelsService with ActivityService
|
||||||
with UsersAuthenticator with ReadableUsersAuthenticator with GroupManagerAuthenticator =>
|
with UsersAuthenticator with ReadableUsersAuthenticator with GroupManagerAuthenticator =>
|
||||||
|
|
||||||
case class RepositoryCreationForm(owner: String, name: String, description: Option[String],
|
case class RepositoryCreationForm(owner: String, name: String, description: Option[String], isPrivate: Boolean, createReadme: Boolean)
|
||||||
isPrivate: Boolean, createReadme: Boolean)
|
|
||||||
|
|
||||||
case class ForkRepositoryForm(owner: String, name: String)
|
case class ForkRepositoryForm(owner: String, name: String)
|
||||||
|
|
||||||
val newRepositoryForm = mapping(
|
val newRepositoryForm = mapping(
|
||||||
@@ -40,11 +38,8 @@ trait CreateControllerBase extends AccountManagementControllerBase {
|
|||||||
"name" -> trim(label("Repository name", text(required)))
|
"name" -> trim(label("Repository name", text(required)))
|
||||||
)(ForkRepositoryForm.apply)
|
)(ForkRepositoryForm.apply)
|
||||||
|
|
||||||
case class NewGroupForm(groupName: String, url: Option[String], fileId: Option[String],
|
case class NewGroupForm(groupName: String, url: Option[String], fileId: Option[String], members: String)
|
||||||
members: String)
|
case class EditGroupForm(groupName: String, url: Option[String], fileId: Option[String], members: String, clearImage: Boolean)
|
||||||
|
|
||||||
case class EditGroupForm(groupName: String, url: Option[String], fileId: Option[String],
|
|
||||||
members: String, clearImage: Boolean, isRemoved: Boolean)
|
|
||||||
|
|
||||||
val newGroupForm = mapping(
|
val newGroupForm = mapping(
|
||||||
"groupName" -> trim(label("Group name" ,text(required, maxlength(100), identifier, uniqueUserName))),
|
"groupName" -> trim(label("Group name" ,text(required, maxlength(100), identifier, uniqueUserName))),
|
||||||
@@ -58,8 +53,7 @@ trait CreateControllerBase extends AccountManagementControllerBase {
|
|||||||
"url" -> trim(label("URL" ,optional(text(maxlength(200))))),
|
"url" -> trim(label("URL" ,optional(text(maxlength(200))))),
|
||||||
"fileId" -> trim(label("File ID" ,optional(text()))),
|
"fileId" -> trim(label("File ID" ,optional(text()))),
|
||||||
"members" -> trim(label("Members" ,text(required, members))),
|
"members" -> trim(label("Members" ,text(required, members))),
|
||||||
"clearImage" -> trim(label("Clear image" ,boolean())),
|
"clearImage" -> trim(label("Clear image" ,boolean()))
|
||||||
"removed" -> trim(label("Disable" ,boolean()))
|
|
||||||
)(EditGroupForm.apply)
|
)(EditGroupForm.apply)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -211,40 +205,43 @@ trait CreateControllerBase extends AccountManagementControllerBase {
|
|||||||
redirect(s"/${form.groupName}")
|
redirect(s"/${form.groupName}")
|
||||||
})
|
})
|
||||||
|
|
||||||
get("/:groupName/_edit")(managersOnly {
|
get("/:groupName/_editgroup")(managersOnly {
|
||||||
defining(params("groupName")){ groupName =>
|
defining(params("groupName")){ groupName =>
|
||||||
html.group(getAccountByUserName(groupName, true), getGroupMembers(groupName))
|
html.group(getAccountByUserName(groupName, true), getGroupMembers(groupName))
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
post("/:groupName/_edit", editGroupForm)(managersOnly { form =>
|
get("/:groupName/_deletegroup")(managersOnly {
|
||||||
|
defining(params("groupName")){ groupName =>
|
||||||
|
// Remove from GROUP_MEMBER
|
||||||
|
updateGroupMembers(groupName, Nil)
|
||||||
|
// Remove repositories
|
||||||
|
getRepositoryNamesOfUser(groupName).foreach { repositoryName =>
|
||||||
|
deleteRepository(groupName, repositoryName)
|
||||||
|
FileUtils.deleteDirectory(getRepositoryDir(groupName, repositoryName))
|
||||||
|
FileUtils.deleteDirectory(getWikiRepositoryDir(groupName, repositoryName))
|
||||||
|
FileUtils.deleteDirectory(getTemporaryDir(groupName, repositoryName))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
redirect("/")
|
||||||
|
})
|
||||||
|
|
||||||
|
post("/:groupName/_editgroup", editGroupForm)(managersOnly { form =>
|
||||||
defining(params("groupName"), form.members.split(",").map {
|
defining(params("groupName"), form.members.split(",").map {
|
||||||
_.split(":") match {
|
_.split(":") match {
|
||||||
case Array(userName, isManager) => (userName, isManager.toBoolean)
|
case Array(userName, isManager) => (userName, isManager.toBoolean)
|
||||||
}
|
}
|
||||||
}.toList){ case (groupName, members) =>
|
}.toList){ case (groupName, members) =>
|
||||||
getAccountByUserName(groupName, true).map { account =>
|
getAccountByUserName(groupName, true).map { account =>
|
||||||
updateGroup(groupName, form.url, form.isRemoved)
|
updateGroup(groupName, form.url, false)
|
||||||
|
|
||||||
if(form.isRemoved){
|
// Update GROUP_MEMBER
|
||||||
// Remove from GROUP_MEMBER
|
updateGroupMembers(form.groupName, members)
|
||||||
updateGroupMembers(form.groupName, Nil)
|
// Update COLLABORATOR for group repositories
|
||||||
// Remove repositories
|
getRepositoryNamesOfUser(form.groupName).foreach { repositoryName =>
|
||||||
getRepositoryNamesOfUser(form.groupName).foreach { repositoryName =>
|
removeCollaborators(form.groupName, repositoryName)
|
||||||
deleteRepository(groupName, repositoryName)
|
members.foreach { case (userName, isManager) =>
|
||||||
FileUtils.deleteDirectory(getRepositoryDir(groupName, repositoryName))
|
addCollaborator(form.groupName, repositoryName, userName)
|
||||||
FileUtils.deleteDirectory(getWikiRepositoryDir(groupName, repositoryName))
|
|
||||||
FileUtils.deleteDirectory(getTemporaryDir(groupName, repositoryName))
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
// Update GROUP_MEMBER
|
|
||||||
updateGroupMembers(form.groupName, members)
|
|
||||||
// Update COLLABORATOR for group repositories
|
|
||||||
getRepositoryNamesOfUser(form.groupName).foreach { repositoryName =>
|
|
||||||
removeCollaborators(form.groupName, repositoryName)
|
|
||||||
members.foreach { case (userName, isManager) =>
|
|
||||||
addCollaborator(form.groupName, repositoryName, userName)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -45,7 +45,7 @@
|
|||||||
@if(loginAccount.isDefined && account.isGroupAccount && isGroupManager){
|
@if(loginAccount.isDefined && account.isGroupAccount && isGroupManager){
|
||||||
<li class="pull-right">
|
<li class="pull-right">
|
||||||
<div class="button-group">
|
<div class="button-group">
|
||||||
<a href="@url(account.userName)/_edit" class="btn">Edit Group</a>
|
<a href="@url(account.userName)/_editgroup" class="btn">Edit Group</a>
|
||||||
</div>
|
</div>
|
||||||
</li>
|
</li>
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
@(account: Option[model.Account], members: List[(String, Boolean)])(implicit context: app.Context)
|
@(account: Option[model.Account], members: List[(String, Boolean)])(implicit context: app.Context)
|
||||||
@import context._
|
@import context._
|
||||||
@import view.helpers._
|
@import view.helpers._
|
||||||
@main("Create a group"){
|
@main(if(account.isEmpty) "Create group" else "Edit group"){
|
||||||
<div style="width: 700px; margin: 10px auto;">
|
<div style="width: 700px; margin: 10px auto;">
|
||||||
<form id="form" method="post" action="@if(account.isEmpty){@path/groups/new} else {@path/@account.get.userName/_edit}" validate="true">
|
<form id="form" method="post" action="@if(account.isEmpty){@path/groups/new} else {@path/@account.get.userName/_editgroup}" validate="true">
|
||||||
<div class="row-fluid">
|
<div class="row-fluid">
|
||||||
<div class="span7">
|
<div class="span7">
|
||||||
<fieldset>
|
<fieldset>
|
||||||
@@ -12,12 +12,14 @@
|
|||||||
<span id="error-groupName" class="error"></span>
|
<span id="error-groupName" class="error"></span>
|
||||||
</div>
|
</div>
|
||||||
<input type="text" name="groupName" id="groupName" value="@account.map(_.userName)"@if(account.isDefined){ readonly}/>
|
<input type="text" name="groupName" id="groupName" value="@account.map(_.userName)"@if(account.isDefined){ readonly}/>
|
||||||
|
@*
|
||||||
@if(account.isDefined){
|
@if(account.isDefined){
|
||||||
<label for="removed">
|
<label for="removed">
|
||||||
<input type="checkbox" name="removed" id="removed" value="true" @if(account.get.isRemoved){checked}/>
|
<input type="checkbox" name="removed" id="removed" value="true" @if(account.get.isRemoved){checked}/>
|
||||||
Disable
|
Disable
|
||||||
</label>
|
</label>
|
||||||
}
|
}
|
||||||
|
*@
|
||||||
</fieldset>
|
</fieldset>
|
||||||
<fieldset>
|
<fieldset>
|
||||||
<label class="strong">URL (Optional)</label>
|
<label class="strong">URL (Optional)</label>
|
||||||
@@ -53,7 +55,15 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<fieldset class="margin">
|
<fieldset class="margin">
|
||||||
|
@if(account.isDefined){
|
||||||
|
<div class="pull-right">
|
||||||
|
<a href="@url(account.get.userName)/_deletegroup" id="delete" class="btn btn-danger">Delete Group</a>
|
||||||
|
</div>
|
||||||
|
}
|
||||||
<input type="submit" class="btn btn-success" value="@if(account.isEmpty){Create Group} else {Update Group}"/>
|
<input type="submit" class="btn btn-success" value="@if(account.isEmpty){Create Group} else {Update Group}"/>
|
||||||
|
@if(account.isDefined){
|
||||||
|
<a href="@url(account.get.userName)" class="btn">Cancel</a>
|
||||||
|
}
|
||||||
</fieldset>
|
</fieldset>
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
@@ -118,6 +128,10 @@ $(function(){
|
|||||||
updateMembers();
|
updateMembers();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
$('#delete').click(function(){
|
||||||
|
return confirm('Once you delete this group, there is no going back.\nAre you sure?');
|
||||||
|
});
|
||||||
|
|
||||||
function updateMembers(){
|
function updateMembers(){
|
||||||
var members = $('#member-list li').map(function(i, e){
|
var members = $('#member-list li').map(function(i, e){
|
||||||
var userName = $(e).data('name');
|
var userName = $(e).data('name');
|
||||||
|
|||||||
Reference in New Issue
Block a user