From 3b84b0fc47e4a0dbe9e456f518c5e3a8f0741728 Mon Sep 17 00:00:00 2001 From: Nithin David Thomas <1277421+nithindavid@users.noreply.github.com> Date: Sat, 4 Nov 2023 04:59:44 +0530 Subject: [PATCH] feat: Creates 404 page for public portal [CW-2727] (#8293) Co-authored-by: Sojan Jose --- .../public/api/v1/portals/articles_controller.rb | 4 ---- .../public/api/v1/portals/base_controller.rb | 11 +++++++++++ .../public/api/v1/portals/categories_controller.rb | 7 +++---- app/views/public/api/v1/portals/error/404.html.erb | 12 ++++++++++++ config/locales/en.yml | 4 ++++ 5 files changed, 30 insertions(+), 8 deletions(-) create mode 100644 app/views/public/api/v1/portals/error/404.html.erb diff --git a/app/controllers/public/api/v1/portals/articles_controller.rb b/app/controllers/public/api/v1/portals/articles_controller.rb index bc5f6c0fd..4e967cfbb 100644 --- a/app/controllers/public/api/v1/portals/articles_controller.rb +++ b/app/controllers/public/api/v1/portals/articles_controller.rb @@ -39,10 +39,6 @@ class Public::Api::V1::Portals::ArticlesController < Public::Api::V1::Portals::B ) end - def portal - @portal ||= Portal.find_by!(slug: permitted_params[:slug], archived: false) - end - def list_params params.permit(:query, :locale, :sort, :status) end diff --git a/app/controllers/public/api/v1/portals/base_controller.rb b/app/controllers/public/api/v1/portals/base_controller.rb index d9fec27b1..70aa1e92e 100644 --- a/app/controllers/public/api/v1/portals/base_controller.rb +++ b/app/controllers/public/api/v1/portals/base_controller.rb @@ -18,6 +18,10 @@ class Public::Api::V1::Portals::BaseController < PublicController end end + def portal + @portal ||= Portal.find_by!(slug: params[:slug], archived: false) + end + def set_locale(&) switch_locale_with_portal(&) if params[:locale].present? switch_locale_with_article(&) if params[:article_slug].present? @@ -40,6 +44,8 @@ class Public::Api::V1::Portals::BaseController < PublicController def switch_locale_with_article(&) article = Article.find_by(slug: params[:article_slug]) + Rails.logger.info "Article: not found for slug: #{params[:article_slug]}" + render_404 && return if article.blank? @locale = if article.category.present? article.category.locale @@ -53,4 +59,9 @@ class Public::Api::V1::Portals::BaseController < PublicController def allow_iframe_requests response.headers.delete('X-Frame-Options') if @is_plain_layout_enabled end + + def render_404 + portal + render 'public/api/v1/portals/error/404', status: :not_found + end end diff --git a/app/controllers/public/api/v1/portals/categories_controller.rb b/app/controllers/public/api/v1/portals/categories_controller.rb index 7326f383b..c3a7b59e9 100644 --- a/app/controllers/public/api/v1/portals/categories_controller.rb +++ b/app/controllers/public/api/v1/portals/categories_controller.rb @@ -13,10 +13,9 @@ class Public::Api::V1::Portals::CategoriesController < Public::Api::V1::Portals: private def set_category - @category = @portal.categories.find_by!(locale: params[:locale], slug: params[:category_slug]) - end + @category = @portal.categories.find_by(locale: params[:locale], slug: params[:category_slug]) - def portal - @portal ||= Portal.find_by!(slug: params[:slug], archived: false) + Rails.logger.info "Category: not found for slug: #{params[:category_slug]}" + render_404 && return if @category.blank? end end diff --git a/app/views/public/api/v1/portals/error/404.html.erb b/app/views/public/api/v1/portals/error/404.html.erb new file mode 100644 index 000000000..5262e817e --- /dev/null +++ b/app/views/public/api/v1/portals/error/404.html.erb @@ -0,0 +1,12 @@ +
+
+ 🔍 +
+

<%= I18n.t('public_portal.404.title') %>

+

<%= I18n.t('public_portal.404.description') %>

+ +
diff --git a/config/locales/en.yml b/config/locales/en.yml index 8bb388897..e08681c22 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -220,6 +220,10 @@ en: made_with: Made with header: go_to_homepage: Go to the main site + 404: + title: Page not found + description: We couldn't find the page you were looking for. + back_to_home: Go to home page slack_unfurl: fields: name: Name