From 71da667361e1aaa6c240d22f6ab1c0b9f4e826de Mon Sep 17 00:00:00 2001 From: Amy Gale Ruth Bowersox Date: Sun, 19 Oct 2025 21:48:37 -0600 Subject: [PATCH] made the category hierarchy on Find Communities "live" --- database/category.go | 30 ++++++++++- find.go | 56 ++++++++++++++++++-- ui/views/find.jet | 123 +++++++++++++------------------------------ 3 files changed, 118 insertions(+), 91 deletions(-) diff --git a/database/category.go b/database/category.go index d88768a..b43977b 100644 --- a/database/category.go +++ b/database/category.go @@ -11,6 +11,8 @@ package database import ( "errors" + "slices" + "strings" "sync" ) @@ -19,8 +21,8 @@ type Category struct { CatId int32 `db:"catid"` Parent int32 `db:"parent"` SymLink int32 `db:"symlink"` - HideDirectory int32 `db:"hide_dir"` - HideSearch int32 `db:"hide_search"` + HideDirectory bool `db:"hide_dir"` + HideSearch bool `db:"hide_search"` Name string `db:"name"` } @@ -113,3 +115,27 @@ func AmGetCategoryHierarchy(catid int32) ([]*Category, error) { } return rc, nil } + +/* AmGetSubCategories returns a list of all subcategories of the given category ID. + * Parameters: + * catid - The parent category ID to use. May be -1 to return all "top level" categories. + * Returns: + * List of subcategories of this category. + * Standard Go error status. + */ +func AmGetSubCategories(catid int32) ([]*Category, error) { + err := loadCategories() + if err != nil { + return nil, err + } + rc := make([]*Category, 0) + for i, cat := range allCategories { + if catid == cat.Parent { + rc = append(rc, &(allCategories[i])) + } + } + slices.SortFunc(rc, func(a, b *Category) int { + return strings.Compare(a.Name, b.Name) + }) + return rc, nil +} diff --git a/find.go b/find.go index 1735e26..b7ce0a9 100644 --- a/find.go +++ b/find.go @@ -9,7 +9,53 @@ // Package main contains the high-level Amsterdam logic. package main -import "git.erbosoft.com/amy/amsterdam/ui" +import ( + "strconv" + + "git.erbosoft.com/amy/amsterdam/database" + "git.erbosoft.com/amy/amsterdam/ui" +) + +// loadCategoryInformation loads the current category information to the context. +func loadCategoryInformation(ctxt ui.AmContext) error { + u := ctxt.CurrentUser() + catid := int32(-1) + p := ctxt.Parameter("catid") + if p != "" { + v, err := strconv.Atoi(p) + if err != nil { + return err + } + catid = int32(v) + } else if ctxt.IsSession("find.catid") { + x := ctxt.GetSession("find.catid") + if xx, ok := x.(int32); ok { + catid = xx + } + } + if catid > -1 { + cat, err := database.AmGetCategory(catid) // this step also resolves symlinks + if err != nil { + return err + } + catid = cat.CatId + } + ctxt.SetSession("find.catid", catid) + ctxt.VarMap().Set("catid", catid) + ctxt.VarMap().Set("showHiddenCat", database.AmTestPermission("Global.ShowHiddenCategories", u.BaseLevel)) + hier, err := database.AmGetCategoryHierarchy(catid) + if err != nil { + return err + } + ctxt.VarMap().Set("catHierarchy", hier) + subs, err := database.AmGetSubCategories(catid) + if err != nil { + return err + } + ctxt.VarMap().Set("catSubs", subs) + // TODO: set matching communities as well + return nil +} /* FindPage renders the Amsterdam "Find" page. * Parameters: @@ -33,11 +79,17 @@ func FindPage(ctxt ui.AmContext) (string, any, error) { if mode == "" { mode = "COM" } + ctxt.SetSession("find.mode", mode) + ctxt.VarMap().Set("mode", mode) switch mode { case "COM": ctxt.VarMap().Set("field", "name") ctxt.VarMap().Set("oper", "st") ctxt.VarMap().Set("term", "") + err := loadCategoryInformation(ctxt) + if err != nil { + return ui.ErrorPage(ctxt, err) + } case "USR": ctxt.VarMap().Set("field", "name") ctxt.VarMap().Set("oper", "st") @@ -49,9 +101,7 @@ func FindPage(ctxt ui.AmContext) (string, any, error) { ctxt.VarMap().Set("term", "") } - ctxt.VarMap().Set("mode", mode) ctxt.VarMap().Set("amsterdam_pageTitle", "Find") ctxt.SetLeftMenu("top") - ctxt.SetSession("find.mode", mode) return "framed_template", "find.jet", nil } diff --git a/ui/views/find.jet b/ui/views/find.jet index d97c958..5be49e3 100644 --- a/ui/views/find.jet +++ b/ui/views/find.jet @@ -11,7 +11,7 @@

Find:

-