diff --git a/app/logical/user_promotion.rb b/app/logical/user_promotion.rb index 6420db5e3..2ee8ee685 100644 --- a/app/logical/user_promotion.rb +++ b/app/logical/user_promotion.rb @@ -1,13 +1,12 @@ 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 @promoter = promoter @new_level = new_level.to_i @can_upload_free = can_upload_free @can_approve_posts = can_approve_posts - @is_upgrade = is_upgrade end def promote! @@ -21,7 +20,7 @@ class UserPromotion user.can_approve_posts = can_approve_posts unless can_approve_posts.nil? user.inviter = promoter - create_user_feedback unless is_upgrade + create_user_feedback create_dmail create_mod_actions @@ -40,8 +39,7 @@ class UserPromotion end 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}}, category, promoter) + ModAction.log(%{"#{user.name}":#{Routes.user_path(user)} level changed #{user.level_string_was} -> #{user.level_string}}, :user_level_change, promoter) end end @@ -54,8 +52,6 @@ class UserPromotion raise User::PrivilegeError, "You can't promote other users to your rank or above" elsif user.level >= promoter.level 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 diff --git a/app/models/user_upgrade.rb b/app/models/user_upgrade.rb index 3fdc81045..5863d94a8 100644 --- a/app/models/user_upgrade.rb +++ b/app/models/user_upgrade.rb @@ -81,21 +81,50 @@ class UserUpgrade < ApplicationRecord recipient != purchaser end - def process_upgrade!(payment_status) - recipient.with_lock do - return if status == "complete" + concerning :UpgradeMethods do + def process_upgrade!(payment_status) + recipient.with_lock do + return if status == "complete" - if payment_status == "paid" - upgrade_recipient! - update!(status: :complete) - else - update!(status: :processing) + if payment_status == "paid" + upgrade_recipient! + create_mod_action! + dmail_recipient! + dmail_purchaser! + update!(status: :complete) + else + update!(status: :processing) + end end end - end - def upgrade_recipient! - recipient.promote_to!(level, User.system, is_upgrade: true) + def upgrade_recipient! + 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 concerning :StripeMethods do diff --git a/db/populate.rb b/db/populate.rb index 7a66a7080..76a517ed3 100644 --- a/db/populate.rb +++ b/db/populate.rb @@ -68,14 +68,14 @@ if User.count == 0 :password => "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( :name => "approver", :password => "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 0.upto(10) do |i|