@@ -4,25 +4,37 @@ import gitbucket.core.controller.ControllerBase
44import gitbucket .core .service .{ AccountService , RepositoryService }
55import gitbucket .core .util .Implicits ._
66import gitbucket .core .util .SyntaxSugars ._
7- import gitbucket .core .util .{ Directory , JGitUtil , ReferrerAuthenticator }
7+ import gitbucket .core .util .{ Directory , JGitUtil , OwnerAuthenticator , ReferrerAuthenticator }
8+ import gitbucket .pages .html
89import gitbucket .plugin .model .PageSourceType
910import gitbucket .plugin .service .PagesService
11+ import io .github .gitbucket .scalatra .forms ._
1012import org .eclipse .jgit .api .Git
1113import org .eclipse .jgit .lib .ObjectId
1214import org .eclipse .jgit .revwalk .RevCommit
15+ import org .scalatra .i18n .Messages
1316
1417import scala .annotation .tailrec
1518import scala .language .implicitConversions
1619
1720class PagesController
1821 extends PagesControllerBase
1922 with AccountService
23+ with OwnerAuthenticator
2024 with PagesService
2125 with RepositoryService
2226 with ReferrerAuthenticator
2327
2428trait PagesControllerBase extends ControllerBase {
25- self : AccountService with RepositoryService with PagesService with ReferrerAuthenticator =>
29+ self : AccountService with RepositoryService with PagesService with ReferrerAuthenticator with OwnerAuthenticator =>
30+
31+ case class OptionsForm (source : PageSourceType )
32+
33+ val optionsForm = mapping(
34+ " source" -> trim(label(" Pages Source" , text(required, pagesOption)))
35+ )(
36+ (source) => OptionsForm (PageSourceType .valueOf(source))
37+ )
2638
2739 val PAGES_BRANCHES = List (" gb-pages" , " gh-pages" )
2840
@@ -85,6 +97,20 @@ trait PagesControllerBase extends ControllerBase {
8597 redirect(s " / ${repository.owner}/ ${repository.name}/pages/ " )
8698 })
8799
100+ get(" /:owner/:repository/settings/pages" )(ownerOnly { repository =>
101+ val source = getPageOptions(repository.owner, repository.name) match {
102+ case Some (p) => p.source
103+ case None => PageSourceType .GH_PAGES
104+ }
105+ html.options(repository, source, flash.get(" info" ))
106+ })
107+
108+ post(" /:owner/:repository/settings/pages" , optionsForm)(ownerOnly { (form, repository) =>
109+ updatePageOptions(repository.owner, repository.name, form.source)
110+ flash += " info" -> " Pages source saved"
111+ redirect(s " / ${repository.owner}/ ${repository.name}/settings/pages " )
112+ })
113+
88114 @ tailrec
89115 final def resolveBranch (git : Git , names : List [String ]): Option [ObjectId ] = {
90116 names match {
@@ -117,5 +143,12 @@ trait PagesControllerBase extends ControllerBase {
117143
118144 def isRoot (path : String ) = path == " "
119145
146+ private def pagesOption : Constraint = new Constraint () {
147+ override def validate (name : String , value : String , messages : Messages ): Option [String ] =
148+ PageSourceType .valueOpt(value) match {
149+ case Some (_) => None
150+ case None => Some (" Pages source is invalid." )
151+ }
152+ }
120153}
121154
0 commit comments