user upgrades: send dmail to purchaser for gifted upgrades.
* Refactor to move upgrade logic from UserPromotion to UserUpgrade. * Send the recipient and the purchaser of a gifted upgrade separate dmail notifications.
This commit is contained in:
@@ -1,13 +1,12 @@
|
|||||||
class UserPromotion
|
class UserPromotion
|
||||||
attr_reader :user, :promoter, :new_level, :old_can_approve_posts, :old_can_upload_free, :can_upload_free, :can_approve_posts, :is_upgrade
|
attr_reader :user, :promoter, :new_level, :old_can_approve_posts, :old_can_upload_free, :can_upload_free, :can_approve_posts
|
||||||
|
|
||||||
def initialize(user, promoter, new_level, can_upload_free: nil, can_approve_posts: nil, is_upgrade: false)
|
def initialize(user, promoter, new_level, can_upload_free: nil, can_approve_posts: nil)
|
||||||
@user = user
|
@user = user
|
||||||
@promoter = promoter
|
@promoter = promoter
|
||||||
@new_level = new_level.to_i
|
@new_level = new_level.to_i
|
||||||
@can_upload_free = can_upload_free
|
@can_upload_free = can_upload_free
|
||||||
@can_approve_posts = can_approve_posts
|
@can_approve_posts = can_approve_posts
|
||||||
@is_upgrade = is_upgrade
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def promote!
|
def promote!
|
||||||
@@ -21,7 +20,7 @@ class UserPromotion
|
|||||||
user.can_approve_posts = can_approve_posts unless can_approve_posts.nil?
|
user.can_approve_posts = can_approve_posts unless can_approve_posts.nil?
|
||||||
user.inviter = promoter
|
user.inviter = promoter
|
||||||
|
|
||||||
create_user_feedback unless is_upgrade
|
create_user_feedback
|
||||||
create_dmail
|
create_dmail
|
||||||
create_mod_actions
|
create_mod_actions
|
||||||
|
|
||||||
@@ -40,8 +39,7 @@ class UserPromotion
|
|||||||
end
|
end
|
||||||
|
|
||||||
if user.level_changed?
|
if user.level_changed?
|
||||||
category = is_upgrade ? :user_account_upgrade : :user_level_change
|
ModAction.log(%{"#{user.name}":#{Routes.user_path(user)} level changed #{user.level_string_was} -> #{user.level_string}}, :user_level_change, promoter)
|
||||||
ModAction.log(%{"#{user.name}":#{Routes.user_path(user)} level changed #{user.level_string_was} -> #{user.level_string}}, category, promoter)
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -54,8 +52,6 @@ class UserPromotion
|
|||||||
raise User::PrivilegeError, "You can't promote other users to your rank or above"
|
raise User::PrivilegeError, "You can't promote other users to your rank or above"
|
||||||
elsif user.level >= promoter.level
|
elsif user.level >= promoter.level
|
||||||
raise User::PrivilegeError, "You can't promote or demote other users at your rank or above"
|
raise User::PrivilegeError, "You can't promote or demote other users at your rank or above"
|
||||||
elsif is_upgrade && user.is_builder?
|
|
||||||
raise User::PrivilegeError, "You can't upgrade a user that is above Platinum level"
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@@ -81,21 +81,50 @@ class UserUpgrade < ApplicationRecord
|
|||||||
recipient != purchaser
|
recipient != purchaser
|
||||||
end
|
end
|
||||||
|
|
||||||
def process_upgrade!(payment_status)
|
concerning :UpgradeMethods do
|
||||||
recipient.with_lock do
|
def process_upgrade!(payment_status)
|
||||||
return if status == "complete"
|
recipient.with_lock do
|
||||||
|
return if status == "complete"
|
||||||
|
|
||||||
if payment_status == "paid"
|
if payment_status == "paid"
|
||||||
upgrade_recipient!
|
upgrade_recipient!
|
||||||
update!(status: :complete)
|
create_mod_action!
|
||||||
else
|
dmail_recipient!
|
||||||
update!(status: :processing)
|
dmail_purchaser!
|
||||||
|
update!(status: :complete)
|
||||||
|
else
|
||||||
|
update!(status: :processing)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
|
||||||
|
|
||||||
def upgrade_recipient!
|
def upgrade_recipient!
|
||||||
recipient.promote_to!(level, User.system, is_upgrade: true)
|
recipient.update!(level: level, inviter: User.system)
|
||||||
|
end
|
||||||
|
|
||||||
|
def create_mod_action!
|
||||||
|
ModAction.log(%{"#{recipient.name}":#{Routes.user_path(recipient)} level changed #{User.level_string(recipient.level_before_last_save)} -> #{recipient.level_string}}, :user_account_upgrade, purchaser)
|
||||||
|
end
|
||||||
|
|
||||||
|
def dmail_recipient!
|
||||||
|
if is_gift?
|
||||||
|
body = "Congratulations, your account has been upgraded to #{level_string} by <@#{purchaser.name}>. Enjoy!"
|
||||||
|
else
|
||||||
|
body = "You are now a #{level_string} user. Thanks for supporting #{Danbooru.config.canonical_app_name}!"
|
||||||
|
end
|
||||||
|
|
||||||
|
title = "You have been upgraded to #{level_string}!"
|
||||||
|
Dmail.create_automated(to: recipient, title: title, body: body)
|
||||||
|
end
|
||||||
|
|
||||||
|
def dmail_purchaser!
|
||||||
|
return unless is_gift?
|
||||||
|
|
||||||
|
title = "#{recipient.name} has been upgraded to #{level_string}!"
|
||||||
|
body = "<@#{recipient.name}> is now a #{level_string} user. Thanks for supporting #{Danbooru.config.canonical_app_name}!"
|
||||||
|
|
||||||
|
Dmail.create_automated(to: purchaser, title: title, body: body)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
concerning :StripeMethods do
|
concerning :StripeMethods do
|
||||||
|
|||||||
@@ -68,14 +68,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, :is_upgrade => true, :skip_dmail => true)
|
newuser.promote_to!(User::Levels::BUILDER, :can_upload_free => 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, :is_upgrade => true, :skip_dmail => true)
|
newuser.promote_to!(User::Levels::BUILDER, :can_approve_posts => true, :skip_dmail => true)
|
||||||
end
|
end
|
||||||
|
|
||||||
0.upto(10) do |i|
|
0.upto(10) do |i|
|
||||||
|
|||||||
Reference in New Issue
Block a user