context_content_block.rb
1.76 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
class ContextContentPlugin::ContextContentBlock < Block
settings_items :show_name, :type => :boolean, :default => true
settings_items :show_image, :type => :boolean, :default => true
settings_items :use_parent_title, :type => :boolean, :default => false
settings_items :show_parent_content, :type => :boolean, :default => true
settings_items :types, :type => Array, :default => ['UploadedFile']
settings_items :limit, :type => :integer, :default => 6
attr_accessible :show_image, :show_name, :use_parent_title, :show_parent_content, :types
alias :profile :owner
include Noosfero::Plugin::HotSpot
def self.description
_('Display context content')
end
def help
_('This block displays content based on context.')
end
def available_content_types
@available_content_types ||= [UploadedFile, Event, TextArticle, Folder, Blog, Forum, Gallery, RssFeed] + plugins.dispatch(:content_types)
checked_types = types.map {|t| t.constantize}
checked_types + (@available_content_types - checked_types)
end
def first_content_types
available_content_types.first(first_types_count)
end
def more_content_types
available_content_types.drop(first_types_count)
end
def first_types_count
[2, types.length].max
end
def types=(new_types)
settings[:types] = new_types.reject(&:blank?)
end
def contents(page, p=1)
return @children unless @children.blank?
if page
@children = page.children.with_types(types).order(:name).paginate(:per_page => limit, :page => p)
(@children.blank? && show_parent_content) ? contents(page.parent, p) : @children
else
nil
end
end
def parent_title(contents)
return nil if contents.blank?
contents.first.parent.name
end
def cacheable?
false
end
end