Browse Source

feat(settings): add validation for entry order and categories sorting order

Frédéric Guillot 11 months ago
parent
commit
5ae2cbd943

+ 2 - 0
internal/locale/translations/de_DE.json

@@ -114,9 +114,11 @@
     "error.http_service_unavailable": "Die Webseite ist aufgrund eines Internal-Server-Fehlers derzeit nicht verfügbar. Das Problem liegt nicht bei Miniflux. Bitte versuchen Sie es später erneut.",
     "error.http_too_many_requests": "Miniflux hat zu viele Anfragen an diese Webseite gestellt. Bitte versuchen Sie es später erneut oder ändern Sie die Konfiguration der Anwendung.",
     "error.http_unexpected_status_code": "Die Webseite ist aufgrund eines eines unerwarteten HTTP-Fehlers derzeit nicht verfügbar: %d. Das Problem liegt nicht bei Miniflux. Bitte versuchen Sie es später erneut.",
+    "error.invalid_categories_sorting_order": "Ungültige Kategorie-Sortierreihenfolge.",
     "error.invalid_default_home_page": "Ungültige Standard-Startseite!",
     "error.invalid_display_mode": "Progressive-Web-App- (PWA-)Anzeigemodus",
     "error.invalid_entry_direction": "Ungültige Sortierreihenfolge.",
+    "error.invalid_entry_order": "Ungültige Sortierreihenfolge.",
     "error.invalid_feed_proxy_url": "Ungültige Proxy-URL.",
     "error.invalid_feed_url": "Ungültiger Feed-URL.",
     "error.invalid_gesture_nav": "Ungültige Gestennavigation.",

+ 2 - 0
internal/locale/translations/el_EL.json

@@ -114,9 +114,11 @@
     "error.http_service_unavailable": "The website is not available at the moment due to an internal server error. The problem is not on Miniflux side. Please, try again later.",
     "error.http_too_many_requests": "Miniflux generated too many requests to this website. Please, try again later or change the application configuration.",
     "error.http_unexpected_status_code": "The website is not available at the moment due to an unexpected HTTP status code: %d. The problem is not on Miniflux side. Please, try again later.",
+    "error.invalid_categories_sorting_order": "Η κατηγορία δεν μπορεί να είναι κενή.",
     "error.invalid_default_home_page": "Μη έγκυρη προεπιλεγμένη αρχική σελίδα!",
     "error.invalid_display_mode": "Μη έγκυρη λειτουργία εμφάνισης εφαρμογών ιστού.",
     "error.invalid_entry_direction": "Μη έγκυρη κατεύθυνση ταξινόμησης άρθρων.",
+    "error.invalid_entry_order": "Η σειρά των καταχωρήσεων είναι μη έγκυρη.",
     "error.invalid_feed_proxy_url": "Invalid proxy URL.",
     "error.invalid_feed_url": "Μη έγκυρη διεύθυνση URL ροής.",
     "error.invalid_gesture_nav": "Μη έγκυρη πλοήγηση με χειρονομίες.",

+ 2 - 0
internal/locale/translations/en_US.json

@@ -114,9 +114,11 @@
     "error.http_service_unavailable": "The website is not available at the moment due to an internal server error. The problem is not on Miniflux side. Please, try again later.",
     "error.http_too_many_requests": "Miniflux generated too many requests to this website. Please, try again later or change the application configuration.",
     "error.http_unexpected_status_code": "The website is not available at the moment due to an unexpected HTTP status code: %d. The problem is not on Miniflux side. Please, try again later.",
+    "error.invalid_categories_sorting_order": "Invalid categories sorting order.",
     "error.invalid_default_home_page": "Invalid default homepage!",
     "error.invalid_display_mode": "Invalid web app display mode.",
     "error.invalid_entry_direction": "Invalid entry direction.",
+    "error.invalid_entry_order": "Invalid entry order.",
     "error.invalid_feed_proxy_url": "Invalid proxy URL.",
     "error.invalid_feed_url": "Invalid feed URL.",
     "error.invalid_gesture_nav": "Invalid gesture navigation.",

+ 2 - 0
internal/locale/translations/es_ES.json

@@ -114,9 +114,11 @@
     "error.http_service_unavailable": "El sitio web no está disponible en estos momentos debido a un error interno del servidor. El problema no está en el lado de Miniflux. Por favor, inténtalo de nuevo más tarde.",
     "error.http_too_many_requests": "Miniflux generó demasiadas solicitudes a este sitio web. Por favor, inténtalo de nuevo más tarde o cambia la configuración de la aplicación.",
     "error.http_unexpected_status_code": "El sitio web no está disponible en este momento debido a un código de estado HTTP inesperado: %d. El problema no está en el lado de Miniflux. Por favor, inténtalo de nuevo más tarde.",
+    "error.invalid_categories_sorting_order": "Orden de clasificación de categorías no válido.",
     "error.invalid_default_home_page": "¡Página de inicio por defecto no válida!",
     "error.invalid_display_mode": "Modo de visualización de la aplicación web no válido.",
     "error.invalid_entry_direction": "Dirección de artículo no válida.",
+    "error.invalid_entry_order": "Orden de artículo no válido.",
     "error.invalid_feed_proxy_url": "Invalid proxy URL.",
     "error.invalid_feed_url": "URL de feed no válida.",
     "error.invalid_gesture_nav": "Navegación por gestos no válida.",

+ 2 - 0
internal/locale/translations/fi_FI.json

@@ -114,9 +114,11 @@
     "error.http_service_unavailable": "The website is not available at the moment due to an internal server error. The problem is not on Miniflux side. Please, try again later.",
     "error.http_too_many_requests": "Miniflux generated too many requests to this website. Please, try again later or change the application configuration.",
     "error.http_unexpected_status_code": "The website is not available at the moment due to an unexpected HTTP status code: %d. The problem is not on Miniflux side. Please, try again later.",
+    "error.invalid_categories_sorting_order": "Virheellinen kategorioiden lajittelujärjestys.",
     "error.invalid_default_home_page": "Väärä oletusarvoinen kotisivu!",
     "error.invalid_display_mode": "Virheellinen verkkosovelluksen näyttötila.",
     "error.invalid_entry_direction": "Invalid entry direction.",
+    "error.invalid_entry_order": "Virheellinen artikkelin lajittelu.",
     "error.invalid_feed_proxy_url": "Invalid proxy URL.",
     "error.invalid_feed_url": "Virheellinen syötteen URL-osoite.",
     "error.invalid_gesture_nav": "Virheellinen ele-navigointi.",

+ 2 - 0
internal/locale/translations/fr_FR.json

@@ -114,9 +114,11 @@
     "error.http_service_unavailable": "Le site web n'est pas disponible pour le moment. Le problème ne vient pas de Miniflux. Veuillez réessayer plus tard.",
     "error.http_too_many_requests": "Miniflux a généré trop de requêtes vers ce site web. Veuillez réessayer plus tard ou changez la configuration de l'application.",
     "error.http_unexpected_status_code": "Le site web a répondu avec un code HTTP inattendu : %d. Le problème ne vient pas de Miniflux. Veuillez réessayer plus tard.",
+    "error.invalid_categories_sorting_order": "L'ordre de tri des catégories n'est pas valide.",
     "error.invalid_default_home_page": "Page d'accueil par défaut invalide !",
     "error.invalid_display_mode": "Mode d'affichage de l'application web non valide.",
     "error.invalid_entry_direction": "Ordre de trie non valide.",
+    "error.invalid_entry_order": "Ordre de tri non valide.",
     "error.invalid_feed_proxy_url": "L'URL du proxy n'est pas valide.",
     "error.invalid_feed_url": "URL de flux non valide.",
     "error.invalid_gesture_nav": "Navigation gestuelle non valide.",

+ 2 - 0
internal/locale/translations/hi_IN.json

@@ -114,9 +114,11 @@
     "error.http_service_unavailable": "The website is not available at the moment due to an internal server error. The problem is not on Miniflux side. Please, try again later.",
     "error.http_too_many_requests": "Miniflux generated too many requests to this website. Please, try again later or change the application configuration.",
     "error.http_unexpected_status_code": "The website is not available at the moment due to an unexpected HTTP status code: %d. The problem is not on Miniflux side. Please, try again later.",
+    "error.invalid_categories_sorting_order": "अमान्य श्रेणी क्रम।",
     "error.invalid_default_home_page": "अमान्य डिफ़ॉल्ट मुखपृष्ठ!",
     "error.invalid_display_mode": "अमान्य वेब ऐप्लिकेशन प्रदर्शन मोड.",
     "error.invalid_entry_direction": "अमान्य प्रवेश दिशा।",
+    "error.invalid_entry_order": "अमान्य प्रविष्टि क्रम।",
     "error.invalid_feed_proxy_url": "Invalid proxy URL.",
     "error.invalid_feed_url": "दृष्टिकोण यूआरएल.",
     "error.invalid_gesture_nav": "अमान्य इशारा नेविगेशन।",

+ 2 - 0
internal/locale/translations/id_ID.json

@@ -112,9 +112,11 @@
     "error.http_service_unavailable": "The website is not available at the moment due to an internal server error. The problem is not on Miniflux side. Please, try again later.",
     "error.http_too_many_requests": "Miniflux generated too many requests to this website. Please, try again later or change the application configuration.",
     "error.http_unexpected_status_code": "The website is not available at the moment due to an unexpected HTTP status code: %d. The problem is not on Miniflux side. Please, try again later.",
+    "error.invalid_categories_sorting_order": "Urutan penyortiran kategori tidak valid.",
     "error.invalid_default_home_page": "Beranda baku tidak valid!",
     "error.invalid_display_mode": "Mode tampilan aplikasi web tidak valid.",
     "error.invalid_entry_direction": "Urutan entri tidak valid.",
+    "error.invalid_entry_order": "Urutan entri tidak valid.",
     "error.invalid_feed_proxy_url": "Invalid proxy URL.",
     "error.invalid_feed_url": "URL umpan tidak valid.",
     "error.invalid_gesture_nav": "Navigasi gestur tidak valid.",

+ 2 - 0
internal/locale/translations/it_IT.json

@@ -114,9 +114,11 @@
     "error.http_service_unavailable": "The website is not available at the moment due to an internal server error. The problem is not on Miniflux side. Please, try again later.",
     "error.http_too_many_requests": "Miniflux generated too many requests to this website. Please, try again later or change the application configuration.",
     "error.http_unexpected_status_code": "The website is not available at the moment due to an unexpected HTTP status code: %d. The problem is not on Miniflux side. Please, try again later.",
+    "error.invalid_categories_sorting_order": "L'ordinamento delle categorie non è valido.",
     "error.invalid_default_home_page": "Pagina iniziale predefinita non valida!",
     "error.invalid_display_mode": "Modalità di visualizzazione web app non valida.",
     "error.invalid_entry_direction": "Ordinamento non valido.",
+    "error.invalid_entry_order": "L'ordinamento delle voci non è valido.",
     "error.invalid_feed_proxy_url": "Invalid proxy URL.",
     "error.invalid_feed_url": "URL del feed non valido.",
     "error.invalid_gesture_nav": "Navigazione gestuale non valida.",

+ 2 - 0
internal/locale/translations/ja_JP.json

@@ -112,9 +112,11 @@
     "error.http_service_unavailable": "The website is not available at the moment due to an internal server error. The problem is not on Miniflux side. Please, try again later.",
     "error.http_too_many_requests": "Miniflux generated too many requests to this website. Please, try again later or change the application configuration.",
     "error.http_unexpected_status_code": "The website is not available at the moment due to an unexpected HTTP status code: %d. The problem is not on Miniflux side. Please, try again later.",
+    "error.invalid_categories_sorting_order": "カテゴリの表示順が無効です。",
     "error.invalid_default_home_page": "デフォルトのトップページが無効です",
     "error.invalid_display_mode": "Web アプリの表示モードが無効です。",
     "error.invalid_entry_direction": "記事の表示順が無効です。",
+    "error.invalid_entry_order": "記事の表示順が無効です。",
     "error.invalid_feed_proxy_url": "Invalid proxy URL.",
     "error.invalid_feed_url": "フィード URL が無効です。",
     "error.invalid_gesture_nav": "ジェスチャー ナビゲーションが無効です。",

+ 2 - 0
internal/locale/translations/nan_Latn_pehoeji.json

@@ -112,9 +112,11 @@
     "error.http_service_unavailable": "Chit ê bāng-chām in-ūi in ka-kī lāi-pō͘ ū būn-tôe,m̄ sī Miniflux chia ê būn-tôe, chhiáⁿ tán--chi̍t-ē chiah koh chhì-khòaⁿ-māi.",
     "error.http_too_many_requests": "Miniflux tùi chit ê bāng-chām ê chhéng-kiû siuⁿ kè chōe, chhiáⁿ têng chhì-khòaⁿ-māi ah-sī tiâu-chéng thêng-sek siat-tēng.",
     "error.http_unexpected_status_code": "Chit ê bāng-chām chòe liáu chi̍t ê liāu-bōe-tio̍h ê HTTP chōng-thài bé: %d, chhiáⁿ tán--chi̍t-ē chiah koh chhì-khòaⁿ-māi.",
+    "error.invalid_categories_sorting_order": "Lūi-pia̍t ê chōe pái bô-hāu, chhiáⁿ tán-hāu %d hun-cheng āu koh chhì-khòaⁿ-māi.",
     "error.invalid_default_home_page": "Ū-siat chú-ia̍h ū būn-tôe!",
     "error.invalid_display_mode": "Ū būn-tôe ê su-li̍p bô͘-sek.",
     "error.invalid_entry_direction": "Ū būn-tôe ê su-li̍p hong-hiòng.",
+    "error.invalid_entry_order": "Siau-sit ê chōe pái bô-hāu, chhiáⁿ tán-hāu %d hun-cheng āu koh chhì-khòaⁿ-māi.",
     "error.invalid_feed_proxy_url": "Invalid proxy URL.",
     "error.invalid_feed_url": "Beh tēng ê siau-sit lâi-goân ê bāng-chí ū būn-tôe.",
     "error.invalid_gesture_nav": "Chhiú-sè tō-lám ū būn-tôe.",

+ 2 - 0
internal/locale/translations/nl_NL.json

@@ -114,9 +114,11 @@
     "error.http_service_unavailable": "De website is momenteel niet beschikbaar vanwege een interne-server-fout. De oorzaak hiervan ligt niet bij Miniflux. Probeer het later nogmaals aub.",
     "error.http_too_many_requests": "Miniflux heeft te veel aanvragen gegenereerd voor deze website. Probeer het later nog eens of wijzig de applicatieconfiguratie.",
     "error.http_unexpected_status_code": "De website is momenteel niet beschikbaar vanwege een onverwachte HTTP-statuscode: %d. De oorzaak hiervan ligt niet bij Miniflux. Probeer het later nogmaals aub.",
+    "error.invalid_categories_sorting_order": "Ongeldige volgorde van categorieën.",
     "error.invalid_default_home_page": "Ongeldige startpagina!",
     "error.invalid_display_mode": "Ongeldige weergavemodus voor de webapp.",
     "error.invalid_entry_direction": "Ongeldige sorteervolgorde.",
+    "error.invalid_entry_order": "Ongeldige volgorde van artikelen.",
     "error.invalid_feed_proxy_url": "Invalid proxy URL.",
     "error.invalid_feed_url": "Ongeldige feed URL.",
     "error.invalid_gesture_nav": "Ongeldige gebarennavigatie.",

+ 2 - 0
internal/locale/translations/pl_PL.json

@@ -116,9 +116,11 @@
     "error.http_service_unavailable": "Strona jest w tej chwili niedostępna z powodu wewnętrznego błędu serwera. Problem nie leży po stronie Miniflux. Spróbuj ponownie później.",
     "error.http_too_many_requests": "Miniflux wygenerował zbyt wiele żądań do tej witryny. Spróbuj ponownie później lub zmień konfigurację aplikacji.",
     "error.http_unexpected_status_code": "Strona jest w tej chwili niedostępna z powodu nieoczekiwanego kodu stanu HTTP: %d. Problem nie leży po stronie Miniflux. Spróbuj ponownie później.",
+    "error.invalid_categories_sorting_order": "Nieprawidłowa kategoria sortowania.",
     "error.invalid_default_home_page": "Nieprawidłowa domyślna strona główna!",
     "error.invalid_display_mode": "Nieprawidłowy tryb wyświetlania aplikacji sieciowej.",
     "error.invalid_entry_direction": "Nieprawidłowa kolejność sortowania.",
+    "error.invalid_entry_order": "Nieprawidłowa kolejność sortowania wpisów.",
     "error.invalid_feed_proxy_url": "Nieprawidłowy adres URL serwera proxy.",
     "error.invalid_feed_url": "Nieprawidłowy adres URL kanału.",
     "error.invalid_gesture_nav": "Nieprawidłowa nawigacja gestami.",

+ 2 - 0
internal/locale/translations/pt_BR.json

@@ -114,9 +114,11 @@
     "error.http_service_unavailable": "The website is not available at the moment due to an internal server error. The problem is not on Miniflux side. Please, try again later.",
     "error.http_too_many_requests": "Miniflux generated too many requests to this website. Please, try again later or change the application configuration.",
     "error.http_unexpected_status_code": "The website is not available at the moment due to an unexpected HTTP status code: %d. The problem is not on Miniflux side. Please, try again later.",
+    "error.invalid_categories_sorting_order": "A ordem de classificação das categorias não é válida.",
     "error.invalid_default_home_page": "Página inicial por defeito inválida!",
     "error.invalid_display_mode": "Modo de exibição de aplicativo inválido da web.",
     "error.invalid_entry_direction": "Direção de entrada inválida.",
+    "error.invalid_entry_order": "A ordem de entrada é inválida.",
     "error.invalid_feed_proxy_url": "Invalid proxy URL.",
     "error.invalid_feed_url": "URL de feed inválido.",
     "error.invalid_gesture_nav": "Navegação por gestos inválida.",

+ 2 - 0
internal/locale/translations/ro_RO.json

@@ -116,9 +116,11 @@
     "error.http_service_unavailable": "Acest site web nu este disponibil momentan din cauza unei erori generată de server. Problema nu este de la Miniflux. Vă rugăm să reîncercați mai târziu.",
     "error.http_too_many_requests": "Miniflux a generat prea multe solicitări pe acest site web. Vă rog, încercați mai tîrziu sau modificați configurațiile aplicației.",
     "error.http_unexpected_status_code": "Acest site web nu este disponibil momentan din cauza unei erori HTTP: %d. Problema nu este de la Miniflux. Vă rugăm să reîncercați mai târziu.",
+    "error.invalid_categories_sorting_order": "Ordinea de sortare a categoriilor nu este validă.",
     "error.invalid_default_home_page": "Pagină de start invalidă!",
     "error.invalid_display_mode": "Mod invalid de afișare în aplicația web.",
     "error.invalid_entry_direction": "Direcție invalidă ăn intrare.",
+    "error.invalid_entry_order": "Direcție de sortare invalidă.",
     "error.invalid_feed_proxy_url": "Invalid proxy URL.",
     "error.invalid_feed_url": "Adresa URL a fluxului este invalidă.",
     "error.invalid_gesture_nav": "Gest de navigare invalid.",

+ 2 - 0
internal/locale/translations/ru_RU.json

@@ -116,9 +116,11 @@
     "error.http_service_unavailable": "The website is not available at the moment due to an internal server error. The problem is not on Miniflux side. Please, try again later.",
     "error.http_too_many_requests": "Miniflux generated too many requests to this website. Please, try again later or change the application configuration.",
     "error.http_unexpected_status_code": "The website is not available at the moment due to an unexpected HTTP status code: %d. The problem is not on Miniflux side. Please, try again later.",
+    "error.invalid_categories_sorting_order": "Недопустимый порядок сортировки категорий.",
     "error.invalid_default_home_page": "Недопустимая домашняя страница по умолчанию!",
     "error.invalid_display_mode": "Недопустимый режим отображения веб-приложения.",
     "error.invalid_entry_direction": "Недопустимая сортировка записей.",
+    "error.invalid_entry_order": "Недопустимый порядок статей.",
     "error.invalid_feed_proxy_url": "Invalid proxy URL.",
     "error.invalid_feed_url": "Недействительная ссылка подписки.",
     "error.invalid_gesture_nav": "Недопустимая навигация жестами.",

+ 2 - 0
internal/locale/translations/tr_TR.json

@@ -114,9 +114,11 @@
     "error.http_service_unavailable": "Dahili sunucu hatası nedeniyle web sitesi şu anda kullanılamıyor. Sorun Miniflux tarafında değil. Lütfen daha sonra tekrar deneyiniz.",
     "error.http_too_many_requests": "Miniflux bu web sitesine çok fazla istek oluşturdu. Lütfen daha sonra tekrar deneyin veya uygulama yapılandırmasını değiştirin.",
     "error.http_unexpected_status_code": "Beklenmeyen bir HTTP durum kodu nedeniyle bu websitesi şu anda kullanılamıyor: %d. Sorun Miniflux tarafında değil. Lütfen daha sonra tekrar deneyiniz.",
+    "error.invalid_categories_sorting_order": "Geçersiz kategori sıralama düzeni.",
     "error.invalid_default_home_page": "Geçersiz varsayılan ana sayfa!",
     "error.invalid_display_mode": "Geçersiz web uygulaması görüntüleme modu.",
     "error.invalid_entry_direction": "Geçersiz makele sıralaması.",
+    "error.invalid_entry_order": "Geçersiz makele sıralaması.",
     "error.invalid_feed_proxy_url": "Invalid proxy URL.",
     "error.invalid_feed_url": "Geçersiz besleme URL'si.",
     "error.invalid_gesture_nav": "Hareketle gezinme geçersiz.",

+ 2 - 0
internal/locale/translations/uk_UA.json

@@ -116,9 +116,11 @@
     "error.http_service_unavailable": "The website is not available at the moment due to an internal server error. The problem is not on Miniflux side. Please, try again later.",
     "error.http_too_many_requests": "Miniflux generated too many requests to this website. Please, try again later or change the application configuration.",
     "error.http_unexpected_status_code": "The website is not available at the moment due to an unexpected HTTP status code: %d. The problem is not on Miniflux side. Please, try again later.",
+    "error.invalid_categories_sorting_order": "Недійсний порядок сортування категорій.",
     "error.invalid_default_home_page": "Недійсна домашня сторінка за замовчуванням!",
     "error.invalid_display_mode": "Недійсний режим відображення.",
     "error.invalid_entry_direction": "Недійсний напрямок запису.",
+    "error.invalid_entry_order": "Недійсний порядок запису.",
     "error.invalid_feed_proxy_url": "Invalid proxy URL.",
     "error.invalid_feed_url": "Недійсна URL-адреса стрічки.",
     "error.invalid_gesture_nav": "Недійсна навігація жестами.",

+ 2 - 0
internal/locale/translations/zh_CN.json

@@ -112,9 +112,11 @@
     "error.http_service_unavailable": "当前由于服务器内部错误导致该网站无法访问,问题不在 Miniflux,请稍后重试。",
     "error.http_too_many_requests": "Miniflux 对该网站请求过多次数,请稍后重试或修改应用配置项。",
     "error.http_unexpected_status_code": "当前由于意外的 HTTP 状态码:%d 导致该网站无法访问,问题不在 Miniflux,请稍后重试。",
+    "error.invalid_categories_sorting_order": "无效的分类排序",
     "error.invalid_default_home_page": "无效的默认主页!",
     "error.invalid_display_mode": "无效的网页应用显示模式。",
     "error.invalid_entry_direction": "无效的输入方向。",
+    "error.invalid_entry_order": "无效的条目排序",
     "error.invalid_feed_proxy_url": "Invalid proxy URL.",
     "error.invalid_feed_url": "订阅源的网址无效。",
     "error.invalid_gesture_nav": "手势导航无效。",

+ 2 - 0
internal/locale/translations/zh_TW.json

@@ -112,9 +112,11 @@
     "error.http_service_unavailable": "此網站目前因內部問題無法使用,問題不在 Miniflux,請稍後重試。",
     "error.http_too_many_requests": "Miniflux 對此網站的請求過多,請稍後重試或調整程式設定。",
     "error.http_unexpected_status_code": "此網站回應了意外的 HTTP 狀態碼:%d,請稍後重試。",
+    "error.invalid_categories_sorting_order": "無效的分類排序",
     "error.invalid_default_home_page": "預設主頁無效!",
     "error.invalid_display_mode": "無效的顯示模式。",
     "error.invalid_entry_direction": "無效的輸入方向。",
+    "error.invalid_entry_order": "無效的文章排序依據。",
     "error.invalid_feed_proxy_url": "Invalid proxy URL.",
     "error.invalid_feed_url": "訂閱網址無效。",
     "error.invalid_gesture_nav": "手勢導覽無效。",

+ 18 - 16
internal/ui/settings_update.go

@@ -76,22 +76,24 @@ func (h *handler) updateSettings(w http.ResponseWriter, r *http.Request) {
 	}
 
 	userModificationRequest := &model.UserModificationRequest{
-		Username:              model.OptionalString(settingsForm.Username),
-		Password:              model.OptionalString(settingsForm.Password),
-		Theme:                 model.OptionalString(settingsForm.Theme),
-		Language:              model.OptionalString(settingsForm.Language),
-		Timezone:              model.OptionalString(settingsForm.Timezone),
-		EntryDirection:        model.OptionalString(settingsForm.EntryDirection),
-		EntriesPerPage:        model.OptionalNumber(settingsForm.EntriesPerPage),
-		DisplayMode:           model.OptionalString(settingsForm.DisplayMode),
-		GestureNav:            model.OptionalString(settingsForm.GestureNav),
-		DefaultReadingSpeed:   model.OptionalNumber(settingsForm.DefaultReadingSpeed),
-		CJKReadingSpeed:       model.OptionalNumber(settingsForm.CJKReadingSpeed),
-		DefaultHomePage:       model.OptionalString(settingsForm.DefaultHomePage),
-		MediaPlaybackRate:     model.OptionalNumber(settingsForm.MediaPlaybackRate),
-		BlockFilterEntryRules: model.OptionalString(settingsForm.BlockFilterEntryRules),
-		KeepFilterEntryRules:  model.OptionalString(settingsForm.KeepFilterEntryRules),
-		ExternalFontHosts:     model.OptionalString(settingsForm.ExternalFontHosts),
+		Username:               model.OptionalString(settingsForm.Username),
+		Password:               model.OptionalString(settingsForm.Password),
+		Theme:                  model.OptionalString(settingsForm.Theme),
+		Language:               model.OptionalString(settingsForm.Language),
+		Timezone:               model.OptionalString(settingsForm.Timezone),
+		EntryDirection:         model.OptionalString(settingsForm.EntryDirection),
+		EntryOrder:             model.OptionalString(settingsForm.EntryOrder),
+		EntriesPerPage:         model.OptionalNumber(settingsForm.EntriesPerPage),
+		CategoriesSortingOrder: model.OptionalString(settingsForm.CategoriesSortingOrder),
+		DisplayMode:            model.OptionalString(settingsForm.DisplayMode),
+		GestureNav:             model.OptionalString(settingsForm.GestureNav),
+		DefaultReadingSpeed:    model.OptionalNumber(settingsForm.DefaultReadingSpeed),
+		CJKReadingSpeed:        model.OptionalNumber(settingsForm.CJKReadingSpeed),
+		DefaultHomePage:        model.OptionalString(settingsForm.DefaultHomePage),
+		MediaPlaybackRate:      model.OptionalNumber(settingsForm.MediaPlaybackRate),
+		BlockFilterEntryRules:  model.OptionalString(settingsForm.BlockFilterEntryRules),
+		KeepFilterEntryRules:   model.OptionalString(settingsForm.KeepFilterEntryRules),
+		ExternalFontHosts:      model.OptionalString(settingsForm.ExternalFontHosts),
 	}
 
 	if validationErr := validator.ValidateUserModification(h.store, loggedUser.ID, userModificationRequest); validationErr != nil {

+ 19 - 0
internal/validator/user.go

@@ -74,12 +74,24 @@ func ValidateUserModification(store *storage.Storage, userID int64, changes *mod
 		}
 	}
 
+	if changes.EntryOrder != nil {
+		if err := ValidateEntryOrder(*changes.EntryOrder); err != nil {
+			return locale.NewLocalizedError("error.invalid_entry_order")
+		}
+	}
+
 	if changes.EntriesPerPage != nil {
 		if err := validateEntriesPerPage(*changes.EntriesPerPage); err != nil {
 			return err
 		}
 	}
 
+	if changes.CategoriesSortingOrder != nil {
+		if err := validateCategoriesSortingOrder(*changes.CategoriesSortingOrder); err != nil {
+			return err
+		}
+	}
+
 	if changes.DisplayMode != nil {
 		if err := validateDisplayMode(*changes.DisplayMode); err != nil {
 			return err
@@ -214,6 +226,13 @@ func validateEntriesPerPage(entriesPerPage int) *locale.LocalizedError {
 	return nil
 }
 
+func validateCategoriesSortingOrder(order string) *locale.LocalizedError {
+	if order != "alphabetical" && order != "unread_count" {
+		return locale.NewLocalizedError("error.invalid_categories_sorting_order")
+	}
+	return nil
+}
+
 func validateDisplayMode(displayMode string) *locale.LocalizedError {
 	if displayMode != "fullscreen" && displayMode != "standalone" && displayMode != "minimal-ui" && displayMode != "browser" {
 		return locale.NewLocalizedError("error.invalid_display_mode")