caboose-cms 0.7.61 → 0.7.62

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 1dd0c8df55ed44f2cf96ae3a6bcf5f0880bcf0e1
4
- data.tar.gz: 5e9eefed13aadc1df28ad230b9a76477140a0b46
3
+ metadata.gz: c272bf371f2238c10f223ed9646be6b720abc489
4
+ data.tar.gz: fc2f1856b64f891dd3276a518bc40e3ce657605e
5
5
  SHA512:
6
- metadata.gz: 8be4e56bcd72b88986b62097994deab1036f395080a264de958c30846918520b2ceb53fec6054908ef663a76ebb4bc840cd9e59f533c609a0fbfe0d029f6b776
7
- data.tar.gz: 485e9fdc38ad15974a12bba7ce5bbe7859365d1793a653240282b466477ad005fe2e13b6b5c815ddc088b81b10f99f292799543acf0f9cac2ee92579fbd0b59a
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 = parent_id ? Page.find(parent_id) : Page.index_page(@site.id)
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
- sitemap_helper(p, options)
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 = User.where(:username => username, :site_id => site.id).first
10
- user = User.where(:email => username, :site_id => site.id).first if user.nil?
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
@@ -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
@@ -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
@@ -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
@@ -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 = Caboose::Role.where(:name => 'Admin' ).first
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 = Caboose::Role.where(:name => 'Everyone Logged Out' ).first
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 = Caboose::Role.where(:name => 'Everyone Logged In' ).first
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/all permission to the admin role
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
@@ -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 %>
@@ -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"
@@ -1,3 +1,3 @@
1
1
  module Caboose
2
- VERSION = '0.7.61'
2
+ VERSION = '0.7.62'
3
3
  end
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.61
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-16 00:00:00.000000000 Z
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