camaleon_cms 2.1.2.1 → 2.2.0

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 (186) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +7 -4
  3. data/app/apps/plugins/attack/attack_helper.rb +3 -0
  4. data/app/apps/plugins/attack/config/custom_models.rb +4 -2
  5. data/app/apps/plugins/attack/config/locales/translation.yml +19 -0
  6. data/app/apps/plugins/attack/models/attack.rb +1 -1
  7. data/app/apps/plugins/front_cache/config/initializer.rb +4 -2
  8. data/app/apps/plugins/front_cache/config/locales/translation.yml +19 -0
  9. data/app/apps/themes/camaleon_first/main_helper.rb +1 -3
  10. data/app/apps/themes/default/views/admin/settings.html.erb +0 -1
  11. data/app/apps/themes/default/views/layouts/index.html.erb +5 -5
  12. data/app/apps/themes/new/assets/css/main.css +1 -1
  13. data/app/apps/themes/new/assets/js/main.js +1 -1
  14. data/app/apps/themes/new/views/admin/settings.html.erb +1 -1
  15. data/app/assets/images/camaleon_cms/language/{pt_br.png → pt-BR.png} +0 -0
  16. data/app/assets/javascripts/camaleon_cms/admin/_custom_fields.js +105 -51
  17. data/app/assets/javascripts/camaleon_cms/admin/_libraries.js +4 -2
  18. data/app/assets/javascripts/camaleon_cms/admin/_translator.js +2 -2
  19. data/app/assets/javascripts/camaleon_cms/admin/custom_fields_form.js +9 -7
  20. data/app/assets/javascripts/camaleon_cms/admin/jquery_validate/{pt_br.js → pt-BR.js} +0 -0
  21. data/app/assets/javascripts/camaleon_cms/admin/momentjs/{pt_br.js → pt-BR.js} +1 -1
  22. data/app/assets/javascripts/camaleon_cms/admin/nav_menu.js.coffee +15 -1
  23. data/app/assets/javascripts/camaleon_cms/admin/tinymce/langs/{pt_br.js → pt-BR.js} +1 -1
  24. data/app/assets/javascripts/camaleon_cms/admin/uploader/_media_manager.js.coffee +24 -12
  25. data/app/assets/stylesheets/camaleon_cms/admin/_custom_admin.css.scss +9 -0
  26. data/app/assets/stylesheets/camaleon_cms/admin/lte/_admin.css.scss +1 -1
  27. data/app/controllers/camaleon_cms/admin/appearances/nav_menus_controller.rb +13 -6
  28. data/app/controllers/camaleon_cms/admin/appearances/themes_controller.rb +1 -1
  29. data/app/controllers/camaleon_cms/admin/appearances/widgets/assign_controller.rb +1 -1
  30. data/app/controllers/camaleon_cms/admin/appearances/widgets/main_controller.rb +1 -1
  31. data/app/controllers/camaleon_cms/admin/appearances/widgets/sidebar_controller.rb +1 -1
  32. data/app/controllers/camaleon_cms/admin/comments_controller.rb +1 -1
  33. data/app/controllers/camaleon_cms/admin/media_controller.rb +15 -5
  34. data/app/controllers/camaleon_cms/admin/plugins_controller.rb +1 -1
  35. data/app/controllers/camaleon_cms/admin/settings/custom_fields_controller.rb +14 -8
  36. data/app/controllers/camaleon_cms/admin/settings_controller.rb +22 -7
  37. data/app/controllers/camaleon_cms/admin/user_roles_controller.rb +1 -1
  38. data/app/controllers/camaleon_cms/admin/users_controller.rb +1 -1
  39. data/app/controllers/camaleon_cms/apps/plugins_admin_controller.rb +4 -1
  40. data/app/controllers/camaleon_cms/apps/plugins_front_controller.rb +5 -10
  41. data/app/controllers/camaleon_cms/apps/themes_front_controller.rb +1 -4
  42. data/app/controllers/camaleon_cms/camaleon_controller.rb +4 -13
  43. data/app/controllers/camaleon_cms/frontend_controller.rb +15 -9
  44. data/app/controllers/concerns/camaleon_cms/frontend_concern.rb +17 -8
  45. data/app/decorators/camaleon_cms/application_decorator.rb +3 -3
  46. data/app/decorators/camaleon_cms/custom_fields_concern.rb +21 -6
  47. data/app/decorators/camaleon_cms/post_comment_decorator.rb +21 -0
  48. data/app/decorators/camaleon_cms/site_decorator.rb +5 -5
  49. data/app/decorators/camaleon_cms/theme_decorator.rb +10 -0
  50. data/app/decorators/camaleon_cms/user_decorator.rb +2 -2
  51. data/app/helpers/camaleon_cms/admin/custom_fields_helper.rb +24 -2
  52. data/app/helpers/camaleon_cms/admin/menus_helper.rb +13 -12
  53. data/app/helpers/camaleon_cms/frontend/application_helper.rb +1 -1
  54. data/app/helpers/camaleon_cms/frontend/nav_menu_helper.rb +7 -6
  55. data/app/helpers/camaleon_cms/plugins_helper.rb +20 -18
  56. data/app/helpers/camaleon_cms/site_helper.rb +1 -20
  57. data/app/helpers/camaleon_cms/theme_helper.rb +1 -1
  58. data/app/helpers/camaleon_cms/uploader_helper.rb +25 -20
  59. data/app/helpers/camaleon_cms/user_roles_helper.rb +6 -1
  60. data/app/mailers/camaleon_cms/html_mailer.rb +2 -1
  61. data/app/models/camaleon_cms/ability.rb +3 -26
  62. data/app/models/camaleon_cms/custom_field.rb +2 -1
  63. data/app/models/camaleon_cms/custom_field_group.rb +23 -22
  64. data/app/models/camaleon_cms/custom_fields_relationship.rb +1 -1
  65. data/app/models/camaleon_cms/nav_menu.rb +1 -1
  66. data/app/models/camaleon_cms/nav_menu_item.rb +12 -19
  67. data/app/models/camaleon_cms/post.rb +1 -1
  68. data/app/models/camaleon_cms/post_comment.rb +3 -1
  69. data/app/models/camaleon_cms/post_default.rb +1 -1
  70. data/app/models/camaleon_cms/post_type.rb +5 -4
  71. data/app/models/camaleon_cms/site.rb +12 -0
  72. data/app/models/camaleon_cms/term_taxonomy.rb +1 -1
  73. data/app/models/camaleon_cms/user_role.rb +5 -1
  74. data/app/models/concerns/camaleon_cms/custom_fields_read.rb +99 -49
  75. data/app/uploaders/camaleon_cms_aws_uploader.rb +1 -1
  76. data/app/uploaders/camaleon_cms_local_uploader.rb +19 -3
  77. data/app/uploaders/camaleon_cms_uploader.rb +13 -6
  78. data/app/views/camaleon_cms/admin/appearances/nav_menus/_custom_menus.html.erb +9 -2
  79. data/app/views/camaleon_cms/admin/appearances/nav_menus/_form.html.erb +1 -1
  80. data/app/views/camaleon_cms/admin/appearances/nav_menus/_menu_items.html.erb +2 -2
  81. data/app/views/camaleon_cms/admin/appearances/themes/index.html.erb +1 -3
  82. data/app/views/camaleon_cms/admin/media/_render_file_item.html.erb +1 -0
  83. data/app/views/camaleon_cms/admin/media/index.html.erb +3 -3
  84. data/app/views/camaleon_cms/admin/posts/_sidebar.html.erb +1 -1
  85. data/app/views/camaleon_cms/admin/posts/form.html.erb +1 -1
  86. data/app/views/camaleon_cms/admin/settings/_configuration_settings.html.erb +4 -0
  87. data/app/views/camaleon_cms/admin/settings/custom_fields/_get_items.html.erb +6 -6
  88. data/app/views/camaleon_cms/admin/settings/custom_fields/_meta_data.html.erb +0 -9
  89. data/app/views/camaleon_cms/admin/settings/custom_fields/_render.html.erb +39 -55
  90. data/app/views/camaleon_cms/admin/settings/custom_fields/fields/_audio.html.erb +1 -1
  91. data/app/views/camaleon_cms/admin/settings/custom_fields/fields/_checkbox.html.erb +2 -2
  92. data/app/views/camaleon_cms/admin/settings/custom_fields/fields/_checkboxes.html.erb +3 -3
  93. data/app/views/camaleon_cms/admin/settings/custom_fields/fields/_colorpicker.html.erb +3 -3
  94. data/app/views/camaleon_cms/admin/settings/custom_fields/fields/_date.html.erb +3 -3
  95. data/app/views/camaleon_cms/admin/settings/custom_fields/fields/_editor.html.erb +2 -2
  96. data/app/views/camaleon_cms/admin/settings/custom_fields/fields/_email.html.erb +1 -1
  97. data/app/views/camaleon_cms/admin/settings/custom_fields/fields/_field_attrs.html.erb +3 -3
  98. data/app/views/camaleon_cms/admin/settings/custom_fields/fields/_file.html.erb +1 -1
  99. data/app/views/camaleon_cms/admin/settings/custom_fields/fields/_image.html.erb +2 -2
  100. data/app/views/camaleon_cms/admin/settings/custom_fields/fields/_numeric.html.erb +1 -1
  101. data/app/views/camaleon_cms/admin/settings/custom_fields/fields/_phone.html.erb +1 -1
  102. data/app/views/camaleon_cms/admin/settings/custom_fields/fields/_posts.html.erb +3 -3
  103. data/app/views/camaleon_cms/admin/settings/custom_fields/fields/_private_file.html.erb +4 -0
  104. data/app/views/camaleon_cms/admin/settings/custom_fields/fields/_radio.html.erb +3 -3
  105. data/app/views/camaleon_cms/admin/settings/custom_fields/fields/_select.html.erb +3 -3
  106. data/app/views/camaleon_cms/admin/settings/custom_fields/fields/_select_eval.html.erb +1 -1
  107. data/app/views/camaleon_cms/admin/settings/custom_fields/fields/_text_area.html.erb +2 -2
  108. data/app/views/camaleon_cms/admin/settings/custom_fields/fields/_text_box.html.erb +2 -2
  109. data/app/views/camaleon_cms/admin/settings/custom_fields/fields/_url.html.erb +1 -1
  110. data/app/views/camaleon_cms/admin/settings/custom_fields/fields/_users.html.erb +1 -1
  111. data/app/views/camaleon_cms/admin/settings/custom_fields/fields/_video.html.erb +1 -1
  112. data/app/views/camaleon_cms/admin/settings/custom_fields/form.html.erb +8 -0
  113. data/app/views/camaleon_cms/admin/settings/site.html.erb +1 -20
  114. data/app/views/camaleon_cms/admin/settings/theme.html.erb +20 -0
  115. data/app/views/camaleon_cms/admin/user_roles/form.html.erb +2 -2
  116. data/app/views/camaleon_cms/default_theme/admin/settings.html.erb +0 -1
  117. data/app/views/camaleon_cms/default_theme/partials/_comments.html.erb +0 -2
  118. data/app/views/camaleon_cms/default_theme/partials/_search_form.html.erb +1 -1
  119. data/app/views/camaleon_cms/default_theme/partials/_sidebar.html.erb +3 -3
  120. data/app/views/layouts/camaleon_cms/admin/_footer.html.erb +1 -1
  121. data/config/initializers/action_view.rb +12 -7
  122. data/config/initializers/custom_initializers.rb +6 -12
  123. data/config/locales/camaleon_cms/admin/en.yml +1 -0
  124. data/config/locales/camaleon_cms/admin/es.yml +4 -0
  125. data/config/locales/camaleon_cms/admin/it.yml +1 -24
  126. data/config/locales/camaleon_cms/admin/js.yml +41 -0
  127. data/config/locales/camaleon_cms/admin/{pt_br.yml → pt-BR.yml} +48 -18
  128. data/config/locales/camaleon_cms/common.yml +66 -0
  129. data/config/locales/camaleon_cms/languages.yml +13 -0
  130. data/config/locales/camaleon_cms/routes.yml +2 -2
  131. data/config/routes/admin.rb +3 -0
  132. data/config/system.json +3 -3
  133. data/db/migrate/20160606135421_improve_menus_structure.rb +7 -0
  134. data/db/migrate/20160609121449_add_group_to_custom_field_values.rb +5 -0
  135. data/lib/camaleon_cms/engine.rb +4 -3
  136. data/lib/camaleon_cms/version.rb +1 -1
  137. data/lib/ext/string.rb +20 -0
  138. data/lib/ext/translator.rb +2 -2
  139. data/lib/generators/camaleon_cms/gem_plugin_generator.rb +1 -1
  140. data/lib/generators/camaleon_cms/gem_plugin_template/config/camaleon_plugin.json +1 -1
  141. data/lib/generators/camaleon_cms/install_generator.rb +1 -0
  142. data/lib/generators/camaleon_cms/theme_template/app/apps/themes/my_theme/main_helper.rb +1 -4
  143. data/lib/generators/camaleon_cms/theme_template/app/apps/themes/my_theme/views/index.html.erb +1 -25
  144. data/lib/generators/camaleon_cms/theme_template/app/apps/themes/my_theme/views/layouts/index.html.erb +17 -18
  145. data/lib/plugin_routes.rb +4 -4
  146. metadata +25 -48
  147. data/app/apps/plugins/contact_form/admin_forms_controller.rb +0 -85
  148. data/app/apps/plugins/contact_form/assets/css/admin/form-builder/formbuilder.css +0 -70
  149. data/app/apps/plugins/contact_form/assets/css/contact-form.css +0 -8
  150. data/app/apps/plugins/contact_form/assets/css/front/railsform.scss +0 -94
  151. data/app/apps/plugins/contact_form/assets/css/readme.txt +0 -1
  152. data/app/apps/plugins/contact_form/assets/js/contact_form.js +0 -2
  153. data/app/apps/plugins/contact_form/assets/js/form-builder/formbuilder.js +0 -1271
  154. data/app/apps/plugins/contact_form/assets/js/form-builder/vendor.js +0 -3072
  155. data/app/apps/plugins/contact_form/assets/js/readme.txt +0 -1
  156. data/app/apps/plugins/contact_form/config/config.json +0 -35
  157. data/app/apps/plugins/contact_form/config/custom_models.rb +0 -3
  158. data/app/apps/plugins/contact_form/config/locales/readme.txt +0 -1
  159. data/app/apps/plugins/contact_form/config/locales/translation.yml +0 -315
  160. data/app/apps/plugins/contact_form/config/routes_admin.txt +0 -4
  161. data/app/apps/plugins/contact_form/config/routes_front.txt +0 -2
  162. data/app/apps/plugins/contact_form/contact_form_helper.rb +0 -154
  163. data/app/apps/plugins/contact_form/contact_form_html_helper.rb +0 -140
  164. data/app/apps/plugins/contact_form/front_controller.rb +0 -50
  165. data/app/apps/plugins/contact_form/models/contact_form.rb +0 -26
  166. data/app/apps/plugins/contact_form/views/admin_forms/_form.html.erb +0 -33
  167. data/app/apps/plugins/contact_form/views/admin_forms/edit.html.erb +0 -338
  168. data/app/apps/plugins/contact_form/views/admin_forms/index.html.erb +0 -65
  169. data/app/apps/plugins/contact_form/views/admin_forms/responses.html.erb +0 -60
  170. data/app/apps/plugins/contact_form/views/contact_form/_email_content.html.erb +0 -26
  171. data/app/apps/plugins/contact_form/views/forms_shorcode.html.erb +0 -28
  172. data/app/apps/plugins/contact_form/views/front/index.html.erb +0 -3
  173. data/app/apps/themes/camaleon_first/views/admin/settings.html.erb +0 -4
  174. data/app/apps/themes/new/assets/css/bootstrap/bootstrap.min.css +0 -6735
  175. data/app/apps/themes/new/assets/js/plugins/bootstrap/bootstrap.min.js +0 -6
  176. data/app/apps/themes/new/assets/js/plugins/jquery/jquery.min.js +0 -4
  177. data/lib/generators/camaleon_cms/gem_theme_generator.rb +0 -97
  178. data/lib/generators/camaleon_cms/gem_theme_template/app/assets/images/themes/my_plugin/image.png +0 -0
  179. data/lib/generators/camaleon_cms/gem_theme_template/app/assets/javascripts/themes/my_plugin/main.js +0 -14
  180. data/lib/generators/camaleon_cms/gem_theme_template/app/assets/stylesheets/themes/my_plugin/main.css +0 -13
  181. data/lib/generators/camaleon_cms/gem_theme_template/app/helpers/themes/my_plugin/main_helper.rb +0 -26
  182. data/lib/generators/camaleon_cms/gem_theme_template/app/views/themes/my_plugin/admin/settings.html.erb +0 -4
  183. data/lib/generators/camaleon_cms/gem_theme_template/app/views/themes/my_plugin/index.html.erb +0 -25
  184. data/lib/generators/camaleon_cms/gem_theme_template/app/views/themes/my_plugin/layouts/index.html.erb +0 -70
  185. data/lib/generators/camaleon_cms/gem_theme_template/app/views/themes/my_plugin/partials/readme.txt +0 -1
  186. data/lib/generators/camaleon_cms/gem_theme_template/config/camaleon_theme.json +0 -14
@@ -10,7 +10,7 @@
10
10
  }(this, function (moment) { 'use strict';
11
11
 
12
12
 
13
- var pt_br = moment.defineLocale('pt-br', {
13
+ var pt_br = moment.defineLocale('pt-BR', {
14
14
  months : 'Janeiro_Fevereiro_Março_Abril_Maio_Junho_Julho_Agosto_Setembro_Outubro_Novembro_Dezembro'.split('_'),
15
15
  monthsShort : 'Jan_Fev_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez'.split('_'),
16
16
  weekdays : 'Domingo_Segunda-Feira_Terça-Feira_Quarta-Feira_Quinta-Feira_Sexta-Feira_Sábado'.split('_'),
@@ -42,6 +42,20 @@ $ ->
42
42
  save_menu(data)
43
43
  return false
44
44
 
45
+ # add custom menu items (non-external)
46
+ menu_items_available.find(".add_links_custom_to_menu").click ->
47
+ data = {custom_items: [], authenticity_token: menu_form.find('[name="authenticity_token"]').val()}
48
+ flag =false
49
+ $(this).closest('.panel').find('input:checkbox:checked').each(->
50
+ flag = true
51
+ data['custom_items'].push({url: $(this).val(), label: $(this).attr('data-label')})
52
+ ).prop('checked', false)
53
+
54
+ unless flag
55
+ return false
56
+ save_menu(data)
57
+ return false
58
+
45
59
  # add external link
46
60
  menu_items_available.find('.form-custom-link').submit ->
47
61
  form = $(this)
@@ -65,7 +79,7 @@ $ ->
65
79
  return false
66
80
  showLoading()
67
81
  $.post(form.attr('action'), form.serialize(), (res)->
68
- link.closest('li').replaceWith(res)
82
+ link.closest('li').replaceWith($(res).html())
69
83
  modal.modal("hide")
70
84
  hideLoading()
71
85
  )
@@ -1,4 +1,4 @@
1
- tinymce.addI18n('pt_br',{
1
+ tinymce.addI18n('pt-BR',{
2
2
  "Cut": "Recortar",
3
3
  "Heading 5": "Cabe\u00e7alho 5",
4
4
  "Header 2": "Cabe\u00e7alho 2",
@@ -12,7 +12,7 @@ window["cama_init_media"] = (media_panel) ->
12
12
  "<div class='p_thumb'></div>" +
13
13
  "<div class='p_label'><b>"+I18n("button.name")+": </b><br> <span>"+data["name"]+"</span></div>" +
14
14
  "<div class='p_body'>" +
15
- "<div><b>"+I18n("button.url")+":</b><br> <a target='_blank' href='"+data["url"]+"'>"+data["url"]+"</a></div>" +
15
+ "<div style='overflow: auto;'><b>"+I18n("button.url")+":</b><br> <a target='_blank' href='"+data["url"]+"'>"+data["url"]+"</a></div>" +
16
16
  "<div><b>"+I18n("button.size")+":</b> <span>"+cama_humanFileSize(data["size"])+"</span></div>" +
17
17
  "</div>"
18
18
 
@@ -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"), versions: media_panel.attr("data-versions"), thumb_size: media_panel.attr("data-thumb_size") }
62
+ return cama_media_get_custom_params()
63
63
 
64
64
  p_upload.uploadFile({
65
65
  url: p_upload.attr("data-url"),
@@ -123,7 +123,7 @@ window["cama_init_media"] = (media_panel) ->
123
123
  media_link_tab_upload.click()
124
124
 
125
125
  showLoading()
126
- $.get(media_panel.attr("data-url"), {folder: folder.replace(/\/{2,}/g, '/'), partial: true, media_formats: media_panel.attr("data-formats")}, (res)->
126
+ $.get(media_panel.attr("data-url"), cama_media_get_custom_params({partial: true, folder: folder}), (res)->
127
127
  media_panel.find(".media_browser_list").html(res)
128
128
  hideLoading()
129
129
  )
@@ -137,7 +137,7 @@ window["cama_init_media"] = (media_panel) ->
137
137
  # search file
138
138
  media_panel.find('#cama_search_form').submit ->
139
139
  showLoading()
140
- $.get(media_panel.attr("data-url"), {search: $(this).find('input:text').val(), partial: true, media_formats: media_panel.attr("data-formats")}, (res)->
140
+ $.get(media_panel.attr("data-url"), cama_media_get_custom_params({search: $(this).find('input:text').val(), partial: true}), (res)->
141
141
  media_panel.find(".media_browser_list").html(res)
142
142
  hideLoading()
143
143
  )
@@ -146,7 +146,7 @@ window["cama_init_media"] = (media_panel) ->
146
146
  # reload current directory
147
147
  media_panel.find('.cam_media_reload').click (e)->
148
148
  showLoading()
149
- $.get(media_panel.attr("data-url"), {partial: true, media_formats: media_panel.attr("data-formats"), folder: media_panel.attr("data-folder"), cama_media_reload: $(this).attr('data-action')}, (res)->
149
+ $.get(media_panel.attr("data-url"), cama_media_get_custom_params({partial: true, cama_media_reload: $(this).attr('data-action')}), (res)->
150
150
  media_panel.find(".media_browser_list").html(res)
151
151
  hideLoading()
152
152
  )
@@ -154,7 +154,7 @@ window["cama_init_media"] = (media_panel) ->
154
154
 
155
155
  # element actions
156
156
  media_panel.on("click", "a.add_folder", ->
157
- content = $("<form><div><label for=''>"+I18n('button.folder')+": </label> <div class='input-group'><input name='folder' class='form-control required' placeholder='Folder name..'><span class='input-group-btn'><button class='btn btn-primary' type='submit'>"+I18n('button.create')+"</button></span></div></div> </form>")
157
+ content = $("<form id='add_folder_form'><div><label for=''>"+I18n('button.folder')+": </label> <div class='input-group'><input name='folder' class='form-control required' placeholder='Folder name..'><span class='input-group-btn'><button class='btn btn-primary' type='submit'>"+I18n('button.create')+"</button></span></div></div> </form>")
158
158
  callback = (modal)->
159
159
  btn = modal.find(".btn-primary")
160
160
  input = modal.find("input").keyup(->
@@ -165,7 +165,7 @@ window["cama_init_media"] = (media_panel) ->
165
165
  ).trigger("keyup")
166
166
  modal.find("form").submit ->
167
167
  showLoading()
168
- $.post(media_panel.attr("data-url_actions"), {folder: media_panel.attr("data-folder")+"/"+input.val().replace(/\/{2,}/g, '/'), media_action: "new_folder"}, (res)->
168
+ $.post(media_panel.attr("data-url_actions"), cama_media_get_custom_params({folder: media_panel.attr("data-folder")+"/"+input.val(), media_action: "new_folder"}), (res)->
169
169
  hideLoading()
170
170
  modal.modal("hide")
171
171
  if res.search("folder_item") >= 0 # success upload
@@ -174,7 +174,7 @@ window["cama_init_media"] = (media_panel) ->
174
174
  $.fn.alert({type: 'error', content: res, title: "Error"})
175
175
  )
176
176
  return false
177
- open_modal({title: "New Folder", content: content, callback: callback})
177
+ open_modal({title: "New Folder", content: content, callback: callback, zindex: 9999999})
178
178
  return false
179
179
  )
180
180
 
@@ -185,7 +185,7 @@ window["cama_init_media"] = (media_panel) ->
185
185
  link = $(this)
186
186
  item = link.closest(".media_item")
187
187
  showLoading()
188
- $.post(media_panel.attr("data-url_actions"), {folder: media_panel.attr("data-folder")+"/"+item.attr("data-key").replace(/\/{2,}/g, '/'), media_action: if link.hasClass("del_folder") then "del_folder" else "del_file"}, (res)->
188
+ $.post(media_panel.attr("data-url_actions"), cama_media_get_custom_params({folder: media_panel.attr("data-folder")+"/"+item.attr("data-key"), media_action: if link.hasClass("del_folder") then "del_folder" else "del_file"}), (res)->
189
189
  hideLoading()
190
190
  if res
191
191
  $.fn.alert({type: 'error', content: res, title: I18n("button.error")})
@@ -208,15 +208,26 @@ window["cama_init_media"] = (media_panel) ->
208
208
  return false
209
209
  ).validate()
210
210
 
211
+ # return extra attributes for media panel
212
+ window['cama_media_get_custom_params'] = (custom_settings)->
213
+ media_panel = $("#cama_media_gallery")
214
+ r = eval("("+media_panel.attr('data-extra-params')+")")
215
+ r['folder'] = media_panel.attr("data-folder")
216
+ if custom_settings
217
+ $.extend(r, custom_settings)
218
+ r['folder'] = r['folder'].replace(/\/{2,}/g, '/')
219
+ return r
220
+
211
221
  $ ->
212
222
  # sample: $.fn.upload_url({url: 'http://camaleon.tuzitio.com/media/132/logo2.png', dimension: '120x120', versions: '200x200', folder: 'my_folder', thumb_size: '100x100'})
213
223
  # dimension: default current dimension
214
224
  # folder: default current folder
225
+ # private: (Boolean) if true => list private files
215
226
  $.fn.upload_url = (args)->
216
227
  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"), versions: media_panel.attr("data-versions"), thumb_size: media_panel.attr("data-thumb_size"), onerror: (message) ->
228
+ data = cama_media_get_custom_params({media_action: "crop_url", onerror: (message) ->
218
229
  $.fn.alert({type: 'error', content: message, title: I18n("msg.error_uploading")})
219
- }
230
+ })
220
231
  $.extend(data, args); on_error = data["onerror"]; delete data["onerror"];
221
232
  showLoading()
222
233
  $.post(media_panel.attr("data-url_actions"), data, (res_upload)->
@@ -237,9 +248,10 @@ $ ->
237
248
  # 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
249
  # file structure: {"name":"422.html","size":1547, "url":"http://localhost:3000/media/1/422.html", "format":"doc","type":"text/html"}
239
250
  # dimension: dimension: "30x30" | "x30" | dimension: "30x"
251
+ # private: (boolean) if true => browser private files that are not possible access by public url
240
252
  $.fn.upload_filemanager = (args)->
241
253
  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"], versions: args["versions"], thumb_size: args["thumb_size"] }, callback: (modal)->
254
+ 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"], private: args['private'] }, callback: (modal)->
243
255
  if args["selected"]
244
256
  window["callback_media_uploader"] = args["selected"]
245
257
  modal.css("z-index", args["zindex"] || 99999).children(".modal-dialog").css("width", "90%")
@@ -191,6 +191,15 @@
191
191
  }
192
192
  }
193
193
  }
194
+ .custom_sortable_grouped .header-field-grouped{
195
+ padding: 5px;
196
+ margin-bottom: 3px;
197
+ .fa{
198
+ @include link_round;
199
+ display: inline-block;
200
+ float: none;
201
+ }
202
+ }
194
203
  }
195
204
 
196
205
  //************** Main Header && intro js custom
@@ -30,7 +30,7 @@ body {
30
30
  .wrapper {
31
31
  min-height: 100%;
32
32
  position: relative;
33
- overflow: hidden;
33
+ overflow: visible;
34
34
  }
35
35
  .wrapper:before,
36
36
  .wrapper:after {
@@ -107,6 +107,13 @@ class CamaleonCms::Admin::Appearances::NavMenusController < CamaleonCms::AdminCo
107
107
  items << item
108
108
  end
109
109
 
110
+ if params[:custom_items].present? # custom menu items
111
+ params[:custom_items].each do |index, item|
112
+ item = @nav_menu.append_menu_item({label: item['label'], link: item['url'], type: 'external'})
113
+ items << item
114
+ end
115
+ end
116
+
110
117
  if params[:items].present?
111
118
  params[:items].each do |index, item|
112
119
  item = @nav_menu.append_menu_item({label: 'auto', link: item['id'], type: item['kind']})
@@ -119,19 +126,19 @@ class CamaleonCms::Admin::Appearances::NavMenusController < CamaleonCms::AdminCo
119
126
  private
120
127
  def parse_menu_item(nav_menu_item)
121
128
  begin
122
- case nav_menu_item.get_option('type')
129
+ case nav_menu_item.kind
123
130
  when 'post'
124
- post = CamaleonCms::Post.find(nav_menu_item.get_option('object_id')).decorate
131
+ post = CamaleonCms::Post.find(nav_menu_item.url).decorate
125
132
  return false unless post.status == 'published'
126
133
  {name: post.the_title(locale: @frontend_locale), url_edit: post.the_edit_url }
127
134
  when 'category'
128
- category = CamaleonCms::Category.find(nav_menu_item.get_option('object_id')).decorate
135
+ category = CamaleonCms::Category.find(nav_menu_item.url).decorate
129
136
  {name: category.the_title, url_edit: category.the_edit_url}
130
137
  when 'post_tag'
131
- post_tag = CamaleonCms::PostTag.find(nav_menu_item.get_option('object_id')).decorate
138
+ post_tag = CamaleonCms::PostTag.find(nav_menu_item.url).decorate
132
139
  {name: post_tag.the_title, url_edit: post_tag.the_edit_url}
133
140
  when 'post_type'
134
- post_type = CamaleonCms::PostType.find(nav_menu_item.get_option('object_id')).decorate
141
+ post_type = CamaleonCms::PostType.find(nav_menu_item.url).decorate
135
142
  {name: post_type.the_title, url_edit: post_type.the_edit_url}
136
143
  when 'external'
137
144
  {name: nav_menu_item.name.to_s}
@@ -146,6 +153,6 @@ class CamaleonCms::Admin::Appearances::NavMenusController < CamaleonCms::AdminCo
146
153
  helper_method :parse_menu_item
147
154
 
148
155
  def check_menu_permission
149
- authorize! :manager, :menu
156
+ authorize! :manage, :menu
150
157
  end
151
158
  end
@@ -12,7 +12,7 @@ class CamaleonCms::Admin::Appearances::ThemesController < CamaleonCms::AdminCont
12
12
  def index
13
13
  add_breadcrumb I18n.t("camaleon_cms.admin.sidebar.themes")
14
14
  PluginRoutes.reload
15
- authorize! :manager, :themes
15
+ authorize! :manage, :themes
16
16
  if params[:set].present?
17
17
  site_install_theme(params[:set])
18
18
  flash.now[:notice] = t('camaleon_cms.admin.themes.message.updated')
@@ -43,7 +43,7 @@ class CamaleonCms::Admin::Appearances::Widgets::AssignController < CamaleonCms::
43
43
  end
44
44
 
45
45
  def check_permission_role
46
- authorize! :manager, :widgets
46
+ authorize! :manage, :widgets
47
47
  end
48
48
 
49
49
  end
@@ -58,6 +58,6 @@ class CamaleonCms::Admin::Appearances::Widgets::MainController < CamaleonCms::Ad
58
58
  end
59
59
 
60
60
  def check_permission_role
61
- authorize! :manager, :widgets
61
+ authorize! :manage, :widgets
62
62
  end
63
63
  end
@@ -58,7 +58,7 @@ class CamaleonCms::Admin::Appearances::Widgets::SidebarController < CamaleonCms:
58
58
  end
59
59
 
60
60
  def check_permission_role
61
- authorize! :manager, :widgets
61
+ authorize! :manage, :widgets
62
62
  end
63
63
 
64
64
  end
@@ -92,6 +92,6 @@ class CamaleonCms::Admin::CommentsController < CamaleonCms::AdminController
92
92
  end
93
93
 
94
94
  def validate_role
95
- authorize! :manager, :comments
95
+ authorize! :manage, :comments
96
96
  end
97
97
  end
@@ -7,14 +7,13 @@
7
7
  See the GNU Affero General Public License (GPLv3) for more details.
8
8
  =end
9
9
  class CamaleonCms::Admin::MediaController < CamaleonCms::AdminController
10
- skip_before_filter :cama_authenticate, only: :img
11
- skip_before_filter :admin_logged_actions, except: [:index, :search]
10
+ skip_before_filter :admin_logged_actions, except: [:index, :download_private_file]
12
11
  skip_before_filter :verify_authenticity_token, only: :upload
13
- before_action :init_media_vars
12
+ before_action :init_media_vars, except: :download_private_file
14
13
 
15
14
  # render media section
16
15
  def index
17
- authorize! :manager, :media
16
+ authorize! :manage, :media
18
17
  @show_file_actions = true
19
18
  add_breadcrumb I18n.t("camaleon_cms.admin.sidebar.media")
20
19
  end
@@ -28,6 +27,16 @@ class CamaleonCms::Admin::MediaController < CamaleonCms::AdminController
28
27
  render text: res["url"]
29
28
  end
30
29
 
30
+ # download private files
31
+ def download_private_file
32
+ f_path = CamaleonCmsLocalUploader::private_file_path(params[:file], current_site)
33
+ if File.exist?(f_path)
34
+ send_file f_path, disposition: 'inline'
35
+ else
36
+ raise ActionController::RoutingError, 'File not found'
37
+ end
38
+ end
39
+
31
40
  # render media for modal content
32
41
  def ajax
33
42
  @tree = cama_uploader.search(params[:search]) if params[:search].present?
@@ -40,7 +49,7 @@ class CamaleonCms::Admin::MediaController < CamaleonCms::AdminController
40
49
  # do background actions in fog
41
50
  def actions
42
51
  if params[:media_action] != 'crop_url'
43
- authorize! :manager, :media
52
+ authorize! :manage, :media
44
53
  end
45
54
  params[:folder] = params[:folder].gsub("//", "/") if params[:folder].present?
46
55
  case params[:media_action]
@@ -77,6 +86,7 @@ class CamaleonCms::Admin::MediaController < CamaleonCms::AdminController
77
86
  private
78
87
  # init basic media variables
79
88
  def init_media_vars
89
+ @cama_uploader = CamaleonCmsLocalUploader.new({current_site: current_site, private: true}) if params[:private].present?
80
90
  cama_uploader.clear_cache if params[:cama_media_reload].present? && params[:cama_media_reload] == 'clear_cache'
81
91
  @media_formats = (params[:media_formats] || "").sub("media", ",video,audio").sub("all", "").split(",")
82
92
  @tree = cama_uploader.objects(@folder = params[:folder] || "/")
@@ -53,6 +53,6 @@ class CamaleonCms::Admin::PluginsController < CamaleonCms::AdminController
53
53
  private
54
54
 
55
55
  def validate_role
56
- authorize! :manager, :plugins
56
+ authorize! :manage, :plugins
57
57
  end
58
58
  end
@@ -32,10 +32,7 @@ class CamaleonCms::Admin::Settings::CustomFieldsController < CamaleonCms::Admin:
32
32
  end
33
33
 
34
34
  def update
35
- if @field_group.update(@post_data)
36
- @field_group.add_fields(params[:fields], params[:field_options])
37
- @field_group.set_option('caption', @post_data[:caption])
38
- flash[:notice] = t('camaleon_cms.admin.custom_field.message.custom_updated')
35
+ if @field_group.update(@post_data) && _save_fields(@field_group)
39
36
  redirect_to action: :edit, id: @field_group.id
40
37
  else
41
38
  render 'form'
@@ -51,10 +48,7 @@ class CamaleonCms::Admin::Settings::CustomFieldsController < CamaleonCms::Admin:
51
48
  # create a new custom field group
52
49
  def create
53
50
  @field_group = current_site.custom_field_groups.new(@post_data)
54
- if @field_group.save
55
- @field_group.add_fields(params[:fields], params[:field_options])
56
- @field_group.set_option('caption', @post_data[:caption])
57
- flash[:notice] = t('camaleon_cms.admin.custom_field.message.custom_created')
51
+ if @field_group.save && _save_fields(@field_group)
58
52
  redirect_to action: :edit, id: @field_group.id
59
53
  else
60
54
  new
@@ -92,4 +86,16 @@ class CamaleonCms::Admin::Settings::CustomFieldsController < CamaleonCms::Admin:
92
86
  redirect_to cama_admin_path
93
87
  end
94
88
  end
89
+
90
+ # return boolean: true if all fields were saved successfully
91
+ def _save_fields(group)
92
+ errors_saved, all_fields = group.add_fields(params[:fields], params[:field_options])
93
+ group.set_option('caption', @post_data[:caption])
94
+ if errors_saved.present?
95
+ flash[:error] = "<b>#{t('camaleon_cms.errors_found_msg', default: 'Several errors were found, please check.')}</b><br>#{errors_saved.map{|field| "#{field.name}: " + "#{field.errors.messages.map{|k,v| "#{k.to_s.titleize}: #{v.join('|')}"}.join(', ')}" }.join('<br>')}"
96
+ else
97
+ flash[:notice] = t('camaleon_cms.admin.custom_field.message.custom_updated')
98
+ end
99
+ true
100
+ end
95
101
  end
@@ -7,7 +7,8 @@
7
7
  See the GNU Affero General Public License (GPLv3) for more details.
8
8
  =end
9
9
  class CamaleonCms::Admin::SettingsController < CamaleonCms::AdminController
10
- before_action :validate_role
10
+ before_action :validate_role, except: [:theme, :save_theme]
11
+ before_action :validate_role_theme, only: [:theme, :save_theme]
11
12
  add_breadcrumb I18n.t("camaleon_cms.admin.sidebar.settings")
12
13
 
13
14
  def index
@@ -15,6 +16,7 @@ class CamaleonCms::Admin::SettingsController < CamaleonCms::AdminController
15
16
  end
16
17
 
17
18
  def site
19
+ return redirect_to cama_admin_settings_theme_path if params[:tab].present? && params[:tab] == 'theme'
18
20
  add_breadcrumb I18n.t("camaleon_cms.admin.sidebar.general_site")
19
21
  @site = current_site
20
22
  end
@@ -25,12 +27,7 @@ class CamaleonCms::Admin::SettingsController < CamaleonCms::AdminController
25
27
  @site.set_options(params[:meta]) if params[:meta].present?
26
28
  @site.set_multiple_options(params[:options])
27
29
  @site.set_field_values(params[:field_options])
28
- theme = @site.get_theme.decorate
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?
32
30
  flash[:notice] = t('camaleon_cms.admin.settings.message.site_updated')
33
- hook_run(theme.settings, "on_theme_settings", theme)
34
31
  redirect_to action: :site
35
32
  else
36
33
  render 'site'
@@ -58,9 +55,27 @@ class CamaleonCms::Admin::SettingsController < CamaleonCms::AdminController
58
55
  redirect_to action: :languages
59
56
  end
60
57
 
58
+ def theme
59
+ add_breadcrumb I18n.t("camaleon_cms.admin.settings.theme_setting", default: 'Theme Settings')
60
+ end
61
+
62
+ def save_theme
63
+ current_theme.set_field_values(params[:theme_fields]) if params[:theme_fields].present?
64
+ current_theme.set_options(params[:theme_option]) if params[:theme_option].present?
65
+ current_theme.set_metas(params[:theme_meta]) if params[:theme_meta].present?
66
+ current_theme.set_field_values(params[:field_options])
67
+ hook_run(current_theme.settings, "on_theme_settings", current_theme)# permit to save extra/custom values by this hook
68
+ flash[:notice] = t('camaleon_cms.admin.message.updated_success', default: 'Theme updated successfully')
69
+ redirect_to action: :theme
70
+ end
71
+
61
72
  private
62
73
 
63
74
  def validate_role
64
- authorize! :manager, :settings
75
+ authorize! :manage, :settings
76
+ end
77
+
78
+ def validate_role_theme
79
+ authorize! :manage, :theme_settings
65
80
  end
66
81
  end