##// END OF EJS Templates
remove trailing white-space from app/models/board.rb...
Toshi MARUYAMA -
r11108:7303cc416c4e
parent child
Show More
@@ -1,90 +1,90
1 # Redmine - project management software
1 # Redmine - project management software
2 # Copyright (C) 2006-2013 Jean-Philippe Lang
2 # Copyright (C) 2006-2013 Jean-Philippe Lang
3 #
3 #
4 # This program is free software; you can redistribute it and/or
4 # This program is free software; you can redistribute it and/or
5 # modify it under the terms of the GNU General Public License
5 # modify it under the terms of the GNU General Public License
6 # as published by the Free Software Foundation; either version 2
6 # as published by the Free Software Foundation; either version 2
7 # of the License, or (at your option) any later version.
7 # of the License, or (at your option) any later version.
8 #
8 #
9 # This program is distributed in the hope that it will be useful,
9 # This program is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 # GNU General Public License for more details.
12 # GNU General Public License for more details.
13 #
13 #
14 # You should have received a copy of the GNU General Public License
14 # You should have received a copy of the GNU General Public License
15 # along with this program; if not, write to the Free Software
15 # along with this program; if not, write to the Free Software
16 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
16 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
17
17
18 class Board < ActiveRecord::Base
18 class Board < ActiveRecord::Base
19 include Redmine::SafeAttributes
19 include Redmine::SafeAttributes
20 belongs_to :project
20 belongs_to :project
21 has_many :topics, :class_name => 'Message', :conditions => "#{Message.table_name}.parent_id IS NULL", :order => "#{Message.table_name}.created_on DESC"
21 has_many :topics, :class_name => 'Message', :conditions => "#{Message.table_name}.parent_id IS NULL", :order => "#{Message.table_name}.created_on DESC"
22 has_many :messages, :dependent => :destroy, :order => "#{Message.table_name}.created_on DESC"
22 has_many :messages, :dependent => :destroy, :order => "#{Message.table_name}.created_on DESC"
23 belongs_to :last_message, :class_name => 'Message', :foreign_key => :last_message_id
23 belongs_to :last_message, :class_name => 'Message', :foreign_key => :last_message_id
24 acts_as_tree :dependent => :nullify
24 acts_as_tree :dependent => :nullify
25 acts_as_list :scope => '(project_id = #{project_id} AND parent_id #{parent_id ? "= #{parent_id}" : "IS NULL"})'
25 acts_as_list :scope => '(project_id = #{project_id} AND parent_id #{parent_id ? "= #{parent_id}" : "IS NULL"})'
26 acts_as_watchable
26 acts_as_watchable
27
27
28 validates_presence_of :name, :description
28 validates_presence_of :name, :description
29 validates_length_of :name, :maximum => 30
29 validates_length_of :name, :maximum => 30
30 validates_length_of :description, :maximum => 255
30 validates_length_of :description, :maximum => 255
31 validate :validate_board
31 validate :validate_board
32
32
33 scope :visible, lambda {|*args|
33 scope :visible, lambda {|*args|
34 includes(:project).where(Project.allowed_to_condition(args.shift || User.current, :view_messages, *args))
34 includes(:project).where(Project.allowed_to_condition(args.shift || User.current, :view_messages, *args))
35 }
35 }
36
36
37 safe_attributes 'name', 'description', 'parent_id', 'move_to'
37 safe_attributes 'name', 'description', 'parent_id', 'move_to'
38
38
39 def visible?(user=User.current)
39 def visible?(user=User.current)
40 !user.nil? && user.allowed_to?(:view_messages, project)
40 !user.nil? && user.allowed_to?(:view_messages, project)
41 end
41 end
42
42
43 def reload(*args)
43 def reload(*args)
44 @valid_parents = nil
44 @valid_parents = nil
45 super
45 super
46 end
46 end
47
47
48 def to_s
48 def to_s
49 name
49 name
50 end
50 end
51
51
52 def valid_parents
52 def valid_parents
53 @valid_parents ||= project.boards - self_and_descendants
53 @valid_parents ||= project.boards - self_and_descendants
54 end
54 end
55
55
56 def reset_counters!
56 def reset_counters!
57 self.class.reset_counters!(id)
57 self.class.reset_counters!(id)
58 end
58 end
59
59
60 # Updates topics_count, messages_count and last_message_id attributes for +board_id+
60 # Updates topics_count, messages_count and last_message_id attributes for +board_id+
61 def self.reset_counters!(board_id)
61 def self.reset_counters!(board_id)
62 board_id = board_id.to_i
62 board_id = board_id.to_i
63 update_all("topics_count = (SELECT COUNT(*) FROM #{Message.table_name} WHERE board_id=#{board_id} AND parent_id IS NULL)," +
63 update_all("topics_count = (SELECT COUNT(*) FROM #{Message.table_name} WHERE board_id=#{board_id} AND parent_id IS NULL)," +
64 " messages_count = (SELECT COUNT(*) FROM #{Message.table_name} WHERE board_id=#{board_id})," +
64 " messages_count = (SELECT COUNT(*) FROM #{Message.table_name} WHERE board_id=#{board_id})," +
65 " last_message_id = (SELECT MAX(id) FROM #{Message.table_name} WHERE board_id=#{board_id})",
65 " last_message_id = (SELECT MAX(id) FROM #{Message.table_name} WHERE board_id=#{board_id})",
66 ["id = ?", board_id])
66 ["id = ?", board_id])
67 end
67 end
68
68
69 def self.board_tree(boards, parent_id=nil, level=0)
69 def self.board_tree(boards, parent_id=nil, level=0)
70 tree = []
70 tree = []
71 boards.select {|board| board.parent_id == parent_id}.sort_by(&:position).each do |board|
71 boards.select {|board| board.parent_id == parent_id}.sort_by(&:position).each do |board|
72 tree << [board, level]
72 tree << [board, level]
73 tree += board_tree(boards, board.id, level+1)
73 tree += board_tree(boards, board.id, level+1)
74 end
74 end
75 if block_given?
75 if block_given?
76 tree.each do |board, level|
76 tree.each do |board, level|
77 yield board, level
77 yield board, level
78 end
78 end
79 end
79 end
80 tree
80 tree
81 end
81 end
82
82
83 protected
83 protected
84
84
85 def validate_board
85 def validate_board
86 if parent_id && parent_id_changed?
86 if parent_id && parent_id_changed?
87 errors.add(:parent_id, :invalid) unless valid_parents.include?(parent)
87 errors.add(:parent_id, :invalid) unless valid_parents.include?(parent)
88 end
88 end
89 end
89 end
90 end
90 end
General Comments 0
You need to be logged in to leave comments. Login now