mirror of
https://github.com/gitbucket/gitbucket.git
synced 2025-11-07 22:15:51 +01:00
(refs #114)Add group deletion.
This commit is contained in:
@@ -26,7 +26,7 @@ trait UserManagementControllerBase extends AccountManagementControllerBase {
|
|||||||
memberNames: Option[String])
|
memberNames: Option[String])
|
||||||
|
|
||||||
case class EditGroupForm(groupName: String, url: Option[String], fileId: Option[String],
|
case class EditGroupForm(groupName: String, url: Option[String], fileId: Option[String],
|
||||||
memberNames: Option[String], clearImage: Boolean)
|
memberNames: Option[String], clearImage: Boolean, isRemoved: Boolean)
|
||||||
|
|
||||||
val newUserForm = mapping(
|
val newUserForm = mapping(
|
||||||
"userName" -> trim(label("Username" ,text(required, maxlength(100), identifier, uniqueUserName))),
|
"userName" -> trim(label("Username" ,text(required, maxlength(100), identifier, uniqueUserName))),
|
||||||
@@ -62,7 +62,8 @@ trait UserManagementControllerBase 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()))),
|
||||||
"memberNames" -> trim(label("Member Names" ,optional(text()))),
|
"memberNames" -> trim(label("Member Names" ,optional(text()))),
|
||||||
"clearImage" -> trim(label("Clear image" ,boolean()))
|
"clearImage" -> trim(label("Clear image" ,boolean())),
|
||||||
|
"removed" -> trim(label("Disable" ,boolean()))
|
||||||
)(EditGroupForm.apply)
|
)(EditGroupForm.apply)
|
||||||
|
|
||||||
get("/admin/users")(adminOnly {
|
get("/admin/users")(adminOnly {
|
||||||
@@ -94,7 +95,7 @@ trait UserManagementControllerBase extends AccountManagementControllerBase {
|
|||||||
val userName = params("userName")
|
val userName = params("userName")
|
||||||
getAccountByUserName(userName, true).map { account =>
|
getAccountByUserName(userName, true).map { account =>
|
||||||
|
|
||||||
if(account.isRemoved == false && form.isRemoved == true){
|
if(form.isRemoved){
|
||||||
// Remove repositories
|
// Remove repositories
|
||||||
getRepositoryNamesOfUser(userName).foreach { repositoryName =>
|
getRepositoryNamesOfUser(userName).foreach { repositoryName =>
|
||||||
deleteRepository(userName, repositoryName)
|
deleteRepository(userName, repositoryName)
|
||||||
@@ -140,15 +141,29 @@ trait UserManagementControllerBase extends AccountManagementControllerBase {
|
|||||||
post("/admin/users/:groupName/_editgroup", editGroupForm)(adminOnly { form =>
|
post("/admin/users/:groupName/_editgroup", editGroupForm)(adminOnly { form =>
|
||||||
defining(params("groupName"), form.memberNames.map(_.split(",").toList).getOrElse(Nil)){ case (groupName, memberNames) =>
|
defining(params("groupName"), form.memberNames.map(_.split(",").toList).getOrElse(Nil)){ case (groupName, memberNames) =>
|
||||||
getAccountByUserName(groupName, true).map { account =>
|
getAccountByUserName(groupName, true).map { account =>
|
||||||
updateGroup(groupName, form.url)
|
updateGroup(groupName, form.url, form.isRemoved)
|
||||||
updateGroupMembers(form.groupName, memberNames)
|
|
||||||
|
|
||||||
|
if(form.isRemoved){
|
||||||
|
// Remove from GROUP_MEMBER
|
||||||
|
updateGroupMembers(form.groupName, Nil)
|
||||||
|
// Remove repositories
|
||||||
|
getRepositoryNamesOfUser(form.groupName).foreach { repositoryName =>
|
||||||
|
deleteRepository(groupName, repositoryName)
|
||||||
|
FileUtils.deleteDirectory(getRepositoryDir(groupName, repositoryName))
|
||||||
|
FileUtils.deleteDirectory(getWikiRepositoryDir(groupName, repositoryName))
|
||||||
|
FileUtils.deleteDirectory(getTemporaryDir(groupName, repositoryName))
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// Update GROUP_MEMBER
|
||||||
|
updateGroupMembers(form.groupName, memberNames)
|
||||||
|
// Update COLLABORATOR for group repositories
|
||||||
getRepositoryNamesOfUser(form.groupName).foreach { repositoryName =>
|
getRepositoryNamesOfUser(form.groupName).foreach { repositoryName =>
|
||||||
removeCollaborators(form.groupName, repositoryName)
|
removeCollaborators(form.groupName, repositoryName)
|
||||||
memberNames.foreach { userName =>
|
memberNames.foreach { userName =>
|
||||||
addCollaborator(form.groupName, repositoryName, userName)
|
addCollaborator(form.groupName, repositoryName, userName)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
updateImage(form.groupName, form.fileId, form.clearImage)
|
updateImage(form.groupName, form.fileId, form.clearImage)
|
||||||
redirect("/admin/users")
|
redirect("/admin/users")
|
||||||
|
|||||||
@@ -115,8 +115,8 @@ trait AccountService {
|
|||||||
isGroupAccount = true,
|
isGroupAccount = true,
|
||||||
isRemoved = false)
|
isRemoved = false)
|
||||||
|
|
||||||
def updateGroup(groupName: String, url: Option[String]): Unit =
|
def updateGroup(groupName: String, url: Option[String], removed: Boolean): Unit =
|
||||||
Accounts.filter(_.userName is groupName.bind).map(_.url.?).update(url)
|
Accounts.filter(_.userName is groupName.bind).map(t => t.url.? ~ t.removed).update(url, removed)
|
||||||
|
|
||||||
def updateGroupMembers(groupName: String, members: List[String]): Unit = {
|
def updateGroupMembers(groupName: String, members: List[String]): Unit = {
|
||||||
Query(GroupMembers).filter(_.groupName is groupName.bind).delete
|
Query(GroupMembers).filter(_.groupName is groupName.bind).delete
|
||||||
|
|||||||
@@ -12,6 +12,12 @@
|
|||||||
<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){
|
||||||
|
<label for="removed">
|
||||||
|
<input type="checkbox" name="removed" id="removed" value="true" @if(account.get.isRemoved){checked}/>
|
||||||
|
Disable
|
||||||
|
</label>
|
||||||
|
}
|
||||||
</fieldset>
|
</fieldset>
|
||||||
<fieldset>
|
<fieldset>
|
||||||
<label class="strong">URL (Optional)</label>
|
<label class="strong">URL (Optional)</label>
|
||||||
|
|||||||
Reference in New Issue
Block a user