(refs #1286) Add columns: ISSUES_OPTION and WIKI_OPTION

This commit is contained in:
Naoki Takezoe
2016-11-02 02:15:21 +09:00
parent 83baaa6ed9
commit 06d559b47e
7 changed files with 58 additions and 35 deletions

View File

@@ -4,6 +4,30 @@
<column name="PERMISSION" type="varchar(10)" nullable="false" defaultValue="ADMIN"/> <column name="PERMISSION" type="varchar(10)" nullable="false" defaultValue="ADMIN"/>
</addColumn> </addColumn>
<addColumn tableName="REPOSITORY"> <addColumn tableName="REPOSITORY">
<column name="ALLOW_CREATE_ISSUE" type="boolean" nullable="false" defaultValueBoolean="false"/> <column name="WIKI_OPTION" type="varchar(10)" nullable="false" defaultValue="DISABLE"/>
<column name="ISSUES_OPTION" type="varchar(10)" nullable="false" defaultValue="DISABLE"/>
</addColumn> </addColumn>
<update tableName="REPOSITORY">
<column name="WIKI_OPTION" value="DISABLE"/>
<where>ENABLE_WIKI = FALSE</where>
</update>
<update tableName="REPOSITORY">
<column name="WIKI_OPTION" value="PRIVATE"/>
<where>ENABLE_WIKI = TRUE AND ALLOW_WIKI_EDITING = FALSE</where>
</update>
<update tableName="REPOSITORY">
<column name="WIKI_OPTION" value="PUBLIC"/>
<where>ENABLE_WIKI = TRUE AND ALLOW_WIKI_EDITING = TRUE</where>
</update>
<update tableName="REPOSITORY">
<column name="ISSUES_OPTION" value="DISABLE"/>
<where>ENABLE_ISSUES = FALSE</where>
</update>
<update tableName="REPOSITORY">
<column name="ISSUES_OPTION" value="PUBLIC"/>
<where>ENABLE_ISSUES = TRUE</where>
</update>
<dropColumn tableName="REPOSITORY" columnName="ENABLE_WIKI"/>
<dropColumn tableName="REPOSITORY" columnName="ALLOW_WIKI_EDITING"/>
<dropColumn tableName="REPOSITORY" columnName="ENABLE_ISSUES"/>
</changeSet> </changeSet>

View File

@@ -31,10 +31,9 @@ trait RepositorySettingsControllerBase extends ControllerBase {
repositoryName: String, repositoryName: String,
description: Option[String], description: Option[String],
isPrivate: Boolean, isPrivate: Boolean,
enableIssues: Boolean, issuesOption: String,
externalIssuesUrl: Option[String], externalIssuesUrl: Option[String],
enableWiki: Boolean, wikiOption: String,
allowWikiEditing: Boolean,
externalWikiUrl: Option[String], externalWikiUrl: Option[String],
allowFork: Boolean allowFork: Boolean
) )
@@ -43,10 +42,9 @@ trait RepositorySettingsControllerBase extends ControllerBase {
"repositoryName" -> trim(label("Repository Name" , text(required, maxlength(40), identifier, renameRepositoryName))), "repositoryName" -> trim(label("Repository Name" , text(required, maxlength(40), identifier, renameRepositoryName))),
"description" -> trim(label("Description" , optional(text()))), "description" -> trim(label("Description" , optional(text()))),
"isPrivate" -> trim(label("Repository Type" , boolean())), "isPrivate" -> trim(label("Repository Type" , boolean())),
"enableIssues" -> trim(label("Enable Issues" , boolean())), "issuesOption" -> trim(label("Issues Option" , text(required))), // TODO enum check
"externalIssuesUrl" -> trim(label("External Issues URL", optional(text(maxlength(200))))), "externalIssuesUrl" -> trim(label("External Issues URL", optional(text(maxlength(200))))),
"enableWiki" -> trim(label("Enable Wiki" , boolean())), "wikiOption" -> trim(label("Wiki Option" , text(required))), // TODO enum check
"allowWikiEditing" -> trim(label("Allow Wiki Editing" , boolean())),
"externalWikiUrl" -> trim(label("External Wiki URL" , optional(text(maxlength(200))))), "externalWikiUrl" -> trim(label("External Wiki URL" , optional(text(maxlength(200))))),
"allowFork" -> trim(label("Allow Forking" , boolean())) "allowFork" -> trim(label("Allow Forking" , boolean()))
)(OptionsForm.apply) )(OptionsForm.apply)
@@ -109,10 +107,9 @@ trait RepositorySettingsControllerBase extends ControllerBase {
repository.repository.parentUserName.map { _ => repository.repository.parentUserName.map { _ =>
repository.repository.isPrivate repository.repository.isPrivate
} getOrElse form.isPrivate, } getOrElse form.isPrivate,
form.enableIssues, form.issuesOption,
form.externalIssuesUrl, form.externalIssuesUrl,
form.enableWiki, form.wikiOption,
form.allowWikiEditing,
form.externalWikiUrl, form.externalWikiUrl,
form.allowFork form.allowFork
) )

View File

@@ -240,9 +240,13 @@ trait WikiControllerBase extends ControllerBase {
private def targetWikiPage = getWikiPage(params("owner"), params("repository"), params("pageName")) private def targetWikiPage = getWikiPage(params("owner"), params("repository"), params("pageName"))
private def isEditable(repository: RepositoryInfo)(implicit context: Context): Boolean = private def isEditable(repository: RepositoryInfo)(implicit context: Context): Boolean = {
repository.repository.options.allowWikiEditing || ( repository.repository.options.wikiOption match {
hasWritePermission(repository.owner, repository.name, context.loginAccount) case "ALL" => true // TODO read permission
) case "PUBLIC" => true // TODO read permission
case "PRIVATE" => hasWritePermission(repository.owner, repository.name, context.loginAccount)
case "DISABLE" => false
}
}
} }

View File

@@ -17,18 +17,16 @@ trait RepositoryComponent extends TemplateComponent { self: Profile =>
val originRepositoryName = column[String]("ORIGIN_REPOSITORY_NAME") val originRepositoryName = column[String]("ORIGIN_REPOSITORY_NAME")
val parentUserName = column[String]("PARENT_USER_NAME") val parentUserName = column[String]("PARENT_USER_NAME")
val parentRepositoryName = column[String]("PARENT_REPOSITORY_NAME") val parentRepositoryName = column[String]("PARENT_REPOSITORY_NAME")
val enableIssues = column[Boolean]("ENABLE_ISSUES") val issuesOption = column[String]("ISSUES_OPTION")
val externalIssuesUrl = column[String]("EXTERNAL_ISSUES_URL") val externalIssuesUrl = column[String]("EXTERNAL_ISSUES_URL")
val enableWiki = column[Boolean]("ENABLE_WIKI") val wikiOption = column[String]("WIKI_OPTION")
val allowWikiEditing = column[Boolean]("ALLOW_WIKI_EDITING")
val externalWikiUrl = column[String]("EXTERNAL_WIKI_URL") val externalWikiUrl = column[String]("EXTERNAL_WIKI_URL")
val allowFork = column[Boolean]("ALLOW_FORK") val allowFork = column[Boolean]("ALLOW_FORK")
val allowCreateIssue = column[Boolean]("ALLOW_CREATE_ISSUE")
def * = ( def * = (
(userName, repositoryName, isPrivate, description.?, defaultBranch, (userName, repositoryName, isPrivate, description.?, defaultBranch,
registeredDate, updatedDate, lastActivityDate, originUserName.?, originRepositoryName.?, parentUserName.?, parentRepositoryName.?), registeredDate, updatedDate, lastActivityDate, originUserName.?, originRepositoryName.?, parentUserName.?, parentRepositoryName.?),
(enableIssues, externalIssuesUrl.?, enableWiki, allowWikiEditing, externalWikiUrl.?, allowFork, allowCreateIssue) (issuesOption, externalIssuesUrl.?, wikiOption, externalWikiUrl.?, allowFork)
).shaped <> ( ).shaped <> (
{ case (repository, options) => { case (repository, options) =>
Repository( Repository(
@@ -86,11 +84,9 @@ case class Repository(
) )
case class RepositoryOptions( case class RepositoryOptions(
enableIssues: Boolean, issuesOption: String,
externalIssuesUrl: Option[String], externalIssuesUrl: Option[String],
enableWiki: Boolean, wikiOption: String,
allowWikiEditing: Boolean,
externalWikiUrl: Option[String], externalWikiUrl: Option[String],
allowFork: Boolean, allowFork: Boolean
allowCreateIssue: Boolean
) )

View File

@@ -38,13 +38,11 @@ trait RepositoryService { self: AccountService =>
parentUserName = parentUserName, parentUserName = parentUserName,
parentRepositoryName = parentRepositoryName, parentRepositoryName = parentRepositoryName,
options = RepositoryOptions( options = RepositoryOptions(
enableIssues = true, issuesOption = "PRIVATE",
externalIssuesUrl = None, externalIssuesUrl = None,
enableWiki = true, wikiOption = "PUBLIC",
allowWikiEditing = true,
externalWikiUrl = None, externalWikiUrl = None,
allowFork = true, allowFork = true
allowCreateIssue = false
) )
) )
@@ -321,12 +319,12 @@ trait RepositoryService { self: AccountService =>
*/ */
def saveRepositoryOptions(userName: String, repositoryName: String, def saveRepositoryOptions(userName: String, repositoryName: String,
description: Option[String], isPrivate: Boolean, description: Option[String], isPrivate: Boolean,
enableIssues: Boolean, externalIssuesUrl: Option[String], issuesOption: String, externalIssuesUrl: Option[String],
enableWiki: Boolean, allowWikiEditing: Boolean, externalWikiUrl: Option[String], wikiOption: String, externalWikiUrl: Option[String],
allowFork: Boolean)(implicit s: Session): Unit = allowFork: Boolean)(implicit s: Session): Unit =
Repositories.filter(_.byRepository(userName, repositoryName)) Repositories.filter(_.byRepository(userName, repositoryName))
.map { r => (r.description.?, r.isPrivate, r.enableIssues, r.externalIssuesUrl.?, r.enableWiki, r.allowWikiEditing, r.externalWikiUrl.?, r.allowFork, r.updatedDate) } .map { r => (r.description.?, r.isPrivate, r.issuesOption, r.externalIssuesUrl.?, r.wikiOption, r.externalWikiUrl.?, r.allowFork, r.updatedDate) }
.update (description, isPrivate, enableIssues, externalIssuesUrl, enableWiki, allowWikiEditing, externalWikiUrl, allowFork, currentDate) .update (description, isPrivate, issuesOption, externalIssuesUrl, wikiOption, externalWikiUrl, allowFork, currentDate)
def saveRepositoryDefaultBranch(userName: String, repositoryName: String, def saveRepositoryDefaultBranch(userName: String, repositoryName: String,
defaultBranch: String)(implicit s: Session): Unit = defaultBranch: String)(implicit s: Session): Unit =

View File

@@ -27,7 +27,7 @@
@menuitem("/branches", "branches", "Branches", "git-branch", repository.branchList.length) @menuitem("/branches", "branches", "Branches", "git-branch", repository.branchList.length)
@menuitem("/tags", "tags", "Tags", "tag", repository.tags.length) @menuitem("/tags", "tags", "Tags", "tag", repository.tags.length)
} }
@if(repository.repository.options.enableIssues) { @if(repository.repository.options.issuesOption != "DISABLE") {
@menuitem("/issues", "issues", "Issues", "issue-opened", repository.issueCount) @menuitem("/issues", "issues", "Issues", "issue-opened", repository.issueCount)
@menuitem("/pulls", "pulls", "Pull Requests", "git-pull-request", repository.pullCount) @menuitem("/pulls", "pulls", "Pull Requests", "git-pull-request", repository.pullCount)
@menuitem("/issues/labels", "labels", "Labels", "tag") @menuitem("/issues/labels", "labels", "Labels", "tag")
@@ -37,7 +37,7 @@
@menuitem(externalIssuesUrl, "issues", "Issues", "issue-opened") @menuitem(externalIssuesUrl, "issues", "Issues", "issue-opened")
} }
} }
@if(repository.repository.options.enableWiki) { @if(repository.repository.options.wikiOption != "DISABLE") {
@menuitem("/wiki", "wiki", "Wiki", "book") @menuitem("/wiki", "wiki", "Wiki", "book")
} else { } else {
@repository.repository.options.externalWikiUrl.map { externalWikiUrl => @repository.repository.options.externalWikiUrl.map { externalWikiUrl =>

View File

@@ -45,6 +45,7 @@
<div class="panel-heading strong">Features</div> <div class="panel-heading strong">Features</div>
<div class="panel-body"> <div class="panel-body">
<fieldset class="form-group"> <fieldset class="form-group">
@* TODO Make radio to choose issues option
<label class="checkbox" for="enableIssues"> <label class="checkbox" for="enableIssues">
<input type="checkbox" id="enableIssues" name="enableIssues"@if(repository.repository.options.enableIssues){ checked}/> <input type="checkbox" id="enableIssues" name="enableIssues"@if(repository.repository.options.enableIssues){ checked}/>
Issues<br> Issues<br>
@@ -52,12 +53,14 @@
Provides Lightweight issue tracking integrated with this repository. Add issues to milestones, label issues, and close & reference issues from commit messages. Provides Lightweight issue tracking integrated with this repository. Add issues to milestones, label issues, and close & reference issues from commit messages.
</div> </div>
</label> </label>
*@
<label for="externalIssuesUrl" class="strong">External URL: <label for="externalIssuesUrl" class="strong">External URL:
<span class="normal muted">(Put if you have the external issue tracking system for this project)</span> <span class="normal muted">(Put if you have the external issue tracking system for this project)</span>
</label> </label>
<input type="text" class="form-control" id="externalIssuesUrl" name="externalIssuesUrl" value="@repository.repository.options.externalIssuesUrl"/> <input type="text" class="form-control" id="externalIssuesUrl" name="externalIssuesUrl" value="@repository.repository.options.externalIssuesUrl"/>
</fieldset> </fieldset>
<fieldset class="form-group"> <fieldset class="form-group">
@* TODO Make radio to choose wiki option
<label class="checkbox" for="enableWiki"> <label class="checkbox" for="enableWiki">
<input type="checkbox" id="enableWiki" name="enableWiki"@if(repository.repository.options.enableWiki){ checked}/> <input type="checkbox" id="enableWiki" name="enableWiki"@if(repository.repository.options.enableWiki){ checked}/>
Wiki<br> Wiki<br>
@@ -69,6 +72,7 @@
<input type="checkbox" id="allowWikiEditing" name="allowWikiEditing"@if(repository.repository.options.allowWikiEditing){ checked}/> <input type="checkbox" id="allowWikiEditing" name="allowWikiEditing"@if(repository.repository.options.allowWikiEditing){ checked}/>
Allow read-only users to edit Wiki pages<br> Allow read-only users to edit Wiki pages<br>
</label> </label>
*@
<label for="externalWikiUrl" class="strong">External URL: <label for="externalWikiUrl" class="strong">External URL:
<span class="normal muted">(Put if you have the external Wiki for this project)</span> <span class="normal muted">(Put if you have the external Wiki for this project)</span>
</label> </label>