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 @@ +
+ <%= form_with model: user, + url: (@is_own_settings ? my_settings_path : settings_user_path(user)), + method: :patch, local: false do |f| %> +
+ <%= f.label "Simple text" %> + <%= f.select :hackatime_extension_text_type, + User.hackatime_extension_text_types.keys.map { |type| [type.humanize, type] }, + { selected: user.hackatime_extension_text_type }, + { class: "form-select", onchange: "this.form.submit()" } %> +
+ <% end %> +
diff --git a/app/views/users/_privacy_settings_toggle.html.erb b/app/views/users/_privacy_settings_toggle.html.erb new file mode 100644 index 00000000..b7be9bbd --- /dev/null +++ b/app/views/users/_privacy_settings_toggle.html.erb @@ -0,0 +1,12 @@ +
+

+ Public Stats API Access
+ Allow others to look up your public coding stats via the API +

+ <%= form_with url: (@is_own_settings ? my_settings_path : settings_user_path(user)), method: :patch, local: false do |f| %> + <%= hidden_field_tag :toggle_public_stats, "1" %> + <%= f.submit user.allow_public_stats_lookup? ? "Disable API Access" : "Enable API Access", + role: "button", + class: user.allow_public_stats_lookup? ? "secondary" : "" %> + <% end %> +
diff --git a/app/views/users/_slack_status_toggle.html.erb b/app/views/users/_slack_status_toggle.html.erb new file mode 100644 index 00000000..37e5ffc8 --- /dev/null +++ b/app/views/users/_slack_status_toggle.html.erb @@ -0,0 +1,12 @@ +
+

+ Slack Status Updates
+ Update my Slack status with my current project +

+ <%= form_with url: (@is_own_settings ? my_settings_path : settings_user_path(user)), method: :patch, local: false do |f| %> + <%= hidden_field_tag :toggle_slack_status, "1" %> + <%= f.submit user.uses_slack_status? ? "Disable Status Updates" : "Enable Status Updates", + role: "button", + class: user.uses_slack_status? ? "secondary" : "" %> + <% end %> +
diff --git a/app/views/users/edit.html.erb b/app/views/users/edit.html.erb index 9dacd794..f3edc8e1 100644 --- a/app/views/users/edit.html.erb +++ b/app/views/users/edit.html.erb @@ -49,17 +49,7 @@ <% unless @can_enable_slack_status %> <%= link_to "Re-authorize with Slack to give permission to update your status", slack_auth_path, role: "button", class: "secondary" %> <% end %> - <%= form_with model: @user, - url: @is_own_settings ? my_settings_path : settings_user_path(@user), - method: :patch do |f| %> -
- -
- <%= f.submit "Save Settings", role: "button" %> - <% end %> + <%= render "slack_status_toggle", user: @user %>
@@ -145,17 +135,7 @@

⚙️ Extension Settings

- <%= form_with model: @user, - url: @is_own_settings ? my_settings_path : settings_user_path(@user), - method: :patch do |f| %> -
- <%= f.label "Simple text" %> - <%= f.select :hackatime_extension_text_type, - User.hackatime_extension_text_types.keys.map { |type| [type.humanize, type] }, - selected: @user.hackatime_extension_text_type, class: "form-select" %> -
- <%= f.submit "Save Settings", role: "button" %> - <% end %> + <%= render "extension_settings", user: @user %>
@@ -255,17 +235,7 @@

🔒 Privacy Settings

- <%= form_with model: @user, - url: @is_own_settings ? my_settings_path : settings_user_path(@user), - method: :patch do |f| %> -
- -
- <%= f.submit "Save Settings", role: "button" %> - <% end %> + <%= render "privacy_settings_toggle", user: @user %>