camaleon_cms 2.1.2.0 → 2.1.2.1

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of camaleon_cms might be problematic. Click here for more details.

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