User groups feature initial commit.

git-svn-id: http://redmine.rubyforge.org/svn/branches/work@1373 e93f8b46-1217-0410-a6f0-8f06a7374b81
This commit is contained in:
Jean-Philippe Lang
2008-04-28 15:10:04 +00:00
parent 4783d3d7c5
commit ced3cab7bb
41 changed files with 812 additions and 65 deletions
+5
View File
@@ -8,6 +8,11 @@
</p>
<p class="icon22 icon22-users">
<%= link_to l(:label_group_plural), :controller => 'groups' %> |
<%= link_to l(:label_new), :controller => 'groups', :action => 'new' %>
</p>
<p class="icon22 icon22-user">
<%= link_to l(:label_user_plural), :controller => 'users' %> |
<%= link_to l(:label_new), :controller => 'users', :action => 'add' %>
</p>
+2 -5
View File
@@ -99,12 +99,9 @@ when "IssueCustomField" %>
<p><%= f.check_box :is_filter %></p>
<p><%= f.check_box :searchable %></p>
<% when "UserCustomField" %>
<% else %>
<p><%= f.check_box :is_required %></p>
<% when "ProjectCustomField" %>
<p><%= f.check_box :is_required %></p>
<% end %>
</div>
<%= javascript_tag "toggle_custom_field_format();" %>
+10
View File
@@ -0,0 +1,10 @@
<div class="box tabular">
<p><%= f.text_field :name %></p>
<% for @custom_value in @custom_values %>
<p><%= custom_field_tag_with_label @custom_value %></p>
<% end %>
<% unless @group.users.empty? %>
<p><label><%= l(:label_user_plural) %> (<%= @group.users.size %>)</label><%= @group.users.collect {|u| link_to_user u }.join(', ') %></p>
<% end %>
</div>
+8
View File
@@ -0,0 +1,8 @@
<h2><%= l(:label_group) %></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_save) %></p>
<% end %>
+25
View File
@@ -0,0 +1,25 @@
<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="group <%= cycle 'odd', 'even' %>">
<td><%= link_to h(group.name), :action => 'edit', :id => group %></td>
<td align="center"><%= group.users.size %></td>
<td align="right"><%= 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 %>
<% form_for(@group) do |f| %>
<p><label><%= l(:label_group_new) %>: <%= f.text_field :name %> <%= f.submit l(:button_create) %></p>
<% end %>
+8
View File
@@ -0,0 +1,8 @@
<h2><%= 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 %>
+7
View File
@@ -0,0 +1,7 @@
<h2><%=h @group %></h2>
<ul>
<% @group.users.each do |user| %>
<li><%=h user %></li>
<% end %>
</ul>
@@ -1,22 +1,23 @@
<%= error_messages_for 'member' %>
<% roles = Role.find_all_givable %>
<% users = User.find_active(:all).sort - @project.users %>
<% users = User.find_active(:all).sort - @project.users.find(:all, :conditions => 'inherited_from IS NULL') %>
<% groups = Group.find(:all, :order => 'name') - @project.memberships.collect(&:principal) %>
<% # members sorted by role position
members = @project.members.find(:all, :include => [:role, :user]).sort %>
members = @project.memberships.select {|m| m.inherited_from.nil? }.sort #members.find(:all, :include => [:role, :user]).sort %>
<% if members.any? %>
<table class="list">
<table class="list members">
<thead>
<th><%= l(:label_user) %></th>
<th><%= l(:label_member) %></th>
<th><%= l(:label_role) %></th>
<th style="width:15%"></th>
</thead>
<tbody>
<% members.each do |member| %>
<% next if member.new_record? %>
<tr class="<%= cycle 'odd', 'even' %>">
<td><%= member.name %></td>
<td align="center">
<tr class="<%= cycle 'odd', 'even' %> <%= member.principal.class.name.downcase %>">
<td class="name"><%=h member %></td>
<td class="role">
<% 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" %>
@@ -38,10 +39,10 @@
<p class="nodata"><%= l(:label_no_data) %></p>
<% end %>
<% if authorize_for('members', 'new') && !users.empty? %>
<% if authorize_for('members', 'new') && !(users.empty? && groups.empty?) %>
<p><%=l(:label_member_new)%></p>
<% remote_form_for(:member, @member, :url => {:controller => 'members', :action => 'new', :id => @project}, :method => :post) do |f| %>
<p><label for="member_user_id"><%=l(:label_member_new)%></label><br />
<%= f.select :user_id, users.collect{|user| [user.name, user.id]} %>
<p><%= principal_select_tag(groups, users) %>
<%= l(:label_role) %>: <%= f.select :role_id, roles.collect{|role| [role.name, role.id]}, :selected => nil %>
<%= submit_tag l(:button_add) %></p>
<% end %>
+3
View File
@@ -7,6 +7,9 @@
<p><%= f.text_field :firstname, :required => true %></p>
<p><%= f.text_field :lastname, :required => true %></p>
<p><%= f.text_field :mail, :required => true %></p>
<% unless @groups.empty? -%>
<p><%= f.select :group_id, @groups.collect {|g| [g.name, g.id]}, { :include_blank => true } %></p>
<% end -%>
<p><%= f.select :language, lang_options_for_select %></p>
<% for @custom_value in @custom_values %>
+5 -1
View File
@@ -1,7 +1,7 @@
<div class="box" style="margin-top: 16px;">
<h3><%= l(:label_project_plural) %></h3>
<% @user.memberships.each do |membership| %>
<% @user.memberships.select {|m| m.inherited_from.nil? }.each do |membership| %>
<% form_tag({ :action => 'edit_membership', :id => @user, :membership_id => membership }, :class => "tabular") do %>
<p style="margin:0;padding-top:0;">
<label><%= membership.project.name %></label>
@@ -13,6 +13,8 @@
</p>
<% end %>
<% end %>
<% unless @projects.empty? || @roles.empty? %>
<hr />
<p>
<label><%=l(:label_project_new)%></label><br/>
@@ -20,10 +22,12 @@
<select name="membership[project_id]">
<%= options_from_collection_for_select @projects, "id", "name", @membership.project_id %>
</select>
<%= l(:label_role) %>:
<select name="membership[role_id]">
<%= options_from_collection_for_select @roles, "id", "name", @membership.role_id %>
</select>
<%= submit_tag l(:button_add) %>
<% end %>
</p>
<% end %>
</div>
+5 -3
View File
@@ -18,6 +18,7 @@
<%= sort_header_tag('firstname', :caption => l(:field_firstname)) %>
<%= sort_header_tag('lastname', :caption => l(:field_lastname)) %>
<%= sort_header_tag('mail', :caption => l(:field_mail)) %>
<%= sort_header_tag("#{Group.table_name}.name", :caption => l(:field_group)) %>
<%= sort_header_tag('admin', :caption => l(:field_admin), :default_order => 'desc') %>
<%= sort_header_tag('created_on', :caption => l(:field_created_on), :default_order => 'desc') %>
<%= sort_header_tag('last_login_on', :caption => l(:field_last_login_on), :default_order => 'desc') %>
@@ -27,9 +28,10 @@
<% for user in @users -%>
<tr class="user <%= cycle("odd", "even") %> <%= %w(anon active registered locked)[user.status] %>">
<td class="username"><%= link_to user.login, :action => 'edit', :id => user %></td>
<td class="firstname"><%= user.firstname %></td>
<td class="lastname"><%= user.lastname %></td>
<td class="email"><%= user.mail %></td>
<td class="firstname"><%=h user.firstname %></td>
<td class="lastname"><%=h user.lastname %></td>
<td class="email"><%=h user.mail %></td>
<td class="group"><%=h user.group %></td>
<td align="center"><%= image_tag('true.png') if user.admin? %></td>
<td class="created_on" align="center"><%= format_time(user.created_on) %></td>
<td class="last_login_on" align="center"><%= format_time(user.last_login_on) unless user.last_login_on.nil? %></td>