From 6172c737e1ea5e918dc9b12bd5ef41d38c5d731e Mon Sep 17 00:00:00 2001 From: Echo Date: Wed, 18 Jun 2025 15:41:46 -0400 Subject: [PATCH] make regional leaderboards the default --- app/controllers/leaderboards_controller.rb | 2 +- app/controllers/static_pages_controller.rb | 6 ++-- app/controllers/users_controller.rb | 28 +------------------ app/models/user.rb | 1 + .../leaderboards/_mini_leaderboard.html.erb | 2 +- app/views/leaderboards/index.html.erb | 26 ++++++++--------- .../_timezone_leaderboard_toggle.html.erb | 7 ++--- app/views/users/edit.html.erb | 14 ++++++++-- ...d_default_timezone_leaderboard_to_users.rb | 5 ++++ 9 files changed, 37 insertions(+), 54 deletions(-) create mode 100644 db/migrate/20250618170000_add_default_timezone_leaderboard_to_users.rb diff --git a/app/controllers/leaderboards_controller.rb b/app/controllers/leaderboards_controller.rb index f1abdc5..2165587 100644 --- a/app/controllers/leaderboards_controller.rb +++ b/app/controllers/leaderboards_controller.rb @@ -15,7 +15,7 @@ class LeaderboardsController < ApplicationController private def set_params - @use_timezone_leaderboard = current_user && Flipper.enabled?(:timezone_leaderboard, current_user) + @use_timezone_leaderboard = current_user&.default_timezone_leaderboard @period_type = validated_period_type @scope = params[:scope] || (@use_timezone_leaderboard ? "regional" : "global") @scope_description = scope_description diff --git a/app/controllers/static_pages_controller.rb b/app/controllers/static_pages_controller.rb index 9b60160..a2d3330 100644 --- a/app/controllers/static_pages_controller.rb +++ b/app/controllers/static_pages_controller.rb @@ -85,10 +85,10 @@ class StaticPagesController < ApplicationController end def mini_leaderboard - @use_timezone_leaderboard = current_user && Flipper.enabled?(:timezone_leaderboard, current_user) + use_timezone_leaderboard = current_user&.default_timezone_leaderboard - if @use_timezone_leaderboard && current_user&.timezone_utc_offset - # Use regional leaderboard for beta participants + if use_timezone_leaderboard && current_user&.timezone_utc_offset + # we now doing it by default wooo @leaderboard = LeaderboardGenerator.generate_timezone_offset_leaderboard( Date.current, current_user.timezone_utc_offset, :daily ) diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index 7faf7da..6f77539 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -20,32 +20,6 @@ class UsersController < ApplicationController end def update - # Handle timezone leaderboard toggle - if params[:toggle_timezone_leaderboard] == "1" - if Flipper.enabled?(:timezone_leaderboard, @user) - Flipper.disable(:timezone_leaderboard, @user) - message = "Regional & Timezone Leaderboards disabled" - else - Flipper.enable(:timezone_leaderboard, @user) - message = "Regional & Timezone Leaderboards enabled" - end - - respond_to do |format| - format.turbo_stream do - render turbo_stream: turbo_stream.replace( - "timezone_leaderboard_toggle", - partial: "timezone_leaderboard_toggle", - locals: { user: @user } - ) - end - format.html do - redirect_to is_own_settings? ? my_settings_path : settings_user_path(@user), - notice: message - end - end - return - end - # Handle regular user settings updates if params[:user].present? if @user.update(user_params) @@ -132,6 +106,6 @@ class UsersController < ApplicationController end def user_params - params.require(:user).permit(:uses_slack_status, :hackatime_extension_text_type, :timezone, :allow_public_stats_lookup) + params.require(:user).permit(:uses_slack_status, :hackatime_extension_text_type, :timezone, :allow_public_stats_lookup, :default_timezone_leaderboard) end end diff --git a/app/models/user.rb b/app/models/user.rb index a753e9d..0a9875f 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -10,6 +10,7 @@ class User < ApplicationRecord validates :country_code, inclusion: { in: ISO3166::Country.codes }, allow_nil: true attribute :allow_public_stats_lookup, :boolean, default: true + attribute :default_timezone_leaderboard, :boolean, default: true def country_name ISO3166::Country.new(country_code).common_name diff --git a/app/views/leaderboards/_mini_leaderboard.html.erb b/app/views/leaderboards/_mini_leaderboard.html.erb index 12eaae3..c0fa4b1 100644 --- a/app/views/leaderboards/_mini_leaderboard.html.erb +++ b/app/views/leaderboards/_mini_leaderboard.html.erb @@ -26,7 +26,7 @@

<% if leaderboard.respond_to?(:scope_name) %> - 🧪 <%= link_to "Regional Leaderboard", my_settings_path(anchor: "user_beta_features") %>: Showing others in <%= link_to "your timezone", my_settings_path(anchor: "user_timezone") %> + Showing others in <%= link_to "your timezone", my_settings_path(anchor: "user_timezone") %> <% else %> This leaderboard is in <%= Leaderboard::GLOBAL_TIMEZONE %>. <% if current_user && timezone_difference_in_seconds(Leaderboard::GLOBAL_TIMEZONE, current_user.timezone) != 0 %> diff --git a/app/views/leaderboards/index.html.erb b/app/views/leaderboards/index.html.erb index 39d4ec7..10eebd3 100644 --- a/app/views/leaderboards/index.html.erb +++ b/app/views/leaderboards/index.html.erb @@ -3,13 +3,13 @@

Leaderboard

<% if @scope == 'regional' %> - 🧪 Regional Leaderboard: Showing users in <%= @scope_description %> + Regional Leaderboard: Showing users in <%= @scope_description %> <% elsif @scope == 'timezone' %> - 🧪 Timezone Leaderboard: Showing users in <%= @scope_description %> + Timezone Leaderboard: Showing users in <%= @scope_description %> <% elsif @scope == 'global' %> This leaderboard runs in UTC time! <% else %> - 🧪 Regional Leaderboard: Showing users in <%= @scope_description %> + Regional Leaderboard: Showing users in <%= @scope_description %> <% end %>
@@ -21,18 +21,14 @@ class: "period-toggle-btn #{@period_type == :last_7_days ? 'active' : ''}" %>
- <% if current_user && Flipper.enabled?(:timezone_leaderboard, current_user) %> -
- <%= link_to "Timezone", leaderboards_path(period_type: @period_type, scope: 'timezone'), - class: "period-toggle-btn #{@scope == 'timezone' ? 'active' : ''}" %> - <%= link_to "Regional", leaderboards_path(period_type: @period_type, scope: 'regional'), - class: "period-toggle-btn #{@scope == 'regional' ? 'active' : ''}" %> - <%= link_to "Global", leaderboards_path(period_type: @period_type, scope: 'global'), - class: "period-toggle-btn #{@scope == 'global' ? 'active' : ''}" %> -
- <% end %> - - +
+ <%= link_to "Timezone", leaderboards_path(period_type: @period_type, scope: 'timezone'), + class: "period-toggle-btn #{@scope == 'timezone' ? 'active' : ''}" %> + <%= link_to "Regional", leaderboards_path(period_type: @period_type, scope: 'regional'), + class: "period-toggle-btn #{@scope == 'regional' ? 'active' : ''}" %> + <%= link_to "Global", leaderboards_path(period_type: @period_type, scope: 'global'), + class: "period-toggle-btn #{@scope == 'global' ? 'active' : ''}" %> +
<% if current_user && current_user.github_uid.blank? %>

diff --git a/app/views/users/_timezone_leaderboard_toggle.html.erb b/app/views/users/_timezone_leaderboard_toggle.html.erb index 1ad7b41..e5fa3b2 100644 --- a/app/views/users/_timezone_leaderboard_toggle.html.erb +++ b/app/views/users/_timezone_leaderboard_toggle.html.erb @@ -4,9 +4,8 @@ Access regional leaderboards that show users in your timezone region or specific timezone. Choose between timezone-specific, regional (UTC offset), or global competition modes.

<%= form_with url: (@is_own_settings ? my_settings_path : settings_user_path(user)), method: :patch, local: false do |f| %> - <%= hidden_field_tag :toggle_timezone_leaderboard, "1" %> - <%= f.submit Flipper.enabled?(:timezone_leaderboard, user) ? "Disable Feature" : "Enable Feature", - role: "button", - class: Flipper.enabled?(:timezone_leaderboard, user) ? "secondary" : "" %> + <%= f.check_box :default_timezone_leaderboard, checked: user.default_timezone_leaderboard, id: "user_default_timezone_leaderboard" %> + <%= f.label :default_timezone_leaderboard, "Default to Timezone Leaderboard", for: "user_default_timezone_leaderboard" %> + <%= f.submit "Save", role: "button" %> <% end %>
diff --git a/app/views/users/edit.html.erb b/app/views/users/edit.html.erb index 9dacd79..b3a2dd4 100644 --- a/app/views/users/edit.html.erb +++ b/app/views/users/edit.html.erb @@ -270,13 +270,21 @@
-

🧪 Beta Features

-

Enable experimental features and help us test new functionality.

+

🏆 Leaderboard settings

+

Customize how you see the leaderboard

- <%= render "timezone_leaderboard_toggle", user: @user %>
+ <%# +
+
+

🧪 Beta Features

+

Enable experimental features and help us test new functionality.

+
+
+ %> + <% admin_tool do %>
diff --git a/db/migrate/20250618170000_add_default_timezone_leaderboard_to_users.rb b/db/migrate/20250618170000_add_default_timezone_leaderboard_to_users.rb new file mode 100644 index 0000000..62be90e --- /dev/null +++ b/db/migrate/20250618170000_add_default_timezone_leaderboard_to_users.rb @@ -0,0 +1,5 @@ +class AddDefaultTimezoneLeaderboardToUsers < ActiveRecord::Migration[7.0] + def change + add_column :users, :default_timezone_leaderboard, :boolean, default: true, null: false + end +end