WIP Add member/contributor status to users
All checks were successful
continuous-integration/drone/push Build is passing
All checks were successful
continuous-integration/drone/push Build is passing
This commit is contained in:
10
app/models/concerns/settings/member_settings.rb
Normal file
10
app/models/concerns/settings/member_settings.rb
Normal file
@@ -0,0 +1,10 @@
|
||||
module Settings
|
||||
module MemberSettings
|
||||
extend ActiveSupport::Concern
|
||||
|
||||
included do
|
||||
field :member_default_status, type: :string,
|
||||
default: ENV["MEMBER_DEFAULT_STATUS"].presence
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -163,7 +163,21 @@ class User < ApplicationRecord
|
||||
|
||||
def ldap_entry(reload: false)
|
||||
return @ldap_entry if defined?(@ldap_entry) && !reload
|
||||
@ldap_entry = ldap.fetch_users(uid: self.cn, ou: self.ou).first
|
||||
@ldap_entry = ldap.fetch_users(cn: self.cn).first
|
||||
end
|
||||
|
||||
def add_to_ldap_array(attr_key, ldap_attr, value)
|
||||
current_entries = ldap_entry[attr_key.to_sym] || []
|
||||
new_entries = Array(value).map(&:to_s)
|
||||
entries = (current_entries + new_entries).uniq.sort
|
||||
ldap.replace_attribute(dn, ldap_attr.to_sym, entries)
|
||||
end
|
||||
|
||||
def remove_from_ldap_array(attr_key, ldap_attr, value)
|
||||
current_entries = ldap_entry[attr_key.to_sym] || []
|
||||
entries_to_remove = Array(value).map(&:to_s)
|
||||
entries = (current_entries - entries_to_remove).uniq.sort
|
||||
ldap.replace_attribute(dn, ldap_attr.to_sym, entries)
|
||||
end
|
||||
|
||||
def display_name
|
||||
@@ -220,21 +234,39 @@ class User < ApplicationRecord
|
||||
end
|
||||
|
||||
def enable_service(service)
|
||||
current_services = services_enabled
|
||||
new_services = Array(service).map(&:to_s)
|
||||
services = (current_services + new_services).uniq.sort
|
||||
ldap.replace_attribute(dn, :serviceEnabled, services)
|
||||
add_to_ldap_array :services_enabled, :serviceEnabled, service
|
||||
ldap_entry(reload: true)[:services_enabled]
|
||||
end
|
||||
|
||||
def disable_service(service)
|
||||
current_services = services_enabled
|
||||
disabled_services = Array(service).map(&:to_s)
|
||||
services = (current_services - disabled_services).uniq.sort
|
||||
ldap.replace_attribute(dn, :serviceEnabled, services)
|
||||
remove_from_ldap_array :services_enabled, :serviceEnabled, service
|
||||
ldap_entry(reload: true)[:services_enabled]
|
||||
end
|
||||
|
||||
def disable_all_services
|
||||
ldap.delete_attribute(dn,:service)
|
||||
ldap.delete_attribute(dn, :serviceEnabled)
|
||||
end
|
||||
|
||||
def member_status
|
||||
ldap_entry[:member_status] || []
|
||||
end
|
||||
|
||||
def add_member_status(status)
|
||||
add_to_ldap_array :member_status, :memberStatus, status
|
||||
ldap_entry(reload: true)[:member_status]
|
||||
end
|
||||
|
||||
def remove_member_status(status)
|
||||
remove_from_ldap_array :member_status, :memberStatus, status
|
||||
ldap_entry(reload: true)[:member_status]
|
||||
end
|
||||
|
||||
def is_contributing_member?
|
||||
member_status.map(&:to_sym).include?(:contributor)
|
||||
end
|
||||
|
||||
def is_paying_member?
|
||||
member_status.map(&:to_sym).include?(:sustainer)
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
Reference in New Issue
Block a user