tb_cms 1.2.3 → 1.3.beta1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Rakefile +1 -1
- data/app/assets/javascripts/admin/cms/menu_items.js +39 -17
- data/app/assets/stylesheets/admin/cms/application.css +11 -0
- data/app/controllers/admin/menu_items_controller.rb +103 -113
- data/app/controllers/admin/menus_controller.rb +52 -53
- data/app/controllers/admin/pages_controller.rb +107 -111
- data/app/controllers/admin/snippets_controller.rb +16 -16
- data/app/controllers/cms/sitemaps_controller.rb +5 -5
- data/app/controllers/pages_controller.rb +30 -34
- data/app/helpers/cms/application_helper.rb +184 -212
- data/app/models/concerns/cms_deprecated_multisite.rb +3 -3
- data/app/models/spud_menu.rb +4 -4
- data/app/models/spud_menu_item.rb +58 -61
- data/app/models/spud_page.rb +63 -67
- data/app/models/spud_page_partial.rb +42 -44
- data/app/models/spud_page_partial_revision.rb +3 -3
- data/app/models/spud_snippet.rb +7 -7
- data/app/views/admin/menu_items/index.html.erb +1 -1
- data/lib/generators/spud/cms/layout_generator.rb +8 -8
- data/lib/spud_cms/configuration.rb +10 -10
- data/lib/spud_cms/engine.rb +28 -28
- data/lib/spud_cms/liquid_snippet.rb +5 -7
- data/lib/spud_cms/page_route.rb +1 -1
- data/lib/spud_cms/template_parser.rb +35 -40
- data/lib/spud_cms/test_files.rb +6 -6
- data/lib/spud_cms/version.rb +3 -3
- data/spec/controllers/admin/menu_items_controller_spec.rb +54 -56
- data/spec/controllers/admin/menus_controller_spec.rb +31 -37
- data/spec/controllers/admin/pages_controller_spec.rb +31 -36
- data/spec/controllers/admin/snippets_controller_spec.rb +1 -1
- data/spec/controllers/pages_controller_spec.rb +21 -21
- data/spec/dummy/config/application.rb +3 -4
- data/spec/dummy/config/boot.rb +1 -1
- data/spec/dummy/config/environments/production.rb +1 -1
- data/spec/dummy/config/environments/test.rb +3 -3
- data/spec/dummy/config.ru +1 -1
- data/spec/dummy/db/migrate/20141231214447_create_spud_users.tb_core.rb +12 -12
- data/spec/dummy/db/migrate/20141231214448_add_time_zone_to_spud_user.tb_core.rb +0 -1
- data/spec/dummy/db/migrate/20141231214449_add_scope_to_spud_admin_permissions.tb_core.rb +0 -1
- data/spec/dummy/db/migrate/20141231214452_create_spud_permissions.tb_core.rb +3 -3
- data/spec/dummy/db/migrate/20141231214453_create_spud_role_permissions.tb_core.rb +2 -2
- data/spec/dummy/db/migrate/20141231214455_create_spud_permalinks.tb_permalinks.rb +1 -1
- data/spec/dummy/db/migrate/20141231214456_add_site_id_to_spud_permalinks.tb_permalinks.rb +1 -1
- data/spec/dummy/db/migrate/20141231214457_modify_site_id_for_spud_permalinks.tb_permalinks.rb +4 -4
- data/spec/dummy/db/migrate/20141231214459_create_spud_pages.tb_cms.rb +1 -1
- data/spec/dummy/db/migrate/20141231214461_create_spud_menu_items.tb_cms.rb +3 -3
- data/spec/dummy/db/migrate/20141231214463_create_spud_page_partials.tb_cms.rb +1 -1
- data/spec/dummy/db/migrate/20141231214464_add_visibility_to_spud_pages.tb_cms.rb +2 -2
- data/spec/dummy/db/migrate/20141231214466_add_use_custom_url_name_to_spud_pages.tb_cms.rb +1 -1
- data/spec/dummy/db/migrate/20141231214468_add_menu_id_to_spud_menu_items.tb_cms.rb +1 -1
- data/spec/dummy/db/migrate/20141231214469_add_classes_to_spud_menu_items.tb_cms.rb +0 -1
- data/spec/dummy/db/migrate/20141231214470_add_site_id_to_spud_pages.tb_cms.rb +2 -2
- data/spec/dummy/db/migrate/20141231214471_add_site_id_to_spud_templates.tb_cms.rb +2 -2
- data/spec/dummy/db/migrate/20141231214472_add_site_id_to_spud_menus.tb_cms.rb +2 -2
- data/spec/dummy/db/migrate/20141231214473_create_spud_page_partial_revisions.tb_cms.rb +1 -1
- data/spec/dummy/db/migrate/20141231214475_modify_site_id_for_spud_pages.tb_cms.rb +8 -8
- data/spec/dummy/db/migrate/20141231214478_create_spud_page_liquid_tags.tb_cms.rb +1 -1
- data/spec/dummy/db/migrate/20141231214479_create_spud_snippets.tb_cms.rb +1 -2
- data/spec/dummy/db/migrate/20141231214480_change_liquid_tags_to_polymorphic.tb_cms.rb +2 -2
- data/spec/dummy/db/migrate/20141231214481_drop_spud_page_liquid_tags.tb_cms.rb +6 -8
- data/spec/dummy/db/migrate/20150108164814_remove_site_id_from_cms_tables.tb_cms.rb +1 -0
- data/spec/dummy/db/migrate/20150911185843_add_requires_password_change_to_spud_users.tb_core.rb +1 -1
- data/spec/dummy/db/migrate/20160215180157_create_tb_redirects.tb_redirects.rb +3 -3
- data/spec/dummy/db/schema.rb +142 -153
- data/spec/dummy/script/rails +2 -2
- data/spec/helpers/cms/application_helper_spec.rb +39 -41
- data/spec/models/spud_menu_item_spec.rb +13 -13
- data/spec/models/spud_page_partial_revision_spec.rb +1 -1
- data/spec/models/spud_page_partial_spec.rb +19 -20
- data/spec/models/spud_page_spec.rb +90 -91
- data/spec/models/spud_snippet_spec.rb +1 -1
- data/spec/rails_helper.rb +12 -6
- data/spec/spec_helper.rb +42 -44
- metadata +64 -38
- data/spec/authlogic_helper.rb +0 -2
@@ -1,164 +1,160 @@
|
|
1
1
|
class Admin::PagesController < Admin::ApplicationController
|
2
|
-
|
3
|
-
|
4
|
-
|
2
|
+
add_breadcrumb 'Pages', :admin_pages_path
|
3
|
+
belongs_to_app :pages
|
4
|
+
before_action :load_page, only: [:edit, :update, :show, :destroy]
|
5
5
|
|
6
|
-
|
7
|
-
|
8
|
-
home_page = SpudPage.where(:
|
6
|
+
def index
|
7
|
+
@pages = SpudPage.where(spud_page_id: nil).order(:page_order).includes(:spud_pages)
|
8
|
+
home_page = SpudPage.where(url_name: Spud::Cms.root_page_name).first
|
9
9
|
if home_page.blank?
|
10
10
|
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}'"
|
11
11
|
end
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
def show
|
16
|
-
layout = @page.layout || Spud::Cms.default_page_layout
|
12
|
+
respond_with @pages
|
13
|
+
end
|
17
14
|
|
15
|
+
def show
|
16
|
+
layout = @page.layout || Spud::Cms.default_page_layout
|
18
17
|
|
19
|
-
|
20
|
-
|
18
|
+
render layout: layout
|
19
|
+
end
|
21
20
|
|
22
|
-
|
23
|
-
|
21
|
+
def new
|
22
|
+
add_breadcrumb 'New', :new_admin_page_path
|
24
23
|
|
25
24
|
layouts = Spud::Cms::Engine.template_parser.layouts
|
26
|
-
layout, layout_info = layouts.select{|
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
25
|
+
layout, layout_info = layouts.select { |_k, v| v[:default] }.flatten
|
26
|
+
@page = SpudPage.new(layout: layout)
|
27
|
+
parts = layout_info[:partials]
|
28
|
+
|
29
|
+
parts.each do |part|
|
30
|
+
@page.spud_page_partials.new(name: part.strip)
|
31
|
+
end
|
32
|
+
respond_with @page
|
33
|
+
end
|
34
|
+
|
35
|
+
def create
|
36
|
+
@page = SpudPage.new(page_params)
|
37
|
+
if params[:preview] && params[:preview].to_i == 1
|
38
|
+
preview
|
39
|
+
return
|
40
|
+
end
|
41
|
+
flash[:notice] = 'Page Saved successfully' if @page.save
|
42
|
+
respond_with @page, location: admin_pages_url
|
43
|
+
end
|
44
|
+
|
45
|
+
def edit
|
46
|
+
add_breadcrumb @page.name, :edit_admin_page_path
|
48
47
|
|
49
48
|
layouts = Spud::Cms::Engine.template_parser.layouts
|
50
|
-
layout, layout_info = layouts.select{|k,
|
49
|
+
layout, layout_info = layouts.select { |k, _v| k == @page.layout }.flatten if @page.layout.blank? == false
|
51
50
|
if layout.blank?
|
52
|
-
layout, layout_info = layouts.select{|
|
51
|
+
layout, layout_info = layouts.select { |_k, v| v[:default] }.flatten
|
53
52
|
end
|
54
|
-
|
53
|
+
@page.layout = layout
|
55
54
|
|
56
|
-
|
57
|
-
|
58
|
-
if partial.blank?
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
end
|
80
|
-
|
81
|
-
def preview
|
55
|
+
layout_info[:partials].each do |part|
|
56
|
+
partial = @page.spud_page_partials.select { |p| p.name == part.strip }
|
57
|
+
@page.spud_page_partials.new(name: part.strip) if partial.blank?
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
def update
|
62
|
+
@page.assign_attributes(page_params)
|
63
|
+
if params[:preview] && params[:preview].to_i == 1
|
64
|
+
preview
|
65
|
+
return
|
66
|
+
end
|
67
|
+
if @page.save
|
68
|
+
flash[:notice] = 'Page updated successfully!'
|
69
|
+
redirect_to(admin_pages_url()) && return
|
70
|
+
else
|
71
|
+
flash[:error] = 'There was an error saving this page'
|
72
|
+
render action: 'edit'
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
def preview
|
82
77
|
layout = @page.layout || Spud::Cms.default_page_layout
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
78
|
+
render action: :show, layout: layout
|
79
|
+
end
|
80
|
+
|
81
|
+
def destroy
|
82
|
+
status = 500
|
83
|
+
|
84
|
+
if @page.destroy
|
85
|
+
flash[:notice] = 'Page removed successfully!'
|
86
|
+
status = 200
|
87
|
+
else
|
88
|
+
flash[:error] = 'Error removing page'
|
89
|
+
end
|
90
|
+
respond_to do |format|
|
91
|
+
format.js { render status: status }
|
92
|
+
format.html { redirect_to admin_pages_url() }
|
93
|
+
end
|
94
|
+
end
|
100
95
|
|
101
96
|
def page_parts
|
102
97
|
layouts = Spud::Cms::Engine.template_parser.layouts
|
103
|
-
template =
|
104
|
-
page = SpudPage.where(:
|
98
|
+
template = params[:template] && !params[:template].blank? ? layouts[params[:template]] : nil
|
99
|
+
page = SpudPage.where(id: params[:page]).includes(:spud_page_partials).first
|
105
100
|
page = SpudPage.new if page.blank?
|
106
|
-
|
101
|
+
|
107
102
|
old_page_partials = Array.new(page.spud_page_partials)
|
108
103
|
new_page_partials = []
|
109
|
-
|
104
|
+
|
110
105
|
if !template.blank?
|
111
106
|
template[:partials].each do |page_part|
|
112
|
-
old_partial = old_page_partials.find{|pp| page_part.strip == pp.name }
|
107
|
+
old_partial = old_page_partials.find { |pp| page_part.strip == pp.name }
|
113
108
|
if old_partial
|
114
109
|
new_page_partials << old_partial
|
115
110
|
old_page_partials.delete(old_partial)
|
116
111
|
else
|
117
|
-
new_page_partials << page.spud_page_partials.build(:
|
112
|
+
new_page_partials << page.spud_page_partials.build(name: page_part.strip)
|
118
113
|
end
|
119
114
|
end
|
120
115
|
else
|
121
|
-
layout, layout_info = layouts.select{|
|
116
|
+
layout, layout_info = layouts.select { |_k, v| v[:default] }.flatten
|
122
117
|
page.layout = layout
|
123
|
-
|
124
|
-
|
125
|
-
|
118
|
+
layout_info[:partials].each do |part|
|
119
|
+
new_page_partials << page.spud_page_partials.build(name: part)
|
120
|
+
end
|
126
121
|
end
|
127
122
|
|
128
123
|
respond_to do |format|
|
129
|
-
format.js
|
124
|
+
format.js do
|
130
125
|
if response.status == 200
|
131
|
-
render(:
|
132
|
-
|
133
|
-
|
134
|
-
|
126
|
+
render(partial: 'page_partials_form', locals: {
|
127
|
+
spud_page_partials: new_page_partials,
|
128
|
+
remove_page_partials: old_page_partials
|
129
|
+
})
|
135
130
|
else
|
136
|
-
render(:
|
131
|
+
render(text: message)
|
137
132
|
end
|
138
|
-
|
133
|
+
end
|
139
134
|
end
|
140
135
|
end
|
141
136
|
|
142
137
|
def clear
|
143
138
|
# noop
|
144
|
-
logger.debug(
|
139
|
+
logger.debug('TODO: Clear Caches')
|
145
140
|
redirect_to admin_pages_url
|
146
141
|
end
|
147
142
|
|
148
|
-
private
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
143
|
+
private
|
144
|
+
|
145
|
+
def load_page
|
146
|
+
@page = SpudPage.where(id: params[:id]).includes(:spud_page_partials).first
|
147
|
+
if @page.blank?
|
148
|
+
flash[:error] = 'Page not found!'
|
149
|
+
redirect_to(admin_pages_url()) && (return false)
|
150
|
+
end
|
151
|
+
return true
|
152
|
+
end
|
157
153
|
|
158
154
|
def page_params
|
159
155
|
params.require(:spud_page).permit(:name, :url_name, :created_by, :updated_by, :layout, :visibility, :spud_page_id,
|
160
156
|
:publish_at, :format, :meta_description, :meta_keywords, :page_order, :spud_page_partials_attributes, :use_custom_url_name, :page_title,
|
161
|
-
:published, :notes, :
|
157
|
+
:published, :notes, spud_page_partials_attributes: [:id, :name, :content, :format, :_destroy])
|
162
158
|
end
|
163
159
|
|
164
160
|
end
|
@@ -1,53 +1,53 @@
|
|
1
1
|
class Admin::SnippetsController < Admin::ApplicationController
|
2
2
|
belongs_to_app :snippets
|
3
|
-
add_breadcrumb
|
3
|
+
add_breadcrumb 'Snippets', :admin_snippets_url
|
4
4
|
|
5
|
-
|
5
|
+
before_action :load_snippet, only: [:show, :edit, :update, :destroy]
|
6
6
|
|
7
7
|
def index
|
8
|
-
@snippets = SpudSnippet.order(:name).paginate :
|
8
|
+
@snippets = SpudSnippet.order(:name).paginate page: params[:page]
|
9
9
|
respond_with @snippets
|
10
10
|
end
|
11
11
|
|
12
12
|
def new
|
13
|
-
add_breadcrumb
|
13
|
+
add_breadcrumb 'New', :new_admin_snippet_url
|
14
14
|
@snippet = SpudSnippet.new
|
15
15
|
respond_with @snippet
|
16
16
|
end
|
17
17
|
|
18
18
|
def create
|
19
|
-
add_breadcrumb
|
19
|
+
add_breadcrumb 'New', :new_admin_snippet_url
|
20
20
|
@snippet = SpudSnippet.new(snippet_params)
|
21
21
|
|
22
22
|
@snippet.save
|
23
23
|
|
24
|
-
respond_with @snippet, :
|
24
|
+
respond_with @snippet, location: admin_snippets_url
|
25
25
|
end
|
26
26
|
|
27
27
|
def edit
|
28
|
-
add_breadcrumb
|
28
|
+
add_breadcrumb 'Edit', :edit_admin_snippet_url
|
29
29
|
|
30
30
|
respond_with @snippet
|
31
31
|
end
|
32
32
|
|
33
33
|
def update
|
34
|
-
add_breadcrumb
|
35
|
-
flash[:notice] =
|
36
|
-
respond_with @snippet, :
|
34
|
+
add_breadcrumb 'Edit', :edit_admin_snippet_url
|
35
|
+
flash[:notice] = 'Snippet saved successfully!' if @snippet.update_attributes(snippet_params)
|
36
|
+
respond_with @snippet, location: admin_snippets_url
|
37
37
|
end
|
38
38
|
|
39
39
|
def destroy
|
40
|
-
flash[:notice] =
|
41
|
-
respond_with @snippet
|
40
|
+
flash[:notice] = 'Snippet removed!' if @snippet.destroy
|
41
|
+
respond_with @snippet, location: admin_snippets_url
|
42
42
|
end
|
43
43
|
|
44
|
+
private
|
44
45
|
|
45
|
-
private
|
46
46
|
def load_snippet
|
47
|
-
@snippet = SpudSnippet.where(:
|
47
|
+
@snippet = SpudSnippet.where(id: params[:id]).first
|
48
48
|
if @snippet.blank?
|
49
|
-
flash[:error] =
|
50
|
-
redirect_to
|
49
|
+
flash[:error] = 'Snippet does not exist!'
|
50
|
+
redirect_to(admin_snippets_url) && (return false)
|
51
51
|
end
|
52
52
|
end
|
53
53
|
|
@@ -1,7 +1,7 @@
|
|
1
1
|
class Cms::SitemapsController < Spud::ApplicationController
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
2
|
+
respond_to :xml
|
3
|
+
def show
|
4
|
+
@pages = SpudPage.published_pages.viewable.order(:spud_page_id)
|
5
|
+
respond_with @pages
|
6
|
+
end
|
7
7
|
end
|
@@ -1,48 +1,44 @@
|
|
1
1
|
class PagesController < ApplicationController
|
2
|
-
|
2
|
+
include SpudCmsLayoutActions
|
3
3
|
|
4
|
-
|
5
|
-
|
4
|
+
respond_to :html
|
5
|
+
before_action :set_default_content_type
|
6
6
|
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
7
|
+
def show
|
8
|
+
# prevents 500 errors if a url like "/home.jpg" is hit
|
9
|
+
if request.format != :html
|
10
|
+
render_404
|
11
|
+
return
|
12
|
+
end
|
13
13
|
|
14
|
-
|
15
|
-
|
14
|
+
url_name = !params[:id].blank? ? params[:id] : Spud::Cms.root_page_name
|
15
|
+
@page = SpudPage.published_pages.find_by(url_name: url_name)
|
16
16
|
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
17
|
+
if @page.blank?
|
18
|
+
render_404
|
19
|
+
return
|
20
|
+
end
|
21
21
|
|
22
|
-
|
23
|
-
|
24
|
-
|
22
|
+
if @page.is_private?
|
23
|
+
return if defined?(require_user) && require_user == false
|
24
|
+
end
|
25
25
|
|
26
|
-
|
26
|
+
layout = @page.layout || Spud::Cms.default_page_layout
|
27
27
|
|
28
|
-
|
29
|
-
|
30
|
-
send(action_name, request.method.downcase.to_sym)
|
31
|
-
end
|
28
|
+
action_name = "#{layout}_action"
|
29
|
+
send(action_name, request.method.downcase.to_sym) if respond_to?(action_name)
|
32
30
|
|
33
|
-
|
34
|
-
|
31
|
+
render layout: layout
|
32
|
+
end
|
35
33
|
|
36
|
-
private
|
34
|
+
private
|
37
35
|
|
38
|
-
|
39
|
-
|
40
|
-
|
36
|
+
def render_404
|
37
|
+
raise Spud::NotFoundError, item: 'page'
|
38
|
+
end
|
41
39
|
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
end
|
46
|
-
end
|
40
|
+
def set_default_content_type
|
41
|
+
request.format = :html if params[:format].blank?
|
42
|
+
end
|
47
43
|
|
48
44
|
end
|