Implementing add collaborator stuff.

This commit is contained in:
takezoe
2013-06-04 03:09:23 +09:00
parent 93d6405592
commit 783a9684dc
5 changed files with 82 additions and 19 deletions

View File

@@ -1,12 +1,19 @@
package app
import service._
import jp.sf.amateras.scalatra.forms._
class SettingsController extends SettingsControllerBase with RepositoryService with AccountService
trait SettingsControllerBase extends ControllerBase { self: RepositoryService =>
trait SettingsControllerBase extends ControllerBase { self: RepositoryService with AccountService =>
case class CollaboratorForm(userName: String)
val form = mapping(
"userName" -> trim(label("Username", text(required, existUser)))
)(CollaboratorForm.apply)
get("/:owner/:repository/settings") {
val owner = params("owner")
val repository = params("repository")
@@ -24,7 +31,24 @@ trait SettingsControllerBase extends ControllerBase { self: RepositoryService =>
val owner = params("owner")
val repository = params("repository")
settings.html.collaborators(getRepository(owner, repository, servletContext).get)
settings.html.collaborators(getCollaborators(owner, repository), getRepository(owner, repository, servletContext).get)
}
post("/:owner/:repository/settings/collaborators/_add", form) { form =>
val owner = params("owner")
val repository = params("repository")
addCollaborator(owner, repository, form.userName)
redirect("/%s/%s/settings/collaborators".format(owner, repository))
}
def existUser: Constraint = new Constraint(){
def validate(name: String, value: String): Option[String] = {
getAccountByUserName(value) match {
case None => Some("User does not exist.")
case Some(x) if(x.userName == context.loginAccount.get.userName) => Some("User can access this repository already.")
case Some(x) => None
}
}
}
}