diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index 7faf7dab..22c28b5e 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -20,29 +20,15 @@ def edit end def update - # Handle timezone leaderboard toggle + # Handle setting toggles 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 + handle_timezone_leaderboard_toggle + return + elsif params[:toggle_public_stats] == "1" + handle_public_stats_toggle + return + elsif params[:toggle_slack_status] == "1" + handle_slack_status_toggle return end @@ -52,11 +38,32 @@ def update if @user.uses_slack_status? @user.update_slack_status end - redirect_to is_own_settings? ? my_settings_path : settings_user_path(@user), - notice: "Settings updated successfully" + + respond_to do |format| + format.turbo_stream do + if params[:user][:hackatime_extension_text_type].present? + render turbo_stream: turbo_stream.replace( + "extension_settings", + partial: "extension_settings", + locals: { user: @user } + ) + else + head :ok + end + end + format.html do + redirect_to is_own_settings? ? my_settings_path : settings_user_path(@user), + notice: "Settings updated successfully" + end + end else - flash[:error] = "Failed to update settings" - render :settings, status: :unprocessable_entity + respond_to do |format| + format.turbo_stream { head :unprocessable_entity } + format.html do + flash[:error] = "Failed to update settings" + render :edit, status: :unprocessable_entity + end + end end else redirect_to is_own_settings? ? my_settings_path : settings_user_path(@user), @@ -105,6 +112,40 @@ def update_trust_level private + def handle_timezone_leaderboard_toggle + if Flipper.enabled?(:timezone_leaderboard, @user) + Flipper.disable(:timezone_leaderboard, @user) + else + Flipper.enable(:timezone_leaderboard, @user) + end + + render_setting_toggle("timezone_leaderboard") + end + + def handle_public_stats_toggle + @user.update!(allow_public_stats_lookup: !@user.allow_public_stats_lookup?) + render_setting_toggle("privacy_settings") + end + + def handle_slack_status_toggle + @user.update!(uses_slack_status: !@user.uses_slack_status?) + @user.update_slack_status if @user.uses_slack_status? + render_setting_toggle("slack_status") + end + + def render_setting_toggle(partial_name) + respond_to do |format| + format.turbo_stream do + render turbo_stream: turbo_stream.replace( + "#{partial_name}_toggle", + partial: "#{partial_name}_toggle", + locals: { user: @user } + ) + end + format.html { redirect_to is_own_settings? ? my_settings_path : settings_user_path(@user) } + end + end + def require_admin unless current_user.admin? redirect_to root_path, alert: "You are not authorized to access this page" diff --git a/app/views/users/_extension_settings.html.erb b/app/views/users/_extension_settings.html.erb new file mode 100644 index 00000000..337b4071 --- /dev/null +++ b/app/views/users/_extension_settings.html.erb @@ -0,0 +1,13 @@ +
+ Public Stats API Access
+ Allow others to look up your public coding stats via the API
+
+ Slack Status Updates
+ Update my Slack status with my current project
+