Extract component to render account permissions

We were using similar code in four different places; six, if we count
the welcome pages seeds. Reducing duplication in the pages seeds is a
bit tricky because administrators are supposed to edit their content and
might remove the HTML class we use to define styles. However, we can
share the code everywhere else.

Note that there's a bug in the application since we show that level 2
users cannot vote for budget projects but we give them permission to do
so in the abilities model. We're keeping the same behavior after this
refactoring but we might change it in the future.
This commit is contained in:
Javi Martín
2022-08-11 01:24:08 +02:00
parent feaa9ee736
commit 9b908d7264
17 changed files with 62 additions and 104 deletions

View File

@@ -0,0 +1,23 @@
.permissions-list {
list-style-type: none;
margin-bottom: 0;
margin-left: 0;
li {
font-size: $small-font-size;
margin-bottom: $line-height / 2;
span {
color: $text-medium;
font-size: rem-calc(12);
}
.icon-check {
color: $check;
}
.icon-x {
color: $delete;
}
}
}

View File

@@ -525,32 +525,6 @@ code {
// 05. Management // 05. Management
// -------------- // --------------
.user-permissions {
ul {
list-style-type: none;
margin-left: 0;
}
li {
font-size: rem-calc(14);
margin-bottom: rem-calc(12);
span {
color: $text-medium;
font-size: rem-calc(12);
}
.icon-check {
color: $check;
}
.icon-x {
color: $delete;
}
}
}
.account-info, .account-info,
.login-as { .login-as {
background-color: $highlight; background-color: $highlight;

View File

@@ -41,6 +41,7 @@
@import "stats"; @import "stats";
@import "sticky_overrides"; @import "sticky_overrides";
@import "tags"; @import "tags";
@import "account/**/*";
@import "admin/**/*"; @import "admin/**/*";
@import "budgets/**/*"; @import "budgets/**/*";
@import "debates/**/*"; @import "debates/**/*";

View File

@@ -1278,30 +1278,6 @@ form {
font-size: rem-calc(12); font-size: rem-calc(12);
} }
} }
ul {
list-style-type: none;
margin-bottom: 0;
margin-left: 0;
}
li {
font-size: $small-font-size;
margin-bottom: $line-height / 2;
span {
color: $text-medium;
font-size: rem-calc(12);
}
.icon-check {
color: $check;
}
.icon-x {
color: $delete;
}
}
} }
.notifications-list { .notifications-list {

View File

@@ -0,0 +1,20 @@
<ul class="permissions-list">
<li><span class="icon-check"></span>&nbsp;<%= t("verification.user_permission_debates") %></li>
<li><span class="icon-check"></span>&nbsp;<%= t("verification.user_permission_proposal") %></li>
<li>
<% if user.level_two_or_three_verified? %>
<span class="icon-check"></span>
<% else %>
<span class="icon-x"></span>
<% end %>
<%= t("verification.user_permission_support_proposal") %>
</li>
<li>
<% if user.level_three_verified? %>
<span class="icon-check"></span>
<% else %>
<span class="icon-x"></span>
<% end %>
<%= t("verification.user_permission_votes") %>
</li>
</ul>

View File

@@ -0,0 +1,7 @@
class Account::PermissionsListComponent < ApplicationComponent
attr_reader :user
def initialize(user)
@user = user
end
end

View File

@@ -1,6 +1,6 @@
class Management::UsersController < Management::BaseController class Management::UsersController < Management::BaseController
def new def new
@user = User.new(user_params) @user = User.new(user_params.merge(verified_at: Time.current))
end end
def create def create

View File

@@ -93,26 +93,7 @@
<p><%= t("account.show.user_permission_info") %></p> <p><%= t("account.show.user_permission_info") %></p>
<ul> <%= render Account::PermissionsListComponent.new(current_user) %>
<li><span class="icon-check"></span>&nbsp;<%= t("verification.user_permission_debates") %></li>
<li><span class="icon-check"></span>&nbsp;<%= t("verification.user_permission_proposal") %></li>
<li>
<% if current_user.level_two_or_three_verified? %>
<span class="icon-check"></span>
<% else %>
<span class="icon-x"></span>
<% end %>
<%= t("verification.user_permission_support_proposal") %>
</li>
<li>
<% if current_user.level_three_verified? %>
<span class="icon-check"></span>
<% else %>
<span class="icon-x"></span>
<% end %>
<%= t("verification.user_permission_votes") %>
</li>
</ul>
<p> <p>
<%= t("account.show.user_permission_verify") %> <%= t("account.show.user_permission_verify") %>

View File

@@ -1,18 +1,5 @@
<%# # Parameters:
# message: A string explaining the permissions
# permissions: An array of symbols containing the permissions
# (can be :debates, :proposal, :support_proposal, :votes) %>
<div class="user-permissions"> <div class="user-permissions">
<p><%= message %></p> <p><%= message %></p>
<ul> <%= render Account::PermissionsListComponent.new(user) %>
<% [:debates, :proposal, :support_proposal, :votes].each do |permission| %>
<li>
<span class="<%= permissions.include?(permission) ? "icon-check" : "icon-x" %>"></span>
<%= t("verification.user_permission_#{permission}") %>
</li>
<% end %>
</ul>
</div> </div>

View File

@@ -8,7 +8,7 @@
<%= render "management/user_permissions", <%= render "management/user_permissions",
message: t("management.document_verifications.not_in_census_info"), message: t("management.document_verifications.not_in_census_info"),
permissions: [:debates, :proposal] %> user: User.new %>
<p> <p>
<%= sanitize(t("management.document_verifications.has_no_account", <%= sanitize(t("management.document_verifications.has_no_account",

View File

@@ -4,7 +4,7 @@
<%= render "management/user_permissions", <%= render "management/user_permissions",
message: t("management.document_verifications.in_census_has_following_permissions"), message: t("management.document_verifications.in_census_has_following_permissions"),
permissions: [:debates, :proposal, :support_proposal] %> user: @document_verification.user %>
<%= form_for @document_verification, <%= form_for @document_verification,
as: :document_verification, as: :document_verification,

View File

@@ -4,6 +4,6 @@
<%= render "management/user_permissions", <%= render "management/user_permissions",
message: t("management.document_verifications.in_census_has_following_permissions"), message: t("management.document_verifications.in_census_has_following_permissions"),
permissions: [:debates, :proposal, :support_proposal, :votes] %> user: @document_verification.user %>
<a href="javascript:window.print();" class="button warning"><%= t("management.print_info") %></a> <a href="javascript:window.print();" class="button warning"><%= t("management.print_info") %></a>

View File

@@ -4,7 +4,7 @@
<%= render "management/user_permissions", <%= render "management/user_permissions",
message: t("management.email_verifications.document_found_in_census"), message: t("management.email_verifications.document_found_in_census"),
permissions: [:debates, :proposal, :support_proposal, :votes] %> user: @email_verification.user %>
<p> <p>
<a href="javascript:window.print();" class="button warning"><%= t("management.print_info") %></a> <a href="javascript:window.print();" class="button warning"><%= t("management.print_info") %></a>

View File

@@ -25,6 +25,6 @@
<div class="callout"> <div class="callout">
<%= render "management/user_permissions", <%= render "management/user_permissions",
message: t("management.document_verifications.in_census_has_following_permissions"), message: t("management.document_verifications.in_census_has_following_permissions"),
permissions: [:debates, :proposal, :support_proposal, :votes] %> user: @user %>
</div> </div>
</div> </div>

View File

@@ -6,6 +6,6 @@
<%= render "management/user_permissions", <%= render "management/user_permissions",
message: t("management.document_verifications.in_census_has_following_permissions"), message: t("management.document_verifications.in_census_has_following_permissions"),
permissions: [:debates, :proposal, :support_proposal, :votes] %> user: @user %>
<a href="javascript:window.print();" class="button warning radius"><%= t("management.print_info") %></a> <a href="javascript:window.print();" class="button warning radius"><%= t("management.print_info") %></a>

View File

@@ -24,15 +24,9 @@
<h1><%= t("verification.letter.new.title") %></h1> <h1><%= t("verification.letter.new.title") %></h1>
<div class="user-permissions"> <div class="user-permissions">
<p><%= t("verification.letter.new.user_permission_info") %></p> <p><%= t("verification.letter.new.user_permission_info") %></p>
<ul> <%= render Account::PermissionsListComponent.new(current_user) %>
<li><span class="icon-check"></span>&nbsp;<%= t("verification.user_permission_debates") %></li>
<li><span class="icon-check"></span>&nbsp;<%= t("verification.user_permission_proposal") %></li>
<li><span class="icon-check"></span>&nbsp;<%= t("verification.user_permission_support_proposal") %></li>
<li><span class="icon-x"></span>&nbsp;<%= t("verification.user_permission_votes") %></li>
</ul>
</div> </div>
<%= link_to t("verification.letter.new.go_to_index"), root_path, class: "button warning" %> <%= link_to t("verification.letter.new.go_to_index"), root_path, class: "button warning" %>

View File

@@ -24,12 +24,7 @@
<div class="user-permissions small-12"> <div class="user-permissions small-12">
<p><%= t("verification.user_permission_info") %></p> <p><%= t("verification.user_permission_info") %></p>
<ul> <%= render Account::PermissionsListComponent.new(User.new(level_two_verified_at: Time.current)) %>
<li><span class="icon-check"></span>&nbsp;<%= t("verification.user_permission_debates") %></li>
<li><span class="icon-check"></span>&nbsp;<%= t("verification.user_permission_proposal") %></li>
<li><span class="icon-check"></span>&nbsp;<%= t("verification.user_permission_support_proposal") %></li>
<li><span class="icon-x"></span>&nbsp;<%= t("verification.user_permission_votes") %></li>
</ul>
</div> </div>
<%= form_for @residence, as: "residence", url: residence_path do |f| %> <%= form_for @residence, as: "residence", url: residence_path do |f| %>