]> source.dussan.org Git - redmine.git/commitdiff
added the ability to set the sort order for roles
authorJean-Philippe Lang <jp_lang@yahoo.fr>
Wed, 31 Jan 2007 20:57:01 +0000 (20:57 +0000)
committerJean-Philippe Lang <jp_lang@yahoo.fr>
Wed, 31 Jan 2007 20:57:01 +0000 (20:57 +0000)
git-svn-id: http://redmine.rubyforge.org/svn/trunk@208 e93f8b46-1217-0410-a6f0-8f06a7374b81

app/controllers/projects_controller.rb
app/controllers/roles_controller.rb
app/controllers/users_controller.rb
app/models/role.rb
app/views/projects/list_members.rhtml
app/views/projects/settings.rhtml
app/views/roles/list.rhtml
db/migrate/020_add_role_position.rb [new file with mode: 0644]
doc/CHANGELOG

index e7db204ed63033be6c1b16a7189c4046919726ef..815edb87dfa1ec10d7129bbab4a3cf32d4275423 100644 (file)
@@ -91,7 +91,7 @@ class ProjectsController < ApplicationController
     @custom_fields = IssueCustomField.find(:all)\r
     @issue_category ||= IssueCategory.new\r
     @member ||= @project.members.new\r
-    @roles = Role.find(:all)\r
+    @roles = Role.find(:all, :order => 'position')\r
     @users = User.find_active(:all) - @project.users\r
     @custom_values ||= ProjectCustomField.find(:all).collect { |x| @project.custom_values.find_by_custom_field_id(x.id) || CustomValue.new(:custom_field => x) }\r
   end\r
index 9e26a6996cdd29184dce85d7ce0c793898727c24..6ac08a7676ae95fb40f491fc7f1c425e785f9dea 100644 (file)
@@ -18,6 +18,9 @@
 class RolesController < ApplicationController\r
   layout 'base'        \r
   before_filter :require_admin\r
+\r
+  verify :method => :post, :only => [ :destroy, :move ],\r
+         :redirect_to => { :action => :list }\r
 
   def index
     list
@@ -25,7 +28,7 @@ class RolesController < ApplicationController
   end
 
   def list
-    @role_pages, @roles = paginate :roles, :per_page => 10\r
+    @role_pages, @roles = paginate :roles, :per_page => 10, :order => "position"\r
     render :action => "list", :layout => false if request.xhr?
   end
 
@@ -62,6 +65,21 @@ class RolesController < ApplicationController
     redirect_to :action => 'list'
   end\r
   \r
+  def move\r
+    @role = Role.find(params[:id])\r
+    case params[:position]\r
+    when 'highest'\r
+      @role.move_to_top\r
+    when 'higher'\r
+      @role.move_higher\r
+    when 'lower'\r
+      @role.move_lower\r
+    when 'lowest'\r
+      @role.move_to_bottom\r
+    end if params[:position]\r
+    redirect_to :action => 'list'\r
+  end\r
+  \r
   def workflow    \r
     @role = Role.find_by_id(params[:role_id])\r
     @tracker = Tracker.find_by_id(params[:tracker_id])    \r
@@ -77,7 +95,7 @@ class RolesController < ApplicationController
         flash[:notice] = l(:notice_successful_update)\r
       end\r
     end\r
-    @roles = Role.find :all\r
+    @roles = Role.find(:all, :order => 'position')\r
     @trackers = Tracker.find :all\r
     @statuses = IssueStatus.find(:all, :include => :workflows, :order => 'position')\r
   end
index 14f8ecff3b72776633ad7d03e218fec2c1e458fb..4ddbe0548f8075bb5475f051dd6595826dce3d8b 100644 (file)
@@ -80,7 +80,7 @@ class UsersController < ApplicationController
       end\r
     end
     @auth_sources = AuthSource.find(:all)\r
-    @roles = Role.find :all\r
+    @roles = Role.find(:all, :order => 'position')\r
     @projects = Project.find(:all) - @user.projects\r
     @membership ||= Member.new\r
   end\r
index aea402f46f5cdfdfe81252946444ab90a546f96a..d00a2b2185fee5a6bdef913b12c017b995b3314a 100644 (file)
@@ -20,6 +20,7 @@ class Role < ActiveRecord::Base
   has_and_belongs_to_many :permissions\r
   has_many :workflows, :dependent => :delete_all\r
   has_many :members\r
+  acts_as_list\r
 \r
   validates_presence_of :name\r
   validates_uniqueness_of :name\r
index 655abb2808cbe33139df4cf1f8a9f9bd0c06bb07..d7b6c5bcbdeb7a512b35e31d3063c92049881342 100644 (file)
@@ -1,10 +1,10 @@
 <h2><%=l(:label_member_plural)%></h2>\r
 \r
 <% members = @members.group_by {|m| m.role } %>\r
-<% members.each do |role, member| %>\r
+<% members.keys.sort{|x,y| x.position <=> y.position}.each do |role| %>\r
 <h3><%= role.name %></h3>\r
 <ul>\r
-<% member.each do |m| %>\r
+<% members[role].each do |m| %>\r
 <li><%= link_to m.user.display_name, :controller => 'account', :action => 'show', :id => m.user %> (<%= format_date m.created_on %>)</li>\r
 <% end %>\r
 </ul>\r
index 9299ce49cf71d72ab70c6e9910575c969ecdc5c1..8a891c010be0d2a4595469943407dd1cc1d7029e 100644 (file)
@@ -23,7 +23,7 @@
 <table class="list">\r
        <thead><th><%= l(:label_user) %></th><th><%= l(:label_role) %></th><th></th></thead>
        <tbody>
-       <% for member in @project.members.find(:all, :include => :user) %>\r
+       <% @project.members.find(:all, :include => [:role, :user]).sort{|x,y| x.role.position <=> y.role.position}.each do |member| %>\r
        <% unless member.new_record? %>\r
        <tr class="<%= cycle 'odd', 'even' %>">\r
        <td><%= member.user.display_name %></td>\r
index 141d75873691919dd721683e87dbea0667415c02..c6c4492b3ee5fb846bd3029593f9a02b2d66ae55 100644 (file)
@@ -7,12 +7,19 @@
 <table class="list">
   <thead><tr>
     <th><%=l(:label_role)%></th>
+    <th><%=l(:button_sort)%></th>
        <th></th>
   </tr></thead>
   <tbody>
 <% for role in @roles %>
   <tr class="<%= cycle("odd", "even") %>">
   <td><%= link_to role.name, :action => 'edit', :id => role %></td>
+  <td align="center">
+    <%= link_to image_tag('2uparrow.png', :alt => l(:label_sort_highest)), {:action => 'move', :id => role, :position => 'highest'}, :method => :post, :title => l(:label_sort_highest) %>
+    <%= link_to image_tag('1uparrow.png', :alt => l(:label_sort_higher)), {:action => 'move', :id => role, :position => 'higher'}, :method => :post, :title => l(:label_sort_higher) %> -
+    <%= link_to image_tag('1downarrow.png', :alt => l(:label_sort_lower)), {:action => 'move', :id => role, :position => 'lower'}, :method => :post, :title => l(:label_sort_lower) %>
+    <%= link_to image_tag('2downarrow.png', :alt => l(:label_sort_lowest)), {:action => 'move', :id => role, :position => 'lowest'}, :method => :post, :title => l(:label_sort_lowest) %>
+  </td>
   <td align="center">
     <%= button_to l(:button_delete), { :action => 'destroy', :id => role }, :confirm => l(:text_are_you_sure), :class => "button-small" %>\r
   </tr>
diff --git a/db/migrate/020_add_role_position.rb b/db/migrate/020_add_role_position.rb
new file mode 100644 (file)
index 0000000..3afa881
--- /dev/null
@@ -0,0 +1,10 @@
+class AddRolePosition < ActiveRecord::Migration
+  def self.up
+    add_column :roles, :position, :integer, :default => 1, :null => false
+    Role.find(:all).each_with_index {|role, i| role.update_attribute(:position, i+1)}
+  end
+
+  def self.down
+    remove_column :roles, :position
+  end
+end
index 34381a04a61d5df15073c8845a26bf95cdd06e69..66d513e655cbb74ba0708b8f5a0b5ab58ba28e8e 100644 (file)
@@ -11,7 +11,7 @@ http://redmine.rubyforge.org/
 * settings are now stored in the database and editable through the application in: Admin -> Settings (config_custom.rb is no longer used)\r
 * mail notifications added when a document, a file or an attachment is added\r
 * tooltips added on Gantt chart and calender to view the details of the issues\r
-* ability to set the sort order for issue statuses\r
+* ability to set the sort order for roles, issue statuses\r
 * added missing fields to csv export: priority, start date, due date, done ratio\r
 * all icons replaced (new icons are based on GPL icon set: "KDE Crystal Diamond 2.5" -by paolino- and "kNeu! Alpha v0.1" -by Pablo Fabregat-)\r
 * added back "fixed version" field on issue screen and in filters\r