camaleon_cms 2.9.0 → 2.9.2

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 (116) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +12 -5
  3. data/app/apps/plugins/front_cache/admin_controller.rb +1 -0
  4. data/app/apps/plugins/front_cache/front_cache_helper.rb +23 -14
  5. data/app/apps/plugins/visibility_post/visibility_post_helper.rb +1 -1
  6. data/app/apps/themes/default/views/category.html.erb +1 -1
  7. data/app/apps/themes/default/views/post_tag.html.erb +1 -1
  8. data/app/apps/themes/default/views/post_type.html.erb +1 -1
  9. data/app/apps/themes/default/views/search.html.erb +1 -1
  10. data/app/apps/themes/new/views/category.html.erb +1 -1
  11. data/app/apps/themes/new/views/post_tag.html.erb +1 -1
  12. data/app/apps/themes/new/views/post_type.html.erb +1 -1
  13. data/app/apps/themes/new/views/search.html.erb +1 -1
  14. data/app/controllers/camaleon_cms/admin/appearances/nav_menus_controller.rb +22 -5
  15. data/app/controllers/camaleon_cms/admin/appearances/widgets/assign_controller.rb +4 -2
  16. data/app/controllers/camaleon_cms/admin/appearances/widgets/main_controller.rb +3 -3
  17. data/app/controllers/camaleon_cms/admin/appearances/widgets/sidebar_controller.rb +2 -2
  18. data/app/controllers/camaleon_cms/admin/categories_controller.rb +9 -5
  19. data/app/controllers/camaleon_cms/admin/media_controller.rb +18 -5
  20. data/app/controllers/camaleon_cms/admin/post_tags_controller.rb +7 -4
  21. data/app/controllers/camaleon_cms/admin/posts/drafts_controller.rb +1 -1
  22. data/app/controllers/camaleon_cms/admin/posts_controller.rb +7 -4
  23. data/app/controllers/camaleon_cms/admin/sessions_controller.rb +2 -2
  24. data/app/controllers/camaleon_cms/admin/settings/custom_fields_controller.rb +33 -11
  25. data/app/controllers/camaleon_cms/admin/settings/post_types_controller.rb +13 -4
  26. data/app/controllers/camaleon_cms/admin/settings/sites_controller.rb +7 -4
  27. data/app/controllers/camaleon_cms/admin/settings_controller.rb +7 -4
  28. data/app/controllers/camaleon_cms/admin/user_roles_controller.rb +2 -2
  29. data/app/controllers/camaleon_cms/admin/users_controller.rb +23 -14
  30. data/app/controllers/camaleon_cms/admin_controller.rb +8 -0
  31. data/app/controllers/camaleon_cms/apps/plugins_admin_controller.rb +5 -0
  32. data/app/controllers/concerns/camaleon_cms/admin/custom_fields_concern.rb +29 -0
  33. data/app/decorators/camaleon_cms/post_decorator.rb +1 -1
  34. data/app/decorators/camaleon_cms/user_decorator.rb +1 -1
  35. data/app/helpers/camaleon_cms/admin/application_helper.rb +17 -17
  36. data/app/helpers/camaleon_cms/admin/post_type_helper.rb +25 -22
  37. data/app/helpers/camaleon_cms/comment_helper.rb +74 -40
  38. data/app/helpers/camaleon_cms/frontend/content_select_helper.rb +1 -1
  39. data/app/helpers/camaleon_cms/frontend/nav_menu_helper.rb +7 -7
  40. data/app/helpers/camaleon_cms/html_helper.rb +15 -1
  41. data/app/helpers/camaleon_cms/session_helper.rb +13 -1
  42. data/app/helpers/camaleon_cms/site_helper.rb +16 -3
  43. data/app/helpers/camaleon_cms/uploader_helper.rb +102 -51
  44. data/app/models/camaleon_cms/ability.rb +54 -102
  45. data/app/models/camaleon_cms/category.rb +2 -0
  46. data/app/models/camaleon_cms/custom_field.rb +14 -0
  47. data/app/models/camaleon_cms/custom_field_group.rb +38 -1
  48. data/app/models/camaleon_cms/custom_fields_relationship.rb +1 -1
  49. data/app/models/camaleon_cms/meta.rb +4 -0
  50. data/app/models/camaleon_cms/nav_menu.rb +2 -0
  51. data/app/models/camaleon_cms/nav_menu_item.rb +2 -0
  52. data/app/models/camaleon_cms/plugin.rb +2 -0
  53. data/app/models/camaleon_cms/post.rb +1 -1
  54. data/app/models/camaleon_cms/post_comment.rb +4 -0
  55. data/app/models/camaleon_cms/post_tag.rb +2 -0
  56. data/app/models/camaleon_cms/post_type.rb +3 -1
  57. data/app/models/camaleon_cms/site.rb +2 -0
  58. data/app/models/camaleon_cms/term_taxonomy.rb +1 -23
  59. data/app/models/camaleon_cms/theme.rb +2 -0
  60. data/app/models/camaleon_cms/user_role.rb +13 -0
  61. data/app/models/camaleon_cms/widget/main.rb +2 -0
  62. data/app/models/camaleon_cms/widget/sidebar.rb +2 -0
  63. data/app/models/camaleon_record.rb +40 -0
  64. data/app/models/concerns/camaleon_cms/custom_fields_read.rb +7 -7
  65. data/app/models/concerns/camaleon_cms/metas.rb +10 -6
  66. data/app/models/concerns/camaleon_cms/normalize_attrs.rb +26 -0
  67. data/app/models/concerns/camaleon_cms/user_methods.rb +6 -2
  68. data/app/models/current_request.rb +16 -0
  69. data/app/uploaders/camaleon_cms_aws_uploader.rb +8 -1
  70. data/app/validators/camaleon_cms/post_uniq_validator.rb +21 -8
  71. data/app/views/camaleon_cms/admin/appearances/nav_menus/_left_menu_items.html.erb +2 -2
  72. data/app/views/camaleon_cms/admin/appearances/widgets/main/form.html.erb +1 -1
  73. data/app/views/camaleon_cms/admin/categories/index.html.erb +1 -1
  74. data/app/views/camaleon_cms/admin/comments/index.html.erb +2 -2
  75. data/app/views/camaleon_cms/admin/comments/list.html.erb +1 -1
  76. data/app/views/camaleon_cms/admin/post_tags/index.html.erb +1 -1
  77. data/app/views/camaleon_cms/admin/posts/_sidebar.html.erb +1 -1
  78. data/app/views/camaleon_cms/admin/posts/index.html.erb +3 -3
  79. data/app/views/camaleon_cms/admin/search.html.erb +1 -1
  80. data/app/views/camaleon_cms/admin/settings/custom_fields/_render.html.erb +23 -2
  81. data/app/views/camaleon_cms/admin/settings/custom_fields/fields/_select_eval.html.erb +1 -1
  82. data/app/views/camaleon_cms/admin/settings/custom_fields/form.html.erb +6 -5
  83. data/app/views/camaleon_cms/admin/settings/custom_fields/index.html.erb +1 -1
  84. data/app/views/camaleon_cms/admin/settings/post_types/index.html.erb +1 -1
  85. data/app/views/camaleon_cms/admin/settings/sites/index.html.erb +1 -1
  86. data/app/views/camaleon_cms/admin/user_roles/form.html.erb +79 -5
  87. data/app/views/camaleon_cms/admin/user_roles/index.html.erb +1 -1
  88. data/app/views/camaleon_cms/admin/users/index.html.erb +1 -1
  89. data/app/views/layouts/camaleon_cms/admin/_flash_messages.html.erb +2 -2
  90. data/config/initializers/custom_initializers.rb +2 -2
  91. data/config/locales/camaleon_cms/admin/ar.yml +6 -2
  92. data/config/locales/camaleon_cms/admin/de.yml +6 -2
  93. data/config/locales/camaleon_cms/admin/en.yml +6 -2
  94. data/config/locales/camaleon_cms/admin/es.yml +6 -2
  95. data/config/locales/camaleon_cms/admin/fr.yml +6 -2
  96. data/config/locales/camaleon_cms/admin/it.yml +6 -2
  97. data/config/locales/camaleon_cms/admin/nl.yml +7 -2
  98. data/config/locales/camaleon_cms/admin/pt-BR.yml +6 -2
  99. data/config/locales/camaleon_cms/admin/pt.yml +6 -2
  100. data/config/locales/camaleon_cms/admin/ru.yml +6 -2
  101. data/config/locales/camaleon_cms/admin/uk.yml +6 -2
  102. data/config/locales/camaleon_cms/admin/zh-CH.yml +6 -2
  103. data/db/migrate/20150611161134_post_table_into_utf8.rb +14 -14
  104. data/db/migrate/20150926095310_rename_column_posts.rb +3 -3
  105. data/db/migrate/20151212095328_add_confirm_token_to_users.rb +3 -3
  106. data/db/migrate/20160504155652_add_feature_to_posts.rb +1 -1
  107. data/db/migrate/20160504155653_move_first_name_of_users.rb +2 -2
  108. data/db/migrate/20160609121449_add_group_to_custom_field_values.rb +1 -1
  109. data/db/migrate/20161215202255_drop_user_relationship_table.rb +1 -1
  110. data/db/migrate/20180124132318_create_media.rb +1 -1
  111. data/db/migrate/20180704211100_adjust_field_length.rb +1 -1
  112. data/lib/camaleon_cms/version.rb +1 -1
  113. data/lib/ext/string.rb +3 -3
  114. data/lib/plugin_routes.rb +6 -6
  115. data/lib/tasks/custom_fields_roles.rake +56 -0
  116. metadata +65 -8
@@ -60,10 +60,10 @@
60
60
  <td><%= link_to raw(f.the_status), {action: :index, s: f.status}, class: "cama_ajax_request" %> </td>
61
61
  <td><%= f.author.fullname %></td>
62
62
  <% if @post_type.manage_categories? %>
63
- <td><%= raw post_type_list_taxonomy(f.categories, "success") %></td>
63
+ <td><%= post_type_list_taxonomy(f.categories, "success") %></td>
64
64
  <% end %>
65
65
  <% if @post_type.manage_tags? %>
66
- <td><%= raw post_type_list_taxonomy(f.post_tags, "default") %></td>
66
+ <td><%= post_type_list_taxonomy(f.post_tags, "default") %></td>
67
67
  <% end %>
68
68
  <% extra_column = {post: f, post_type: @post_type, content: "", from_body: true}; hooks_run("list_post_extra_columns", extra_column) %>
69
69
  <%= raw extra_column[:content] %>
@@ -107,6 +107,6 @@
107
107
  </tbody>
108
108
  </table>
109
109
  <%= content_tag("div", raw(t('camaleon_cms.admin.message.data_found_list')), class: "alert alert-warning") if @posts.empty? %>
110
- <%= raw cama_do_pagination(@posts) %>
110
+ <%= cama_do_pagination(@posts) %>
111
111
  </div>
112
112
  </div>
@@ -62,7 +62,7 @@
62
62
  </tbody>
63
63
  </table>
64
64
  <%= content_tag("div", raw(t('camaleon_cms.admin.message.data_found_list')), class: "alert alert-warning") if @items.empty? %>
65
- <%= raw cama_do_pagination(@items, panel_class: "cama_ajax_request") %>
65
+ <%= cama_do_pagination(@items, panel_class: "cama_ajax_request") %>
66
66
  </div>
67
67
  </div>
68
68
  </div>
@@ -23,7 +23,7 @@
23
23
  <%= field.name %>
24
24
  <%= raw "<em class='text-danger'>*</em>" if field.options[:required].to_s.to_bool %>
25
25
  <% if current_site.get_option('custom_fields_show_shortcodes') && ["post", "posttype", "category", "postTag", "site", "user", "navmenu", "theme"].include?(obj_class) %>
26
- <small class="shortcode_field"><br><%= raw cama_shortcode_print("[data field='#{field.slug}' #{"object='#{obj_class}' #{"id='#{record.id}'" if obj_class != "Theme" }" unless record.new_record?}]") %></small>
26
+ <small class="shortcode_field"><br><%= cama_shortcode_print("[data field='#{field.slug}' #{"object='#{obj_class}' #{"id='#{record.id}'" if obj_class != "Theme" }" unless record.new_record?}]") %></small>
27
27
  <% end %>
28
28
  </label>
29
29
  <% if field.description.present? %>
@@ -40,7 +40,28 @@
40
40
  </div>
41
41
  <% end %>
42
42
  </div>
43
- <script> jQuery(function(){ build_custom_field_group(<%= raw(params[:field_options].present? ? (r = []; params[:field_options].each{|k, v| val = {}; v.each{|kk, vv| val["#{kk}"] = (vv['values'].values rescue vv['values']); }; r << val }; r.to_json) : record.get_fields_grouped(fields.pluck(:slug).uniq).to_json) %>, '<%= group.id %>', <%= raw group_field_data.to_json %>, <%= group.is_repeat %>, '<%= field_name %>'); }); </script>
43
+ <%
44
+ field_options_json = if params[:field_options].present?
45
+ params[:field_options].to_unsafe_h.each_with_object([]) do |(_k, v), r|
46
+ r << v.each_with_object({}) do |(kk, vv), val|
47
+ val[kk.to_s] = (vv['values'].values rescue vv['values'])
48
+ end
49
+ end.to_json
50
+ else
51
+ record.get_fields_grouped(fields.pluck(:slug).uniq).to_json
52
+ end
53
+ %>
54
+ <script>
55
+ jQuery(function () {
56
+ build_custom_field_group(
57
+ <%= json_escape(field_options_json).html_safe %>,
58
+ '<%= group.id %>',
59
+ <%= json_escape(group_field_data.to_json).html_safe %>,
60
+ <%= group.is_repeat %>,
61
+ '<%= field_name %>'
62
+ );
63
+ });
64
+ </script>
44
65
  </div>
45
66
  </div>
46
67
  <% if group.is_repeat %>
@@ -1,3 +1,3 @@
1
1
  <div class="group-input-fields-content">
2
- <%= select_tag "#{field_name}[#{field.slug}][values][]", instance_eval(field.options[:command].to_s.strip), class: "form-control input-value #{'required' if field.options[:required].to_s.to_bool}" %>
2
+ <%= select_tag "#{field_name}[#{field.slug}][values][]", instance_eval(field.options[:command].to_s.strip), class: "form-control input-value #{'required' if field.options[:required].to_s.to_bool}" %>
3
3
  </div>
@@ -126,7 +126,11 @@
126
126
  <div class="panel-body padding-0">
127
127
  <% fields = @field_group.new_record? ? [] : @field_group.fields %>
128
128
  <ul id="sortable-fields" class="clear list-unstyled">
129
- <% fields.each do |field| @item_value = field; @item_options_value = field.options; @key = field.options[:field_key] %>
129
+ <% fields.each do |field|
130
+ @item_value = field
131
+ @item_options_value = field.options
132
+ @key = field.options['field_key']
133
+ %>
130
134
  <li class="item">
131
135
  <%= render "get_items" %>
132
136
  </li>
@@ -148,7 +152,7 @@
148
152
  <div class="panel-body">
149
153
  <div id="content-items-default" class="form-group input-group-sm">
150
154
  <% cama_custom_field_elements.each do |i,item| %>
151
- <% next if item[:key] == "select_eval" %>
155
+ <% next if item[:key] == 'select_eval' %>
152
156
  <a id="item-<%= item[:key] %>" class="btn btn-default" href="<%= get_items_cama_admin_settings_custom_fields_path(item[:key]) %>" style="margin-bottom: 4px"><%= item[:label] %></a>
153
157
  <% end %>
154
158
  </div>
@@ -162,6 +166,3 @@
162
166
  <% end %>
163
167
  </div>
164
168
  </div>
165
-
166
-
167
-
@@ -44,7 +44,7 @@
44
44
  </tbody>
45
45
  </table>
46
46
  <%= content_tag("div", raw(t('camaleon_cms.admin.message.data_found_list')), class: "alert alert-warning") if @field_groups.empty? %>
47
- <%= raw cama_do_pagination(@field_groups) %>
47
+ <%= cama_do_pagination(@field_groups) %>
48
48
  </div>
49
49
  </div>
50
50
  <!-- END BASIC TABLE SAMPLE -->
@@ -42,7 +42,7 @@
42
42
  </tbody>
43
43
  </table>
44
44
  <%= content_tag("div", raw(t('camaleon_cms.admin.message.data_found_list')), class: "alert alert-warning") if @post_types.empty? %>
45
- <%= raw cama_do_pagination(@post_types) %>
45
+ <%= cama_do_pagination(@post_types) %>
46
46
  </div>
47
47
  </div>
48
48
  <!-- END BASIC TABLE SAMPLE -->
@@ -50,7 +50,7 @@
50
50
  </tbody>
51
51
  </table>
52
52
  <%= content_tag("div", raw(t('camaleon_cms.admin.message.data_found_list')), class: "alert alert-warning") if @sites.empty? %>
53
- <%= raw cama_do_pagination(@sites) %>
53
+ <%= cama_do_pagination(@sites) %>
54
54
  </div>
55
55
  </div>
56
56
  <!-- END BASIC TABLE SAMPLE -->
@@ -61,12 +61,12 @@
61
61
  </div>
62
62
 
63
63
  <div class="">
64
- <h5><%= t('camaleon_cms.admin.users.others_permissions')%></h5>
64
+ <h5><%= t('camaleon_cms.admin.users.other_permissions')%></h5>
65
65
  <div class="row">
66
66
  <% values = rol_values_manager || {} %>
67
67
  <% cama_get_roles_values[:manager].each do |value| %>
68
68
  <div class="col-md-4">
69
- <label><input type="checkbox" name="rol_values[manager][<%= value[:key] %>]" value="1" <%= "checked" if values[value[:key].to_sym].present? %> <%= "disabled" unless @user_role.editable? %> >&nbsp; <%= raw value[:label] %></label>
69
+ <label><input type="checkbox" name="rol_values[manager][<%= value[:key] %>]" value="1" <%= "checked" if values[value[:key].to_sym].present? %> <%= "disabled" unless @user_role.editable? %> <%= 'data-danger-select-eval=1' if value[:key].to_s == 'select_eval' %> >&nbsp; <%= raw value[:label] %></label>
70
70
  &nbsp;<%= raw cama_html_tooltip(value[:description], 'right') if value[:description].present? %>
71
71
  </div>
72
72
  <% end %>
@@ -119,20 +119,94 @@
119
119
  <!-- END PAGE CONTENT WRAPPER -->
120
120
  </div>
121
121
 
122
+ <div class="modal fade" id="select-eval-danger-modal" tabindex="-1" role="dialog" aria-labelledby="select-eval-danger-modal-title" aria-hidden="true">
123
+ <div class="modal-dialog" role="document">
124
+ <div class="modal-content">
125
+ <div class="modal-header">
126
+ <button type="button" class="close" data-dismiss="modal" aria-label="<%= t('camaleon_cms.admin.button.cancel') %>">
127
+ <span aria-hidden="true">&times;</span>
128
+ </button>
129
+ <h4 class="modal-title" id="select-eval-danger-modal-title"><%= t('camaleon_cms.admin.users.select_eval_modal.title') %></h4>
130
+ </div>
131
+ <div class="modal-body">
132
+ <p><%= t('camaleon_cms.admin.users.select_eval_modal.description') %></p>
133
+ </div>
134
+ <div class="modal-footer">
135
+ <button type="button" class="btn btn-default" data-role="select-eval-cancel" data-dismiss="modal"><%= t('camaleon_cms.admin.button.cancel') %></button>
136
+ <button type="button" class="btn btn-danger" data-role="select-eval-confirm"><%= t('camaleon_cms.admin.button.accept') %></button>
137
+ </div>
138
+ </div>
139
+ </div>
140
+ </div>
141
+
122
142
  <script>
123
143
  jQuery(function($){
144
+ var pendingDangerSelectEval = null
145
+ var pendingDangerSelectEvalConfirmed = false
146
+ var $allCheckboxes = $("#contents-checkbox input[type='checkbox']")
147
+ var $selectEvalCheckbox = $("#contents-checkbox input[data-danger-select-eval='1']")
148
+ var $selectEvalModal = $("#select-eval-danger-modal")
149
+
150
+ function openSelectEvalDangerModal(checkbox){
151
+ pendingDangerSelectEval = checkbox
152
+ pendingDangerSelectEvalConfirmed = false
153
+ checkbox.prop("checked", false)
154
+ $selectEvalModal.modal("show")
155
+ }
156
+
157
+ function shouldWarnForSelectEvalEnable(wasChecked){
158
+ return $selectEvalCheckbox.length && !$selectEvalCheckbox.prop("disabled") && !wasChecked
159
+ }
160
+
124
161
  $("#contents-checkbox input:checked").each(function(){$(this).attr("data-checked", 1)})
162
+
163
+ $("#contents-checkbox").on("change", "input[data-danger-select-eval='1']", function(){
164
+ if($(this).prop("checked")){
165
+ openSelectEvalDangerModal($(this))
166
+ }
167
+ })
168
+
169
+ $selectEvalModal.find("[data-role='select-eval-confirm']").on("click", function(){
170
+ if(pendingDangerSelectEval){
171
+ pendingDangerSelectEval.prop("checked", true)
172
+ pendingDangerSelectEvalConfirmed = true
173
+ }
174
+ $selectEvalModal.modal("hide")
175
+ })
176
+
177
+ $(document).on("keydown", function(event){
178
+ if(event.which === 27 && $selectEvalModal.hasClass("in")){
179
+ $selectEvalModal.modal("hide")
180
+ }
181
+ })
182
+
183
+ $selectEvalModal.on("hidden.bs.modal", function(){
184
+ if(pendingDangerSelectEval && !pendingDangerSelectEvalConfirmed){
185
+ pendingDangerSelectEval.prop("checked", false)
186
+ }
187
+ pendingDangerSelectEval = null
188
+ pendingDangerSelectEvalConfirmed = false
189
+ })
190
+
125
191
  $("#checked-actions a[data-type]").click(function(){
126
192
  switch ($(this).attr("data-type")){
127
193
  case 'all':
128
- $("#contents-checkbox input[type='checkbox']").prop('checked', true);
194
+ var wasSelectEvalChecked = $selectEvalCheckbox.prop('checked');
195
+ $allCheckboxes.prop('checked', true);
196
+ if(shouldWarnForSelectEvalEnable(wasSelectEvalChecked)){
197
+ openSelectEvalDangerModal($selectEvalCheckbox)
198
+ }
129
199
  break;
130
200
  case 'none':
131
- $("#contents-checkbox input[type='checkbox']").prop('checked', false);
201
+ $allCheckboxes.prop('checked', false);
132
202
  break;
133
203
  case 'restore':
134
- $("#contents-checkbox input[type='checkbox']").prop('checked', false);
204
+ var wasSelectEvalCheckedBeforeRestore = $selectEvalCheckbox.prop('checked');
205
+ $allCheckboxes.prop('checked', false);
135
206
  $("#contents-checkbox input[data-checked]").prop('checked', true);
207
+ if(shouldWarnForSelectEvalEnable(wasSelectEvalCheckedBeforeRestore) && $selectEvalCheckbox.is("[data-checked]")){
208
+ openSelectEvalDangerModal($selectEvalCheckbox)
209
+ }
136
210
  break;
137
211
  }
138
212
  return false;
@@ -45,7 +45,7 @@
45
45
  </tbody>
46
46
  </table>
47
47
  <%= content_tag("div", raw(t('camaleon_cms.admin.message.data_found_list')), class: "alert alert-warning") if @user_roles.empty? %>
48
- <%= raw cama_do_pagination(@user_roles) %>
48
+ <%= cama_do_pagination(@user_roles) %>
49
49
 
50
50
  </div>
51
51
 
@@ -53,7 +53,7 @@
53
53
  </tbody>
54
54
  </table>
55
55
  <%= content_tag("div", raw(t('camaleon_cms.admin.message.data_found_list')), class: "alert alert-warning") if @users.empty? %>
56
- <%= raw cama_do_pagination(@users) %>
56
+ <%= cama_do_pagination(@users) %>
57
57
  </div>
58
58
  </div>
59
59
  <!-- END BASIC TABLE SAMPLE -->
@@ -6,11 +6,11 @@
6
6
  </div>
7
7
  </div>
8
8
  <% end %>
9
- <% if params[:info] %>
9
+ <% if flash[:info].present? %>
10
10
  <div class="flash_messages">
11
11
  <div class="alert alert-info">
12
12
  <button type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">&times;</span></button>
13
- <%= raw(params[:info]) %>
13
+ <%= flash[:info] %>
14
14
  </div>
15
15
  </div>
16
16
  <% end %>
@@ -4,10 +4,10 @@ Rails.application.config.to_prepare do |_config|
4
4
  next unless ap['path'].present?
5
5
 
6
6
  f = File.join(ap['path'], 'config', 'initializer.rb')
7
- eval(File.read(f)) if File.exist?(f)
7
+ load f if File.exist?(f)
8
8
 
9
9
  f = File.join(ap['path'], 'config', 'custom_models.rb')
10
- eval(File.read(f)) if File.exist?(f)
10
+ load f if File.exist?(f)
11
11
  end
12
12
 
13
13
  # This block can be overridden in the app initializer to wrap the sleep and delete_file in an async job,
@@ -587,7 +587,10 @@ ar:
587
587
  requires_different_email: 'Requires different email'
588
588
  created_pending_validate_email: "The user has been created, please confirm your email"
589
589
  new_photo: 'New Photo'
590
- others_permissions: 'Others permissions'
590
+ other_permissions: 'Others permissions'
591
+ select_eval_modal:
592
+ title: 'صلاحية خطيرة'
593
+ description: 'صلاحية select_eval تسمح بتنفيذ كود ديناميكي من خيارات الحقول المخصصة. تفعيلها قد يؤدي الى تنفيذ كود عشوائي، كشف البيانات، والسيطرة الكاملة على الموقع عند تقييم محتوى غير موثوق.'
591
594
  profile: 'Profile'
592
595
  slogan: 'Slogan'
593
596
  type_contents: 'Type of Contents'
@@ -613,7 +616,7 @@ ar:
613
616
  media: 'Permission to the midsection'
614
617
  publish: 'You need permits Create or Edit, Edit Other, Edit, Publish, to enable this permission'
615
618
  themes: 'Themes permission to section'
616
- widgets: 'Widgets permission to section'
619
+ widgets: 'Allow editing widgets, including saving unsanitized code.'
617
620
  menus: 'Permission to the Menu section'
618
621
  plugins: 'Permission to the Plugins section'
619
622
  users: 'Permission to create, edit, delete Users'
@@ -664,6 +667,7 @@ ar:
664
667
  error_created: "No created sidebar."
665
668
  error_updated: "No Update sidebar."
666
669
  error_deleted: "Sidebar deleted."
670
+ warning: "Warning: Widgets can store unsanitized HTML and Javascript. Only enter code that you understand and trust."
667
671
  intro:
668
672
  profile: "In this place you can see your profile options."
669
673
  content: "This block contains all content groups of your site. Each content can have different structure configured in settings => Content Groups"
@@ -586,7 +586,10 @@ de:
586
586
  requires_different_email: 'Erfordert eine andere Email'
587
587
  created_pending_validate_email: 'Der Benutzer wurde erstellt, bitte bestätige deine Email.'
588
588
  new_photo: 'Neues Bild'
589
- others_permissions: 'Rechte Anderer'
589
+ other_permissions: 'Rechte Anderer'
590
+ select_eval_modal:
591
+ title: 'Gefahrliche Berechtigung'
592
+ description: 'Die Berechtigung select_eval erlaubt die Ausfuhrung von dynamischem Code aus Optionen benutzerdefinierter Felder. Das Aktivieren kann zu beliebiger Codeausfuhrung, Datenoffenlegung und einer vollstandigen Kompromittierung der Website fuhren, wenn nicht vertrauenswurdige Inhalte ausgewertet werden.'
590
593
  profile: 'Profil'
591
594
  slogan: 'Slogan'
592
595
  type_contents: 'Art der Inhalte'
@@ -612,7 +615,7 @@ de:
612
615
  media: 'Rechte für den Mittelbereich'
613
616
  publish: 'Du benötigst die Rechte Erstellen oder Verarbeiten, Andere Bearbeiten, Bearbeiten, Veröffentlichen, um dieses Recht zu aktivieren'
614
617
  themes: 'Recht für den Themes-Bereich'
615
- widgets: 'Widgets-Recht für den Bereich'
618
+ widgets: 'Ermöglichen Sie die Bearbeitung von Widgets, einschließlich des Speicherns von nicht bereinigtem Code.'
616
619
  menus: 'Recht für den Menübereich'
617
620
  plugins: 'Recht für den Plugin-Bereich'
618
621
  users: 'Recht zum Erstellen, Bearbeiten und Löschen von Benutzern'
@@ -663,6 +666,7 @@ de:
663
666
  error_created: 'Fehler beim Erstellen der Sidebar.'
664
667
  error_updated: 'Fehler beim Aktualisieren der Sidebar.'
665
668
  error_deleted: 'Fehler beim Löschen der Sidebar.'
669
+ warning: "Warnung: Widgets können nicht bereinigtes HTML und Javascript speichern. Geben Sie nur Code ein, den Sie verstehen und dem Sie vertrauen."
666
670
  intro:
667
671
  profile: 'Hier kannst du Einstellungen für dein Profil vornehmen.'
668
672
  content: 'Dieser Block enthält die Inhaltsgruppen deiner Seite. Jeder Inhalt kann auf verschiedene Weise konfiguriert werden. Siehe Einstellungen => Inhaltsgruppen'
@@ -640,7 +640,10 @@ en:
640
640
  role_can_not_be_deleted: Role can not be deleted
641
641
  user_can_not_delete_own_account: You cannot delete your own account
642
642
  new_photo: 'New Photo'
643
- others_permissions: 'Others permissions'
643
+ other_permissions: 'Other permissions'
644
+ select_eval_modal:
645
+ title: 'Dangerous Permission'
646
+ description: 'The select_eval permission allows execution of dynamic code from custom field options. Enabling it can lead to arbitrary code execution, data exposure, and full site compromise if untrusted content is evaluated.'
644
647
  profile: 'Profile'
645
648
  slogan: 'Slogan'
646
649
  type_contents: 'Type of Contents'
@@ -666,7 +669,7 @@ en:
666
669
  media: 'Permission to the midsection'
667
670
  publish: 'You need permits Create or Edit, Edit Other, Edit, Publish, to enable this permission'
668
671
  themes: 'Themes permission to section'
669
- widgets: 'Widgets permission to section'
672
+ widgets: 'Allow editing widgets, including saving unsanitized code.'
670
673
  menus: 'Permission to the Menu section'
671
674
  plugins: 'Permission to the Plugins section'
672
675
  users: 'Permission to create, edit, delete Users'
@@ -728,6 +731,7 @@ en:
728
731
  error_created: "No created sidebar."
729
732
  error_updated: "No Update sidebar."
730
733
  error_deleted: "Sidebar deleted."
734
+ warning: "Warning: Widgets can store unsanitized HTML and Javascript. Only enter code that you understand and trust."
731
735
  intro:
732
736
  profile: "In this place you can see your profile options."
733
737
  content: "This block contains all content groups of your site. Each content can have different structure configured in settings => Content Groups"
@@ -561,7 +561,10 @@ es:
561
561
  requires_different_email: 'Requiere diferente correo electrónico'
562
562
  created_pending_validate_email: 'El usuario ha sido creado, por favor confirma tu email'
563
563
  new_photo: 'Nueva Fotografía'
564
- others_permissions: 'Otros permisos'
564
+ other_permissions: 'Otros permisos'
565
+ select_eval_modal:
566
+ title: 'Permiso peligroso'
567
+ description: 'El permiso select_eval permite ejecutar codigo dinamico desde opciones de campos personalizados. Al habilitarlo, puede provocar ejecucion arbitraria de codigo, exposicion de datos y compromiso total del sitio si se evalua contenido no confiable.'
565
568
  profile: 'Perfil'
566
569
  slogan: 'Eslogan'
567
570
  type_contents: 'Tipo de Contenidos'
@@ -587,7 +590,7 @@ es:
587
590
  media: 'Permiso a la seccion Media'
588
591
  publish: 'Necesitas tener los permisos de Crear o Editar, Editar Otros, Editar Publicar, para habilitar este permiso'
589
592
  themes: 'Permiso a la seccion Plantillas'
590
- widgets: 'Permiso a la seccion Widgets'
593
+ widgets: 'Permitir la edición de widgets, incluido el almacenamiento de código sin desinfectar.'
591
594
  menus: 'Permiso a la seccion Menu'
592
595
  plugins: 'Permiso a la seccion Plugins'
593
596
  users: 'Permiso para crear, editar, eliminar Usuarios'
@@ -629,6 +632,7 @@ es:
629
632
  error_created: 'No se ha creado el Widget.'
630
633
  error_updated: 'No se ha actualizado el Widget.'
631
634
  not_registered_widgets: 'No existen widgets registrados'
635
+ warning: "Advertencia: Los widgets pueden almacenar HTML y Javascript sin desinfectar. Ingrese solo el código que comprenda y en el que confíe."
632
636
  appearances:
633
637
  nav_menus:
634
638
  menu_items:
@@ -567,7 +567,10 @@ fr:
567
567
  requires_different_email: 'Un email différent est requis'
568
568
  created_pending_validate_email: "L'utilisateur a été créé, veuillez confirmer votre email"
569
569
  new_photo: 'Nouvelle photo'
570
- others_permissions: 'Autres permissions'
570
+ other_permissions: 'Autres permissions'
571
+ select_eval_modal:
572
+ title: 'Permission dangereuse'
573
+ description: 'La permission select_eval autorise l execution de code dynamique depuis les options des champs personnalises. Son activation peut entrainer l execution de code arbitraire, l exposition de donnees et la compromission complete du site si du contenu non fiable est evalue.'
571
574
  profile: 'Profil'
572
575
  slogan: 'Slogan'
573
576
  type_contents: 'Type de contenus'
@@ -593,7 +596,7 @@ fr:
593
596
  media: 'Permission pour la section média'
594
597
  publish: 'Permissions Créer ou Editer, Editer autre, Editer, Publier, requises pour activer cette permission'
595
598
  themes: 'Permission pour la section thèmes'
596
- widgets: 'Permission pour la section widgets'
599
+ widgets: "Autoriser la modification des widgets, y compris l'enregistrement de code non nettoyé."
597
600
  menus: 'Permission pour la section menus'
598
601
  plugins: 'Permission pour la section plugins'
599
602
  users: 'Permission de créer, éditer et supprimer des utilisateurs'
@@ -644,6 +647,7 @@ fr:
644
647
  error_created: "Sidebar non créée."
645
648
  error_updated: "Sidebar non mise à jour."
646
649
  error_deleted: "Sidebar supprimée."
650
+ warning: "Attention : les widgets peuvent stocker du HTML et du Javascript non nettoyés. Entrez uniquement du code que vous comprenez et auquel vous faites confiance."
647
651
  intro:
648
652
  profile: "Ici vous pouvez voir les options de votre profil."
649
653
  content: "Ce bloc contient tout les groupes de contenu de votre site. Chaque contenu peut avoir une structure différente configurable via Paramètres => Groupes de contenu"
@@ -565,7 +565,10 @@ it:
565
565
  requires_different_username: 'Inserisci uno username diverso'
566
566
  requires_different_email: 'Inserisci una email diversa'
567
567
  new_photo: 'Nuova foto'
568
- others_permissions: 'Altri permessi'
568
+ other_permissions: 'Altri permessi'
569
+ select_eval_modal:
570
+ title: 'Permesso pericoloso'
571
+ description: 'Il permesso select_eval consente l esecuzione di codice dinamico dalle opzioni dei campi personalizzati. Se abilitato, puo causare esecuzione arbitraria di codice, esposizione dei dati e compromissione completa del sito quando viene valutato contenuto non attendibile.'
569
572
  profile: 'Profilo'
570
573
  slogan: 'Slogan'
571
574
  type_contents: 'Tipi di contenuti'
@@ -591,7 +594,7 @@ it:
591
594
  media: 'Permesso per la midsection'
592
595
  publish: 'Devi abilitare Crea o Modifica, Modifica Altro, Modifica, Pubblica, per abilitare questi permessi'
593
596
  themes: 'Permessi per la sezione temi'
594
- widgets: 'Permessi per la sezione widget'
597
+ widgets: 'Consenti la modifica dei widget, incluso il salvataggio di codice non disinfettato.'
595
598
  menus: 'Permessi per la sezione menù'
596
599
  plugins: 'Permessi per la sezione plugin'
597
600
  users: 'Permesso di creare, modificare e cancellare utenti'
@@ -633,3 +636,4 @@ it:
633
636
  error_created: 'Widget non creato.'
634
637
  error_updated: 'Widget non aggiornato.'
635
638
  not_registered_widgets: 'Non ci sono widget registrati'
639
+ warning: "Attenzione: i widget possono memorizzare HTML e Javascript non sanificati. Inserisci solo il codice che comprendi e di cui ti fidi."
@@ -563,7 +563,10 @@ nl:
563
563
  requires_different_email: 'Andere e-mail verplicht'
564
564
  created_pending_validate_email: "Gebruiker is aangemaakt, bevestig uw e-mail"
565
565
  new_photo: 'Nieuwe foto'
566
- others_permissions: 'Andere rechten'
566
+ other_permissions: 'Andere rechten'
567
+ select_eval_modal:
568
+ title: 'Gevaarlijke toestemming'
569
+ description: 'De toestemming select_eval staat het uitvoeren van dynamische code toe vanuit opties van aangepaste velden. Inschakelen kan leiden tot willekeurige code-uitvoering, blootstelling van gegevens en volledige compromittering van de site als niet-vertrouwde inhoud wordt ge-evalueerd.'
567
570
  profile: 'Profiel'
568
571
  slogan: 'Slogan'
569
572
  type_contents: 'Type inhoud'
@@ -589,7 +592,7 @@ nl:
589
592
  media: 'Toegang tot media'
590
593
  publish: 'Je hebt de volgende rechten toevoegen en bewerken, bewerk andere, bewerk gepubliceerd nodig om dit aan te passen'
591
594
  themes: "Toegang tot thema's"
592
- widgets: 'Toegang tot widgets'
595
+ widgets: 'Sta het bewerken van widgets toe, inclusief het opslaan van niet-opgeschoonde code.'
593
596
  menus: "Toegang tot menu's"
594
597
  plugins: 'Toegang tot plugins'
595
598
  users: 'Rechten om gebruikers aan te maken, te bewerken of te verwijderen'
@@ -640,6 +643,8 @@ nl:
640
643
  error_created: "FOUT! Sidebar is niet aangemaakt."
641
644
  error_updated: "FOUT! Sidebar is niet bijgewerkt."
642
645
  error_deleted: "Sidebar verwijderd."
646
+ warning: "Waarschuwing: Widgets kunnen niet-opgeschoonde HTML en Javascript opslaan. Voer alleen code in die u begrijpt en vertrouwt."
647
+
643
648
  intro:
644
649
  profile: "Hier kun je profiel opties bekijken."
645
650
  content: "Dit blok bevat alle inhoud types van uw site. Elk inhoud type kan in een andere structuur geconfigureerd worden in instellingen => Inhoud type's hebben"
@@ -555,7 +555,10 @@ pt-BR:
555
555
  requires_different_username: 'Requer usuário diferente'
556
556
  requires_different_email: 'Requer email diferente'
557
557
  new_photo: 'Nova foto'
558
- others_permissions: 'Outras permissões'
558
+ other_permissions: 'Outras permissões'
559
+ select_eval_modal:
560
+ title: 'Permissao perigosa'
561
+ description: 'A permissao select_eval permite executar codigo dinamico a partir das opcoes de campos personalizados. Ao habilitar, pode causar execucao arbitraria de codigo, exposicao de dados e comprometimento total do site caso conteudo nao confiavel seja avaliado.'
559
562
  profile: 'Perfil'
560
563
  slogan: 'Slogan'
561
564
  type_contents: 'TIpo de conteúdos'
@@ -581,7 +584,7 @@ pt-BR:
581
584
  media: 'Permissão para o meio'
582
585
  publish: 'Você precisa permitir Criar ou Editar, Editar Outro, Editar, Publicar , para habilitar esta permissão'
583
586
  themes: 'Permissão para a seção Temas'
584
- widgets: 'Permissão para a seção Widgets'
587
+ widgets: 'Permitir a edição de widgets, incluindo salvar código não higienizado.'
585
588
  menus: 'Permissão para a seção Menu'
586
589
  plugins: 'Permissão para a seção Plugins'
587
590
  users: 'Permissão to criar, editar, excluir Usuários'
@@ -623,6 +626,7 @@ pt-BR:
623
626
  error_created: 'Nenhum Widget criado.'
624
627
  error_updated: 'Nenhum Widget atualizado.'
625
628
  not_registered_widgets: 'Não há widgets registrados'
629
+ warning: "Aviso: Os widgets podem armazenar HTML e Javascript não higienizados. Insira apenas o código que você entende e confia."
626
630
  intro:
627
631
  profile: "Neste lugar você pode ver suas opções de perfis."
628
632
  content: "Este bloco contém todo o grupo de conteúdo de seu site. Cada conteúdo pode ter uma estrutura diferente configurada em Configurações => Grupos de conteúdo"
@@ -553,7 +553,10 @@ pt:
553
553
  requires_different_username: 'Requer utilizador diferente'
554
554
  requires_different_email: 'Requer email diferente'
555
555
  new_photo: 'Nova foto'
556
- others_permissions: 'Outras permissões'
556
+ other_permissions: 'Outras permissões'
557
+ select_eval_modal:
558
+ title: 'Permissao perigosa'
559
+ description: 'A permissao select_eval permite executar codigo dinamico a partir das opcoes dos campos personalizados. Ao ativar, pode causar execucao arbitraria de codigo, exposicao de dados e comprometimento total do site se conteudo nao confiavel for avaliado.'
557
560
  profile: 'Perfil'
558
561
  slogan: 'Slogan'
559
562
  type_contents: 'TIpo de conteúdos'
@@ -579,7 +582,7 @@ pt:
579
582
  media: 'Permissão para o meio'
580
583
  publish: 'Permissão para Criar ou Editar, Editar Outro, Editar, Publicar, para habilitar esta permissão'
581
584
  themes: 'Permissão para a secção Temas'
582
- widgets: 'Permissão para a secção Widgets'
585
+ widgets: 'Permite a edição de widgets, incluindo salvar código não higienizado.'
583
586
  menus: 'Permissão para a secção Menu'
584
587
  plugins: 'Permissão para a secção Plugins'
585
588
  users: 'Permissão para criar, editar, apagar utilizadores'
@@ -621,6 +624,7 @@ pt:
621
624
  error_created: 'Nenhum Widget criado.'
622
625
  error_updated: 'Nenhum Widget atualizado.'
623
626
  not_registered_widgets: 'Não há widgets registados'
627
+ warning: "Aviso: Os widgets podem armazenar HTML e Javascript não higienizados. Introduza apenas o código que compreende e em que confia."
624
628
  intro:
625
629
  profile: "Neste lugar pode ver suas opções de perfis."
626
630
  content: "Este bloco contém todo o grupo de conteúdo de seu site. Cada conteúdo pode ter uma estrutura diferente configurada em Configurações => Grupos de conteúdo"
@@ -574,7 +574,10 @@ ru:
574
574
  requires_different_email: 'Требуется другая эл. почта'
575
575
  created_pending_validate_email: "Пользователь был создан, пожалуйста, подтвердите вашу электронную почту"
576
576
  new_photo: 'Новая фотография'
577
- others_permissions: 'Другие разрешения'
577
+ other_permissions: 'Другие разрешения'
578
+ select_eval_modal:
579
+ title: 'Опасное право доступа'
580
+ description: 'Поле типа select_eval позволяет выполнять динамический код из параметров, введённых пользователем. Это может привести к произвольному выполнению кода, утечке данных (в том числе паролей и ключей авторизации) и полной компрометации сайта. Включайте это правл доступа только для доверенных пользователей!'
578
581
  profile: 'Профиль'
579
582
  slogan: 'Слоган'
580
583
  type_contents: 'Тип контента'
@@ -600,7 +603,7 @@ ru:
600
603
  media: 'Permission to the midsection'
601
604
  publish: 'Вам требуется разрешение на Создание, Редактирование, Редактирование других или Опубликовать чтобы включить это разрешение'
602
605
  themes: 'Разрешение тем на раздел'
603
- widgets: 'Разрешение виджетов на раздел'
606
+ widgets: 'Разрешите редактирование виджетов, в том числе сохранение неочищенного кода.'
604
607
  menus: 'Разрешение на раздел Меню'
605
608
  plugins: 'Разрешение на раздел Плагинов'
606
609
  users: 'Разрешение на создание, редактирование и удаление Пользователей'
@@ -651,6 +654,7 @@ ru:
651
654
  error_created: "Боковая панель не создана."
652
655
  error_updated: "Боковая панель не обновлена."
653
656
  error_deleted: "Боковая панель удалена."
657
+ warning: "Предупреждение: Виджеты могут хранить неочищенный HTML и Javascript. Вводите только тот код, который вы понимаете и которому доверяете."
654
658
  intro:
655
659
  profile: "Здесь вы можете увидеть настройки вашего профиля."
656
660
  content: "Этот блок содержит все группы контента вашего сайта. Каждый контент может иметь различную структуру, их можно настроить в Настройки => Группа контентов"