Added position on Enumeration model.

git-svn-id: http://redmine.rubyforge.org/svn/trunk@800 e93f8b46-1217-0410-a6f0-8f06a7374b81
This commit is contained in:
Jean-Philippe Lang 2007-10-04 17:04:50 +00:00
parent 479b9b5433
commit c216ab325b
4 changed files with 67 additions and 28 deletions

View 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)

View File

@ -16,6 +16,8 @@
# 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
@ -23,20 +25,24 @@ class Enumeration < ActiveRecord::Base
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
OPTIONS = {
"IPRI" => :enumeration_issue_priorities,
"DCAT" => :enumeration_doc_categories,
"ACTI" => :enumeration_activities
}.freeze
def self.get_values(option)
find(:all, :conditions => ['opt=?', option])
end
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

View File

@ -1,19 +1,25 @@
<h2><%=l(:label_enumerations)%></h2>
&nbsp;
<% Enumeration::OPTIONS.each do |option, name| %>
<h3><%= l(name) %></h3>
<% 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 %>
<% 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 %>
<p><%= link_to l(:label_enumeration_new), { :action => 'new', :opt => option } %></p>
<% end %>

View File

@ -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