Spiegel von
https://github.com/paviliondev/discourse-custom-wizard.git
synchronisiert 2024-11-15 06:12:54 +01:00
170 Zeilen
3,7 KiB
Ruby
170 Zeilen
3,7 KiB
Ruby
# frozen_string_literal: true
|
|
class CustomWizard::Subscription
|
|
STANDARD_PRODUCT_ID = 'prod_LNAGVAaIqDsHmB'
|
|
BUSINESS_PRODUCT_ID = 'prod_LNABQ50maBQ1pY'
|
|
|
|
def self.attributes
|
|
{
|
|
wizard: {
|
|
required: {
|
|
none: [],
|
|
standard: ['*'],
|
|
business: ['*']
|
|
},
|
|
permitted: {
|
|
none: [],
|
|
standard: ['*'],
|
|
business: ['*']
|
|
}
|
|
},
|
|
step: {
|
|
condition: {
|
|
none: [],
|
|
standard: ['*'],
|
|
business: ['*']
|
|
},
|
|
index: {
|
|
none: [],
|
|
standard: ['*'],
|
|
business: ['*']
|
|
},
|
|
required_data: {
|
|
none: [],
|
|
standard: ['*'],
|
|
business: ['*']
|
|
},
|
|
permitted_params: {
|
|
none: [],
|
|
standard: ['*'],
|
|
business: ['*']
|
|
}
|
|
},
|
|
field: {
|
|
condition: {
|
|
none: [],
|
|
standard: ['*'],
|
|
business: ['*']
|
|
},
|
|
index: {
|
|
none: [],
|
|
standard: ['*'],
|
|
business: ['*']
|
|
},
|
|
type: {
|
|
none: ['text', 'textarea', 'text_only', 'date', 'time', 'date_time', 'number', 'checkbox', 'dropdown', 'upload'],
|
|
standard: ['*'],
|
|
business: ['*']
|
|
},
|
|
realtime_validations: {
|
|
none: [],
|
|
standard: ['*'],
|
|
business: ['*']
|
|
}
|
|
},
|
|
action: {
|
|
type: {
|
|
none: ['create_topic', 'update_profile', 'open_composer', 'route_to'],
|
|
standard: ['create_topic', 'update_profile', 'open_composer', 'route_to', 'send_message', 'watch_categories', 'add_to_group'],
|
|
business: ['*']
|
|
}
|
|
},
|
|
custom_field: {
|
|
klass: {
|
|
none: ['topic', 'post'],
|
|
standard: ['topic', 'post'],
|
|
business: ['*']
|
|
},
|
|
type: {
|
|
none: ['string', 'boolean', 'integer'],
|
|
standard: ['string', 'boolean', 'integer'],
|
|
business: ['*']
|
|
}
|
|
}
|
|
}
|
|
end
|
|
|
|
def initialize
|
|
@subscription = find_subscription
|
|
end
|
|
|
|
def includes?(feature, attribute, value)
|
|
attributes = self.class.attributes[feature]
|
|
|
|
## Attribute is not part of a subscription
|
|
return true unless attributes.present? && attributes.key?(attribute)
|
|
|
|
values = attributes[attribute][type]
|
|
|
|
## Subscription type does not support the attribute.
|
|
return false if values.blank?
|
|
|
|
## Subscription type supports all values of the attribute.
|
|
return true if values.first === "*"
|
|
|
|
## Subscription type supports some values of the attributes.
|
|
values.include?(value)
|
|
end
|
|
|
|
def type
|
|
return :none unless subscribed?
|
|
return :standard if standard?
|
|
return :business if business?
|
|
end
|
|
|
|
def subscribed?
|
|
standard? || business?
|
|
end
|
|
|
|
def standard?
|
|
@subscription.product_id === STANDARD_PRODUCT_ID
|
|
end
|
|
|
|
def business?
|
|
@subscription.product_id === BUSINESS_PRODUCT_ID
|
|
end
|
|
|
|
def client_installed?
|
|
defined?(SubscriptionClient) == 'constant' && SubscriptionClient.class == Module
|
|
end
|
|
|
|
def find_subscription
|
|
subscription = nil
|
|
|
|
if client_installed?
|
|
subscription = SubscriptionClientSubscription.active
|
|
.where(product_id: [STANDARD_PRODUCT_ID, BUSINESS_PRODUCT_ID])
|
|
.order("product_id = '#{BUSINESS_PRODUCT_ID}' DESC")
|
|
.first
|
|
end
|
|
|
|
unless subscription
|
|
subscription = OpenStruct.new(product_id: nil)
|
|
end
|
|
|
|
subscription
|
|
end
|
|
|
|
def self.subscribed?
|
|
new.subscribed?
|
|
end
|
|
|
|
def self.business?
|
|
new.business?
|
|
end
|
|
|
|
def self.standard?
|
|
new.standard?
|
|
end
|
|
|
|
def self.type
|
|
new.type
|
|
end
|
|
|
|
def self.client_installed?
|
|
new.client_installed?
|
|
end
|
|
|
|
def self.includes?(feature, attribute, value)
|
|
new.includes?(feature, attribute, value)
|
|
end
|
|
end
|