From 837ea01a34a7dddeefe8086b2c6fc28e9a14616c Mon Sep 17 00:00:00 2001 From: Philip Arndt Date: Mon, 9 Aug 2010 16:47:56 +1200 Subject: Initial commit - you can create, edit and delete a blog post and it respects the fact that it is draft or not. --- app/controllers/admin/blog_posts_controller.rb | 5 ++ app/controllers/blog_posts_controller.rb | 30 +++++++++++ app/models/blog_category.rb | 10 ++++ app/models/blog_comment.rb | 8 +++ app/models/blog_post.rb | 14 +++++ app/views/admin/blog_posts/_blog_post.html.erb | 16 ++++++ app/views/admin/blog_posts/_form.html.erb | 25 +++++++++ app/views/admin/blog_posts/_sortable_list.html.erb | 7 +++ app/views/admin/blog_posts/edit.html.erb | 1 + app/views/admin/blog_posts/index.html.erb | 59 ++++++++++++++++++++++ app/views/admin/blog_posts/new.html.erb | 1 + app/views/blog_posts/index.html.erb | 11 ++++ app/views/blog_posts/show.html.erb | 20 ++++++++ config/locales/en.yml | 19 +++++++ config/locales/nb.yml | 19 +++++++ config/locales/nl.yml | 19 +++++++ config/routes.rb | 7 +++ .../refinery_blog/refinery_blog_generator.rb | 46 +++++++++++++++++ generators/refinery_blog/templates/migration.rb | 27 ++++++++++ generators/refinery_blog/templates/seed.rb | 16 ++++++ rails/init.rb | 10 ++++ 21 files changed, 370 insertions(+) create mode 100644 app/controllers/admin/blog_posts_controller.rb create mode 100644 app/controllers/blog_posts_controller.rb create mode 100644 app/models/blog_category.rb create mode 100644 app/models/blog_comment.rb create mode 100644 app/models/blog_post.rb create mode 100644 app/views/admin/blog_posts/_blog_post.html.erb create mode 100644 app/views/admin/blog_posts/_form.html.erb create mode 100644 app/views/admin/blog_posts/_sortable_list.html.erb create mode 100644 app/views/admin/blog_posts/edit.html.erb create mode 100644 app/views/admin/blog_posts/index.html.erb create mode 100644 app/views/admin/blog_posts/new.html.erb create mode 100644 app/views/blog_posts/index.html.erb create mode 100644 app/views/blog_posts/show.html.erb create mode 100644 config/locales/en.yml create mode 100644 config/locales/nb.yml create mode 100644 config/locales/nl.yml create mode 100644 config/routes.rb create mode 100644 generators/refinery_blog/refinery_blog_generator.rb create mode 100644 generators/refinery_blog/templates/migration.rb create mode 100644 generators/refinery_blog/templates/seed.rb create mode 100644 rails/init.rb diff --git a/app/controllers/admin/blog_posts_controller.rb b/app/controllers/admin/blog_posts_controller.rb new file mode 100644 index 0000000..0fd5a93 --- /dev/null +++ b/app/controllers/admin/blog_posts_controller.rb @@ -0,0 +1,5 @@ +class Admin::BlogPostsController < Admin::BaseController + + crudify :blog_post, :title_attribute => :title, :order => 'created_at DESC' + +end diff --git a/app/controllers/blog_posts_controller.rb b/app/controllers/blog_posts_controller.rb new file mode 100644 index 0000000..95169c0 --- /dev/null +++ b/app/controllers/blog_posts_controller.rb @@ -0,0 +1,30 @@ +class BlogPostsController < ApplicationController + + before_filter :find_all_blog_posts + before_filter :find_page + + def index + # you can use meta fields from your model instead (e.g. browser_title) + # by swapping @page for @blogs in the line below: + present(@page) + end + + def show + @blog_post = BlogPost.live.find(params[:id]) + + # you can use meta fields from your model instead (e.g. browser_title) + # by swapping @page for @blogs in the line below: + present(@page) + end + +protected + + def find_all_blog_posts + @blog_posts = BlogPost.live + end + + def find_page + @page = Page.find_by_link_url("/blogs") + end + +end diff --git a/app/models/blog_category.rb b/app/models/blog_category.rb new file mode 100644 index 0000000..9060d11 --- /dev/null +++ b/app/models/blog_category.rb @@ -0,0 +1,10 @@ +class BlogCategory < ActiveRecord::Base + + acts_as_indexed :fields => [:title] + + validates_presence_of :title + validates_uniqueness_of :title + + has_friendly_id :title, :use_slug => true + +end diff --git a/app/models/blog_comment.rb b/app/models/blog_comment.rb new file mode 100644 index 0000000..4398475 --- /dev/null +++ b/app/models/blog_comment.rb @@ -0,0 +1,8 @@ +class BlogPost < ActiveRecord::Base + + acts_as_indexed :fields => [:name, :email, :body] + + validates_presence_of :title + validates_uniqueness_of :title + +end diff --git a/app/models/blog_post.rb b/app/models/blog_post.rb new file mode 100644 index 0000000..481b8cb --- /dev/null +++ b/app/models/blog_post.rb @@ -0,0 +1,14 @@ +class BlogPost < ActiveRecord::Base + + acts_as_indexed :fields => [:title, :body] + + validates_presence_of :title + validates_uniqueness_of :title + + has_friendly_id :title, :use_slug => true + + default_scope :order => "created_at DESC" + + named_scope :live, :conditions => {:draft => false} + +end diff --git a/app/views/admin/blog_posts/_blog_post.html.erb b/app/views/admin/blog_posts/_blog_post.html.erb new file mode 100644 index 0000000..b56a050 --- /dev/null +++ b/app/views/admin/blog_posts/_blog_post.html.erb @@ -0,0 +1,16 @@ +
  • + + <%=h blog_post.title %> +   + + + <%= link_to refinery_icon_tag("application_go.png"), blog_post_url(blog_post), + :title => t('.view_live'), + :target => "_blank" %> + <%= link_to refinery_icon_tag("application_edit.png"), edit_admin_blog_post_path(blog_post), + :title => t('.edit') %> + <%= link_to refinery_icon_tag("delete.png"), admin_blog_post_path(blog_post), + :class => "cancel confirm-delete", + :title => t('.delete') %> + +
  • diff --git a/app/views/admin/blog_posts/_form.html.erb b/app/views/admin/blog_posts/_form.html.erb new file mode 100644 index 0000000..5d9f347 --- /dev/null +++ b/app/views/admin/blog_posts/_form.html.erb @@ -0,0 +1,25 @@ +<% form_for [:admin, @blog_post] do |f| -%> + <%= f.error_messages %> + +
    + <%= f.label :title -%> + <%= f.text_field :title, :class => 'larger widest' -%> +
    + +
    + <%= f.label :body -%> + <%= f.text_area :body, :rows => 20, :class => 'wymeditor widest' -%> +
    + +
    + <%= f.label :draft -%> + <%= f.check_box :draft -%> +
    + + <%= render :partial => "/shared/admin/form_actions", + :locals => { + :f => f, + :continue_editing => false, + :delete_title => t('admin.blogs.blogs.delete') + } %> +<% end -%> diff --git a/app/views/admin/blog_posts/_sortable_list.html.erb b/app/views/admin/blog_posts/_sortable_list.html.erb new file mode 100644 index 0000000..3529b23 --- /dev/null +++ b/app/views/admin/blog_posts/_sortable_list.html.erb @@ -0,0 +1,7 @@ + +<%= render :partial => "/shared/admin/sortable_list", + :locals => { + :continue_reordering => (defined?(continue_reordering) ? continue_reordering : true) + } %> diff --git a/app/views/admin/blog_posts/edit.html.erb b/app/views/admin/blog_posts/edit.html.erb new file mode 100644 index 0000000..2872e82 --- /dev/null +++ b/app/views/admin/blog_posts/edit.html.erb @@ -0,0 +1 @@ +<%= render :partial => "form" %> diff --git a/app/views/admin/blog_posts/index.html.erb b/app/views/admin/blog_posts/index.html.erb new file mode 100644 index 0000000..15fd775 --- /dev/null +++ b/app/views/admin/blog_posts/index.html.erb @@ -0,0 +1,59 @@ +
    + +
    +
    + <% if searching? %> +

    <%= t('admin.search_results_for', :query => params[:search]) %>

    + <% if @blog_posts.any? %> + <%= render :partial => "blog_posts", + :collection => @blog_posts %> + <% else %> +

    <%= t('admin.search_no_results') %>

    + <% end %> + <% else %> + <% if @blog_posts.any? %> + <%= will_paginate @blog_posts, + :previous_label => '«', + :next_label => '»' %> + + <%= render :partial => "sortable_list" %> + + <%= will_paginate @blog_posts, + :previous_label => '«', + :next_label => '»' %> + <% else %> +

    + + <%= t('.no_items_yet') %> + +

    + <% end %> + <% end %> +
    +<%= render :partial => "/shared/admin/make_sortable", + :locals => { + :tree => false + } if !searching? and BlogPost.count > 1 %> diff --git a/app/views/admin/blog_posts/new.html.erb b/app/views/admin/blog_posts/new.html.erb new file mode 100644 index 0000000..2872e82 --- /dev/null +++ b/app/views/admin/blog_posts/new.html.erb @@ -0,0 +1 @@ +<%= render :partial => "form" %> diff --git a/app/views/blog_posts/index.html.erb b/app/views/blog_posts/index.html.erb new file mode 100644 index 0000000..4dddcef --- /dev/null +++ b/app/views/blog_posts/index.html.erb @@ -0,0 +1,11 @@ +<% content_for :body_content_left do %> + +<% end %> + +<%= render :partial => "/shared/content_page" %> diff --git a/app/views/blog_posts/show.html.erb b/app/views/blog_posts/show.html.erb new file mode 100644 index 0000000..2cd39c6 --- /dev/null +++ b/app/views/blog_posts/show.html.erb @@ -0,0 +1,20 @@ +<% content_for :body_content_title, @blog_post.title %> + +<% content_for :body_content_left do %> + + <%= @blog_post.body %> + +<% end %> + +<% content_for :body_content_right do %> +

    <%= t('.other') %>

    + +<% end %> + +<%= render :partial => "/shared/content_page" %> diff --git a/config/locales/en.yml b/config/locales/en.yml new file mode 100644 index 0000000..0b1e15d --- /dev/null +++ b/config/locales/en.yml @@ -0,0 +1,19 @@ +en: + plugins: + refinerycms_blog: + title: Blog + admin: + blog_posts: + index: + create_new: Create new post + reorder: Reorder Blog Posts + reorder_done: Done Reordering Blog Posts + sorry_no_results: Sorry! There are no results found. + no_items_yet: There are no Blog Posts yet. Click "Create a new Blog Posts" to add your first blog posts. + blog_post: + view_live: View this blog post live
    (opens in a new window) + edit: Edit this blog post + delete: Remove this blog post forever + blog_posts: + show: + other: Other Blog Posts \ No newline at end of file diff --git a/config/locales/nb.yml b/config/locales/nb.yml new file mode 100644 index 0000000..8ff239f --- /dev/null +++ b/config/locales/nb.yml @@ -0,0 +1,19 @@ +nb: + plugins: + refinerycms_blog: + title: Blog + admin: + blog_posts: + index: + create_new: Lag en ny post + reorder: Endre rekkefølgen på Blog Posts + reorder_done: Ferdig å endre rekkefølgen Blog Posts + sorry_no_results: Beklager! Vi fant ikke noen resultater. + no_items_yet: Det er ingen Blog Posts enda. Klikk på "Lag en ny Blog Posts" for å legge til din første blog posts. + blog_post: + view_live: Vis hvordan denne blog post ser ut offentlig
    (åpner i et nytt vindu) + edit: Rediger denne blog post + delete: Fjern denne blog post permanent + blog_posts: + show: + other: Andre Blog Posts \ No newline at end of file diff --git a/config/locales/nl.yml b/config/locales/nl.yml new file mode 100644 index 0000000..c5daaf8 --- /dev/null +++ b/config/locales/nl.yml @@ -0,0 +1,19 @@ +nl: + plugins: + refinerycms_blog: + title: Blog + admin: + blog_posts: + index: + create_new: Maak een nieuwe post + reorder: Wijzig de volgorde van de Blog Post + reorder_done: Klaar met het wijzingen van de volgorde van de Blog Post + sorry_no_results: Helaas! Er zijn geen resultaten gevonden. + no_items_yet: Er zijn nog geen Blog Post. Druk op 'Maak een nieuwe Blog Post' om de eerste aan te maken. + blog_post: + view_live: Bekijk deze blog posts op de website
    (opent een nieuw venster) + edit: Bewerk deze blog post + delete: Verwijder deze blog post voor eeuwig + blog_posts: + show: + other: Andere Blog Post \ No newline at end of file diff --git a/config/routes.rb b/config/routes.rb new file mode 100644 index 0000000..e47fa00 --- /dev/null +++ b/config/routes.rb @@ -0,0 +1,7 @@ +ActionController::Routing::Routes.draw do |map| + map.resources :blog_posts, :as => :blog + + map.namespace(:admin, :path_prefix => 'refinery') do |admin| + admin.resources :blog_posts, :collection => {:update_positions => :post} + end +end diff --git a/generators/refinery_blog/refinery_blog_generator.rb b/generators/refinery_blog/refinery_blog_generator.rb new file mode 100644 index 0000000..0739498 --- /dev/null +++ b/generators/refinery_blog/refinery_blog_generator.rb @@ -0,0 +1,46 @@ +class RefineryBlogGenerator < Rails::Generator::NamedBase + + def initialize(*runtime_args) + # set argument for the user. + runtime_args[0] = %w(refinerycms_blog) + super(*runtime_args) + end + + def banner + "Usage: script/generate refinery_blog" + end + + def manifest + tables = %w(posts comments categories).map{|t| "blog_#{t}"} + record do |m| + m.template('seed.rb', 'db/seeds/refinerycms_blog.rb') + + m.migration_template('migration.rb', 'db/migrate', + :migration_file_name => "create_blog_structure", + :assigns => { + :migration_name => "CreateBlogStructure", + :tables => [{ + :table_name => tables.first, + :attributes => [ + Rails::Generator::GeneratedAttribute.new("title", "string"), + Rails::Generator::GeneratedAttribute.new("body", "text"), + Rails::Generator::GeneratedAttribute.new("draft", "boolean") + ] + },{ + :table_name => tables.second, + :attributes => [ + Rails::Generator::GeneratedAttribute.new("name", "string"), + Rails::Generator::GeneratedAttribute.new("email", "string"), + Rails::Generator::GeneratedAttribute.new("body", "text") + ] + },{ + :table_name => tables.third, + :attributes => [ + Rails::Generator::GeneratedAttribute.new("title", "string") + ] + }] + }) + end + end + +end if defined?(Rails::Generator::NamedBase) \ No newline at end of file diff --git a/generators/refinery_blog/templates/migration.rb b/generators/refinery_blog/templates/migration.rb new file mode 100644 index 0000000..2ebd06e --- /dev/null +++ b/generators/refinery_blog/templates/migration.rb @@ -0,0 +1,27 @@ +class <%= migration_name %> < ActiveRecord::Migration + + def self.up<% tables.each do |table| %> + create_table :<%= table[:table_name] %> do |t| +<% table[:attributes].each do |attribute| -%> + t.<%= attribute.type %> :<%= attribute.name %> +<% end -%> + t.timestamps + end + + add_index :<%= table[:table_name] %>, :id +<% end -%> + + load(Rails.root.join('db', 'seeds', 'refinerycms_blog.rb').to_s) + end + + def self.down + UserPlugin.destroy_all({:name => "refinerycms_blog"}) + + Page.delete_all({:link_url => "/blog"}) + +<% tables.each do |table| -%> + drop_table :<%= table[:table_name] %> +<% end -%> + end + +end diff --git a/generators/refinery_blog/templates/seed.rb b/generators/refinery_blog/templates/seed.rb new file mode 100644 index 0000000..228fc7b --- /dev/null +++ b/generators/refinery_blog/templates/seed.rb @@ -0,0 +1,16 @@ +User.find(:all).each do |user| + user.plugins.create(:name => "<%= singular_name %>", + :position => (user.plugins.maximum(:position) || -1) +1) +end + +page = Page.create( + :title => "Blog", + :link_url => "/blog", + :deletable => false, + :position => ((Page.maximum(:position, :conditions => {:parent_id => nil}) || -1)+1), + :menu_match => "^/blogs?(\/|\/.+?|)$" +) + +RefinerySetting.find_or_set(:default_page_parts, %w(Body Side\ Body)).each do |default_page_part| + page.parts.create(:title => default_page_part, :body => nil) +end diff --git a/rails/init.rb b/rails/init.rb new file mode 100644 index 0000000..1877664 --- /dev/null +++ b/rails/init.rb @@ -0,0 +1,10 @@ +Refinery::Plugin.register do |plugin| + plugin.name = "refinerycms_blog" + plugin.url = {:controller => '/admin/blog_posts', :action => 'index'} + plugin.menu_match = /^\/?(admin|refinery)\/blog_(posts|comments|categories)/ + plugin.activity = { + :class => BlogPost + } + + plugin.directory = directory # tell refinery where this plugin is located +end -- cgit v1.2.3