From f036f2a46f5c085505aff507f54518df8e283069 Mon Sep 17 00:00:00 2001 From: djones Date: Tue, 21 Sep 2010 17:20:08 +1200 Subject: added publish date support. fixes bug where categories were showing posts that were technically supposed to be hidden from the end user --- app/models/blog_category.rb | 13 ++++++- app/models/blog_post.rb | 10 +++-- app/views/admin/blog/posts/_form.html.erb | 2 + app/views/blog/shared/_categories.html.erb | 2 +- app/views/blog/shared/_post.html.erb | 44 +++++++++++----------- config/locales/en.yml | 1 + .../refinery_blog/refinery_blog_generator.rb | 1 + 7 files changed, 47 insertions(+), 26 deletions(-) diff --git a/app/models/blog_category.rb b/app/models/blog_category.rb index 09d32de..c78a7a4 100644 --- a/app/models/blog_category.rb +++ b/app/models/blog_category.rb @@ -8,5 +8,16 @@ class BlogCategory < ActiveRecord::Base validates_uniqueness_of :title has_friendly_id :title, :use_slug => true - + + # this might be able to be optimised a little more + def post_count + count = 0 + + self.posts.each do |p| + count += 1 if p.live? + end + + count + end + end diff --git a/app/models/blog_post.rb b/app/models/blog_post.rb index 0470cf7..a9fe8c2 100644 --- a/app/models/blog_post.rb +++ b/app/models/blog_post.rb @@ -13,11 +13,15 @@ class BlogPost < ActiveRecord::Base default_scope :order => "created_at DESC" if Rails.version < '3.0.0' - named_scope :live, :conditions => {:draft => false} + named_scope :live, lambda { {:conditions => ["published_at < ? and draft = ?", Time.now, false]} } else - scope :live, :conditions => {:draft => false} + scope :live, lambda { where( "published_at < ? and draft = ?", Time.now, false) } end - + + def live? + !draft and published_at <= Time.now + end + def category_ids=(ids) self.categories = ids.reject{|id| id.blank?}.collect {|c_id| BlogCategory.find(c_id.to_i) rescue nil diff --git a/app/views/admin/blog/posts/_form.html.erb b/app/views/admin/blog/posts/_form.html.erb index bf964e9..941dd03 100644 --- a/app/views/admin/blog/posts/_form.html.erb +++ b/app/views/admin/blog/posts/_form.html.erb @@ -44,6 +44,8 @@ <% end %> +

<%= t('admin.blog.posts.form.published_at') %>

+ <%= f.datetime_select :published_at %>
diff --git a/app/views/blog/shared/_categories.html.erb b/app/views/blog/shared/_categories.html.erb index fa26ceb..305e731 100644 --- a/app/views/blog/shared/_categories.html.erb +++ b/app/views/blog/shared/_categories.html.erb @@ -2,7 +2,7 @@ \ No newline at end of file diff --git a/app/views/blog/shared/_post.html.erb b/app/views/blog/shared/_post.html.erb index 26f5fbf..46fc23b 100644 --- a/app/views/blog/shared/_post.html.erb +++ b/app/views/blog/shared/_post.html.erb @@ -1,22 +1,24 @@ -
  • -

    <%= link_to post.title, blog_post_url(post) %>

    -

    - <%= t('blog.shared.posts.created_at', :when => post.created_at.strftime('%d %B %Y')) %> -

    -
    - <%= truncate(post.body, - :length => RefinerySetting.find_or_set(:blog_post_teaser_length, 250), - :preserve_html_tags => true) %> -
    -

    - <%= link_to t('blog.shared.posts.read_more'), blog_post_url(post) %> +<% if post.live? %> +

  • +

    <%= link_to post.title, blog_post_url(post) %>

    +

    + <%= t('blog.shared.posts.created_at', :when => post.published_at.strftime('%d %B %Y')) %> +

    +
    + <%= truncate(post.body, + :length => RefinerySetting.find_or_set(:blog_post_teaser_length, 250), + :preserve_html_tags => true) %> +
    +

    + <%= link_to t('blog.shared.posts.read_more'), blog_post_url(post) %> - - <% if post.comments.any? %> - (<%= pluralize(post.comments.count, t('blog.shared.comments.singular')) %>) - <% else %> - (<%= t('blog.shared.comments.none') %>) - <% end %> - -

    -
  • \ No newline at end of file + + <% if post.comments.any? %> + (<%= pluralize(post.comments.count, t('blog.shared.comments.singular')) %>) + <% else %> + (<%= t('blog.shared.comments.none') %>) + <% end %> + +

    + +<% end %> \ No newline at end of file diff --git a/config/locales/en.yml b/config/locales/en.yml index 5b5749c..f4a6659 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -37,6 +37,7 @@ en: advanced_options: Advanced Options toggle_advanced_options: Click to access meta tag settings and menu options save_as_draft: Save as Draft + published_at: Publish Date index: no_items_yet: 'There are no Blog Posts yet. Click "{{create}}" to add your first blog post.' post: diff --git a/generators/refinery_blog/refinery_blog_generator.rb b/generators/refinery_blog/refinery_blog_generator.rb index 0748bf9..36fce61 100644 --- a/generators/refinery_blog/refinery_blog_generator.rb +++ b/generators/refinery_blog/refinery_blog_generator.rb @@ -38,6 +38,7 @@ class RefineryBlogGenerator < Rails::Generator::NamedBase Rails::Generator::GeneratedAttribute.new('title', 'string'), Rails::Generator::GeneratedAttribute.new('body', 'text'), Rails::Generator::GeneratedAttribute.new('draft', 'boolean') + Rails::Generator::GeneratedAttribute.new('published_at', 'datetime') ], :id => true },{ :table_name => 'blog_comments', -- cgit v1.2.3