* Let override of ToS and CoC show in onboarding Prior to this commit any changes to the terms or code of conduct were not reflected in the onboarding links. With this commit, I'm leveraging a newly created method that first checks if there's a page for the given slug. If there is, use that page's copy. To test: - Overwrite default /terms page on a Forem - Navigate to /onboarding or sign up as a new user - Click on Terms of Use link text - Review Terms of Use Closes #15296 * Adding spec around not passing a block
106 lines
2.9 KiB
Ruby
106 lines
2.9 KiB
Ruby
module Admin
|
|
class PagesController < Admin::ApplicationController
|
|
layout "admin"
|
|
|
|
PAGE_ALLOWED_PARAMS = %i[
|
|
title slug body_markdown body_html body_json description template
|
|
is_top_level_path social_image landing_page
|
|
].freeze
|
|
|
|
def index
|
|
@pages = Page.all.order(created_at: :desc)
|
|
@code_of_conduct = Page.find_by(slug: Page::CODE_OF_CONDUCT_SLUG)
|
|
@privacy = Page.find_by(slug: Page::PRIVACY_SLUG)
|
|
@terms = Page.find_by(slug: Page::TERMS_SLUG)
|
|
end
|
|
|
|
def new
|
|
@landing_page = Page.landing_page
|
|
|
|
if (slug = params[:slug])
|
|
prepopulate_new_form(slug)
|
|
else
|
|
@page = Page.new
|
|
end
|
|
end
|
|
|
|
def edit
|
|
@page = Page.find(params[:id])
|
|
@landing_page = Page.landing_page
|
|
end
|
|
|
|
def update
|
|
@page = Page.find(params[:id])
|
|
|
|
if @page.update(page_params)
|
|
flash[:success] = "Page has been successfully updated."
|
|
redirect_to admin_pages_path
|
|
else
|
|
flash.now[:error] = @page.errors_as_sentence
|
|
render :edit
|
|
end
|
|
end
|
|
|
|
def create
|
|
@page = Page.new(page_params)
|
|
|
|
if @page.save
|
|
flash[:success] = "Page has been successfully created."
|
|
redirect_to admin_pages_path
|
|
else
|
|
flash.now[:error] = @page.errors_as_sentence
|
|
render :new
|
|
end
|
|
end
|
|
|
|
def destroy
|
|
@page = Page.find(params[:id])
|
|
@page.destroy
|
|
|
|
flash[:success] = "Page has been successfully deleted."
|
|
redirect_to admin_pages_path
|
|
end
|
|
|
|
private
|
|
|
|
def page_params
|
|
params.require(:page).permit(PAGE_ALLOWED_PARAMS)
|
|
end
|
|
|
|
def prepopulate_new_form(slug)
|
|
html = view_context.render partial: "pages/coc_text",
|
|
locals: {
|
|
community_name: view_context.community_name,
|
|
email_link: view_context.email_link
|
|
}
|
|
@page = case slug
|
|
when Page::CODE_OF_CONDUCT_SLUG
|
|
Page.new(
|
|
slug: slug,
|
|
body_html: html,
|
|
title: "Code of Conduct",
|
|
description: "A page that describes how to behave on this platform",
|
|
is_top_level_path: true,
|
|
)
|
|
when Page::PRIVACY_SLUG
|
|
Page.new(
|
|
slug: slug,
|
|
body_html: html,
|
|
title: "Privacy Policy",
|
|
description: "A page that describes the privacy policy",
|
|
is_top_level_path: true,
|
|
)
|
|
when Page::TERMS_SLUG
|
|
Page.new(
|
|
slug: slug,
|
|
body_html: html,
|
|
title: "Terms of Use",
|
|
description: "A page that describes the terms of use for the application",
|
|
is_top_level_path: true,
|
|
)
|
|
else
|
|
Page.new
|
|
end
|
|
end
|
|
end
|
|
end
|