mod actions: separate account upgrades from promotions (fix #3841)
This commit is contained in:
@@ -8,8 +8,7 @@ module Admin
|
||||
|
||||
def update
|
||||
@user = User.find(params[:id])
|
||||
promotion = UserPromotion.new(@user, CurrentUser.user, params[:user][:level], params[:user])
|
||||
promotion.promote!
|
||||
@user.promote_to!(params[:user][:level], params[:user])
|
||||
redirect_to edit_admin_user_path(@user), :notice => "User updated"
|
||||
end
|
||||
end
|
||||
|
||||
@@ -48,7 +48,7 @@ class UserUpgradesController < ApplicationController
|
||||
:card => params[:stripeToken],
|
||||
:description => params[:desc]
|
||||
)
|
||||
@user.promote_to!(level, :skip_feedback => true)
|
||||
@user.promote_to!(level, is_upgrade: true)
|
||||
flash[:success] = true
|
||||
rescue Stripe::CardError => e
|
||||
flash[:error] = e.message
|
||||
|
||||
@@ -26,7 +26,7 @@ class UserPromotion
|
||||
|
||||
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_mod_actions
|
||||
|
||||
@@ -43,8 +43,13 @@ private
|
||||
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)
|
||||
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
|
||||
|
||||
|
||||
def validate
|
||||
# admins can do anything
|
||||
return if promoter.is_admin?
|
||||
|
||||
@@ -19,9 +19,10 @@ class ModAction < ApplicationRecord
|
||||
user_ban: 4,
|
||||
user_unban: 5,
|
||||
user_name_change: 6,
|
||||
user_level: 7,
|
||||
user_level_change: 7,
|
||||
user_approval_privilege: 8,
|
||||
user_upload_privilege: 9,
|
||||
user_account_upgrade: 19,
|
||||
user_feedback_update: 21,
|
||||
user_feedback_delete: 22,
|
||||
post_delete: 42,
|
||||
|
||||
@@ -110,7 +110,6 @@ class User < ApplicationRecord
|
||||
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")}
|
||||
belongs_to :inviter, class_name: "User", optional: true
|
||||
after_update :create_mod_action
|
||||
accepts_nested_attributes_for :dmail_filter
|
||||
|
||||
module BanMethods
|
||||
@@ -355,10 +354,6 @@ class User < ApplicationRecord
|
||||
level_string.downcase.to_sym
|
||||
end
|
||||
|
||||
def level_string_before_last_save
|
||||
level_string(level_before_last_save)
|
||||
end
|
||||
|
||||
def level_string_was
|
||||
level_string(level_was)
|
||||
end
|
||||
@@ -411,12 +406,6 @@ class User < ApplicationRecord
|
||||
can_approve_posts?
|
||||
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
|
||||
if per_page.nil? || !is_gold?
|
||||
self.per_page = Danbooru.config.posts_per_page
|
||||
|
||||
@@ -54,7 +54,7 @@ if User.count == 0
|
||||
:password => "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
|
||||
|
||||
newuser = User.create(
|
||||
@@ -69,14 +69,14 @@ if User.count == 0
|
||||
:password => "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(
|
||||
:name => "approver",
|
||||
:password => "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
|
||||
|
||||
|
||||
17
script/fixes/054_recategorize_user_level_mod_actions.rb
Executable file
17
script/fixes/054_recategorize_user_level_mod_actions.rb
Executable 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
|
||||
Reference in New Issue
Block a user