Commit ac33f1ae authored by Eugen Rochko's avatar Eugen Rochko Committed by GitHub

Fix account tags not being saved correctly (#11507)

* Fix account tags not being saved correctly

Regression from f371b321

Fix Tag#discoverable not returning tags where listable is nil instead of true

Add notice when saving hashtags in admin UI

Change public hashtag and directory pages to return 404 for forbidden tags

* Remove unused locale string
parent 5e35aa82
......@@ -17,7 +17,7 @@ module Admin
authorize @tag, :update?
if @tag.update(tag_params.merge(reviewed_at: Time.now.utc))
redirect_to admin_tag_path(@tag.id)
redirect_to admin_tag_path(@tag.id), notice: I18n.t('admin.tags.updated_msg')
else
render :show
end
......
......@@ -25,7 +25,7 @@ class DirectoriesController < ApplicationController
end
def set_tag
@tag = Tag.discoverable.find_by!(name: params[:id].downcase)
@tag = Tag.discoverable.find_normalized!(params[:id])
end
def set_tags
......
......@@ -47,7 +47,7 @@ class TagsController < ApplicationController
private
def set_tag
@tag = Tag.find_normalized!(params[:id])
@tag = Tag.usable.find_normalized!(params[:id])
end
def set_body_classes
......
......@@ -227,17 +227,7 @@ class Account < ApplicationRecord
end
def tags_as_strings=(tag_names)
tag_names.map! { |name| name.mb_chars.downcase.to_s }
tag_names.uniq!
# Existing hashtags
hashtags_map = Tag.where(name: tag_names).each_with_object({}) { |tag, h| h[tag.name] = tag }
# Initialize not yet existing hashtags
tag_names.each do |name|
next if hashtags_map.key?(name)
hashtags_map[name] = Tag.new(name: name)
end
hashtags_map = Tag.find_or_create_by_names(tag_names).each_with_object({}) { |tag, h| h[tag.name] = tag }
# Remove hashtags that are to be deleted
tags.each do |tag|
......
......@@ -31,7 +31,8 @@ class Tag < ApplicationRecord
scope :reviewed, -> { where.not(reviewed_at: nil) }
scope :pending_review, -> { where(reviewed_at: nil).where.not(requested_review_at: nil) }
scope :discoverable, -> { where.not(listable: false).joins(:account_tag_stat).where(AccountTagStat.arel_table[:accounts_count].gt(0)).order(Arel.sql('account_tag_stats.accounts_count desc')) }
scope :usable, -> { where(usable: [true, nil]) }
scope :discoverable, -> { where(listable: [true, nil]).joins(:account_tag_stat).where(AccountTagStat.arel_table[:accounts_count].gt(0)).order(Arel.sql('account_tag_stats.accounts_count desc')) }
scope :most_used, ->(account) { joins(:statuses).where(statuses: { account: account }).group(:id).order(Arel.sql('count(*) desc')) }
delegate :accounts_count,
......
......@@ -496,6 +496,7 @@ en:
title: Hashtags
trending_right_now: Trending right now
unique_uses_today: "%{count} posting today"
updated_msg: Hashtag settings updated successfully
title: Administration
warning_presets:
add_new: Add new
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment