mod actions: separate account upgrades from promotions (fix #3841)
This commit is contained in:
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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?
|
||||||
|
|||||||
@@ -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,
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|
||||||
|
|||||||
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