fix: populate Manager and TopUser dropdowns

This commit is contained in:
Claus Lohmar 2026-07-10 13:10:12 +01:00
parent b30ddacef0
commit 73bc5fa528

37
main.go
View file

@ -372,10 +372,27 @@ func adminHandler(w http.ResponseWriter, r *http.Request) {
userLang = settings.Company.Language
}
// Fetch all users for TopUser dropdown
allUsers, _ := fetchAllUsers()
type UserOption struct {
Username string
DisplayName string
}
var allUserOptions []UserOption
for _, u := range allUsers {
profile := loadUserSettings(u.Username)
name := u.DisplayName
if profile.FirstName != "" {
name = profile.FirstName + " " + profile.LastName
}
allUserOptions = append(allUserOptions, UserOption{Username: u.Username, DisplayName: name})
}
adminTmpl.Execute(w, map[string]interface{}{
"Settings": settings,
"Domain": domain,
"AdminEmail": adminEmail,
"AllUsers": allUserOptions,
"AutheliaUp": autheliaUp,
"CaddyUp": caddyUp,
"LauncherUp": launcherUp,
@ -424,12 +441,29 @@ func settingsHandler(w http.ResponseWriter, r *http.Request) {
lang = "en"
}
// Fetch all users for manager dropdown
allUsers, _ := fetchAllUsers()
type UserOption struct {
Username string
DisplayName string
}
var allUserOptions []UserOption
for _, u := range allUsers {
profile := loadUserSettings(u.Username)
name := u.DisplayName
if profile.FirstName != "" {
name = profile.FirstName + " " + profile.LastName
}
allUserOptions = append(allUserOptions, UserOption{Username: u.Username, DisplayName: name})
}
tmpl := template.Must(template.New("settings").Funcs(funcMap).Parse(settingsHTML))
w.Header().Set("Content-Type", "text/html; charset=utf-8")
tmpl.Execute(w, map[string]interface{}{
"User": user,
"IsAdmin": isAdmin,
"UserSettings": us,
"AllUsers": allUserOptions,
"Settings": settings,
"Lang": lang,
})
@ -923,6 +957,7 @@ const settingsHTML = `<!DOCTYPE html>
<div class="field"><label>Phone</label><input type="tel" name="phone" value="{{.UserSettings.Phone}}" placeholder="+49 123 456789"></div>
<div class="field"><label>Address</label><input type="text" name="address" value="{{.UserSettings.Address}}" placeholder="Street, City, Country"></div>
<div class="field"><label>Messenger</label><input type="text" name="messenger" value="{{.UserSettings.Messenger}}" placeholder="@user:signal / t.me/user"></div>
<div class="field"><label>Manager</label><select name="manager"><option value=""> No manager </option>{{range .AllUsers}}<option value="{{.Username}}" {{if eq $.UserSettings.Manager .Username}}selected{{end}}>{{.DisplayName}} (@{{.Username}})</option>{{end}}</select></div>
<div class="field"><label>Bio</label><textarea name="bio" rows="3" style="width:100%;padding:0.5rem;border:1px solid #e2e8f0;border-radius:6px;font-size:0.88rem;">{{.UserSettings.Bio}}</textarea></div>
</div>
<div class="card">
@ -1323,7 +1358,7 @@ const adminHTML = `<!DOCTYPE html>
<div class="field"><label>{{t .Lang "company_name"}}</label><input type="text" name="company_name" value="{{.Settings.Company.Name}}"></div>
<div class="field"><label>{{t .Lang "company_subtitle"}}</label><input type="text" name="company_subtitle" value="{{.Settings.Company.Subtitle}}"></div>
<div class="field"><label>{{t .Lang "company_logo"}}</label><input type="url" name="company_logo" value="{{.Settings.Company.Logo}}" placeholder="https://example.com/logo.png"></div>
<div class="field"><label>Top-Level User (CEO)</label><input type="text" name="top_user" value="{{.Settings.Company.TopUser}}" placeholder="master"></div>
<div class="field"><label>Top-Level User (CEO)</label><select name="top_user"><option value=""> Select </option>{{range .AllUsers}}<option value="{{.Username}}" {{if eq $.Settings.Company.TopUser .Username}}selected{{end}}>{{.DisplayName}} (@{{.Username}})</option>{{end}}</select></div>
<div class="field-row">
<div class="field"><label>{{t .Lang "language"}}</label><select name="language"><option value="en" {{if eq .Settings.Company.Language "en"}}selected{{end}}>English</option><option value="de" {{if eq .Settings.Company.Language "de"}}selected{{end}}>Deutsch</option></select></div>
<div class="field"><label>{{t .Lang "timezone"}}</label><select name="timezone">{{$tz := .Settings.Company.Timezone}}<option value="UTC" {{if eq $tz "UTC"}}selected{{end}}>UTC</option><option value="Europe/London" {{if eq $tz "Europe/London"}}selected{{end}}>Europe/London</option><option value="Europe/Berlin" {{if eq $tz "Europe/Berlin"}}selected{{end}}>Europe/Berlin</option><option value="America/New_York" {{if eq $tz "America/New_York"}}selected{{end}}>America/New_York</option><option value="Asia/Tokyo" {{if eq $tz "Asia/Tokyo"}}selected{{end}}>Asia/Tokyo</option></select></div>