require_dependency 'promotion' class BoostTrustLevel def initialize(args) @user = args[:user] @level = args[:level].to_i @promotion = Promotion.new(@user) @trust_levels = TrustLevel.levels @logger = args[:logger] end def save! previous_level = @user.trust_level success = if @level < @user.trust_level demote! else @user.update_attributes!(trust_level: @level) end @logger.log_trust_level_change(@user, previous_level, @level) success end protected def demote! current_trust_level = @user.trust_level @user.update_attributes!(trust_level: @level) if @promotion.review @user.update_attributes!(trust_level: current_trust_level) raise Discourse::InvalidAccess.new, I18n.t('trust_levels.change_failed_explanation', user_name: @user.name, new_trust_level: trust_level_lookup(@level), current_trust_level: trust_level_lookup(current_trust_level)) else true end end def trust_level_lookup(level) @trust_levels.key(level).id2name end end