diff --git a/src/main/scala/app/UserManagementController.scala b/src/main/scala/app/UserManagementController.scala index f5a4dec..ae46d04 100644 --- a/src/main/scala/app/UserManagementController.scala +++ b/src/main/scala/app/UserManagementController.scala @@ -26,7 +26,7 @@ memberNames: 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( "userName" -> trim(label("Username" ,text(required, maxlength(100), identifier, uniqueUserName))), @@ -62,7 +62,8 @@ "url" -> trim(label("URL" ,optional(text(maxlength(200))))), "fileId" -> trim(label("File ID" ,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) get("/admin/users")(adminOnly { @@ -94,7 +95,7 @@ val userName = params("userName") getAccountByUserName(userName, true).map { account => - if(account.isRemoved == false && form.isRemoved == true){ + if(form.isRemoved){ // Remove repositories getRepositoryNamesOfUser(userName).foreach { repositoryName => deleteRepository(userName, repositoryName) @@ -140,13 +141,27 @@ post("/admin/users/:groupName/_editgroup", editGroupForm)(adminOnly { form => defining(params("groupName"), form.memberNames.map(_.split(",").toList).getOrElse(Nil)){ case (groupName, memberNames) => getAccountByUserName(groupName, true).map { account => - updateGroup(groupName, form.url) - updateGroupMembers(form.groupName, memberNames) + updateGroup(groupName, form.url, form.isRemoved) - getRepositoryNamesOfUser(form.groupName).foreach { repositoryName => - removeCollaborators(form.groupName, repositoryName) - memberNames.foreach { userName => - addCollaborator(form.groupName, repositoryName, userName) + 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 => + removeCollaborators(form.groupName, repositoryName) + memberNames.foreach { userName => + addCollaborator(form.groupName, repositoryName, userName) + } } } diff --git a/src/main/scala/service/AccountService.scala b/src/main/scala/service/AccountService.scala index 549fe36..07c2c29 100644 --- a/src/main/scala/service/AccountService.scala +++ b/src/main/scala/service/AccountService.scala @@ -115,8 +115,8 @@ isGroupAccount = true, isRemoved = false) - def updateGroup(groupName: String, url: Option[String]): Unit = - Accounts.filter(_.userName is groupName.bind).map(_.url.?).update(url) + def updateGroup(groupName: String, url: Option[String], removed: Boolean): Unit = + Accounts.filter(_.userName is groupName.bind).map(t => t.url.? ~ t.removed).update(url, removed) def updateGroupMembers(groupName: String, members: List[String]): Unit = { Query(GroupMembers).filter(_.groupName is groupName.bind).delete diff --git a/src/main/twirl/admin/users/group.scala.html b/src/main/twirl/admin/users/group.scala.html index 240622c..abf64cb 100644 --- a/src/main/twirl/admin/users/group.scala.html +++ b/src/main/twirl/admin/users/group.scala.html @@ -12,6 +12,12 @@ + @if(account.isDefined){ + + }