diff --git a/src/main/scala/app/CreateController.scala b/src/main/scala/app/CreateController.scala index 7b2acbb..c26228c 100644 --- a/src/main/scala/app/CreateController.scala +++ b/src/main/scala/app/CreateController.scala @@ -41,25 +41,25 @@ )(ForkRepositoryForm.apply) case class NewGroupForm(groupName: String, url: Option[String], fileId: Option[String], - memberNames: Option[String]) + members: String) case class EditGroupForm(groupName: String, url: Option[String], fileId: Option[String], - memberNames: Option[String], clearImage: Boolean, isRemoved: Boolean) + members: String, clearImage: Boolean, isRemoved: Boolean) val newGroupForm = mapping( - "groupName" -> trim(label("Group name" ,text(required, maxlength(100), identifier, uniqueUserName))), - "url" -> trim(label("URL" ,optional(text(maxlength(200))))), - "fileId" -> trim(label("File ID" ,optional(text()))), - "memberNames" -> trim(label("Member Names" ,optional(text()))) + "groupName" -> trim(label("Group name" ,text(required, maxlength(100), identifier, uniqueUserName))), + "url" -> trim(label("URL" ,optional(text(maxlength(200))))), + "fileId" -> trim(label("File ID" ,optional(text()))), + "members" -> trim(label("Members" ,text(required, members))) )(NewGroupForm.apply) val editGroupForm = mapping( - "groupName" -> trim(label("Group name" ,text(required, maxlength(100), identifier))), - "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())), - "removed" -> trim(label("Disable" ,boolean())) + "groupName" -> trim(label("Group name" ,text(required, maxlength(100), identifier))), + "url" -> trim(label("URL" ,optional(text(maxlength(200))))), + "fileId" -> trim(label("File ID" ,optional(text()))), + "members" -> trim(label("Members" ,text(required, members))), + "clearImage" -> trim(label("Clear image" ,boolean())), + "removed" -> trim(label("Disable" ,boolean())) )(EditGroupForm.apply) /** @@ -197,16 +197,16 @@ }) get("/groups/new")(usersOnly { - html.group(None, Nil) + html.group(None, List((context.loginAccount.get.userName, true))) }) post("/groups/new", newGroupForm)(usersOnly { form => createGroup(form.groupName, form.url) - updateGroupMembers(form.groupName, form.memberNames.map(_.split(",").map { + updateGroupMembers(form.groupName, form.members.split(",").map { _.split(":") match { case Array(userName, isManager) => (userName, isManager.toBoolean) } - }.toList).getOrElse(Nil)) + }.toList) updateImage(form.groupName, form.fileId, false) redirect(s"/${form.groupName}") }) @@ -218,11 +218,11 @@ }) post("/:groupName/_edit", editGroupForm)(managersOnly { form => - defining(params("groupName"), form.memberNames.map(_.split(",").map { + defining(params("groupName"), form.members.split(",").map { _.split(":") match { case Array(userName, isManager) => (userName, isManager.toBoolean) } - }.toList).getOrElse(Nil)){ case (groupName, members) => + }.toList){ case (groupName, members) => getAccountByUserName(groupName, true).map { account => updateGroup(groupName, form.url, form.isRemoved) @@ -276,4 +276,13 @@ } } + private def members: Constraint = new Constraint(){ + override def validate(name: String, value: String, messages: Messages): Option[String] = { + if(value.split(",").exists { + _.split(":") match { case Array(userName, isManager) => isManager.toBoolean } + }) None else Some("Must select one manager at least.") + } + } + + } diff --git a/src/main/twirl/admin/users/group.scala.html b/src/main/twirl/admin/users/group.scala.html index fe037ea..2ad79ad 100644 --- a/src/main/twirl/admin/users/group.scala.html +++ b/src/main/twirl/admin/users/group.scala.html @@ -34,9 +34,10 @@
-
@@ -70,7 +71,7 @@ } // check duplication - var exists = $('#members li').filter(function(){ + var exists = $('#member-list li').filter(function(){ return $(this).data('name') == userName; }).length > 0; if(exists){ @@ -84,18 +85,16 @@ }, function(data, status){ if(data == 'true'){ // add member - $('#members').append($('
  • ') + $('#member-list').append($('
  • ') .data('name', userName) + .append($('').attr('id', 'is_manager_' + userName)) .append($('').attr('href', '@path/' + userName).text(userName)) .append(' ') .append($('').attr('href', '#').addClass('remove').text('(remove)'))); - $('#memberName').val(''); + $('#members').val(''); // update hidden value - var userNames = $('#members li').map(function(i, e){ - return $(e).data('name'); - }).get().join(','); - $('#memberNames').val(userNames); + updateMembers(); } else { $('#error-memberName').text('User does not exist.'); } @@ -105,12 +104,9 @@ $(document).on('click', '.remove', function(){ // remove member $(this).parent().remove(); - // update hidden value - var userNames = $('#members li').map(function(i, e){ - return $(e).data('name'); - }).get().join(','); - $('#memberNames').val(userNames); + updateMembers(); + $('#members').val(members); }); // Don't submit form by ENTER key @@ -118,5 +114,17 @@ console.log(e.keyCode); return !(e.keyCode == 13); }); + + $('.is_manager').change(function(){ + updateMembers(); + }); + + function updateMembers(){ + var members = $('#member-list li').map(function(i, e){ + var userName = $(e).data('name'); + return userName + ':' + $('#is_manager_' + userName).prop('checked'); + }).get().join(','); + $('#members').val(members); + } }); \ No newline at end of file diff --git a/src/main/twirl/group.scala.html b/src/main/twirl/group.scala.html index d395ce1..cbd0066 100644 --- a/src/main/twirl/group.scala.html +++ b/src/main/twirl/group.scala.html @@ -34,10 +34,10 @@
    -
    @@ -70,7 +70,7 @@ } // check duplication - var exists = $('#members li').filter(function(){ + var exists = $('#member-list li').filter(function(){ return $(this).data('name') == userName; }).length > 0; if(exists){ @@ -84,20 +84,16 @@ }, function(data, status){ if(data == 'true'){ // add member - $('#members').append($('
  • ') + $('#member-list').append($('
  • ') .data('name', userName) - .append($('').attr('id', 'is_manager_' + userName)) + .append($('').attr('id', 'is_manager_' + userName)) .append($('').attr('href', '@path/' + userName).text(userName)) .append(' ') .append($('').attr('href', '#').addClass('remove').text('(remove)'))); - $('#memberName').val(''); + $('#members').val(''); // update hidden value - var userNames = $('#members li').map(function(i, e){ - var userName = $(e).data('name'); - return userName + ':' + $('#is_manager_' + userName).prop('checked'); - }).get().join(','); - $('#memberNames').val(userNames); + updateMembers(); } else { $('#error-memberName').text('User does not exist.'); } @@ -107,13 +103,9 @@ $(document).on('click', '.remove', function(){ // remove member $(this).parent().remove(); - // update hidden value - var userNames = $('#members li').map(function(i, e){ - var userName = $(e).data('name'); - return userName + ':' + $('#is_manager_' + userName).prop('checked'); - }).get().join(','); - $('#memberNames').val(userNames); + updateMembers(); + $('#members').val(members); }); // Don't submit form by ENTER key @@ -121,5 +113,17 @@ console.log(e.keyCode); return !(e.keyCode == 13); }); + + $('.is_manager').change(function(){ + updateMembers(); + }); + + function updateMembers(){ + var members = $('#member-list li').map(function(i, e){ + var userName = $(e).data('name'); + return userName + ':' + $('#is_manager_' + userName).prop('checked'); + }).get().join(','); + $('#members').val(members); + } }); \ No newline at end of file