diff --git a/src/hmndata/snippet_helper.go b/src/hmndata/snippet_helper.go
index 0fa1acb..33e6bda 100644
--- a/src/hmndata/snippet_helper.go
+++ b/src/hmndata/snippet_helper.go
@@ -62,6 +62,11 @@ func FetchSnippets(
}
iSnippetIDs := itSnippetIDs.ToSlice()
+ // special early-out: no snippets found for these tags at all
+ if len(iSnippetIDs) == 0 {
+ return nil, nil
+ }
+
q.IDs = make([]int, len(iSnippetIDs))
for i := range iSnippetIDs {
q.IDs[i] = iSnippetIDs[i].(*snippetIDRow).SnippetID
diff --git a/src/templates/src/project_homepage.html b/src/templates/src/project_homepage.html
index 58745e8..54a9d86 100644
--- a/src/templates/src/project_homepage.html
+++ b/src/templates/src/project_homepage.html
@@ -18,7 +18,7 @@
{{ else }}
-
{{ .Project.Name }}
+
{{ .Project.Name }}
{{ end }}
diff --git a/src/website/podcast.go b/src/website/podcast.go
index 50e2cbf..e7152c3 100644
--- a/src/website/podcast.go
+++ b/src/website/podcast.go
@@ -39,10 +39,7 @@ func PodcastIndex(c *RequestContext) ResponseData {
return FourOhFour(c)
}
- canEdit, err := CanEditProject(c, c.CurrentUser, podcastResult.Podcast.ProjectID)
- if err != nil {
- return c.ErrorResponse(http.StatusInternalServerError, err)
- }
+ canEdit := c.CurrentUserCanEditCurrentProject
baseData := getBaseDataAutocrumb(c, podcastResult.Podcast.Title)
@@ -78,10 +75,7 @@ func PodcastEdit(c *RequestContext) ResponseData {
return c.ErrorResponse(http.StatusInternalServerError, err)
}
- canEdit, err := CanEditProject(c, c.CurrentUser, podcastResult.Podcast.ProjectID)
- if err != nil {
- return c.ErrorResponse(http.StatusInternalServerError, err)
- }
+ canEdit := c.CurrentUserCanEditCurrentProject
if podcastResult.Podcast == nil || !canEdit {
return FourOhFour(c)
@@ -112,10 +106,7 @@ func PodcastEditSubmit(c *RequestContext) ResponseData {
return c.ErrorResponse(http.StatusInternalServerError, err)
}
- canEdit, err := CanEditProject(c, c.CurrentUser, podcastResult.Podcast.ProjectID)
- if err != nil {
- return c.ErrorResponse(http.StatusInternalServerError, err)
- }
+ canEdit := c.CurrentUserCanEditCurrentProject
if podcastResult.Podcast == nil || !canEdit {
return FourOhFour(c)
@@ -218,11 +209,7 @@ func PodcastEpisode(c *RequestContext) ResponseData {
return FourOhFour(c)
}
- canEdit, err := CanEditProject(c, c.CurrentUser, podcastResult.Podcast.ProjectID)
- if err != nil {
- c.Logger.Error().Err(err).Msg("Failed to check if user can edit podcast. Assuming they can't.") // NOTE(asaf): No need to return an error response here if it failed.
- canEdit = false
- }
+ canEdit := c.CurrentUserCanEditCurrentProject
editUrl := ""
if canEdit {
@@ -268,10 +255,7 @@ func PodcastEpisodeNew(c *RequestContext) ResponseData {
return c.ErrorResponse(http.StatusInternalServerError, err)
}
- canEdit, err := CanEditProject(c, c.CurrentUser, podcastResult.Podcast.ProjectID)
- if err != nil {
- return c.ErrorResponse(http.StatusInternalServerError, err)
- }
+ canEdit := c.CurrentUserCanEditCurrentProject
if podcastResult.Podcast == nil || !canEdit {
return FourOhFour(c)
@@ -311,10 +295,7 @@ func PodcastEpisodeEdit(c *RequestContext) ResponseData {
return c.ErrorResponse(http.StatusInternalServerError, err)
}
- canEdit, err := CanEditProject(c, c.CurrentUser, podcastResult.Podcast.ProjectID)
- if err != nil {
- return c.ErrorResponse(http.StatusInternalServerError, err)
- }
+ canEdit := c.CurrentUserCanEditCurrentProject
if podcastResult.Podcast == nil || len(podcastResult.Episodes) == 0 || !canEdit {
return FourOhFour(c)
@@ -360,10 +341,7 @@ func PodcastEpisodeSubmit(c *RequestContext) ResponseData {
return c.ErrorResponse(http.StatusInternalServerError, err)
}
- canEdit, err := CanEditProject(c, c.CurrentUser, podcastResult.Podcast.ProjectID)
- if err != nil {
- return c.ErrorResponse(http.StatusInternalServerError, err)
- }
+ canEdit := c.CurrentUserCanEditCurrentProject
if podcastResult.Podcast == nil || (isEdit && len(podcastResult.Episodes) == 0) || !canEdit {
return FourOhFour(c)
diff --git a/src/website/projects.go b/src/website/projects.go
index f8395e6..e8397eb 100644
--- a/src/website/projects.go
+++ b/src/website/projects.go
@@ -692,7 +692,7 @@ func updateProject(ctx context.Context, tx pgx.Tx, user *models.User, payload *P
blurb = $?,
description = $?,
descparsed = $?,
- lifecycle = $?,
+ lifecycle = $?
`,
payload.Name,
payload.Blurb,
@@ -701,7 +701,7 @@ func updateProject(ctx context.Context, tx pgx.Tx, user *models.User, payload *P
payload.Lifecycle,
)
if user.IsStaff {
- qb.Add(`hidden = $?`, payload.Hidden)
+ qb.Add(`, hidden = $?`, payload.Hidden)
}
qb.Add(`WHERE id = $?`, payload.ProjectID)
@@ -857,21 +857,17 @@ func GetFormImage(c *RequestContext, fieldName string) (FormImage, error) {
return res, nil
}
-func CanEditProject(c *RequestContext, user *models.User, projectId int) (bool, error) {
+func CanEditProject(user *models.User, owners []*models.User) bool {
if user != nil {
if user.IsStaff {
- return true, nil
+ return true
} else {
- owners, err := hmndata.FetchProjectOwners(c.Context(), c.Conn, projectId)
- if err != nil {
- return false, err
- }
for _, owner := range owners {
if owner.ID == user.ID {
- return true, nil
+ return true
}
}
}
}
- return false, nil
+ return false
}
diff --git a/src/website/routes.go b/src/website/routes.go
index 16da39b..fd5ba7f 100644
--- a/src/website/routes.go
+++ b/src/website/routes.go
@@ -311,6 +311,7 @@ func NewWebsiteRoutes(longRequestContext context.Context, conn *pgxpool.Pool) ht
c.CurrentProject = &p.Project
c.UrlContext = hmndata.UrlContextForProject(c.CurrentProject)
+ c.CurrentUserCanEditCurrentProject = CanEditProject(c.CurrentUser, p.Owners)
if !p.Project.Personal {
return c.Redirect(c.UrlContext.RewriteProjectUrl(c.URL()), http.StatusSeeOther)
@@ -485,7 +486,6 @@ func LoadCommonWebsiteData(c *RequestContext) (bool, ResponseData) {
panic(oops.New(err, "failed to fetch HMN project"))
}
c.CurrentProject = &dbProject.Project
- owners = dbProject.Owners
}
if c.CurrentProject == nil {
@@ -494,11 +494,12 @@ func LoadCommonWebsiteData(c *RequestContext) (bool, ResponseData) {
canEditProject := false
if c.CurrentUser != nil {
- canEditProject = c.CurrentUser.IsStaff
- if !canEditProject {
+ if c.CurrentUser.IsStaff {
+ canEditProject = true
+ } else {
for _, o := range owners {
if o.ID == c.CurrentUser.ID {
- c.CurrentUserCanEditCurrentProject = true
+ canEditProject = true
break
}
}