Add trending links (#16917)
* Add trending links * Add overriding specific links trendability * Add link type to preview cards and only trend articles Change trends review notifications from being sent every 5 minutes to being sent every 2 hours Change threshold from 5 unique accounts to 15 unique accounts * Fix tests
This commit is contained in:
		@@ -4,7 +4,7 @@ module Admin
 | 
			
		||||
  class DashboardController < BaseController
 | 
			
		||||
    def index
 | 
			
		||||
      @system_checks         = Admin::SystemCheck.perform
 | 
			
		||||
      @time_period           = (1.month.ago.to_date...Time.now.utc.to_date)
 | 
			
		||||
      @time_period           = (29.days.ago.to_date...Time.now.utc.to_date)
 | 
			
		||||
      @pending_users_count   = User.pending.count
 | 
			
		||||
      @pending_reports_count = Report.unresolved.count
 | 
			
		||||
      @pending_tags_count    = Tag.pending_review.count
 | 
			
		||||
 
 | 
			
		||||
@@ -2,38 +2,12 @@
 | 
			
		||||
 | 
			
		||||
module Admin
 | 
			
		||||
  class TagsController < BaseController
 | 
			
		||||
    before_action :set_tag, except: [:index, :batch, :approve_all, :reject_all]
 | 
			
		||||
    before_action :set_usage_by_domain, except: [:index, :batch, :approve_all, :reject_all]
 | 
			
		||||
    before_action :set_counters, except: [:index, :batch, :approve_all, :reject_all]
 | 
			
		||||
 | 
			
		||||
    def index
 | 
			
		||||
      authorize :tag, :index?
 | 
			
		||||
 | 
			
		||||
      @tags = filtered_tags.page(params[:page])
 | 
			
		||||
      @form = Form::TagBatch.new
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    def batch
 | 
			
		||||
      @form = Form::TagBatch.new(form_tag_batch_params.merge(current_account: current_account, action: action_from_button))
 | 
			
		||||
      @form.save
 | 
			
		||||
    rescue ActionController::ParameterMissing
 | 
			
		||||
      flash[:alert] = I18n.t('admin.accounts.no_account_selected')
 | 
			
		||||
    ensure
 | 
			
		||||
      redirect_to admin_tags_path(filter_params)
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    def approve_all
 | 
			
		||||
      Form::TagBatch.new(current_account: current_account, tag_ids: Tag.pending_review.pluck(:id), action: 'approve').save
 | 
			
		||||
      redirect_to admin_tags_path(filter_params)
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    def reject_all
 | 
			
		||||
      Form::TagBatch.new(current_account: current_account, tag_ids: Tag.pending_review.pluck(:id), action: 'reject').save
 | 
			
		||||
      redirect_to admin_tags_path(filter_params)
 | 
			
		||||
    end
 | 
			
		||||
    before_action :set_tag
 | 
			
		||||
 | 
			
		||||
    def show
 | 
			
		||||
      authorize @tag, :show?
 | 
			
		||||
 | 
			
		||||
      @time_period = (6.days.ago.to_date...Time.now.utc.to_date)
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    def update
 | 
			
		||||
@@ -52,52 +26,8 @@ module Admin
 | 
			
		||||
      @tag = Tag.find(params[:id])
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    def set_usage_by_domain
 | 
			
		||||
      @usage_by_domain = @tag.statuses
 | 
			
		||||
                             .with_public_visibility
 | 
			
		||||
                             .excluding_silenced_accounts
 | 
			
		||||
                             .where(Status.arel_table[:id].gteq(Mastodon::Snowflake.id_at(Time.now.utc.beginning_of_day)))
 | 
			
		||||
                             .joins(:account)
 | 
			
		||||
                             .group('accounts.domain')
 | 
			
		||||
                             .reorder(statuses_count: :desc)
 | 
			
		||||
                             .pluck(Arel.sql('accounts.domain, count(*) AS statuses_count'))
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    def set_counters
 | 
			
		||||
      @accounts_today = @tag.history.first[:accounts]
 | 
			
		||||
      @accounts_week  = Redis.current.pfcount(*current_week_days.map { |day| "activity:tags:#{@tag.id}:#{day}:accounts" })
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    def filtered_tags
 | 
			
		||||
      TagFilter.new(filter_params).results
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    def filter_params
 | 
			
		||||
      params.slice(:page, *TagFilter::KEYS).permit(:page, *TagFilter::KEYS)
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    def tag_params
 | 
			
		||||
      params.require(:tag).permit(:name, :trendable, :usable, :listable)
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    def current_week_days
 | 
			
		||||
      now = Time.now.utc.beginning_of_day.to_date
 | 
			
		||||
 | 
			
		||||
      (Date.commercial(now.cwyear, now.cweek)..now).map do |date|
 | 
			
		||||
        date.to_time(:utc).beginning_of_day.to_i
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    def form_tag_batch_params
 | 
			
		||||
      params.require(:form_tag_batch).permit(:action, tag_ids: [])
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    def action_from_button
 | 
			
		||||
      if params[:approve]
 | 
			
		||||
        'approve'
 | 
			
		||||
      elsif params[:reject]
 | 
			
		||||
        'reject'
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
 
 | 
			
		||||
@@ -0,0 +1,41 @@
 | 
			
		||||
# frozen_string_literal: true
 | 
			
		||||
 | 
			
		||||
class Admin::Trends::Links::PreviewCardProvidersController < Admin::BaseController
 | 
			
		||||
  def index
 | 
			
		||||
    authorize :preview_card_provider, :index?
 | 
			
		||||
 | 
			
		||||
    @preview_card_providers = filtered_preview_card_providers.page(params[:page])
 | 
			
		||||
    @form = Form::PreviewCardProviderBatch.new
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def batch
 | 
			
		||||
    @form = Form::PreviewCardProviderBatch.new(form_preview_card_provider_batch_params.merge(current_account: current_account, action: action_from_button))
 | 
			
		||||
    @form.save
 | 
			
		||||
  rescue ActionController::ParameterMissing
 | 
			
		||||
    flash[:alert] = I18n.t('admin.accounts.no_account_selected')
 | 
			
		||||
  ensure
 | 
			
		||||
    redirect_to admin_trends_links_preview_card_providers_path(filter_params)
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  private
 | 
			
		||||
 | 
			
		||||
  def filtered_preview_card_providers
 | 
			
		||||
    PreviewCardProviderFilter.new(filter_params).results
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def filter_params
 | 
			
		||||
    params.slice(:page, *PreviewCardProviderFilter::KEYS).permit(:page, *PreviewCardProviderFilter::KEYS)
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def form_preview_card_provider_batch_params
 | 
			
		||||
    params.require(:form_preview_card_provider_batch).permit(:action, preview_card_provider_ids: [])
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def action_from_button
 | 
			
		||||
    if params[:approve]
 | 
			
		||||
      'approve'
 | 
			
		||||
    elsif params[:reject]
 | 
			
		||||
      'reject'
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
							
								
								
									
										45
									
								
								app/controllers/admin/trends/links_controller.rb
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										45
									
								
								app/controllers/admin/trends/links_controller.rb
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,45 @@
 | 
			
		||||
# frozen_string_literal: true
 | 
			
		||||
 | 
			
		||||
class Admin::Trends::LinksController < Admin::BaseController
 | 
			
		||||
  def index
 | 
			
		||||
    authorize :preview_card, :index?
 | 
			
		||||
 | 
			
		||||
    @preview_cards = filtered_preview_cards.page(params[:page])
 | 
			
		||||
    @form          = Form::PreviewCardBatch.new
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def batch
 | 
			
		||||
    @form = Form::PreviewCardBatch.new(form_preview_card_batch_params.merge(current_account: current_account, action: action_from_button))
 | 
			
		||||
    @form.save
 | 
			
		||||
  rescue ActionController::ParameterMissing
 | 
			
		||||
    flash[:alert] = I18n.t('admin.accounts.no_account_selected')
 | 
			
		||||
  ensure
 | 
			
		||||
    redirect_to admin_trends_links_path(filter_params)
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  private
 | 
			
		||||
 | 
			
		||||
  def filtered_preview_cards
 | 
			
		||||
    PreviewCardFilter.new(filter_params.with_defaults(trending: 'all')).results
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def filter_params
 | 
			
		||||
    params.slice(:page, *PreviewCardFilter::KEYS).permit(:page, *PreviewCardFilter::KEYS)
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def form_preview_card_batch_params
 | 
			
		||||
    params.require(:form_preview_card_batch).permit(:action, preview_card_ids: [])
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def action_from_button
 | 
			
		||||
    if params[:approve]
 | 
			
		||||
      'approve'
 | 
			
		||||
    elsif params[:approve_all]
 | 
			
		||||
      'approve_all'
 | 
			
		||||
    elsif params[:reject]
 | 
			
		||||
      'reject'
 | 
			
		||||
    elsif params[:reject_all]
 | 
			
		||||
      'reject_all'
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
							
								
								
									
										41
									
								
								app/controllers/admin/trends/tags_controller.rb
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										41
									
								
								app/controllers/admin/trends/tags_controller.rb
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,41 @@
 | 
			
		||||
# frozen_string_literal: true
 | 
			
		||||
 | 
			
		||||
class Admin::Trends::TagsController < Admin::BaseController
 | 
			
		||||
  def index
 | 
			
		||||
    authorize :tag, :index?
 | 
			
		||||
 | 
			
		||||
    @tags = filtered_tags.page(params[:page])
 | 
			
		||||
    @form = Form::TagBatch.new
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def batch
 | 
			
		||||
    @form = Form::TagBatch.new(form_tag_batch_params.merge(current_account: current_account, action: action_from_button))
 | 
			
		||||
    @form.save
 | 
			
		||||
  rescue ActionController::ParameterMissing
 | 
			
		||||
    flash[:alert] = I18n.t('admin.accounts.no_account_selected')
 | 
			
		||||
  ensure
 | 
			
		||||
    redirect_to admin_trends_tags_path(filter_params)
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  private
 | 
			
		||||
 | 
			
		||||
  def filtered_tags
 | 
			
		||||
    TagFilter.new(filter_params).results
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def filter_params
 | 
			
		||||
    params.slice(:page, *TagFilter::KEYS).permit(:page, *TagFilter::KEYS)
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def form_tag_batch_params
 | 
			
		||||
    params.require(:form_tag_batch).permit(:action, tag_ids: [])
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def action_from_button
 | 
			
		||||
    if params[:approve]
 | 
			
		||||
      'approve'
 | 
			
		||||
    elsif params[:reject]
 | 
			
		||||
      'reject'
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
		Reference in New Issue
	
	Block a user