decidim-forms 0.26.2 → 0.27.0.rc2

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 (62) hide show
  1. checksums.yaml +4 -4
  2. data/app/commands/decidim/forms/admin/update_questionnaire.rb +13 -8
  3. data/app/commands/decidim/forms/answer_questionnaire.rb +3 -3
  4. data/app/controllers/decidim/forms/admin/concerns/has_questionnaire.rb +2 -2
  5. data/app/forms/decidim/forms/admin/display_condition_form.rb +3 -3
  6. data/app/forms/decidim/forms/answer_form.rb +4 -0
  7. data/app/models/decidim/forms/answer.rb +2 -2
  8. data/app/models/decidim/forms/display_condition.rb +1 -1
  9. data/app/models/decidim/forms/questionnaire.rb +7 -0
  10. data/app/packs/src/decidim/forms/admin/forms.js +3 -0
  11. data/app/presenters/decidim/forms/admin/questionnaire_answer_presenter.rb +10 -2
  12. data/app/presenters/decidim/forms/admin/questionnaire_participant_presenter.rb +5 -3
  13. data/app/presenters/decidim/forms/admin_log/questionnaire_presenter.rb +35 -0
  14. data/app/queries/decidim/forms/questionnaire_participant.rb +1 -1
  15. data/app/queries/decidim/forms/questionnaire_participants.rb +1 -1
  16. data/app/queries/decidim/forms/questionnaire_user_answers.rb +1 -1
  17. data/app/views/decidim/forms/questionnaires/show.html.erb +4 -2
  18. data/config/locales/ar.yml +1 -0
  19. data/config/locales/bg.yml +1 -0
  20. data/config/locales/ca.yml +6 -3
  21. data/config/locales/cs.yml +6 -3
  22. data/config/locales/de.yml +6 -3
  23. data/config/locales/el.yml +1 -4
  24. data/config/locales/en.yml +5 -3
  25. data/config/locales/es-MX.yml +6 -3
  26. data/config/locales/es-PY.yml +6 -3
  27. data/config/locales/es.yml +6 -3
  28. data/config/locales/eu.yml +1 -4
  29. data/config/locales/fi-plain.yml +6 -3
  30. data/config/locales/fi.yml +6 -3
  31. data/config/locales/fr-CA.yml +6 -3
  32. data/config/locales/fr.yml +6 -3
  33. data/config/locales/ga-IE.yml +1 -0
  34. data/config/locales/gl.yml +5 -0
  35. data/config/locales/hu.yml +4 -0
  36. data/config/locales/id-ID.yml +1 -0
  37. data/config/locales/it.yml +1 -4
  38. data/config/locales/ja.yml +6 -3
  39. data/config/locales/lb.yml +1 -4
  40. data/config/locales/lt.yml +191 -0
  41. data/config/locales/lv.yml +1 -4
  42. data/config/locales/nl.yml +1 -4
  43. data/config/locales/no.yml +1 -4
  44. data/config/locales/pl.yml +1 -4
  45. data/config/locales/pt-BR.yml +1 -4
  46. data/config/locales/pt.yml +1 -4
  47. data/config/locales/ro-RO.yml +1 -4
  48. data/config/locales/ru.yml +1 -0
  49. data/config/locales/sk.yml +1 -0
  50. data/config/locales/sl.yml +1 -0
  51. data/config/locales/sv.yml +1 -4
  52. data/config/locales/tr-TR.yml +1 -4
  53. data/config/locales/val-ES.yml +1 -0
  54. data/config/locales/zh-CN.yml +1 -4
  55. data/lib/decidim/exporters/form_pdf.rb +2 -2
  56. data/lib/decidim/forms/{data_portability_user_answers_serializer.rb → download_your_data_user_answers_serializer.rb} +2 -2
  57. data/lib/decidim/forms/test/factories.rb +22 -13
  58. data/lib/decidim/forms/test/shared_examples/manage_questionnaires/update_questions.rb +2 -2
  59. data/lib/decidim/forms/user_answers_serializer.rb +2 -2
  60. data/lib/decidim/forms/version.rb +1 -1
  61. data/lib/decidim/forms.rb +1 -1
  62. metadata +14 -13
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c05c5c0a4333cc4dbefaa5e8d37fa861059a6881d5d47d075fd618e7f7169826
4
- data.tar.gz: f46c7ea6704161d57385dd589360b78fe3763057e532640004cbb539aee5c0e4
3
+ metadata.gz: 81e96451d62f5103d06d5e3faed9995dd4095fd26ead4b0e46441b480248a1cb
4
+ data.tar.gz: f764c1a304b7a2fd98a716595b51b79342afa092b812dc3b2d627535b6199a43
5
5
  SHA512:
6
- metadata.gz: fb39a317c541eca9a1d3ed286b8b3873a79bc7f748a37ae4a20a693e19900b473b6e83f46ec82d07c3d5d5b603143d5d46327addfd19d99f014f163f8a741775
7
- data.tar.gz: 593ac4089260f909886fa7b05de438d2da561a4d5801742044c79a7c2ee5343c1c59df55282c8fd18af036ce272fc04329c3ef9bb04699de5cf5182dd361ed36
6
+ metadata.gz: 22a006a8033a94f5d9791c74300cc298505521746a40452ae6f10742e6f2da2100cb1f2e4d1c9b6b229908a3e29bce816f338311db14e8581ff8278218298f22
7
+ data.tar.gz: 6eac52cf9bac996ce47017745444527615c5ba099234d4c7efc1586d93fb8603860158644773526ac9215e9ded8cc0f941b0ec731bc62a755ceddbb97ee5f4cb
@@ -5,14 +5,15 @@ module Decidim
5
5
  module Admin
6
6
  # This command is executed when the user changes a Questionnaire from the admin
7
7
  # panel.
8
- class UpdateQuestionnaire < Rectify::Command
8
+ class UpdateQuestionnaire < Decidim::Command
9
9
  # Initializes a UpdateQuestionnaire Command.
10
10
  #
11
11
  # form - The form from which to get the data.
12
12
  # questionnaire - The current instance of the questionnaire to be updated.
13
- def initialize(form, questionnaire)
13
+ def initialize(form, questionnaire, user)
14
14
  @form = form
15
15
  @questionnaire = questionnaire
16
+ @user = user
16
17
  end
17
18
 
18
19
  # Updates the questionnaire if valid.
@@ -21,13 +22,17 @@ module Decidim
21
22
  def call
22
23
  return broadcast(:invalid) if @form.invalid?
23
24
 
24
- Decidim::Forms::Questionnaire.transaction do
25
- if @questionnaire.questions_editable?
26
- update_questionnaire_questions
27
- delete_answers unless @questionnaire.published?
28
- end
25
+ Decidim.traceability.perform_action!("update",
26
+ @questionnaire,
27
+ @user) do
28
+ Decidim::Forms::Questionnaire.transaction do
29
+ if @questionnaire.questions_editable?
30
+ update_questionnaire_questions
31
+ delete_answers unless @questionnaire.published?
32
+ end
29
33
 
30
- update_questionnaire
34
+ update_questionnaire
35
+ end
31
36
  end
32
37
 
33
38
  broadcast(:ok)
@@ -3,7 +3,7 @@
3
3
  module Decidim
4
4
  module Forms
5
5
  # This command is executed when the user answers a Questionnaire.
6
- class AnswerQuestionnaire < Rectify::Command
6
+ class AnswerQuestionnaire < Decidim::Command
7
7
  include ::Decidim::MultipleAttachmentsMethods
8
8
 
9
9
  # Initializes a AnswerQuestionnaire Command.
@@ -43,7 +43,7 @@ module Decidim
43
43
  # of this problem.
44
44
  def reset_form_attachments
45
45
  @form.responses.each do |answer|
46
- answer.errors.add(:add_documents, :needs_to_be_reattached) if answer.has_attachments?
46
+ answer.errors.add(:add_documents, :needs_to_be_reattached) if answer.has_attachments? || answer.has_error_in_attachments?
47
47
  end
48
48
  end
49
49
 
@@ -51,7 +51,7 @@ module Decidim
51
51
  @main_form = @form
52
52
  @errors = nil
53
53
 
54
- Answer.transaction do
54
+ Answer.transaction(requires_new: true) do
55
55
  form.responses_by_step.flatten.select(&:display_conditions_fulfilled?).each do |form_answer|
56
56
  answer = Answer.new(
57
57
  user: @current_user,
@@ -22,7 +22,7 @@ module Decidim
22
22
 
23
23
  if defined? Decidim::Templates::Admin
24
24
  include Decidim::Templates::Admin::Concerns::Templatable
25
- helper Decidim::Templates::Admin::TemplatesHelper
25
+ helper Decidim::DatalistSelectHelper
26
26
 
27
27
  def templatable_type
28
28
  "Decidim::Forms::Questionnaire"
@@ -47,7 +47,7 @@ module Decidim
47
47
  params["published_at"] = Time.current if params.has_key? "save_and_publish"
48
48
  @form = form(Admin::QuestionnaireForm).from_params(params)
49
49
 
50
- Admin::UpdateQuestionnaire.call(@form, questionnaire) do
50
+ Admin::UpdateQuestionnaire.call(@form, questionnaire, current_user) do
51
51
  on(:ok) do
52
52
  # i18n-tasks-use t("decidim.forms.admin.questionnaires.update.success")
53
53
  flash[:notice] = I18n.t("update.success", scope: i18n_flashes_scope)
@@ -55,21 +55,21 @@ module Decidim
55
55
  #
56
56
  # Returns a Decidim::Forms::Question
57
57
  def question
58
- @question ||= Question.find_by(id: @decidim_question_id)
58
+ @question ||= Question.find_by(id: decidim_question_id)
59
59
  end
60
60
 
61
61
  # Finds the Condition Question from the given decidim_condition_question_id
62
62
  #
63
63
  # Returns a Decidim::Forms::Question
64
64
  def condition_question
65
- @condition_question ||= Question.find_by(id: @decidim_condition_question_id)
65
+ @condition_question ||= Question.find_by(id: decidim_condition_question_id)
66
66
  end
67
67
 
68
68
  # Finds the Answer Option from the given decidim_answer_option_id
69
69
  #
70
70
  # Returns a Decidim::Forms::AnswerOption
71
71
  def answer_option
72
- @answer_option ||= AnswerOption.find_by(id: @decidim_answer_option_id)
72
+ @answer_option ||= AnswerOption.find_by(id: decidim_answer_option_id)
73
73
  end
74
74
 
75
75
  private
@@ -69,6 +69,10 @@ module Decidim
69
69
  question.has_attachments? && errors[:add_documents].empty? && add_documents.present?
70
70
  end
71
71
 
72
+ def has_error_in_attachments?
73
+ errors[:add_documents].present?
74
+ end
75
+
72
76
  private
73
77
 
74
78
  def mandatory_body?
@@ -4,7 +4,7 @@ module Decidim
4
4
  module Forms
5
5
  # The data store for an Answer in the Decidim::Forms
6
6
  class Answer < Forms::ApplicationRecord
7
- include Decidim::DataPortability
7
+ include Decidim::DownloadYourData
8
8
  include Decidim::NewsletterParticipant
9
9
  include Decidim::HasAttachments
10
10
 
@@ -29,7 +29,7 @@ module Decidim
29
29
  end
30
30
 
31
31
  def self.export_serializer
32
- Decidim::Forms::DataPortabilityUserAnswersSerializer
32
+ Decidim::Forms::DownloadYourDataUserAnswersSerializer
33
33
  end
34
34
 
35
35
  def self.newsletter_participant_ids(component)
@@ -33,7 +33,7 @@ module Decidim
33
33
  when "not_equal"
34
34
  answer_form.choices.pluck(:answer_option_id).exclude?(answer_option.id)
35
35
  when "match"
36
- condition_value.values.reject(&:blank?).any? { |value| answer_form_matches?(answer_form, value) }
36
+ condition_value.values.compact_blank.any? { |value| answer_form_matches?(answer_form, value) }
37
37
  end
38
38
  end
39
39
 
@@ -7,6 +7,7 @@ module Decidim
7
7
  include Decidim::Templates::Templatable if defined? Decidim::Templates::Templatable
8
8
  include Decidim::Publicable
9
9
  include Decidim::TranslatableResource
10
+ include Decidim::Traceable
10
11
 
11
12
  translatable_fields :title, :description, :tos
12
13
  belongs_to :questionnaire_for, polymorphic: true
@@ -16,6 +17,8 @@ module Decidim
16
17
 
17
18
  after_initialize :set_default_salt
18
19
 
20
+ attr_accessor :questionnaire_template_id
21
+
19
22
  # Public: returns whether the questionnaire questions can be modified or not.
20
23
  def questions_editable?
21
24
  has_component = questionnaire_for.respond_to? :component
@@ -32,6 +35,10 @@ module Decidim
32
35
  created_at.to_i == updated_at.to_i && questions.empty?
33
36
  end
34
37
 
38
+ def self.log_presenter_class_for(_log)
39
+ Decidim::Forms::AdminLog::QuestionnairePresenter
40
+ end
41
+
35
42
  private
36
43
 
37
44
  # salt is used to generate secure hash in anonymous answers
@@ -11,6 +11,7 @@ import createSortList from "src/decidim/admin/sort_list.component"
11
11
  import createDynamicFields from "src/decidim/admin/dynamic_fields.component"
12
12
  import createFieldDependentInputs from "src/decidim/admin/field_dependent_inputs.component"
13
13
  import createQuillEditor from "src/decidim/editor"
14
+ import initLanguageChangeSelect from "src/decidim/admin/choose_language"
14
15
 
15
16
  export default function createEditableForm() {
16
17
  const wrapperSelector = ".questionnaire-questions";
@@ -392,6 +393,8 @@ export default function createEditableForm() {
392
393
 
393
394
  autoLabelByPosition.run();
394
395
  autoButtonsByPosition.run();
396
+
397
+ initLanguageChangeSelect($field.find("select.language-change").toArray());
395
398
  },
396
399
  onRemoveField: ($field) => {
397
400
  autoLabelByPosition.run();
@@ -6,10 +6,18 @@ module Decidim
6
6
  #
7
7
  # Presenter for questionnaire answer
8
8
  #
9
- class QuestionnaireAnswerPresenter < Rectify::Presenter
9
+ class QuestionnaireAnswerPresenter < SimpleDelegator
10
+ delegate :content_tag, :safe_join, to: :view_context
11
+
10
12
  include Decidim::TranslatableAttributes
11
13
 
12
- attribute :answer, Decidim::Forms::Answer
14
+ def answer
15
+ __getobj__.fetch(:answer)
16
+ end
17
+
18
+ def view_context
19
+ __getobj__.fetch(:view_context, ActionController::Base.new.view_context)
20
+ end
13
21
 
14
22
  def question
15
23
  translated_attribute(answer.question.body)
@@ -6,8 +6,10 @@ module Decidim
6
6
  #
7
7
  # Presenter for questionnaire response
8
8
  #
9
- class QuestionnaireParticipantPresenter < Rectify::Presenter
10
- attribute :participant, Decidim::Forms::Answer
9
+ class QuestionnaireParticipantPresenter < SimpleDelegator
10
+ def participant
11
+ __getobj__.fetch(:participant)
12
+ end
11
13
 
12
14
  def session_token
13
15
  participant.session_token || "-"
@@ -28,7 +30,7 @@ module Decidim
28
30
  end
29
31
 
30
32
  def status
31
- t(registered? ? "registered" : "unregistered", scope: "decidim.forms.user_answers_serializer")
33
+ I18n.t(registered? ? "registered" : "unregistered", scope: "decidim.forms.user_answers_serializer")
32
34
  end
33
35
 
34
36
  def answers
@@ -0,0 +1,35 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ module Forms
5
+ module AdminLog
6
+ # This class holds the logic to present a `Decidim::Forms::Questionnaire`
7
+ # for the `AdminLog` log.
8
+ #
9
+ # Usage should be automatic and you shouldn't need to call this class
10
+ # directly, but here's an example:
11
+ #
12
+ # action_log = Decidim::ActionLog.last
13
+ # view_helpers # => this comes from the views
14
+ # QuestionnairePresenter.new(action_log, view_helpers).present
15
+ class QuestionnairePresenter < Decidim::Log::BasePresenter
16
+ private
17
+
18
+ def action_string
19
+ case action
20
+ when "update"
21
+ "decidim.forms.admin_log.questionnaire.#{action}"
22
+ else
23
+ super
24
+ end
25
+ end
26
+
27
+ def i18n_params
28
+ super.merge(
29
+ meeting_name: resource_presenter.try(:present)
30
+ )
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end
@@ -3,7 +3,7 @@
3
3
  module Decidim
4
4
  module Forms
5
5
  # A class used to collect user answers for a questionnaire
6
- class QuestionnaireParticipant < Rectify::Query
6
+ class QuestionnaireParticipant < Decidim::Query
7
7
  # Syntactic sugar to initialize the class and return the queried objects.
8
8
  #
9
9
  # questionnaire - a Questionnaire object
@@ -3,7 +3,7 @@
3
3
  module Decidim
4
4
  module Forms
5
5
  # A class used to collect user answers for a questionnaire
6
- class QuestionnaireParticipants < Rectify::Query
6
+ class QuestionnaireParticipants < Decidim::Query
7
7
  # Syntactic sugar to initialize the class and return the queried objects.
8
8
  #
9
9
  # questionnaire - a Questionnaire object
@@ -3,7 +3,7 @@
3
3
  module Decidim
4
4
  module Forms
5
5
  # A class used to collect user answers for a questionnaire
6
- class QuestionnaireUserAnswers < Rectify::Query
6
+ class QuestionnaireUserAnswers < Decidim::Query
7
7
  # Syntactic sugar to initialize the class and return the queried objects.
8
8
  #
9
9
  # questionnaire - a Questionnaire object
@@ -5,7 +5,7 @@
5
5
 
6
6
  <% columns = allow_answers? && visitor_can_answer? && @form.responses.map(&:question).any?(&:matrix?) ? 9 : 6 %>
7
7
 
8
- <%= render partial: "decidim/shared/component_announcement" %>
8
+ <%= render partial: "decidim/shared/component_announcement" if current_component.manifest_name == "surveys" %>
9
9
 
10
10
  <div class="row columns">
11
11
  <h2 class="section-heading"><%= translated_attribute questionnaire.title %></h2>
@@ -151,4 +151,6 @@
151
151
  </div>
152
152
  </div>
153
153
 
154
- <%= javascript_pack_tag "decidim_forms" %>
154
+ <% content_for :js_content do %>
155
+ <%= javascript_pack_tag "decidim_forms" %>
156
+ <% end %>
@@ -1,3 +1,4 @@
1
+ ---
1
2
  ar:
2
3
  activemodel:
3
4
  attributes:
@@ -1,3 +1,4 @@
1
+ ---
1
2
  bg:
2
3
  activemodel:
3
4
  attributes:
@@ -1,3 +1,4 @@
1
+ ---
1
2
  ca:
2
3
  activemodel:
3
4
  attributes:
@@ -121,6 +122,9 @@ ca:
121
122
  update:
122
123
  invalid: S'ha produït un error en desar el formulari.
123
124
  success: Formulari desat correctament.
125
+ admin_log:
126
+ questionnaire:
127
+ update: "%{user_name} ha actualitzat el qüestionari %{resource_name}"
124
128
  errors:
125
129
  answer:
126
130
  body: El camp no pot estar en blanc
@@ -128,10 +132,9 @@ ca:
128
132
  extension_allowlist: 'Formats d''arxiu acceptats:'
129
133
  images:
130
134
  dimensions: "%{width} x %{height} px"
131
- dimensions_info: 'Aquesta imatge medirà:'
132
135
  processors:
133
- resize_and_pad: Redimensionat i ajustat a
134
- resize_to_fit: Redimensionada per ajustar-la
136
+ resize_and_pad: Aquesta imatge serà redimensionada i ajustada a %{dimensions}.
137
+ resize_to_fit: Aquesta imatge serà redimensionada per ajustar-se a %{dimensions}.
135
138
  question_types:
136
139
  files: Arxius
137
140
  long_answer: Resposta llarga
@@ -1,3 +1,4 @@
1
+ ---
1
2
  cs:
2
3
  activemodel:
3
4
  attributes:
@@ -121,6 +122,9 @@ cs:
121
122
  update:
122
123
  invalid: Při ukládání dotazníku došlo k chybám.
123
124
  success: Formulář byl úspěšně uložen.
125
+ admin_log:
126
+ questionnaire:
127
+ update: "%{user_name} aktualizoval dotazník %{resource_name}"
124
128
  errors:
125
129
  answer:
126
130
  body: Tělo nemůže být prázdné
@@ -128,10 +132,9 @@ cs:
128
132
  extension_allowlist: 'Akceptované formáty:'
129
133
  images:
130
134
  dimensions: "%{width} x %{height} px"
131
- dimensions_info: 'Tento obrázek bude:'
132
135
  processors:
133
- resize_and_pad: Zmenšeno a odsazeno k
134
- resize_to_fit: Upravena velikost na vyplnění
136
+ resize_and_pad: Tento obrázek bude změněn a vyplněn na %{dimensions}.
137
+ resize_to_fit: Tento obrázek bude změněn a vyplněn na %{dimensions}.
135
138
  question_types:
136
139
  files: Soubory
137
140
  long_answer: Dlouhá odpověď
@@ -1,3 +1,4 @@
1
+ ---
1
2
  de:
2
3
  activemodel:
3
4
  attributes:
@@ -121,6 +122,9 @@ de:
121
122
  update:
122
123
  invalid: Beim Speichern des Fragebogens sind Fehler aufgetreten.
123
124
  success: Formular erfolgreich gespeichert.
125
+ admin_log:
126
+ questionnaire:
127
+ update: "%{user_name} hat die Umfrage %{resource_name} aktualisiert"
124
128
  errors:
125
129
  answer:
126
130
  body: Körper kann nicht leer sein
@@ -128,10 +132,9 @@ de:
128
132
  extension_allowlist: 'Gültige Formate:'
129
133
  images:
130
134
  dimensions: "%{width} x %{height} px"
131
- dimensions_info: 'Das Bild wird:'
132
135
  processors:
133
- resize_and_pad: in der Größe angepasst und gepolstert zu
134
- resize_to_fit: in der Größe verändert, damit es passt
136
+ resize_and_pad: Dieses Bild wird skaliert und an %{dimensions} angepasst.
137
+ resize_to_fit: Dieses Bild wird auf %{dimensions} skaliert.
135
138
  question_types:
136
139
  files: Dateien
137
140
  long_answer: Lange Antwort
@@ -1,3 +1,4 @@
1
+ ---
1
2
  el:
2
3
  activemodel:
3
4
  attributes:
@@ -69,10 +70,6 @@ el:
69
70
  extension_allowlist: 'Αποδεκτές μορφές:'
70
71
  images:
71
72
  dimensions: "Π %{width} x Υ %{height} px"
72
- dimensions_info: 'Για αυτήν την εικόνα θα:'
73
- processors:
74
- resize_and_pad: Αλλάξει το μέγεθος και θα συμπληρωθεί σε
75
- resize_to_fit: Αλλάξει το μέγεθος για προσαρμογή
76
73
  question_types:
77
74
  long_answer: Μεγάλη απάντηση
78
75
  matrix_multiple: Πίνακας (πολλαπλή επιλογή)
@@ -122,6 +122,9 @@ en:
122
122
  update:
123
123
  invalid: There was a problem saving the form.
124
124
  success: Form successfully saved.
125
+ admin_log:
126
+ questionnaire:
127
+ update: "%{user_name} updated the %{resource_name} questionnaire"
125
128
  errors:
126
129
  answer:
127
130
  body: Body can't be blank
@@ -129,10 +132,9 @@ en:
129
132
  extension_allowlist: 'Accepted formats:'
130
133
  images:
131
134
  dimensions: "%{width} x %{height} px"
132
- dimensions_info: 'This image will be:'
133
135
  processors:
134
- resize_and_pad: Resized and padded to
135
- resize_to_fit: Resized to fit
136
+ resize_and_pad: This image will be resized and padded to %{dimensions}.
137
+ resize_to_fit: This image will be resized to fit %{dimensions}.
136
138
  question_types:
137
139
  files: Files
138
140
  long_answer: Long answer
@@ -1,3 +1,4 @@
1
+ ---
1
2
  es-MX:
2
3
  activemodel:
3
4
  attributes:
@@ -121,6 +122,9 @@ es-MX:
121
122
  update:
122
123
  invalid: Ha habido errores al guardar el cuestionario.
123
124
  success: Formulario guardado correctamente.
125
+ admin_log:
126
+ questionnaire:
127
+ update: "%{user_name} actualizó el cuestionario %{resource_name}"
124
128
  errors:
125
129
  answer:
126
130
  body: El campo no puede estar en blanco
@@ -128,10 +132,9 @@ es-MX:
128
132
  extension_allowlist: 'Formatos de archivo aceptados:'
129
133
  images:
130
134
  dimensions: "%{width} x %{height} px"
131
- dimensions_info: 'Esta imagen medirá:'
132
135
  processors:
133
- resize_and_pad: Redimensionado y ajustado a
134
- resize_to_fit: Redimensionada para ajustarla
136
+ resize_and_pad: Esta imagen será redimensionada y ajustada a %{dimensions}.
137
+ resize_to_fit: Esta imagen será redimensionada para ajustarse a %{dimensions}.
135
138
  question_types:
136
139
  files: Archivos
137
140
  long_answer: Respuesta larga
@@ -1,3 +1,4 @@
1
+ ---
1
2
  es-PY:
2
3
  activemodel:
3
4
  attributes:
@@ -121,6 +122,9 @@ es-PY:
121
122
  update:
122
123
  invalid: Ha habido errores al guardar el cuestionario.
123
124
  success: Formulario guardado correctamente.
125
+ admin_log:
126
+ questionnaire:
127
+ update: "%{user_name} actualizó el cuestionario %{resource_name}"
124
128
  errors:
125
129
  answer:
126
130
  body: El campo no puede estar en blanco
@@ -128,10 +132,9 @@ es-PY:
128
132
  extension_allowlist: 'Formatos de archivo aceptados:'
129
133
  images:
130
134
  dimensions: "%{width} x %{height} px"
131
- dimensions_info: 'Esta imagen medirá:'
132
135
  processors:
133
- resize_and_pad: Redimensionado y ajustado a
134
- resize_to_fit: Redimensionada para ajustarla
136
+ resize_and_pad: Esta imagen será redimensionada y ajustada a %{dimensions}.
137
+ resize_to_fit: Esta imagen será redimensionada para ajustarse a %{dimensions}.
135
138
  question_types:
136
139
  files: Archivos
137
140
  long_answer: Respuesta larga
@@ -1,3 +1,4 @@
1
+ ---
1
2
  es:
2
3
  activemodel:
3
4
  attributes:
@@ -121,6 +122,9 @@ es:
121
122
  update:
122
123
  invalid: Se ha producido un error al guardar el formulario.
123
124
  success: Formulario guardado correctamente.
125
+ admin_log:
126
+ questionnaire:
127
+ update: "%{user_name} actualizó el cuestionario %{resource_name}"
124
128
  errors:
125
129
  answer:
126
130
  body: El campo no puede estar en blanco
@@ -128,10 +132,9 @@ es:
128
132
  extension_allowlist: 'Formatos de archivo aceptados:'
129
133
  images:
130
134
  dimensions: "%{width} x %{height} px"
131
- dimensions_info: 'Esta imagen medirá:'
132
135
  processors:
133
- resize_and_pad: Redimensionada y ajustada a
134
- resize_to_fit: Redimensionada para ajustarla
136
+ resize_and_pad: Esta imagen será redimensionada y ajustada a %{dimensions}.
137
+ resize_to_fit: Esta imagen será redimensionada para ajustarse a %{dimensions}.
135
138
  question_types:
136
139
  files: Archivos
137
140
  long_answer: Respuesta larga
@@ -1,3 +1,4 @@
1
+ ---
1
2
  eu:
2
3
  activemodel:
3
4
  attributes:
@@ -118,10 +119,6 @@ eu:
118
119
  extension_allowlist: 'Onartutako formatuak:'
119
120
  images:
120
121
  dimensions: "%{width} x %{height} px"
121
- dimensions_info: 'Irudi honek neurtuko du:'
122
- processors:
123
- resize_and_pad: Birdimentsionatua eta honi egokitua
124
- resize_to_fit: Birdimentsionatua egokitzeko
125
122
  question_types:
126
123
  files: Fitxategiak
127
124
  long_answer: Erantzun luzea
@@ -1,3 +1,4 @@
1
+ ---
1
2
  fi-pl:
2
3
  activemodel:
3
4
  attributes:
@@ -121,6 +122,9 @@ fi-pl:
121
122
  update:
122
123
  invalid: Kyselylomakkeiden tallentamisessa on tapahtunut virheitä.
123
124
  success: Lomake tallennettu onnistuneesti.
125
+ admin_log:
126
+ questionnaire:
127
+ update: "%{user_name} päivitti kyselyä %{resource_name}"
124
128
  errors:
125
129
  answer:
126
130
  body: Runkoteksti ei voi olla tyhjä
@@ -128,10 +132,9 @@ fi-pl:
128
132
  extension_allowlist: 'Sallitut tiedostopäätteet:'
129
133
  images:
130
134
  dimensions: "%{width} x %{height} pikseliä"
131
- dimensions_info: 'Tämän kuvan koko tulee olemaan:'
132
135
  processors:
133
- resize_and_pad: Muutetaan kokoon ja täytetään
134
- resize_to_fit: Muutetaan mahtumaan kokoon
136
+ resize_and_pad: Kuvan kokoa muutetaan ja rajataan arvoon %{dimensions}.
137
+ resize_to_fit: Tämä kuva muutetaan kokoon %{dimensions} sopivaksi.
135
138
  question_types:
136
139
  files: Tiedostot
137
140
  long_answer: Pitkä vastaus
@@ -1,3 +1,4 @@
1
+ ---
1
2
  fi:
2
3
  activemodel:
3
4
  attributes:
@@ -121,6 +122,9 @@ fi:
121
122
  update:
122
123
  invalid: Kyselylomakkeen tallentaminen epäonnistui.
123
124
  success: Lomake tallennettu onnistuneesti.
125
+ admin_log:
126
+ questionnaire:
127
+ update: "%{user_name} päivitti kyselyä %{resource_name}"
124
128
  errors:
125
129
  answer:
126
130
  body: Runkoteksti ei voi olla tyhjä
@@ -128,10 +132,9 @@ fi:
128
132
  extension_allowlist: 'Sallitut tiedostopäätteet:'
129
133
  images:
130
134
  dimensions: "%{width} x %{height} pikseliä"
131
- dimensions_info: 'Tämän kuvan koko tulee olemaan:'
132
135
  processors:
133
- resize_and_pad: Muutetaan kokoon ja täytetään
134
- resize_to_fit: Muutetaan mahtumaan kokoon
136
+ resize_and_pad: Kuvan kokoa muutetaan ja rajataan arvoon %{dimensions}.
137
+ resize_to_fit: Tämä kuva muutetaan kokoon %{dimensions} sopivaksi.
135
138
  question_types:
136
139
  files: Tiedostot
137
140
  long_answer: Pitkä vastaus