package models import "time" // SiteSetting holds the singleton (id=1) global display configuration: // logo, top-left title, header banner text, and footer text, each with // zh/en variants that fall back to i18n defaults when empty. type SiteSetting struct { ID uint `gorm:"primarykey" json:"id"` Logo string `gorm:"size:512" json:"logo"` // local filename (served under /uploads/logos) OR a full URL Favicon string `gorm:"size:512" json:"favicon"` // local filename (served under /uploads/logos) OR a full URL LogoTextZh string `gorm:"size:255" json:"logo_text_zh"` // top-left title (zh) LogoTextEn string `gorm:"size:255" json:"logo_text_en"` // top-left title (en) HeaderTextZh string `gorm:"size:512" json:"header_text_zh"` // header banner text (zh) HeaderTextEn string `gorm:"size:512" json:"header_text_en"` // header banner text (en) HomeWelcomeZh string `gorm:"size:255" json:"home_welcome_zh"` // home page welcome heading (zh) HomeWelcomeEn string `gorm:"size:255" json:"home_welcome_en"` // home page welcome heading (en) HomeSubtitleZh string `gorm:"size:512" json:"home_subtitle_zh"` // home page subtitle (zh) HomeSubtitleEn string `gorm:"size:512" json:"home_subtitle_en"` // home page subtitle (en) FooterTextZh string `gorm:"size:512" json:"footer_text_zh"` // footer text (zh) FooterTextEn string `gorm:"size:512" json:"footer_text_en"` // footer text (en) AllowRegistration bool `gorm:"default:false" json:"allow_registration"` // whether users can self-register UpdatedBy uint `gorm:"index" json:"updated_by"` UpdatedAt time.Time `json:"updated_at"` } // TableName overrides the default GORM table name. func (SiteSetting) TableName() string { return "site_settings" } // LogoIsURL reports whether the logo value is an external URL rather than a // local filename. func (s *SiteSetting) LogoIsURL() bool { if s == nil || s.Logo == "" { return false } return len(s.Logo) >= 4 && (s.Logo[:4] == "http") } // FaviconIsURL reports whether the favicon value is an external URL rather than a // local filename. func (s *SiteSetting) FaviconIsURL() bool { if s == nil || s.Favicon == "" { return false } return len(s.Favicon) >= 4 && (s.Favicon[:4] == "http") } // LogoText returns the title for the given language code, falling back to the // other language when the requested one is empty. func (s *SiteSetting) LogoText(lang string) string { if lang == "zh" { if s.LogoTextZh != "" { return s.LogoTextZh } return s.LogoTextEn } if s.LogoTextEn != "" { return s.LogoTextEn } return s.LogoTextZh } // HeaderText returns the header banner text for the given language code, // falling back to the other language when the requested one is empty. func (s *SiteSetting) HeaderText(lang string) string { if lang == "zh" { if s.HeaderTextZh != "" { return s.HeaderTextZh } return s.HeaderTextEn } if s.HeaderTextEn != "" { return s.HeaderTextEn } return s.HeaderTextZh } // HomeWelcome returns the home page welcome heading for the given language, // falling back to the other language when the requested one is empty. func (s *SiteSetting) HomeWelcome(lang string) string { if lang == "zh" { if s.HomeWelcomeZh != "" { return s.HomeWelcomeZh } return s.HomeWelcomeEn } if s.HomeWelcomeEn != "" { return s.HomeWelcomeEn } return s.HomeWelcomeZh } // HomeSubtitle returns the home page subtitle for the given language, // falling back to the other language when the requested one is empty. func (s *SiteSetting) HomeSubtitle(lang string) string { if lang == "zh" { if s.HomeSubtitleZh != "" { return s.HomeSubtitleZh } return s.HomeSubtitleEn } if s.HomeSubtitleEn != "" { return s.HomeSubtitleEn } return s.HomeSubtitleZh } // FooterText returns the footer text for the given language code, falling // back to the other language when the requested one is empty. func (s *SiteSetting) FooterText(lang string) string { if lang == "zh" { if s.FooterTextZh != "" { return s.FooterTextZh } return s.FooterTextEn } if s.FooterTextEn != "" { return s.FooterTextEn } return s.FooterTextZh }