diff --git a/src/main/scala/app/WikiController.scala b/src/main/scala/app/WikiController.scala index 38dfc7c..3609226 100644 --- a/src/main/scala/app/WikiController.scala +++ b/src/main/scala/app/WikiController.scala @@ -32,8 +32,8 @@ val repository = params("repository") getWikiPage(owner, repository, "Home") match { - case Some(page) => wiki.html.wiki("Home", page, getRepository(owner, repository, servletContext).get) - case None => wiki.html.wikiedit("Home", None, getRepository(owner, repository, servletContext).get) + case Some(page) => wiki.html.wiki("Home", page, getRepository(owner, repository, servletContext).get, isWritable(owner, repository)) + case None => redirect("/%s/%s/wiki/Home/_edit".format(owner, repository)) } } @@ -43,8 +43,8 @@ val pageName = params("page") getWikiPage(owner, repository, pageName) match { - case Some(page) => wiki.html.wiki(pageName, page, getRepository(owner, repository, servletContext).get) - case None => wiki.html.wikiedit(pageName, None, getRepository(owner, repository, servletContext).get) + case Some(page) => wiki.html.wiki(pageName, page, getRepository(owner, repository, servletContext).get, isWritable(owner, repository)) + case None => redirect("/%s/%s/wiki/%s/_edit".format(owner, repository, pageName)) // TODO URLEncode } } @@ -132,7 +132,7 @@ val owner = params("owner") val repository = params("repository") - wiki.html.wikipages(getWikiPageList(owner, repository), getRepository(owner, repository, servletContext).get) + wiki.html.wikipages(getWikiPageList(owner, repository), getRepository(owner, repository, servletContext).get, isWritable(owner, repository)) } get("/:owner/:repository/wiki/_history"){ @@ -166,6 +166,15 @@ } } + def isWritable(owner: String, repository: String): Boolean = { + context.loginAccount match { + case Some(a) if(a.userType == AccountService.Administrator) => true + case Some(a) if(a.userName == owner) => true + case Some(a) if(getCollaborators(owner, repository).contains(a.userName)) => true + case _ => false + } + } + def unique: Constraint = new Constraint(){ def validate(name: String, value: String): Option[String] = { if(getWikiPageList(params("owner"), params("repository")).contains(value)){ diff --git a/src/main/twirl/wiki/wiki.scala.html b/src/main/twirl/wiki/wiki.scala.html index 476dc2b..4d98e81 100644 --- a/src/main/twirl/wiki/wiki.scala.html +++ b/src/main/twirl/wiki/wiki.scala.html @@ -1,4 +1,4 @@ -@(pageName: String, page: service.WikiService.WikiPageInfo, repository: service.RepositoryService.RepositoryInfo)(implicit context: app.Context) +@(pageName: String, page: service.WikiService.WikiPageInfo, repository: service.RepositoryService.RepositoryInfo, isWritable: Boolean)(implicit context: app.Context) @import view.helpers @import context._ @html.main(pageName + " - " + repository.owner + "/" + repository.name){ @@ -10,7 +10,7 @@
  • - @if(loginAccount.isDefined){ + @if(isWritable){ New Page Edit Page } diff --git a/src/main/twirl/wiki/wikipages.scala.html b/src/main/twirl/wiki/wikipages.scala.html index df90bcb..8b0487e 100644 --- a/src/main/twirl/wiki/wikipages.scala.html +++ b/src/main/twirl/wiki/wikipages.scala.html @@ -1,4 +1,4 @@ -@(pages: List[String], repository: service.RepositoryService.RepositoryInfo)(implicit context: app.Context) +@(pages: List[String], repository: service.RepositoryService.RepositoryInfo, isWritable: Boolean)(implicit context: app.Context) @import view.helpers @import context._ @html.main("Pages - " + repository.owner + "/" + repository.name){ @@ -10,7 +10,9 @@
  • - New Page + @if(isWritable){ + New Page + }