track.rb
1.73 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
class CommunityTrackPlugin::Track < Folder
settings_items :goals, :type => :string
settings_items :expected_results, :type => :string
validate :validate_categories
attr_accessible :goals, :expected_results
def validate_categories
errors.add(:categories, _('should not be blank.')) if categories.empty? && pending_categorizations.blank?
end
def self.icon_name(article = nil)
'community-track'
end
def self.short_description
_("Track")
end
def self.description
_('Defines a track.')
end
def steps
#XXX article default order is name (acts_as_filesystem) -> should use reorder (rails3)
steps_unsorted.sort_by(&:position).select{|s| !s.hidden}
end
def hidden_steps
steps_unsorted.select{|s| s.hidden}
end
def reorder_steps(step_ids)
transaction do
step_ids.each_with_index do |step_id, i|
step = steps_unsorted.find(step_id)
step.update_attribute(:position, step.position = i + 1)
end
end
end
def steps_unsorted
children.where(:type => 'CommunityTrackPlugin::Step')
end
def accept_comments?
false
end
def comments_count
steps_unsorted.joins(:children).sum('children_articles.comments_count')
end
def css_class_name
"community-track-plugin-track"
end
def first_paragraph
return '' if body.blank?
paragraphs = Nokogiri::HTML.fragment(body).css('p')
paragraphs.empty? ? '' : paragraphs.first.to_html
end
def category_name
category = categories.first
category = category.top_ancestor unless category.nil?
category.nil? ? '' : category.name
end
def to_html(options = {})
track = self
proc do
render :file => 'content_viewer/track', :locals => {:track => track}
end
end
end