decidim-core 0.7.4 → 0.8.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (132) hide show
  1. checksums.yaml +5 -5
  2. data/README.md +9 -2
  3. data/app/assets/javascripts/decidim.js.es6 +1 -0
  4. data/app/assets/javascripts/decidim/editor.js.es6 +8 -2
  5. data/app/assets/javascripts/decidim/form_filter.component.js.es6 +2 -2
  6. data/app/assets/javascripts/decidim/foundation.js.es6 +18 -8
  7. data/app/assets/javascripts/decidim/select2.js.es6 +3 -0
  8. data/app/assets/stylesheets/decidim/_decidim.scss +1 -1
  9. data/app/assets/stylesheets/decidim/modules/_buttons.scss +0 -4
  10. data/app/assets/stylesheets/decidim/modules/_cards.scss +41 -1
  11. data/app/assets/stylesheets/decidim/modules/_messages.scss +35 -0
  12. data/app/assets/stylesheets/decidim/modules/_modules.scss +1 -0
  13. data/app/assets/stylesheets/decidim/modules/_navbar.scss +2 -1
  14. data/app/assets/stylesheets/decidim/utils/_settings.scss +363 -69
  15. data/app/commands/decidim/messaging/reply_to_conversation.rb +55 -0
  16. data/app/commands/decidim/messaging/start_conversation.rb +55 -0
  17. data/app/controllers/concerns/decidim/action_authorization.rb +6 -22
  18. data/app/controllers/concerns/decidim/user_profile.rb +5 -3
  19. data/app/controllers/decidim/application_controller.rb +1 -0
  20. data/app/controllers/decidim/devise/omniauth_registrations_controller.rb +2 -2
  21. data/app/controllers/decidim/devise/sessions_controller.rb +5 -3
  22. data/app/controllers/decidim/features/base_controller.rb +1 -0
  23. data/app/controllers/decidim/messaging/conversations_controller.rb +81 -0
  24. data/app/controllers/decidim/pages_controller.rb +2 -11
  25. data/app/forms/decidim/messaging/conversation_form.rb +19 -0
  26. data/app/forms/decidim/messaging/message_form.rb +14 -0
  27. data/app/forms/translatable_presence_validator.rb +7 -10
  28. data/app/helpers/decidim/authorization_form_helper.rb +1 -1
  29. data/app/helpers/decidim/cta_button_helper.rb +1 -1
  30. data/app/helpers/decidim/datetime_helper.rb +23 -0
  31. data/app/helpers/decidim/feature_path_helper.rb +4 -2
  32. data/app/helpers/decidim/layout_helper.rb +0 -2
  33. data/app/helpers/decidim/menu_helper.rb +10 -0
  34. data/app/helpers/decidim/messaging/conversation_helper.rb +36 -0
  35. data/app/helpers/decidim/sanitize_helper.rb +19 -0
  36. data/app/helpers/decidim/traceability_helper.rb +89 -0
  37. data/app/helpers/decidim/translations_helper.rb +4 -2
  38. data/app/helpers/decidim/view_hooks_helper.rb +15 -0
  39. data/app/jobs/decidim/email_notification_generator_job.rb +1 -1
  40. data/app/jobs/decidim/notification_generator_for_recipient_job.rb +1 -1
  41. data/app/jobs/decidim/notification_generator_job.rb +1 -1
  42. data/app/mailers/decidim/messaging/conversation_mailer.rb +47 -0
  43. data/app/mailers/decidim/newsletter_mailer.rb +1 -0
  44. data/app/models/decidim/abilities/base_ability.rb +16 -2
  45. data/app/models/decidim/authorization.rb +20 -2
  46. data/app/models/decidim/messaging/conversation.rb +129 -0
  47. data/app/models/decidim/messaging/message.rb +49 -0
  48. data/app/models/decidim/messaging/participation.rb +23 -0
  49. data/app/models/decidim/messaging/receipt.rb +27 -0
  50. data/app/models/decidim/moderation.rb +1 -1
  51. data/app/models/decidim/organization.rb +2 -2
  52. data/app/models/decidim/scope.rb +2 -1
  53. data/app/models/decidim/scope_type.rb +1 -1
  54. data/app/models/decidim/user.rb +11 -5
  55. data/app/models/decidim/user_group.rb +1 -1
  56. data/app/presenters/decidim/inline_menu_presenter.rb +10 -0
  57. data/app/presenters/decidim/menu_presenter.rb +1 -1
  58. data/app/queries/decidim/messaging/user_conversations.rb +29 -0
  59. data/app/scrubbers/decidim/user_input_scrubber.rb +31 -0
  60. data/app/services/decidim/action_authorizer.rb +48 -12
  61. data/app/services/decidim/traceability.rb +91 -0
  62. data/app/views/decidim/messaging/conversation_mailer/new_conversation.html.erb +9 -0
  63. data/app/views/decidim/messaging/conversation_mailer/new_message.html.erb +9 -0
  64. data/app/views/decidim/messaging/conversations/_message.html.erb +20 -0
  65. data/app/views/decidim/messaging/conversations/_reply.html.erb +11 -0
  66. data/app/views/decidim/messaging/conversations/_show.html.erb +21 -0
  67. data/app/views/decidim/messaging/conversations/_start.html.erb +12 -0
  68. data/app/views/decidim/messaging/conversations/create.js.erb +2 -0
  69. data/app/views/decidim/messaging/conversations/index.html.erb +51 -0
  70. data/app/views/decidim/messaging/conversations/new.html.erb +5 -0
  71. data/app/views/decidim/messaging/conversations/show.html.erb +9 -0
  72. data/app/views/decidim/messaging/conversations/update.js.erb +1 -0
  73. data/app/views/decidim/newsletter_mailer/newsletter.html.erb +1 -1
  74. data/app/views/decidim/notifications/_notification.html.erb +1 -1
  75. data/app/views/decidim/shared/_action_authorization_modal.html.erb +11 -1
  76. data/app/views/decidim/shared/_announcement.html.erb +1 -1
  77. data/app/views/decidim/shared/_version_author.html.erb +18 -0
  78. data/app/views/layouts/decidim/_wrapper.html.erb +3 -0
  79. data/app/views/layouts/decidim/user_profile.html.erb +1 -9
  80. data/app/views/pages/decidim_page.html.erb +1 -1
  81. data/app/views/pages/home.html.erb +0 -2
  82. data/app/views/pages/home/_footer_sub_hero.html.erb +5 -3
  83. data/app/views/pages/home/_hero.html.erb +1 -1
  84. data/app/views/pages/home/_highlighted_processes.html.erb +7 -37
  85. data/app/views/pages/home/_sub_hero.html.erb +6 -4
  86. data/config/locales/ca.yml +49 -21
  87. data/config/locales/en.yml +47 -19
  88. data/config/locales/es.yml +48 -20
  89. data/config/locales/eu.yml +51 -23
  90. data/config/locales/fi.yml +50 -22
  91. data/config/locales/fr.yml +50 -22
  92. data/config/locales/it.yml +89 -61
  93. data/config/locales/nl.yml +72 -44
  94. data/config/locales/pl.yml +49 -21
  95. data/config/locales/pt.yml +431 -0
  96. data/config/locales/ru.yml +4 -27
  97. data/config/locales/uk.yml +10 -23
  98. data/config/routes.rb +3 -5
  99. data/db/migrate/20170313095436_add_available_authorizations_to_organization.rb +2 -2
  100. data/db/migrate/20170713131308_migrate_user_roles_to_participatory_process_roles.rb +7 -3
  101. data/db/migrate/20170914092117_add_status_to_authorizations.rb +9 -0
  102. data/db/migrate/20171011194251_add_verification_metadata_to_authorizations.rb +11 -0
  103. data/db/migrate/20171013124505_add_verification_attachment_to_authorizations.rb +9 -0
  104. data/db/migrate/20171023123330_create_decidim_messaging.rb +23 -0
  105. data/db/migrate/20171107103253_create_versions.rb +18 -0
  106. data/db/migrate/20171107103254_add_object_changes_to_versions.rb +14 -0
  107. data/db/migrate/20171117100533_create_decidim_receipts.rb +13 -0
  108. data/db/seeds.rb +13 -3
  109. data/lib/decidim/core.rb +13 -6
  110. data/lib/decidim/core/engine.rb +37 -0
  111. data/lib/decidim/core/test/factories.rb +33 -21
  112. data/lib/decidim/core/test/shared_examples/follows_examples.rb +1 -1
  113. data/lib/decidim/core/test/shared_examples/manage_moderations_examples.rb +6 -11
  114. data/lib/decidim/core/test/shared_examples/process_announcements_examples.rb +2 -4
  115. data/lib/decidim/core/test/shared_examples/reportable.rb +33 -31
  116. data/lib/decidim/core/test/shared_examples/scope_helper_examples.rb +29 -31
  117. data/lib/decidim/core/version.rb +1 -1
  118. data/lib/decidim/engine_router.rb +4 -2
  119. data/lib/decidim/has_reference.rb +10 -2
  120. data/lib/decidim/messaging.rb +9 -0
  121. data/lib/decidim/participable.rb +1 -1
  122. data/lib/decidim/traceable.rb +31 -0
  123. data/lib/decidim/view_hooks.rb +108 -0
  124. data/vendor/assets/javascripts/datepicker-locales/foundation-datepicker.es.js +4 -2
  125. data/vendor/assets/javascripts/datepicker-locales/foundation-datepicker.pt.js +14 -0
  126. metadata +179 -113
  127. data/app/commands/decidim/authorize_user.rb +0 -59
  128. data/app/controllers/decidim/authorizations_controller.rb +0 -80
  129. data/app/services/decidim/authorization_handler.rb +0 -95
  130. data/app/views/decidim/authorizations/first_login.html.erb +0 -22
  131. data/app/views/decidim/authorizations/index.html.erb +0 -49
  132. data/app/views/decidim/authorizations/new.html.erb +0 -33
@@ -0,0 +1,9 @@
1
+ <p><%= t(".greeting", recipient: @recipient) %></p>
2
+
3
+ <p><%= t(".intro", sender: @sender) %></p>
4
+
5
+ <p>
6
+ <%= link_to decidim.conversation_url(@conversation, host: @host), decidim.conversation_url(@conversation, host: @host) %>
7
+ </p>
8
+
9
+ <p><%= t(".outro") %></p>
@@ -0,0 +1,9 @@
1
+ <p><%= t(".greeting", recipient: @recipient) %></p>
2
+
3
+ <p><%= t(".intro", sender: @sender) %></p>
4
+
5
+ <p>
6
+ <%= link_to decidim.conversation_url(@conversation, host: @host), decidim.conversation_url(@conversation, host: @host) %>
7
+ </p>
8
+
9
+ <p><%= t(".outro") %></p>
@@ -0,0 +1,20 @@
1
+ <article class="message">
2
+ <div class="message__header">
3
+ <div class="author-data">
4
+ <div class="author author--inline">
5
+ <span class="author__avatar">
6
+ <%= image_tag message.sender.avatar.url %>
7
+ </span>
8
+ <span class="author__name">
9
+ <%= message.sender.name %>
10
+ </span>
11
+ <time datetime="<%= message.created_at.utc %>">
12
+ <%= simple_date(message.created_at) %>
13
+ </time>
14
+ </div>
15
+ </div>
16
+ </div>
17
+ <div class="message__content">
18
+ <%= simple_format(message.body) %>
19
+ </div>
20
+ </article>
@@ -0,0 +1,11 @@
1
+ <div class="add-message">
2
+ <h5 class="section-heading">
3
+ <%= t(".title") %>
4
+ </h5>
5
+
6
+ <%= form_for form, url: decidim.conversation_path(conversation.id), method: :put, remote: true do |f| %>
7
+ <%= f.text_area :body, label: false, rows: 4, required: true %>
8
+
9
+ <%= f.submit t(".send") %>
10
+ <% end %>
11
+ </div>
@@ -0,0 +1,21 @@
1
+ <main class="wrapper">
2
+ <div class="row">
3
+ <div class="columns">
4
+ <div class="title-action" >
5
+ <h1 class="heading1 title-action__title">
6
+ <%= link_to decidim.conversations_path, class: "card--list__data__icon card--list__data__icon--back" do %>
7
+ <%= icon "chevron-left" %>
8
+ <% end %>
9
+
10
+ <%= t(".title", usernames: username_list(participants)) %>
11
+ </h1>
12
+ </div>
13
+ </div>
14
+ </div>
15
+
16
+ <div class="row">
17
+ <div id="conversation" class="columns large-8">
18
+ <%= yield %>
19
+ </div>
20
+ </div>
21
+ </main>
@@ -0,0 +1,12 @@
1
+ <div class="add-message">
2
+ <h5 class="section-heading">
3
+ <%= t(".title") %>
4
+ </h5>
5
+
6
+ <%= form_for form, url: decidim.conversations_path, remote: true do |f| %>
7
+ <%= f.hidden_field :recipient_id %>
8
+ <%= f.text_area :body, label: false, rows: 4, required: true %>
9
+
10
+ <%= f.submit t(".send") %>
11
+ <% end %>
12
+ </div>
@@ -0,0 +1,2 @@
1
+ $("#messages").append("<%= j(render "message", message: conversation.messages.first).html_safe %>");
2
+ $(".add-message").replaceWith("<%= j(render "reply", form: form, conversation: conversation).html_safe %>");
@@ -0,0 +1,51 @@
1
+ <main class="wrapper">
2
+ <div class="row">
3
+ <div class="columns">
4
+ <div class="title-action" >
5
+ <h1 class="heading1 title-action__title">
6
+ <%= t(".title") %>
7
+ </h1>
8
+ </div>
9
+ </div>
10
+ </div>
11
+ <div class="row">
12
+ <div class="columns large-8">
13
+ <% if @conversations.empty? %>
14
+ <div class="callout secondary">
15
+ <p><%= t(".no_conversations") %></p>
16
+ </div>
17
+ <% else %>
18
+ <div class="card card--list conversations">
19
+ <% @conversations.each do |conversation| %>
20
+ <%= link_to decidim.conversation_path(conversation), class: "card--list__item" do %>
21
+ <div class="card--list__titled-text">
22
+ <h6 class="card--list__heading heading6">
23
+ <%= username_list(conversation.interlocutors(current_user)) %>
24
+ </h6>
25
+
26
+ <span class="card--list__annotation">
27
+ <%= simple_date(conversation.last_message.created_at) %>
28
+ </span>
29
+
30
+ <span class="text-small">
31
+ <%= truncate conversation.last_message.body, length: 150 %>
32
+ </span>
33
+
34
+ <% if conversation.unread_count(current_user) > 0 %>
35
+ <span class="card--list__counter">
36
+ <span><%= conversation.unread_count(current_user) %></span>
37
+ </span>
38
+ <% end %>
39
+ </div>
40
+ <div class="card--list__data">
41
+ <span class="card--list__data__icon">
42
+ <%= icon "chevron-right" %>
43
+ </span>
44
+ </div>
45
+ <% end %>
46
+ <% end %>
47
+ </div>
48
+ <% end %>
49
+ </div>
50
+ </div>
51
+ </main>
@@ -0,0 +1,5 @@
1
+ <%= render layout: "show", locals: { participants: [@form.recipient] } do %>
2
+ <div id="messages"></div>
3
+
4
+ <%= render "start", form: @form %>
5
+ <% end %>
@@ -0,0 +1,9 @@
1
+ <%= render layout: "show", locals: { participants: conversation.interlocutors(current_user) } do %>
2
+ <div id="messages">
3
+ <% conversation.messages.each do |message| %>
4
+ <%= render "message", message: message %>
5
+ <% end %>
6
+ </div>
7
+
8
+ <%= render "reply", form: @form, conversation: conversation %>
9
+ <% end %>
@@ -0,0 +1 @@
1
+ $("#messages").append("<%= j(render "message", message: message).html_safe %>");
@@ -1,4 +1,4 @@
1
- <%= sanitize @body %>
1
+ <%= decidim_sanitize @body %>
2
2
 
3
3
  <% content_for :note do %>
4
4
  <%== t ".note", organization_name: h(@organization.name), link: decidim.notifications_settings_url(host: @organization.host) %>
@@ -1,7 +1,7 @@
1
1
  <div class="card--list__item">
2
2
  <div class="card--list__text">
3
3
  <%= link_to notification.event_class_instance.resource_path do %>
4
- <%= resource_icon notification.resource, class: "icon--chat card--list__icon" %>
4
+ <%= resource_icon notification.resource, class: "icon--conversation card--list__icon" %>
5
5
  <% end %>
6
6
  <div>
7
7
  <h5 class="card--list__heading">
@@ -6,7 +6,17 @@
6
6
  type="button">
7
7
  <span aria-hidden="true">&times;</span>
8
8
  </button>
9
- <% if status.code == :incomplete %>
9
+ <% if status.code == :pending %>
10
+ <div class="reveal__header pending-authorization">
11
+ <h3 class="reveal__title"><%= t('.pending.title') %></h3>
12
+ </div>
13
+ <p><%= t ".pending.explanation", authorization: t("#{status.handler_name}.name", scope: "decidim.authorization_handlers") %></p>
14
+ <div class="row">
15
+ <div class="columns medium-8 medium-offset-2">
16
+ <%= link_to t('.pending.resume', authorization: t("#{status.handler_name}.name", scope: "decidim.authorization_handlers")), authorize_action_path(action), class: "button expanded" %>
17
+ </div>
18
+ </div>
19
+ <% elsif status.code == :incomplete %>
10
20
  <div class="reveal__header incomplete-authorization">
11
21
  <h3 class="reveal__title"><%= t('.incomplete.title') %></h3>
12
22
  </div>
@@ -1,5 +1,5 @@
1
1
  <div class="row column">
2
2
  <div class="callout secondary announcement">
3
- <%= sanitize translated_attribute announcement %>
3
+ <%= decidim_sanitize translated_attribute announcement %>
4
4
  </div>
5
5
  </div>
@@ -0,0 +1,18 @@
1
+ <div class="author-data__main">
2
+ <div class="author author--inline">
3
+ <% if author.respond_to?(:avatar_url) %>
4
+ <span class="author__avatar author__avatar--small">
5
+ <%= image_tag author.avatar_url %>
6
+ </span>
7
+ <% end %>
8
+ <span class="author__name">
9
+ <% if author.try(:deleted?) %>
10
+ <span class="label label--small label--basic">
11
+ <%= t('.deleted') %>
12
+ </span>
13
+ <% else %>
14
+ <%= author.try(:name) || author %>
15
+ <% end %>
16
+ </span>
17
+ </div>
18
+ </div>
@@ -39,6 +39,9 @@
39
39
  <%= link_to decidim.notifications_path, class: "topbar__notifications #{current_user.notifications.any? ? "is-active" : ""}" do %>
40
40
  <%= icon "bell" %>
41
41
  <% end %>
42
+ <%= link_to decidim.conversations_path, class: "topbar__conversations #{current_user.unread_conversations.any? ? "is-active" : ""}" do %>
43
+ <%= icon "envelope-closed" %>
44
+ <% end %>
42
45
  <ul class="dropdown menu" data-dropdown-menu>
43
46
  <li class="is-dropdown-submenu-parent show-for-medium">
44
47
  <%= link_to current_user.name, decidim.account_path %>
@@ -11,15 +11,7 @@
11
11
  <div class="columns medium-4 large-3">
12
12
  <div class="side-panel">
13
13
  <ul class="tabs vertical side-panel__tabs" id="user-settings-tabs">
14
- <%= user_profile_tab t("account", scope: "layouts.decidim.user_profile"), account_path, aria_link_type: :exact %>
15
- <%= user_profile_tab t("notifications_settings", scope: "layouts.decidim.user_profile"), notifications_settings_path %>
16
- <% if available_authorization_handlers.any? %>
17
- <%= user_profile_tab t("authorizations", scope: "layouts.decidim.user_profile"), authorizations_path %>
18
- <% end %>
19
- <% if user_groups.any? %>
20
- <%= user_profile_tab t("user_groups", scope: "layouts.decidim.user_profile"), own_user_groups_path %>
21
- <% end %>
22
- <%= user_profile_tab t("delete_my_account", scope: "layouts.decidim.user_profile"), delete_account_path, aria_link_type: :exact %>
14
+ <%= user_menu.render %>
23
15
  </ul>
24
16
  </div>
25
17
  </div>
@@ -10,7 +10,7 @@
10
10
  <div class="row">
11
11
  <div class="columns large-8">
12
12
  <div class="static__content">
13
- <%= sanitize translated_attribute page.content %>
13
+ <%= decidim_sanitize translated_attribute page.content %>
14
14
  </div>
15
15
  </div>
16
16
  </div>
@@ -1,5 +1,3 @@
1
- <% provide(:meta_title, current_organization.name) %>
2
-
3
1
  <%= render partial: 'pages/home/hero' %>
4
2
 
5
3
  <% if !translated_attribute(current_organization.description).blank? %>
@@ -3,9 +3,11 @@
3
3
  <div class="columns small-centered large-10">
4
4
  <h2 class="heading3"><%= t(".footer_sub_hero_headline", organization: current_organization.name) %></h2>
5
5
  <h5 class="heading4"><%== t(".footer_sub_hero_body") %></h5>
6
- <%= link_to new_user_registration_path, class: "button--sc link subhero-cta" do %>
7
- <%= t(".register") %>
8
- <%= icon "chevron-right", aria_hidden: true %>
6
+ <% unless current_user %>
7
+ <%= link_to new_user_registration_path, class: "button--sc link subhero-cta" do %>
8
+ <%= t(".register") %>
9
+ <%= icon "chevron-right", aria_hidden: true %>
10
+ <% end %>
9
11
  <% end %>
10
12
  </div>
11
13
  </div>
@@ -6,7 +6,7 @@
6
6
  <% if translated_attribute(current_organization.welcome_text).blank? %>
7
7
  <%= t('.welcome', organization: current_organization.name) %>
8
8
  <% else %>
9
- <%= sanitize translated_attribute current_organization.welcome_text %>
9
+ <%= decidim_sanitize translated_attribute current_organization.welcome_text %>
10
10
  <% end %>
11
11
  </h1>
12
12
  </div>
@@ -1,37 +1,7 @@
1
- <section class="wrapper-home">
2
- <div class="row">
3
- <h3 class="section-heading"><%= t(".active_processes") %></h3>
4
- <div class="row collapse">
5
- <div class="row small-up-1 smallmedium-up-2 mediumlarge-up-3
6
- large-up-4 card-grid">
7
- <% highlighted_participatory_processes.each do |process| %>
8
- <div class="column">
9
- <article class="card card--process card--mini">
10
- <%= link_to decidim_participatory_processes.participatory_process_path(process), class: "card__link" do %>
11
- <div class="card__image-top"
12
- style="background-image:url(<%= process.hero_image.url %>)"></div>
13
- <% end %>
14
- <div class="card__content">
15
- <%= link_to decidim_participatory_processes.participatory_process_path(process), class: "card__link" do %>
16
- <h4 class="card__title"><%= translated_attribute process.title %></h4>
17
- <% end %>
18
- <% if process.active_step %>
19
- <span class="card--process__small">
20
- <%= t(".active_step") %>
21
- <strong><%= translated_attribute process.active_step.title %></strong>
22
- </span>
23
- <% end %>
24
- </div>
25
- </article>
26
- </div>
27
- <% end %>
28
- </div>
29
- </div>
30
- </div>
31
- <div class="row">
32
- <div class="columns small-centered small-12
33
- smallmedium-8 medium-6 large-4">
34
- <%= link_to t(".see_all_processes"), decidim_participatory_processes.participatory_processes_path, class: "button expanded hollow button--sc home-section__cta" %>
35
- </div>
36
- </div>
37
- </section>
1
+ <% highlighted_elements = render_hook(:highlighted_elements) %>
2
+
3
+ <% if !highlighted_elements.blank? %>
4
+ <section class="wrapper-home">
5
+ <%= highlighted_elements %>
6
+ </section>
7
+ <% end %>
@@ -1,10 +1,12 @@
1
1
  <section class="extended subhero home-section">
2
2
  <div class="row">
3
3
  <div class="columns small-centered large-10">
4
- <h2 class="heading3"><%= sanitize translated_attribute current_organization.description %></h2>
5
- <%= link_to new_user_registration_path, class: "button--sc link subhero-cta" do %>
6
- <%= t(".register") %>
7
- <%= icon "chevron-right", aria_hidden: true %>
4
+ <h2 class="heading3"><%= decidim_sanitize translated_attribute current_organization.description %></h2>
5
+ <% unless current_user %>
6
+ <%= link_to new_user_registration_path, class: "button--sc link subhero-cta" do %>
7
+ <%= t(".register") %>
8
+ <%= icon "chevron-right", aria_hidden: true %>
9
+ <% end %>
8
10
  <% end %>
9
11
  </div>
10
12
  </div>
@@ -60,11 +60,14 @@ ca:
60
60
  photos:
61
61
  related_photos: Fotos relacionades
62
62
  authorization_handlers:
63
- decidim/dummy_authorization_handler:
63
+ dummy_authorization_handler:
64
+ explanation: Verifica't introduint un número de document que finalitzi amb "X"
64
65
  fields:
65
66
  document_number: Número de document
66
- postal_code: Codi Postal
67
- name: exemple d'autorització
67
+ postal_code: Codi postal
68
+ name: Autorització d'exemple
69
+ dummy_authorization_workflow:
70
+ name: Flux de treball d'autorització d'exemple
68
71
  errors:
69
72
  duplicate_authorization: Un usuari ja està autoritzat amb les mateixes dades.
70
73
  foo_authorization:
@@ -72,20 +75,8 @@ ca:
72
75
  bar: Bar
73
76
  foo: Foo
74
77
  name: Autorització foo
75
- authorizations:
76
- create:
77
- error: S'ha produït un error en crear l'autorització.
78
- success: Has estat autoritzat/da correctament.
79
- first_login:
80
- actions:
81
- decidim/dummy_authorization_handler: Verificar contra l'exemple d'autorització
82
- title: Verificar la teva identitat
83
- verify_with_these_options: 'Aquestes són les opcions disponibles per verificar la teva identitat:'
84
- new:
85
- authorize: Enviar
86
- authorize_with: Verificar-me amb %{authorizer}
87
- skip_verification: Pots saltar-te aquest pas per ara i %{link}
88
- start_exploring: començar a explorar
78
+ granted_at: Atorgada el %{timestamp}
79
+ started_at: Iniciat el %{timestamp}
89
80
  core:
90
81
  actions:
91
82
  unauthorized: No tens permís per realitzar aquesta acció
@@ -181,6 +172,34 @@ ca:
181
172
  menu:
182
173
  home: Inici
183
174
  more_information: Més informació
175
+ messaging:
176
+ conversation_mailer:
177
+ new_conversation:
178
+ greeting: Hola, %{recipient}!
179
+ intro: "%{sender} ha iniciat una nova conversa amb tu. Fes clic aquí per veure-la:"
180
+ outro: Gaudeix de decidim!
181
+ subject: "%{sender} ha iniciat una conversa amb tu"
182
+ new_message:
183
+ greeting: Hola, %{recipient}!
184
+ intro: "%{sender} ha enviat nous missatges a la teva conversa. Fes clic aquí per veure'ls:"
185
+ outro: Gaudeix de decidim!
186
+ subject: Tens nous missatges de %{sender}
187
+ conversations:
188
+ create:
189
+ error: No s'ha iniciat la conversa. Torna-ho a provar més tard
190
+ index:
191
+ no_conversations: Encara no tens converses
192
+ title: Converses
193
+ reply:
194
+ send: Enviar
195
+ title: Respon
196
+ show:
197
+ title: Conversa amb %{usernames}
198
+ start:
199
+ send: Enviar
200
+ title: Comença una conversa
201
+ update:
202
+ error: Missatge no enviat. Torna-ho a provar més tard
184
203
  newsletter_mailer:
185
204
  newsletter:
186
205
  note: Has rebut aquest missatge perquè estàs subscrit a butlletins de notícies a %{organization_name}. Pots canviar la configuració a la teva <a href="%{link}">pàgina de notificacions</a>.
@@ -226,6 +245,10 @@ ca:
226
245
  authorize: Autoritzar amb "%{authorization}"
227
246
  explanation: Per dur a terme aquesta acció, ha de disposar de l'autorització "%{authorization}".
228
247
  title: Es requereix autorització
248
+ pending:
249
+ explanation: Per realitzar aquesta acció, has d'estar autoritzat/da amb "%{authorization}", però la teva autorització encara està en curs
250
+ resume: Comprova el progrés de l'autorització "%{authorization}"
251
+ title: L'autorització encara està en progrés
229
252
  unauthorized:
230
253
  explanation: No es pot realitzar aquesta acció ja que alguna de les seves dades d'autorització no coincideixen amb les requerides.
231
254
  invalid: "%{field} no és vàlid."
@@ -257,6 +280,8 @@ ca:
257
280
  close_window: Tanca la finestra
258
281
  share: Compartir
259
282
  share_link: Comparteix l'enllaç
283
+ version_author:
284
+ deleted: Usuari eliminat
260
285
  devise:
261
286
  invitations:
262
287
  edit:
@@ -358,10 +383,6 @@ ca:
358
383
  hero:
359
384
  participate: Participa
360
385
  welcome: Benvingut a %{organization}!
361
- highlighted_processes:
362
- active_processes: Processos actius
363
- active_step: Fase activa
364
- see_all_processes: Veure tots els processos
365
386
  statistics:
366
387
  answers_count: Respostes
367
388
  comments_count: Comentaris
@@ -398,6 +419,13 @@ ca:
398
419
  wechat_footer: Obri el WeChat, feu clic al botó "Discover" i després feu clic al menú "Escanejar codi QR".
399
420
  weibo: Sina Weibo
400
421
  xing: Xing
422
+ time:
423
+ formats:
424
+ day_of_month: "%b %d"
425
+ day_of_week: "%a"
426
+ day_of_year: "%d/%m/%y"
427
+ decidim_short: "%d/%m/%Y %H:%M"
428
+ time_of_day: "%H:%M"
401
429
  views:
402
430
  pagination:
403
431
  first: "&laquo; Primera"