camaleon_cms 2.1.2.0 → 2.1.2.1

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.
Files changed (67) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +1 -1
  3. data/app/assets/javascripts/camaleon_cms/admin/_custom_fields.js +5 -3
  4. data/app/assets/javascripts/camaleon_cms/admin/_libraries.js +2 -0
  5. data/app/assets/javascripts/camaleon_cms/admin/_post.js +4 -14
  6. data/app/assets/javascripts/camaleon_cms/admin/jquery.validate.js +1 -1
  7. data/app/assets/javascripts/camaleon_cms/admin/nav_menu.js.coffee +1 -1
  8. data/app/assets/javascripts/camaleon_cms/admin/uploader/_media_manager.js.coffee +5 -5
  9. data/app/controllers/camaleon_cms/admin/appearances/nav_menus_controller.rb +1 -1
  10. data/app/controllers/camaleon_cms/admin/categories_controller.rb +2 -2
  11. data/app/controllers/camaleon_cms/admin/media_controller.rb +4 -2
  12. data/app/controllers/camaleon_cms/admin/plugins_controller.rb +4 -0
  13. data/app/controllers/camaleon_cms/admin/post_tags_controller.rb +2 -2
  14. data/app/controllers/camaleon_cms/admin/posts_controller.rb +2 -2
  15. data/app/controllers/camaleon_cms/admin/sessions_controller.rb +0 -5
  16. data/app/controllers/camaleon_cms/admin/settings_controller.rb +3 -1
  17. data/app/controllers/camaleon_cms/admin/users_controller.rb +2 -2
  18. data/app/controllers/camaleon_cms/apps/plugins_front_controller.rb +3 -1
  19. data/app/controllers/camaleon_cms/apps/themes_front_controller.rb +4 -1
  20. data/app/controllers/camaleon_cms/frontend_controller.rb +11 -3
  21. data/app/decorators/camaleon_cms/custom_fields_concern.rb +24 -0
  22. data/app/decorators/camaleon_cms/post_decorator.rb +11 -0
  23. data/app/helpers/camaleon_cms/admin/custom_fields_helper.rb +1 -1
  24. data/app/helpers/camaleon_cms/frontend/nav_menu_helper.rb +45 -2
  25. data/app/helpers/camaleon_cms/session_helper.rb +3 -6
  26. data/app/helpers/camaleon_cms/uploader_helper.rb +23 -7
  27. data/app/models/camaleon_cms/category.rb +5 -5
  28. data/app/models/camaleon_cms/custom_field_group.rb +2 -1
  29. data/app/models/camaleon_cms/nav_menu.rb +3 -2
  30. data/app/models/camaleon_cms/nav_menu_item.rb +10 -3
  31. data/app/models/camaleon_cms/post.rb +10 -2
  32. data/app/models/camaleon_cms/post_default.rb +4 -9
  33. data/app/models/camaleon_cms/post_tag.rb +1 -1
  34. data/app/models/camaleon_cms/post_type.rb +6 -5
  35. data/app/models/camaleon_cms/site.rb +2 -2
  36. data/app/models/camaleon_cms/term_taxonomy.rb +0 -10
  37. data/app/models/camaleon_cms/user.rb +2 -10
  38. data/app/models/concerns/camaleon_cms/custom_fields_read.rb +17 -9
  39. data/app/models/concerns/camaleon_cms/metas.rb +8 -0
  40. data/app/uploaders/camaleon_cms_uploader.rb +6 -4
  41. data/app/views/camaleon_cms/_flash_messages.html.erb +9 -5
  42. data/app/views/camaleon_cms/admin/appearances/nav_menus/_menu_items.html.erb +1 -1
  43. data/app/views/camaleon_cms/admin/appearances/nav_menus/_menu_items_list.html.erb +1 -1
  44. data/app/views/camaleon_cms/admin/categories/_form.html.erb +1 -9
  45. data/app/views/camaleon_cms/admin/media/index.html.erb +1 -1
  46. data/app/views/camaleon_cms/admin/posts/_sidebar.html.erb +8 -2
  47. data/app/views/camaleon_cms/admin/sessions/register.html.erb +2 -2
  48. data/app/views/camaleon_cms/admin/settings/custom_fields/fields/_field_attrs.html.erb +2 -2
  49. data/app/views/camaleon_cms/admin/settings/custom_fields/fields/_image.html.erb +2 -2
  50. data/app/views/camaleon_cms/admin/settings/custom_fields/index.html.erb +1 -1
  51. data/app/views/camaleon_cms/admin/settings/post_types/_form.html.erb +4 -0
  52. data/app/views/camaleon_cms/admin/settings/site.html.erb +2 -2
  53. data/app/views/camaleon_cms/admin/users/form.html.erb +3 -16
  54. data/app/views/camaleon_cms/default_theme/partials/_categories_list.html.erb +1 -1
  55. data/app/views/camaleon_cms/default_theme/partials/_comments.html.erb +2 -2
  56. data/app/views/camaleon_cms/default_theme/partials/_comments_list2.html.erb +24 -0
  57. data/app/views/camaleon_cms/default_theme/partials/_sidebar.html.erb +40 -20
  58. data/app/views/camaleon_cms/default_theme/post_type.html.erb +1 -2
  59. data/config/initializers/active_record_extension.rb +5 -5
  60. data/config/locales/camaleon_cms/admin/es.yml +2 -0
  61. data/config/locales/camaleon_cms/common.yml +1 -0
  62. data/db/migrate/20160504155652_add_feature_to_posts.rb +5 -0
  63. data/db/migrate/20160504155653_move_first_name_of_users.rb +9 -0
  64. data/lib/camaleon_cms/version.rb +1 -1
  65. data/lib/ext/string.rb +11 -1
  66. data/lib/generators/camaleon_cms/theme_template/app/apps/themes/my_theme/main_helper.rb +10 -7
  67. metadata +6 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 3c4b9bf88e25ea70b6bcabc52c72a3e53c5416e5
4
- data.tar.gz: 604ed3223a2bc6e41ce5821d0a18be0bfde8dafb
3
+ metadata.gz: c4b91e4d676cfa8c8e63bbbdc8babcac88ebcba4
4
+ data.tar.gz: 5f4faf55c0c1328f0b30142dae585924641e91d7
5
5
  SHA512:
6
- metadata.gz: f4d7195356195684f7edbf6825a775ad6973d525fa20bbbd4a95200d9d420fa83978e6a47c77fcfd2806f5ea5d4c2beefb9bf70c784ca9f29d29aaee858a52bd
7
- data.tar.gz: 755eba7a3cdf4a86b9dcf9b55ffa14f262612229ecb8552b9cabcf636db8ecbedd2b1038fe25cefaa5cf8925f73c445adc4cb7f29caab1a55ad3eced7119904c
6
+ metadata.gz: 2d1337afdf804b923538aa6edad015c4b427d4d5581513476ecf0144ba12a61f1b47781cbbcd956941d0c340a94bfed281569620a7b523c121e7d680299fa4fe
7
+ data.tar.gz: fcbdf1271ad46b913a7d2c773004a09f2962aadaf15ad34871a10197783e29651a2684ec3dcfbf20904ece1864d21e9a1b2f46b7a2decb1e7cd60cc9bcea2219
data/README.md CHANGED
@@ -28,7 +28,7 @@
28
28
  * Add the gem in your Gemfile
29
29
 
30
30
  ```
31
- gem "camaleon_cms", '>=2.1.1.4' # Stable versions 2.1.1.4, 2.1.1, 2.1.0
31
+ gem "camaleon_cms", '>=2.1.2.0' # Stable versions 2.1.2.0,2.1.1.4, 2.1.1, 2.1.0
32
32
  # gem "camaleon_cms", github: 'owen2345/camaleon-cms' # current development version
33
33
  ```
34
34
  * Install required Gem and dependencies
@@ -16,8 +16,8 @@ function build_custom_field(values, multiple, field_key, rand, default_value) {
16
16
 
17
17
  if (value) field.find('.input-value').val(value);
18
18
  $sortable.append(field);
19
- if (value && callback_set_value)eval(callback_set_value + "(field, value);")
20
- else if (callback) eval(callback + "(field);")
19
+ if(callback) eval(callback + "(field, value);")
20
+ if(callback_set_value) eval(callback_set_value + "(field, value);")
21
21
  field_counter ++;
22
22
  }
23
23
 
@@ -113,7 +113,7 @@ function custom_field_editor($field) {
113
113
  }
114
114
  function custom_field_field_attrs_val($field, value) {
115
115
  if ($field) {
116
- var data = $.parseJSON(value);
116
+ var data = $.parseJSON(value || '{}');
117
117
  $field.find('.input-attr').val(data.attr);
118
118
  $field.find('.input-value').val(data.value)
119
119
  $field.find('.input-attr, .input-value').filter('.is_translate').addClass('translatable').Translatable(ADMIN_TRANSLATIONS);
@@ -163,6 +163,8 @@ function load_upload_image_field(dom) {
163
163
  $.fn.upload_filemanager({
164
164
  formats: "image",
165
165
  dimension: $input.attr("data-dimension"),
166
+ versions: $input.attr("data-versions"),
167
+ thumb_size: $input.attr("data-thumb_size"),
166
168
  selected: function (file, response) {
167
169
  $input.val(file.url);
168
170
  }
@@ -81,6 +81,8 @@ var init_form_validations = function (form) {
81
81
  $that.val(file.url).trigger("change");
82
82
  },
83
83
  dimension: $that.attr('data-dimension') || options["dimension"],
84
+ versions: $that.attr('data-versions') || options["versions"],
85
+ thumb_size: $that.attr('data-thumb_size') || options["thumb_size"],
84
86
  title: $that.attr('title') || options["title"],
85
87
  });
86
88
  return false;
@@ -176,7 +176,6 @@ function init_post(obj) {
176
176
  tinymce.init(cama_get_tinymce_settings({
177
177
  selector: '.tinymce_textarea:not(.translated-item)',
178
178
  height: '480px',
179
- onPostRender: onEditorPostRender,
180
179
  base_path: obj.base_path
181
180
  }));
182
181
 
@@ -266,16 +265,7 @@ function init_post(obj) {
266
265
  /*********** end *************/
267
266
  }
268
267
  setTimeout(form_later_actions, 1000);
269
-
270
- // wait for render editors
271
- var wait_render;
272
-
273
- function onEditorPostRender(editor) {
274
- if (wait_render) clearTimeout(wait_render);
275
- wait_render = setTimeout(function () {
276
- $form.data("hash", get_hash_form());
277
- }, 1000);
278
- }
268
+ setTimeout(function(){ $form.data("hash", get_hash_form()); }, 2000);
279
269
 
280
270
  function get_hash_form() {
281
271
  for (editor in tinymce.editors) {
@@ -293,8 +283,8 @@ function init_post(obj) {
293
283
  }
294
284
 
295
285
  // thumbnail updloader
296
- function upload_feature_image() {
297
- $.fn.upload_filemanager({
286
+ function upload_feature_image(data) {
287
+ $.fn.upload_filemanager($.extend({
298
288
  formats: "image",
299
289
  selected: function (image) {
300
290
  var image_url = image.url;
@@ -303,5 +293,5 @@ function upload_feature_image() {
303
293
  $('#feature-image .meta strong').html(image.name);
304
294
  $('#feature-image').show();
305
295
  }
306
- });
296
+ }, data));
307
297
  }
@@ -112,7 +112,7 @@
112
112
  $.validator.addMethod("file_format", function (value, element) {
113
113
  var formats = $(element).attr("data-formats");
114
114
  var ext = value.split(".").pop().toLowerCase();
115
- if (formats)
115
+ if (formats && value)
116
116
  return ($.inArray("video", formats.split(",")) >= 0 && $.cama_check_video_url(value)) || $.inArray($.file_formats[ext], formats.split(",")) >= 0 || $.inArray(ext, formats.split(",")) >= 0
117
117
 
118
118
  return true;
@@ -24,7 +24,7 @@ $ ->
24
24
  save_menu = (data)->
25
25
  showLoading()
26
26
  $.post(list_panel.attr('data-url'), data, (res)->
27
- list_panel.append(res).nestable()
27
+ list_panel.children('.dd-list').append($(res).children())
28
28
  hideLoading()
29
29
  )
30
30
 
@@ -59,7 +59,7 @@ window["cama_init_media"] = (media_panel) ->
59
59
  ########## file uploader
60
60
  p_upload = media_panel.find(".cama_media_fileuploader")
61
61
  customFileData = ->
62
- return {folder: media_panel.attr("data-folder").replace(/\/{2,}/g, '/'), formats: media_panel.attr("data-formats") }
62
+ return {folder: media_panel.attr("data-folder").replace(/\/{2,}/g, '/'), formats: media_panel.attr("data-formats"), versions: media_panel.attr("data-versions"), thumb_size: media_panel.attr("data-thumb_size") }
63
63
 
64
64
  p_upload.uploadFile({
65
65
  url: p_upload.attr("data-url"),
@@ -209,12 +209,12 @@ window["cama_init_media"] = (media_panel) ->
209
209
  ).validate()
210
210
 
211
211
  $ ->
212
- # sample: $.fn.upload_url({url: 'http://camaleon.tuzitio.com/media/132/logo2.png', dimension: '120x120', folder: 'my_folder'})
212
+ # sample: $.fn.upload_url({url: 'http://camaleon.tuzitio.com/media/132/logo2.png', dimension: '120x120', versions: '200x200', folder: 'my_folder', thumb_size: '100x100'})
213
213
  # dimension: default current dimension
214
214
  # folder: default current folder
215
215
  $.fn.upload_url = (args)->
216
216
  media_panel = $("#cama_media_gallery")
217
- data = {folder: media_panel.attr("data-folder").replace(/\/{2,}/g, '/'), media_action: "crop_url", formats: media_panel.attr("data-formats"), onerror: (message) ->
217
+ data = {folder: media_panel.attr("data-folder").replace(/\/{2,}/g, '/'), media_action: "crop_url", formats: media_panel.attr("data-formats"), versions: media_panel.attr("data-versions"), thumb_size: media_panel.attr("data-thumb_size"), onerror: (message) ->
218
218
  $.fn.alert({type: 'error', content: message, title: I18n("msg.error_uploading")})
219
219
  }
220
220
  $.extend(data, args); on_error = data["onerror"]; delete data["onerror"];
@@ -234,12 +234,12 @@ $ ->
234
234
 
235
235
  # jquery library for modal updaloder
236
236
  $ ->
237
- # sample: $.fn.upload_filemanager({title: "My title", formats: "image,video", dimension: "30x30", selected: function(file){ alert(file["name"]) }})
237
+ # sample: $.fn.upload_filemanager({title: "My title", formats: "image,video", dimension: "30x30", versions: '100x100,200x200', thumb_size: '100x100', selected: function(file){ alert(file["name"]) }})
238
238
  # file structure: {"name":"422.html","size":1547, "url":"http://localhost:3000/media/1/422.html", "format":"doc","type":"text/html"}
239
239
  # dimension: dimension: "30x30" | "x30" | dimension: "30x"
240
240
  $.fn.upload_filemanager = (args)->
241
241
  args = args || {}
242
- open_modal({title: args["title"] || I18n("msg.media_title"), id: 'cama_modal_file_uploader', modal_size: "modal-lg", mode: "ajax", url: root_admin_url+"/media/ajax", ajax_params: {media_formats: args["formats"], dimension: args["dimension"] }, callback: (modal)->
242
+ open_modal({title: args["title"] || I18n("msg.media_title"), id: 'cama_modal_file_uploader', modal_size: "modal-lg", mode: "ajax", url: root_admin_url+"/media/ajax", ajax_params: {media_formats: args["formats"], dimension: args["dimension"], versions: args["versions"], thumb_size: args["thumb_size"] }, callback: (modal)->
243
243
  if args["selected"]
244
244
  window["callback_media_uploader"] = args["selected"]
245
245
  modal.css("z-index", args["zindex"] || 99999).children(".modal-dialog").css("width", "90%")
@@ -91,7 +91,7 @@ class CamaleonCms::Admin::Appearances::NavMenusController < CamaleonCms::AdminCo
91
91
  parent_id = params[:nav_menu_id] if parent_id.nil?
92
92
  items.each do |index, _item|
93
93
  item = current_site.nav_menu_items.find(_item['id'])
94
- item.update_column(:parent_id, parent_id)
94
+ item.update_columns parent_id: parent_id, term_order: index
95
95
  reorder_items(_item['children'], _item['id'], false) if _item['children'].present?
96
96
  end
97
97
  render(inline: '') if is_root
@@ -26,7 +26,7 @@ class CamaleonCms::Admin::CategoriesController < CamaleonCms::AdminController
26
26
 
27
27
  def update
28
28
  if @category.update(params[:category])
29
- @category.set_options_from_form(params[:meta])
29
+ @category.set_options(params[:meta])
30
30
  @category.set_field_values(params[:field_options])
31
31
  flash[:notice] = t('camaleon_cms.admin.post_type.message.updated')
32
32
  redirect_to action: :index
@@ -39,7 +39,7 @@ class CamaleonCms::Admin::CategoriesController < CamaleonCms::AdminController
39
39
  data_term = params[:category]
40
40
  @category = @post_type.categories.new(data_term)
41
41
  if @category.save
42
- @category.set_options_from_form(params[:meta])
42
+ @category.set_options(params[:meta])
43
43
  @category.set_field_values(params[:field_options])
44
44
  flash[:notice] = t('camaleon_cms.admin.post_type.message.created')
45
45
  redirect_to action: :index
@@ -39,7 +39,9 @@ class CamaleonCms::Admin::MediaController < CamaleonCms::AdminController
39
39
 
40
40
  # do background actions in fog
41
41
  def actions
42
- authorize! :manager, :media
42
+ if params[:media_action] != 'crop_url'
43
+ authorize! :manager, :media
44
+ end
43
45
  params[:folder] = params[:folder].gsub("//", "/") if params[:folder].present?
44
46
  case params[:media_action]
45
47
  when "new_folder"
@@ -65,7 +67,7 @@ class CamaleonCms::Admin::MediaController < CamaleonCms::AdminController
65
67
  def upload(settings = {})
66
68
  f = {error: "File not found."}
67
69
  if params[:file_upload].present?
68
- f = upload_file(params[:file_upload], {folder: params[:folder], dimension: params['dimension'], formats: params[:formats]}.merge(settings))
70
+ f = upload_file(params[:file_upload], {folder: params[:folder], dimension: params['dimension'], formats: params[:formats], versions: params[:versions], thumb_size: params[:thumb_size]}.merge(settings))
69
71
  end
70
72
 
71
73
  render(partial: "render_file_item", locals:{ file: f }) unless f[:error].present?
@@ -17,11 +17,13 @@ class CamaleonCms::Admin::PluginsController < CamaleonCms::AdminController
17
17
  status = params[:status].to_bool
18
18
  if status == true # to inactivate
19
19
  plugin = plugin_uninstall(params[:id])
20
+ hooks_run("plugin_#{params[:id]}_after_uninstall", {plugin: plugin})
20
21
  flash[:notice] = "Plugin \"#{plugin.title}\" #{t('camaleon_cms.admin.message.was_inactivated')}"
21
22
  end
22
23
 
23
24
  unless status # to activate
24
25
  plugin = plugin_install(params[:id])
26
+ hooks_run("plugin_#{params[:id]}_after_install", {plugin: plugin})
25
27
  flash[:notice] = "Plugin \"#{plugin.title}\" #{t('camaleon_cms.admin.message.was_activated')}"
26
28
  end
27
29
  PluginRoutes.reload
@@ -32,6 +34,7 @@ class CamaleonCms::Admin::PluginsController < CamaleonCms::AdminController
32
34
  def upgrade
33
35
  plugin = plugin_upgrade(params[:plugin_id])
34
36
  flash[:notice] = "Plugin \"#{plugin.title}\" #{t('camaleon_cms.admin.message.was_upgraded')}"
37
+ hooks_run("plugin_#{params[:plugin_id]}_after_upgrade", {plugin: plugin})
35
38
  PluginRoutes.reload
36
39
  redirect_to action: :index
37
40
  end
@@ -43,6 +46,7 @@ class CamaleonCms::Admin::PluginsController < CamaleonCms::AdminController
43
46
  else
44
47
  flash[:error] = "Plugin \"#{plugin.title}\" #{t('camaleon_cms.admin.message.can_not_be_removed')}"
45
48
  end
49
+ hooks_run("plugin_#{params[:id]}_after_destroy", {plugin: plugin})
46
50
  redirect_to action: :index
47
51
  end
48
52
 
@@ -29,7 +29,7 @@ class CamaleonCms::Admin::PostTagsController < CamaleonCms::AdminController
29
29
  # save changes of a post tag
30
30
  def update
31
31
  if @post_tag.update(params[:post_tag])
32
- @post_tag.set_options_from_form(params[:meta]) if params[:meta].present?
32
+ @post_tag.set_options(params[:meta]) if params[:meta].present?
33
33
  @post_tag.set_field_values(params[:field_options])
34
34
  flash[:notice] = t('camaleon_cms.admin.post_type.message.updated')
35
35
  redirect_to action: :index
@@ -43,7 +43,7 @@ class CamaleonCms::Admin::PostTagsController < CamaleonCms::AdminController
43
43
  data_term = params[:post_tag]
44
44
  @post_tag = @post_type.post_tags.new(data_term)
45
45
  if @post_tag.save
46
- @post_tag.set_options_from_form(params[:meta]) if params[:meta].present?
46
+ @post_tag.set_options(params[:meta]) if params[:meta].present?
47
47
  @post_tag.set_field_values(params[:field_options])
48
48
  flash[:notice] = t('camaleon_cms.admin.post_type.message.created')
49
49
  redirect_to action: :index
@@ -78,7 +78,7 @@ class CamaleonCms::Admin::PostsController < CamaleonCms::AdminController
78
78
  r = {post: @post, post_type: @post_type}; hooks_run("create_post", r)
79
79
  @post = r[:post]
80
80
  if @post.valid?
81
- @post.set_meta_from_form(params[:meta])
81
+ @post.set_metas(params[:meta])
82
82
  @post.set_field_values(params[:field_options])
83
83
  @post.set_option("keywords", post_data[:keywords])
84
84
  flash[:notice] = t('camaleon_cms.admin.post.message.created', post_type: @post_type.decorate.the_title)
@@ -106,7 +106,7 @@ class CamaleonCms::Admin::PostsController < CamaleonCms::AdminController
106
106
  r = {post: @post, post_type: @post_type}; hooks_run("update_post", r)
107
107
  @post = r[:post]
108
108
  if @post.update(post_data)
109
- @post.set_meta_from_form(params[:meta])
109
+ @post.set_metas(params[:meta])
110
110
  @post.set_field_values(params[:field_options])
111
111
  @post.set_option("keywords", post_data[:keywords])
112
112
  hooks_run("updated_post", {post: @post, post_type: @post_type})
@@ -114,9 +114,6 @@ class CamaleonCms::Admin::SessionsController < CamaleonCms::CamaleonController
114
114
  user_data = params[:user]
115
115
  result = cama_register_user(user_data, params[:meta])
116
116
  if result[:result] == false && result[:type] == :captcha_error
117
- @first_name = params[:meta][:first_name]
118
- @last_name = params[:meta][:last_name]
119
-
120
117
  @user.errors[:captcha] = t('camaleon_cms.admin.users.message.error_captcha')
121
118
  render 'register'
122
119
  elsif result[:result]
@@ -125,8 +122,6 @@ class CamaleonCms::Admin::SessionsController < CamaleonCms::CamaleonController
125
122
  r = {user: @user, redirect_url: result[:redirect_url]}; hooks_run('user_registered', r)
126
123
  redirect_to r[:redirect_url]
127
124
  else
128
- @first_name = params[:meta][:first_name]
129
- @last_name = params[:meta][:last_name]
130
125
  render 'register'
131
126
  end
132
127
  else
@@ -22,11 +22,13 @@ class CamaleonCms::Admin::SettingsController < CamaleonCms::AdminController
22
22
  def site_saved
23
23
  @site = current_site
24
24
  if @site.update(params[:site])
25
- @site.set_options_from_form(params[:meta]) if params[:meta].present?
25
+ @site.set_options(params[:meta]) if params[:meta].present?
26
26
  @site.set_multiple_options(params[:options])
27
27
  @site.set_field_values(params[:field_options])
28
28
  theme = @site.get_theme.decorate
29
29
  theme.set_field_values(params[:theme_fields]) if params[:theme_fields].present?
30
+ theme.set_options(params[:theme_option]) if params[:theme_option].present?
31
+ theme.set_metas(params[:theme_meta]) if params[:theme_meta].present?
30
32
  flash[:notice] = t('camaleon_cms.admin.settings.message.site_updated')
31
33
  hook_run(theme.settings, "on_theme_settings", theme)
32
34
  redirect_to action: :site
@@ -35,7 +35,7 @@ class CamaleonCms::Admin::UsersController < CamaleonCms::AdminController
35
35
 
36
36
  def update
37
37
  if @user.update(params[:user])
38
- @user.set_meta_from_form(params[:meta]) if params[:meta].present?
38
+ @user.set_metas(params[:meta]) if params[:meta].present?
39
39
  @user.set_field_values(params[:field_options])
40
40
  r = {user: @user, message: t('camaleon_cms.admin.users.message.updated'), params: params}; hooks_run('user_after_edited', r)
41
41
  flash[:notice] = r[:message]
@@ -74,7 +74,7 @@ class CamaleonCms::Admin::UsersController < CamaleonCms::AdminController
74
74
  user_data = params[:user]
75
75
  @user = current_site.users.new(user_data)
76
76
  if @user.save
77
- @user.set_meta_from_form(params[:meta]) if params[:meta].present?
77
+ @user.set_metas(params[:meta]) if params[:meta].present?
78
78
  @user.set_field_values(params[:field_options])
79
79
  r={user: @user}; hooks_run('user_created', r)
80
80
  flash[:notice] = t('camaleon_cms.admin.users.message.created')
@@ -15,8 +15,8 @@ class CamaleonCms::Apps::PluginsFrontController < CamaleonCms::FrontendControlle
15
15
  "themes/#{current_theme.slug}/views/layouts/index"
16
16
  end
17
17
  }
18
- private
19
18
 
19
+ private
20
20
  def init_plugin
21
21
  plugin_name = params[:controller].split("/")[1]
22
22
  @plugin = current_site.plugins.where(slug: plugin_name).first_or_create
@@ -26,5 +26,7 @@ class CamaleonCms::Apps::PluginsFrontController < CamaleonCms::FrontendControlle
26
26
  return
27
27
  end
28
28
  lookup_context.prefixes.prepend(params[:controller].sub("plugins/#{plugin_name}", "#{plugin_name}/views")) if !@plugin.settings["gem_mode"].present?
29
+ lookup_context.prefixes.append("themes/#{current_theme.slug}") if current_theme.settings["gem_mode"]
30
+ lookup_context.prefixes.append("themes/#{current_theme.slug}/views") unless current_theme.settings["gem_mode"]
29
31
  end
30
32
  end
@@ -15,6 +15,9 @@ class CamaleonCms::Apps::ThemesFrontController < CamaleonCms::FrontendController
15
15
  theme_name = params[:controller].split("/")[1]
16
16
  @theme = current_theme
17
17
  return render_error(404) unless current_theme.slug == theme_name
18
- lookup_context.prefixes.prepend(params[:controller].sub("themes/#{theme_name}", "#{theme_name}/views"))
18
+ lookup_context.prefixes = []
19
+ lookup_context.prefixes.prepend(params[:controller].sub("themes/#{theme_name}", "themes/#{theme_name}/views")) unless current_theme.settings["gem_mode"]
20
+ lookup_context.prefixes.append("themes/#{current_theme.slug}") if current_theme.settings["gem_mode"]
21
+ lookup_context.prefixes.append("themes/#{current_theme.slug}/views") unless current_theme.settings["gem_mode"]
19
22
  end
20
23
  end
@@ -39,8 +39,12 @@ class CamaleonCms::FrontendController < CamaleonCms::CamaleonController
39
39
  @cama_visited_category = @category
40
40
  @children = @category.children.no_empty.decorate
41
41
  @posts = @category.the_posts.paginate(:page => params[:page], :per_page => current_site.front_per_page).eager_load(:metas)
42
- r_file = lookup_context.template_exists?("categories/#{@category.the_slug}") ? "categories/#{@category.the_slug}" : "category"
43
- layout_ = lookup_context.template_exists?("layouts/categories/#{@category.the_slug}") ? "categories/#{@category.the_slug}" : (self.send :_layout)
42
+ r_file = lookup_context.template_exists?("post_types/#{@post_type.the_slug}/category_#{@category.the_slug}") ? "post_types/#{@post_type.the_slug}/category_#{@post_type.the_slug}" : nil # specific template category with specific slug within a posttype
43
+ r_file = lookup_context.template_exists?("post_types/#{@post_type.the_slug}/category") ? "post_types/#{@post_type.the_slug}/category" : nil unless r_file.present? # default template category for all categories within a posttype
44
+ r_file = lookup_context.template_exists?("categories/#{@category.the_slug}") ? "categories/#{@category.the_slug}" : 'category' unless r_file.present? # default template category for all categories for all posttypes
45
+
46
+ layout_ = lookup_context.template_exists?("layouts/post_types/#{@post_type.the_slug}/category") ? "post_types/#{@post_type.the_slug}/category" : nil unless layout_.present? # layout for all categories within a posttype
47
+ layout_ = lookup_context.template_exists?("layouts/categories/#{@category.the_slug}") ? "categories/#{@category.the_slug}" : (self.send :_layout) unless layout_.present? # layout for categories for all post types
44
48
  r = {category: @category, layout: layout_, render: r_file}; hooks_run("on_render_category", r)
45
49
  render r[:render], layout: r[:layout]
46
50
  end
@@ -72,7 +76,9 @@ class CamaleonCms::FrontendController < CamaleonCms::CamaleonController
72
76
  end
73
77
  @cama_visited_tag = @post_tag
74
78
  @posts = @post_tag.the_posts.paginate(:page => params[:page], :per_page => current_site.front_per_page).eager_load(:metas)
75
- r_file = lookup_context.template_exists?("post_tags/#{@post_tag.the_slug}") ? "post_tags/#{@post_tag.the_slug}" : "post_tag"
79
+ r_file = lookup_context.template_exists?("post_types/#{@post_type.the_slug}/post_tag_#{@post_tag.the_slug}") ? "post_types/#{@post_type.the_slug}/post_tag_#{@post_tag.the_slug}" : nil
80
+ r_file = lookup_context.template_exists?("post_types/#{@post_type.the_slug}/post_tag") ? "post_types/#{@post_type.the_slug}/post_tag" : nil unless r_file.present?
81
+ r_file = lookup_context.template_exists?("post_tags/#{@post_tag.the_slug}") ? "post_tags/#{@post_tag.the_slug}" : "post_tag" unless r_file.present?
76
82
  layout_ = lookup_context.template_exists?("layouts/post_tags/#{@post_tag.the_slug}") ? "post_tags/#{@post_tag.the_slug}" : (self.send :_layout)
77
83
  r = {post_tag: @post_tag, layout: layout_, render: r_file}; hooks_run("on_render_post_tag", r)
78
84
  render r[:render], layout: r[:layout]
@@ -169,6 +175,8 @@ class CamaleonCms::FrontendController < CamaleonCms::CamaleonController
169
175
  r_file = @post.get_template(@post_type)
170
176
  elsif home_page.present? && @post.id.to_s == home_page
171
177
  r_file = "index"
178
+ elsif lookup_context.template_exists?("post_types/#{@post_type.the_slug}/single")
179
+ r_file = "post_types/#{@post_type.the_slug}/single"
172
180
  elsif lookup_context.template_exists?("#{@post_type.slug}")
173
181
  r_file = "#{@post_type.slug}"
174
182
  else
@@ -37,4 +37,28 @@ module CamaleonCms::CustomFieldsConcern
37
37
  end
38
38
  r
39
39
  end
40
+
41
+ # return custom field contents with key field_key (only for type attributes)
42
+ # translated and short codes evaluated like the content
43
+ # this is for multiple values
44
+ def the_attribute_fields(field_key)
45
+ r = []
46
+ object.get_fields(field_key).each do |text|
47
+ _r = JSON.parse(text || '{}')
48
+ _r['attr'] = h.do_shortcode(_r['attr'].to_s.translate(@_deco_locale), object)
49
+ _r['value'] = h.do_shortcode(_r['value'].to_s.translate(@_deco_locale), object)
50
+ r << _r
51
+ end
52
+ r
53
+ end
54
+
55
+ # return custom field content with key field_key (only for type attributes)
56
+ # translated and short codes evaluated like the content
57
+ # default_val: default value returned when this field was not registered
58
+ def the_attribute_field(field_key, default_val = '')
59
+ r = JSON.parse(object.get_field(field_key, default_val) || '{}')
60
+ r['attr'] = h.do_shortcode(r['attr'].to_s.translate(@_deco_locale), object)
61
+ r['value'] = h.do_shortcode(r['value'].to_s.translate(@_deco_locale), object)
62
+ r
63
+ end
40
64
  end
@@ -40,6 +40,7 @@ class CamaleonCms::PostDecorator < CamaleonCms::ApplicationDecorator
40
40
  th = object.get_meta("thumb")
41
41
  th.present? ? th : (default || object.post_type.get_option('default_thumb', nil) || h.asset_url("camaleon_cms/image-not-found.png"))
42
42
  end
43
+ alias_method :the_image_url, :the_thumb_url
43
44
 
44
45
  # check if this page has registered the thumbnail
45
46
  def has_thumb?
@@ -236,4 +237,14 @@ class CamaleonCms::PostDecorator < CamaleonCms::ApplicationDecorator
236
237
  res.html_safe
237
238
  end
238
239
 
240
+ # return all related posts of current post
241
+ def the_related_posts
242
+ ptype = self.the_post_type
243
+ ptype.the_posts.joins(:categories).where("#{CamaleonCms::TermRelationship.table_name}" => {term_taxonomy_id: the_categories.pluck(:id)})
244
+ end
245
+
246
+ # fix for "Using Draper::Decorator without inferred source class"
247
+ def self.object_class_name
248
+ 'CamaleonCms::Post'
249
+ end
239
250
  end