Allow admins to define core sidebar tags in config (#6641) [deploy]

This commit is contained in:
Ben Halpern 2020-03-16 08:54:32 -04:00 committed by GitHub
parent c913197fac
commit 58e524acdc
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
6 changed files with 31 additions and 122 deletions

View file

@ -30,7 +30,7 @@ class Internal::ConfigsController < Internal::ApplicationController
mailchimp_tag_moderators_id mailchimp_community_moderators_id
periodic_email_digest_max periodic_email_digest_min suggested_tags
rate_limit_comment_creation rate_limit_published_article_creation
rate_limit_image_upload rate_limit_email_recipient
rate_limit_image_upload rate_limit_email_recipient sidebar_tags
]
params.require(:site_config).permit(allowed_params)
end
@ -43,6 +43,7 @@ class Internal::ConfigsController < Internal::ApplicationController
def clean_up_params
config = params[:site_config]
config[:suggested_tags] = config[:suggested_tags].downcase.delete(" ") if config[:suggested_tags]
config[:sidebar_tags] = config[:sidebar_tags].downcase.delete(" ") if config[:sidebar_tags]
end
def bust_relevant_caches

View file

@ -236,23 +236,6 @@ class Article < ApplicationRecord
stories.pluck(:path, :title, :comments_count, :created_at)
end
def self.active_eli5(time_ago)
stories = published.cached_tagged_with("explainlikeimfive")
stories = if time_ago == "latest"
stories.order("published_at DESC").limit(3)
elsif time_ago
stories.order("comments_count DESC").
where("published_at > ?", time_ago).
limit(6)
else
stories.order("last_comment_at DESC").
where("published_at > ?", 5.days.ago).
limit(3)
end
stories.pluck(:path, :title, :comments_count, :created_at)
end
def self.seo_boostable(tag = nil, time_ago = 18.days.ago)
time_ago = 5.days.ago if time_ago == "latest" # Time ago sometimes returns this phrase instead of a date
time_ago = 75.days.ago if time_ago.nil? # Time ago sometimes is given as nil and should then be the default. I know, sloppy.

View file

@ -56,4 +56,5 @@ class SiteConfig < RailsSettings::Base
# Tags
field :suggested_tags, type: :array, default: %w[beginners career computerscience javascript security ruby rails swift kotlin]
field :sidebar_tags, type: :array, default: %w[help challenge discuss explainlikeimfive meta watercooler]
end

View file

@ -39,120 +39,26 @@
</div>
</div>
<% end %>
<div class="widget">
<header>
<a href="/t/help"><h4>#help</h4></a>
</header>
<div class="widget-body">
<div class="widget-link-list">
<% Article.active_help.limit(8).pluck(:path, :title, :comments_count, :created_at).each do |plucked_article| %>
<%= render "articles/widget_list_item", plucked_article: plucked_article, show_comment_count: true %>
<% end %>
</div>
<a class="cta cta-button" href="/new/help">ASK FOR HELP</a>
<p class="widget-subtext"><em>Let's figure this out together.</em></p>
</div>
</div>
<% if Article.active_threads(["ama"], Timeframer.new(params[:timeframe]).datetime).any? %>
<% SiteConfig.sidebar_tags.each do |tag| %>
<div class="widget">
<header>
<a href="/t/ama"><h4>#ama</h4></a>
<a href="/t/<%= tag %>"><h4>#<%= tag %></h4></a>
</header>
<div class="widget-body">
<div class="widget-link-list">
<% Article.active_threads(["ama"], Timeframer.new(params[:timeframe]).datetime, 5).each do |plucked_article| %>
<%= render "articles/widget_list_item", plucked_article: plucked_article, show_comment_count: true %>
<% if tag == "help" %>
<% Article.active_help.limit(8).pluck(:path, :title, :comments_count, :created_at).each do |plucked_article| %>
<%= render "articles/widget_list_item", plucked_article: plucked_article, show_comment_count: true %>
<% end %>
<% else %>
<% Article.active_threads([tag], Timeframer.new(params[:timeframe]).datetime, 5).each do |plucked_article| %>
<%= render "articles/widget_list_item", plucked_article: plucked_article, show_comment_count: true %>
<% end %>
<% end %>
</div>
<a class="cta cta-button" href="/new/ama">START AN "AMA"</a>
<p class="widget-subtext"><em>Everybody has a story to tell.</em></p>
</div>
</div>
<% end %>
<div class="widget">
<header>
<a href="/t/challenge"><h4>#challenge</h4></a>
</header>
<div class="widget-body">
<div class="widget-link-list">
<% Article.active_threads(["challenge"], Timeframer.new(params[:timeframe]).datetime, 5).each do |plucked_article| %>
<%= render "articles/widget_list_item", plucked_article: plucked_article, show_comment_count: true %>
<% end %>
</div>
<a class="cta cta-button" href="/new/challenge">CREATE A CHALLENGE</a>
<p class="widget-subtext"><em>Flex your skills, stay sharp.</em></p>
</div>
</div>
<div class="widget">
<header>
<a href="/t/discuss"><h4>#discuss</h4></a>
</header>
<div class="widget-body">
<div class="widget-link-list">
<% Article.active_threads(["discuss"], Timeframer.new(params[:timeframe]).datetime).each do |plucked_article| %>
<%= render "articles/widget_list_item", plucked_article: plucked_article, show_comment_count: true %>
<% end %>
</div>
<a class="cta cta-button" href="/new/discuss">START A DISCUSSION</a>
<p class="widget-subtext"><em>What does the community think?</em></p>
</div>
</div>
<div class="widget">
<header>
<a href="/t/explainlikeimfive"><h4>#explainlikeimfive</h4></a>
</header>
<div class="widget-body">
<div class="widget-link-list">
<% Article.active_eli5(Timeframer.new(params[:timeframe]).datetime).each do |plucked_article| %>
<%= render "articles/widget_list_item", plucked_article: plucked_article, show_comment_count: true %>
<% end %>
</div>
<a class="cta cta-button" href="/new/explainlikeimfive">ASK FOR AN EXPLANATION</a>
<p class="widget-subtext"><em>Need simplicity in your life?</em></p>
</div>
</div>
<div class="widget">
<header>
<a href="/t/healthydebate"><h4>#healthydebate</h4></a>
</header>
<div class="widget-body">
<div class="widget-link-list">
<% Article.active_threads(["healthydebate"], Timeframer.new(params[:timeframe]).datetime).each do |plucked_article| %>
<%= render "articles/widget_list_item", plucked_article: plucked_article, show_comment_count: true %>
<% end %>
</div>
<a class="cta cta-button" href="/new/healthydebate">START A DEBATE</a>
<p class="widget-subtext"><em>We won't agree on everything.</em></p>
</div>
</div>
<div class="widget">
<header>
<a href="/t/meta"><h4>#meta</h4></a>
</header>
<div class="widget-body">
<div class="widget-link-list">
<% Article.active_threads(["meta"], Timeframer.new(params[:timeframe]).datetime).each do |plucked_article| %>
<%= render "articles/widget_list_item", plucked_article: plucked_article, show_comment_count: true %>
<% end %>
</div>
<a class="cta cta-button" href="/new/meta">START A META DISCUSSION</a>
<p class="widget-subtext"><em>About DEV itself.</em></p>
</div>
</div>
<div class="widget">
<header>
<a href="/t/watercooler"><h4>#watercooler</h4></a>
</header>
<div class="widget-body">
<div class="widget-link-list">
<% Article.active_threads(["watercooler"], Timeframer.new(params[:timeframe]).datetime).each do |plucked_article| %>
<%= render "articles/widget_list_item", plucked_article: plucked_article, show_comment_count: true %>
<% end %>
</div>
<a class="cta cta-button" href="/new/watercooler">GO OFF-TOPIC</a>
<p class="widget-subtext"><em>Light and off-topic chitchat.</em></p>
</div>
</div>
<% end %>
<% unless user_signed_in? %>
<% cache("seo-boostable-posts-homepage-#{params[:timeframe]}-xoxo", expires_in: 18.hours) do %>

View file

@ -303,6 +303,14 @@
<div class="alert alert-info">Determines which tags are suggested to new users during onboarding (comma
separated, letters only)</div>
</div>
<div class="form-group">
<%= f.label :sidebar_tags %>
<%= f.text_field :sidebar_tags,
class: "form-control",
value: SiteConfig.sidebar_tags.join(","),
placeholder: "List of valid tags: comma separated, letters only e.g. help,discuss,explainlikeimfive,meta" %>
<div class="alert alert-info">Determines which tags are shown on the homepage righthand sidebar</div>
</div>
</div>
</div>
<% if current_user.has_role?(:single_resource_admin, Config) %>

View file

@ -187,6 +187,16 @@ RSpec.describe "/internal/config", type: :request do
post "/internal/config", params: { site_config: { suggested_tags: "hey, haha,hoHo, Bobo Fofo" }, confirmation: confirmation_message }
expect(SiteConfig.suggested_tags).to eq(%w[hey haha hoho bobofofo])
end
it "removes space sidebar_tags" do
post "/internal/config", params: { site_config: { sidebar_tags: "hey, haha,hoho, bobo fofo" }, confirmation: confirmation_message }
expect(SiteConfig.sidebar_tags).to eq(%w[hey haha hoho bobofofo])
end
it "downcases sidebar_tags" do
post "/internal/config", params: { site_config: { sidebar_tags: "hey, haha,hoHo, Bobo Fofo" }, confirmation: confirmation_message }
expect(SiteConfig.sidebar_tags).to eq(%w[hey haha hoho bobofofo])
end
end
end
end