diff --git a/app/helpers/blog_helper.rb b/app/helpers/blog_helper.rb
index 6d829fe..bb918f7 100644
--- a/app/helpers/blog_helper.rb
+++ b/app/helpers/blog_helper.rb
@@ -35,4 +35,5 @@ module BlogHelper
article_title(article) + content_tag('p', article.to_html) +
content_tag('p', link_to( number_of_comments(article), article.url.merge(:form => 'opened', :anchor => 'comment_form') ), :class => 'metadata')
end
+
end
diff --git a/app/helpers/content_viewer_helper.rb b/app/helpers/content_viewer_helper.rb
index d336614..36db7ff 100644
--- a/app/helpers/content_viewer_helper.rb
+++ b/app/helpers/content_viewer_helper.rb
@@ -20,7 +20,7 @@ module ContentViewerHelper
unless args[:no_link]
title = content_tag('h3', link_to(article.name, article.url), :class => 'title')
end
- title << content_tag('span', _("%s, by %s") % [show_date(article.created_at), link_to(article.author.name, article.author.url)], :class => 'created-at')
+ title << content_tag('span', _("%s, by %s") % [show_date(article.published_at), link_to(article.author.name, article.author.url)], :class => 'created-at')
end
title
end
diff --git a/app/models/article.rb b/app/models/article.rb
index 9be2845..9b3931c 100644
--- a/app/models/article.rb
+++ b/app/models/article.rb
@@ -20,6 +20,10 @@ class Article < ActiveRecord::Base
settings_items :display_hits, :type => :boolean, :default => true
+ before_create do |article|
+ article.published_at = article.created_at if article.published_at.nil?
+ end
+
def self.human_attribute_name(attrib)
case attrib.to_sym
when :name
diff --git a/app/models/blog.rb b/app/models/blog.rb
index d0de39b..bd7f5be 100644
--- a/app/models/blog.rb
+++ b/app/models/blog.rb
@@ -1,6 +1,6 @@
class Blog < Folder
- has_many :posts, :class_name => 'Article', :foreign_key => 'parent_id', :source => :children, :conditions => [ 'type != ?', 'RssFeed' ], :order => 'created_at DESC'
+ has_many :posts, :class_name => 'Article', :foreign_key => 'parent_id', :source => :children, :conditions => [ 'type != ?', 'RssFeed' ], :order => 'published_at DESC'
attr_accessor :feed_attrs
attr_accessor :filter
@@ -56,7 +56,7 @@ class Blog < Folder
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 => [ 'created_at between ? and ?', filter_date, filter_date + 1.month - 1.day ]
+ 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
@@ -64,4 +64,33 @@ class Blog < Folder
render :file => 'content_viewer/blog_page', :locals => {:article => article, :children => children}
end
end
+
+ has_one :external_feed, :foreign_key => 'blog_id'
+
+ 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
+
end
diff --git a/app/models/blog_archives_block.rb b/app/models/blog_archives_block.rb
index e74a448..74e199d 100644
--- a/app/models/blog_archives_block.rb
+++ b/app/models/blog_archives_block.rb
@@ -18,10 +18,10 @@ class BlogArchivesBlock < Block
return nil unless owner.has_blog?
results = ''
posts = owner.blog.posts
- posts.group_by{|i| i.created_at.year}.each do |year, results_by_year|
+ posts.group_by{|i| i.published_at.year}.each do |year, results_by_year|
results << content_tag('li', content_tag('strong', "#{year} (#{results_by_year.size})"))
results << "
"
- results_by_year.group_by{|i| [ ('%02d' % i.created_at.month()), gettext(MONTHS[i.created_at.month() - 1])]}.sort.each do |month, results_by_month|
+ results_by_year.group_by{|i| [ ('%02d' % i.published_at.month()), gettext(MONTHS[i.published_at.month() - 1])]}.sort.each do |month, results_by_month|
results << content_tag('li', link_to("#{month[1]} (#{results_by_month.size})", owner.generate_url(:controller => 'content_viewer', :action => 'view_page', :page => [owner.blog.path, year, month[0]])))
end
results << "
"
diff --git a/app/models/external_feed.rb b/app/models/external_feed.rb
new file mode 100644
index 0000000..9d8f8bb
--- /dev/null
+++ b/app/models/external_feed.rb
@@ -0,0 +1,29 @@
+class ExternalFeed < ActiveRecord::Base
+
+ belongs_to :blog
+ validates_presence_of :blog_id
+ validates_presence_of :address, :if => lambda {|efeed| efeed.enabled}
+ validates_uniqueness_of :blog_id
+
+ def add_item(title, link, date, content)
+ article = TinyMceArticle.new(:name => title, :profile => blog.profile, :body => content, :published_at => date, :source => link, :profile => blog.profile, :parent => blog)
+ unless blog.children.exists?(:slug => article.slug)
+ article.save!
+ end
+ end
+
+ def clear
+ # do nothing
+ end
+ def finish_fetch
+ if self.only_once
+ self.enabled = 'false'
+ end
+ self.save!
+ end
+
+ def limit
+ 0
+ end
+
+end
diff --git a/app/models/feed_reader_block.rb b/app/models/feed_reader_block.rb
index 60eea6a..b5d650c 100644
--- a/app/models/feed_reader_block.rb
+++ b/app/models/feed_reader_block.rb
@@ -48,6 +48,9 @@ class FeedReaderBlock < Block
self.feed_items = []
self.feed_title = nil
end
+ def finish_fetch
+ self.save!
+ end
def content
block_title(title) + formatted_feed_content
diff --git a/app/views/cms/_blog.rhtml b/app/views/cms/_blog.rhtml
index 57414ef..57aab5d 100644
--- a/app/views/cms/_blog.rhtml
+++ b/app/views/cms/_blog.rhtml
@@ -1,3 +1,5 @@
+<%= error_messages_for 'blog' %>
+
<%= _('My Blog') %>
<%= render :file => 'shared/tiny_mce' %>
@@ -8,12 +10,26 @@
<%= labelled_form_field(_('Posts per page:'), f.select(:posts_per_page, [5, 10, 20, 50, 100])) %>
-<% fields_for 'article[feed]', @article.feed do |feed| %>
-
-<%= labelled_form_field(_('Limit of posts in RSS Feed'), feed.select(:limit, ['5', '10', '20', '50'])) %>
-
-<%= labelled_form_field(_('Use as description in RSS Feed:'), feed.select(:feed_item_description, [ [ _('Article abstract'), 'abstract'], [ _('Article body'), 'body']])) %>
+<% f.fields_for 'feed', @article.feed do |feed| %>
+ <%= labelled_form_field(_('Limit of posts in RSS Feed'), feed.select(:limit, ['5', '10', '20', '50'])) %>
+ <%= labelled_form_field(_('Use as description in RSS Feed:'), feed.select(:feed_item_description, [ [ _('Article abstract'), 'abstract'], [ _('Article body'), 'body']])) %>
+<% end %>
+<% f.fields_for 'external_feed_builder', @article.external_feed do |efeed| %>
+
+ <% enabled = @article.external_feed && @article.external_feed.enabled %>
+ <% only_once = @article.external_feed ? @article.external_feed.only_once : true %>
+ <%= labelled_check_box(_('Fetch posts from an external feed'), 'article[external_feed_builder][enabled]', 'true', enabled, {:onchange => "$('external-feed-options').toggle()"}) %>
+ <%= hidden_field_tag 'article[external_feed_builder][enabled]', 'false' %>
+
+ <%= efeed.hidden_field(:id) %>
+ <%= labelled_form_field( _('Feed address'), efeed.text_field(:address) ) %>
+
+ <%= labelled_radio_button( _('Fetch posts only once'), 'article[external_feed_builder][only_once]', 'true', only_once) %>
+ <%= labelled_radio_button( _('Fetch posts always'), 'article[external_feed_builder][only_once]', 'false', !only_once) %>
+
+
+
<% end %>
<%= javascript_tag "$('back_to').value = 'control_panel'" %>
diff --git a/app/views/content_viewer/blog_page.rhtml b/app/views/content_viewer/blog_page.rhtml
index f1bda69..7ec2a36 100644
--- a/app/views/content_viewer/blog_page.rhtml
+++ b/app/views/content_viewer/blog_page.rhtml
@@ -1,5 +1,5 @@
+<%= content_tag('em', _('(external feed was not loaded yet)'), :id => 'external-feed-info', :class => 'metadata') if article.blog? && article.external_feed && article.external_feed.fetched_at.nil? %>
+
<%= article.body %>
<%= (children.compact.empty? ? content_tag('em', _('(no posts)')) : list_posts(user, children)) %>
-
-
diff --git a/app/views/content_viewer/view_page.rhtml b/app/views/content_viewer/view_page.rhtml
index a5f1c12..849e917 100644
--- a/app/views/content_viewer/view_page.rhtml
+++ b/app/views/content_viewer/view_page.rhtml
@@ -97,6 +97,11 @@
<% end %>
+<% if ! @page.source.nil? and ! @page.source.empty?%>
+
+ <%= _('Source: %s') % link_to(@page.source, @page.source) %>
+
+<% end %>