package handlers import ( "net/http" "strings" "simple_portal/models" "github.com/gin-gonic/gin" ) // SettingsGet renders the admin settings page. func SettingsGet(c *gin.Context) { username, _ := c.Get("username") searchEngine, err := models.GetSetting(models.SettingKeySearchEngine) if err != nil { searchEngine = models.SearchEngineGoogle } if searchEngine == "" { searchEngine = models.SearchEngineGoogle } engines := map[string]string{ "Google": models.SearchEngineGoogle, "Bing": models.SearchEngineBing, "百度": models.SearchEngineBaidu, } // Fetch homepage configuration homepageTitle, _ := models.GetSetting(models.SettingKeyHomepageTitle) if homepageTitle == "" { homepageTitle = models.DefaultHomepageTitle } homepageSubtitle, _ := models.GetSetting(models.SettingKeyHomepageSubtitle) homepageBackground, _ := models.GetSetting(models.SettingKeyHomepageBackground) c.HTML(http.StatusOK, "admin/settings.html", gin.H{ "Title": "设置", "Username": username, "SearchEngine": searchEngine, "Engines": engines, "HomepageTitle": homepageTitle, "HomepageSubtitle": homepageSubtitle, "HomepageBackground": homepageBackground, }) } // SettingsPost handles the settings form submission. func SettingsPost(c *gin.Context) { username, _ := c.Get("username") searchEngine := c.PostForm("search_engine") customURL := c.PostForm("custom_url") // 如果用户填写了自定义URL,优先使用 if customURL != "" { if !strings.Contains(customURL, "%s") { engines := map[string]string{ "Google": models.SearchEngineGoogle, "Bing": models.SearchEngineBing, "百度": models.SearchEngineBaidu, } homepageTitle := c.PostForm("homepage_title") if homepageTitle == "" { homepageTitle = models.DefaultHomepageTitle } homepageSubtitle := c.PostForm("homepage_subtitle") homepageBackground := c.PostForm("homepage_background") c.HTML(http.StatusOK, "admin/settings.html", gin.H{ "Title": "设置", "Username": username, "SearchEngine": searchEngine, "Engines": engines, "HomepageTitle": homepageTitle, "HomepageSubtitle": homepageSubtitle, "HomepageBackground": homepageBackground, "Error": "自定义 URL 必须包含 %s 作为搜索词占位符", }) return } searchEngine = customURL } if searchEngine == "" { searchEngine = models.SearchEngineGoogle } // Save search engine setting if err := models.SetSetting(models.SettingKeySearchEngine, searchEngine); err != nil { engines := map[string]string{ "Google": models.SearchEngineGoogle, "Bing": models.SearchEngineBing, "百度": models.SearchEngineBaidu, } homepageTitle := c.PostForm("homepage_title") if homepageTitle == "" { homepageTitle = models.DefaultHomepageTitle } homepageSubtitle := c.PostForm("homepage_subtitle") homepageBackground := c.PostForm("homepage_background") c.HTML(http.StatusOK, "admin/settings.html", gin.H{ "Title": "设置", "Username": username, "SearchEngine": searchEngine, "Engines": engines, "HomepageTitle": homepageTitle, "HomepageSubtitle": homepageSubtitle, "HomepageBackground": homepageBackground, "Error": "保存失败,请重试", }) return } // Save homepage settings homepageTitle := c.PostForm("homepage_title") if homepageTitle == "" { homepageTitle = models.DefaultHomepageTitle } homepageSubtitle := c.PostForm("homepage_subtitle") homepageBackground := c.PostForm("homepage_background") if err := models.SetSetting(models.SettingKeyHomepageTitle, homepageTitle); err != nil { c.Redirect(http.StatusFound, "/admin/settings") return } if err := models.SetSetting(models.SettingKeyHomepageSubtitle, homepageSubtitle); err != nil { c.Redirect(http.StatusFound, "/admin/settings") return } if err := models.SetSetting(models.SettingKeyHomepageBackground, homepageBackground); err != nil { c.Redirect(http.StatusFound, "/admin/settings") return } // 保存成功后重定向,利用 PRG 模式 c.Redirect(http.StatusFound, "/admin/settings") }