aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--app/controllers/admin/blog_posts_controller.rb5
-rw-r--r--app/controllers/blog_posts_controller.rb30
-rw-r--r--app/models/blog_category.rb10
-rw-r--r--app/models/blog_comment.rb8
-rw-r--r--app/models/blog_post.rb14
-rw-r--r--app/views/admin/blog_posts/_blog_post.html.erb16
-rw-r--r--app/views/admin/blog_posts/_form.html.erb25
-rw-r--r--app/views/admin/blog_posts/_sortable_list.html.erb7
-rw-r--r--app/views/admin/blog_posts/edit.html.erb1
-rw-r--r--app/views/admin/blog_posts/index.html.erb59
-rw-r--r--app/views/admin/blog_posts/new.html.erb1
-rw-r--r--app/views/blog_posts/index.html.erb11
-rw-r--r--app/views/blog_posts/show.html.erb20
-rw-r--r--config/locales/en.yml19
-rw-r--r--config/locales/nb.yml19
-rw-r--r--config/locales/nl.yml19
-rw-r--r--config/routes.rb7
-rw-r--r--generators/refinery_blog/refinery_blog_generator.rb46
-rw-r--r--generators/refinery_blog/templates/migration.rb27
-rw-r--r--generators/refinery_blog/templates/seed.rb16
-rw-r--r--rails/init.rb10
21 files changed, 370 insertions, 0 deletions
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 @@
+<li class='clearfix record <%= cycle("on", "on-hover") %>' id="<%= dom_id(blog_post) -%>">
+ <span class='title'>
+ <%=h blog_post.title %>
+ <span class="preview">&nbsp;</span>
+ </span>
+ <span class='actions'>
+ <%= 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') %>
+ </span>
+</li>
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 %>
+
+ <div class='field'>
+ <%= f.label :title -%>
+ <%= f.text_field :title, :class => 'larger widest' -%>
+ </div>
+
+ <div class='field'>
+ <%= f.label :body -%>
+ <%= f.text_area :body, :rows => 20, :class => 'wymeditor widest' -%>
+ </div>
+
+ <div class='field'>
+ <%= f.label :draft -%>
+ <%= f.check_box :draft -%>
+ </div>
+
+ <%= 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 @@
+<ul id='sortable_list'>
+ <%= render :partial => 'blog_post', :collection => @blog_posts %>
+</ul>
+<%= 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 @@
+<div id='actions'>
+ <ul>
+ <li>
+ <%= render :partial => "/shared/admin/search",
+ :locals => {
+ :url => admin_blog_posts_url
+ } %>
+ </li>
+ <li>
+ <%= link_to t('.create_new'), new_admin_blog_post_url,
+ :class => "add_icon" %>
+ </li>
+ <% if !searching? and BlogPost.count > 1 %>
+ <li>
+ <%= link_to t('refinery.reorder', :what => "BlogPost"), admin_blog_posts_url,
+ :id => "reorder_action",
+ :class => "reorder_icon" %>
+
+ <%= link_to t('refinery.reorder_done', :what => "BlogPost"), admin_blog_posts_url,
+ :id => "reorder_action_done",
+ :style => "display: none;",
+ :class => "reorder_icon" %>
+ </li>
+ <% end %>
+ </ul>
+</div>
+<div id='records'>
+ <% if searching? %>
+ <h2><%= t('admin.search_results_for', :query => params[:search]) %></h2>
+ <% if @blog_posts.any? %>
+ <%= render :partial => "blog_posts",
+ :collection => @blog_posts %>
+ <% else %>
+ <p><%= t('admin.search_no_results') %></p>
+ <% end %>
+ <% else %>
+ <% if @blog_posts.any? %>
+ <%= will_paginate @blog_posts,
+ :previous_label => '&laquo;',
+ :next_label => '&raquo;' %>
+
+ <%= render :partial => "sortable_list" %>
+
+ <%= will_paginate @blog_posts,
+ :previous_label => '&laquo;',
+ :next_label => '&raquo;' %>
+ <% else %>
+ <p>
+ <strong>
+ <%= t('.no_items_yet') %>
+ </strong>
+ </p>
+ <% end %>
+ <% end %>
+</div>
+<%= 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 %>
+ <ul id="blog_posts">
+ <% @blog_posts.each do |blog_post| %>
+ <li>
+ <%= link_to blog_post.title, blog_post_url(blog_post) %>
+ </li>
+ <% end %>
+ </ul>
+<% 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 %>
+ <h2><%= t('.other') %></h2>
+ <ul id="blog_post">
+ <% @blog_posts.each do |blog_post| %>
+ <li>
+ <%= link_to blog_post.title, blog_post_url(blog_post) %>
+ </li>
+ <% end %>
+ </ul>
+<% 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 <br/><em>(opens in a new window)</em>
+ 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 <br/><em>(åpner i et nytt vindu)</em>
+ 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 <br/><em>(opent een nieuw venster)</em>
+ 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