diff --git a/app/controllers/internal/tags_controller.rb b/app/controllers/internal/tags_controller.rb index a0bac4bc4..701094a00 100644 --- a/app/controllers/internal/tags_controller.rb +++ b/app/controllers/internal/tags_controller.rb @@ -45,7 +45,8 @@ class Internal::TagsController < Internal::ApplicationController def tag_params allowed_params = %i[ supported rules_markdown short_summary pretty_name bg_color_hex - text_color_hex tag_moderator_id remove_moderator_id alias_for badge_id category + text_color_hex tag_moderator_id remove_moderator_id alias_for badge_id + category social_preview_template ] params.require(:tag).permit(allowed_params) end diff --git a/app/controllers/social_previews_controller.rb b/app/controllers/social_previews_controller.rb index 676290a6b..771fb10be 100644 --- a/app/controllers/social_previews_controller.rb +++ b/app/controllers/social_previews_controller.rb @@ -2,16 +2,20 @@ class SocialPreviewsController < ApplicationController # No authorization required for entirely public controller PNG_CSS = "body { transform: scale(0.3); } .preview-div-wrapper { overflow: unset; margin: 5vw; }".freeze - SHE_CODED_TAGS = %w[shecoded theycoded shecodedally].freeze def article @article = Article.find(params[:id]) @tag_badges = Badge.where(id: Tag.where(name: @article.decorate.cached_tag_list_array).pluck(:badge_id)) not_found unless @article.published - template = (@article.decorate.cached_tag_list_array & SHE_CODED_TAGS).any? ? "shecoded" : "article" + template = @article.tags. + where("tags.social_preview_template IS NOT NULL AND tags.social_preview_template != ?", "article"). + select(:social_preview_template).first&.social_preview_template - set_respond template + # make sure that the template exists + template = "article" unless Tag.social_preview_templates.include?(template) + + set_respond "social_previews/articles/#{template}" end def user diff --git a/app/models/tag.rb b/app/models/tag.rb index 64456c6ad..0b6103fef 100644 --- a/app/models/tag.rb +++ b/app/models/tag.rb @@ -34,6 +34,11 @@ class Tag < ActsAsTaggableOn::Tag SEARCH_SERIALIZER = Search::TagSerializer SEARCH_CLASS = Search::Tag + # possible social previews templates for articles with a particular tag + def self.social_preview_templates + Rails.root.join("app/views/social_previews/articles").children.map { |ch| File.basename(ch, ".html.erb") } + end + def submission_template_customized(param_0 = nil) submission_template&.gsub("PARAM_0", param_0) end diff --git a/app/views/internal/tags/show.html.erb b/app/views/internal/tags/show.html.erb index 476a71065..4229dbea3 100644 --- a/app/views/internal/tags/show.html.erb +++ b/app/views/internal/tags/show.html.erb @@ -47,6 +47,10 @@ <%= f.label :category %> <%= f.select(:category, options_for_select(Tag.valid_categories, @tag.category)) %> +