From 7dccf9fda6f30d8f4b0c5eaad9f6e2a1e67cd643 Mon Sep 17 00:00:00 2001 From: Jean-Philippe Lang Date: Sun, 10 May 2009 10:54:31 +0000 Subject: Allows multiple roles on the same project (#706). Prerequisite for user groups feature. git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@2726 e93f8b46-1217-0410-a6f0-8f06a7374b81 --- app/views/account/show.rhtml | 2 +- app/views/projects/settings/_members.rhtml | 40 ++++++++++++-------- app/views/queries/_form.rhtml | 2 +- app/views/users/_memberships.rhtml | 60 +++++++++++++++++++----------- app/views/workflows/edit.rhtml | 2 +- 5 files changed, 66 insertions(+), 40 deletions(-) (limited to 'app/views') diff --git a/app/views/account/show.rhtml b/app/views/account/show.rhtml index 6b70c5f86..c97da7f97 100644 --- a/app/views/account/show.rhtml +++ b/app/views/account/show.rhtml @@ -25,7 +25,7 @@ <% end %> diff --git a/app/views/projects/settings/_members.rhtml b/app/views/projects/settings/_members.rhtml index 312403993..a6bdd9504 100644 --- a/app/views/projects/settings/_members.rhtml +++ b/app/views/projects/settings/_members.rhtml @@ -1,36 +1,43 @@ <%= error_messages_for 'member' %> <% roles = Role.find_all_givable - members = @project.members.find(:all, :include => [:role, :user]).sort %> + members = @project.members.find(:all, :include => [:roles, :user]).sort %>
<% if members.any? %> - +
- + <%= call_hook(:view_projects_settings_members_table_header, :project => @project) %> <% members.each do |member| %> <% next if member.new_record? %> - - - + + - + - <%= call_hook(:view_projects_settings_members_table_row, { :project => @project, :member => member}) %> + + <%= call_hook(:view_projects_settings_members_table_row, { :project => @project, :member => member}) %> <% end; reset_cycle %> @@ -58,8 +65,11 @@ <% end -%> <% end %> -

<%= l(:label_role) %>: <%= f.select :role_id, roles.collect{|role| [role.name, role.id]}, :selected => nil %> - <%= submit_tag l(:button_add) %>

+

<%= l(:label_role_plural) %>: + <% roles.each do |role| %> + + <% end %>

+

<%= submit_tag l(:button_add) %>

<% end %> <% end %> diff --git a/app/views/queries/_form.rhtml b/app/views/queries/_form.rhtml index 28faba177..577699d70 100644 --- a/app/views/queries/_form.rhtml +++ b/app/views/queries/_form.rhtml @@ -6,7 +6,7 @@

<%= text_field 'query', 'name', :size => 80 %>

-<% if User.current.admin? || (@project && current_role.allowed_to?(:manage_public_queries)) %> +<% if User.current.admin? || User.current.allowed_to?(:manage_public_queries, @project) %>

<%= check_box 'query', 'is_public', :onchange => (User.current.admin? ? nil : 'if (this.checked) {$("query_is_for_all").checked = false; $("query_is_for_all").disabled = true;} else {$("query_is_for_all").disabled = false;}') %>

diff --git a/app/views/users/_memberships.rhtml b/app/views/users/_memberships.rhtml index d1657fb98..8b458e0b2 100644 --- a/app/views/users/_memberships.rhtml +++ b/app/views/users/_memberships.rhtml @@ -1,24 +1,36 @@ -<% if @memberships.any? %> +<% roles = Role.find_all_givable %> +<% projects = Project.active.find(:all, :order => 'lft') %> + +
+<% if @user.memberships.any? %>
<%= l(:label_user) %><%= l(:label_role) %><%= l(:label_role_plural) %>
<%=h member.name %> +
<%= link_to_user member.user %> + <%=h member.roles.sort.collect(&:to_s).join(', ') %> <% if authorize_for('members', 'edit') %> - <% remote_form_for(:member, member, :url => {:controller => 'members', :action => 'edit', :id => member}, :method => :post) do |f| %> - <%= f.select :role_id, roles.collect{|role| [role.name, role.id]}, {}, :class => "small" %> - <%= submit_tag l(:button_change), :class => "small" %> + <% remote_form_for(:member, member, :url => {:controller => 'members', :action => 'edit', :id => member}, + :method => :post, + :html => { :id => "member-#{member.id}-roles-form", :style => 'display:none;' }) do |f| %> +

<% roles.each do |role| %> +
+ <% end %>

+

<%= submit_tag l(:button_change), :class => "small" %> + <%= link_to_function l(:button_cancel), "$('member-#{member.id}-roles').show(); $('member-#{member.id}-roles-form').hide(); return false;" %>

<% end %> <% end %> -
+ + <%= link_to_function l(:button_edit), "$('member-#{member.id}-roles').hide(); $('member-#{member.id}-roles-form').show(); return false;", :class => 'icon icon-edit' %> <%= link_to_remote l(:button_delete), { :url => {:controller => 'members', :action => 'destroy', :id => member}, :method => :post }, :title => l(:button_delete), :class => 'icon icon-del' %> -
- + - <% @memberships.each do |membership| %> + <% @user.memberships.each do |membership| %> <% next if membership.new_record? %> - - - + + - + + <% end; reset_cycle %> @@ -26,15 +38,19 @@ <% else %>

<%= l(:label_no_data) %>

<% end %> + -<% if @projects.any? %> -

-
-<% form_tag({ :action => 'edit_membership', :id => @user }) do %> -<%= select_tag 'membership[project_id]', options_for_membership_project_select(@user, @projects) %> -<%= l(:label_role) %>: -<%= select_tag 'membership[role_id]', options_from_collection_for_select(@roles, "id", "name") %> -<%= submit_tag l(:button_add) %> +

+<% if projects.any? %> +
<%=l(:label_project_new)%> +<% remote_form_for(:membership, :url => { :action => 'edit_membership', :id => @user }) do %> +<%= select_tag 'membership[project_id]', options_for_membership_project_select(@user, projects) %> +

<%= l(:label_role_plural) %>: +<% roles.each do |role| %> + +<% end %>

+

<%= submit_tag l(:button_add) %>

<% end %> -

+
<% end %> +
diff --git a/app/views/workflows/edit.rhtml b/app/views/workflows/edit.rhtml index 1aef8eb7e..134dfb3e7 100644 --- a/app/views/workflows/edit.rhtml +++ b/app/views/workflows/edit.rhtml @@ -43,7 +43,7 @@ <% for old_status in @statuses %> "> - <% new_status_ids_allowed = old_status.find_new_statuses_allowed_to(@role, @tracker).collect(&:id) -%> + <% new_status_ids_allowed = old_status.find_new_statuses_allowed_to([@role], @tracker).collect(&:id) -%> <% for new_status in @statuses -%>
<%= l(:label_project) %><%= l(:label_role) %><%= l(:label_role_plural) %>
<%=h membership.project %> - <% form_tag({ :action => 'edit_membership', :id => @user, :membership_id => membership }) do %> - <%= select_tag 'membership[role_id]', options_from_collection_for_select(@roles, "id", "name", membership.role_id) %> - <%= submit_tag l(:button_change), :class => "small" %> +
<%=h membership.project %> + <%=h membership.roles.sort.collect(&:to_s).join(', ') %> + <% remote_form_for(:membership, :url => { :action => 'edit_membership', :id => @user, :membership_id => membership }, + :html => { :id => "member-#{membership.id}-roles-form", :style => 'display:none;'}) do %> +

<% roles.each do |role| %> +
+ <% end %>

+

<%= submit_tag l(:button_change) %> + <%= link_to_function l(:button_cancel), "$('member-#{membership.id}-roles').show(); $('member-#{membership.id}-roles-form').hide(); return false;" %>

<% end %> -
- <%= link_to l(:button_delete), {:action => 'destroy_membership', :id => @user, :membership_id => membership }, :method => :post, :class => 'icon icon-del' %> - + <%= link_to_function l(:button_edit), "$('member-#{membership.id}-roles').hide(); $('member-#{membership.id}-roles-form').show(); return false;", :class => 'icon icon-edit' %> + <%= link_to_remote l(:button_delete), { :url => { :controller => 'users', :action => 'destroy_membership', :id => @user, :membership_id => membership }, + :method => :post }, + :class => 'icon icon-del' %> +
<%= old_status.name %>