diff --git a/src/main/scala/app/SettingsController.scala b/src/main/scala/app/SettingsController.scala index c6f1f52..cdf7658 100644 --- a/src/main/scala/app/SettingsController.scala +++ b/src/main/scala/app/SettingsController.scala @@ -5,12 +5,19 @@ class SettingsController extends SettingsControllerBase with RepositoryService with AccountService - trait SettingsControllerBase extends ControllerBase { self: RepositoryService with AccountService => + case class OptionsForm(description: Option[String], defaultBranch: String, repositoryType: Int) + + val optionsForm = mapping( + "description" -> trim(label("Description" , optional(text()))), + "defaultBranch" -> trim(label("Default Branch" , text(required, maxlength(100)))), + "repositoryType" -> trim(label("Repository Type", number())) + )(OptionsForm.apply) + case class CollaboratorForm(userName: String) - val form = mapping( + val collaboratorForm = mapping( "userName" -> trim(label("Username", text(required, collaborator))) )(CollaboratorForm.apply) @@ -27,6 +34,16 @@ settings.html.options(getRepository(owner, repository, servletContext).get) }) + post("/:owner/:repository/settings/options", optionsForm){ form => + val owner = params("owner") + val repository = params("repository") + + // save repository options + saveRepositoryOptions(owner, repository, form.description, form.defaultBranch, form.repositoryType) + + redirect("%s/%s/settings/options".format(owner, repository)) + } + get("/:owner/:repository/settings/collaborators")(ownerOnly { val owner = params("owner") val repository = params("repository") @@ -34,7 +51,7 @@ settings.html.collaborators(getCollaborators(owner, repository), getRepository(owner, repository, servletContext).get) }) - post("/:owner/:repository/settings/collaborators/_add", form)(ownerOnly { form => + post("/:owner/:repository/settings/collaborators/_add", collaboratorForm)(ownerOnly { form => val owner = params("owner") val repository = params("repository") addCollaborator(owner, repository, form.userName) diff --git a/src/main/scala/service/RepositoryService.scala b/src/main/scala/service/RepositoryService.scala index 5bf999d..ab87879 100644 --- a/src/main/scala/service/RepositoryService.scala +++ b/src/main/scala/service/RepositoryService.scala @@ -106,13 +106,21 @@ /** * Updates the last activity date of the repository. */ - def updateLastActivityDate(userName: String, repositoryName: String): Unit = { - val q = for { - r <- Repositories if (r.userName is userName.bind) && (r.repositoryName is repositoryName.bind) - } yield r.lastActivityDate - - q.update(new java.sql.Date(System.currentTimeMillis)) - } + def updateLastActivityDate(userName: String, repositoryName: String): Unit = + Query(Repositories) + .filter { r => (r.userName is userName.bind) && (r.repositoryName is repositoryName.bind) } + .map { _.lastActivityDate } + .update (new java.sql.Date(System.currentTimeMillis)) + + /** + * Save repository options. + */ + def saveRepositoryOptions(userName: String, repositoryName: String, + description: Option[String], defaultBranch: String, repositoryType: Int): Unit = + Query(Repositories) + .filter { r => (r.userName is userName.bind) && (r.repositoryName is repositoryName.bind) } + .map { r => r.description.? ~ r.defaultBranch ~ r.repositoryType ~ r.updatedDate } + .update (description, defaultBranch, repositoryType, new java.sql.Date(System.currentTimeMillis)) /** * Add collaborator to the repository. diff --git a/src/main/twirl/settings/options.scala.html b/src/main/twirl/settings/options.scala.html index c02cda3..a8d2f5d 100644 --- a/src/main/twirl/settings/options.scala.html +++ b/src/main/twirl/settings/options.scala.html @@ -3,30 +3,38 @@ @html.main("Settings"){ @html.header("settings", repository) @menu("options", repository){ -