caboose-cms 0.3.12 → 0.3.13

Sign up to get free protection for your applications and to get access to all the features.
Files changed (37) hide show
  1. checksums.yaml +8 -8
  2. data/app/assets/javascripts/caboose/admin_page_edit_content.js +6 -6
  3. data/app/controllers/caboose/page_block_field_values_controller.rb +27 -0
  4. data/app/controllers/caboose/page_block_fields_controller.rb +139 -0
  5. data/app/controllers/caboose/page_block_types_controller.rb +100 -0
  6. data/app/controllers/caboose/page_blocks_controller.rb +49 -36
  7. data/app/controllers/caboose/pages_controller.rb +2 -1
  8. data/app/models/caboose/core_plugin.rb +25 -5
  9. data/app/models/caboose/page.rb +4 -4
  10. data/app/models/caboose/page_block.rb +36 -15
  11. data/app/models/caboose/page_block_field.rb +9 -0
  12. data/app/models/caboose/page_block_field_value.rb +9 -0
  13. data/app/models/caboose/page_block_renderers/h1.rb +5 -0
  14. data/app/models/caboose/page_block_renderers/h2.rb +5 -0
  15. data/app/models/caboose/page_block_renderers/h3.rb +5 -0
  16. data/app/models/caboose/page_block_renderers/h4.rb +5 -0
  17. data/app/models/caboose/page_block_renderers/h5.rb +5 -0
  18. data/app/models/caboose/page_block_renderers/h6.rb +5 -0
  19. data/app/models/caboose/page_block_renderers/p.rb +5 -0
  20. data/app/models/caboose/page_block_renderers/richtext.rb +5 -0
  21. data/app/models/caboose/page_block_type.rb +12 -0
  22. data/app/models/caboose/schema.rb +48 -7
  23. data/app/views/caboose/page_block_fields/admin_edit.html.erb +70 -0
  24. data/app/views/caboose/page_block_fields/admin_new.html.erb +30 -0
  25. data/app/views/caboose/page_block_types/admin_edit.html.erb +77 -0
  26. data/app/views/caboose/page_block_types/admin_index.html.erb +24 -0
  27. data/app/views/caboose/page_block_types/admin_new.html.erb +30 -0
  28. data/app/views/caboose/page_blocks/_heading.html.erb +7 -0
  29. data/app/views/caboose/page_blocks/_richtext.html.erb +8 -0
  30. data/app/views/caboose/page_blocks/admin_edit.html.erb +32 -13
  31. data/app/views/caboose/page_blocks/admin_edit_custom.html.erb +35 -0
  32. data/app/views/caboose/pages/_content.html.erb +3 -0
  33. data/app/views/caboose/pages/admin_edit_content.html.erb +1 -7
  34. data/config/routes.rb +19 -0
  35. data/lib/caboose/engine.rb +1 -1
  36. data/lib/caboose/version.rb +1 -1
  37. metadata +25 -2
checksums.yaml CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- NTQxYjY4ZjYyNTE4ODQ3ODg5MDRkOGVlNjVkMzgzYzQxYmVlYjE2ZA==
4
+ MzM5Yzk3ZmMyZDA3MTIzZjQ5NjcxNjEyOWY3NWQ3ZTk4ZDE1ZDA2MQ==
5
5
  data.tar.gz: !binary |-
6
- ZmFkM2ZjZmY0NDBjZGU3NWZiYmNhYzdlOWUyM2UwOWZjODAzODEzMQ==
6
+ ZTc2ZGZmYTkxYTI0MTI5ZGRiM2Y2ZTg4ZDBkNjQyYjk0OWE3YjJjMA==
7
7
  !binary "U0hBNTEy":
8
8
  metadata.gz: !binary |-
9
- Yjk5ZWI2MDM5MmYyNGQzOWQyYzU0OTY3YzcyNzYxYmI4M2IyZDQ1ZjVjNGVh
10
- OTA3MWQzYThhNTMyNTNiYWRhNjEwMTY0YTJiMDA0MDNjNjNhMTU3OWIyMjFh
11
- YjRkZTYyMWM5NWFhM2YxOGU2YTE5YjA5MGE5YmNlYjQ5MzBhZTg=
9
+ NWMwZThjYjUwMzliOGEzZmQ4ZTlhNTYzYWI5M2U5MmU0M2I4NjUwYWNjZDY0
10
+ NWU4OTA2ZTg3M2YwNWZjYjJiMmMxMjlmYzVjMzE0Y2M1ZDA2OTM0NjViMjAx
11
+ NmRmODA1MGNkMmEzYThlOGZmMzU4OTNmNmRiMDU1M2Y0YWVkNjQ=
12
12
  data.tar.gz: !binary |-
13
- MDIyNDkwODc4N2MzNjFmMzIyNDJkZWI4OTRlZTYwYjc2MjJhNWZjM2UyNDNl
14
- YTgxMDJjOTk0YzAxMjkyMTBjY2YwNDY3Nzg0ZjYxNTc1Y2I1ODcyZjdiZjc2
15
- MjM0NWFjYmU0OTEyN2ZmYzBlMzU0ZjQ3MWEzZGYxZjgzYjJmNjQ=
13
+ YjMxYzUyN2I0MGFjNTdjM2E5MjU5YWYwOTc0MjY3N2ZkMjAzOWIzODk1NWEw
14
+ ZmU0YmE1NjFmZWE3OTJhMjc5Y2E2ZDk3NWE5Mzg2OTU2ZjkwZDkwZjRjMTdm
15
+ N2E1YjcwYmM3ODRiNDY1YWZiMDBmNzVjNDhlYmUwZTEzNjVkZWQ=
@@ -4,7 +4,7 @@ var PageContentController = function(page_id) { this.init(page_id); };
4
4
  PageContentController.prototype = {
5
5
 
6
6
  page_id: false,
7
- new_block_type: false,
7
+ new_block_type_id: false,
8
8
 
9
9
  init: function(page_id)
10
10
  {
@@ -23,18 +23,18 @@ PageContentController.prototype = {
23
23
  placeholder: 'sortable-placeholder',
24
24
  handle: '.sort_handle',
25
25
  receive: function(e, ui) {
26
- that.new_block_type = ui.item.attr('id').replace('new_block_', '');
26
+ that.new_block_type_id = ui.item.attr('id').replace('new_block_', '');
27
27
  },
28
28
  update: function(e, ui) {
29
- if (that.new_block_type)
29
+ if (that.new_block_type_id)
30
30
  {
31
31
  $.ajax({
32
32
  url: '/admin/pages/' + that.page_id + '/blocks',
33
33
  type: 'post',
34
- data: { block_type: that.new_block_type, index: ui.item.index() },
34
+ data: { page_block_type_id: that.new_block_type_id, index: ui.item.index() },
35
35
  success: function(resp) { that.render_blocks(function() { that.edit_block(resp.block.id); }); }
36
36
  });
37
- that.new_block_type = false;
37
+ that.new_block_type_id = false;
38
38
  }
39
39
  else
40
40
  {
@@ -126,7 +126,7 @@ PageContentController.prototype = {
126
126
  },
127
127
 
128
128
  render_block_html: function(block_id, html)
129
- {
129
+ {
130
130
  var that = this;
131
131
  $('#pageblock_' + block_id).empty().html(html);
132
132
  $('#pageblock_' + block_id).attr('onclick','').unbind('click');
@@ -0,0 +1,27 @@
1
+
2
+ module Caboose
3
+ class PageBlockFieldValuesController < ApplicationController
4
+
5
+ # PUT /admin/page-block-field-values/:id
6
+ def admin_update
7
+ return unless user_is_allowed('pages', 'edit')
8
+
9
+ resp = StdClass.new({'attributes' => {}})
10
+ fv = PageBlockFieldValue.find(params[:id])
11
+
12
+ save = true
13
+ user = logged_in_user
14
+
15
+ params.each do |k,v|
16
+ case k
17
+ when 'value'
18
+ fv.value = v
19
+ end
20
+ end
21
+
22
+ resp.success = save && fv.save
23
+ render :json => resp
24
+ end
25
+
26
+ end
27
+ end
@@ -0,0 +1,139 @@
1
+
2
+ module Caboose
3
+ class PageBlockFieldsController < ApplicationController
4
+
5
+ #===========================================================================
6
+ # Admin actions
7
+ #===========================================================================
8
+
9
+ # GET /admin/page-block-types/:block_type_id/fields
10
+ def admin_index
11
+ return if !user_is_allowed('pages', 'view')
12
+ fields = PageBlockField.where(:page_block_type_id => params[:block_type_id]).reorder(:name).all
13
+ render :json => fields
14
+ end
15
+
16
+ # GET /admin/page-block-types/:block_type_id/fields/new
17
+ def admin_new
18
+ return unless user_is_allowed('pages', 'add')
19
+ @block_type = PageBlockType.find(params[:block_type_id])
20
+ @field = PageBlockField.new
21
+ render :layout => 'caboose/admin'
22
+ end
23
+
24
+ # GET /admin/page-block-types/:block_type_id/fields/:id/edit
25
+ def admin_edit
26
+ return unless user_is_allowed('pages', 'edit')
27
+ @field = PageBlockField.find(params[:id])
28
+ render :layout => 'caboose/admin'
29
+ end
30
+
31
+ # POST /admin/page-block-types/:block_type_id
32
+ def admin_create
33
+ return unless user_is_allowed('pages', 'add')
34
+
35
+ resp = Caboose::StdClass.new({
36
+ 'error' => nil,
37
+ 'redirect' => nil
38
+ })
39
+
40
+ field = PageBlockField.new(
41
+ :page_block_type_id => params[:block_type_id],
42
+ :name => params[:name].downcase.gsub(' ', '_'),
43
+ :nice_name => params[:name],
44
+ :field_type => 'text'
45
+ )
46
+ field.save
47
+
48
+ # Send back the response
49
+ resp.redirect = "/admin/page-block-types/#{params[:block_type_id]}/fields/#{field.id}/edit"
50
+ render :json => resp
51
+ end
52
+
53
+ # PUT /admin/page-block-types/:block_type_id/fields/:id
54
+ def admin_update
55
+ return unless user_is_allowed('pages', 'edit')
56
+
57
+ resp = StdClass.new({'attributes' => {}})
58
+ field = PageBlockField.find(params[:id])
59
+
60
+ save = true
61
+ user = logged_in_user
62
+
63
+ params.each do |k,v|
64
+ case k
65
+ when 'page_block_type_id'
66
+ field.page_block_type_id = v
67
+ break
68
+ when 'name'
69
+ field.name = v
70
+ break
71
+ when 'field_type'
72
+ field.field_type = v
73
+ break
74
+ when 'nice_name'
75
+ field.nice_name = v
76
+ break
77
+ when 'default'
78
+ field.default = v
79
+ break
80
+ when 'width'
81
+ field.width = v
82
+ break
83
+ when 'height'
84
+ field.height = v
85
+ break
86
+ when 'fixed_placeholder'
87
+ field.fixed_placeholder = v
88
+ break
89
+ when 'options'
90
+ field.options = v
91
+ break
92
+ when 'options_url'
93
+ field.options_url = v
94
+ break
95
+ end
96
+ end
97
+
98
+ resp.success = save && field.save
99
+ render :json => resp
100
+ end
101
+
102
+ # DELETE /admin/page-block-types/:block_type_id/fields/:id
103
+ def admin_delete
104
+ return unless user_is_allowed('pages', 'delete')
105
+ PageBlockField.find(params[:id]).destroy
106
+ resp = StdClass.new({
107
+ 'redirect' => "/admin/page-block-types/#{params[:block_type_id]}/edit"
108
+ })
109
+ render :json => resp
110
+ end
111
+
112
+ # GET /admin/page-block-fields/field-type-options
113
+ def admin_field_type_options
114
+ return unless user_is_allowed('pages', 'edit')
115
+ options = [
116
+ { 'value' => 'checkbox' , 'text' => 'checkbox' },
117
+ { 'value' => 'checkbox_multiple' , 'text' => 'checkbox_multiple' },
118
+ { 'value' => 'image' , 'text' => 'image' },
119
+ { 'value' => 'richtext' , 'text' => 'richtext' },
120
+ { 'value' => 'select' , 'text' => 'select' },
121
+ { 'value' => 'text' , 'text' => 'text' },
122
+ { 'value' => 'textarea' , 'text' => 'textarea' }
123
+ ]
124
+ render :json => options
125
+ end
126
+
127
+ # GET /admin/page-block-fields/:id/options
128
+ def admin_field_options
129
+ return unless user_is_allowed('pages', 'edit')
130
+ f = PageBlockField.find(params[:id])
131
+ options = []
132
+ if f.options
133
+ options = f.options.strip.split("\n").collect { |line| { 'value' => line, 'text' => line }}
134
+ end
135
+ render :json => options
136
+ end
137
+
138
+ end
139
+ end
@@ -0,0 +1,100 @@
1
+
2
+ module Caboose
3
+ class PageBlockTypesController < ApplicationController
4
+
5
+ #===========================================================================
6
+ # Admin actions
7
+ #===========================================================================
8
+
9
+ # GET /admin/page-block-types
10
+ def admin_index
11
+ return if !user_is_allowed('pages', 'view')
12
+ @block_types = PageBlockType.reorder(:name).all
13
+ render :layout => 'caboose/admin'
14
+ end
15
+
16
+ # GET /admin/page-block-types/:id
17
+ def admin_show
18
+ return if !user_is_allowed('pages', 'view')
19
+ block_type = PageBlockType.find(params[:id])
20
+ render :json => block_type
21
+ end
22
+
23
+ # GET /admin/page-block-types/new
24
+ def admin_new
25
+ return unless user_is_allowed('pages', 'add')
26
+ @block_type = PageBlockType.new
27
+ render :layout => 'caboose/admin'
28
+ end
29
+
30
+ # GET /admin/page-block-types/:id/edit
31
+ def admin_edit
32
+ return unless user_is_allowed('pages', 'edit')
33
+ @block_type = PageBlockType.find(params[:id])
34
+ render :layout => 'caboose/admin'
35
+ end
36
+
37
+ # POST /admin/page-block-types
38
+ def admin_create
39
+ return unless user_is_allowed('pages', 'add')
40
+
41
+ resp = Caboose::StdClass.new({
42
+ 'error' => nil,
43
+ 'redirect' => nil
44
+ })
45
+
46
+ bt = PageBlockType.new(
47
+ :name => params[:name].downcase.gsub(' ', '_'),
48
+ :description => params[:name],
49
+ :use_render_function => false
50
+ )
51
+ bt.save
52
+
53
+ # Send back the response
54
+ resp.redirect = "/admin/page-block-types/#{bt.id}/edit"
55
+ render :json => resp
56
+ end
57
+
58
+ # PUT /admin/page-block-types/:id
59
+ def admin_update
60
+ return unless user_is_allowed('pages', 'edit')
61
+
62
+ resp = StdClass.new({'attributes' => {}})
63
+ bt = PageBlockType.find(params[:id])
64
+
65
+ save = true
66
+ user = logged_in_user
67
+
68
+ params.each do |k,v|
69
+ case k
70
+ when 'name'
71
+ bt.name = v
72
+ break
73
+ when 'description'
74
+ bt.description = v
75
+ break
76
+ when 'use_render_function'
77
+ bt.use_render_function = v
78
+ break
79
+ when 'render_function'
80
+ bt.render_function = v
81
+ break
82
+ end
83
+ end
84
+
85
+ resp.success = save && bt.save
86
+ render :json => resp
87
+ end
88
+
89
+ # DELETE /admin/page-block-types/:id
90
+ def admin_delete
91
+ return unless user_is_allowed('pages', 'delete')
92
+ PageBlockType.find(params[:id]).destroy
93
+ resp = StdClass.new({
94
+ 'redirect' => "/admin/page-block-types"
95
+ })
96
+ render :json => resp
97
+ end
98
+
99
+ end
100
+ end
@@ -31,22 +31,46 @@ module Caboose
31
31
  # GET /admin/pages/:page_id/blocks/:id/render
32
32
  def admin_render
33
33
  return unless user_is_allowed('pages', 'edit')
34
- block = PageBlock.find(params[:id])
35
- render :text => block.render(params[:empty_text])
34
+ b = PageBlock.find(params[:id])
35
+ bt = b.page_block_type
36
+ html = nil
37
+
38
+ if bt.use_render_function && bt.render_function
39
+ html = b.render_from_function(params[:empty_text])
40
+ else
41
+ html = render_to_string({
42
+ :partial => "caboose/page_blocks/#{b.page_block_type.name}",
43
+ :locals => {
44
+ :block => b,
45
+ :empty_text => params[:empty_text]
46
+ }
47
+ })
48
+ end
49
+ render :json => html
36
50
  end
37
51
 
38
52
  # GET /admin/pages/:page_id/blocks/render
39
53
  def admin_render_all
40
54
  return unless user_is_allowed('pages', 'edit')
41
55
  p = Page.find(params[:page_id])
42
- blocks = p.blocks.collect { |b| {
43
- :id => b.id,
44
- :block_type => b.block_type,
45
- :sort_order => b.sort_order,
46
- :name => b.name,
47
- :value => b.value,
48
- :html => b.render(params[:empty_text])
49
- }}
56
+ blocks = p.page_blocks.collect do |b|
57
+ bt = b.page_block_type
58
+ html = nil
59
+ if bt.use_render_function && bt.render_function
60
+ html = b.render_from_function(params[:empty_text])
61
+ else
62
+ html = render_to_string({
63
+ :partial => "caboose/page_blocks/#{bt.name}",
64
+ :locals => { :block => b, :empty_text => params[:empty_text] }
65
+ })
66
+ end
67
+ {
68
+ :id => b.id,
69
+ :page_block_type_id => bt.id,
70
+ :sort_order => b.sort_order,
71
+ :html => html
72
+ }
73
+ end
50
74
  render :json => blocks
51
75
  end
52
76
 
@@ -54,8 +78,10 @@ module Caboose
54
78
  def admin_edit
55
79
  return unless user_is_allowed('pages', 'edit')
56
80
  @page = Page.find(params[:page_id])
57
- @block = PageBlock.find(params[:id])
58
- render "caboose/page_blocks/admin_edit_#{@block.block_type}", :layout => 'caboose/modal'
81
+ PageBlock.create_field_values(params[:id])
82
+ @block = PageBlock.find(params[:id])
83
+ #render "caboose/page_blocks/admin_edit_#{@block.block_type}", :layout => 'caboose/modal'
84
+ render :layout => 'caboose/modal'
59
85
  end
60
86
 
61
87
  # POST /admin/pages/:page_id/blocks
@@ -68,10 +94,8 @@ module Caboose
68
94
  })
69
95
 
70
96
  b = PageBlock.new
71
- b.page_id = params[:page_id].to_i
72
- b.block_type = params[:block_type]
73
- b.name = params[:name] if params[:name]
74
- b.value = params[:value] if params[:value]
97
+ b.page_id = params[:page_id].to_i
98
+ b.page_block_type_id = params[:page_block_type_id]
75
99
 
76
100
  if !params[:index].nil?
77
101
  b.sort_order = params[:index].to_i
@@ -101,28 +125,16 @@ module Caboose
101
125
 
102
126
  resp = StdClass.new({'attributes' => {}})
103
127
  b = PageBlock.find(params[:id])
128
+ obj = b.object
104
129
 
105
130
  save = true
106
- user = logged_in_user
107
- params.each do |name, value|
108
- case name
109
- when 'block_type'
110
- b.block_type = value
111
- when 'sort_order'
112
- b.sort_order = value.to_i
113
- i = b.sort_order + 1
114
- PageBlock.where("page_id = ? and sort_order >= ?", b.page_id, b.sort_order).reorder(:sort_order).each do |b2|
115
- b2.sort_order = i
116
- b2.save
117
- i = i + 1
118
- end
119
- when 'name'
120
- b.name = value
121
- when 'value'
122
- b.value = value
123
- end
124
- end
125
-
131
+ user = logged_in_user
132
+
133
+ b.block_type_definition[:attributes].each do |attrib|
134
+ obj[attrib[:name]] = params[attrib[:name]] if params[attrib[:name]]
135
+ end
136
+
137
+ b.value = JSON.generate(obj)
126
138
  resp.success = save && b.save
127
139
  render :json => resp
128
140
  end
@@ -138,4 +150,5 @@ module Caboose
138
150
  end
139
151
 
140
152
  end
153
+
141
154
  end