diff options
author | Jean-Philippe Lang <jp_lang@yahoo.fr> | 2009-09-12 08:36:46 +0000 |
---|---|---|
committer | Jean-Philippe Lang <jp_lang@yahoo.fr> | 2009-09-12 08:36:46 +0000 |
commit | 7707457145442d6177ce57c956dbe09af65df1b4 (patch) | |
tree | 2278f27bf20e08bb2f92e42ab728b4427cce6f07 /app/views | |
parent | 847c7367b429e8df0e0fa1dbf3e415e37dd82bf1 (diff) | |
download | redmine-7707457145442d6177ce57c956dbe09af65df1b4.tar.gz redmine-7707457145442d6177ce57c956dbe09af65df1b4.zip |
User groups branch merged.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@2869 e93f8b46-1217-0410-a6f0-8f06a7374b81
Diffstat (limited to 'app/views')
-rw-r--r-- | app/views/admin/index.rhtml | 5 | ||||
-rw-r--r-- | app/views/groups/_form.html.erb | 8 | ||||
-rw-r--r-- | app/views/groups/_general.html.erb | 4 | ||||
-rw-r--r-- | app/views/groups/_memberships.html.erb | 56 | ||||
-rw-r--r-- | app/views/groups/_users.html.erb | 49 | ||||
-rw-r--r-- | app/views/groups/autocomplete_for_user.html.erb | 1 | ||||
-rw-r--r-- | app/views/groups/edit.html.erb | 23 | ||||
-rw-r--r-- | app/views/groups/index.html.erb | 25 | ||||
-rw-r--r-- | app/views/groups/new.html.erb | 8 | ||||
-rw-r--r-- | app/views/groups/show.html.erb | 7 | ||||
-rw-r--r-- | app/views/members/autocomplete_for_member.rhtml | 1 | ||||
-rw-r--r-- | app/views/members/autocomplete_for_member_login.rhtml | 5 | ||||
-rw-r--r-- | app/views/projects/settings/_members.rhtml | 43 | ||||
-rw-r--r-- | app/views/users/_groups.rhtml | 9 | ||||
-rw-r--r-- | app/views/users/_memberships.rhtml | 8 |
15 files changed, 225 insertions, 27 deletions
diff --git a/app/views/admin/index.rhtml b/app/views/admin/index.rhtml index 323641744..1a0684a13 100644 --- a/app/views/admin/index.rhtml +++ b/app/views/admin/index.rhtml @@ -12,6 +12,11 @@ <%= link_to l(:label_new), :controller => 'users', :action => 'add' %> </p> +<p class="icon22 icon22-groups"> +<%= link_to l(:label_group_plural), :controller => 'groups' %> | +<%= link_to l(:label_new), :controller => 'groups', :action => 'new' %> +</p> + <p class="icon22 icon22-role"> <%= link_to l(:label_role_and_permissions), :controller => 'roles' %> </p> diff --git a/app/views/groups/_form.html.erb b/app/views/groups/_form.html.erb new file mode 100644 index 000000000..433abdab4 --- /dev/null +++ b/app/views/groups/_form.html.erb @@ -0,0 +1,8 @@ +<%= error_messages_for :group %> + +<div class="box tabular"> + <p><%= f.text_field :lastname, :label => :field_name %></p> + <% @group.custom_field_values.each do |value| %> + <p><%= custom_field_tag_with_label :group, value %></p> + <% end %> +</div> diff --git a/app/views/groups/_general.html.erb b/app/views/groups/_general.html.erb new file mode 100644 index 000000000..19c6f8880 --- /dev/null +++ b/app/views/groups/_general.html.erb @@ -0,0 +1,4 @@ +<% labelled_tabular_form_for :group, @group, :url => { :controller => 'group', :action => 'update', :tab => nil } do |f| %> +<%= render :partial => 'form', :locals => { :f => f } %> +<%= submit_tag l(:button_save) %> +<% end %> diff --git a/app/views/groups/_memberships.html.erb b/app/views/groups/_memberships.html.erb new file mode 100644 index 000000000..613f05e2d --- /dev/null +++ b/app/views/groups/_memberships.html.erb @@ -0,0 +1,56 @@ +<% roles = Role.find_all_givable %> +<% projects = Project.active.find(:all, :order => 'lft') %> + +<div class="splitcontentleft"> +<% if @group.memberships.any? %> +<table class="list memberships"> + <thead> + <th><%= l(:label_project) %></th> + <th><%= l(:label_role_plural) %></th> + <th style="width:15%"></th> + </thead> + <tbody> + <% @group.memberships.each do |membership| %> + <% next if membership.new_record? %> + <tr id="member-<%= membership.id %>" class="<%= cycle 'odd', 'even' %> class"> + <td class="project"><%=h membership.project %></td> + <td class="roles"> + <span id="member-<%= membership.id %>-roles"><%=h membership.roles.sort.collect(&:to_s).join(', ') %></span> + <% remote_form_for(:membership, :url => { :action => 'edit_membership', :id => @group, :membership_id => membership }, + :html => { :id => "member-#{membership.id}-roles-form", :style => 'display:none;'}) do %> + <p><% roles.each do |role| %> + <label><%= check_box_tag 'membership[role_ids][]', role.id, membership.roles.include?(role) %> <%=h role %></label><br /> + <% end %></p> + <p><%= submit_tag l(:button_change) %> + <%= link_to_function l(:button_cancel), "$('member-#{membership.id}-roles').show(); $('member-#{membership.id}-roles-form').hide(); return false;" %></p> + <% end %> + </td> + <td class="buttons"> + <%= 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 => 'groups', :action => 'destroy_membership', :id => @group, :membership_id => membership }, + :method => :post }, + :class => 'icon icon-del' %> + </td> + </tr> + </tbody> +<% end; reset_cycle %> +</table> +<% else %> +<p class="nodata"><%= l(:label_no_data) %></p> +<% end %> +</div> + +<div class="splitcontentright"> +<% if projects.any? %> +<fieldset><legend><%=l(:label_project_new)%></legend> +<% remote_form_for(:membership, :url => { :action => 'edit_membership', :id => @group }) do %> +<%= select_tag 'membership[project_id]', options_for_membership_project_select(@group, projects) %> +<p><%= l(:label_role_plural) %>: +<% roles.each do |role| %> + <label><%= check_box_tag 'membership[role_ids][]', role.id %> <%=h role %></label> +<% end %></p> +<p><%= submit_tag l(:button_add) %></p> +<% end %> +</fieldset> +<% end %> +</div> diff --git a/app/views/groups/_users.html.erb b/app/views/groups/_users.html.erb new file mode 100644 index 000000000..e471f52c7 --- /dev/null +++ b/app/views/groups/_users.html.erb @@ -0,0 +1,49 @@ +<div class="splitcontentleft"> +<% if @group.users.any? %> + <table class="list users"> + <thead> + <th><%= l(:label_user) %></th> + <th style="width:15%"></th> + </thead> + <tbody> + <% @group.users.sort.each do |user| %> + <tr id="user-<%= user.id %>" class="<%= cycle 'odd', 'even' %>"> + <td class="user"><%= link_to_user user %></td> + <td class="buttons"> + <%= link_to_remote l(:button_delete), { :url => { :controller => 'groups', :action => 'remove_user', :id => @group, :user_id => user }, + :method => :post }, + :class => 'icon icon-del' %> + </td> + </tr> + <% end %> + </tbody> + </table> +<% else %> + <p class="nodata"><%= l(:label_no_data) %></p> +<% end %> +</div> + +<div class="splitcontentright"> +<% users = User.active.find(:all, :limit => 100) - @group.users %> +<% if users.any? %> + <% remote_form_for(:group, @group, :url => {:controller => 'groups', :action => 'add_users', :id => @group}, :method => :post) do |f| %> + <fieldset><legend><%=l(:label_user_new)%></legend> + + <p><%= text_field_tag 'user_search', nil, :size => "40" %></p> + <%= observe_field(:user_search, + :frequency => 0.5, + :update => :users, + :url => { :controller => 'groups', :action => 'autocomplete_for_user', :id => @group }, + :with => 'q') + %> + + <div id="users"> + <%= principals_check_box_tags 'user_ids[]', users %> + </div> + + <p><%= submit_tag l(:button_add) %></p> + </fieldset> + <% end %> +<% end %> + +</div> diff --git a/app/views/groups/autocomplete_for_user.html.erb b/app/views/groups/autocomplete_for_user.html.erb new file mode 100644 index 000000000..de1b0073a --- /dev/null +++ b/app/views/groups/autocomplete_for_user.html.erb @@ -0,0 +1 @@ +<%= principals_check_box_tags 'user_ids[]', @users %> diff --git a/app/views/groups/edit.html.erb b/app/views/groups/edit.html.erb new file mode 100644 index 000000000..93e890887 --- /dev/null +++ b/app/views/groups/edit.html.erb @@ -0,0 +1,23 @@ +<h2><%= link_to l(:label_group_plural), groups_path %> » <%= h(@group) %></h2> + +<% selected_tab = params[:tab] ? params[:tab].to_s : group_settings_tabs.first[:name] %> + +<div class="tabs"> +<ul> +<% group_settings_tabs.each do |tab| -%> + <li><%= link_to l(tab[:label]), { :tab => tab[:name] }, + :id => "tab-#{tab[:name]}", + :class => (tab[:name] != selected_tab ? nil : 'selected'), + :onclick => "showTab('#{tab[:name]}'); this.blur(); return false;" %></li> +<% end -%> +</ul> +</div> + +<% group_settings_tabs.each do |tab| -%> +<%= content_tag('div', render(:partial => tab[:partial]), + :id => "tab-content-#{tab[:name]}", + :style => (tab[:name] != selected_tab ? 'display:none' : nil), + :class => 'tab-content') %> +<% end -%> + +<% html_title(l(:label_group), @group, l(:label_administration)) -%> diff --git a/app/views/groups/index.html.erb b/app/views/groups/index.html.erb new file mode 100644 index 000000000..48b9ab42d --- /dev/null +++ b/app/views/groups/index.html.erb @@ -0,0 +1,25 @@ +<div class="contextual"> +<%= link_to l(:label_group_new), new_group_path, :class => 'icon icon-add' %> +</div> + +<h2><%= l(:label_group_plural) %></h2> + +<% if @groups.any? %> +<table class="list groups"> + <thead><tr> + <th><%=l(:label_group)%></th> + <th><%=l(:label_user_plural)%></th> + <th></th> + </tr></thead> + <tbody> +<% @groups.each do |group| %> + <tr class="<%= cycle 'odd', 'even' %>"> + <td><%= link_to h(group), :action => 'edit', :id => group %></td> + <td align="center"><%= group.users.size %></td> + <td class="buttons"><%= link_to l(:button_delete), group, :confirm => l(:text_are_you_sure), :method => :delete, :class => 'icon icon-del' %></td> + </tr> +<% end %> +</table> +<% else %> +<p class="nodata"><%= l(:label_no_data) %></p> +<% end %> diff --git a/app/views/groups/new.html.erb b/app/views/groups/new.html.erb new file mode 100644 index 000000000..3c8d2ea30 --- /dev/null +++ b/app/views/groups/new.html.erb @@ -0,0 +1,8 @@ +<h2><%= link_to l(:label_group_plural), groups_path %> » <%= l(:label_group_new) %></h2> + +<%= error_messages_for :group %> + +<% form_for(@group, :builder => TabularFormBuilder, :lang => current_language) do |f| %> +<%= render :partial => 'form', :locals => { :f => f } %> +<p><%= f.submit l(:button_create) %></p> +<% end %> diff --git a/app/views/groups/show.html.erb b/app/views/groups/show.html.erb new file mode 100644 index 000000000..02927ebd8 --- /dev/null +++ b/app/views/groups/show.html.erb @@ -0,0 +1,7 @@ +<h2><%= link_to l(:label_group_plural), groups_path %> » <%=h @group %></h2> + +<ul> +<% @group.users.each do |user| %> + <li><%=h user %></li> +<% end %> +</ul> diff --git a/app/views/members/autocomplete_for_member.rhtml b/app/views/members/autocomplete_for_member.rhtml new file mode 100644 index 000000000..96b4c973b --- /dev/null +++ b/app/views/members/autocomplete_for_member.rhtml @@ -0,0 +1 @@ +<%= principals_check_box_tags 'member[user_ids][]', @principals %>
\ No newline at end of file diff --git a/app/views/members/autocomplete_for_member_login.rhtml b/app/views/members/autocomplete_for_member_login.rhtml deleted file mode 100644 index 09a08bf95..000000000 --- a/app/views/members/autocomplete_for_member_login.rhtml +++ /dev/null @@ -1,5 +0,0 @@ -<ul> -<% @users.each do |user| -%> - <li><%= h user.login %><span class="informal"> (<%= h(user.name(:lastname_coma_firstname)) %>)</span></li> -<% end -%> -</ul> diff --git a/app/views/projects/settings/_members.rhtml b/app/views/projects/settings/_members.rhtml index a6bdd9504..bfea86753 100644 --- a/app/views/projects/settings/_members.rhtml +++ b/app/views/projects/settings/_members.rhtml @@ -1,12 +1,12 @@ <%= error_messages_for 'member' %> <% roles = Role.find_all_givable - members = @project.members.find(:all, :include => [:roles, :user]).sort %> + members = @project.member_principals.find(:all, :include => [:roles, :principal]).sort %> <div class="splitcontentleft"> <% if members.any? %> <table class="list members"> <thead> - <th><%= l(:label_user) %></th> + <th><%= l(:label_user) %> / <%= l(:label_group) %></th> <th><%= l(:label_role_plural) %></th> <th style="width:15%"></th> <%= call_hook(:view_projects_settings_members_table_header, :project => @project) %> @@ -15,7 +15,7 @@ <% members.each do |member| %> <% next if member.new_record? %> <tr id="member-<%= member.id %>" class="<%= cycle 'odd', 'even' %> member"> - <td class="user"><%= link_to_user member.user %></td> + <td class="<%= member.principal.class.name.downcase %>"><%= link_to_user member.principal %></td> <td class="roles"> <span id="member-<%= member.id %>-roles"><%=h member.roles.sort.collect(&:to_s).join(', ') %></span> <% if authorize_for('members', 'edit') %> @@ -23,8 +23,10 @@ :method => :post, :html => { :id => "member-#{member.id}-roles-form", :style => 'display:none;' }) do |f| %> <p><% roles.each do |role| %> - <label><%= check_box_tag 'member[role_ids][]', role.id, member.roles.include?(role) %> <%=h role %></label><br /> + <label><%= check_box_tag 'member[role_ids][]', role.id, member.roles.include?(role), + :disabled => member.member_roles.detect {|mr| mr.role_id == role.id && !mr.inherited_from.nil?} %> <%=h role %></label><br /> <% end %></p> + <%= hidden_field_tag 'member[role_ids][]', '' %> <p><%= 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;" %></p> <% end %> @@ -32,10 +34,10 @@ </td> <td class="buttons"> <%= 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}, + <%= link_to_remote(l(:button_delete), { :url => {:controller => 'members', :action => 'destroy', :id => member}, :method => :post }, :title => l(:button_delete), - :class => 'icon icon-del' %> + :class => 'icon icon-del') if member.deletable? %> </td> <%= call_hook(:view_projects_settings_members_table_row, { :project => @project, :member => member}) %> </tr> @@ -48,27 +50,30 @@ </div> -<% users_count = User.active.count - @project.users.count - users = (users_count < 300) ? User.active.find(:all, :limit => 200).sort - @project.users : [] %> +<% principals = Principal.active.find(:all, :limit => 100, :order => 'type, login, lastname ASC') - @project.principals %> <div class="splitcontentright"> -<% if roles.any? && users_count > 0 %> +<% if roles.any? && principals.any? %> <% remote_form_for(:member, @member, :url => {:controller => 'members', :action => 'new', :id => @project}, :method => :post) do |f| %> <fieldset><legend><%=l(:label_member_new)%></legend> - <p><%= text_field_tag 'member[user_login]', nil, :size => "40" %></p> - <div id="member_user_login_choices" class="autocomplete">sqd</div> - <%= javascript_tag "new Ajax.Autocompleter('member_user_login', 'member_user_login_choices', '#{ url_for(:controller => 'members', :action => 'autocomplete_for_member_login', :id => @project) }', { minChars: 1, frequency: 0.5, paramName: 'user' });" %> - <% unless users.empty? %> - <div> - <% users.each do |user| -%> - <label><%= check_box_tag 'member[user_ids][]', user.id, false %> <%= user %></label> - <% end -%> - </div> - <% end %> + + <p><%= text_field_tag 'principal_search', nil, :size => "40" %></p> + <%= observe_field(:principal_search, + :frequency => 0.5, + :update => :principals, + :url => { :controller => 'members', :action => 'autocomplete_for_member', :id => @project }, + :with => 'q') + %> + + <div id="principals"> + <%= principals_check_box_tags 'member[user_ids][]', principals %> + </div> + <p><%= l(:label_role_plural) %>: <% roles.each do |role| %> <label><%= check_box_tag 'member[role_ids][]', role.id %> <%=h role %></label> <% end %></p> + <p><%= submit_tag l(:button_add) %></p> </fieldset> <% end %> diff --git a/app/views/users/_groups.rhtml b/app/views/users/_groups.rhtml new file mode 100644 index 000000000..6d0c2b3fb --- /dev/null +++ b/app/views/users/_groups.rhtml @@ -0,0 +1,9 @@ +<% form_for(:user, :url => { :action => 'edit' }) do %> +<div class="box"> +<% Group.all.each do |group| %> +<label><%= check_box_tag 'user[group_ids][]', group.id, @user.groups.include?(group) %> <%=h group %></label><br /> +<% end %> +<%= hidden_field_tag 'user[group_ids][]', '' %> +</div> +<%= submit_tag l(:button_save) %> +<% end %> diff --git a/app/views/users/_memberships.rhtml b/app/views/users/_memberships.rhtml index cca982a3e..7659f1cc0 100644 --- a/app/views/users/_memberships.rhtml +++ b/app/views/users/_memberships.rhtml @@ -20,17 +20,19 @@ <% remote_form_for(:membership, :url => { :action => 'edit_membership', :id => @user, :membership_id => membership }, :html => { :id => "member-#{membership.id}-roles-form", :style => 'display:none;'}) do %> <p><% roles.each do |role| %> - <label><%= check_box_tag 'membership[role_ids][]', role.id, membership.roles.include?(role) %> <%=h role %></label><br /> + <label><%= check_box_tag 'membership[role_ids][]', role.id, membership.roles.include?(role), + :disabled => membership.member_roles.detect {|mr| mr.role_id == role.id && !mr.inherited_from.nil?} %> <%=h role %></label><br /> <% end %></p> + <%= hidden_field_tag 'membership[role_ids][]', '' %> <p><%= submit_tag l(:button_change) %> <%= link_to_function l(:button_cancel), "$('member-#{membership.id}-roles').show(); $('member-#{membership.id}-roles-form').hide(); return false;" %></p> <% end %> </td> <td class="buttons"> <%= 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 }, + <%= link_to_remote(l(:button_delete), { :url => { :controller => 'users', :action => 'destroy_membership', :id => @user, :membership_id => membership }, :method => :post }, - :class => 'icon icon-del' %> + :class => 'icon icon-del') if membership.deletable? %> </td> <%= call_hook(:view_users_memberships_table_row, :user => @user, :membership => membership, :roles => roles, :projects => projects )%> </tr> |