From 1b02b400fdf69b55f39fabb02a716b02cd9698da Mon Sep 17 00:00:00 2001 From: Jan-Lukas Else Date: Sun, 27 Nov 2022 07:20:49 +0100 Subject: [PATCH] Add settings UI option for user nick and user name Updates #13 --- config.go | 23 +++++++++++++++++++++++ httpRouters.go | 1 + settings.go | 30 ++++++++++++++++++++++++++++++ settingsDb.go | 2 ++ strings/de.yaml | 3 +++ strings/default.yaml | 3 +++ ui.go | 5 +++++ uiComponents.go | 15 +++++++++++++++ 8 files changed, 82 insertions(+) diff --git a/config.go b/config.go index 146f171..590d68d 100644 --- a/config.go +++ b/config.go @@ -461,6 +461,29 @@ func (a *goBlog) initConfig(logging bool) error { if err = a.loadSections(); err != nil { return err } + // Load other settings from database + // User nick + if userNick, err := a.getSettingValue(userNickSetting); err != nil { + return err + } else if userNick == "" { + // Migrate to database + if err = a.saveSettingValue(userNickSetting, a.cfg.User.Nick); err != nil { + return err + } + } else { + a.cfg.User.Nick = userNick + } + // User name + if userName, err := a.getSettingValue(userNameSetting); err != nil { + return err + } else if userName == "" { + // Migrate to database + if err = a.saveSettingValue(userNameSetting, a.cfg.User.Name); err != nil { + return err + } + } else { + a.cfg.User.Name = userName + } // Check config for each blog for blog, bc := range a.cfg.Blogs { // Check sections and add section if none exists diff --git a/httpRouters.go b/httpRouters.go index 7f5290d..0830f54 100644 --- a/httpRouters.go +++ b/httpRouters.go @@ -461,5 +461,6 @@ func (a *goBlog) blogSettingsRouter(_ *configBlog) func(r chi.Router) { r.Post(settingsHideOldContentWarningPath, a.settingsHideOldContentWarning) r.Post(settingsHideShareButtonPath, a.settingsHideShareButton) r.Post(settingsHideTranslateButtonPath, a.settingsHideTranslateButton) + r.Post(settingsUpdateUserPath, a.settingsUpdateUser) } } diff --git a/settings.go b/settings.go index cedeee5..6d9d878 100644 --- a/settings.go +++ b/settings.go @@ -23,6 +23,8 @@ func (a *goBlog) serveSettings(w http.ResponseWriter, r *http.Request) { hideOldContentWarning: bc.hideOldContentWarning, hideShareButton: bc.hideShareButton, hideTranslateButton: bc.hideTranslateButton, + userNick: a.cfg.User.Nick, + userName: a.cfg.User.Name, }, }) } @@ -203,3 +205,31 @@ func (a *goBlog) settingsHideTranslateButton(w http.ResponseWriter, r *http.Requ a.cache.purge() http.Redirect(w, r, bc.getRelativePath(settingsPath), http.StatusFound) } + +const settingsUpdateUserPath = "/user" + +func (a *goBlog) settingsUpdateUser(w http.ResponseWriter, r *http.Request) { + _, bc := a.getBlog(r) + // Read values + userNick := r.FormValue(userNickSetting) + userName := r.FormValue(userNameSetting) + if userNick == "" || userName == "" { + a.serveError(w, r, "Values must not be empty", http.StatusInternalServerError) + return + } + // Update + err := a.saveSettingValue(userNickSetting, userNick) + if err != nil { + a.serveError(w, r, "Failed to update user nick in database", http.StatusInternalServerError) + return + } + err = a.saveSettingValue(userNameSetting, userName) + if err != nil { + a.serveError(w, r, "Failed to update user name in database", http.StatusInternalServerError) + return + } + a.cfg.User.Nick = userNick + a.cfg.User.Name = userName + a.cache.purge() + http.Redirect(w, r, bc.getRelativePath(settingsPath), http.StatusFound) +} diff --git a/settingsDb.go b/settingsDb.go index 4ff1be3..e46a919 100644 --- a/settingsDb.go +++ b/settingsDb.go @@ -17,6 +17,8 @@ const ( hideOldContentWarningSetting = "hideoldcontentwarning" hideShareButtonSetting = "hidesharebutton" hideTranslateButtonSetting = "hidetranslatebutton" + userNickSetting = "usernick" + userNameSetting = "username" ) func (a *goBlog) getSettingValue(name string) (string, error) { diff --git a/strings/de.yaml b/strings/de.yaml index 77911cf..492b424 100644 --- a/strings/de.yaml +++ b/strings/de.yaml @@ -67,6 +67,8 @@ sectionshowfull: "Vollständigen Inhalt in der Zusammenfassung anzeigen" sectiontitle: "Title" send: "Senden (zur Überprüfung)" settings: "Einstellungen" +settingsusername: "Vollständiger Benutzername" +settingsusernick: "Benutzer-Nickname (Login-Benutzername)" share: "Online teilen" shorturl: "Kurz-Link:" speak: "Vorlesen" @@ -82,6 +84,7 @@ unlistedpostsdesc: "Veröffentlichte Posts mit der Sichtbarkeit `unlisted`, die update: "Aktualisieren" updatedon: "Aktualisiert am" upload: "Hochladen" +user: "Benutzer" view: "Anschauen" visibility: "Sichtbarkeit" whatistor: "Was ist Tor?" diff --git a/strings/default.yaml b/strings/default.yaml index 64e0266..8142354 100644 --- a/strings/default.yaml +++ b/strings/default.yaml @@ -82,6 +82,8 @@ sectionshowfull: "Show full content in summary" sectiontitle: "Title" send: "Send (to review)" settings: "Settings" +settingsusername: "Full user name" +settingsusernick: "User nickname (login username)" share: "Share online" shorturl: "Short link:" speak: "Read aloud" @@ -98,6 +100,7 @@ unlistedpostsdesc: "Published posts with visibility `unlisted` that are not disp update: "Update" updatedon: "Updated on" upload: "Upload" +user: "User" username: "Username" verified: "Verified" view: "View" diff --git a/ui.go b/ui.go index 580fe4f..f177608 100644 --- a/ui.go +++ b/ui.go @@ -1521,6 +1521,8 @@ type settingsRenderData struct { hideOldContentWarning bool hideShareButton bool hideTranslateButton bool + userNick string + userName string } func (a *goBlog) renderSettings(hb *htmlbuilder.HtmlBuilder, rd *renderData) { @@ -1568,6 +1570,9 @@ func (a *goBlog) renderSettings(hb *htmlbuilder.HtmlBuilder, rd *renderData) { srd.hideTranslateButton, ) + // User settings + a.renderUserSettings(hb, rd, srd) + // Post sections a.renderPostSectionSettings(hb, rd, srd) diff --git a/uiComponents.go b/uiComponents.go index 3308457..f9d56d2 100644 --- a/uiComponents.go +++ b/uiComponents.go @@ -654,3 +654,18 @@ func (a *goBlog) renderBooleanSetting(hb *htmlbuilder.HtmlBuilder, rd *renderDat hb.WriteElementClose("form") } + +func (a *goBlog) renderUserSettings(hb *htmlbuilder.HtmlBuilder, rd *renderData, srd *settingsRenderData) { + hb.WriteElementOpen("h2") + hb.WriteEscaped(a.ts.GetTemplateStringVariant(rd.Blog.Lang, "user")) + hb.WriteElementClose("h2") + + hb.WriteElementOpen("form", "class", "fw p", "method", "post") + hb.WriteElementOpen("input", "type", "text", "name", "usernick", "required", "", "value", srd.userNick, "placeholder", a.ts.GetTemplateStringVariant(rd.Blog.Lang, "settingsusernick")) + hb.WriteElementOpen("input", "type", "text", "name", "username", "required", "", "value", srd.userName, "placeholder", a.ts.GetTemplateStringVariant(rd.Blog.Lang, "settingsusername")) + hb.WriteElementOpen( + "input", "type", "submit", "value", a.ts.GetTemplateStringVariant(rd.Blog.Lang, "update"), + "formaction", rd.Blog.getRelativePath(settingsPath+settingsUpdateUserPath), + ) + hb.WriteElementClose("form") +}