blog.rb
2.68 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
class Blog < Folder
has_many :posts, :class_name => 'Article', :foreign_key => 'parent_id', :source => :children, :conditions => [ 'type != ?', 'RssFeed' ], :order => 'published_at DESC, id DESC'
attr_accessor :feed_attrs
attr_accessor :filter
after_create do |blog|
blog.children << RssFeed.new(:name => 'feed', :profile => blog.profile, :feed_item_description => 'body')
blog.feed = blog.feed_attrs
end
settings_items :posts_per_page, :type => :integer, :default => 5
def self.short_description
_('Blog')
end
def self.description
_('A blog, inside which you can put other articles.')
end
# FIXME isn't this too much including just to be able to generate some HTML?
include ActionView::Helpers::TagHelper
def to_html(options = {})
posts_list(options[:page])
end
def folder?
true
end
def blog?
true
end
def feed
self.children.find(:first, :conditions => {:type => 'RssFeed'})
end
def feed=(attrs)
if attrs
if self.feed
self.feed.update_attributes(attrs)
else
self.feed_attrs = attrs
end
end
self.feed
end
def posts_list(npage)
article = self
children = if filter and filter[:year] and filter[:month]
filter_date = DateTime.parse("#{filter[:year]}-#{filter[:month]}-01")
posts.paginate :page => npage, :per_page => posts_per_page, :conditions => [ 'published_at between ? and ?', filter_date, filter_date + 1.month - 1.day ]
else
posts.paginate :page => npage, :per_page => posts_per_page
end
lambda do
render :file => 'content_viewer/blog_page', :locals => {:article => article, :children => children}
end
end
has_one :external_feed, :foreign_key => 'blog_id', :dependent => :destroy
attr_accessor :external_feed_data
def external_feed_builder=(efeed)
self.external_feed_data = efeed
end
def validate
unless self.external_feed_data.nil?
if self.external_feed(true) && self.external_feed.id == self.external_feed_data[:id].to_i
self.external_feed.attributes = self.external_feed_data
else
self.build_external_feed(self.external_feed_data)
end
self.external_feed.valid?
self.external_feed.errors.delete(:blog_id) # dont validate here relation: external_feed <-> blog
self.external_feed.errors.each do |attr,msg|
self.errors.add(attr, msg)
end
end
end
after_save do |blog|
if blog.external_feed
blog.external_feed.save
end
end
def name=(value)
self.set_name(value)
if self.slug.blank?
self.slug = self.name.to_slug
else
self.slug = self.slug.to_slug
end
end
end