Skip to content

Commit d36915c

Browse files
committed
Bugfixes: menu bar profile picture, persmissions, posessive pronouns
1 parent 5be9ce5 commit d36915c

File tree

11 files changed

+61
-40
lines changed

11 files changed

+61
-40
lines changed

app/controllers/ui/users_controller.rb

Lines changed: 21 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,25 @@
11
module Ui
22
class UsersController < ApplicationController
33
include SharedControllerMethods
4+
include UserHelper
45

56
def index
67
redirect_to current_user ? ui_user_path(current_user.username) : login_path
78
end
89

910
def show
1011
find_user!
11-
@title = I18n.t(:show_user_title, username: @user.username)
12+
@title = I18n.t(:show_user_title, owner: owner(true))
1213
add_breadcrumb(@title, ui_user_path(@user.username))
1314
render "show", layout: "base"
1415
end
1516

1617
def secrets
1718
find_user!
18-
return unless authorize_user!
19-
@title = I18n.t(:secrets_user_title, username: @user.username)
19+
return unless authorize_user! :show_secrets?, :secrets_user_forbidden
20+
@title = I18n.t(:secrets_user_title, owner: owner)
2021
add_breadcrumbs(
21-
[I18n.t(:show_user_title, username: @user.username), ui_user_path(@user.username)],
22+
[I18n.t(:show_user_title, owner: owner(true)), ui_user_path(@user.username)],
2223
[@title, secrets_ui_user_path(@user.username)]
2324
)
2425
end
@@ -59,17 +60,17 @@ def create
5960

6061
def edit
6162
find_user!
62-
return unless authorize_user!
63-
@title = I18n.t(:edit_user_title)
63+
return unless authorize_user! :update?, :edit_user_forbiden
64+
@title = I18n.t(:edit_user_title, owner: owner)
6465
add_breadcrumbs(
65-
[I18n.t(:show_user_title, username: @user.username), ui_user_path(@user.username)],
66+
[I18n.t(:show_user_title, owner: owner(true)), ui_user_path(@user.username)],
6667
[@title, edit_ui_user_path(@user.username)]
6768
)
6869
end
6970

7071
def update
7172
find_user!
72-
return unless authorize_user!
73+
return unless authorize_user! :update?, :edit_user_forbiden
7374
if @user.update(params.require(:user).permit(
7475
:profile_picture,
7576
:username,
@@ -90,18 +91,18 @@ def update
9091

9192
def delete
9293
find_user!
93-
return unless authorize_user!
94-
@title = I18n.t(:delete_user_title)
94+
return unless authorize_user! :destroy?, :delete_user_forbidden
95+
@title = I18n.t(:delete_user_title, owner: owner)
9596
add_breadcrumbs(
96-
[I18n.t(:show_user_title, username: @user.username), ui_user_path(@user.username)],
97-
[I18n.t(:edit_user_title, username: @user.username), edit_ui_user_path(@user.username)],
97+
[I18n.t(:show_user_title, owner: owner(true)), ui_user_path(@user.username)],
98+
[I18n.t(:edit_user_title, owner: owner), edit_ui_user_path(@user.username)],
9899
[@title, delete_ui_user_path(@user.username)]
99100
)
100101
end
101102

102103
def destroy
103104
find_user!
104-
return unless authorize_user!
105+
return unless authorize_user! :destroy?, :delete_user_forbidden
105106
if @user.username != params[:username]
106107
flash[:alert] = I18n.t(:delete_user_wrong_username)
107108
redirect_to delete_ui_user_path(@user.username)
@@ -122,11 +123,15 @@ def find_user!
122123
@user = User.friendly.find(params[:id])
123124
end
124125

125-
def authorize_user!
126-
return true if authorize? @user, :destroy?
127-
flash[:alert] = I18n.t(:delete_user_forbidden)
126+
def authorize_user!(action, alert)
127+
return true if authorize? @user, action
128+
flash[:alert] = I18n.t(alert)
128129
redirect_to current_user ? ui_user_path(@user) : login_path
129130
return false
130131
end
132+
133+
def owner(capitalize=false)
134+
possessive(@user, current_user, capitalize: capitalize)
135+
end
131136
end
132137
end

app/helpers/user_helper.rb

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,4 +6,15 @@ def profile_picture_url(user)
66
''
77
end
88
end
9-
end
9+
10+
def possessive(user, current_user, params={})
11+
first_person = params[:first_person]
12+
capitalize = params[:capitalize]
13+
if current_user && current_user == user
14+
pronoun = t(first_person ? :first_person_possessive : :second_person_possessive)
15+
capitalize ? pronoun.capitalize : pronoun
16+
else
17+
t :third_person_possessive, username: user.username
18+
end
19+
end
20+
end

app/policies/user_policy.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,6 @@ def update_password?
2525
end
2626

2727
def show_secrets?
28-
user == record
28+
user.try(:is_admin?) || user == record
2929
end
3030
end

app/views/layouts/_nav.html.erb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@
3636
<a class="nav-link ms-md-2" title="<%= t :profile_pic_alt_text %>" href="<%= ui_user_path(current_user.username) %>">
3737
<div class="circular-image-crop navbar-profile-image">
3838
<%= image_tag(
39-
@user.profile_picture.present? ? @user.profile_picture : "default_avatar.svg",
39+
current_user.profile_picture.present? ? current_user.profile_picture : "default_avatar.svg",
4040
alt: t(:profile_pic_alt_text),
4141
class: "w-100"
4242
) %>

app/views/ui/users/delete.html.erb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
<%= bootstrap_form_tag url: ui_user_path(@user.id), method: :delete do |f| %>
22
<%= f.hidden_field :token, value: @token %>
33
<p><%= t(:delete_user_warning_html, username: current_user.username) %></p>
4-
<%= f.text_field :username, label: t(:delete_user_username_label) %>
4+
<%= f.text_field :username, label: t(:delete_user_username_label, owner: possessive(@user, current_user)) %>
55
<div class="mt-4">
6-
<%= f.primary t(:delete_user_submit), class: "btn btn-danger w-100 w-md-auto" %>
6+
<%= f.primary t(:delete_user_submit, owner: possessive(@user, current_user, first_person: true)), class: "btn btn-danger w-100 w-md-auto" %>
77
</div>
88
<% end %>

app/views/ui/users/edit.html.erb

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@
1818
<div class="mt-5">
1919
<%= f.primary t(:edit_user_submit), class: "btn btn-primary w-100 w-md-auto" %>
2020
</div>
21-
<h2 class="mt-5 mb-3"><%= t(:edit_user_other_actions_subhead) %></h2>
22-
<div><%= link_to t(:edit_user_delete_account_submit), delete_ui_user_path(@user.username), class: "btn btn-danger w-100 w-md-auto" %></div>
21+
<% if authorize? @user, :destroy? %>
22+
<h2 class="mt-5 mb-3"><%= t(:edit_user_other_actions_subhead) %></h2>
23+
<div><%= link_to t(:edit_user_delete_account_submit, owner: possessive(@user, current_user)), delete_ui_user_path(@user.username), class: "btn btn-danger w-100 w-md-auto" %></div>
24+
<% end %>
2325
<% end %>

app/views/ui/users/secrets.html.erb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77

88
<% if @user.forward_device_readings? %>
99
<div class="mt-5">
10-
<h1 class="mb-4"><%= t :secrets_user_forwarding_heading %></h1>
10+
<h1 class="mb-4"><%= t :secrets_user_forwarding_heading, owner: possessive(@user, current_user) %></h1>
1111
<p><%= t :secrets_user_forwarding_blurb_html %></p>
1212
<%= render partial: "ui/shared/copyable_input", locals: {
1313
name: t(:secrets_user_forwarding_token_label),

app/views/ui/users/show.html.erb

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -33,12 +33,12 @@
3333
<div class="actions mt-3">
3434
<p class="mb-0">
3535
<% if authorize? @user, :update? %>
36-
<%= link_to(t(:show_user_edit_cta), edit_ui_user_path(@user), class: "btn btn-dark me-md-2 w-100 w-md-auto") %>
36+
<%= link_to(t(:show_user_edit_cta, owner: possessive(@user, current_user)), edit_ui_user_path(@user), class: "btn btn-dark me-md-2 w-100 w-md-auto") %>
3737
<% end %>
3838
<% if authorize? @user, :show_secrets? %>
39-
<%= link_to(t(:show_user_secrets_cta), secrets_ui_user_path(@user), class: "btn btn-dark me-md-2 mt-3 mt-md-0 w-100 w-md-auto") %>
39+
<%= link_to(t(:show_user_secrets_cta, owner: possessive(@user, current_user)), secrets_ui_user_path(@user), class: "btn btn-dark me-md-2 mt-3 mt-md-0 w-100 w-md-auto") %>
4040
<% end %>
41-
<% if @user %>
41+
<% if current_user == @user %>
4242
<%= link_to(t(:show_user_log_out_cta), logout_path, class: "btn btn-dark mt-3 mt-lg-0 w-100 w-md-auto") %>
4343
<% end %>
4444
</p>

config/locales/controllers/en.yml

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,16 +9,17 @@ en:
99
password_reset_success: "Changed password for: %{username}."
1010
password_reset_invalid: "Your reset code might be too old or have been used before."
1111
destroy_session_success: "Logged out!"
12-
show_user_title: "%{username}'s profile"
13-
secrets_user_title: "Your API keys"
12+
show_user_title: "%{owner} profile"
13+
secrets_user_title: "%{owner} API keys"
14+
secrets_user_forbidden: "You are not allowed to see API keys for that user account!"
1415
new_user_title: "Sign up"
1516
new_user_success: "Thanks for signing up! You are now logged in."
1617
new_user_failure: "Some errors prevented us from creating your account. Please check below and try again!"
17-
edit_user_title: "Edit your profile"
18+
edit_user_title: "Edit %{owner} profile"
1819
edit_user_forbidden: "You are not allowed to edit that user account!"
1920
update_user_success: "Your profile has been updated!"
2021
update_user_failure: "Some errors prevented us from updating your profile. Please check below and try again!"
21-
delete_user_title: "Delete your account"
22+
delete_user_title: "Delete %{owner} account"
2223
post_delete_user_title: "We are sorry to see you go!"
2324
delete_user_forbidden: "You are not allowed to delete that user account!"
2425
delete_user_wrong_username: "That username did not match! Please try again."

config/locales/helpers/user/en.yml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
en:
2+
second_person_possessive: "your"
3+
third_person_possessive: "%{username}'s"
4+
first_person_possessive: "my"

0 commit comments

Comments
 (0)