diff --git a/admin/assets/javascripts/admin/components/admin-edit-leaderboard.gjs b/admin/assets/javascripts/admin/components/admin-edit-leaderboard.gjs
index 84f89cde..adf89f95 100644
--- a/admin/assets/javascripts/admin/components/admin-edit-leaderboard.gjs
+++ b/admin/assets/javascripts/admin/components/admin-edit-leaderboard.gjs
@@ -29,6 +29,7 @@ export default class AdminEditLeaderboard extends Component {
excluded_groups_ids: this.args.leaderboard.excludedGroupsIds,
visible_to_groups_ids: this.args.leaderboard.visibleToGroupsIds,
default_period: this.args.leaderboard.defaultPeriod,
+ period_filter_disabled: this.args.leaderboard.periodFilterDisabled,
};
}
@@ -159,6 +160,14 @@ export default class AdminEditLeaderboard extends Component {
+
+
+
diff --git a/app/controllers/discourse_gamification/admin_gamification_leaderboard_controller.rb b/app/controllers/discourse_gamification/admin_gamification_leaderboard_controller.rb
index 0710ae26..bf829690 100644
--- a/app/controllers/discourse_gamification/admin_gamification_leaderboard_controller.rb
+++ b/app/controllers/discourse_gamification/admin_gamification_leaderboard_controller.rb
@@ -49,6 +49,7 @@ def update
excluded_groups_ids: params[:excluded_groups_ids] || [],
visible_to_groups_ids: params[:visible_to_groups_ids] || [],
default_period: params[:default_period],
+ period_filter_disabled: params[:period_filter_disabled] || false,
)
if leaderboard.save
diff --git a/app/models/discourse_gamification/gamification_leaderboard.rb b/app/models/discourse_gamification/gamification_leaderboard.rb
index e1a8601e..8e901718 100644
--- a/app/models/discourse_gamification/gamification_leaderboard.rb
+++ b/app/models/discourse_gamification/gamification_leaderboard.rb
@@ -45,18 +45,19 @@ def self.scores_for(leaderboard_id, page: 0, for_user_id: false, period: nil, us
#
# Table name: gamification_leaderboards
#
-# id :bigint not null, primary key
-# name :string not null
-# from_date :date
-# to_date :date
-# for_category_id :integer
-# created_by_id :integer not null
-# created_at :datetime not null
-# updated_at :datetime not null
-# visible_to_groups_ids :integer default([]), not null, is an Array
-# included_groups_ids :integer default([]), not null, is an Array
-# excluded_groups_ids :integer default([]), not null, is an Array
-# default_period :integer default(0)
+# id :bigint not null, primary key
+# name :string not null
+# from_date :date
+# to_date :date
+# for_category_id :integer
+# created_by_id :integer not null
+# created_at :datetime not null
+# updated_at :datetime not null
+# visible_to_groups_ids :integer default([]), not null, is an Array
+# included_groups_ids :integer default([]), not null, is an Array
+# excluded_groups_ids :integer default([]), not null, is an Array
+# default_period :integer default(0)
+# period_filter_disabled :boolean default(FALSE), not null
#
# Indexes
#
diff --git a/app/serializers/leaderboard_serializer.rb b/app/serializers/leaderboard_serializer.rb
index 351fda0d..71d9db7e 100644
--- a/app/serializers/leaderboard_serializer.rb
+++ b/app/serializers/leaderboard_serializer.rb
@@ -10,5 +10,6 @@ class LeaderboardSerializer < ApplicationSerializer
:included_groups_ids,
:excluded_groups_ids,
:default_period,
- :updated_at
+ :updated_at,
+ :period_filter_disabled
end
diff --git a/assets/javascripts/discourse/components/gamification-leaderboard.hbs b/assets/javascripts/discourse/components/gamification-leaderboard.hbs
index 4176a638..b96076f5 100644
--- a/assets/javascripts/discourse/components/gamification-leaderboard.hbs
+++ b/assets/javascripts/discourse/components/gamification-leaderboard.hbs
@@ -14,6 +14,7 @@
@period={{this.period}}
@action={{action "changePeriod"}}
@fullDay={{false}}
+ @options={{hash disabled=this.model.leaderboard.period_filter_disabled}}
class="leaderboard__period-chooser"
/>
{{#if this.currentUser.staff}}
diff --git a/assets/javascripts/discourse/models/gamification-leaderboard.js b/assets/javascripts/discourse/models/gamification-leaderboard.js
index c9f6b815..74c69b70 100644
--- a/assets/javascripts/discourse/models/gamification-leaderboard.js
+++ b/assets/javascripts/discourse/models/gamification-leaderboard.js
@@ -19,6 +19,7 @@ export default class GamificationLeaderboard {
@tracked toDate;
@tracked name;
@tracked period;
+ @tracked periodFilterDisabled;
constructor(args = {}) {
this.id = args.id;
@@ -33,6 +34,7 @@ export default class GamificationLeaderboard {
this.toDate = args.to_date;
this.name = args.name;
this.period = args.period;
+ this.periodFilterDisabled = args.period_filter_disabled;
if (Number.isInteger(args.default_period)) {
this.defaultPeriod = I18n.t(
diff --git a/config/locales/client.en.yml b/config/locales/client.en.yml
index eceb3eca..3738d202 100644
--- a/config/locales/client.en.yml
+++ b/config/locales/client.en.yml
@@ -40,6 +40,7 @@ en:
excluded_groups_help: "Remove users on those groups from being included in the leaderboard. Leave empty to list everyone."
default_period: "Default period"
default_period_help: "Set the default time period to display for this leaderboard."
+ period_filter_disabled: "Disable time period filter"
period:
all_time: "All Time"
yearly: "Yearly"
diff --git a/db/migrate/20250102185307_add_period_filter_disabled_to_leaderboards.rb b/db/migrate/20250102185307_add_period_filter_disabled_to_leaderboards.rb
new file mode 100644
index 00000000..602070a2
--- /dev/null
+++ b/db/migrate/20250102185307_add_period_filter_disabled_to_leaderboards.rb
@@ -0,0 +1,11 @@
+# frozen_string_literal: true
+
+class AddPeriodFilterDisabledToLeaderboards < ActiveRecord::Migration[7.2]
+ def change
+ add_column :gamification_leaderboards,
+ :period_filter_disabled,
+ :boolean,
+ default: false,
+ null: false
+ end
+end