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

17 files changed:
app/controllers/issue_statuses_controller.rb
app/controllers/issues_controller.rb
app/controllers/reports_controller.rb
app/controllers/roles_controller.rb
app/models/issue_status.rb
app/models/query.rb
app/views/issue_statuses/list.rhtml
db/migrate/019_add_issue_status_position.rb [new file with mode: 0644]
doc/CHANGELOG
lang/de.yml
lang/en.yml
lang/es.yml
lang/fr.yml
public/images/1downarrow.png [new file with mode: 0644]
public/images/1uparrow.png [new file with mode: 0644]
public/images/2downarrow.png [new file with mode: 0644]
public/images/2uparrow.png [new file with mode: 0644]

index 5c74fbd02da0647a8bf87c7ce61e14c71b2fdf93..9180533c3edb933b120e19e8638874f4c30bda26 100644 (file)
@@ -19,13 +19,16 @@ class IssueStatusesController < ApplicationController
   layout 'base'        
   before_filter :require_admin\r
 \r
+  verify :method => :post, :only => [ :destroy, :create, :update, :move ],\r
+         :redirect_to => { :action => :list }\r
+         \r
   def index
     list
     render :action => 'list' unless request.xhr?
   end
 
   def list
-    @issue_status_pages, @issue_statuses = paginate :issue_statuses, :per_page => 10\r
+    @issue_status_pages, @issue_statuses = paginate :issue_statuses, :per_page => 25, :order => "position"\r
     render :action => "list", :layout => false if request.xhr?
   end
 
@@ -55,6 +58,21 @@ class IssueStatusesController < ApplicationController
     else
       render :action => 'edit'
     end
+  end\r
+  \r
+  def move\r
+    @issue_status = IssueStatus.find(params[:id])\r
+    case params[:position]\r
+    when 'highest'\r
+      @issue_status.move_to_top\r
+    when 'higher'\r
+      @issue_status.move_higher\r
+    when 'lower'\r
+      @issue_status.move_lower\r
+    when 'lowest'\r
+      @issue_status.move_to_bottom\r
+    end if params[:position]\r
+    redirect_to :action => 'list'\r
   end
 
   def destroy
index 6ac8bc79b412d5e3a9c40c9dc03cd08ae054273d..491062e247f3d2e27995b1beb7e74c1537362b31 100644 (file)
@@ -25,7 +25,7 @@ class IssuesController < ApplicationController
   include IfpdfHelper\r
 
   def show
-    @status_options = @issue.status.workflows.find(:all, :include => :new_status, :conditions => ["role_id=? and tracker_id=?", self.logged_in_user.role_for_project(@project.id), @issue.tracker.id]).collect{ |w| w.new_status } if self.logged_in_user\r
+    @status_options = @issue.status.workflows.find(:all, :order => 'position', :include => :new_status, :conditions => ["role_id=? and tracker_id=?", self.logged_in_user.role_for_project(@project.id), @issue.tracker.id]).collect{ |w| w.new_status } if self.logged_in_user\r
     @custom_values = @issue.custom_values.find(:all, :include => :custom_field)\r
     @journals_count = @issue.journals.count\r
     @journals = @issue.journals.find(:all, :include => [:user, :details], :limit => 15, :order => "journals.created_on desc")\r
@@ -83,7 +83,7 @@ class IssuesController < ApplicationController
 \r
   def change_status\r
     #@history = @issue.histories.build(params[:history])       \r
-    @status_options = @issue.status.workflows.find(:all, :conditions => ["role_id=? and tracker_id=?", self.logged_in_user.role_for_project(@project.id), @issue.tracker.id]).collect{ |w| w.new_status } if self.logged_in_user\r
+    @status_options = @issue.status.workflows.find(:all, :order => 'position', :include => :new_status, :conditions => ["role_id=? and tracker_id=?", self.logged_in_user.role_for_project(@project.id), @issue.tracker.id]).collect{ |w| w.new_status } if self.logged_in_user\r
     @new_status = IssueStatus.find(params[:new_status_id])\r
     if params[:confirm]\r
       begin\r
index b27eb19acf4ba3fb17ae9aa7f73686002acb477c..2e2f0fc8ef7e778e8848ad18a409da2bdb851697 100644 (file)
@@ -20,7 +20,7 @@ class ReportsController < ApplicationController
   before_filter :find_project, :authorize\r
 \r
   def issue_report\r
-    @statuses = IssueStatus.find :all\r
+    @statuses = IssueStatus.find(:all, :order => 'position')\r
     \r
     case params[:detail]\r
     when "tracker"\r
index ed7c6c200c96553a8493c98eb4b1356370ec4401..9e26a6996cdd29184dce85d7ce0c793898727c24 100644 (file)
@@ -79,6 +79,6 @@ class RolesController < ApplicationController
     end\r
     @roles = Role.find :all\r
     @trackers = Tracker.find :all\r
-    @statuses = IssueStatus.find(:all, :include => :workflows)\r
+    @statuses = IssueStatus.find(:all, :include => :workflows, :order => 'position')\r
   end
 end
index aafafec19e6879e91683e27f95d4c26b3a78e7e7..1a690b44994a1b4d00faa67620a95da68297492d 100644 (file)
@@ -18,6 +18,7 @@
 class IssueStatus < ActiveRecord::Base\r
   before_destroy :check_integrity  \r
   has_many :workflows, :foreign_key => "old_status_id"\r
+  acts_as_list\r
 \r
   validates_presence_of :name\r
   validates_uniqueness_of :name\r
index dbde65a15e193cd5a741e6f24e08c55b50c002a2..5594e5cb6ab04726698ad4b963f3a950ba2cb035 100644 (file)
@@ -69,7 +69,7 @@ class Query < ActiveRecord::Base
   
   def available_filters
     return @available_filters if @available_filters
-    @available_filters = { "status_id" => { :type => :list_status, :order => 1, :values => IssueStatus.find(:all).collect{|s| [s.name, s.id.to_s] } },       
+    @available_filters = { "status_id" => { :type => :list_status, :order => 1, :values => IssueStatus.find(:all, :order => 'position').collect{|s| [s.name, s.id.to_s] } },       
                            "tracker_id" => { :type => :list, :order => 2, :values => Tracker.find(:all).collect{|s| [s.name, s.id.to_s] } },                                                                                                                
                            "priority_id" => { :type => :list, :order => 3, :values => Enumeration.find(:all, :conditions => ['opt=?','IPRI']).collect{|s| [s.name, s.id.to_s] } },
                            "subject" => { :type => :text, :order => 8 },  
index bde9b1e23fcd4aa0c9f03772c9f934bf58e36e52..01617c3295f633f9655711b5a0459a797b9c7d79 100644 (file)
@@ -9,6 +9,7 @@
   <th><%=l(:field_status)%></th>\r
   <th><%=l(:field_is_default)%></th>\r
   <th><%=l(:field_is_closed)%></th>\r
+  <th><%=l(:button_sort)%></th>
   <th></th>
   </tr></thead>
   <tbody>  
   <td><div class="square" style="background:#<%= status.html_color %>;"></div> <%= link_to status.name, :action => 'edit', :id => status %></td>\r
   <td align="center"><%= image_tag 'true.png' if status.is_default? %></td>\r
   <td align="center"><%= image_tag 'true.png' if status.is_closed? %></td>\r
+  <td align="center">
+    <%= link_to image_tag('2uparrow.png', :alt => l(:label_sort_highest)), {:action => 'move', :id => status, :position => 'highest'}, :method => :post, :title => l(:label_sort_highest) %>
+    <%= link_to image_tag('1uparrow.png', :alt => l(:label_sort_higher)), {:action => 'move', :id => status, :position => 'higher'}, :method => :post, :title => l(:label_sort_higher) %> -
+    <%= link_to image_tag('1downarrow.png', :alt => l(:label_sort_lower)), {:action => 'move', :id => status, :position => 'lower'}, :method => :post, :title => l(:label_sort_lower) %>
+    <%= link_to image_tag('2downarrow.png', :alt => l(:label_sort_lowest)), {:action => 'move', :id => status, :position => 'lowest'}, :method => :post, :title => l(:label_sort_lowest) %>
+  </td>
   <td align="center">
     <%= button_to l(:button_delete), { :action => 'destroy', :id => status }, :confirm => l(:text_are_you_sure), :class => "button-small" %>\r
   </td>
diff --git a/db/migrate/019_add_issue_status_position.rb b/db/migrate/019_add_issue_status_position.rb
new file mode 100644 (file)
index 0000000..1c65e52
--- /dev/null
@@ -0,0 +1,10 @@
+class AddIssueStatusPosition < ActiveRecord::Migration
+  def self.up
+    add_column :issue_statuses, :position, :integer, :default => 1, :null => false
+    IssueStatus.find(:all).each_with_index {|status, i| status.update_attribute(:position, i+1)}
+  end
+
+  def self.down
+    remove_column :issue_statuses, :position
+  end
+end
index 05aaa801ded5acc6951dab18111d17a869593123..34381a04a61d5df15073c8845a26bf95cdd06e69 100644 (file)
@@ -11,6 +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
 * 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
index f1cc3ba66033e5a89664d7e4818b445316c8c5b6..ffc1f7f742525dc6c32bcb640e428455a07ee4df 100644 (file)
@@ -309,6 +309,10 @@ label_latest_revision: Neueste Neuausgabe
 label_view_revisions: Die Neuausgaben ansehen\r
 label_max_size: Maximale Größe\r
 label_on: auf\r
+label_sort_highest: Erste\r
+label_sort_higher: Aufzurichten\r
+label_sort_lower: Herabzusteigen\r
+label_sort_lowest: Letzter\r
 \r
 button_login: Einloggen\r
 button_submit: Einreichen\r
@@ -332,6 +336,7 @@ button_move: Bewegen
 button_back: Rückkehr\r
 button_cancel: Annullieren\r
 button_activate: Aktivieren\r
+button_sort: Sortieren\r
 \r
 text_select_mail_notifications: Aktionen für die Mailbenachrichtigung aktiviert werden soll.\r
 text_regexp_info: eg. ^[A-Z0-9]+$\r
index 85df4e17cb54641c09db6f32416a300401ea9b46..824bb21ff7ff5fdd38b67d249d5c53616f80573f 100644 (file)
@@ -309,6 +309,10 @@ label_latest_revision: Latest revision
 label_view_revisions: View revisions\r
 label_max_size: Maximum size\r
 label_on: 'on'\r
+label_sort_highest: Move to top\r
+label_sort_higher: Move up\r
+label_sort_lower: Move down\r
+label_sort_lowest: Move to bottom\r
 \r
 button_login: Login\r
 button_submit: Submit\r
@@ -332,6 +336,7 @@ button_move: Move
 button_back: Back\r
 button_cancel: Cancel\r
 button_activate: Activate\r
+button_sort: Sort\r
 \r
 text_select_mail_notifications: Select actions for which mail notifications should be sent.\r
 text_regexp_info: eg. ^[A-Z0-9]+$\r
index cff537b09fcbbd8d488cc2f658742df74b05ec0e..ea07a50e16871ad85d741fe8e95a0577301cddda 100644 (file)
@@ -309,6 +309,10 @@ label_latest_revision: La revisión más última
 label_view_revisions: Ver las revisiones\r
 label_max_size: Tamaño máximo\r
 label_on: en\r
+label_sort_highest: Primero\r
+label_sort_higher: Subir\r
+label_sort_lower: Bajar\r
+label_sort_lowest: Último\r
 \r
 button_login: Conexión\r
 button_submit: Someter\r
@@ -332,6 +336,7 @@ button_move: Mover
 button_back: Atrás\r
 button_cancel: Cancelar\r
 button_activate: Activar\r
+button_sort: Clasificar\r
 \r
 text_select_mail_notifications: Seleccionar las actividades que necesitan la activación de la notificación por mail.\r
 text_regexp_info: eg. ^[A-Z0-9]+$\r
index 2c34755f23e226a885a23766907db45f1c5f85a0..6925a7228e8d33773b0823f093adc3217e7ac81f 100644 (file)
@@ -309,6 +309,10 @@ label_latest_revision: Dernière révision
 label_view_revisions: Voir les révisions\r
 label_max_size: Taille maximale\r
 label_on: sur\r
+label_sort_highest: Remonter en premier\r
+label_sort_higher: Remonter\r
+label_sort_lower: Descendre\r
+label_sort_lowest: Descendre en dernier\r
 \r
 button_login: Connexion\r
 button_submit: Soumettre\r
@@ -332,6 +336,7 @@ button_move: Déplacer
 button_back: Retour\r
 button_cancel: Annuler\r
 button_activate: Activer\r
+button_sort: Trier\r
 \r
 text_select_mail_notifications: Sélectionner les actions pour lesquelles la notification par mail doit être activée.\r
 text_regexp_info: ex. ^[A-Z0-9]+$\r
diff --git a/public/images/1downarrow.png b/public/images/1downarrow.png
new file mode 100644 (file)
index 0000000..caa1d2b
Binary files /dev/null and b/public/images/1downarrow.png differ
diff --git a/public/images/1uparrow.png b/public/images/1uparrow.png
new file mode 100644 (file)
index 0000000..14d5563
Binary files /dev/null and b/public/images/1uparrow.png differ
diff --git a/public/images/2downarrow.png b/public/images/2downarrow.png
new file mode 100644 (file)
index 0000000..80d5932
Binary files /dev/null and b/public/images/2downarrow.png differ
diff --git a/public/images/2uparrow.png b/public/images/2uparrow.png
new file mode 100644 (file)
index 0000000..e8931ca
Binary files /dev/null and b/public/images/2uparrow.png differ