decidim-forms 0.26.2 → 0.27.0.rc2

Sign up to get free protection for your applications and to get access to all the features.
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