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 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