diff --git a/src/main/scala/gitbucket/core/controller/IssuesController.scala b/src/main/scala/gitbucket/core/controller/IssuesController.scala index 2474ddd39..9bebbfc2e 100644 --- a/src/main/scala/gitbucket/core/controller/IssuesController.scala +++ b/src/main/scala/gitbucket/core/controller/IssuesController.scala @@ -114,6 +114,7 @@ trait IssuesControllerBase extends ControllerBase { getAssignableUserNames(owner, name), getMilestones(owner, name), getPriorities(owner, name), + getDefaultPriority(owner, name), getLabels(owner, name), isIssueManageable(repository), getContentTemplate(repository, "ISSUE_TEMPLATE"), diff --git a/src/main/scala/gitbucket/core/controller/PrioritiesController.scala b/src/main/scala/gitbucket/core/controller/PrioritiesController.scala index efda0d493..a1e200adb 100644 --- a/src/main/scala/gitbucket/core/controller/PrioritiesController.scala +++ b/src/main/scala/gitbucket/core/controller/PrioritiesController.scala @@ -71,6 +71,11 @@ trait PrioritiesControllerBase extends ControllerBase { Ok() }) + ajaxPost("/:owner/:repository/issues/priorities/default")(writableUsersOnly { (repository) => + setDefaultPriority(repository.owner, repository.name, params("priorityId").toInt) + Ok() + }) + ajaxPost("/:owner/:repository/issues/priorities/:priorityId/delete")(writableUsersOnly { repository => deletePriority(repository.owner, repository.name, params("priorityId").toInt) Ok() diff --git a/src/main/scala/gitbucket/core/model/Priorities.scala b/src/main/scala/gitbucket/core/model/Priorities.scala index 8735f86b9..f625efd09 100644 --- a/src/main/scala/gitbucket/core/model/Priorities.scala +++ b/src/main/scala/gitbucket/core/model/Priorities.scala @@ -10,8 +10,9 @@ trait PriorityComponent extends TemplateComponent { self: Profile => override val priorityName = column[String]("PRIORITY_NAME") val description = column[String]("DESCRIPTION") val ordering = column[Int]("ORDERING") + val isDefault = column[Boolean]("IS_DEFAULT") val color = column[String]("COLOR") - def * = (userName, repositoryName, priorityId, priorityName, description, ordering, color) <> (Priority.tupled, Priority.unapply) + def * = (userName, repositoryName, priorityId, priorityName, description, isDefault, ordering, color) <> (Priority.tupled, Priority.unapply) def byPrimaryKey(owner: String, repository: String, priorityId: Int) = byPriority(owner, repository, priorityId) def byPrimaryKey(userName: Rep[String], repositoryName: Rep[String], priorityId: Rep[Int]) = byPriority(userName, repositoryName, priorityId) @@ -24,6 +25,7 @@ case class Priority ( priorityId: Int = 0, priorityName: String, description: String, + isDefault: Boolean, ordering: Int = 0, color: String){ diff --git a/src/main/scala/gitbucket/core/service/PrioritiesService.scala b/src/main/scala/gitbucket/core/service/PrioritiesService.scala index f0a7738d5..7ab752de1 100644 --- a/src/main/scala/gitbucket/core/service/PrioritiesService.scala +++ b/src/main/scala/gitbucket/core/service/PrioritiesService.scala @@ -23,11 +23,14 @@ trait PrioritiesService { .map(m => m + 1) .getOrElse(0) + val isDefault = getDefaultPriority(owner, repository).isEmpty + Priorities returning Priorities.map(_.priorityId) insert Priority( userName = owner, repositoryName = repository, priorityName = priorityName, description = description, + isDefault = isDefault, ordering = ordering, color = color ) @@ -58,4 +61,25 @@ trait PrioritiesService { Priorities.filter(_.byPrimaryKey(owner, repository, priorityId)).delete } + + def getDefaultPriority(owner: String, repository: String)(implicit s: Session): Option[Priority] = { + Priorities + .filter(_.byRepository(owner, repository)) + .filter(_.isDefault) + .list + .headOption + } + + def setDefaultPriority(owner: String, repository: String, priorityId: Int)(implicit s: Session): Unit = { + Priorities + .filter(_.byRepository(owner, repository)) + .filter(_.isDefault) + .map(_.isDefault) + .update(false) + + Priorities + .filter(_.byPrimaryKey(owner, repository, priorityId)) + .map(_.isDefault) + .update(true) + } } diff --git a/src/main/scala/gitbucket/core/service/RepositoryCreationService.scala b/src/main/scala/gitbucket/core/service/RepositoryCreationService.scala index 048babda8..1fc487f5a 100644 --- a/src/main/scala/gitbucket/core/service/RepositoryCreationService.scala +++ b/src/main/scala/gitbucket/core/service/RepositoryCreationService.scala @@ -83,5 +83,7 @@ trait RepositoryCreationService { createPriority(userName, repositoryName, "high", "Issues should be addressed before a final product is delivered. If the issue cannot be resolved before delivery, it should be prioritized for the next release.", "fc9629") createPriority(userName, repositoryName, "important", "Issues can be shipped with a final product, but should be reviewed before the next release.", "fccd29") createPriority(userName, repositoryName, "default", "Default.", "acacac") + + setDefaultPriority(userName, repositoryName, getPriority(userName, repositoryName, "default").get.priorityId) } } diff --git a/src/main/twirl/gitbucket/core/issues/create.scala.html b/src/main/twirl/gitbucket/core/issues/create.scala.html index f1a813414..1522d797d 100644 --- a/src/main/twirl/gitbucket/core/issues/create.scala.html +++ b/src/main/twirl/gitbucket/core/issues/create.scala.html @@ -1,6 +1,7 @@ @(collaborators: List[String], milestones: List[gitbucket.core.model.Milestone], priorities: List[gitbucket.core.model.Priority], + defaultPriority: Option[gitbucket.core.model.Priority], labels: List[gitbucket.core.model.Label], isManageable: Boolean, content: String, @@ -30,7 +31,7 @@
- @gitbucket.core.issues.html.issueinfo(None, Nil, Nil, collaborators, milestones.map(x => (x, 0, 0)), priorities, labels, isManageable, repository) + @gitbucket.core.issues.html.issueinfo(None, Nil, Nil, collaborators, milestones.map(x => (x, 0, 0)), priorities, defaultPriority, labels, isManageable, repository)
diff --git a/src/main/twirl/gitbucket/core/issues/issue.scala.html b/src/main/twirl/gitbucket/core/issues/issue.scala.html index 6ffce8049..e42d6b996 100644 --- a/src/main/twirl/gitbucket/core/issues/issue.scala.html +++ b/src/main/twirl/gitbucket/core/issues/issue.scala.html @@ -55,7 +55,7 @@ @gitbucket.core.issues.html.commentform(issue, true, isEditable, isManageable, repository)
- @gitbucket.core.issues.html.issueinfo(Some(issue), comments, issueLabels, collaborators, milestones, priorities, labels, isManageable, repository) + @gitbucket.core.issues.html.issueinfo(Some(issue), comments, issueLabels, collaborators, milestones, priorities, None, labels, isManageable, repository)
} diff --git a/src/main/twirl/gitbucket/core/issues/issueinfo.scala.html b/src/main/twirl/gitbucket/core/issues/issueinfo.scala.html index 27ff12bf9..012ad0a8d 100644 --- a/src/main/twirl/gitbucket/core/issues/issueinfo.scala.html +++ b/src/main/twirl/gitbucket/core/issues/issueinfo.scala.html @@ -4,6 +4,7 @@ collaborators: List[String], milestones: List[(gitbucket.core.model.Milestone, Int, Int)], priorities: List[gitbucket.core.model.Priority], + defaultPriority: Option[gitbucket.core.model.Priority], labels: List[gitbucket.core.model.Label], isManageable: Boolean, repository: gitbucket.core.service.RepositoryService.RepositoryInfo)(implicit context: gitbucket.core.controller.Context) @@ -43,7 +44,7 @@ @priorities.map { priority =>
  • - @gitbucket.core.helper.html.checkicon(issue.flatMap(is => is.priorityId).map(id => id == priority.priorityId).getOrElse(false)) + @gitbucket.core.helper.html.checkicon(issue.flatMap(_.priorityId).orElse(defaultPriority.map(_.priorityId)).map(id => id == priority.priorityId).getOrElse(false))   @priority.priorityName @@ -54,7 +55,7 @@ } - @issue.flatMap(_.priorityId).map { priorityId => + @issue.flatMap(_.priorityId).orElse(defaultPriority.map(_.priorityId)).map { priorityId => @priorities.collect { case priority if(priority.priorityId == priorityId) => @priority.priorityName } @@ -63,7 +64,7 @@ } @if(issue.isEmpty){ - + }
    diff --git a/src/main/twirl/gitbucket/core/issues/priorities/list.scala.html b/src/main/twirl/gitbucket/core/issues/priorities/list.scala.html index 4ce723256..e53f24c98 100644 --- a/src/main/twirl/gitbucket/core/issues/priorities/list.scala.html +++ b/src/main/twirl/gitbucket/core/issues/priorities/list.scala.html @@ -101,4 +101,14 @@ function updatePriorityCount() { var $counter = $('#priority-row-header span'); $counter.text($counter.text().replace(/\d+/, $('tr.priority-row').size())); } + +function setDefaultPriority(priorityId){ + $.post('@helpers.url(repository)/issues/priorities/default', + { priorityId: priorityId }, + function(){ + $('.priority-default').removeClass('priority-default-selected'); + $('a[data-id="' + priorityId + '"] .priority-default').addClass('priority-default-selected'); + } + ); +} diff --git a/src/main/twirl/gitbucket/core/issues/priorities/priority.scala.html b/src/main/twirl/gitbucket/core/issues/priorities/priority.scala.html index 905f36999..2d65d64e1 100644 --- a/src/main/twirl/gitbucket/core/issues/priorities/priority.scala.html +++ b/src/main/twirl/gitbucket/core/issues/priorities/priority.scala.html @@ -18,10 +18,19 @@ -
    +
    @priority.description
    -
    +
    +
    + @if(hasWritePermission){ + + } else if(priority.isDefault) { + + } +
    +
    +
    @counts.get(priority.priorityName).getOrElse(0) open issues
    diff --git a/src/main/twirl/gitbucket/core/pulls/compare.scala.html b/src/main/twirl/gitbucket/core/pulls/compare.scala.html index 5a47eb2eb..ea09ab7be 100644 --- a/src/main/twirl/gitbucket/core/pulls/compare.scala.html +++ b/src/main/twirl/gitbucket/core/pulls/compare.scala.html @@ -82,7 +82,7 @@
    - @gitbucket.core.issues.html.issueinfo(None, Nil, Nil, collaborators, milestones.map((_, 0, 0)), priorities, labels, hasOriginWritePermission, repository) + @gitbucket.core.issues.html.issueinfo(None, Nil, Nil, collaborators, milestones.map((_, 0, 0)), priorities, None, labels, hasOriginWritePermission, repository)
    diff --git a/src/main/twirl/gitbucket/core/pulls/conversation.scala.html b/src/main/twirl/gitbucket/core/pulls/conversation.scala.html index 6836c0665..9ac89548b 100644 --- a/src/main/twirl/gitbucket/core/pulls/conversation.scala.html +++ b/src/main/twirl/gitbucket/core/pulls/conversation.scala.html @@ -46,7 +46,7 @@ }
    - @gitbucket.core.issues.html.issueinfo(Some(issue), comments, issueLabels, collaborators, milestones, priorities, labels, isManageable, repository) + @gitbucket.core.issues.html.issueinfo(Some(issue), comments, issueLabels, collaborators, milestones, priorities, None, labels, isManageable, repository)