From 3e22429678369946b3ad45a3d6aac6124dc58f8c Mon Sep 17 00:00:00 2001 From: Amy Gale Ruth Bowersox Date: Tue, 10 Feb 2026 11:12:50 -0700 Subject: [PATCH] completed the Conference Members function by adding the "Update" functionality --- conferenceadmin.go | 64 +++++++++++++++++++++++++++------------ docs/MISSINGFUNCS.md | 2 +- ui/amcontext.go | 10 ++++++ ui/views/conf_members.jet | 3 ++ 4 files changed, 59 insertions(+), 20 deletions(-) diff --git a/conferenceadmin.go b/conferenceadmin.go index 87fc6e7..6ddd16a 100644 --- a/conferenceadmin.go +++ b/conferenceadmin.go @@ -262,25 +262,19 @@ func ConferenceMembers(ctxt ui.AmContext) (string, any, error) { ctxt.VarMap().Set("amsterdam_pageTitle", fmt.Sprintf("Membership in Conference: %s", conf.Name)) // Get the search parameter values and adjust them. - mode := ctxt.Parameter("mode") - field := ctxt.Parameter("field") - oper := ctxt.Parameter("oper") - term := ctxt.Parameter("term") - offsetStr := ctxt.Parameter("ofs") - if mode == "" { - mode = "conf" - } - if field == "" { - field = "name" - } - if oper == "" { - oper = "st" - } + mode := "conf" + field := "name" + oper := "st" + term := "" offset := 0 - if offsetStr != "" { - var err error - offset, err = strconv.Atoi(offsetStr) - if err != nil { + if ctxt.Verb() == "POST" { + mode = ctxt.FormField("mode") + field = ctxt.FormField("field") + oper = ctxt.FormField("oper") + term = ctxt.FormField("term") + var e1 error + offset, e1 = ctxt.FormFieldInt("ofs") + if e1 != nil { offset = 0 } } @@ -302,7 +296,39 @@ func ConferenceMembers(ctxt ui.AmContext) (string, any, error) { ctxt.VarMap().Set("max", maxPage) if ctxt.FormFieldIsSet("update") { - // TODO: update the levels + // Parse out the list of valid UIDs. + uids := util.Map(strings.Split(ctxt.FormField("validUids"), "|"), func(in string) int32 { + rc, err := strconv.Atoi(in) + if err != nil { + return -1 + } + return int32(rc) + }) + for _, uid := range uids { + if uid > 0 { + // Get old and new access levels from the form. + tmp, err := ctxt.FormFieldInt(fmt.Sprintf("old_%d", uid)) + if err == nil { + oldLevel := uint16(tmp) + tmp, err = ctxt.FormFieldInt(fmt.Sprintf("new_%d", uid)) + if err == nil { + newLevel := uint16(tmp) + if oldLevel != newLevel { + // Update the level for this user. + var u *database.User + u, err = database.AmGetUser(ctxt.Ctx(), uid) + if err == nil { + err = conf.SetMembership(ctxt.Ctx(), u, newLevel, ctxt.CurrentUser(), ctxt.RemoteIP()) + } + } + } + } + if err != nil { + return ui.ErrorPage(ctxt, err) + } + } + } + ctxt.VarMap().Set("updated", true) } // Get the member list for the conference. diff --git a/docs/MISSINGFUNCS.md b/docs/MISSINGFUNCS.md index c6035d8..74d44c0 100644 --- a/docs/MISSINGFUNCS.md +++ b/docs/MISSINGFUNCS.md @@ -66,7 +66,7 @@ _(italicized items can be deferred)_ - ~~Manage aliases~~ - ~~Remove alias~~ - ~~Add alias~~ - - Manage members + - ~~Manage members~~ - Custom appearance - Activity reports - E-mail diff --git a/ui/amcontext.go b/ui/amcontext.go index 7dd44fb..803664e 100644 --- a/ui/amcontext.go +++ b/ui/amcontext.go @@ -75,6 +75,7 @@ type AmContext interface { URLParamInt(string) (int, error) URLPath() string VarMap() jet.VarMap + Verb() string } /*---------------------------------------------------------------------------- @@ -435,6 +436,15 @@ func (c *amContext) VarMap() jet.VarMap { return c.rendervars } +// Verb returns the HTTP method (verb) for this request. +func (c *amContext) Verb() string { + rc := c.echoContext.Request().Method + if rc == "" { + rc = "GET" + } + return rc +} + // defoptions is the default options for the HTTP session. var defoptions *AmSessionOptions = &AmSessionOptions{ Path: "/", diff --git a/ui/views/conf_members.jet b/ui/views/conf_members.jet index 8bda7fa..7b16d2d 100644 --- a/ui/views/conf_members.jet +++ b/ui/views/conf_members.jet @@ -133,6 +133,9 @@
+ {{ if isset(updated) }} + ✅ Updated! + {{ end }}