decidim-decidim_awesome 0.11.2 → 0.11.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (92) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +11 -0
  3. data/README.md +54 -2
  4. data/app/cells/concerns/decidim/decidim_awesome/proposal_l_cell_override.rb +5 -3
  5. data/app/cells/decidim/decidim_awesome/content_blocks/map_cell.rb +0 -4
  6. data/app/cells/decidim/decidim_awesome/voting/proposal_metadata_cell.rb +18 -3
  7. data/app/commands/concerns/decidim/decidim_awesome/proposals/create_proposal_override.rb +2 -2
  8. data/app/commands/concerns/decidim/decidim_awesome/system/register_organization_override.rb +29 -0
  9. data/app/commands/concerns/decidim/decidim_awesome/system/update_organization_override.rb +35 -0
  10. data/app/commands/concerns/decidim/decidim_awesome/update_account_override.rb +30 -0
  11. data/app/commands/decidim/decidim_awesome/admin/create_scoped_style.rb +3 -2
  12. data/app/commands/decidim/decidim_awesome/admin/destroy_scoped_style.rb +6 -4
  13. data/app/controllers/concerns/decidim/decidim_awesome/check_login_authorizations.rb +60 -0
  14. data/app/controllers/concerns/decidim/decidim_awesome/needs_awesome_config.rb +0 -2
  15. data/app/controllers/concerns/decidim/decidim_awesome/proposals/memoize_extra_fields.rb +23 -0
  16. data/app/controllers/concerns/decidim/decidim_awesome/use_user_time_zone.rb +32 -0
  17. data/app/controllers/decidim/decidim_awesome/admin/admin_authorizations_controller.rb +122 -0
  18. data/app/controllers/decidim/decidim_awesome/admin/checks_controller.rb +1 -1
  19. data/app/controllers/decidim/decidim_awesome/admin/config_controller.rb +7 -1
  20. data/app/controllers/decidim/decidim_awesome/admin/constraints_controller.rb +5 -1
  21. data/app/controllers/decidim/decidim_awesome/admin/scoped_styles_controller.rb +12 -4
  22. data/app/controllers/decidim/decidim_awesome/required_authorizations_controller.rb +58 -0
  23. data/app/forms/concerns/decidim/decidim_awesome/account_form_override.rb +25 -0
  24. data/app/forms/concerns/decidim/decidim_awesome/system/organization_form_override.rb +34 -0
  25. data/app/forms/decidim/decidim_awesome/admin/config_form.rb +41 -8
  26. data/app/helpers/decidim/decidim_awesome/map_helper.rb +28 -26
  27. data/app/overrides/decidim/account/show/add_timezone_select.html.erb.deface +3 -0
  28. data/app/overrides/decidim/admin/officializations/index/add_modal.html.erb.deface +3 -0
  29. data/app/overrides/decidim/admin/officializations/index/add_td.html.erb.deface +5 -0
  30. data/app/overrides/decidim/admin/officializations/index/add_th.html.erb.deface +5 -0
  31. data/app/overrides/decidim/system/organizations/_advanced_settings/add_awesome_config.html.erb.deface +9 -0
  32. data/app/overrides/layouts/decidim/_head/add_awesome_tags.html.erb.deface +1 -1
  33. data/app/overrides/layouts/decidim/admin/_header/add_awesome_custom_styles.html.erb.deface +3 -0
  34. data/app/overrides/layouts/decidim/admin/_header/add_awesome_tags.html.erb.deface +1 -0
  35. data/app/packs/src/decidim/decidim_awesome/admin/proposal_sortings.js +0 -5
  36. data/app/packs/src/decidim/decidim_awesome/admin/verification_selects.js +21 -0
  37. data/app/packs/src/decidim/decidim_awesome/admin/verifications.js +43 -0
  38. data/app/packs/src/decidim/decidim_awesome/awesome_admin.js +1 -0
  39. data/app/packs/src/decidim/decidim_awesome/awesome_admin_global.js +1 -0
  40. data/app/packs/stylesheets/decidim/decidim_awesome/admin/verifications.scss +99 -0
  41. data/app/packs/stylesheets/decidim/decidim_awesome/awesome_admin_global.scss +1 -0
  42. data/app/permissions/decidim/decidim_awesome/admin/permissions.rb +42 -11
  43. data/app/permissions/decidim/decidim_awesome/permissions.rb +7 -0
  44. data/app/presenters/decidim/decidim_awesome/admin_log/component_presenter_override.rb +3 -5
  45. data/app/presenters/decidim/decidim_awesome/admin_log/user_presenter_override.rb +46 -0
  46. data/app/views/decidim/decidim_awesome/account/_timezone_select.html.erb +3 -0
  47. data/app/views/decidim/decidim_awesome/admin/admin_authorizations/authorization.html.erb +20 -0
  48. data/app/views/decidim/decidim_awesome/admin/admin_authorizations/callout.html.erb +3 -0
  49. data/app/views/decidim/decidim_awesome/admin/admin_authorizations/conflict.html.erb +5 -0
  50. data/app/views/decidim/decidim_awesome/admin/admin_authorizations/edit.html.erb +41 -0
  51. data/app/views/decidim/decidim_awesome/admin/config/_form_scoped_admin_styles.html.erb +1 -0
  52. data/app/views/decidim/decidim_awesome/admin/config/_form_scoped_styles.html.erb +48 -0
  53. data/app/views/decidim/decidim_awesome/admin/config/_form_surveys.html.erb +8 -0
  54. data/app/views/decidim/decidim_awesome/admin/config/_form_verifications.html.erb +15 -0
  55. data/app/views/decidim/decidim_awesome/admin/constraints/no_permissions.html.erb +6 -0
  56. data/app/views/decidim/decidim_awesome/admin/officializations/_participants_td.html.erb +25 -0
  57. data/app/views/decidim/decidim_awesome/admin/officializations/_participants_th.html.erb +1 -0
  58. data/app/views/decidim/decidim_awesome/admin/officializations/_verification_modal.html.erb +9 -0
  59. data/app/views/decidim/decidim_awesome/required_authorizations/index.html.erb +66 -0
  60. data/app/views/decidim/decidim_awesome/system/organizations/_admin_allowed_authorizations.html.erb +5 -0
  61. data/app/views/layouts/decidim/decidim_awesome/_custom_styles.html.erb +1 -1
  62. data/app/views/layouts/decidim/decidim_awesome/admin/_custom_styles.html.erb +3 -0
  63. data/app/views/layouts/decidim/decidim_awesome/admin/admin_authorizations.html.erb +7 -0
  64. data/config/i18n-tasks.yml +6 -0
  65. data/config/locales/ca.yml +91 -5
  66. data/config/locales/cs.yml +86 -0
  67. data/config/locales/de.yml +52 -0
  68. data/config/locales/en.yml +115 -1
  69. data/config/locales/es.yml +89 -3
  70. data/config/locales/eu.yml +607 -26
  71. data/config/locales/fr.yml +37 -1
  72. data/config/locales/it.yml +0 -1
  73. data/config/locales/ja.yml +86 -0
  74. data/config/locales/nl.yml +0 -1
  75. data/config/locales/pt-BR.yml +0 -1
  76. data/lib/decidim/decidim_awesome/admin_engine.rb +2 -0
  77. data/lib/decidim/decidim_awesome/authorizator.rb +34 -0
  78. data/lib/decidim/decidim_awesome/awesome.rb +54 -1
  79. data/lib/decidim/decidim_awesome/awesome_helpers.rb +48 -19
  80. data/lib/decidim/decidim_awesome/checksums.yml +9 -0
  81. data/lib/decidim/decidim_awesome/engine.rb +20 -4
  82. data/lib/decidim/decidim_awesome/menu.rb +45 -9
  83. data/lib/decidim/decidim_awesome/request_memoizer.rb +16 -0
  84. data/lib/decidim/decidim_awesome/test/factories.rb +0 -4
  85. data/lib/decidim/decidim_awesome/test/initializer.rb +4 -0
  86. data/lib/decidim/decidim_awesome/test/shared_examples/config_examples.rb +1 -1
  87. data/lib/decidim/decidim_awesome/test/shared_examples/custom_styles_examples.rb +156 -0
  88. data/lib/decidim/decidim_awesome/test/shared_examples/summary_examples.rb +26 -10
  89. data/lib/decidim/decidim_awesome/version.rb +1 -1
  90. data/package.json +6 -5
  91. metadata +42 -7
  92. data/app/views/decidim/decidim_awesome/admin/config/_form_styles.html.erb +0 -30
@@ -9,6 +9,7 @@ module Decidim
9
9
  return Decidim::DecidimAwesome::Admin::Permissions.new(user, permission_action, context).permissions if permission_action.scope == :admin
10
10
 
11
11
  editor_image_action?
12
+ required_authorizations_action?
12
13
 
13
14
  permission_action
14
15
  end
@@ -23,6 +24,12 @@ module Decidim
23
24
  return allow! if config[:allow_images_in_editors]
24
25
  return allow! if config[:allow_videos_in_editors]
25
26
  end
27
+
28
+ def required_authorizations_action?
29
+ return false unless permission_action.subject == :required_authorizations
30
+
31
+ return allow! unless context[:user_is_authorized]
32
+ end
26
33
  end
27
34
  end
28
35
  end
@@ -17,11 +17,9 @@ module Decidim
17
17
  end
18
18
 
19
19
  def i18n_params
20
- if action == "destroy_private_data"
21
- decidim_original_i18n_params.merge({ count: action_log.extra["count"] })
22
- else
23
- decidim_original_i18n_params
24
- end
20
+ return decidim_original_i18n_params unless action == "destroy_private_data"
21
+
22
+ decidim_original_i18n_params.merge({ count: action_log.extra["count"] })
25
23
  end
26
24
  end
27
25
  end
@@ -0,0 +1,46 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ module DecidimAwesome
5
+ module AdminLog
6
+ module UserPresenterOverride
7
+ extend ActiveSupport::Concern
8
+
9
+ included do
10
+ alias_method :decidim_original_action_string, :action_string
11
+ alias_method :decidim_original_i18n_params, :i18n_params
12
+ alias_method :decidim_original_resource_presenter, :resource_presenter
13
+
14
+ def action_string
15
+ return "decidim.decidim_awesome.admin_log.user.#{action}" if authorization_action?
16
+
17
+ decidim_original_action_string
18
+ end
19
+
20
+ def i18n_params
21
+ return decidim_original_i18n_params unless authorization_action?
22
+
23
+ decidim_original_i18n_params.merge({
24
+ handler_name: h.content_tag(:span, action_log.extra["handler_name"], class: "logs__log__resource"),
25
+ reason: h.content_tag(:em, action_log.extra["reason"])
26
+ })
27
+ end
28
+
29
+ def resource_presenter
30
+ return decidim_original_resource_presenter unless authorization_action? && authorization_user
31
+
32
+ @resource_presenter ||= Decidim::Log::UserPresenter.new(authorization_user, h, { "name" => authorization_user.name, "nickname" => authorization_user.nickname })
33
+ end
34
+
35
+ def authorization_user
36
+ @authorization_user ||= Decidim::User.find_by(id: action_log.extra["user_id"])
37
+ end
38
+
39
+ def authorization_action?
40
+ action.in?(%w(admin_creates_authorization admin_forces_authorization admin_destroys_authorization))
41
+ end
42
+ end
43
+ end
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,3 @@
1
+ <% if awesome_config[:user_timezone].present? %>
2
+ <%= f.time_zone_select :user_time_zone, nil, help_text: t(".time_zone_helper") %>
3
+ <% end %>
@@ -0,0 +1,20 @@
1
+ <h4><%= t("decidim.decidim_awesome.required_authorizations.index.granted_title") %></h4>
2
+
3
+ <div class="verification__container">
4
+ <div class="verification">
5
+ <%= icon "checkbox-circle-line", class: "verification__icon is-granted self-start" %>
6
+
7
+ <div class="verification__text">
8
+ <h2 class="h5 text-secondary"><%= workflow.fullname %></h2>
9
+ <p><%= t(".granted_at", date: l(authorization.granted_at), format: :decidim_short) %></p>
10
+ <p><%= t(".metadata", metadata: content_tag("strong", t("booleans.#{authorization.metadata.present?}"))).html_safe %></p>
11
+ </div>
12
+
13
+ <div class="verification__actions">
14
+ <%= link_to decidim_admin_decidim_awesome.admin_authorization_path(id: user.id, handler: authorization.name), method: :delete, remote: true, class: "button button__lg button__primary", data: { confirm: t(".confirm_destroy") } do %>
15
+ <%= icon "delete-bin-line", class: "icon" %>
16
+ <%= t(".destroy") %>
17
+ <% end %>
18
+ </div>
19
+ </div>
20
+ </div>
@@ -0,0 +1,3 @@
1
+ <%= cell("decidim/announcement",
2
+ local_assigns[:message].presence || t("decidim.decidim_awesome.admin.admin_authorizations.#{i18n_key}", name: workflow&.fullname, user: user.name),
3
+ callout_class: klass) %>
@@ -0,0 +1,5 @@
1
+ <%= cell("decidim/announcement", {
2
+ title: t("decidim.decidim_awesome.admin.admin_authorizations.conflict"),
3
+ body: t("decidim.decidim_awesome.admin.admin_authorizations.conflict_help_html", user: link_to(conflict.user.name, decidim_admin.officializations_path(q: { name_or_nickname_or_email_cont: conflict.user.email })))
4
+ },
5
+ callout_class: "alert") %>
@@ -0,0 +1,41 @@
1
+ <div class="form-defaults">
2
+ <%= decidim_form_for(handler,
3
+ builder: Decidim::AuthorizationFormBuilder,
4
+ as: "authorization_handler",
5
+ url: decidim_admin_decidim_awesome.admin_authorization_path(id: user.id, handler: params[:handler]),
6
+ method: :patch,
7
+ remote: true) do |form| %>
8
+ <% if lookup_context.exists?(handler.to_partial_path, [], true) %>
9
+ <%= render partial: handler.to_partial_path, locals: { handler:, form: } %>
10
+ <% else %>
11
+ <div class="form__wrapper">
12
+ <%= form.all_fields %>
13
+ </div>
14
+ <% end %>
15
+
16
+ <% if defined?(with_override) %>
17
+ <div class="form__wrapper flash alert">
18
+ <label class="flex-col">
19
+ <div class="flash__title">
20
+ <%= check_box_tag "force_verification_check", true %>
21
+ <%= t(".force_verification") %>
22
+ </div>
23
+ <p class="help-text"><%= t(".force_verification_help") %></p>
24
+ </label>
25
+ <label>
26
+ <%= t(".force_verification_reason") %>
27
+ <%= text_area_tag "force_verification", nil, disabled: true %>
28
+ </label>
29
+ </div>
30
+ <% else %>
31
+ <%= cell("decidim/announcement", { title: t(".warning"), body: t(".do_it_if_sure") }, callout_class: "warning") %>
32
+ <% end %>
33
+
34
+ <div class="text-center mt-8">
35
+ <button type="submit" class="button button__lg button__primary">
36
+ <%= icon "alert-line", class: "fill-current" %>
37
+ <span><%= t(".authorize", name: workflow.fullname, user: user.name) %></span>
38
+ </button>
39
+ </div>
40
+ <% end %>
41
+ </div>
@@ -0,0 +1 @@
1
+ <%= render "form_scoped_styles", **local_assigns %>
@@ -0,0 +1,48 @@
1
+ <%
2
+ admin_styles = (config_var == "scoped_admin_styles")
3
+ style = admin_styles ? "scoped_admin_style" : "scoped_style"
4
+ %>
5
+ <div class="form__wrapper row column decidim_awesome-form">
6
+ <% if config_enabled? config_var %>
7
+ <% if admin_styles %>
8
+ <div class="colors-help">
9
+ <p><%= t("help.scoped_admin_styles_warning", scope: "decidim.decidim_awesome.admin.config.form").html_safe %></p>
10
+ <p><%= t("help.scoped_admin_styles", scope: "decidim.decidim_awesome.admin.config.form") %>
11
+ <%= t("help.scoped_admin_styles_variables", scope: "decidim.decidim_awesome.admin.config.form") %>
12
+ </p>
13
+ <p class="colors">
14
+ <% ["primary", "secondary", "tertiary", "success", "warning", "alert"].each do |color| %>
15
+ <span class="color-box <%= color %>" style="background-color: <%= current_organization.colors[color] %>"></span>
16
+ <code>var(--<%= color %>)</code>
17
+ <% end %>
18
+ </p>
19
+ </div>
20
+ <% else %>
21
+ <div class="colors-help">
22
+ <p><%= t("help.scoped_styles", scope: "decidim.decidim_awesome.admin.config.form") %>
23
+ <%= t("help.scoped_styles_variables", scope: "decidim.decidim_awesome.admin.config.form") %>
24
+ </p>
25
+ <p class="colors">
26
+ <% ["primary", "secondary", "tertiary", "success", "warning", "alert"].each do |color| %>
27
+ <span class="color-box <%= color %>" style="background-color: <%= current_organization.colors[color] %>"></span>
28
+ <code>var(--<%= color %>)</code>
29
+ <% end %>
30
+ </p>
31
+ </div>
32
+ <% end %>
33
+ <% form.object.send(config_var)&.each do |key, value| %>
34
+ <div class="card p-4 scoped_styles_container<%= " private" if admin_styles %> js-box-container" data-key="<%= key %>" data-var="<%= config_var %>">
35
+ <%= render("decidim/decidim_awesome/admin/config/autoedit_box_label", var: config_var, key: key, scope: "#{style}_#{key}", delete_path: decidim_admin_decidim_awesome.scoped_style_path(key: key, admin_panel: admin_styles)) %>
36
+ <p class="form-error is-visible" id="custom-style-error-<%= key %>"><%= errors[key.to_sym].join("<br>") if errors %></p>
37
+ <%= text_area_tag key, value, name: "config[#{config_var}][#{key}]", rows: 5 %>
38
+ <%= render("decidim/decidim_awesome/admin/config/constraints", key: "#{style}_#{key}", constraints: constraints_for("#{style}_#{key}")) %>
39
+ </div>
40
+ <% end %>
41
+
42
+ <%= link_to decidim_admin_decidim_awesome.scoped_styles_path(admin_panel: admin_styles), method: :post, class: "button button__sm button__text-secondary mr-auto" do %>
43
+ <%= icon("add-box-line") %>
44
+ <%= t("new", scope: "decidim.decidim_awesome.admin.config.form_#{config_var}") %>
45
+ <% end %>
46
+
47
+ <% end %>
48
+ </div>
@@ -8,4 +8,12 @@
8
8
  <%= render(partial: "decidim/decidim_awesome/admin/config/constraints", locals: { key: :auto_save_forms, constraints: constraints_for(:auto_save_forms) }) %>
9
9
  </div>
10
10
  <% end %>
11
+ <% if config_enabled? :user_timezone %>
12
+ <div class="row column">
13
+ <%= form.check_box :user_timezone %>
14
+ <span class="help-text mb-4" style="margin-top: -1rem;">
15
+ <%= t("help.user_timezone", scope: "decidim.decidim_awesome.admin.config.form") %>
16
+ </span>
17
+ </div>
18
+ <% end %>
11
19
  </div>
@@ -0,0 +1,15 @@
1
+ <div class="form__wrapper row column decidim_awesome-form">
2
+ <div class="callout warning"><%= t("help.verifications_html", scope: "decidim.decidim_awesome.admin.config.form") %></div>
3
+
4
+ <% if config_enabled? :force_authorization_after_login %>
5
+ <div>
6
+ <%= form.select :force_authorization_after_login, available_authorizations.map {|workflow| [workflow.fullname, workflow.name]}, { include_blank: false }, { multiple: true } %>
7
+ <p class="help-text"><%= t("help.force_authorization_after_login", scope: "decidim.decidim_awesome.admin.config.form") %></p>
8
+
9
+ <%= form.check_box :force_authorization_with_any_method %>
10
+
11
+ <%= form.translated :editor, :force_authorization_help_text, lines: 10, aria: { label: :force_authorization_help_text } %>
12
+ <p class="help-text"><%= t("help.force_authorization_help_text", scope: "decidim.decidim_awesome.admin.config.form") %></p>
13
+ </div>
14
+ <% end %>
15
+ </div>
@@ -0,0 +1,6 @@
1
+ <div data-dialog-container>
2
+ <%= icon "lock-line" %>
3
+ <h2 tabindex="-1" data-dialog-title>
4
+ No permissions for <%= constraint_key %>
5
+ </h2>
6
+ </div>
@@ -0,0 +1,25 @@
1
+ <td class="awesome_participants-td">
2
+ <% awesome_authorizations_for(user).authorizations.each do |auth| %>
3
+ <%
4
+ data = {
5
+ verification_user: user.name,
6
+ verification_user_id: user.id,
7
+ verification_handler: auth[:name],
8
+ verification_url: decidim_admin_decidim_awesome.edit_admin_authorization_path(id: user.id, handler: auth[:name])
9
+ }
10
+ classes = []
11
+ classes << "granted" if auth[:granted]
12
+ classes << "pending" if auth[:pending]
13
+ if auth[:managed]
14
+ classes << "managed"
15
+ data[:dialog_open] = "awesome-verification-modal"
16
+ end
17
+ %>
18
+ <%= content_tag(auth[:managed] ? "a" : "div", href: "#", class: classes, data:) do %>
19
+ <%= icon "check-line", class: "checked" %>
20
+ <%= icon "time-line", class: "undeterminated" %>
21
+ <%= icon "close-line", class: "unchecked" %>
22
+ <%= auth[:fullname] %>
23
+ <% end %>
24
+ <% end %>
25
+ </td>
@@ -0,0 +1 @@
1
+ <th class="awesome_participants-th"><%= t("decidim.decidim_awesome.admin.officializations.authorizations") %></th>
@@ -0,0 +1,9 @@
1
+ <%= decidim_modal id: "awesome-verification-modal", class:"reveal awesome_participants-modal" do %>
2
+ <div data-dialog-container>
3
+ </div>
4
+ <div data-dialog-actions>
5
+ <button data-dialog-close="awesome-verification-modal" class="button button__lg button__transparent-secondary">
6
+ <%= t(".close") %>
7
+ </button>
8
+ </div>
9
+ <% end %>
@@ -0,0 +1,66 @@
1
+ <div class="text-center py-10">
2
+ <h1 class="title-decorator inline-block text-left mb-12">
3
+ <%= t(".title") %>
4
+ </h1>
5
+ <p class="text-lg text-gray-2 text-left">
6
+ <%= t(awesome_config[:force_authorization_with_any_method] ? ".verify_with_any_of_these_options" : ".verify_with_all_these_options") %>
7
+ </p>
8
+ </div>
9
+
10
+ <div class="space-y-8">
11
+ <% if granted_authorizations.any? %>
12
+ <div class="verification__container-title"><%= t(".granted_title") %></div>
13
+ <div class="verification__container">
14
+ <% granted_authorizations.each do |method| %>
15
+ <div class="verification verification__no_clickable">
16
+ <%= icon "checkbox-circle-line", class: "verification__icon is-granted" %>
17
+ <div class="verification__text">
18
+ <h2 class="h5 text-secondary">
19
+ <%= method.fullname %>
20
+ </h2>
21
+ </div>
22
+ </div>
23
+ <% end %>
24
+ </div>
25
+ <% end %>
26
+
27
+ <% if pending_authorizations.any? %>
28
+ <div class="verification__container-title"><%= t(".resume_title") %></div>
29
+ <div class="verification__container">
30
+ <% pending_authorizations.each do |method| %>
31
+ <%= link_to method.resume_authorization_path(redirect_url:), class: "verification" do %>
32
+ <%= icon "time-line", class: "verification__icon" %>
33
+ <div class="verification__text">
34
+ <h2 class="h5 text-secondary">
35
+ <%= t(".resume_with_method", name: method.fullname) %>
36
+ </h2>
37
+ </div>
38
+ <% end %>
39
+ <% end %>
40
+ </div>
41
+ <% end %>
42
+
43
+ <% if missing_authorizations.any? %>
44
+ <div class="verification__container-title"><%= t(".missing_title") %></div>
45
+ <div class="verification__container">
46
+ <% missing_authorizations.each do |method| %>
47
+ <%= link_to method.root_path(redirect_url:), class: "verification" do %>
48
+ <%= icon(method.icon || "login-circle-line", class: "verification__icon") %>
49
+ <div class="verification__text">
50
+ <h2 class="h5 text-secondary">
51
+ <%= t(".verify_with_method", name: method.fullname) %>
52
+ </h2>
53
+ </div>
54
+ <% end %>
55
+ <% end %>
56
+ </div>
57
+ <% end %>
58
+ </div>
59
+
60
+ <div class="space-y-8 prose-a:text-secondary mt-8">
61
+ <%= translated_attribute(awesome_config[:force_authorization_help_text]).html_safe %>
62
+
63
+ <p class="prose-a:text-secondary italic">
64
+ <%= t(".cancel", link: link_to("#{icon("logout-box-r-line", class: "inline-block").html_safe} #{t(".logout")}".html_safe, decidim.destroy_user_session_path(redirect_url:), method: :delete).html_safe).html_safe %>
65
+ </p>
66
+ </div>
@@ -0,0 +1,5 @@
1
+ <%= field_set_tag f.label(:awesome_admins_available_authorizations, nil, for: nil), class: "border-2 border-background p-4" do %>
2
+ <%= f.collection_check_boxes :awesome_admins_available_authorizations, Decidim.authorization_handlers, :name, :description, help_text: t("decidim.decidim_awesome.system.organizations.admin_allowed_authoritzations_help_html") do |builder|
3
+ builder.label(for: nil, class: "form__wrapper-checkbox-label") { builder.check_box(id: nil) + builder.text }
4
+ end %>
5
+ <% end %>
@@ -1,3 +1,3 @@
1
1
  <style media="all">
2
- <%== awesome_custom_styles.join("\n").html_safe %>
2
+ <%== awesome_scoped_styles.join("\n").html_safe %>
3
3
  </style>
@@ -0,0 +1,3 @@
1
+ <style media="all">
2
+ <%== awesome_scoped_admin_styles.join("\n").html_safe %>
3
+ </style>
@@ -0,0 +1,7 @@
1
+ <%= icon "lock-line" %>
2
+ <h3 tabindex="-1" data-dialog-title>
3
+ <%= t("decidim.decidim_awesome.admin.officializations.verification_modal.authorizations_for", user: user.name) %>
4
+ </h3>
5
+ <div data-dialog-content>
6
+ <%= yield %>
7
+ </div>
@@ -17,6 +17,8 @@ ignore_unused:
17
17
  - "decidim.admin.filters.search_placeholder.*"
18
18
  - "activemodel.attributes.constraint.*"
19
19
  - "activemodel.attributes.custom_redirect.*"
20
+ - "activemodel.attributes.user.*"
21
+ - activemodel.attributes.organization.awesome_admins_available_authorizations
20
22
  - "decidim.components.decidim_awesome.name"
21
23
  - "decidim.components.awesome_iframe.settings.*"
22
24
  - "decidim.components.awesome_map.settings.*"
@@ -24,6 +26,8 @@ ignore_unused:
24
26
  - "decidim.components.proposals.settings.step.*"
25
27
  - "decidim.decidim_awesome.admin.config.*"
26
28
  - "decidim.decidim_awesome.admin.admin_accountability.*"
29
+ - "decidim.decidim_awesome.admin.scoped_admin_styles.*"
30
+ - "decidim.decidim_awesome.admin.scoped_styles.*"
27
31
  - "decidim.decidim_awesome.admin.menu.*"
28
32
  - "decidim.decidim_awesome.admin.menu_hacks.*"
29
33
  - "decidim.decidim_awesome.admin.proposal_custom_fields.*"
@@ -32,6 +36,8 @@ ignore_unused:
32
36
  - "decidim.decidim_awesome.voting.voting_cards.*"
33
37
  - "decidim.decidim_awesome.content_blocks.*"
34
38
  - "decidim.decidim_awesome.admin_log.*"
39
+ - "decidim.decidim_awesome.required_authorizations.index.verify_with_all_these_options"
40
+ - "decidim.decidim_awesome.required_authorizations.index.verify_with_any_of_these_options"
35
41
  - "layouts.decidim.decidim_awesome.admin.maintenance.titles.*"
36
42
  - "decidim.proposals.*"
37
43
  - "decidim.meetings.*"
@@ -2,11 +2,14 @@ ca:
2
2
  activemodel:
3
3
  attributes:
4
4
  config:
5
- additional_proposal_sortings: Activa opcions d'ordenació addicionals
5
+ additional_proposal_sortings: Activar opcions d'ordenació addicionals
6
6
  allow_images_in_editors: Permet imatges a l'editor HTML
7
7
  allow_images_in_proposals: Permet imatges a l'editor de propostes
8
8
  allow_videos_in_editors: Permet vídeos a l'editor HTML
9
9
  auto_save_forms: Desa automàticament els formularis a l'emmagatzematge local
10
+ force_authorization_after_login: Forçar autorització després d'iniciat sessió/registre
11
+ force_authorization_help_text: Text d'ajuda per la pàgina d'autorització
12
+ force_authorization_with_any_method: Permetre l'accés si es concedeix alguna de les autoritzacions (per defecte, totes són necessàries)
10
13
  intergram_auto_no_response: Un missatge que s'envia un minut després que la usuària hagi enviat el seu primer missatge i no s'hagi rebut cap resposta
11
14
  intergram_auto_response: Un missatge que s'envia immediatament després que la usuària enviï el seu primer missatge
12
15
  intergram_chat_id: ID de xat
@@ -17,10 +20,12 @@ ca:
17
20
  intergram_title_closed: Títol del xat quan està tancat
18
21
  intergram_title_open: Títol del xat quan està obert
19
22
  intergram_use_floating_button: Si està marcat, el xat tancat és sempre un botó en lloc d'un text
20
- proposal_custom_fields: 'Camps personalitzats #%{id}'
21
- proposal_private_custom_fields: 'Camps personalitzats #%{id}'
22
- scoped_admins: 'Grup d''administradores acotades #%{id}'
23
- scoped_styles: 'Personalització d''estils #%{id}'
23
+ proposal_custom_fields: Camps personalitzats %{id}
24
+ proposal_private_custom_fields: Camps personalitzats %{id}
25
+ scoped_admin_styles: Personalització d'estils %{id}
26
+ scoped_admins: Grup d'administradores acotades %{id}
27
+ scoped_styles: Personalització d'estils %{id}
28
+ user_timezone: Permet als usuaris definir la seva zona horària en el seu perfil
24
29
  validate_body_max_caps_percent: Percentatge màxim de majúscules en el cos de la proposta
25
30
  validate_body_max_marks_together: Nombre màxim de símbols consecutius permesos al cos de la proposta
26
31
  validate_body_min_length: Nombre de caràcters mínims requerits pel cos de la proposta
@@ -46,6 +51,10 @@ ca:
46
51
  target: Obre a
47
52
  url: URL
48
53
  visibility: Visibilitat
54
+ organization:
55
+ awesome_admins_available_authorizations: Permet a les administradores verificar manualment a les participants amb aquests verificadors
56
+ user:
57
+ user_time_zone: Zona horària personal
49
58
  decidim:
50
59
  admin:
51
60
  actions:
@@ -132,6 +141,9 @@ ca:
132
141
  supported_last: Votades últimes per mi
133
142
  za: Z-A (ordre alfabètic invers)
134
143
  decidim_awesome:
144
+ account:
145
+ timezone_select:
146
+ time_zone_helper: Fes servir la teva zona horària personal per mostrar les dates d'acord amb la teva localització quan hagis iniciat sessió.
135
147
  admin:
136
148
  actions: Accions
137
149
  admin_accountability:
@@ -170,6 +182,26 @@ ca:
170
182
  collaborator: Col·laboradora
171
183
  moderator: Moderadora
172
184
  valuator: Avaluadora
185
+ admin_authorizations:
186
+ authorization:
187
+ confirm_destroy: Estàs segur que vols eliminar aquesta verificació? Aquesta actuació pot afectar a l'accés de la participant en la plataforma.
188
+ destroy: Eliminar
189
+ granted_at: Concedit a %{date}
190
+ metadata: Conté metadades? %{metadata}
191
+ authorization_destroyed: L'autorització s'ha eliminat correctament.
192
+ authorization_not_destroyed: La verificació no s'ha pogut eliminar!
193
+ authorization_transferred: 'Avís: hi ha hagut un conflicte de verificació i la verificació s''ha transferit a %{user}'
194
+ conflict: Hi ha un conflicte amb una autorització existent
195
+ conflict_help_html: "Heu de resoldre el conflicte amb la participant %{user} abans de poder autoritzar la participant amb aquesta autorització.\n<br><br>\nEs produeix un conflicte de verificació quan un altre usuari té les mateixes dades que la participant que esteu intentant autoritzar.\nPodeu resoldre aquest conflicte eliminant l'autorització conflictiva de l'altre participant o utilitzant dades diferents per a aquest participant.\n"
196
+ edit:
197
+ authorize: Autoritza %{user} amb %{name}
198
+ do_it_if_sure: Feu-ho només si esteu segur que la participant té aquesta autorització.
199
+ force_verification: Força la verificació amb les dades actuals
200
+ force_verification_help: La verificació ha fallat, però podeu forçar-la si esteu segur que la participant té aquesta autorització.
201
+ force_verification_reason: 'Doneu un motiu per forçar la verificació:'
202
+ warning: 'Avís: en forçar aquesta autorització, esteu forçant l''estat d''autorització actual del participant.'
203
+ user_authorized: "%{user} s'ha autoritzat correctament amb %{name}"
204
+ user_not_authorized: "%{user} no s'ha pogut autoritzar amb %{name}"
173
205
  checks:
174
206
  index:
175
207
  admin_head_tags: Etiquetes Awesome incloses a la capçalera de l'aplicació d'administració
@@ -230,6 +262,8 @@ ca:
230
262
  allow_videos_in_editors: Això afegirà una icona per enllaçar vídeos a l'editor HTML
231
263
  auto_save_forms: Això farà servir l'emmagatzematge local del navegador per desar automàticament les dades introduïdes pels usuaris a les enquestes i altres formularis mentre les omplen. Les dades es restauraran en una futura visita amb el mateix navegador en cas que no s'enviï el formulari. Si s’envia el formulari, s’eliminaran les dades locals. Si els usuaris eliminen les seves dades del navegador, tampoc es restauraran.
232
264
  drag_and_drop_supported: Quan es pugin imatges, es pot fer a través del mètode de "arrossegar i deixar anar". Les imatges seran pujades al servidor i inserides com recursos externs (no es fa servir codificació en línia base64).
265
+ force_authorization_after_login: 'Si està habilitat, les usuàries seran redireccionades a la pàgina d''autorització després de l''inici de sessió o registre si algunes de les autoritzacions especificades no són concedides. Això és útil si voleu forçar les usuàries a que es verifiquin a través d''una autorització específica abans que puguin iniciar sessió en qualsevol moment (per exemple: per prevenir spam).'
266
+ force_authorization_help_text: Afegeix un text personalitzat per explicar per què cal l'autorització. Assegureu-vos també d'afegir un mode de contacte en cas que les usuàries necessitin ajuda.
233
267
  intergram_about: Intergram utilitza el Telegram Messenger per gestionar un widget de xat en viu de suport incrustat a la part inferior de la pàgina.
234
268
  intergram_config: 'Convida a la <a href="https://web.telegram.org/#/im?p=@IntergramBot">@Intergram bot</a> al teu grup o comença un xat amb ella directament. <a href="https://github.com/idoco/intergram#embed-intergram-in-your-website-with-these-2-simple-steps">+ info</a>'
235
269
  original_editor_override: Desde la versió 0.26, és possible (per administradors només) pujar imatges als editors de text enriquit. Per tant, les opcions d'imatges disponibles en aquesta pàgina només afecten a la part pública de la web (les administradores sempre ho tenen activat).
@@ -242,15 +276,23 @@ ca:
242
276
  %{warning}
243
277
  Aquest text es pot personalitzar amb una traducció personalitzada utilitzant la clau:
244
278
  %{key}
279
+ scoped_admin_styles: Tingues en compte que amagar contingut aquí pot deixar l'administrador inservible. Si us plau, actueu amb cautela.
280
+ scoped_admin_styles_variables: 'Pots fer servir les següents variables CSS pels colors personalitzats de l''organització:'
281
+ scoped_admin_styles_warning: "<strong>Atenció</strong>: Aquí podeu afegir CSS que s'aplica només en aquest administrador."
245
282
  scoped_admins: Promou usuaries normals a administradores amb accés limitat a certes parts de la web pública (feu servir l'editor de restriccions per això). Noteu que afegir usuaries que ja tenen permisos d'administració no té cap efecte.
246
283
  scoped_styles: Crea CSS personalitzats que només s'apliquin a determinades parts de la web pública (per fer-ho, utilitza l'editor de restriccions)
247
284
  scoped_styles_variables: 'Pots fer servir les següents variables CSS pels colors personalitzats de l''organització:'
285
+ user_timezone: Això afegirà un selector al perfil d'usuari per permetre establir la zona horària. Això farà que l'usuari vegi les dates i hores segons la seva configuració local.
248
286
  validate_body_max_caps_percent: Zero no permetrà cap majúscula, 100 obligarà a escriure-ho tot en majúscules
249
287
  validate_body_max_marks_together: 'Limiteu el nombre de signes d''interrogació i d''exclamació que es poden escriure junts. És a dir: si és 2, aleshores ''!!!'' no es permetrà al text'
250
288
  validate_body_min_length: Aquest nombre pot ser zero, això farà que aquest camp no sigui obligatori
251
289
  validate_title_max_caps_percent: Zero no permetrà cap majúscula, 100 obligarà a escriure-ho tot en majúscules
252
290
  validate_title_max_marks_together: 'Limiteu el nombre de signes d''interrogació i d''exclamació que es poden escriure junts. És a dir: si és 2, aleshores ''!!!'' no es permetrà al text'
253
291
  validate_title_min_length: El títol sempre és obligatori i aquest número no pot ser zero
292
+ verifications_html: |
293
+ Aquí pots fer alguns ajustaments en el procés de verificació.<br>
294
+ <b>NOTA:</b> Tingues en compte que canviar aquests paràmetres pot impedir que algunes usuàries accedeixin a la plataforma. Fes-ho servir amb precaució!<br><br>
295
+ Tingues en compte també, que aquests paràmetres s'apliquen a totes les usuàries. Les administradores sempre tindran accés al tauler dadministració.
254
296
  validators:
255
297
  body: Validacions d'entrada per l'usuari en el camp cos de la proposta
256
298
  title: Validacions d'entrada per l'usuari en el camp títol de la proposta
@@ -264,6 +306,11 @@ ca:
264
306
  new: Afegiu una nova caixa de "camps personalitzats privats"
265
307
  remove: Elimina aquesta caixa de "camps personalitzats"
266
308
  sure_to_remove: Segur que vols eliminar aquesta caixa de camps personalitzats?
309
+ form_scoped_admin_styles:
310
+ delete: Esborra
311
+ new: Afegeix una nova caixa CSS
312
+ remove: Elimina aquesta caixa CSS
313
+ sure_to_remove: Segur que vols eliminar aquesta caixa de camps personalitzats?
267
314
  form_scoped_admins:
268
315
  delete: Esborra
269
316
  new: Afegir un nou grup "d'Administradores acotades"
@@ -287,8 +334,11 @@ ca:
287
334
  proposal_custom_fields: 'Camps personalitzats per propostes: Camps públics'
288
335
  proposal_private_custom_fields: 'Camps personalitzats per propostes: Camps privats'
289
336
  proposals: Modificacions a propostes
337
+ scoped_admin_styles: 'Estils personalitzats: Panell d''administració'
338
+ scoped_styles: 'Estils personalitzats: Interfície pública'
290
339
  styles: Estils personalitzats
291
340
  surveys: Formularis i enquestes
341
+ verifications: Verificacions / Hacks d'autorització
292
342
  update:
293
343
  error: Error actualitzant la configuració! %{error}
294
344
  success: Configuració actualitzada correctament
@@ -393,6 +443,7 @@ ca:
393
443
  proposals: Modificacions a propostes
394
444
  styles: Estils personalitzats
395
445
  surveys: Formularis i enquestes
446
+ verifications: Verificacions
396
447
  menu_hacks:
397
448
  create:
398
449
  error: 'Error en crear un nou ítem de menú: %{error}'
@@ -431,6 +482,11 @@ ca:
431
482
  error: 'Error en actualitzar l''ítem de menú: %{error}'
432
483
  success: Ítem de menú actualitzat correctament
433
484
  url_exists: Aquesta URL ha estat configurada en un altre ítem de menú, si us plau edita'l en comptes de crear-ne un de nou.
485
+ officializations:
486
+ authorizations: Autoritzacions
487
+ verification_modal:
488
+ authorizations_for: Autoritzacions per a %{user}
489
+ close: Tanca
434
490
  proposal_custom_fields:
435
491
  menu:
436
492
  title: Camps públics
@@ -439,9 +495,19 @@ ca:
439
495
  private_data_last_update: Aquestes dades es van actualitzar per última vegada fa %{time_ago}.
440
496
  proposal_private_custom_fields: Camps privats
441
497
  remove_private_data: "👉 És possible que vulgueu eliminar-lo"
498
+ scoped_admin_styles:
499
+ menu:
500
+ title: Panell admin
501
+ scoped_styles:
502
+ menu:
503
+ title: Interfície pública
442
504
  admin_log:
443
505
  component:
444
506
  destroy_private_data: "%{user_name} ha destruït %{count} elements de dades privades per a %{resource_name} a %{space_name}"
507
+ user:
508
+ admin_creates_authorization: "%{user_name} s'ha verificat %{resource_name} amb %{handler_name}"
509
+ admin_destroys_authorization: "%{user_name} ha destruït la verificació %{handler_name} a %{resource_name}"
510
+ admin_forces_authorization: "%{user_name} ha forçat la verificació %{handler_name} a %{resource_name}. Motiu: %{reason}"
445
511
  amendments:
446
512
  modal:
447
513
  amendment_exists: Una esmena ja existeix
@@ -506,6 +572,26 @@ ca:
506
572
  view_meeting: Veure trobada
507
573
  view_proposal: Veure proposta
508
574
  proposal_private_custom_fields_disclosure: Aquesta informació no es publicarà
575
+ required_authorizations:
576
+ index:
577
+ cancel: Això ho faré en un altre moment, %{link}.
578
+ granted_title: Verificacions concedides
579
+ logout: deixa'm tancar la sessió
580
+ missing_title: No verificada encara
581
+ resume_title: Verificacions pendents
582
+ resume_with_method: Reprendre la verificació amb %{name}
583
+ title: Verifica la teva identitat
584
+ verify_with_all_these_options: 'Si us plau, verifica''t amb tots aquests mètodes abans de poder accedir a la plataforma:'
585
+ verify_with_any_of_these_options: 'Si us plau, verifica''t com a mínim amb un d''aquests mètodes abans de poder accedir a la plataforma:'
586
+ verify_with_method: Verificar amb %{name}
587
+ session:
588
+ authorization_is_required: Per participar en aquesta plataforma, cal que autoritzeu el vostre compte amb una autorització vàlida (%{authorizations}).
589
+ system:
590
+ organizations:
591
+ admin_allowed_authoritzations_help_html: |
592
+ Les administradores podran verificar manualment els participants amb aquests verificadors.
593
+ <br>Utilitzeu aquesta funció amb precaució, ja que pot provocar problemes de seguretat.
594
+ awesome_tweaks: Configuracions del Decidim Awesome
509
595
  validators:
510
596
  too_much_caps: Fa servir massa lletres majúscules (més %{percent}% del text)
511
597
  voting: