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:
		
					parent
					
						
							
								46e62fc4b3
							
						
					
				
			
			
				commit
				
					
						6e50134a42
					
				
			
		
					 97 changed files with 2071 additions and 722 deletions
				
			
		|  | @ -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 | ||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue