]> source.dussan.org Git - redmine.git/commitdiff
Added position on Enumeration model.
authorJean-Philippe Lang <jp_lang@yahoo.fr>
Thu, 4 Oct 2007 17:04:50 +0000 (17:04 +0000)
committerJean-Philippe Lang <jp_lang@yahoo.fr>
Thu, 4 Oct 2007 17:04:50 +0000 (17:04 +0000)
git-svn-id: http://redmine.rubyforge.org/svn/trunk@800 e93f8b46-1217-0410-a6f0-8f06a7374b81

app/controllers/enumerations_controller.rb
app/models/enumeration.rb
app/views/enumerations/list.rhtml
db/migrate/072_add_enumerations_position.rb [new file with mode: 0644]

index e77af49abe5c845e80d43fc57fb4881cbfd6c66d..7a7f1685a8ac4dc45748a0e0412717de6ee8e051 100644 (file)
@@ -59,6 +59,21 @@ class EnumerationsController < ApplicationController
     end
   end
 
+  def move
+    @enumeration = Enumeration.find(params[:id])
+    case params[:position]
+    when 'highest'
+      @enumeration.move_to_top
+    when 'higher'
+      @enumeration.move_higher
+    when 'lower'
+      @enumeration.move_lower
+    when 'lowest'
+      @enumeration.move_to_bottom
+    end if params[:position]
+    redirect_to :action => 'index'
+  end
+  
   def destroy
     Enumeration.find(params[:id]).destroy
     flash[:notice] = l(:notice_successful_delete)
index 46d350a215ae33412335287f699d73554e9e99ec..b0ad48bc74a82693fd532951a94f2e6d468ac6e5 100644 (file)
 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
 
 class Enumeration < ActiveRecord::Base
+  acts_as_list :scope => 'opt = \'#{opt}\''
+
   before_destroy :check_integrity
   
   validates_presence_of :opt, :name
   validates_uniqueness_of :name, :scope => [:opt]
   validates_length_of :name, :maximum => 30
   validates_format_of :name, :with => /^[\w\s\'\-]*$/i
-       
-       OPTIONS = {
-         "IPRI" => :enumeration_issue_priorities,
-      "DCAT" => :enumeration_doc_categories,
-      "ACTI" => :enumeration_activities
-       }.freeze
-       
-       def self.get_values(option)
-               find(:all, :conditions => ['opt=?', option])
-       end
-       
+
+  OPTIONS = {
+    "IPRI" => :enumeration_issue_priorities,
+    "DCAT" => :enumeration_doc_categories,
+    "ACTI" => :enumeration_activities
+  }.freeze
+  
+  def self.get_values(option)
+    find(:all, :conditions => {:opt => option}, :order => 'position')
+  end
+
   def option_name
     OPTIONS[self.opt]
   end
   
+  #def <=>(enumeration)
+  #  position <=> enumeration.position
+  #end
+  
   def to_s; name end
   
 private
index f7756ce306a243005483303c397f7d420a61c52a..f92ca0a319b6ffec91876cbedd23188db9a1f953 100644 (file)
@@ -1,19 +1,25 @@
 <h2><%=l(:label_enumerations)%></h2>
-&nbsp;
+
 <% Enumeration::OPTIONS.each do |option, name| %>
+<h3><%= l(name) %></h3>
+
+<% enumerations = Enumeration.get_values(option) %>
+<% if enumerations.any? %>
+<table class="list">
+<% enumerations.each do |enumeration| %>
+<tr class="<%= cycle('odd', 'even') %>">
+    <td><%= link_to enumeration.name, :action => 'edit', :id => enumeration %></td>
+    <td style="width:15%;">
+    <%= link_to image_tag('2uparrow.png', :alt => l(:label_sort_highest)), {:action => 'move', :id => enumeration, :position => 'highest'}, :method => :post, :title => l(:label_sort_highest) %>
+    <%= link_to image_tag('1uparrow.png', :alt => l(:label_sort_higher)), {:action => 'move', :id => enumeration, :position => 'higher'}, :method => :post, :title => l(:label_sort_higher) %> -
+    <%= link_to image_tag('1downarrow.png', :alt => l(:label_sort_lower)), {:action => 'move', :id => enumeration, :position => 'lower'}, :method => :post, :title => l(:label_sort_lower) %>
+    <%= link_to image_tag('2downarrow.png', :alt => l(:label_sort_lowest)), {:action => 'move', :id => enumeration, :position => 'lowest'}, :method => :post, :title => l(:label_sort_lowest) %>
+    </td>
+</tr>
+<% end %>
+</table>
+<% reset_cycle %>
+<% end %>
 
-       <% if params[:opt]==option %>   
-  
-               <h3><%= l(name) %></h3>
-               <ul>
-               <% for value in Enumeration.find(:all, :conditions => ["opt = ?", option]) %>                   
-                       <li><%= link_to value.name, :action => 'edit', :id => value %></li>     
-               <% end %>
-    </ul>
-    <p><%= link_to l(:label_enumeration_new), { :action => 'new', :opt => option }, :class => "icon icon-add" %></p>&nbsp;
-    
-       <% else %>      
-               <h3><%= link_to l(name), :opt => option %></h3>
-       <% end %>
-  
-<% end %>
\ No newline at end of file
+<p><%= link_to l(:label_enumeration_new), { :action => 'new', :opt => option } %></p>
+<% end %>
diff --git a/db/migrate/072_add_enumerations_position.rb b/db/migrate/072_add_enumerations_position.rb
new file mode 100644 (file)
index 0000000..7def867
--- /dev/null
@@ -0,0 +1,12 @@
+class AddEnumerationsPosition < ActiveRecord::Migration
+  def self.up
+    add_column :enumerations, :position, :integer, :default => 1, :null => false
+    Enumeration.find(:all).group_by(&:opt).each_value  do |enums|
+      enums.each_with_index {|enum, i| enum.update_attribute(:position, i+1)}
+    end
+  end
+
+  def self.down
+    remove_column :enumerations, :position
+  end
+end