aboutsummaryrefslogtreecommitdiffstats
path: root/routers/web/org/projects.go
diff options
context:
space:
mode:
Diffstat (limited to 'routers/web/org/projects.go')
-rw-r--r--routers/web/org/projects.go95
1 files changed, 51 insertions, 44 deletions
diff --git a/routers/web/org/projects.go b/routers/web/org/projects.go
index 32da1b41d1..059cce8281 100644
--- a/routers/web/org/projects.go
+++ b/routers/web/org/projects.go
@@ -36,24 +36,24 @@ const (
// MustEnableProjects check if projects are enabled in settings
func MustEnableProjects(ctx *context.Context) {
if unit.TypeProjects.UnitGlobalDisabled() {
- ctx.NotFound("EnableProjects", nil)
+ ctx.NotFound(nil)
return
}
}
// Projects renders the home page of projects
func Projects(ctx *context.Context) {
- shared_user.PrepareContextForProfileBigAvatar(ctx)
+ if _, err := shared_user.RenderUserOrgHeader(ctx); err != nil {
+ ctx.ServerError("RenderUserOrgHeader", err)
+ return
+ }
ctx.Data["Title"] = ctx.Tr("repo.projects")
sortType := ctx.FormTrim("sort")
isShowClosed := strings.ToLower(ctx.FormTrim("state")) == "closed"
keyword := ctx.FormTrim("q")
- page := ctx.FormInt("page")
- if page <= 1 {
- page = 1
- }
+ page := max(ctx.FormInt("page"), 1)
var projectType project_model.Type
if ctx.ContextUser.IsOrganization() {
@@ -77,6 +77,11 @@ func Projects(ctx *context.Context) {
return
}
+ if err := project_service.LoadIssueNumbersForProjects(ctx, projects, ctx.Doer); err != nil {
+ ctx.ServerError("LoadIssueNumbersForProjects", err)
+ return
+ }
+
opTotal, err := db.Count[project_model.Project](ctx, project_model.SearchOptions{
OwnerID: ctx.ContextUser.ID,
IsClosed: optional.Some(!isShowClosed),
@@ -96,7 +101,6 @@ func Projects(ctx *context.Context) {
}
ctx.Data["Projects"] = projects
- shared_user.RenderUserHeader(ctx)
if isShowClosed {
ctx.Data["State"] = "closed"
@@ -108,12 +112,6 @@ func Projects(ctx *context.Context) {
project.RenderedContent = renderUtils.MarkdownToHtml(project.Description)
}
- err = shared_user.LoadHeaderCount(ctx)
- if err != nil {
- ctx.ServerError("LoadHeaderCount", err)
- return
- }
-
numPages := 0
if total > 0 {
numPages = (int(total) - 1/setting.UI.IssuePagingNum)
@@ -147,11 +145,8 @@ func RenderNewProject(ctx *context.Context) {
ctx.Data["PageIsViewProjects"] = true
ctx.Data["HomeLink"] = ctx.ContextUser.HomeLink()
ctx.Data["CancelLink"] = ctx.ContextUser.HomeLink() + "/-/projects"
- shared_user.RenderUserHeader(ctx)
-
- err := shared_user.LoadHeaderCount(ctx)
- if err != nil {
- ctx.ServerError("LoadHeaderCount", err)
+ if _, err := shared_user.RenderUserOrgHeader(ctx); err != nil {
+ ctx.ServerError("RenderUserOrgHeader", err)
return
}
@@ -162,7 +157,10 @@ func RenderNewProject(ctx *context.Context) {
func NewProjectPost(ctx *context.Context) {
form := web.GetForm(ctx).(*forms.CreateProjectForm)
ctx.Data["Title"] = ctx.Tr("repo.projects.new")
- shared_user.RenderUserHeader(ctx)
+ if _, err := shared_user.RenderUserOrgHeader(ctx); err != nil {
+ ctx.ServerError("RenderUserOrgHeader", err)
+ return
+ }
if ctx.HasError() {
RenderNewProject(ctx)
@@ -222,7 +220,7 @@ func DeleteProject(ctx *context.Context) {
return
}
if p.OwnerID != ctx.ContextUser.ID {
- ctx.NotFound("", nil)
+ ctx.NotFound(nil)
return
}
@@ -243,7 +241,10 @@ func RenderEditProject(ctx *context.Context) {
ctx.Data["CanWriteProjects"] = canWriteProjects(ctx)
ctx.Data["CardTypes"] = project_model.GetCardConfig()
- shared_user.RenderUserHeader(ctx)
+ if _, err := shared_user.RenderUserOrgHeader(ctx); err != nil {
+ ctx.ServerError("RenderUserOrgHeader", err)
+ return
+ }
p, err := project_model.GetProjectByID(ctx, ctx.PathParamInt64("id"))
if err != nil {
@@ -251,7 +252,7 @@ func RenderEditProject(ctx *context.Context) {
return
}
if p.OwnerID != ctx.ContextUser.ID {
- ctx.NotFound("", nil)
+ ctx.NotFound(nil)
return
}
@@ -277,11 +278,8 @@ func EditProjectPost(ctx *context.Context) {
ctx.Data["CardTypes"] = project_model.GetCardConfig()
ctx.Data["CancelLink"] = project_model.ProjectLinkForOrg(ctx.ContextUser, projectID)
- shared_user.RenderUserHeader(ctx)
-
- err := shared_user.LoadHeaderCount(ctx)
- if err != nil {
- ctx.ServerError("LoadHeaderCount", err)
+ if _, err := shared_user.RenderUserOrgHeader(ctx); err != nil {
+ ctx.ServerError("RenderUserOrgHeader", err)
return
}
@@ -296,7 +294,7 @@ func EditProjectPost(ctx *context.Context) {
return
}
if p.OwnerID != ctx.ContextUser.ID {
- ctx.NotFound("", nil)
+ ctx.NotFound(nil)
return
}
@@ -324,7 +322,11 @@ func ViewProject(ctx *context.Context) {
return
}
if project.OwnerID != ctx.ContextUser.ID {
- ctx.NotFound("", nil)
+ ctx.NotFound(nil)
+ return
+ }
+ if err := project.LoadOwner(ctx); err != nil {
+ ctx.ServerError("LoadOwner", err)
return
}
@@ -334,20 +336,27 @@ func ViewProject(ctx *context.Context) {
return
}
- labelIDs := issue.PrepareFilterIssueLabels(ctx, project.RepoID, project.Owner)
+ preparedLabelFilter := issue.PrepareFilterIssueLabels(ctx, project.RepoID, project.Owner)
if ctx.Written() {
return
}
- assigneeID := ctx.FormInt64("assignee") // TODO: use "optional" but not 0 in the future
+ assigneeID := ctx.FormString("assignee")
- issuesMap, err := issues_model.LoadIssuesFromColumnList(ctx, columns, &issues_model.IssuesOptions{
- LabelIDs: labelIDs,
- AssigneeID: optional.Some(assigneeID),
- })
+ opts := issues_model.IssuesOptions{
+ LabelIDs: preparedLabelFilter.SelectedLabelIDs,
+ AssigneeID: assigneeID,
+ Owner: project.Owner,
+ Doer: ctx.Doer,
+ }
+
+ issuesMap, err := project_service.LoadIssuesFromProject(ctx, project, &opts)
if err != nil {
ctx.ServerError("LoadIssuesOfColumns", err)
return
}
+ for _, column := range columns {
+ column.NumIssues = int64(len(issuesMap[column.ID]))
+ }
if project.CardType != project_model.CardTypeTextOnly {
issuesAttachmentMap := make(map[int64][]*attachment_model.Attachment)
@@ -390,8 +399,8 @@ func ViewProject(ctx *context.Context) {
}
// Get the exclusive scope for every label ID
- labelExclusiveScopes := make([]string, 0, len(labelIDs))
- for _, labelID := range labelIDs {
+ labelExclusiveScopes := make([]string, 0, len(preparedLabelFilter.SelectedLabelIDs))
+ for _, labelID := range preparedLabelFilter.SelectedLabelIDs {
foundExclusiveScope := false
for _, label := range labels {
if label.ID == labelID || label.ID == -labelID {
@@ -406,7 +415,7 @@ func ViewProject(ctx *context.Context) {
}
for _, l := range labels {
- l.LoadSelectedLabelsAfterClick(labelIDs, labelExclusiveScopes)
+ l.LoadSelectedLabelsAfterClick(preparedLabelFilter.SelectedLabelIDs, labelExclusiveScopes)
}
ctx.Data["Labels"] = labels
ctx.Data["NumLabels"] = len(labels)
@@ -427,11 +436,9 @@ func ViewProject(ctx *context.Context) {
ctx.Data["Project"] = project
ctx.Data["IssuesMap"] = issuesMap
ctx.Data["Columns"] = columns
- shared_user.RenderUserHeader(ctx)
- err = shared_user.LoadHeaderCount(ctx)
- if err != nil {
- ctx.ServerError("LoadHeaderCount", err)
+ if _, err := shared_user.RenderUserOrgHeader(ctx); err != nil {
+ ctx.ServerError("RenderUserOrgHeader", err)
return
}
@@ -593,7 +600,7 @@ func MoveIssues(ctx *context.Context) {
return
}
if project.OwnerID != ctx.ContextUser.ID {
- ctx.NotFound("InvalidRepoID", nil)
+ ctx.NotFound(nil)
return
}
@@ -604,7 +611,7 @@ func MoveIssues(ctx *context.Context) {
}
if column.ProjectID != project.ID {
- ctx.NotFound("ColumnNotInProject", nil)
+ ctx.NotFound(nil)
return
}