merge some common global roles files from users and groups

pull/10063/head
Christophe Bliard 3 years ago
parent 2fb3e0fa52
commit 2fec9a8795
No known key found for this signature in database
GPG Key ID: 2BC07603210C3FA4
  1. 48
      app/helpers/members_helper.rb
  2. 6
      app/views/groups/_global_roles.html.erb
  3. 18
      app/views/groups/_memberships.html.erb
  4. 10
      app/views/individual_principals/_memberships.html.erb
  5. 0
      app/views/principals/_assigned_global_role.html.erb
  6. 0
      app/views/principals/_available_global_role.html.erb
  7. 13
      app/views/principals/_available_global_roles.html.erb
  8. 37
      app/views/users/_assigned_global_role.html.erb
  9. 38
      app/views/users/_available_global_role.html.erb
  10. 65
      app/views/users/_available_global_roles.html.erb
  11. 6
      app/views/users/_global_roles.html.erb

@ -36,27 +36,43 @@ module MembersHelper
# If it is the later, the ids of the non delete roles are appended to the url so that they are kept.
def global_member_role_deletion_link(member, role)
if member.roles.length == 1
path =
if member.principal.is_a?(Group)
membership_of_group_path(member.principal, member)
else
user_membership_path(user_id: member.user_id, id: member.id)
end
link_to('',
path,
principal_membership_path(member.principal, member),
{ method: :delete, class: 'icon icon-delete', title: t(:button_delete) })
else
path =
if member.principal.is_a?(Group)
membership_of_group_path(member.principal, member, 'membership[role_ids]' => member.roles - [role])
else
user_membership_path(user_id: member.user_id, id: member.id, 'membership[role_ids]' => member.roles - [role])
end
link_to('',
path,
principal_membership_path(member.principal, member, 'membership[role_ids]' => member.roles - [role]),
{ method: :patch, class: 'icon icon-delete', title: t(:button_delete) })
end
end
##
# Decorate the form_for helper for membership of a user or a group to a global
# role.
def global_role_membership_form_for(principal, global_member, options = {}, &block)
args =
if global_member
{ url: principal_membership_path(principal, global_member), method: :patch }
else
{ url: principal_memberships_path(principal), method: :post }
end
form_for(:principal_roles, args.merge(options), &block)
end
def principal_membership_path(principal, global_member, options = {})
if principal.is_a?(Group)
membership_of_group_path(principal, global_member, options)
else
user_membership_path(principal, global_member, options)
end
end
def principal_memberships_path(principal, options = {})
if principal.is_a?(Group)
memberships_of_group_path(principal, options)
else
user_memberships_path(principal, options)
end
end
end

@ -59,8 +59,8 @@ See COPYRIGHT and LICENSE files for more details.
</thead>
<tbody id="table_principal_roles_body">
<% global_member.roles.each do |role| %>
<%= render :partial => 'assigned_global_role', :locals => { :role => role, member: global_member } %>
<%end%>
<%= render partial: 'principals/assigned_global_role', locals: { role: role, member: global_member } %>
<% end %>
</tbody>
</table>
@ -69,5 +69,5 @@ See COPYRIGHT and LICENSE files for more details.
<% end %>
</div>
<%= render partial: 'groups/available_global_roles', locals: { group: @group, global_member: global_member }%>
<%= render partial: 'principals/available_global_roles', locals: { principal: @group, global_member: global_member } %>
</div>

@ -28,6 +28,7 @@ See COPYRIGHT and LICENSE files for more details.
++#%>
<% roles = Role.givable %>
<% projects = Project.active.order(Arel.sql('lft')) %>
<% memberships = @group.memberships %>
<div class="grid-block">
<div class="grid-content">
@ -64,15 +65,19 @@ See COPYRIGHT and LICENSE files for more details.
</tr>
</thead>
<tbody>
<% @group.memberships.where.not(project: nil).each do |membership| %>
<% memberships.where.not(project: nil).each do |membership| %>
<% next if membership.new_record? %>
<tr id="member-<%= membership.id %>" class="class">
<td class="project"><%= link_to membership.project.name, project_members_path(membership.project) %></td>
<tr id="member-<%= membership.id %>" class="member">
<td class="project">
<%= link_to membership.project.name, project_members_path(membership.project) %>
</td>
<td class="roles">
<span id="member-<%= membership.id %>-roles"><%=h membership.roles.sort.collect(&:to_s).join(', ') %></span>
<span id="member-<%= membership.id %>-roles">
<%=h membership.roles.sort.collect(&:to_s).join(', ') %>
</span>
<%= labelled_tabular_form_for(:membership,
url: membership_of_group_path(@group, membership),
method: :put,
method: :patch,
html: {
id: "member-#{membership.id}-roles-form",
style: 'display:none;'
@ -83,7 +88,8 @@ See COPYRIGHT and LICENSE files for more details.
role.id,
membership.roles.include?(role),
role.name,
no_label: true
no_label: true,
id: nil
%>
<%= role %>
</label>

@ -83,10 +83,12 @@ See COPYRIGHT and LICENSE files for more details.
</span>
<%= labelled_tabular_form_for(:membership,
url: polymorphic_path([@individual_principal, :membership], id: membership),
html: { id: "member-#{membership.id}-roles-form",
class: "member-#{membership.id}--edit-toggle-item",
style: 'display:none;'},
method: :patch) do |f| %>
method: :patch,
html: {
id: "member-#{membership.id}-roles-form",
class: "member-#{membership.id}--edit-toggle-item",
style: 'display:none;'
}) do |f| %>
<div>
<% roles.each do |role| %>
<label class="form--label-with-check-box">

@ -31,21 +31,14 @@ See COPYRIGHT and LICENSE files for more details.
<div class="grid-content" id="available_principal_roles">
<fieldset class="form--fieldset">
<legend class="form--fieldset-legend"><%= Role.model_name.human(:count => 2) %></legend>
<legend class="form--fieldset-legend"><%= Role.model_name.human(count: 2) %></legend>
<% if available_roles.empty? %>
<span id="no_additional_principal_roles">
<%= no_results_box %>
</span>
<% else %>
<span id="additional_principal_roles">
<% args =
if global_member
{ url: membership_of_group_path(group, global_member), method: :put }
else
{ url: memberships_of_group_path(group), method: :post }
end
%>
<%= form_for(:principal_roles, **args) do %>
<%= global_role_membership_form_for(principal, global_member) do %>
<% if global_member %>
<%= hidden_field_tag('membership[id]', global_member.id ) %>
@ -55,7 +48,7 @@ See COPYRIGHT and LICENSE files for more details.
<% end %>
<% available_roles.each do |role| %>
<%= render partial: 'groups/available_global_role', locals: {role: role} %>
<%= render partial: 'principals/available_global_role', locals: {role: role} %>
<% end %>
<p><br/><%= styled_button_tag t(:button_add), class: '-with-icon icon-checkmark' %></p>
<% end %>

@ -1,37 +0,0 @@
<%#-- copyright
OpenProject is an open source project management software.
Copyright (C) 2012-2021 the OpenProject GmbH
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License version 3.
OpenProject is a fork of ChiliProject, which is a fork of Redmine. The copyright follows:
Copyright (C) 2006-2013 Jean-Philippe Lang
Copyright (C) 2010-2013 the ChiliProject Team
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
See COPYRIGHT and LICENSE files for more details.
++#%>
<tr id="assigned_global_role_<%= role.id%>">
<td class="role">
<%=h role %>
</td>
<td class="buttons">
<%= global_member_role_deletion_link(member, role) %>
</td>
</tr>

@ -1,38 +0,0 @@
<%#-- copyright
OpenProject is an open source project management software.
Copyright (C) 2012-2021 the OpenProject GmbH
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License version 3.
OpenProject is a fork of ChiliProject, which is a fork of Redmine. The copyright follows:
Copyright (C) 2006-2013 Jean-Philippe Lang
Copyright (C) 2010-2013 the ChiliProject Team
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
See COPYRIGHT and LICENSE files for more details.
++#%>
<div class="principal_role_option form--field" id= "principal_role_option_<%= h(role.id) %>">
<label class="form--label-with-check-box" for="principal_role_role_ids_<%= role.id %>">
<%= check_box_tag 'membership[role_ids][]',
role.id,
false,
id: "principal_role_role_ids_#{role.id}" %>
<%= h(role)%>
</label>
</div>

@ -1,65 +0,0 @@
<%#-- copyright
OpenProject is an open source project management software.
Copyright (C) 2012-2021 the OpenProject GmbH
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License version 3.
OpenProject is a fork of ChiliProject, which is a fork of Redmine. The copyright follows:
Copyright (C) 2006-2013 Jean-Philippe Lang
Copyright (C) 2010-2013 the ChiliProject Team
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
See COPYRIGHT and LICENSE files for more details.
++#%>
<% available_roles = GlobalRole.all - (global_member&.roles || []) %>
<div class="grid-content" id="available_principal_roles">
<fieldset class="form--fieldset">
<legend class="form--fieldset-legend"><%= Role.model_name.human(:count => 2) %></legend>
<% if available_roles.empty? %>
<span id="no_additional_principal_roles">
<%= no_results_box %>
</span>
<% else %>
<span id="additional_principal_roles">
<% args =
if global_member
{ url: user_membership_path(id: global_member.id, user_id: user.id), method: :patch }
else
{ url: user_memberships_path(user_id: user.id), method: :post }
end
%>
<%= form_for(:principal_roles, **args) do %>
<% if global_member %>
<%= hidden_field_tag('membership[id]', global_member.id ) %>
<% global_member.roles.each do |role| %>
<%= hidden_field_tag('membership[role_ids][]', role.id ) %>
<% end %>
<% end %>
<% available_roles.each do |role| %>
<%= render :partial => 'users/available_global_role', :locals => {:role => role} %>
<% end %>
<p><br/><%= styled_button_tag t(:button_add), class: '-with-icon icon-checkmark' %></p>
<% end %>
</span>
<% end %>
</fieldset>
</div>

@ -59,8 +59,8 @@ See COPYRIGHT and LICENSE files for more details.
</thead>
<tbody id="table_principal_roles_body">
<% global_member.roles.each do |role| %>
<%= render :partial => 'assigned_global_role', :locals => { :role => role, member: global_member } %>
<%end%>
<%= render partial: 'principals/assigned_global_role', locals: { role: role, member: global_member } %>
<% end %>
</tbody>
</table>
@ -69,5 +69,5 @@ See COPYRIGHT and LICENSE files for more details.
<% end %>
</div>
<%= render partial: 'users/available_global_roles', locals: { user: @user, global_member: global_member }%>
<%= render partial: 'principals/available_global_roles', locals: { principal: @user, global_member: global_member } %>
</div>

Loading…
Cancel
Save