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