camaleon_cms 2.1.2.1 → 2.2.0

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