spud_cms 0.8.17 → 0.9.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (52) hide show
  1. data/README.markdown +30 -13
  2. data/app/assets/images/spud/admin/snippets_thumb.png +0 -0
  3. data/app/assets/images/spud/admin/snippets_thumb@2x.png +0 -0
  4. data/app/assets/javascripts/spud/admin/cms/application.js +3 -3
  5. data/app/controllers/pages_controller.rb +6 -23
  6. data/app/controllers/spud/admin/menu_items_controller.rb +6 -10
  7. data/app/controllers/spud/admin/menus_controller.rb +1 -1
  8. data/app/controllers/spud/admin/pages_controller.rb +40 -86
  9. data/app/controllers/spud/cms/sitemaps_controller.rb +1 -1
  10. data/app/helpers/spud/cms/application_helper.rb +50 -26
  11. data/app/models/spud_menu_item.rb +10 -13
  12. data/app/models/spud_page.rb +12 -4
  13. data/app/models/spud_page_liquid_tag.rb +4 -0
  14. data/app/models/spud_page_partial.rb +40 -1
  15. data/app/observers/page_sweeper.rb +48 -0
  16. data/app/views/pages/show.html.erb +9 -11
  17. data/app/views/spud/admin/pages/_form.html.erb +15 -16
  18. data/app/views/spud/admin/pages/_page_partials_form.html.erb +3 -3
  19. data/app/views/spud/admin/pages/index.html.erb +1 -1
  20. data/app/views/spud/admin/pages/show.html.erb +4 -6
  21. data/config/routes.rb +3 -3
  22. data/db/migrate/20120911190030_add_symbol_name_to_spud_page_partials.rb +5 -0
  23. data/db/migrate/20120912121313_modify_site_id_for_spud_pages.rb +15 -0
  24. data/db/migrate/20121016233715_add_content_processed_to_spud_page_partials.rb +5 -0
  25. data/db/migrate/20121112151110_add_layout_to_spud_pages.rb +8 -0
  26. data/db/migrate/20121112212113_create_spud_page_liquid_tags.rb +11 -0
  27. data/lib/spud_cms.rb +1 -0
  28. data/lib/spud_cms/configuration.rb +4 -7
  29. data/lib/spud_cms/engine.rb +37 -16
  30. data/lib/spud_cms/template_parser.rb +121 -0
  31. data/lib/spud_cms/version.rb +1 -1
  32. data/spec/controllers/pages_controller_spec.rb +108 -0
  33. data/spec/controllers/spud/admin/menu_items_controller_spec.rb +148 -0
  34. data/spec/controllers/spud/admin/menus_controller_spec.rb +121 -0
  35. data/spec/controllers/spud/admin/pages_controller_spec.rb +5 -13
  36. data/spec/controllers/spud/cms/sitemaps_controller_spec.rb +35 -4
  37. data/spec/dummy/app/controllers/application_controller.rb +1 -1
  38. data/spec/dummy/db/schema.rb +146 -0
  39. data/spec/dummy/log/development.log +341 -0
  40. data/spec/dummy/log/test.log +182863 -0
  41. data/spec/helpers/spud/cms/application_helper_spec.rb +160 -0
  42. data/spec/models/spud_menu_item_spec.rb +31 -0
  43. data/spec/models/spud_page_liquid_tag_spec.rb +5 -0
  44. data/spec/models/spud_page_partial_spec.rb +44 -0
  45. data/spec/models/spud_page_spec.rb +1 -2
  46. metadata +50 -19
  47. data/app/assets/images/spud/admin/templates_thumb.png +0 -0
  48. data/app/controllers/spud/admin/templates_controller.rb +0 -73
  49. data/app/models/page_sweeper.rb +0 -63
  50. data/app/models/spud_template.rb +0 -10
  51. data/app/views/layouts/spud/admin/cms/detail.html.erb +0 -5
  52. data/spec/models/spud_template_spec.rb +0 -34
@@ -2,37 +2,34 @@ Spud CMS
2
2
  ========
3
3
 
4
4
  Spud CMS is a CMS Engine designed to be robust, easy to use, and light weight.
5
- NOTE: This project is still in its early infancy.
5
+
6
6
 
7
7
  Installation/Usage
8
8
  ------------------
9
9
 
10
10
  1. In your Gemfile add the following
11
11
 
12
- gem 'spud_core', :git => "git://github.com/davydotcom/spud_core_admin.git"
13
- gem 'spud_cms', :git => "git://github.com/davydotcom/spud_cms.git"
12
+ gem 'spud_cms'
14
13
 
15
14
  2. Run bundle install
16
15
  3. Copy in database migrations to your new rails project
17
16
 
18
- bundle exec rake spud_core:install:migrations
19
- bundle exec rake spud_cms:install:migrations
17
+ bundle exec rake railties:install:migrations
20
18
  rake db:migrate
21
19
  4. Change ApplicationController to inherit from Spud::ApplicationController instead of ActionController::Base
22
20
 
23
21
  class ApplicationController < Spud::ApplicationController
24
-
22
+
25
23
  5. run a rails server instance and point your browser to /spud/admin
26
24
 
27
25
  Routing to the CMS Engine
28
26
  --------------------------
29
27
  Routing your home page to the CMS engine is fairly straight forward.
30
- in your applications environment.rb file add a configure block as such
28
+ in your applications application.rb file add a configure block as such
31
29
 
32
30
 
33
31
  Spud::Cms.configure do |config|
34
32
  config.menus_enabled = true
35
- config.templates_enabled = false
36
33
  config.root_page_name = "home"
37
34
  end
38
35
 
@@ -42,15 +39,35 @@ Where "home" is the page name you wish to use.
42
39
 
43
40
  Pages will default render to the 'application' layout of your application. You can change this by using templates to specify base layouts.
44
41
 
42
+ Defining Templates / Layouts
43
+ ----------------------------
44
+ Spud CMS has recently changed its template structure. The admin templates area is no longer with us. In Spud CMS templates are defined similar to how an asset pipeline manifest is defined. At the top of your layout files a series of comments can be used to define the name of the template, and the content_for blocks that are editable by the user.
45
+
46
+ Example:
47
+
48
+ <%
49
+ #template_name: 2 Column Page
50
+ #html: Left
51
+ #html: Right
52
+ %>
53
+
54
+ Optionally a description can be passed as well as a `site_name: default` for multisite mode.
55
+
56
+
57
+ Using Liquid Template Engine
58
+ ----------------------------
59
+ Spud CMS utilizes the liquid template syntax engine created by Shopify. This allows you to easily inject variables into your pages in the page editor. Example:
60
+
61
+ <h2>{{page.name}}</h2>
62
+
45
63
  Using Menus
46
64
  -----------
47
65
  A lot of cms engines allow you to render your navigation links in a ul block by using your page tree structure. In a lot of cases this is insufficient as some sites have urls that redirect to pages outside of your cms. This is where menus come in. They can be built in the spud admin control panel.
48
66
  In your application layout file or any erb template you can render a ul block like so
49
-
50
- <%=sp_list_menu({:id => "navigation",:name => "Main"})%>
51
-
52
- This will output a <ul id="navigation"></ul> block for the menu you created in admin named "Main"
53
67
 
68
+ <%=sp_list_menu({:id => "navigation",:name => "Main"})%>
69
+
70
+ This will output a <ul id="navigation"></ul> block for the menu you created in admin named "Main"
54
71
 
55
72
  Adding Your Own Engines
56
73
  -----------------------
@@ -75,7 +92,7 @@ Testing
75
92
  Spud uses RSpec for testing. Get the tests running with a few short commands:
76
93
 
77
94
  1. Create and migrate the databases:
78
-
95
+
79
96
  rake db:create
80
97
  rake db:migrate
81
98
 
@@ -11,17 +11,17 @@
11
11
  $(document).ready(function() {
12
12
  // initWysiwym();
13
13
  initTinyMCE();
14
- $("#spud_page_template_id").bind('change', function() {
14
+ $("#spud_page_layout").bind('change', function() {
15
15
  var $this = $(this);
16
16
  $.get($this.attr("data-source"), { template: $this.val() }, function(data) {
17
- $('.formtabs').tabs('destroy');
17
+ // $('.formtabs').tabs('destroy');
18
18
 
19
19
 
20
20
  $('textarea.tinymce').each(function() {$(this).tinymce().execCommand('mceRemoveControl',false,this.id)});
21
21
  $("#page_partials_form").replaceWith(data)
22
22
  initFormTabs();
23
23
  initTinyMCE();
24
- // initWysiwym();
24
+
25
25
  }, 'text').error(function(jqXHR) {
26
26
  $('<p> Error: ' + jqXHR.responseText + '</p>').dialog();
27
27
  });
@@ -1,12 +1,10 @@
1
1
  class PagesController < ApplicationController
2
- caches_action :show, :if => Proc.new { |c| Spud::Cms.enable_action_caching }
2
+ caches_action :show, :if => Proc.new { |c| Spud::Cms.cache_mode == :action }
3
3
 
4
4
  respond_to :html
5
5
 
6
- # caches_page :show, :if => Proc.new { |c| Spud::Cms.enable_full_page_caching }
7
6
  after_filter({:only => [:show]}) do |c|
8
- return if !Spud::Cms.enable_full_page_caching
9
- if @page && @page.is_private? == false
7
+ if Spud::Cms.cache_mode == :full_page && @page && @page.is_private? == false
10
8
  c.cache_page(nil, nil, false)
11
9
  end
12
10
  end
@@ -29,7 +27,7 @@ class PagesController < ApplicationController
29
27
  end
30
28
  end
31
29
 
32
- @page = SpudPage.published_pages.where(:url_name => url_name).includes([:spud_template,:spud_page_partials])
30
+ @page = SpudPage.published_pages.where(:url_name => url_name).includes([:spud_page_partials])
33
31
 
34
32
  # MultiSite Code Block
35
33
  if Spud::Core.multisite_mode_enabled
@@ -51,25 +49,16 @@ class PagesController < ApplicationController
51
49
  redirect_to @permalink.attachment.url_name == Spud::Cms.root_page_name ? root_url() : page_url(:id => @permalink.attachment.url_name) , :status => :moved_permanently and return
52
50
  end
53
51
 
54
- # flash[:error] = "Page not found"
55
- # if !params[:id].blank?
56
- # redirect_to root_url() and return
57
- # else
58
- # return
59
- # end
52
+
60
53
  render_404
61
54
  return
62
55
  end
63
56
 
64
57
  if @page.is_private?
65
- if defined?(require_user) && require_user == false
66
- logger.debug("responds to require user!")
67
- return
68
- end
69
- logger.debug("does not!")
58
+ return if defined?(require_user) && require_user == false
70
59
  end
71
60
 
72
- layout = Spud::Cms.default_page_layout
61
+ layout = @page.layout || Spud::Cms.default_page_layout
73
62
 
74
63
  # MultiSite Code Block
75
64
  if Spud::Core.multisite_mode_enabled && !site_config.blank?
@@ -77,12 +66,6 @@ class PagesController < ApplicationController
77
66
  layout = cms_config[:default_page_layout] if !cms_config.blank? && !cms_config[:default_page_layout].blank?
78
67
  end
79
68
 
80
- if !@page.spud_template.blank?
81
- if !@page.spud_template.base_layout.blank?
82
- layout = @page.spud_template.base_layout
83
- end
84
- @inline = @page.spud_template.content
85
- end
86
69
 
87
70
  render :layout => layout
88
71
 
@@ -1,19 +1,18 @@
1
1
  class Spud::Admin::MenuItemsController < Spud::Admin::CmsController
2
2
  add_breadcrumb "Menus", :spud_admin_menus_path
3
- belongs_to_spud_app :menus
4
- layout 'spud/admin/cms/detail'
3
+ belongs_to_spud_app :menus, :page_title => "Menu Items"
4
+ layout 'spud/admin/detail'
5
5
  before_filter :load_menu
6
6
  before_filter :load_menu_item, :only => [:edit,:update,:show,:destroy,:reorder]
7
- cache_sweeper :page_sweeper,:only => [:create,:update,:destroy]
7
+
8
+
8
9
  def index
9
- @page_name = "Menu Items"
10
10
  @menu_items = @menu.spud_menu_items.order(:menu_order).includes(:spud_menu_items)
11
11
  respond_with @menu_items
12
12
  end
13
13
 
14
14
  def new
15
15
  add_breadcrumb "New", :new_spud_admin_page_path
16
- @page_name = "New Menu Item"
17
16
 
18
17
  @menu_item = @menu.spud_menu_items.new
19
18
  respond_with @menu_item
@@ -22,7 +21,6 @@ class Spud::Admin::MenuItemsController < Spud::Admin::CmsController
22
21
  def create
23
22
 
24
23
  add_breadcrumb "New", :new_spud_admin_page_path
25
- @page_name = "New Menu Item"
26
24
  @menu_item = SpudMenuItem.new(params[:spud_menu_item])
27
25
  @menu_item.spud_menu_id = @menu.id
28
26
  if params[:spud_menu_item][:parent_id].blank?
@@ -49,7 +47,6 @@ class Spud::Admin::MenuItemsController < Spud::Admin::CmsController
49
47
 
50
48
  def edit
51
49
  add_breadcrumb "Edit #{@menu_item.name}", :edit_spud_admin_menu_menu_item_path
52
- @page_name = "Edit #{@menu_item.name}"
53
50
  if @menu_item.parent_type == "SpudMenu"
54
51
  @menu_item.parent_id = nil
55
52
  end
@@ -59,7 +56,6 @@ class Spud::Admin::MenuItemsController < Spud::Admin::CmsController
59
56
  def update
60
57
 
61
58
  add_breadcrumb "Edit #{@menu_item.name}", :edit_spud_admin_menu_menu_item_path
62
- @page_name = "Edit #{@menu_item.name}"
63
59
  if params[:spud_menu_item][:parent_id].blank?
64
60
  params[:spud_menu_item][:parent_type] = "SpudMenu"
65
61
  params[:spud_menu_item][:parent_id] = @menu.id
@@ -92,7 +88,7 @@ class Spud::Admin::MenuItemsController < Spud::Admin::CmsController
92
88
  private
93
89
  def load_menu
94
90
 
95
- @menu = SpudMenu.find(params[:menu_id])
91
+ @menu = SpudMenu.where(:id => params[:menu_id]).first
96
92
 
97
93
  if @menu.blank?
98
94
  flash[:error] = "Menu not found!"
@@ -105,7 +101,7 @@ private
105
101
  end
106
102
 
107
103
  def load_menu_item
108
- @menu_item = SpudMenuItem.find(params[:id])
104
+ @menu_item = SpudMenuItem.where(:id =>params[:id]).first
109
105
  if @menu_item.blank?
110
106
  flash[:error] = "Menu Item not found!"
111
107
  redirect_to spud_admin_menu_menu_items_url() and return false
@@ -43,7 +43,7 @@ class Spud::Admin::MenusController < Spud::Admin::CmsController
43
43
 
44
44
  private
45
45
  def load_menu
46
- @menu = SpudMenu.site(session[:admin_site]).where(:id => params[:id]).first
46
+ @menu = SpudMenu.where(:id => params[:id]).first
47
47
  if @menu.blank?
48
48
  flash[:error] = "Menu not found!"
49
49
  redirect_to spud_admin_menus_url() and return false
@@ -1,41 +1,36 @@
1
1
  class Spud::Admin::PagesController < Spud::Admin::CmsController
2
- layout 'spud/admin/cms/detail'
2
+ layout 'spud/admin/detail'
3
3
  add_breadcrumb "Pages", :spud_admin_pages_path
4
4
  belongs_to_spud_app :pages
5
5
  before_filter :load_page,:only => [:edit,:update,:show,:destroy]
6
- cache_sweeper :page_sweeper,:only => [:update,:destroy]
6
+
7
7
  def index
8
8
 
9
9
  @pages = SpudPage.site(session[:admin_site]).where(:spud_page_id => nil).order(:page_order).includes(:spud_pages).paginate :page => params[:page]
10
+
11
+ home_page = SpudPage.where(:url_name => Spud::Cms.root_page_name).first
12
+ if home_page.blank?
13
+ flash.now[:warning] = "You have not setup your default CMS page. This page will be your homepage. To do so, create a page with the name '#{Spud::Cms.root_page_name.titlecase}'"
14
+ end
15
+
10
16
  respond_with @pages
11
17
  end
12
18
 
13
19
  def show
14
- layout = Spud::Cms.default_page_layout
20
+ layout = @page.layout || Spud::Cms.default_page_layout
21
+
15
22
 
16
- if !@page.spud_template.blank?
17
- if !@page.spud_template.base_layout.blank?
18
- layout = @page.spud_template.base_layout
19
- end
20
- @inline = @page.spud_template.content
21
- end
22
23
  render :layout => layout
23
24
  end
24
25
 
25
26
  def new
26
27
  add_breadcrumb "New", :new_spud_admin_page_path
27
28
 
29
+ layouts = Spud::Cms::Engine.template_parser.layouts(Spud::Core.site_config_for_id(session[:admin_site] || 0)[:short_name])
30
+ layout, layout_info = layouts.select{|k,v| v[:default]}.flatten
31
+ @page = SpudPage.new(:layout => layout)
32
+ parts = layout_info[:partials]
28
33
 
29
- @templates = SpudTemplate.all
30
- @page = SpudPage.new
31
- parts = Spud::Cms.default_page_parts
32
- if Spud::Core.multisite_mode_enabled && !session[:admin_site].blank?
33
- site_config = Spud::Core.multisite_config.select{|c| c[:site_id] == session[:admin_site]}
34
- if !site_config.blank?
35
- cms_config = Spud::Cms.site_config_for_short_name(site_config[0][:short_name])
36
- parts = cms_config[:default_page_parts] if !cms_config.blank? && !cms_config[:default_page_parts].blank?
37
- end
38
- end
39
34
  parts.each do |part|
40
35
  @page.spud_page_partials.new(:name => part.strip)
41
36
  end
@@ -58,28 +53,20 @@ class Spud::Admin::PagesController < Spud::Admin::CmsController
58
53
  add_breadcrumb "#{@page.name}", :spud_admin_page_path
59
54
  add_breadcrumb "Edit", :edit_spud_admin_page_path
60
55
 
61
- @templates = SpudTemplate.all
62
- if @page.spud_page_partials.blank?
63
- parts = Spud::Cms.default_page_parts
64
- if Spud::Core.multisite_mode_enabled && !session[:admin_site].blank?
65
- site_config = Spud::Core.multisite_config.select{|c| c[:site_id] == session[:admin_site]}
66
- if !site_config.blank?
67
- cms_config = Spud::Cms.site_config_for_short_name(site_config[0][:short_name])
68
- parts = cms_config[:default_page_parts] if !cms_config.blank? && !cms_config[:default_page_parts].blank?
69
- end
70
- end
71
- parts.each do |part|
72
- @page.spud_page_partials.new(:name => part.strip)
73
- end
74
- end
75
- if !@page.spud_template.blank?
76
- @page.spud_template.page_parts.split(",").each do |part|
77
- partial = @page.spud_page_partials.select{|p| p.name == part.strip}
78
- if partial.blank?
79
- @page.spud_page_partials.new(:name => part.strip)
80
- end
81
- end
56
+ layouts = Spud::Cms::Engine.template_parser.layouts(Spud::Core.site_config_for_id(session[:admin_site] || 0)[:short_name])
57
+ layout, layout_info = layouts.select{|k,v| k == @page.layout}.flatten if @page.layout.blank? == false
58
+ if layout.blank?
59
+ layout, layout_info = layouts.select{|k,v| v[:default]}.flatten
60
+ end
61
+ @page.layout = layout
62
+
63
+ layout_info[:partials].each do |part|
64
+ partial = @page.spud_page_partials.select{|p| p.name == part.strip}
65
+ if partial.blank?
66
+ @page.spud_page_partials.new(:name => part.strip)
67
+ end
82
68
  end
69
+
83
70
  end
84
71
 
85
72
  def update
@@ -100,19 +87,8 @@ class Spud::Admin::PagesController < Spud::Admin::CmsController
100
87
  end
101
88
 
102
89
  def preview
103
- # @page = SpudPage.new(params[:spud_page])
104
- # @page.site_id = session[:admin_site]
105
- layout = 'application'
106
-
107
-
108
- if !@page.spud_template.blank?
109
- if !@page.spud_template.base_layout.blank?
110
- layout = @page.spud_template.base_layout
111
- end
112
- @inline = @page.spud_template.content
113
- end
90
+ layout = @page.layout || Spud::Cms.default_page_layout
114
91
  render :action => :show,:layout => layout
115
-
116
92
  end
117
93
 
118
94
  def destroy
@@ -131,32 +107,28 @@ class Spud::Admin::PagesController < Spud::Admin::CmsController
131
107
  end
132
108
 
133
109
  def page_parts
134
- template = params[:template] && !params[:template].blank? ? SpudTemplate.where(:id => params[:template]).first : nil
110
+ layouts = Spud::Cms::Engine.template_parser.layouts(Spud::Core.site_config_for_id(session[:admin_site] || 0)[:short_name])
111
+ template = params[:template] && !params[:template].blank? ? layouts[params[:template]] : nil
135
112
  page = SpudPage.where(:id => params[:page]).includes(:spud_page_partials).first
136
113
  page = SpudPage.new if page.blank?
137
114
  old_page_partials = Array.new(page.spud_page_partials)
138
115
  new_page_partials = []
139
- if !template.blank? && !template.page_parts.blank?
140
- template.page_parts.split(',').each do |page_part|
116
+ if !template.blank?
117
+ template[:partials].each do |page_part|
141
118
  new_page_partials << page.spud_page_partials.build(:name => page_part.strip)
142
119
  end
143
120
  else
144
- parts = Spud::Cms.default_page_parts
145
- if Spud::Core.multisite_mode_enabled && !session[:admin_site].blank?
146
- site_config = Spud::Core.multisite_config.select{|c| c[:site_id] == session[:admin_site]}
147
- if !site_config.blank?
148
- cms_config = Spud::Cms.site_config_for_short_name(site_config[0][:short_name])
149
- parts = cms_config[:default_page_parts] if !cms_config.blank? && !cms_config[:default_page_parts].blank?
150
- end
151
- end
152
- parts.each do |part|
153
- new_page_partials << page.spud_page_partials.build(:name => part)
154
- end
155
-
121
+ layout, layout_info = layouts.select{|k,v| v[:default]}.flatten
122
+ page.layout = layout
123
+ layout_info[:partials].each do |part|
124
+ new_page_partials << page.spud_page_partials.build(:name => part)
125
+ end
156
126
  end
157
127
  new_page_partials.each do |partial|
158
128
  old_partial = old_page_partials.select {|pp| partial.name.strip.downcase == pp.name.strip.downcase }
129
+ logger.debug "testing content swap"
159
130
  partial.content = old_partial[0].content if !old_partial.blank?
131
+ logger.debug partial.content
160
132
  end
161
133
 
162
134
  respond_to do |format|
@@ -170,25 +142,7 @@ class Spud::Admin::PagesController < Spud::Admin::CmsController
170
142
  end
171
143
  end
172
144
 
173
- def clear
174
- Rails.cache.clear
175
- SpudPage.site(session[:admin_site]).published_pages.all.each do |record|
176
- if Spud::Cms.enable_full_page_caching
177
- if record.url_name == Spud::Cms.root_page_name
178
- expire_page root_path
179
- else
180
- expire_page page_path(:id => record.url_name)
181
- end
182
- elsif Spud::Cms.enable_action_caching
183
- if record.url_name == Spud::Cms.root_page_name
184
- expire_action root_path
185
- else
186
- expire_action page_path(:id => record.url_name)
187
- end
188
- end
189
- end
190
- redirect_to spud_admin_pages_url
191
- end
145
+
192
146
 
193
147
  private
194
148
  def load_page
@@ -5,7 +5,7 @@ class Spud::Cms::SitemapsController < Spud::ApplicationController
5
5
  @pages = SpudPage.published_pages.public.order(:spud_page_id)
6
6
  if Spud::Core.multisite_mode_enabled
7
7
  site_config = Spud::Core.site_config_for_host(request.host_with_port)
8
- @pages = @pages.site(!site_config.blank? ? site_config[:site_id] : nil)
8
+ @pages = @pages.site(!site_config.blank? ? site_config[:site_id] : 0)
9
9
  end
10
10
  @pages = @pages.all
11
11
  respond_with @pages