Fix account tags not being saved correctly (#11507)

* Fix account tags not being saved correctly

Regression from f371b32

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
This commit is contained in:
Eugen Rochko 2019-08-07 10:01:55 +02:00 committed by GitHub
parent 5e35aa8280
commit ac33f1aedd
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
6 changed files with 7 additions and 15 deletions

View file

@ -17,7 +17,7 @@ module Admin
authorize @tag, :update? authorize @tag, :update?
if @tag.update(tag_params.merge(reviewed_at: Time.now.utc)) 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 else
render :show render :show
end end

View file

@ -25,7 +25,7 @@ class DirectoriesController < ApplicationController
end end
def set_tag def set_tag
@tag = Tag.discoverable.find_by!(name: params[:id].downcase) @tag = Tag.discoverable.find_normalized!(params[:id])
end end
def set_tags def set_tags

View file

@ -47,7 +47,7 @@ class TagsController < ApplicationController
private private
def set_tag def set_tag
@tag = Tag.find_normalized!(params[:id]) @tag = Tag.usable.find_normalized!(params[:id])
end end
def set_body_classes def set_body_classes

View file

@ -227,17 +227,7 @@ class Account < ApplicationRecord
end end
def tags_as_strings=(tag_names) def tags_as_strings=(tag_names)
tag_names.map! { |name| name.mb_chars.downcase.to_s } hashtags_map = Tag.find_or_create_by_names(tag_names).each_with_object({}) { |tag, h| h[tag.name] = tag }
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
# Remove hashtags that are to be deleted # Remove hashtags that are to be deleted
tags.each do |tag| tags.each do |tag|

View file

@ -31,7 +31,8 @@ class Tag < ApplicationRecord
scope :reviewed, -> { where.not(reviewed_at: nil) } scope :reviewed, -> { where.not(reviewed_at: nil) }
scope :pending_review, -> { where(reviewed_at: nil).where.not(requested_review_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')) } scope :most_used, ->(account) { joins(:statuses).where(statuses: { account: account }).group(:id).order(Arel.sql('count(*) desc')) }
delegate :accounts_count, delegate :accounts_count,

View file

@ -496,6 +496,7 @@ en:
title: Hashtags title: Hashtags
trending_right_now: Trending right now trending_right_now: Trending right now
unique_uses_today: "%{count} posting today" unique_uses_today: "%{count} posting today"
updated_msg: Hashtag settings updated successfully
title: Administration title: Administration
warning_presets: warning_presets:
add_new: Add new add_new: Add new