(refs #241)Group management improvement is completed in user side

This commit is contained in:
takezoe
2014-03-04 10:52:37 +09:00
parent 21f7888f55
commit 7a2c82461e
3 changed files with 46 additions and 35 deletions

View File

@@ -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)
}
} }
} }

View File

@@ -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>
} }

View File

@@ -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');