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)
# 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
<h2><%=l(:label_enumerations)%></h2>
-
+
<% 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>
-
- <% 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 %>
--- /dev/null
+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