diff --git a/app/controllers/admin/settings/membership_controller.rb b/app/controllers/admin/settings/membership_controller.rb
new file mode 100644
index 0000000..f01e958
--- /dev/null
+++ b/app/controllers/admin/settings/membership_controller.rb
@@ -0,0 +1,23 @@
+class Admin::Settings::MembershipController < Admin::SettingsController
+ def show
+ end
+
+ def update
+ update_settings
+
+ redirect_to admin_settings_membership_path, flash: {
+ success: "Settings saved"
+ }
+ end
+
+ private
+
+ def setting_params
+ params.require(:setting).permit([
+ :member_status_contributor,
+ :member_status_sustainer,
+ :user_index_show_contributors,
+ :user_index_show_sustainers
+ ])
+ end
+end
diff --git a/app/controllers/admin/users_controller.rb b/app/controllers/admin/users_controller.rb
index 105241f..0baeed7 100644
--- a/app/controllers/admin/users_controller.rb
+++ b/app/controllers/admin/users_controller.rb
@@ -6,18 +6,20 @@ class Admin::UsersController < Admin::BaseController
def index
ldap = LdapService.new
ou = Setting.primary_domain
+ @show_contributors = Setting.user_index_show_contributors
+ @show_sustainers = Setting.user_index_show_sustainers
+ @contributors = ldap.search_users(:memberStatus, :contributor, :cn) if @show_contributors
+ @sustainers = ldap.search_users(:memberStatus, :sustainer, :cn) if @show_sustainers
@admins = ldap.search_users(:admin, true, :cn)
- @contributors = ldap.search_users(:memberStatus, :contributor, :cn)
- @sustainers = ldap.search_users(:memberStatus, :sustainer, :cn)
@pagy, @users = pagy(User.where(ou: ou).order(cn: :asc))
@stats = {
users_confirmed: User.where(ou: ou).confirmed.count,
- users_pending: User.where(ou: ou).pending.count,
- users_contributing: @contributors.size,
- users_paying: @sustainers.size
+ users_pending: User.where(ou: ou).pending.count
}
+ @stats[:users_contributing] = @contributors.size if @show_contributors
+ @stats[:users_paying] = @sustainers.size if @show_sustainers
end
# GET /admin/users/:username
diff --git a/app/models/concerns/settings/member_settings.rb b/app/models/concerns/settings/member_settings.rb
deleted file mode 100644
index 09c648b..0000000
--- a/app/models/concerns/settings/member_settings.rb
+++ /dev/null
@@ -1,10 +0,0 @@
-module Settings
- module MemberSettings
- extend ActiveSupport::Concern
-
- included do
- field :member_default_status, type: :string,
- default: ENV["MEMBER_DEFAULT_STATUS"].presence
- end
- end
-end
diff --git a/app/models/concerns/settings/membership_settings.rb b/app/models/concerns/settings/membership_settings.rb
new file mode 100644
index 0000000..bf4712c
--- /dev/null
+++ b/app/models/concerns/settings/membership_settings.rb
@@ -0,0 +1,18 @@
+module Settings
+ module MembershipSettings
+ extend ActiveSupport::Concern
+
+ included do
+ field :member_status_contributor, type: :string,
+ default: "Contributor"
+ field :member_status_sustainer, type: :string,
+ default: "Sustainer"
+
+ # Admin panel
+ field :user_index_show_contributors, type: :boolean,
+ default: false
+ field :user_index_show_sustainers, type: :boolean,
+ default: false
+ end
+ end
+end
diff --git a/app/models/setting.rb b/app/models/setting.rb
index aa8072d..2c31ca8 100644
--- a/app/models/setting.rb
+++ b/app/models/setting.rb
@@ -16,6 +16,7 @@ class Setting < RailsSettings::Base
include Settings::LightningNetworkSettings
include Settings::MastodonSettings
include Settings::MediaWikiSettings
+ include Settings::MembershipSettings
include Settings::NostrSettings
include Settings::OpenCollectiveSettings
include Settings::RemoteStorageSettings
diff --git a/app/views/admin/settings/membership/show.html.erb b/app/views/admin/settings/membership/show.html.erb
new file mode 100644
index 0000000..5b403d6
--- /dev/null
+++ b/app/views/admin/settings/membership/show.html.erb
@@ -0,0 +1,53 @@
+<%= render HeaderComponent.new(title: "Settings") %>
+
+<%= render MainWithSidenavComponent.new(sidenav_partial: 'shared/admin_sidenav_settings') do %>
+ <%= form_for(Setting.new, url: admin_settings_membership_path, method: :put) do |f| %>
+
+ <%= f.submit 'Save', class: "btn-md btn-blue w-full md:w-auto" %>
+ Membership
+
+ <% if @errors && @errors.any? %>
+ <%= render partial: "admin/settings/errors", locals: { errors: @errors } %>
+ <% end %>
+
+
+ <%= render FormElements::FieldsetResettableSettingComponent.new(
+ key: :member_status_contributor,
+ title: "Status name for contributing users",
+ description: "A contributing member of your organization/group"
+ ) %>
+ <%= render FormElements::FieldsetResettableSettingComponent.new(
+ key: :member_status_sustainer,
+ title: "Status name for paying users",
+ description: "A paying/donating member or customer"
+ ) %>
+
+ Admin panel
+
+
+ <%= render FormElements::FieldsetToggleComponent.new(
+ form: f,
+ attribute: :user_index_show_contributors,
+ enabled: Setting.user_index_show_contributors?,
+ title: "Show #{Setting.member_status_contributor.downcase} status in user list",
+ description: "Can slow down page rendering with large user base"
+ ) %>
+ <%= render FormElements::FieldsetToggleComponent.new(
+ form: f,
+ attribute: :user_index_show_sustainers,
+ enabled: Setting.user_index_show_sustainers?,
+ title: "Show #{Setting.member_status_sustainer.downcase} status in user list",
+ description: "Can slow down page rendering with large user base"
+ ) %>
+
+