mod actions: separate account upgrades from promotions (fix #3841)

This commit is contained in:
evazion
2018-08-25 15:25:26 -05:00
parent 79961c8ed9
commit 6ff70c5002
7 changed files with 31 additions and 20 deletions

View File

@@ -8,8 +8,7 @@ module Admin
def update def update
@user = User.find(params[:id]) @user = User.find(params[:id])
promotion = UserPromotion.new(@user, CurrentUser.user, params[:user][:level], params[:user]) @user.promote_to!(params[:user][:level], params[:user])
promotion.promote!
redirect_to edit_admin_user_path(@user), :notice => "User updated" redirect_to edit_admin_user_path(@user), :notice => "User updated"
end end
end end

View File

@@ -48,7 +48,7 @@ class UserUpgradesController < ApplicationController
:card => params[:stripeToken], :card => params[:stripeToken],
:description => params[:desc] :description => params[:desc]
) )
@user.promote_to!(level, :skip_feedback => true) @user.promote_to!(level, is_upgrade: true)
flash[:success] = true flash[:success] = true
rescue Stripe::CardError => e rescue Stripe::CardError => e
flash[:error] = e.message flash[:error] = e.message

View File

@@ -26,7 +26,7 @@ class UserPromotion
user.inviter_id = promoter.id user.inviter_id = promoter.id
create_user_feedback unless options[:skip_feedback] create_user_feedback unless options[:is_upgrade]
create_dmail unless options[:skip_dmail] create_dmail unless options[:skip_dmail]
create_mod_actions create_mod_actions
@@ -43,8 +43,13 @@ private
if old_can_upload_free != user.can_upload_free? if old_can_upload_free != user.can_upload_free?
ModAction.log("\"#{promoter.name}\":/users/#{promoter.id} changed unlimited upload privileges for \"#{user.name}\":/users/#{user.id} from #{old_can_upload_free} to [b]#{user.can_upload_free?}[/b]",:user_upload_privilege) ModAction.log("\"#{promoter.name}\":/users/#{promoter.id} changed unlimited upload privileges for \"#{user.name}\":/users/#{user.id} from #{old_can_upload_free} to [b]#{user.can_upload_free?}[/b]",:user_upload_privilege)
end end
if user.level_changed?
category = options[:is_upgrade] ? :user_account_upgrade : :user_level_change
ModAction.log(%{"#{user.name}":/users/#{user.id} level changed #{user.level_string_was} -> #{user.level_string}}, category)
end
end end
def validate def validate
# admins can do anything # admins can do anything
return if promoter.is_admin? return if promoter.is_admin?

View File

@@ -19,9 +19,10 @@ class ModAction < ApplicationRecord
user_ban: 4, user_ban: 4,
user_unban: 5, user_unban: 5,
user_name_change: 6, user_name_change: 6,
user_level: 7, user_level_change: 7,
user_approval_privilege: 8, user_approval_privilege: 8,
user_upload_privilege: 9, user_upload_privilege: 9,
user_account_upgrade: 19,
user_feedback_update: 21, user_feedback_update: 21,
user_feedback_delete: 22, user_feedback_delete: 22,
post_delete: 42, post_delete: 42,

View File

@@ -110,7 +110,6 @@ class User < ApplicationRecord
has_many :favorite_groups, -> {order(name: :asc)}, foreign_key: :creator_id has_many :favorite_groups, -> {order(name: :asc)}, foreign_key: :creator_id
has_many :favorites, ->(rec) {where("user_id % 100 = #{rec.id % 100} and user_id = #{rec.id}").order("id desc")} has_many :favorites, ->(rec) {where("user_id % 100 = #{rec.id % 100} and user_id = #{rec.id}").order("id desc")}
belongs_to :inviter, class_name: "User", optional: true belongs_to :inviter, class_name: "User", optional: true
after_update :create_mod_action
accepts_nested_attributes_for :dmail_filter accepts_nested_attributes_for :dmail_filter
module BanMethods module BanMethods
@@ -355,10 +354,6 @@ class User < ApplicationRecord
level_string.downcase.to_sym level_string.downcase.to_sym
end end
def level_string_before_last_save
level_string(level_before_last_save)
end
def level_string_was def level_string_was
level_string(level_was) level_string(level_was)
end end
@@ -411,12 +406,6 @@ class User < ApplicationRecord
can_approve_posts? can_approve_posts?
end end
def create_mod_action
if saved_change_to_level?
ModAction.log(%{"#{name}":/users/#{id} level changed #{level_string_before_last_save} -> #{level_string}},:user_level)
end
end
def set_per_page def set_per_page
if per_page.nil? || !is_gold? if per_page.nil? || !is_gold?
self.per_page = Danbooru.config.posts_per_page self.per_page = Danbooru.config.posts_per_page

View File

@@ -54,7 +54,7 @@ if User.count == 0
:password => "password1", :password => "password1",
:password_confirmation => "password1" :password_confirmation => "password1"
) )
newuser.promote_to!(User::Levels.const_get(level), {:skip_feedback => true, :skip_dmail => true}) newuser.promote_to!(User::Levels.const_get(level), {:is_upgrade => true, :skip_dmail => true})
end end
newuser = User.create( newuser = User.create(
@@ -69,14 +69,14 @@ if User.count == 0
:password => "password1", :password => "password1",
:password_confirmation => "password1" :password_confirmation => "password1"
) )
newuser.promote_to!(User::Levels::BUILDER, {:can_upload_free => true, :skip_feedback => true, :skip_dmail => true}) newuser.promote_to!(User::Levels::BUILDER, {:can_upload_free => true, :is_upgrade => true, :skip_dmail => true})
newuser = User.create( newuser = User.create(
:name => "approver", :name => "approver",
:password => "password1", :password => "password1",
:password_confirmation => "password1" :password_confirmation => "password1"
) )
newuser.promote_to!(User::Levels::BUILDER, {:can_approve_posts => true, :skip_feedback => true, :skip_dmail => true}) newuser.promote_to!(User::Levels::BUILDER, {:can_approve_posts => true, :is_upgrade => true, :skip_dmail => true})
end end

View File

@@ -0,0 +1,17 @@
#!/usr/bin/env ruby
require File.expand_path(File.join(File.dirname(__FILE__), '..', '..', 'config', 'environment'))
CurrentUser.user = User.system
CurrentUser.ip_addr = "127.0.0.1"
ModAction.transaction do
ModAction.without_timeout do
# Find mod actions where the user changed their own level.
mod_actions = ModAction.where(category: :user_level_change).select do |mod_action|
mod_action.description.match?(%r{".*":/users/#{mod_action.creator_id} level changed \w+ -> (Gold|Platinum)}i)
end
ModAction.where(id: mod_actions).update_all(category: :user_account_upgrade)
end
end