fix: populate Manager and TopUser dropdowns
This commit is contained in:
parent
b30ddacef0
commit
73bc5fa528
1 changed files with 36 additions and 1 deletions
37
main.go
37
main.go
|
|
@ -372,10 +372,27 @@ func adminHandler(w http.ResponseWriter, r *http.Request) {
|
||||||
userLang = settings.Company.Language
|
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{}{
|
adminTmpl.Execute(w, map[string]interface{}{
|
||||||
"Settings": settings,
|
"Settings": settings,
|
||||||
"Domain": domain,
|
"Domain": domain,
|
||||||
"AdminEmail": adminEmail,
|
"AdminEmail": adminEmail,
|
||||||
|
"AllUsers": allUserOptions,
|
||||||
"AutheliaUp": autheliaUp,
|
"AutheliaUp": autheliaUp,
|
||||||
"CaddyUp": caddyUp,
|
"CaddyUp": caddyUp,
|
||||||
"LauncherUp": launcherUp,
|
"LauncherUp": launcherUp,
|
||||||
|
|
@ -424,12 +441,29 @@ func settingsHandler(w http.ResponseWriter, r *http.Request) {
|
||||||
lang = "en"
|
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))
|
tmpl := template.Must(template.New("settings").Funcs(funcMap).Parse(settingsHTML))
|
||||||
w.Header().Set("Content-Type", "text/html; charset=utf-8")
|
w.Header().Set("Content-Type", "text/html; charset=utf-8")
|
||||||
tmpl.Execute(w, map[string]interface{}{
|
tmpl.Execute(w, map[string]interface{}{
|
||||||
"User": user,
|
"User": user,
|
||||||
"IsAdmin": isAdmin,
|
"IsAdmin": isAdmin,
|
||||||
"UserSettings": us,
|
"UserSettings": us,
|
||||||
|
"AllUsers": allUserOptions,
|
||||||
"Settings": settings,
|
"Settings": settings,
|
||||||
"Lang": lang,
|
"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>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>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>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 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>
|
||||||
<div class="card">
|
<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_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_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>{{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-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 "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>
|
<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>
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue