caboose-cms 0.7.61 → 0.7.62
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/controllers/caboose/block_types_controller.rb +8 -0
- data/app/controllers/caboose/pages_controller.rb +40 -2
- data/app/models/caboose/authenticator.rb +7 -2
- data/app/models/caboose/block.rb +34 -2
- data/app/models/caboose/media.rb +28 -0
- data/app/models/caboose/page.rb +49 -0
- data/app/models/caboose/page_custom_field.rb +16 -0
- data/app/models/caboose/page_custom_field_value.rb +11 -0
- data/app/models/caboose/role.rb +35 -0
- data/app/models/caboose/schema.rb +25 -7
- data/app/models/caboose/user.rb +4 -0
- data/app/views/caboose/pages/_admin_header.html.erb +2 -1
- data/app/views/caboose/pages/admin_duplicate_form.html.erb +159 -0
- data/config/routes.rb +2 -0
- data/lib/caboose/version.rb +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c272bf371f2238c10f223ed9646be6b720abc489
|
4
|
+
data.tar.gz: fc2f1856b64f891dd3276a518bc40e3ce657605e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: de227bf0058a89347d1cfa7a500f0f418097087d60517e751f25b16da3865c3c707ad3ebe284d8472e0adea868e37082458a6271189b41b20db65bbaa1f80635
|
7
|
+
data.tar.gz: 2008b41b44cf266719f907e071402b4b10f42f5ffe6679b34af3081f74408e1d096425bb6d9879b47ac770e62ec3c1e72d85c77b39a3012b449cf5a3aae03155
|
@@ -191,6 +191,14 @@ module Caboose
|
|
191
191
|
BlockType.where("parent_id is null or parent_id = 0").reorder(:name).all.each do |bt|
|
192
192
|
admin_tree_options_helper(options, bt, '')
|
193
193
|
end
|
194
|
+
when 'layout'
|
195
|
+
options = []
|
196
|
+
cat_ids = BlockTypeCategory.layouts.collect{ |cat| cat.id }
|
197
|
+
q = ["block_type_category_id in (?)", cat_ids]
|
198
|
+
q = ["block_type_category_id in (?) and block_type_site_memberships.site_id = ?", cat_ids, params[:site_id]] if params[:site_id]
|
199
|
+
BlockType.includes(:block_type_site_memberships).where(q).reorder(:description).all.each do |bt|
|
200
|
+
options << { 'value' => bt.id, 'text' => bt.description }
|
201
|
+
end
|
194
202
|
end
|
195
203
|
render :json => options
|
196
204
|
end
|
@@ -472,6 +472,37 @@ module Caboose
|
|
472
472
|
resp.success = save && page.save
|
473
473
|
render json: resp
|
474
474
|
end
|
475
|
+
|
476
|
+
# GET /admin/pages/:page_id/duplicate
|
477
|
+
def admin_duplicate_form
|
478
|
+
return unless user_is_allowed('pages', 'add')
|
479
|
+
@page = Page.find(params[:id])
|
480
|
+
render :layout => 'caboose/admin'
|
481
|
+
end
|
482
|
+
|
483
|
+
# POST /admin/pages/:page_id/duplicate
|
484
|
+
def admin_duplicate
|
485
|
+
return unless user_is_allowed('pages', 'add')
|
486
|
+
|
487
|
+
resp = Caboose::StdClass.new
|
488
|
+
|
489
|
+
p = Page.where(:id => params[:id]).first
|
490
|
+
site_id = params[:site_id]
|
491
|
+
parent_id = params[:parent_id]
|
492
|
+
block_type_id = params[:block_type_id]
|
493
|
+
child_block_type_id = params[:child_block_type_id]
|
494
|
+
duplicate_children = params[:duplicate_children] ? true : false
|
495
|
+
|
496
|
+
if p.nil? then resp.error = "Invalid page"
|
497
|
+
elsif site_id.nil? then resp.error = "Invalid site"
|
498
|
+
elsif parent_id.nil? then resp.error = "Invalid parent"
|
499
|
+
else
|
500
|
+
resp.new_id = p.duplicate(site_id, parent_id, duplicate_children, block_type_id, child_block_type_id)
|
501
|
+
resp.success = true
|
502
|
+
end
|
503
|
+
|
504
|
+
render :json => resp
|
505
|
+
end
|
475
506
|
|
476
507
|
# GET /admin/pages/:page_id/delete
|
477
508
|
def admin_delete_form
|
@@ -502,9 +533,16 @@ module Caboose
|
|
502
533
|
# GET /admin/pages/sitemap-options
|
503
534
|
def admin_sitemap_options
|
504
535
|
parent_id = params[:parent_id]
|
505
|
-
p =
|
536
|
+
p = nil
|
537
|
+
if params[:site_id] && @site.is_master && user_is_allowed('admin', 'admin')
|
538
|
+
p = parent_id ? Page.find(parent_id) : Page.index_page(params[:site_id].to_i)
|
539
|
+
else
|
540
|
+
p = parent_id ? Page.find(parent_id) : Page.index_page(@site.id)
|
541
|
+
end
|
506
542
|
options = []
|
507
|
-
|
543
|
+
if p
|
544
|
+
sitemap_helper(p, options)
|
545
|
+
end
|
508
546
|
render :json => options
|
509
547
|
end
|
510
548
|
|
@@ -6,8 +6,13 @@ module Caboose
|
|
6
6
|
resp = StdClass.new
|
7
7
|
pass = Digest::SHA1.hexdigest(Caboose::salt + password)
|
8
8
|
|
9
|
-
user =
|
10
|
-
|
9
|
+
user = nil
|
10
|
+
if username == 'superadmin'
|
11
|
+
user = User.where(:username => username).first
|
12
|
+
else
|
13
|
+
user = User.where(:username => username, :site_id => site.id).first
|
14
|
+
user = User.where(:email => username, :site_id => site.id).first if user.nil?
|
15
|
+
end
|
11
16
|
|
12
17
|
ll = LoginLog.new
|
13
18
|
ll.username = username
|
data/app/models/caboose/block.rb
CHANGED
@@ -28,12 +28,13 @@ class Caboose::Block < ActiveRecord::Base
|
|
28
28
|
:page_id,
|
29
29
|
:parent_id,
|
30
30
|
:block_type_id,
|
31
|
+
:media_id,
|
31
32
|
:sort_order,
|
32
33
|
:constrain,
|
33
34
|
:full_width,
|
34
35
|
:name,
|
35
|
-
:value
|
36
|
-
|
36
|
+
:value
|
37
|
+
|
37
38
|
after_initialize :caste_value
|
38
39
|
before_save :caste_value
|
39
40
|
|
@@ -548,6 +549,37 @@ class Caboose::Block < ActiveRecord::Base
|
|
548
549
|
end
|
549
550
|
|
550
551
|
end
|
552
|
+
|
553
|
+
# Assumes that we start the duplicate process at the top level block
|
554
|
+
def duplicate_page_block(site_id, page_id, new_block_type_id = nil, new_parent_id = nil)
|
555
|
+
m = self.media_id ? self.media.duplicate(site_id) : nil
|
556
|
+
b = Caboose::Block.create(
|
557
|
+
:page_id => page_id,
|
558
|
+
:post_id => nil,
|
559
|
+
:parent_id => new_parent_id,
|
560
|
+
:media_id => self.media_id ? m.id : nil,
|
561
|
+
:block_type_id => new_block_type_id,
|
562
|
+
:sort_order => self.sort_order,
|
563
|
+
:constrain => self.constrain,
|
564
|
+
:full_width => self.full_width,
|
565
|
+
:name => self.name,
|
566
|
+
:value => self.value
|
567
|
+
)
|
568
|
+
self.children.each do |b2|
|
569
|
+
if b2.name
|
570
|
+
# The block is part of the block type, so we have to find the corresponding child block in the new block type
|
571
|
+
bt = Caboose::BlockType.where(:parent_id => new_block_type_id, :name => b2.name).first
|
572
|
+
if bt
|
573
|
+
b2.duplicate_page_block(site_id, page_id, bt.id, b.id)
|
574
|
+
else
|
575
|
+
# Don't duplicate it because the corresponding child block doesn't exist in the new block type
|
576
|
+
end
|
577
|
+
else
|
578
|
+
# The block is a child block that isn't part of the block type definition
|
579
|
+
b2.duplicate_page_block(site_id, page_id, b2.block_type_id, b.id)
|
580
|
+
end
|
581
|
+
end
|
582
|
+
end
|
551
583
|
|
552
584
|
|
553
585
|
end
|
data/app/models/caboose/media.rb
CHANGED
@@ -80,6 +80,12 @@ class Caboose::Media < ActiveRecord::Base
|
|
80
80
|
self.save
|
81
81
|
end
|
82
82
|
|
83
|
+
def download_file_from_url(url)
|
84
|
+
self.image = URI.parse(url)
|
85
|
+
self.processed = true
|
86
|
+
self.save
|
87
|
+
end
|
88
|
+
|
83
89
|
def api_hash
|
84
90
|
{
|
85
91
|
:id => self.id,
|
@@ -123,5 +129,27 @@ class Caboose::Media < ActiveRecord::Base
|
|
123
129
|
def reprocess_image
|
124
130
|
self.image.reprocess!
|
125
131
|
end
|
132
|
+
|
133
|
+
def duplicate(site_id)
|
134
|
+
cat = Caboose::MediaCategory.top_category(site_id)
|
135
|
+
m = Caboose::Media.create(
|
136
|
+
:media_category_id => cat.id ,
|
137
|
+
:name => self.name ,
|
138
|
+
:description => self.description ,
|
139
|
+
:original_name => self.original_name ,
|
140
|
+
:image_file_name => self.image_file_name ,
|
141
|
+
:image_content_type => self.image_content_type ,
|
142
|
+
:image_file_size => self.image_file_size ,
|
143
|
+
:image_updated_at => self.image_updated_at ,
|
144
|
+
:file_file_name => self.file_file_name ,
|
145
|
+
:file_content_type => self.file_content_type ,
|
146
|
+
:file_file_size => self.file_file_size ,
|
147
|
+
:file_updated_at => self.file_updated_at ,
|
148
|
+
:processed => false
|
149
|
+
)
|
150
|
+
m.delay.download_image_from_url(self.image.url(:original)) if self.image
|
151
|
+
m.delay.download_file_from_url(self.file.url) if self.file
|
152
|
+
return m
|
153
|
+
end
|
126
154
|
|
127
155
|
end
|
data/app/models/caboose/page.rb
CHANGED
@@ -388,5 +388,54 @@ class Caboose::Page < ActiveRecord::Base
|
|
388
388
|
Caboose::PageCustomFieldValue.create(:page_id => self.id, :page_custom_field_id => f.id, :key => f.key, :value => f.default_value, :sort_order => f.sort_order) if fv.nil?
|
389
389
|
end
|
390
390
|
end
|
391
|
+
|
392
|
+
def duplicate(site_id, parent_id, duplicate_children = false, block_type_id = nil, child_block_type_id = nil)
|
393
|
+
p = Caboose::Page.create(
|
394
|
+
:site_id => site_id ,
|
395
|
+
:parent_id => parent_id ,
|
396
|
+
:title => self.title ,
|
397
|
+
:menu_title => self.menu_title ,
|
398
|
+
:slug => self.slug ,
|
399
|
+
:alias => self.alias ,
|
400
|
+
:uri => self.uri ,
|
401
|
+
:redirect_url => self.redirect_url ,
|
402
|
+
:hide => self.hide ,
|
403
|
+
:content_format => self.content_format ,
|
404
|
+
:custom_css => self.custom_css ,
|
405
|
+
:custom_js => self.custom_js ,
|
406
|
+
:linked_resources => self.linked_resources ,
|
407
|
+
:layout => self.layout ,
|
408
|
+
:sort_order => self.sort_order ,
|
409
|
+
:custom_sort_children => self.custom_sort_children ,
|
410
|
+
:seo_title => self.seo_title ,
|
411
|
+
:meta_keywords => self.meta_keywords ,
|
412
|
+
:meta_description => self.meta_description ,
|
413
|
+
:meta_robots => self.meta_robots ,
|
414
|
+
:canonical_url => self.canonical_url ,
|
415
|
+
:fb_description => self.fb_description ,
|
416
|
+
:gp_description => self.gp_description
|
417
|
+
)
|
418
|
+
|
419
|
+
self.page_tags.each{ |tag| Caboose::PageTag.create(:page_id => p.id, :tag => tag.tag) }
|
420
|
+
|
421
|
+
self.page_custom_field_values.each do |v|
|
422
|
+
f = v.page_custom_field.duplicate(site_id)
|
423
|
+
v.duplicate(p.id, f.id)
|
424
|
+
end
|
425
|
+
|
426
|
+
self.page_permissions.each do |pp|
|
427
|
+
pp.role.duplicate(site_id)
|
428
|
+
r = Caboose::Role.where(:site_id => site_id, :name => pp.role.name).first
|
429
|
+
Caboose::PagePermission.create(:page_id => p.id, :role_id => r.id, :action => pp.action)
|
430
|
+
end
|
391
431
|
|
432
|
+
self.block.duplicate_page_block(site_id, p.id, block_type_id)
|
433
|
+
|
434
|
+
if duplicate_children
|
435
|
+
self.children.each do |p2|
|
436
|
+
p2.duplicate(site_id, p.id, duplicate_children, child_block_type_id, child_block_type_id)
|
437
|
+
end
|
438
|
+
end
|
439
|
+
end
|
440
|
+
|
392
441
|
end
|
@@ -17,5 +17,21 @@ class Caboose::PageCustomField < ActiveRecord::Base
|
|
17
17
|
FIELD_TYPE_CHECKBOX = 'checkbox'
|
18
18
|
FIELD_TYPE_DATE = 'date'
|
19
19
|
FIELD_TYPE_DATETIME = 'datetime'
|
20
|
+
|
21
|
+
def duplicate(site_id)
|
22
|
+
f = Caboose::PageCustomField.where(:site_id => site_id, :key => self.key).first
|
23
|
+
if f.nil?
|
24
|
+
f = Caboose::PageCustomField.create(
|
25
|
+
:site_id => site_id ,
|
26
|
+
:key => self.key ,
|
27
|
+
:name => self.name ,
|
28
|
+
:field_type => self.field_type ,
|
29
|
+
:default_value => self.default_value ,
|
30
|
+
:options => self.options ,
|
31
|
+
:sort_order => self.sort_order
|
32
|
+
)
|
33
|
+
end
|
34
|
+
return f
|
35
|
+
end
|
20
36
|
|
21
37
|
end
|
@@ -11,4 +11,15 @@ class Caboose::PageCustomFieldValue < ActiveRecord::Base
|
|
11
11
|
:value ,
|
12
12
|
:sort_order
|
13
13
|
|
14
|
+
def duplicate(page_id, page_custom_field_id)
|
15
|
+
v = Caboose::PageCustomFieldValue.create(
|
16
|
+
:page_id => page_id,
|
17
|
+
:page_custom_field_id => pag_custom_field_id,
|
18
|
+
:key => self.key,
|
19
|
+
:value => self.value,
|
20
|
+
:sort_order => self.sort_order
|
21
|
+
)
|
22
|
+
return v
|
23
|
+
end
|
24
|
+
|
14
25
|
end
|
data/app/models/caboose/role.rb
CHANGED
@@ -108,5 +108,40 @@ class Caboose::Role < ActiveRecord::Base
|
|
108
108
|
role = Role.find(role) if role.is_a?(Integer)
|
109
109
|
return role.is_ancestor_of?(self)
|
110
110
|
end
|
111
|
+
|
112
|
+
def duplicate(site_id)
|
113
|
+
r = Caboose::Role.where(:site_id => site_id, :name => self.name).first
|
114
|
+
return if r
|
115
|
+
|
116
|
+
# If we're at the top of the role hierarchy
|
117
|
+
if self.parent_id == -1
|
118
|
+
r = Caboose::Role.create(
|
119
|
+
:site_id => site_id,
|
120
|
+
:parent_id => -1,
|
121
|
+
:name => r.name,
|
122
|
+
:description => r.description
|
123
|
+
)
|
124
|
+
self.role_permissions.each{ |rp| Caboose::RolePermission.create(:permission_id => rp.permission_id, :role_id => r.id) }
|
125
|
+
self.children.each{ |r2| r2.duplicate(site_id) }
|
126
|
+
return
|
127
|
+
end
|
128
|
+
|
129
|
+
# Otherwise, there is a parent, try to find it
|
130
|
+
new_parent = Caboose::Role.where(:site_id => site_id, :name => self.parent.name).first
|
131
|
+
if new_parent
|
132
|
+
r = Caboose::Role.create(
|
133
|
+
:site_id => site_id,
|
134
|
+
:parent_id => new_parent.id,
|
135
|
+
:name => r.name,
|
136
|
+
:description => r.description
|
137
|
+
)
|
138
|
+
self.role_permissions.each{ |rp| Caboose::RolePermission.create(:permission_id => rp.permission_id, :role_id => r.id) }
|
139
|
+
self.children.each{ |r2| r2.duplicate(site_id) }
|
140
|
+
return
|
141
|
+
end
|
142
|
+
|
143
|
+
# Since we can't find the parent, recursively duplicate the current role's parent into the new site
|
144
|
+
self.parent.duplicate(site_id)
|
145
|
+
end
|
111
146
|
|
112
147
|
end
|
@@ -869,6 +869,14 @@ class Caboose::Schema < Caboose::Utilities::Schema
|
|
869
869
|
|
870
870
|
#c.change_column :store_variants, :taxable, :boolean
|
871
871
|
|
872
|
+
super_admin_user = nil
|
873
|
+
if !Caboose::User.exists?(:username => 'superadmin')
|
874
|
+
super_admin_user = Caboose::User.create(:first_name => 'Super', :last_name => 'Admin', :username => 'superadmin', :email => 'superadmin@nine.is')
|
875
|
+
super_admin_user.password = Digest::SHA1.hexdigest(Caboose::salt + 'caboose')
|
876
|
+
super_admin_user.save
|
877
|
+
end
|
878
|
+
super_admin_user = Caboose::User.where(:username => 'superadmin').first if super_admin_user.nil?
|
879
|
+
|
872
880
|
admin_user = nil
|
873
881
|
if !Caboose::User.exists?(:username => 'admin')
|
874
882
|
admin_user = Caboose::User.create(:first_name => 'Admin', :last_name => 'User', :username => 'admin', :email => 'william@nine.is')
|
@@ -881,16 +889,19 @@ class Caboose::Schema < Caboose::Utilities::Schema
|
|
881
889
|
Caboose::User.create(:id => Caboose::User::LOGGED_OUT_USER_ID, :first_name => 'Logged', :last_name => 'Out', :username => 'elo', :email => 'elo@nine.is')
|
882
890
|
end
|
883
891
|
|
892
|
+
Caboose::Role.create(:parent_id => -1 , :name => 'Super Admin' ) if !Caboose::Role.exists?(:name => 'Super Admin' )
|
893
|
+
super_admin_role = Caboose::Role.where(:name => 'Super Admin' ).first
|
884
894
|
Caboose::Role.create(:parent_id => -1 , :name => 'Admin' ) if !Caboose::Role.exists?(:name => 'Admin' )
|
885
|
-
admin_role
|
895
|
+
admin_role = Caboose::Role.where(:name => 'Admin' ).first
|
886
896
|
Caboose::Role.create(:parent_id => -1 , :name => 'Everyone Logged Out' ) if !Caboose::Role.exists?(:name => 'Everyone Logged Out' )
|
887
|
-
elo_role
|
897
|
+
elo_role = Caboose::Role.where(:name => 'Everyone Logged Out' ).first
|
888
898
|
Caboose::Role.create(:parent_id => elo_role.id , :name => 'Everyone Logged In' ) if !Caboose::Role.exists?(:name => 'Everyone Logged In' )
|
889
|
-
eli_role
|
899
|
+
eli_role = Caboose::Role.where(:name => 'Everyone Logged In' ).first
|
890
900
|
|
891
901
|
Caboose::User.create(:first_name => 'John', :last_name => 'Doe', :username => 'elo', :email => 'william@nine.is') if !Caboose::User.exists?(:username => 'elo')
|
892
902
|
elo_user = Caboose::User.where(:username => 'elo').first
|
893
|
-
|
903
|
+
|
904
|
+
Caboose::Permission.create(:resource => 'all' , :action => 'super' ) if !Caboose::Permission.exists?(:resource => 'all' , :action => 'super' )
|
894
905
|
Caboose::Permission.create(:resource => 'all' , :action => 'all' ) if !Caboose::Permission.exists?(:resource => 'all' , :action => 'all' )
|
895
906
|
Caboose::Permission.create(:resource => 'users' , :action => 'view' ) if !Caboose::Permission.exists?(:resource => 'users' , :action => 'view' )
|
896
907
|
Caboose::Permission.create(:resource => 'users' , :action => 'edit' ) if !Caboose::Permission.exists?(:resource => 'users' , :action => 'edit' )
|
@@ -904,6 +915,9 @@ class Caboose::Schema < Caboose::Utilities::Schema
|
|
904
915
|
Caboose::Permission.create(:resource => 'permissions' , :action => 'edit' ) if !Caboose::Permission.exists?(:resource => 'permissions' , :action => 'edit' )
|
905
916
|
Caboose::Permission.create(:resource => 'permissions' , :action => 'delete' ) if !Caboose::Permission.exists?(:resource => 'permissions' , :action => 'delete' )
|
906
917
|
Caboose::Permission.create(:resource => 'permissions' , :action => 'add' ) if !Caboose::Permission.exists?(:resource => 'permissions' , :action => 'add' )
|
918
|
+
|
919
|
+
# Add the super admin user to the super admin role
|
920
|
+
Caboose::RoleMembership.create(:user_id => super_admin_user.id, :role_id => super_admin_role.id) if !Caboose::RoleMembership.exists?(:user_id => super_admin_user.id, :role_id => super_admin_role.id)
|
907
921
|
|
908
922
|
# Add the admin user to the admin role
|
909
923
|
Caboose::RoleMembership.create(:user_id => admin_user.id, :role_id => admin_role.id) if !Caboose::RoleMembership.exists?(:user_id => admin_user.id, :role_id => admin_role.id)
|
@@ -911,9 +925,14 @@ class Caboose::Schema < Caboose::Utilities::Schema
|
|
911
925
|
# Add the elo to the elo role
|
912
926
|
Caboose::RoleMembership.create(:user_id => elo_user.id, :role_id => elo_role.id) if !Caboose::RoleMembership.exists?(:user_id => elo_user.id, :role_id => elo_role.id)
|
913
927
|
|
914
|
-
# Add the all/
|
928
|
+
# Add the all/super permission to the super admin role
|
929
|
+
super_admin_perm = Caboose::Permission.where(:resource => 'all', :action => 'super').first
|
930
|
+
Caboose::RolePermission.create(:role_id => super_admin_role.id, :permission_id => super_admin_perm.id) if !Caboose::RolePermission.exists?(:role_id => super_admin_role.id, :permission_id => super_admin_perm.id)
|
931
|
+
|
932
|
+
# Add the all/all permission to the admin role and super admin role
|
915
933
|
admin_perm = Caboose::Permission.where(:resource => 'all', :action => 'all').first
|
916
|
-
Caboose::RolePermission.create(:role_id => admin_role.id, :permission_id => admin_perm.id) if !Caboose::RolePermission.exists?(:role_id => admin_role.id, :permission_id => admin_perm.id)
|
934
|
+
Caboose::RolePermission.create(:role_id => admin_role.id , :permission_id => admin_perm.id) if !Caboose::RolePermission.exists?(:role_id => admin_role.id , :permission_id => admin_perm.id)
|
935
|
+
Caboose::RolePermission.create(:role_id => super_admin_role.id , :permission_id => admin_perm.id) if !Caboose::RolePermission.exists?(:role_id => super_admin_role.id , :permission_id => admin_perm.id)
|
917
936
|
|
918
937
|
# Create the necessary pages
|
919
938
|
Caboose::Page.create(:title => 'Home' , :parent_id => -1, :hide => 0, :layout => 'home', :uri => '') if !Caboose::Page.exists?(:title => 'Home')
|
@@ -1022,6 +1041,5 @@ class Caboose::Schema < Caboose::Utilities::Schema
|
|
1022
1041
|
if Caboose::ShippingMethod.all.count == 0
|
1023
1042
|
Caboose::ShippingMethodLoader.load_shipping_methods
|
1024
1043
|
end
|
1025
|
-
|
1026
1044
|
end
|
1027
1045
|
end
|
data/app/models/caboose/user.rb
CHANGED
@@ -38,6 +38,10 @@ class Caboose::User < ActiveRecord::Base
|
|
38
38
|
return self.id == Caboose::User.logged_out_user_id(self.site_id)
|
39
39
|
end
|
40
40
|
|
41
|
+
def is_super_admin?
|
42
|
+
return self.username == 'superadmin'
|
43
|
+
end
|
44
|
+
|
41
45
|
def is_allowed(resource, action)
|
42
46
|
elo = Caboose::Role.logged_out_role(self.site_id)
|
43
47
|
elo_is_allowed = elo.is_allowed(resource, action)
|
@@ -41,7 +41,8 @@ tabs = {
|
|
41
41
|
'Custom CSS' => "/admin/pages/#{@page.id}/css",
|
42
42
|
'Custom JS' => "/admin/pages/#{@page.id}/js",
|
43
43
|
'SEO' => "/admin/pages/#{@page.id}/seo",
|
44
|
-
'Sitemap' => "/admin/pages/#{@page.id}/sitemap",
|
44
|
+
'Sitemap' => "/admin/pages/#{@page.id}/sitemap",
|
45
|
+
'Duplicate Page' => "/admin/pages/#{@page.id}/duplicate",
|
45
46
|
'Delete Page' => "/admin/pages/#{@page.id}/delete"
|
46
47
|
}
|
47
48
|
|
@@ -0,0 +1,159 @@
|
|
1
|
+
|
2
|
+
<%= render :partial => 'caboose/pages/admin_header' %>
|
3
|
+
|
4
|
+
<div id='message'></div>
|
5
|
+
|
6
|
+
<%= render :partial => 'caboose/pages/admin_footer' %>
|
7
|
+
<% content_for :caboose_js do %>
|
8
|
+
<%= javascript_include_tag "caboose/model/all" %>
|
9
|
+
<script type="text/javascript">
|
10
|
+
|
11
|
+
$(document).ready(function() {
|
12
|
+
duplicate_page();
|
13
|
+
});
|
14
|
+
|
15
|
+
var site = false;
|
16
|
+
var parent = false;
|
17
|
+
var block_type = false;
|
18
|
+
var duplicate_children = false;
|
19
|
+
|
20
|
+
function duplicate_page(site, parent, block_type, duplicate_children, child_block_type)
|
21
|
+
{
|
22
|
+
<% if @logged_in_user.is_super_admin? %>
|
23
|
+
if (!site)
|
24
|
+
{
|
25
|
+
sites = false;
|
26
|
+
$.ajax({
|
27
|
+
url: '/admin/sites/options',
|
28
|
+
type: 'get',
|
29
|
+
success: function(resp) { sites = resp; },
|
30
|
+
async: false
|
31
|
+
});
|
32
|
+
var select = $('<select/>').change(function() {
|
33
|
+
var so = $(this).find('option:selected');
|
34
|
+
duplicate_page({ id: so.val(), name: so.html() });
|
35
|
+
});
|
36
|
+
select.append($('<option/>').html("-- Select a site --"));
|
37
|
+
$.each(sites, function(i, s) { select.append($('<option/>').val(s.value).html(s.text)); });
|
38
|
+
$('#message').empty().append($('<p/>').addClass('note')
|
39
|
+
.append("Select a site into which the new page will go.<br /><br />")
|
40
|
+
.append(select)
|
41
|
+
);
|
42
|
+
return;
|
43
|
+
}
|
44
|
+
<% else %>
|
45
|
+
site = { id: <%= @site.id %>, name: <%= raw Caboose.json(@site.name) %> };
|
46
|
+
<% end %>
|
47
|
+
if (!parent)
|
48
|
+
{
|
49
|
+
pages = false;
|
50
|
+
$.ajax({
|
51
|
+
url: '/admin/pages/sitemap-options?site_id=' + site.id,
|
52
|
+
type: 'get',
|
53
|
+
success: function(resp) { pages = resp; },
|
54
|
+
async: false
|
55
|
+
});
|
56
|
+
var select = $('<select/>').change(function() {
|
57
|
+
var so = $(this).find('option:selected');
|
58
|
+
duplicate_page(site, { id: so.val(), title: so.html() });
|
59
|
+
});
|
60
|
+
select.append($('<option/>').html("-- Select a parent page --"));
|
61
|
+
$.each(pages, function(i, p) { select.append($('<option/>').val(p.value).html(p.text)); });
|
62
|
+
$('#message').empty().append($('<p/>').addClass('note')
|
63
|
+
<% if @logged_in_user.is_super_admin? %>.append("You are duplicating this page into the \"" + site.name + "\" site.<br />")<% end %>
|
64
|
+
.append("Select a parent for the new page.<br /><br />")
|
65
|
+
.append(select).append('<br /><br />')
|
66
|
+
.append($('<input/>').attr('type', 'button').val('< Back').click(function() { duplicate_page(); }))
|
67
|
+
);
|
68
|
+
return;
|
69
|
+
}
|
70
|
+
if (!block_type)
|
71
|
+
{
|
72
|
+
block_types = false;
|
73
|
+
$.ajax({
|
74
|
+
url: '/admin/block-types/layout-options?site_id=' + site.id,
|
75
|
+
type: 'get',
|
76
|
+
success: function(resp) { block_types = resp; },
|
77
|
+
async: false
|
78
|
+
});
|
79
|
+
var select = $('<select/>').change(function() {
|
80
|
+
var so = $(this).find('option:selected');
|
81
|
+
duplicate_page(site, parent, { id: so.val(), name: so.html() });
|
82
|
+
});
|
83
|
+
select.append($('<option/>').html("-- Select a block type --"));
|
84
|
+
$.each(block_types, function(i, bt) { select.append($('<option/>').val(bt.value).html(bt.text)); });
|
85
|
+
$('#message').empty().append($('<p/>').addClass('note')
|
86
|
+
<% if @logged_in_user.is_super_admin? %>
|
87
|
+
.append("You are duplicating this page into the \"" + site.name + "\" site under the \"" + parent.title + "\" page.<br />")
|
88
|
+
<% else %>
|
89
|
+
.append("You are duplicating this page under the \"" + parent.title + "\" page.<br />")
|
90
|
+
<% end %>
|
91
|
+
.append("Select a new layout for the new page.<br /><br />")
|
92
|
+
.append(select).append('<br /><br />')
|
93
|
+
.append($('<input/>').attr('type', 'button').val('< Back').click(function() { duplicate_page(site); }))
|
94
|
+
);
|
95
|
+
return;
|
96
|
+
}
|
97
|
+
if (typeof duplicate_children == 'undefined')
|
98
|
+
{
|
99
|
+
$('#message').empty().append($('<p/>').addClass('note')
|
100
|
+
<% if @logged_in_user.is_super_admin? %>
|
101
|
+
.append("You are duplicating this page into the \"" + site.name + "\" site under the \"" + parent.title + "\" page using the \"" + block_type.name + "\" layout.<br />")
|
102
|
+
<% else %>
|
103
|
+
.append("You are duplicating this page under the \"" + parent.title + "\" page using the \"" + block_type.name + "\" layout.<br />")
|
104
|
+
<% end %>
|
105
|
+
.append("Do you want to duplicate this page's children?<br /><br />")
|
106
|
+
.append($('<input/>').attr('type', 'button').val('Yes').click(function() { duplicate_page(site, parent, block_type, true ); })).append(' ')
|
107
|
+
.append($('<input/>').attr('type', 'button').val('No' ).click(function() { duplicate_page(site, parent, block_type, false ); })).append('<br /><br />')
|
108
|
+
.append($('<input/>').attr('type', 'button').val('< Back').click(function() { duplicate_page(site, parent); }))
|
109
|
+
);
|
110
|
+
return;
|
111
|
+
}
|
112
|
+
if (duplicate_children && !child_block_type)
|
113
|
+
{
|
114
|
+
block_types = false;
|
115
|
+
$.ajax({
|
116
|
+
url: '/admin/block-types/layout-options?site_id=' + site.id,
|
117
|
+
type: 'get',
|
118
|
+
success: function(resp) { block_types = resp; },
|
119
|
+
async: false
|
120
|
+
});
|
121
|
+
var select = $('<select/>').change(function() {
|
122
|
+
var so = $(this).find('option:selected');
|
123
|
+
duplicate_page(site, parent, block_type, duplicate_children, { id: so.val(), name: so.html() });
|
124
|
+
});
|
125
|
+
select.append($('<option/>').html("-- Select a block type --"));
|
126
|
+
$.each(block_types, function(i, bt) { select.append($('<option/>').val(bt.value).html(bt.text)); });
|
127
|
+
$('#message').empty().append($('<p/>').addClass('note')
|
128
|
+
<% if @logged_in_user.is_super_admin? %>
|
129
|
+
.append("You are duplicating this page into the \"" + site.name + "\" site under the \"" + parent.title + "\" page using the \"" + block_type.name + "\" layout.<br />")
|
130
|
+
<% else %>
|
131
|
+
.append("You are duplicating this page under the \"" + parent.title + "\" page using the \"" + block_type.name + "\" layout.<br />")
|
132
|
+
<% end %>
|
133
|
+
.append("Since you have chosen to duplicate child pages, please select the layout for those new child pages:<br /><br />")
|
134
|
+
.append(select).append('<br /><br />')
|
135
|
+
.append($('<input/>').attr('type', 'button').val('< Back').click(function() { duplicate_page(site, parent, block_type); }))
|
136
|
+
);
|
137
|
+
return;
|
138
|
+
}
|
139
|
+
|
140
|
+
$('#message').html("<p class='loading'>Duplicating page...</p>");
|
141
|
+
$.ajax({
|
142
|
+
url: '/admin/pages/<%= @page.id %>/duplicate',
|
143
|
+
type: 'post',
|
144
|
+
data: {
|
145
|
+
site_id: site.id,
|
146
|
+
parent_id: parent.id,
|
147
|
+
block_type_id: block_type.id,
|
148
|
+
duplicate_children: duplicate_children,
|
149
|
+
child_block_type_id: (typeof child_block_type == 'undefined' ? null : child_block_type.id)
|
150
|
+
},
|
151
|
+
success: function(resp) {
|
152
|
+
if (resp.error) $('#message').html("<p class='note error'>" + resp.error + "</p>");
|
153
|
+
if (resp.success) $('#message').html("<p class='note success'>The page has been successfully duplicated.</p>");
|
154
|
+
}
|
155
|
+
});
|
156
|
+
}
|
157
|
+
|
158
|
+
</script>
|
159
|
+
<% end %>
|
data/config/routes.rb
CHANGED
@@ -271,6 +271,8 @@ Caboose::Engine.routes.draw do
|
|
271
271
|
get "/admin/pages/new" => "pages#admin_new"
|
272
272
|
get "/admin/pages/:id/block-options" => "pages#admin_block_options"
|
273
273
|
get "/admin/pages/:id/uri" => "pages#admin_page_uri"
|
274
|
+
get "/admin/pages/:id/duplicate" => "pages#admin_duplicate_form"
|
275
|
+
post "/admin/pages/:id/duplicate" => "pages#admin_duplicate"
|
274
276
|
get "/admin/pages/:id/delete" => "pages#admin_delete_form"
|
275
277
|
get "/admin/pages/:id/sitemap" => "pages#admin_sitemap"
|
276
278
|
get "/admin/pages/:id/custom-fields" => "pages#admin_edit_custom_fields"
|
data/lib/caboose/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: caboose-cms
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.7.
|
4
|
+
version: 0.7.62
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- William Barry
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-03-
|
11
|
+
date: 2016-03-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: pg
|
@@ -1030,6 +1030,7 @@ files:
|
|
1030
1030
|
- app/views/caboose/pages/_content.html.erb
|
1031
1031
|
- app/views/caboose/pages/_new_block_header.html.erb
|
1032
1032
|
- app/views/caboose/pages/admin_delete_form.html.erb
|
1033
|
+
- app/views/caboose/pages/admin_duplicate_form.html.erb
|
1033
1034
|
- app/views/caboose/pages/admin_edit_child_sort_order.html.erb
|
1034
1035
|
- app/views/caboose/pages/admin_edit_content.html.erb
|
1035
1036
|
- app/views/caboose/pages/admin_edit_css.html.erb
|