display_content_block.rb
3.74 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
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
class DisplayContentBlock < Block
settings_items :nodes, :type => Array, :default => []
settings_items :parent_nodes, :type => Array, :default => []
settings_items :sections,
:type => Array,
:default => [{:name => _('Title'), :checked => true},
{:name => _('Abstract'), :checked => true},
{:name => _('Body'), :checked => false},
{:name => _('Image'), :checked => false}]
def self.description
_('Display your contents')
end
def help
_('This block displays articles chosen by you. You can edit the block to select which of your articles is going to be displayed in the block.')
end
def checked_nodes= params
return self.nodes if self.holder.nil?
articles = []
parent_articles = []
self.holder.articles.find(params.keys).map do |article|
if article.folder?
articles = articles + article.children
parent_articles << article.id
else
articles<< article
end
parent_articles = parent_articles + get_parent(article) unless parent_articles.include?(article.parent_id)
end
self.parent_nodes = parent_articles
self.nodes = articles.map{|a| a.id if a.is_a?(TextArticle) }.compact
end
VALID_CONTENT = ['RawHTMLArticle', 'TextArticle', 'TextileArticle', 'TinyMceArticle', 'Folder', 'Blog', 'Forum']
def articles_of_parent(parent = nil)
return [] if self.holder.nil?
holder.articles.find(:all, :conditions => {:type => VALID_CONTENT, :parent_id => (parent.nil? ? nil : parent)})
end
include ActionController::UrlWriter
def content(args={})
docs = owner.articles.find(:all, :conditions => {:id => self.nodes})
content_sections = ''
block_title(title) +
content_tag('ul', docs.map {|item|
read_more_section = ''
sections.select { |section|
case section[:name]
when 'Title'
content_sections += (display_section?(section) ? (content_tag('div', link_to(h(item.title), item.url), :class => 'title') ) : '')
when 'Abstract'
content_sections += (display_section?(section) ? (content_tag('div', item.abstract ,:class => 'lead')) : '' )
if display_section?(section)
read_more_section = content_tag('div', link_to(_('Read more'), item.url), :class => 'read_more')
end
when 'Body'
content_sections += (display_section?(section) ? (content_tag('div', item.body ,:class => 'body')) : '' )
when 'Image'
image_section = image_tag item.image.public_filename if item.image
if !image_section.blank?
content_sections += (display_section?(section) ? (content_tag('div', link_to( image_section, item.url ) ,:class => 'image')) : '' )
end
end
}
content_sections += read_more_section if !read_more_section.blank?
content_tag('li', content_sections)
}.join("\n"))
end
def url_params
params = {:block_id => self.id}
if self.owner.is_a?(Profile)
params.merge!(:controller => "display_content_plugin_myprofile")
params.merge!(:profile => self.holder.identifier)
else
params.merge!( :controller => "display_content_plugin_admin")
end
params
end
def display_section?(section)
section[:checked]
end
protected
def holder
return nil if self.box.nil? || self.box.owner.nil?
if self.box.owner.kind_of?(Environment)
return nil if self.box.owner.portal_community.nil?
self.box.owner.portal_community
else
self.box.owner
end
end
def get_parent(article)
return [] if article.parent_id.nil?
parents = [article.parent.id] + get_parent(article.parent)
return parents
end
end