diff --git a/src/main/scala/gitbucket/core/controller/IssuesController.scala b/src/main/scala/gitbucket/core/controller/IssuesController.scala index 2474ddd..9bebbfc 100644 --- a/src/main/scala/gitbucket/core/controller/IssuesController.scala +++ b/src/main/scala/gitbucket/core/controller/IssuesController.scala @@ -114,6 +114,7 @@ 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 efda0d4..a1e200a 100644 --- a/src/main/scala/gitbucket/core/controller/PrioritiesController.scala +++ b/src/main/scala/gitbucket/core/controller/PrioritiesController.scala @@ -71,6 +71,11 @@ 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 8735f86..f625efd 100644 --- a/src/main/scala/gitbucket/core/model/Priorities.scala +++ b/src/main/scala/gitbucket/core/model/Priorities.scala @@ -10,8 +10,9 @@ 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 @@ 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 f0a7738..7ab752d 100644 --- a/src/main/scala/gitbucket/core/service/PrioritiesService.scala +++ b/src/main/scala/gitbucket/core/service/PrioritiesService.scala @@ -23,11 +23,14 @@ .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 @@ 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 048babd..1fc487f 100644 --- a/src/main/scala/gitbucket/core/service/RepositoryCreationService.scala +++ b/src/main/scala/gitbucket/core/service/RepositoryCreationService.scala @@ -83,5 +83,7 @@ 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 f1a8134..1522d79 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 6ffce80..e42d6b9 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 27ff12b..012ad0a 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 4ce7232..e53f24c 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 @@ 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 905f369..2d65d64 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 5a47eb2..ea09ab7 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 6836c06..9ac8954 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)