diff --git a/src/main/scala/app/CreateRepositoryController.scala b/src/main/scala/app/CreateRepositoryController.scala index a9d2861..a622c88 100644 --- a/src/main/scala/app/CreateRepositoryController.scala +++ b/src/main/scala/app/CreateRepositoryController.scala @@ -22,7 +22,7 @@ case class RepositoryCreationForm(owner: String, name: String, description: Option[String], isPrivate: Boolean, createReadme: Boolean) val form = mapping( - "owner" -> trim(label("Owner" , text(required, maxlength(40), identifier))), // TODO check existence. + "owner" -> trim(label("Owner" , text(required, maxlength(40), identifier, existsAccount))), "name" -> trim(label("Repository name", text(required, maxlength(40), identifier, unique))), "description" -> trim(label("Description" , optional(text()))), "isPrivate" -> trim(label("Repository Type", boolean())), @@ -40,12 +40,20 @@ * Create new repository. */ post("/new", form)(usersOnly { form => + val ownerAccount = getAccountByUserName(form.owner).get val loginAccount = context.loginAccount.get val loginUserName = loginAccount.userName // Insert to the database at first createRepository(form.name, form.owner, form.description, form.isPrivate) + // Add collaborators for group repository + if(ownerAccount.isGroupAccount){ + getGroupMembers(form.owner).foreach { userName => + addCollaborator(form.owner, form.name, userName) + } + } + // Insert default labels createLabel(form.owner, form.name, "bug", "fc2929") createLabel(form.owner, form.name, "duplicate", "cccccc") @@ -90,20 +98,26 @@ createWikiRepository(loginAccount, form.owner, form.name) // Record activity - recordCreateRepositoryActivity(loginUserName, form.name, form.owner) + recordCreateRepositoryActivity(form.owner, form.name, loginUserName) // redirect to the repository redirect(s"/${form.owner}/${form.name}") }) + + private def existsAccount: Constraint = new Constraint(){ + def validate(name: String, value: String): Option[String] = + if(getAccountByUserName(value).isEmpty) Some("User or group does not exist.") else None + } + /** * Duplicate check for the repository name. */ private def unique: Constraint = new Constraint(){ - def validate(name: String, value: String): Option[String] = { - // TODO fix to retreive user name from request parameter - getRepositoryNamesOfUser(context.loginAccount.get.userName).find(_ == value).map(_ => "Repository already exists.") - } + def validate(name: String, value: String): Option[String] = + params.get("owner").flatMap { userName => + getRepositoryNamesOfUser(userName).find(_ == value).map(_ => "Repository already exists.") + } } } \ No newline at end of file diff --git a/src/main/scala/app/RepositorySettingsController.scala b/src/main/scala/app/RepositorySettingsController.scala index bfb7470..780a7f3 100644 --- a/src/main/scala/app/RepositorySettingsController.scala +++ b/src/main/scala/app/RepositorySettingsController.scala @@ -54,14 +54,19 @@ * Display the Collaborators page. */ get("/:owner/:repository/settings/collaborators")(ownerOnly { repository => - settings.html.collaborators(getCollaborators(repository.owner, repository.name), repository) + settings.html.collaborators( + getCollaborators(repository.owner, repository.name), + getAccountByUserName(repository.owner).get.isGroupAccount, + repository) }) /** * Add the collaborator. */ post("/:owner/:repository/settings/collaborators/add", collaboratorForm)(ownerOnly { (form, repository) => - addCollaborator(repository.owner, repository.name, form.userName) + if(!getAccountByUserName(repository.owner).get.isGroupAccount){ + addCollaborator(repository.owner, repository.name, form.userName) + } redirect(s"/${repository.owner}/${repository.name}/settings/collaborators") }) @@ -69,7 +74,9 @@ * Add the collaborator. */ get("/:owner/:repository/settings/collaborators/remove")(ownerOnly { repository => - removeCollaborator(repository.owner, repository.name, params("name")) + if(!getAccountByUserName(repository.owner).get.isGroupAccount){ + removeCollaborator(repository.owner, repository.name, params("name")) + } redirect(s"/${repository.owner}/${repository.name}/settings/collaborators") }) diff --git a/src/main/scala/service/AccountService.scala b/src/main/scala/service/AccountService.scala index 39ca18e..769f9b7 100644 --- a/src/main/scala/service/AccountService.scala +++ b/src/main/scala/service/AccountService.scala @@ -50,7 +50,7 @@ Accounts insert Account( userName = groupName, password = "", - mailAddress = "", + mailAddress = groupName + "@devnull", isAdmin = false, url = None, registeredDate = currentDate, diff --git a/src/main/twirl/settings/collaborators.scala.html b/src/main/twirl/settings/collaborators.scala.html index 6131f7b..acd869b 100644 --- a/src/main/twirl/settings/collaborators.scala.html +++ b/src/main/twirl/settings/collaborators.scala.html @@ -1,4 +1,6 @@ -@(collaborators: List[String], repository: service.RepositoryService.RepositoryInfo)(implicit context: app.Context) +@(collaborators: List[String], + isGroupRepository: Boolean, + repository: service.RepositoryService.RepositoryInfo)(implicit context: app.Context) @import context._ @import view.helpers._ @html.main("Settings", Some(repository)){ @@ -9,17 +11,21 @@ @collaborators.map { collaboratorName =>
  • @collaboratorName - (remove) + @if(!isGroupRepository){ + (remove) + }
  • } -
    -
    - -
    - - -
    + @if(!isGroupRepository){ +
    +
    + +
    + + +
    + } } }