From 03a1cfcd5e204ac018dae1100c9964fe44563498 Mon Sep 17 00:00:00 2001 From: Romain de Laage Date: Wed, 20 Jul 2022 22:07:55 +0200 Subject: [PATCH] Make default home page configurable --- client/model.go | 2 ++ database/migrations.go | 6 +++++ locale/translations/de_DE.json | 2 ++ locale/translations/el_EL.json | 2 ++ locale/translations/en_US.json | 2 ++ locale/translations/es_ES.json | 2 ++ locale/translations/fi_FI.json | 2 ++ locale/translations/fr_FR.json | 2 ++ locale/translations/hi_IN.json | 2 ++ locale/translations/it_IT.json | 2 ++ locale/translations/ja_JP.json | 2 ++ locale/translations/nl_NL.json | 2 ++ locale/translations/pl_PL.json | 2 ++ locale/translations/pt_BR.json | 2 ++ locale/translations/ru_RU.json | 2 ++ locale/translations/tr_TR.json | 2 ++ locale/translations/zh_CN.json | 2 ++ locale/translations/zh_TW.json | 2 ++ model/home_page.go | 16 +++++++++++++ model/user.go | 6 +++++ storage/user.go | 33 ++++++++++++++++++-------- template/templates/common/layout.html | 2 +- template/templates/views/settings.html | 7 ++++++ ui/form/settings.go | 5 +++- ui/form/settings_test.go | 3 +++ ui/login_check.go | 2 +- ui/login_show.go | 8 ++++++- ui/settings_show.go | 2 ++ ui/settings_update.go | 1 + validator/user.go | 14 +++++++++++ 30 files changed, 125 insertions(+), 14 deletions(-) create mode 100644 model/home_page.go diff --git a/client/model.go b/client/model.go index c54f1113..7e760f99 100644 --- a/client/model.go +++ b/client/model.go @@ -38,6 +38,7 @@ type User struct { DisplayMode string `json:"display_mode"` DefaultReadingSpeed int `json:"default_reading_speed"` CJKReadingSpeed int `json:"cjk_reading_speed"` + DefaultHomePage string `json:"default_home_page"` } func (u User) String() string { @@ -73,6 +74,7 @@ type UserModificationRequest struct { DisplayMode *string `json:"display_mode"` DefaultReadingSpeed *int `json:"default_reading_speed"` CJKReadingSpeed *int `json:"cjk_reading_speed"` + DefaultHomePage *string `json:"default_home_page"` } // Users represents a list of users. diff --git a/database/migrations.go b/database/migrations.go index 093be271..e89b060c 100644 --- a/database/migrations.go +++ b/database/migrations.go @@ -604,4 +604,10 @@ var migrations = []func(tx *sql.Tx) error{ `) return }, + func(tx *sql.Tx) (err error) { + _, err = tx.Exec(` + ALTER TABLE users ADD COLUMN default_home_page text default 'unread'; + `) + return + }, } diff --git a/locale/translations/de_DE.json b/locale/translations/de_DE.json index f4299068..3393b6f4 100644 --- a/locale/translations/de_DE.json +++ b/locale/translations/de_DE.json @@ -263,6 +263,7 @@ "error.invalid_timezone": "Ungültige Zeitzone.", "error.invalid_entry_direction": "Ungültige Sortierreihenfolge.", "error.invalid_display_mode": "Ungültiger Web-App-Anzeigemodus.", + "error.invalid_default_home_page": "Ungültige Standard-Startseite!", "form.feed.label.title": "Titel", "form.feed.label.site_url": "Webseite-URL", "form.feed.label.feed_url": "Abonnement-URL", @@ -309,6 +310,7 @@ "form.prefs.label.show_reading_time": "Geschätzte Lesezeit für Artikel anzeigen", "form.prefs.label.custom_css": "Benutzerdefiniertes CSS", "form.prefs.label.entry_order": "Eintrag Sortierspalte", + "form.prefs.label.default_home_page": "Standard Startseite", "form.import.label.file": "OPML Datei", "form.import.label.url": "URL", "form.integration.fever_activate": "Fever API aktivieren", diff --git a/locale/translations/el_EL.json b/locale/translations/el_EL.json index 8525ad29..18ac2076 100644 --- a/locale/translations/el_EL.json +++ b/locale/translations/el_EL.json @@ -241,6 +241,7 @@ "error.invalid_timezone": "Μη έγκυρη ζώνη ώρας.", "error.invalid_entry_direction": "Μη έγκυρη κατεύθυνση ταξινόμησης άρθρων.", "error.invalid_display_mode": "Μη έγκυρη λειτουργία εμφάνισης εφαρμογών ιστού.", + "error.invalid_default_home_page": "Μη έγκυρη προεπιλεγμένη αρχική σελίδα!", "error.empty_file": "Αυτό το αρχείο είναι κενό.", "error.bad_credentials": "Μη έγκυρο όνομα χρήστη ή κωδικό πρόσβασης.", "error.fields_mandatory": "Όλα τα πεδία είναι υποχρεωτικά.", @@ -309,6 +310,7 @@ "form.prefs.label.show_reading_time": "Εμφάνιση εκτιμώμενου χρόνου ανάγνωσης για άρθρα", "form.prefs.label.custom_css": "Προσαρμοσμένο CSS", "form.prefs.label.entry_order": "Στήλη ταξινόμησης εισόδου", + "form.prefs.label.default_home_page": "Προεπιλεγμένη αρχική σελίδα", "form.import.label.file": "Αρχείο OPML", "form.import.label.url": "URL", "form.integration.fever_activate": "Ενεργοποιήστε το Fever API", diff --git a/locale/translations/en_US.json b/locale/translations/en_US.json index 85623f9e..d05555bb 100644 --- a/locale/translations/en_US.json +++ b/locale/translations/en_US.json @@ -241,6 +241,7 @@ "error.invalid_timezone": "Invalid timezone.", "error.invalid_entry_direction": "Invalid entry direction.", "error.invalid_display_mode": "Invalid web app display mode.", + "error.invalid_default_home_page": "Invalid default homepage!", "error.empty_file": "This file is empty.", "error.bad_credentials": "Invalid username or password.", "error.fields_mandatory": "All fields are mandatory.", @@ -309,6 +310,7 @@ "form.prefs.label.show_reading_time": "Show estimated reading time for articles", "form.prefs.label.custom_css": "Custom CSS", "form.prefs.label.entry_order": "Entry Sorting Column", + "form.prefs.label.default_home_page": "Default home page", "form.import.label.file": "OPML file", "form.import.label.url": "URL", "form.integration.fever_activate": "Activate Fever API", diff --git a/locale/translations/es_ES.json b/locale/translations/es_ES.json index 1cac1de8..06e701a7 100644 --- a/locale/translations/es_ES.json +++ b/locale/translations/es_ES.json @@ -263,6 +263,7 @@ "error.invalid_timezone": "Zona horaria no válida.", "error.invalid_entry_direction": "Dirección de entrada no válida.", "error.invalid_display_mode": "Modo de visualización de la aplicación web no válido.", + "error.invalid_default_home_page": "¡Página de inicio por defecto inválida!", "form.feed.label.title": "Título", "form.feed.label.site_url": "URL del sitio", "form.feed.label.feed_url": "URL de la fuente", @@ -309,6 +310,7 @@ "form.prefs.label.show_reading_time": "Mostrar el tiempo estimado de lectura de los artículos", "form.prefs.label.custom_css": "CSS personalizado", "form.prefs.label.entry_order": "Columna de clasificación de entradas", + "form.prefs.label.default_home_page": "Página de inicio por defecto", "form.import.label.file": "Archivo OPML", "form.import.label.url": "URL", "form.integration.fever_activate": "Activar API de Fever", diff --git a/locale/translations/fi_FI.json b/locale/translations/fi_FI.json index f5ab63cb..ccdc60d3 100644 --- a/locale/translations/fi_FI.json +++ b/locale/translations/fi_FI.json @@ -241,6 +241,7 @@ "error.invalid_timezone": "Virheellinen aikavyöhyke.", "error.invalid_entry_direction": "Invalid entry direction.", "error.invalid_display_mode": "Virheellinen verkkosovelluksen näyttötila.", + "error.invalid_default_home_page": "Väärä oletusarvoinen kotisivu!", "error.empty_file": "Tiedosto on tyhjä.", "error.bad_credentials": "Virheellinen käyttäjänimi tai salasana.", "error.fields_mandatory": "Kaikki kentät ovat pakollisia.", @@ -309,6 +310,7 @@ "form.prefs.label.show_reading_time": "Näytä artikkeleiden arvioitu lukuaika", "form.prefs.label.custom_css": "Mukautettu CSS", "form.prefs.label.entry_order": "Lajittele sarakkeen mukaan", + "form.prefs.label.default_home_page": "Oletusarvoinen etusivu", "form.import.label.file": "OPML-tiedosto", "form.import.label.url": "URL", "form.integration.fever_activate": "Ota Fever API käyttöön", diff --git a/locale/translations/fr_FR.json b/locale/translations/fr_FR.json index 679ef80d..3f40a297 100644 --- a/locale/translations/fr_FR.json +++ b/locale/translations/fr_FR.json @@ -263,6 +263,7 @@ "error.invalid_timezone": "Fuseau horaire non valide.", "error.invalid_entry_direction": "Ordre de trie non valide.", "error.invalid_display_mode": "Mode d'affichage de l'application web non valide.", + "error.invalid_default_home_page": "Page d'accueil par défaut invalide !", "form.feed.label.title": "Titre", "form.feed.label.site_url": "URL du site web", "form.feed.label.feed_url": "URL du flux", @@ -309,6 +310,7 @@ "form.prefs.label.show_reading_time": "Afficher le temps de lecture estimé des articles", "form.prefs.label.custom_css": "CSS personnalisé", "form.prefs.label.entry_order": "Colonne de tri des entrées", + "form.prefs.label.default_home_page": "Page d'accueil par défaut", "form.import.label.file": "Fichier OPML", "form.import.label.url": "URL", "form.integration.fever_activate": "Activer l'API de Fever", diff --git a/locale/translations/hi_IN.json b/locale/translations/hi_IN.json index 8c889079..d47a93dc 100644 --- a/locale/translations/hi_IN.json +++ b/locale/translations/hi_IN.json @@ -241,6 +241,7 @@ "error.invalid_timezone": "अमान्य समयक्षेत्र.", "error.invalid_entry_direction": "अमान्य प्रवेश दिशा।", "error.invalid_display_mode": "अमान्य वेब ऐप्लिकेशन प्रदर्शन मोड.", + "error.invalid_default_home_page": "अमान्य डिफ़ॉल्ट मुखपृष्ठ!", "error.empty_file": "यह फ़ाइल खाली है।", "error.bad_credentials": "अमान्य उपयोगकर्ता नाम या पासवर्ड।", "error.fields_mandatory": "सभी फील्ड अनिवार्य।", @@ -309,6 +310,7 @@ "form.prefs.label.show_reading_time": "विषय के लिए अनुमानित पढ़ने का समय दिखाएं", "form.prefs.label.custom_css": "कस्टम सीएसएस", "form.prefs.label.entry_order": "प्रवेश छँटाई कॉलम", + "form.prefs.label.default_home_page": "डिफ़ॉल्ट होमपेज़", "form.import.label.file": "ओपीएमएल फ़ाइल", "form.import.label.url": "यूआरएल", "form.integration.fever_activate": "फीवर एपीआई सक्रिय करें", diff --git a/locale/translations/it_IT.json b/locale/translations/it_IT.json index fe8476b8..1084d814 100644 --- a/locale/translations/it_IT.json +++ b/locale/translations/it_IT.json @@ -263,6 +263,7 @@ "error.invalid_timezone": "Fuso orario non valido.", "error.invalid_entry_direction": "Ordinamento non valido.", "error.invalid_display_mode": "Modalità di visualizzazione web app non valida.", + "error.invalid_default_home_page": "Pagina iniziale predefinita non valida!", "form.feed.label.title": "Titolo", "form.feed.label.site_url": "URL del sito", "form.feed.label.feed_url": "URL del feed", @@ -309,6 +310,7 @@ "form.prefs.label.show_reading_time": "Mostra il tempo di lettura stimato per gli articoli", "form.prefs.label.custom_css": "CSS personalizzati", "form.prefs.label.entry_order": "Colonna di ordinamento delle voci", + "form.prefs.label.default_home_page": "Pagina iniziale predefinita", "form.import.label.file": "File OPML", "form.import.label.url": "URL", "form.integration.fever_activate": "Abilita l'API di Fever", diff --git a/locale/translations/ja_JP.json b/locale/translations/ja_JP.json index 8b9d53c8..f844ba9d 100644 --- a/locale/translations/ja_JP.json +++ b/locale/translations/ja_JP.json @@ -263,6 +263,7 @@ "error.invalid_timezone": "タイムゾーンが無効です。", "error.invalid_entry_direction": "ソート順が無効です。", "error.invalid_display_mode": "Webアプリの表示モードが無効です。", + "error.invalid_default_home_page": "デフォルトのホームページが無効です", "form.feed.label.title": "タイトル", "form.feed.label.site_url": "サイト URL", "form.feed.label.feed_url": "フィード URL", @@ -309,6 +310,7 @@ "form.prefs.label.show_reading_time": "記事の推定読書時間を表示する", "form.prefs.label.custom_css": "カスタムCSS", "form.prefs.label.entry_order": "エントリーソートカラム", + "form.prefs.label.default_home_page": "デフォルトのトップページ", "form.import.label.file": "OPML ファイル", "form.import.label.url": "URL", "form.integration.fever_activate": "Fever API を有効にする", diff --git a/locale/translations/nl_NL.json b/locale/translations/nl_NL.json index 79adda7c..95e8ca7c 100644 --- a/locale/translations/nl_NL.json +++ b/locale/translations/nl_NL.json @@ -263,6 +263,7 @@ "error.invalid_timezone": "Ongeldige tijdzone.", "error.invalid_entry_direction": "Ongeldige sorteervolgorde.", "error.invalid_display_mode": "Ongeldige weergavemodus voor webapp.", + "error.invalid_default_home_page": "Ongeldige standaard homepage!", "form.feed.label.title": "Naam", "form.feed.label.site_url": "Website URL", "form.feed.label.feed_url": "Feed URL", @@ -309,6 +310,7 @@ "form.prefs.label.show_reading_time": "Toon geschatte leestijd voor artikelen", "form.prefs.label.custom_css": "Aangepaste CSS", "form.prefs.label.entry_order": "Ingang Sorteerkolom", + "form.prefs.label.default_home_page": "Standaard startpagina", "form.import.label.file": "OPML-bestand", "form.import.label.url": "URL", "form.integration.fever_activate": "Activeer Fever API", diff --git a/locale/translations/pl_PL.json b/locale/translations/pl_PL.json index 58fa35fc..4f2383cb 100644 --- a/locale/translations/pl_PL.json +++ b/locale/translations/pl_PL.json @@ -265,6 +265,7 @@ "error.invalid_timezone": "Nieprawidłowa strefa czasowa.", "error.invalid_entry_direction": "Nieprawidłowa kolejność sortowania.", "error.invalid_display_mode": "Nieprawidłowy tryb wyświetlania aplikacji internetowej.", + "error.invalid_default_home_page": "Nieprawidłowa domyślna strona główna!", "form.feed.label.title": "Tytuł", "form.feed.label.site_url": "URL strony", "form.feed.label.feed_url": "URL kanału", @@ -311,6 +312,7 @@ "form.prefs.select.created_time": "Czas utworzenia wpisu", "form.prefs.label.custom_css": "Niestandardowy CSS", "form.prefs.label.entry_order": "Kolumna sortowania wpisów", + "form.prefs.label.default_home_page": "Domyślna strona główna", "form.import.label.file": "Plik OPML", "form.import.label.url": "URL", "form.integration.fever_activate": "Aktywuj Fever API", diff --git a/locale/translations/pt_BR.json b/locale/translations/pt_BR.json index 73cb3ba9..2c2d34b8 100644 --- a/locale/translations/pt_BR.json +++ b/locale/translations/pt_BR.json @@ -263,6 +263,7 @@ "error.invalid_timezone": "Fuso horário inválido.", "error.invalid_entry_direction": "Direção de entrada inválida.", "error.invalid_display_mode": "Modo de exibição de aplicativo inválido da web.", + "error.invalid_default_home_page": "Página inicial por defeito inválida!", "form.feed.label.title": "Título", "form.feed.label.site_url": "URL do site", "form.feed.label.feed_url": "URL da fonte", @@ -309,6 +310,7 @@ "form.prefs.label.show_reading_time": "Mostrar tempo estimado de leitura de artigos", "form.prefs.label.custom_css": "CSS customizado", "form.prefs.label.entry_order": "Coluna de Ordenação de Entrada", + "form.prefs.label.default_home_page": "Página inicial predefinida", "form.import.label.file": "Arquivo OPML", "form.import.label.url": "URL", "form.integration.fever_activate": "Ativar API do Fever", diff --git a/locale/translations/ru_RU.json b/locale/translations/ru_RU.json index 8c4294f2..dce6fdaa 100644 --- a/locale/translations/ru_RU.json +++ b/locale/translations/ru_RU.json @@ -265,6 +265,7 @@ "error.invalid_timezone": "Неверный часовой пояс.", "error.invalid_entry_direction": "Неверное направление входа.", "error.invalid_display_mode": "Недопустимый режим отображения веб-приложения.", + "error.invalid_default_home_page": "Неверная домашняя страница по умолчанию!", "form.feed.label.title": "Название", "form.feed.label.site_url": "URL сайта", "form.feed.label.feed_url": "URL подписки", @@ -311,6 +312,7 @@ "form.prefs.label.show_reading_time": "Показать примерное время чтения статей", "form.prefs.label.custom_css": "Пользовательские CSS", "form.prefs.label.entry_order": "Колонка сортировки ввода", + "form.prefs.label.default_home_page": "Домашняя страница по умолчанию", "form.import.label.file": "OPML файл", "form.import.label.url": "URL", "form.integration.fever_activate": "Активировать Fever API", diff --git a/locale/translations/tr_TR.json b/locale/translations/tr_TR.json index ae83346f..0ff1ad7f 100644 --- a/locale/translations/tr_TR.json +++ b/locale/translations/tr_TR.json @@ -241,6 +241,7 @@ "error.invalid_timezone": "Geçersiz saat dilimi", "error.invalid_entry_direction": "Geçersiz giriş yönü.", "error.invalid_display_mode": "Geçersiz web uygulaması görüntüleme modu.", + "error.invalid_default_home_page": "Geçersiz varsayılan ana sayfa!", "error.empty_file": "Bu dosya boş.", "error.bad_credentials": "Geçersiz kullanıcı veya parola.", "error.fields_mandatory": "Tüm alanlar zorunlu.", @@ -309,6 +310,7 @@ "form.prefs.label.show_reading_time": "Makaleler için tahmini okuma süresini göster", "form.prefs.label.custom_css": "Özel CSS", "form.prefs.label.entry_order": "Giriş Sıralama Sütunu", + "form.prefs.label.default_home_page": "Varsayılan ana sayfa", "form.import.label.file": "OPML dosyası", "form.import.label.url": "URL", "form.integration.fever_activate": "Fever API'yi Etkinleştir", diff --git a/locale/translations/zh_CN.json b/locale/translations/zh_CN.json index 586d08d3..6458404c 100644 --- a/locale/translations/zh_CN.json +++ b/locale/translations/zh_CN.json @@ -261,6 +261,7 @@ "error.invalid_timezone": "无效的时区。", "error.invalid_entry_direction": "无效的输入方向。", "error.invalid_display_mode": "无效的网页应用显示模式。", + "error.invalid_default_home_page": "无效的默认主页!", "form.feed.label.title": "标题", "form.feed.label.site_url": "源网站 URL", "form.feed.label.feed_url": "订阅源 URL", @@ -307,6 +308,7 @@ "form.prefs.label.show_reading_time": "显示文章的预计阅读时间", "form.prefs.label.custom_css": "自定义 CSS", "form.prefs.label.entry_order": "文章排序依据", + "form.prefs.label.default_home_page": "默认主页", "form.import.label.file": "OPML 文件", "form.import.label.url": "URL", "form.integration.fever_activate": "启用 Fever API", diff --git a/locale/translations/zh_TW.json b/locale/translations/zh_TW.json index fe25c882..bfb6e4d1 100644 --- a/locale/translations/zh_TW.json +++ b/locale/translations/zh_TW.json @@ -263,6 +263,7 @@ "error.invalid_timezone": "無效的時區。", "error.invalid_entry_direction": "無效的輸入方向。", "error.invalid_display_mode": "無效的網頁應用顯示模式。", + "error.invalid_default_home_page": "默認主頁無效!", "form.feed.label.title": "標題", "form.feed.label.site_url": "網站 URL", "form.feed.label.feed_url": "訂閱Feed URL", @@ -309,6 +310,7 @@ "form.prefs.label.show_reading_time": "顯示文章的預計閱讀時間", "form.prefs.label.custom_css": "自定義 CSS", "form.prefs.label.entry_order": "文章排序依據", + "form.prefs.label.default_home_page": "默認主頁", "form.import.label.file": "OPML 檔案", "form.import.label.url": "URL", "form.integration.fever_activate": "啟用 Fever API", diff --git a/model/home_page.go b/model/home_page.go new file mode 100644 index 00000000..f5195550 --- /dev/null +++ b/model/home_page.go @@ -0,0 +1,16 @@ +// Copyright 2017 Frédéric Guillot. All rights reserved. +// Use of this source code is governed by the Apache 2.0 +// license that can be found in the LICENSE file. + +package model // import "miniflux.app/model" + +// HomePages returns the list of available home pages. +func HomePages() map[string]string { + return map[string]string{ + "unread": "menu.unread", + "starred": "menu.starred", + "history": "menu.history", + "feeds": "menu.feeds", + "categories": "menu.categories", + } +} diff --git a/model/user.go b/model/user.go index b1f335c9..bf9baab4 100644 --- a/model/user.go +++ b/model/user.go @@ -32,6 +32,7 @@ type User struct { DisplayMode string `json:"display_mode"` DefaultReadingSpeed int `json:"default_reading_speed"` CJKReadingSpeed int `json:"cjk_reading_speed"` + DefaultHomePage string `json:"default_home_page"` } // UserCreationRequest represents the request to create a user. @@ -63,6 +64,7 @@ type UserModificationRequest struct { DisplayMode *string `json:"display_mode"` DefaultReadingSpeed *int `json:"default_reading_speed"` CJKReadingSpeed *int `json:"cjk_reading_speed"` + DefaultHomePage *string `json:"default_home_page"` } // Patch updates the User object with the modification request. @@ -138,6 +140,10 @@ func (u *UserModificationRequest) Patch(user *User) { if u.CJKReadingSpeed != nil { user.CJKReadingSpeed = *u.CJKReadingSpeed } + + if u.DefaultHomePage != nil { + user.DefaultHomePage = *u.DefaultHomePage + } } // UseTimezone converts last login date to the given timezone. diff --git a/storage/user.go b/storage/user.go index dded2185..a7be59aa 100644 --- a/storage/user.go +++ b/storage/user.go @@ -87,7 +87,8 @@ func (s *Storage) CreateUser(userCreationRequest *model.UserCreationRequest) (*m display_mode, entry_order, default_reading_speed, - cjk_reading_speed + cjk_reading_speed, + default_home_page ` tx, err := s.db.Begin() @@ -122,6 +123,7 @@ func (s *Storage) CreateUser(userCreationRequest *model.UserCreationRequest) (*m &user.EntryOrder, &user.DefaultReadingSpeed, &user.CJKReadingSpeed, + &user.DefaultHomePage, ) if err != nil { tx.Rollback() @@ -174,9 +176,10 @@ func (s *Storage) UpdateUser(user *model.User) error { display_mode=$15, entry_order=$16, default_reading_speed=$17, - cjk_reading_speed=$18 + cjk_reading_speed=$18, + default_home_page=$19 WHERE - id=$19 + id=$20 ` _, err = s.db.Exec( @@ -199,6 +202,7 @@ func (s *Storage) UpdateUser(user *model.User) error { user.EntryOrder, user.DefaultReadingSpeed, user.CJKReadingSpeed, + user.DefaultHomePage, user.ID, ) if err != nil { @@ -223,9 +227,10 @@ func (s *Storage) UpdateUser(user *model.User) error { display_mode=$14, entry_order=$15, default_reading_speed=$16, - cjk_reading_speed=$17 + cjk_reading_speed=$17, + default_home_page=$18 WHERE - id=$18 + id=$19 ` _, err := s.db.Exec( @@ -247,6 +252,7 @@ func (s *Storage) UpdateUser(user *model.User) error { user.EntryOrder, user.DefaultReadingSpeed, user.CJKReadingSpeed, + user.DefaultHomePage, user.ID, ) @@ -290,7 +296,8 @@ func (s *Storage) UserByID(userID int64) (*model.User, error) { display_mode, entry_order, default_reading_speed, - cjk_reading_speed + cjk_reading_speed, + default_home_page FROM users WHERE @@ -321,7 +328,8 @@ func (s *Storage) UserByUsername(username string) (*model.User, error) { display_mode, entry_order, default_reading_speed, - cjk_reading_speed + cjk_reading_speed, + default_home_page FROM users WHERE @@ -352,7 +360,8 @@ func (s *Storage) UserByField(field, value string) (*model.User, error) { display_mode, entry_order, default_reading_speed, - cjk_reading_speed + cjk_reading_speed, + default_home_page FROM users WHERE @@ -390,7 +399,8 @@ func (s *Storage) UserByAPIKey(token string) (*model.User, error) { u.display_mode, u.entry_order, u.default_reading_speed, - u.cjk_reading_speed + u.cjk_reading_speed, + u.default_home_page FROM users u LEFT JOIN @@ -423,6 +433,7 @@ func (s *Storage) fetchUser(query string, args ...interface{}) (*model.User, err &user.EntryOrder, &user.DefaultReadingSpeed, &user.CJKReadingSpeed, + &user.DefaultHomePage, ) if err == sql.ErrNoRows { @@ -516,7 +527,8 @@ func (s *Storage) Users() (model.Users, error) { display_mode, entry_order, default_reading_speed, - cjk_reading_speed + cjk_reading_speed, + default_home_page FROM users ORDER BY username ASC @@ -550,6 +562,7 @@ func (s *Storage) Users() (model.Users, error) { &user.EntryOrder, &user.DefaultReadingSpeed, &user.CJKReadingSpeed, + &user.DefaultHomePage, ) if err != nil { diff --git a/template/templates/common/layout.html b/template/templates/common/layout.html index 0baaf4b4..03acf193 100644 --- a/template/templates/common/layout.html +++ b/template/templates/common/layout.html @@ -56,7 +56,7 @@