decidim-initiatives 0.9.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (202) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE-AGPLv3.txt +661 -0
  3. data/README.md +118 -0
  4. data/Rakefile +3 -0
  5. data/app/assets/config/admin_decidim_initiatives_manifest.js +3 -0
  6. data/app/assets/config/decidim_initiatives_manifest.js +7 -0
  7. data/app/assets/javascripts/decidim/initiatives/admin/invite_users.js +24 -0
  8. data/app/assets/javascripts/decidim/initiatives/application.js +1 -0
  9. data/app/assets/javascripts/decidim/initiatives/identity_selector_dialog.js +17 -0
  10. data/app/assets/javascripts/decidim/initiatives/scoped_type.js +35 -0
  11. data/app/assets/javascripts/decidim/initiatives/social_share.js +2 -0
  12. data/app/assets/stylesheet/decidim/initiatives/admin.css.scss +34 -0
  13. data/app/assets/stylesheet/decidim/initiatives/application.css.scss +82 -0
  14. data/app/assets/stylesheet/decidim/initiatives/popularity_item.css.scss +61 -0
  15. data/app/assets/stylesheet/decidim/initiatives/print-initiative.css.scss +125 -0
  16. data/app/assets/stylesheet/decidim/initiatives/social_share.css.scss +18 -0
  17. data/app/assets/stylesheet/decidim/initiatives/statistics.css.scss +15 -0
  18. data/app/commands/decidim/initiatives/admin/create_initiative_type.rb +56 -0
  19. data/app/commands/decidim/initiatives/admin/create_initiative_type_scope.rb +55 -0
  20. data/app/commands/decidim/initiatives/admin/update_initiative.rb +63 -0
  21. data/app/commands/decidim/initiatives/admin/update_initiative_type.rb +54 -0
  22. data/app/commands/decidim/initiatives/admin/update_initiative_type_scope.rb +44 -0
  23. data/app/commands/decidim/initiatives/create_initiative.rb +104 -0
  24. data/app/commands/decidim/initiatives/spawn_committee_request.rb +50 -0
  25. data/app/commands/decidim/initiatives/unvote_initiative.rb +42 -0
  26. data/app/commands/decidim/initiatives/vote_initiative.rb +57 -0
  27. data/app/constraints/decidim/initiatives/current_feature.rb +28 -0
  28. data/app/constraints/decidim/initiatives/current_initiative.rb +34 -0
  29. data/app/controllers/concerns/decidim/initiatives/action_authorization.rb +38 -0
  30. data/app/controllers/concerns/decidim/initiatives/admin/initiative_admin.rb +32 -0
  31. data/app/controllers/concerns/decidim/initiatives/needs_initiative.rb +55 -0
  32. data/app/controllers/concerns/decidim/initiatives/orderable.rb +59 -0
  33. data/app/controllers/concerns/decidim/initiatives/type_selector_options.rb +41 -0
  34. data/app/controllers/decidim/initiatives/admin/application_controller.rb +12 -0
  35. data/app/controllers/decidim/initiatives/admin/committee_requests_controller.rb +38 -0
  36. data/app/controllers/decidim/initiatives/admin/feature_permissions_controller.rb +13 -0
  37. data/app/controllers/decidim/initiatives/admin/features_controller.rb +16 -0
  38. data/app/controllers/decidim/initiatives/admin/initiative_attachments_controller.rb +25 -0
  39. data/app/controllers/decidim/initiatives/admin/initiatives_controller.rb +137 -0
  40. data/app/controllers/decidim/initiatives/admin/initiatives_type_scopes_controller.rb +81 -0
  41. data/app/controllers/decidim/initiatives/admin/initiatives_types_controller.rb +94 -0
  42. data/app/controllers/decidim/initiatives/committee_requests_controller.rb +43 -0
  43. data/app/controllers/decidim/initiatives/create_initiative_controller.rb +135 -0
  44. data/app/controllers/decidim/initiatives/initiative_types_controller.rb +16 -0
  45. data/app/controllers/decidim/initiatives/initiative_votes_controller.rb +56 -0
  46. data/app/controllers/decidim/initiatives/initiative_widgets_controller.rb +30 -0
  47. data/app/controllers/decidim/initiatives/initiatives_controller.rb +96 -0
  48. data/app/controllers/decidim/initiatives/initiatives_type_scopes_controller.rb +22 -0
  49. data/app/events/decidim/initiatives/create_initiative_event.rb +54 -0
  50. data/app/events/decidim/initiatives/endorse_initiative_event.rb +54 -0
  51. data/app/forms/decidim/initiatives/admin/initiative_form.rb +50 -0
  52. data/app/forms/decidim/initiatives/admin/initiative_type_form.rb +23 -0
  53. data/app/forms/decidim/initiatives/admin/initiative_type_scope_form.rb +23 -0
  54. data/app/forms/decidim/initiatives/initiative_form.rb +30 -0
  55. data/app/forms/decidim/initiatives/previous_form.rb +20 -0
  56. data/app/forms/decidim/initiatives/select_initiative_type_form.rb +14 -0
  57. data/app/helpers/decidim/initiatives/create_initiative_helper.rb +46 -0
  58. data/app/helpers/decidim/initiatives/initiative_helper.rb +75 -0
  59. data/app/helpers/decidim/initiatives/initiatives_helper.rb +22 -0
  60. data/app/helpers/decidim/initiatives/partial_translations_helper.rb +28 -0
  61. data/app/mailers/decidim/initiatives/initiatives_mailer.rb +87 -0
  62. data/app/models/decidim/initiative.rb +279 -0
  63. data/app/models/decidim/initiatives/abilities/admin/attachments_ability.rb +54 -0
  64. data/app/models/decidim/initiatives/abilities/admin/committee_admin_ability.rb +36 -0
  65. data/app/models/decidim/initiatives/abilities/admin/committee_user_ability.rb +50 -0
  66. data/app/models/decidim/initiatives/abilities/admin/features_ability.rb +25 -0
  67. data/app/models/decidim/initiatives/abilities/admin/initiative_admin_ability.rb +65 -0
  68. data/app/models/decidim/initiatives/abilities/admin/initiative_type_ability.rb +42 -0
  69. data/app/models/decidim/initiatives/abilities/admin/initiative_user_ability.rb +68 -0
  70. data/app/models/decidim/initiatives/abilities/current_user_ability.rb +58 -0
  71. data/app/models/decidim/initiatives/abilities/everyone_ability.rb +22 -0
  72. data/app/models/decidim/initiatives/abilities/non_logged_user_ability.rb +33 -0
  73. data/app/models/decidim/initiatives/abilities/vote_ability.rb +57 -0
  74. data/app/models/decidim/initiatives_committee_member.rb +22 -0
  75. data/app/models/decidim/initiatives_type.rb +20 -0
  76. data/app/models/decidim/initiatives_type_scope.rb +27 -0
  77. data/app/models/decidim/initiatives_vote.rb +67 -0
  78. data/app/presenters/decidim/initiatives/initiative_stats_presenter.rb +52 -0
  79. data/app/queries/decidim/initiatives/admin/manageable_initiatives.rb +65 -0
  80. data/app/queries/decidim/initiatives/freetext_initiative_types.rb +39 -0
  81. data/app/queries/decidim/initiatives/initiative_types.rb +27 -0
  82. data/app/queries/decidim/initiatives/initiatives_created.rb +29 -0
  83. data/app/queries/decidim/initiatives/initiatives_promoted.rb +32 -0
  84. data/app/queries/decidim/initiatives/organization_prioritized_initiatives.rb +18 -0
  85. data/app/queries/decidim/initiatives/outdated_validating_initiatives.rb +30 -0
  86. data/app/queries/decidim/initiatives/similar_initiatives.rb +54 -0
  87. data/app/queries/decidim/initiatives/support_period_finished_initiatives.rb +19 -0
  88. data/app/queries/decidim/initiatives/user_authorizations.rb +29 -0
  89. data/app/services/decidim/initiatives/initiative_search.rb +73 -0
  90. data/app/services/decidim/initiatives/progress_notifier.rb +36 -0
  91. data/app/services/decidim/initiatives/status_change_notifier.rb +86 -0
  92. data/app/views/decidim/initiatives/_initiative.html.erb +35 -0
  93. data/app/views/decidim/initiatives/admin/committee_requests/index.html.erb +67 -0
  94. data/app/views/decidim/initiatives/admin/initiatives/_form.html.erb +76 -0
  95. data/app/views/decidim/initiatives/admin/initiatives/edit.html.erb +62 -0
  96. data/app/views/decidim/initiatives/admin/initiatives/index.html.erb +103 -0
  97. data/app/views/decidim/initiatives/admin/initiatives/show.html.erb +178 -0
  98. data/app/views/decidim/initiatives/admin/initiatives_type_scopes/_form.html.erb +9 -0
  99. data/app/views/decidim/initiatives/admin/initiatives_type_scopes/edit.html.erb +21 -0
  100. data/app/views/decidim/initiatives/admin/initiatives_type_scopes/new.html.erb +14 -0
  101. data/app/views/decidim/initiatives/admin/initiatives_types/_form.html.erb +24 -0
  102. data/app/views/decidim/initiatives/admin/initiatives_types/_initiative_type_scopes.html.erb +39 -0
  103. data/app/views/decidim/initiatives/admin/initiatives_types/edit.html.erb +15 -0
  104. data/app/views/decidim/initiatives/admin/initiatives_types/index.html.erb +34 -0
  105. data/app/views/decidim/initiatives/admin/initiatives_types/new.html.erb +11 -0
  106. data/app/views/decidim/initiatives/committee_requests/new.html.erb +37 -0
  107. data/app/views/decidim/initiatives/create_initiative/_compare_help.ca.html.erb +2 -0
  108. data/app/views/decidim/initiatives/create_initiative/_compare_help.en.html.erb +2 -0
  109. data/app/views/decidim/initiatives/create_initiative/_compare_help.es.html.erb +2 -0
  110. data/app/views/decidim/initiatives/create_initiative/_finish_help.ca.html.erb +19 -0
  111. data/app/views/decidim/initiatives/create_initiative/_finish_help.en.html.erb +20 -0
  112. data/app/views/decidim/initiatives/create_initiative/_finish_help.es.html.erb +19 -0
  113. data/app/views/decidim/initiatives/create_initiative/_share_committee_link.html.erb +24 -0
  114. data/app/views/decidim/initiatives/create_initiative/fill_data.html.erb +64 -0
  115. data/app/views/decidim/initiatives/create_initiative/finish.html.erb +30 -0
  116. data/app/views/decidim/initiatives/create_initiative/previous_form.html.erb +39 -0
  117. data/app/views/decidim/initiatives/create_initiative/promotal_committee.html.erb +21 -0
  118. data/app/views/decidim/initiatives/create_initiative/select_initiative_type.html.erb +40 -0
  119. data/app/views/decidim/initiatives/create_initiative/show_similar_initiatives.html.erb +23 -0
  120. data/app/views/decidim/initiatives/initiative_votes/update_buttons_and_counters.js.erb +21 -0
  121. data/app/views/decidim/initiatives/initiative_widgets/show.html.erb +4 -0
  122. data/app/views/decidim/initiatives/initiatives/_author.html.erb +35 -0
  123. data/app/views/decidim/initiatives/initiatives/_count.html.erb +1 -0
  124. data/app/views/decidim/initiatives/initiatives/_filters.html.erb +44 -0
  125. data/app/views/decidim/initiatives/initiatives/_filters_small_view.html.erb +18 -0
  126. data/app/views/decidim/initiatives/initiatives/_index_header.html.erb +11 -0
  127. data/app/views/decidim/initiatives/initiatives/_initiative_badge.html.erb +5 -0
  128. data/app/views/decidim/initiatives/initiatives/_initiatives.html.erb +14 -0
  129. data/app/views/decidim/initiatives/initiatives/_linked_initiatives.html.erb +0 -0
  130. data/app/views/decidim/initiatives/initiatives/_no_initiatives_yet.html.erb +3 -0
  131. data/app/views/decidim/initiatives/initiatives/_result.html.erb +26 -0
  132. data/app/views/decidim/initiatives/initiatives/_statistics.html.erb +21 -0
  133. data/app/views/decidim/initiatives/initiatives/_supports.html.erb +22 -0
  134. data/app/views/decidim/initiatives/initiatives/_supports_count.html.erb +7 -0
  135. data/app/views/decidim/initiatives/initiatives/_tags.html.erb +4 -0
  136. data/app/views/decidim/initiatives/initiatives/_vote_button.html.erb +18 -0
  137. data/app/views/decidim/initiatives/initiatives/_vote_cabin.html.erb +26 -0
  138. data/app/views/decidim/initiatives/initiatives/_votes_count.html.erb +12 -0
  139. data/app/views/decidim/initiatives/initiatives/index.html.erb +24 -0
  140. data/app/views/decidim/initiatives/initiatives/index.js.erb +10 -0
  141. data/app/views/decidim/initiatives/initiatives/show.html.erb +74 -0
  142. data/app/views/decidim/initiatives/initiatives/signature_identities.html.erb +30 -0
  143. data/app/views/decidim/initiatives/initiatives_mailer/_initiative_link.html.erb +5 -0
  144. data/app/views/decidim/initiatives/initiatives_mailer/notify_creation.html.erb +22 -0
  145. data/app/views/decidim/initiatives/initiatives_mailer/notify_progress.html.erb +3 -0
  146. data/app/views/decidim/initiatives/initiatives_mailer/notify_state_change.html.erb +3 -0
  147. data/app/views/decidim/initiatives/initiatives_mailer/notify_validating_request.html.erb +3 -0
  148. data/app/views/decidim/initiatives/initiatives_type_scopes/search.html.erb +1 -0
  149. data/app/views/decidim/initiatives/pages/home/_highlighted_initiatives.html.erb +27 -0
  150. data/app/views/layouts/decidim/_initiative_creation_header.html.erb +36 -0
  151. data/app/views/layouts/decidim/_initiative_header.html.erb +65 -0
  152. data/app/views/layouts/decidim/_initiative_header_steps.html.erb +20 -0
  153. data/app/views/layouts/decidim/admin/initiative.html.erb +54 -0
  154. data/app/views/layouts/decidim/admin/initiatives.html.erb +20 -0
  155. data/app/views/layouts/decidim/initiative.html.erb +15 -0
  156. data/app/views/layouts/decidim/initiative_creation.html.erb +10 -0
  157. data/config/initializers/mail_previews.rb +5 -0
  158. data/config/initializers/social_share_button.rb +5 -0
  159. data/config/locales/ca.yml +325 -0
  160. data/config/locales/en.yml +327 -0
  161. data/config/locales/es.yml +325 -0
  162. data/db/migrate/20170906091626_create_decidim_initiatives_types.rb +19 -0
  163. data/db/migrate/20170906094044_create_decidim_initiatives.rb +42 -0
  164. data/db/migrate/20170917072556_create_decidim_initiatives_votes.rb +13 -0
  165. data/db/migrate/20170922152432_create_decidim_initiatives_committee_members.rb +18 -0
  166. data/db/migrate/20170927131354_add_decidim_user_group_id_to_decidim_initiatives.rb +8 -0
  167. data/db/migrate/20170927153744_change_signature_interval_to_optional.rb +6 -0
  168. data/db/migrate/20170928160302_add_decidim_user_group_id_to_decidim_initiatives_votes.rb +6 -0
  169. data/db/migrate/20170928160912_remove_scope_from_decidim_initiatives_votes.rb +5 -0
  170. data/db/migrate/20171011110714_add_banner_image_to_initiative_type.rb +5 -0
  171. data/db/migrate/20171011152425_add_hashtag_to_initiatives.rb +5 -0
  172. data/db/migrate/20171013090432_add_initiative_supports_count_to_initiative.rb +14 -0
  173. data/db/migrate/20171017090551_create_decidim_initiatives_decidim_initiatives_type_scopes.rb +11 -0
  174. data/db/migrate/20171017091458_remove_supports_required_from_decidim_initiatives_types.rb +5 -0
  175. data/db/migrate/20171017091734_add_scopes_for_all_initiative_types.rb +22 -0
  176. data/db/migrate/20171017094911_add_scoped_type_to_initiative.rb +6 -0
  177. data/db/migrate/20171017095143_update_initiative_scoped_type.rb +15 -0
  178. data/db/migrate/20171017103029_remove_unused_attributes_from_initiative.rb +7 -0
  179. data/db/migrate/20171019103358_add_initiative_notification_dates.rb +9 -0
  180. data/db/migrate/20171023075942_create_initiative_extra_data.rb +9 -0
  181. data/db/migrate/20171023122747_create_static_pages.rb +24 -0
  182. data/db/migrate/20171023141639_optional_validation_support.rb +6 -0
  183. data/db/migrate/20171031183855_add_offline_votes_to_initiative.rb +6 -0
  184. data/db/migrate/20171102094250_drop_initiative_description_index.rb +5 -0
  185. data/db/migrate/20171102094556_create_initiative_description_index.rb +9 -0
  186. data/db/migrate/20171109132011_enable_pg_extensions.rb +9 -0
  187. data/db/migrate/20171204094639_drop_decidim_initiatives_extra_data.rb +13 -0
  188. data/db/migrate/20171204103119_remove_requires_validation_from_decidim_initiatives_type.rb +6 -0
  189. data/db/migrate/20171214161410_add_unique_on_votes.rb +40 -0
  190. data/db/seeds/city2.jpeg +0 -0
  191. data/lib/decidim/initiatives.rb +99 -0
  192. data/lib/decidim/initiatives/admin.rb +10 -0
  193. data/lib/decidim/initiatives/admin_engine.rb +95 -0
  194. data/lib/decidim/initiatives/current_locale.rb +13 -0
  195. data/lib/decidim/initiatives/engine.rb +99 -0
  196. data/lib/decidim/initiatives/initiative_slug.rb +18 -0
  197. data/lib/decidim/initiatives/initiatives_filter_form_builder.rb +49 -0
  198. data/lib/decidim/initiatives/participatory_space.rb +74 -0
  199. data/lib/decidim/initiatives/test/factories.rb +120 -0
  200. data/lib/decidim/initiatives/version.rb +8 -0
  201. data/lib/tasks/decidim_initiatives.rake +51 -0
  202. metadata +398 -0
@@ -0,0 +1,30 @@
1
+ <div class="reveal__header">
2
+ <h1 class="reveal__title"><%=t '.select_identity' %></h1>
3
+ </div>
4
+
5
+ <%= render partial: 'decidim/initiatives/initiatives/vote_button',
6
+ locals: {
7
+ initiative: current_initiative,
8
+ vote_label: current_user.name,
9
+ unvote_label: current_user.name
10
+ } unless current_initiative.offline? %>
11
+
12
+ <% current_user.user_groups.verified.each do |g| %>
13
+ <br>
14
+ <% if @voted_groups.include? g.id %>
15
+ <%= action_authorized_button_to :vote,
16
+ g.name,
17
+ initiative_initiative_vote_path(initiative_slug: current_initiative.slug, group_id: g.id),
18
+ method: :delete,
19
+ remote: true,
20
+ data: { disable: true },
21
+ class: 'card__button button expanded button--sc success' %>
22
+ <% else %>
23
+ <%= action_authorized_button_to :vote,
24
+ g.name,
25
+ initiative_initiative_vote_path(initiative_slug: current_initiative.slug, group_id: g.id),
26
+ remote: true,
27
+ data: { disable: true },
28
+ class: 'card__button button expanded button--sc' %>
29
+ <% end %>
30
+ <% end %>
@@ -0,0 +1,5 @@
1
+ <% if @link %>
2
+ <p>
3
+ <%= t('.check_initiative_details') %> <%= link_to t('.here'), @link %>
4
+ </p>
5
+ <% end %>
@@ -0,0 +1,22 @@
1
+ <p>
2
+ <%=t 'decidim.initiatives.initiatives_mailer.creation_subject', title: partially_translated_attribute(@initiative.title) %>.
3
+ <%= link_to t('decidim.initiatives.initiatives_mailer.more_information'), decidim.page_url('initiatives', host: @organization.host) %>
4
+ </p>
5
+
6
+ <% if @initiative.created_by_individual? %>
7
+ <p>
8
+ <%=t 'decidim.initiatives.initiatives_mailer.promotal_committee_help',
9
+ member_count: Decidim::Initiatives.minimum_committee_members %>
10
+ </p>
11
+ <p>
12
+ <%= link_to decidim_initiatives.new_initiative_committee_request_url(@initiative, host: @organization.host),
13
+ decidim_initiatives.new_initiative_committee_request_url(@initiative, host: @organization.host) %>
14
+ </p>
15
+ <% end %>
16
+ <br><br>
17
+
18
+ <p>
19
+ <%= t('check_initiative_details', scope: 'decidim.initiatives.initiatives_mailer.initiative_link') %>
20
+ <%= link_to t('here', scope: 'decidim.initiatives.initiatives_mailer.initiative_link'),
21
+ decidim_admin_initiatives.initiative_url(@initiative, host: @organization.host) %>
22
+ </p>
@@ -0,0 +1,3 @@
1
+ <%= sanitize @body %>
2
+ <br><br>
3
+ <%= render partial: 'initiative_link' %>
@@ -0,0 +1,3 @@
1
+ <%= sanitize @body %>
2
+ <br><br>
3
+ <%= render partial: 'initiative_link' %>
@@ -0,0 +1,3 @@
1
+ <%= sanitize @body %>
2
+ <br><br>
3
+ <%= render partial: 'initiative_link' %>
@@ -0,0 +1 @@
1
+ <%= options_for_select scoped_types.map { |s| [translated_attribute(s.scope.name), s.scope.id] }, params[:selected] %>
@@ -0,0 +1,27 @@
1
+ <div class="row" id="highlighted-initiatives">
2
+ <h3 class="section-heading"><%= t(".active_initiatives") %></h3>
3
+ <div class="row collapse">
4
+ <div class="row small-up-1 smallmedium-up-2 mediumlarge-up-3 large-up-4 card-grid">
5
+ <% highlighted_initiatives.each do |initiative| %>
6
+ <div class="column">
7
+ <article class="card card--initiative card--mini">
8
+ <%= link_to decidim_initiatives.initiative_path(initiative), class: "card__link" do %>
9
+ <% end %>
10
+ <div class="card__content">
11
+ <%= link_to decidim_initiatives.initiative_path(initiative), class: "card__link" do %>
12
+ <h4 class="card__title"><%= translated_attribute initiative.title %></h4>
13
+ <% end %>
14
+ </div>
15
+ </article>
16
+ </div>
17
+ <% end %>
18
+ </div>
19
+ </div>
20
+ </div>
21
+
22
+ <div class="row" id="see-all-initiatives">
23
+ <div class="columns small-centered small-12 smallmedium-8 medium-6 large-4">
24
+ <%= link_to t(".see_all_initiatives"), decidim_initiatives.initiatives_path,
25
+ class: "button expanded hollow button--sc home-section__cta" %>
26
+ </div>
27
+ </div>
@@ -0,0 +1,36 @@
1
+ <div class="process-header row column">
2
+ <div class="row column process-header__main">
3
+ <div class="initiative-creation-header__container row">
4
+ <div class="columns mediumlarge-3">
5
+ <% if content_for? :back_link %>
6
+ <%= content_for :back_link %>
7
+ <% end %>
8
+
9
+ <h2 class="section-heading"><%= t(".#{step}") %></h2>
10
+ </div>
11
+ <div class="columns mediumlarge-6">
12
+ <div class="initiative-creation-header__phase">
13
+ <div class="process-header__progress show-for-medium">
14
+ <ol>
15
+ <% wizard_steps.each do |wizard_step| %>
16
+ <% unless future_step? wizard_step %>
17
+ <li class="phase-item--past">
18
+ <span></span>
19
+ <div class="caption"><%=t ".#{wizard_step}" %></div>
20
+ </li>
21
+
22
+ <% else %>
23
+ <li>
24
+ <span></span>
25
+ <div class="caption"><%=t ".#{wizard_step}" %></div>
26
+ </li>
27
+ <% end %>
28
+ <% end %>
29
+ </ol>
30
+ </div>
31
+ </div>
32
+ </div>
33
+ <div class="columns mediumlarge-3"></div>
34
+ </div>
35
+ </div>
36
+ </div>
@@ -0,0 +1,65 @@
1
+ <div class="process-header row column">
2
+ <div class="row column process-header__main"
3
+ style="background-image:url(<%= current_participatory_space.type.banner_image.url %>);">
4
+ <div class="process-header__container row">
5
+ <div class="columns mediumlarge-9 process-header__info">
6
+ <div>
7
+ <h1 class="text-highlight heading2">
8
+ <%= participatory_space_helpers.partially_translated_attribute(current_participatory_space.title) %>
9
+ </h1>
10
+ </div>
11
+ <div>
12
+ <h2 class="text-highlight heading-small">
13
+ <% if current_participatory_space.hashtag.present? %>
14
+ <span class="process-header__hashtag">
15
+ <%= link_to "##{current_participatory_space.hashtag}", "https://twitter.com/hashtag/#{current_participatory_space.hashtag}" %>
16
+ </span>
17
+ <% end %>
18
+ <%=strip_tags participatory_space_helpers.partially_translated_attribute(current_participatory_space.type.title) %>
19
+ </h2>
20
+ </div>
21
+ </div>
22
+ <%= render partial: 'layouts/decidim/initiative_header_steps', locals: { initiative: current_participatory_space } %>
23
+ </div>
24
+ </div>
25
+ <% if current_participatory_space.features.any? %>
26
+ <div class="row column">
27
+ <div class="process-nav">
28
+ <button class="process-nav__trigger hide-for-medium" data-toggle="process-nav-content">
29
+ <%= icon 'caret-bottom', class: 'icon--small process-nav__trigger__icon', aria_label: t('.unfold'), role: 'img' %>
30
+ <div class="process-nav__link">
31
+ <% if self.try(:current_feature) %>
32
+ <%= feature_icon(current_feature) %>
33
+ <%= translated_attribute(current_feature.name) %>
34
+ <% else %>
35
+ <%= icon 'chat' %>
36
+ <%= t '.initiative_menu_item' %>
37
+ <% end %>
38
+ </div>
39
+ </button>
40
+ <div class="row column process-nav__content is-active" id="process-nav-content" data-toggler=".is-active">
41
+ <ul>
42
+ <li class="<%= 'is-active' if is_active_link?(decidim_initiatives.initiative_path(current_participatory_space), :exclusive) %>">
43
+ <%= active_link_to decidim_initiatives.initiative_path(current_participatory_space), active: :exclusive, class: 'process-nav__link', class_active: 'is-active' do %>
44
+ <%= icon 'chat' %>
45
+ <%= t '.initiative_menu_item' %>
46
+ <% end %>
47
+ </li>
48
+
49
+ <% current_participatory_space.features.each do |feature| %>
50
+ <% if feature.published? || feature == self.try(:current_feature) %>
51
+ <li class="<%= "is-active" if is_active_link?(main_feature_path(feature), :inclusive) %>">
52
+ <%= active_link_to main_feature_path(feature), class: 'process-nav__link', active: :inclusive, class_active: 'is-active' do %>
53
+ <%= feature_icon(feature) %>
54
+
55
+ <%= translated_attribute(feature.name) %>
56
+ <% end %>
57
+ </li>
58
+ <% end %>
59
+ <% end %>
60
+ </ul>
61
+ </div>
62
+ </div>
63
+ </div>
64
+ <% end %>
65
+ </div>
@@ -0,0 +1,20 @@
1
+ <% if initiative.has_signature_interval_defined? %>
2
+ <div class="columns mediumlarge-3">
3
+ <div class="process-header__phase">
4
+ <div class="process-header__progress show-for-medium">
5
+ <ol>
6
+ <li><span></span></li>
7
+ </ol>
8
+ <span class="phase-current"><!-- Step 1 of 1 --></span>
9
+ </div>
10
+ <div>
11
+ <span class="phase-title"><!-- Step name --></span>
12
+ <span class="phase-date">
13
+ <%= l(initiative.signature_start_time, format: :default) %>
14
+ -
15
+ <%= l(initiative.signature_end_time, format: :default) %>
16
+ </span>
17
+ </div>
18
+ </div>
19
+ </div>
20
+ <% end %>
@@ -0,0 +1,54 @@
1
+ <% content_for :secondary_nav do %>
2
+ <div class="secondary-nav secondary-nav--subnav">
3
+ <ul>
4
+ <% if can? :edit, current_initiative %>
5
+ <li <% if is_active_link?(decidim_admin_initiatives.edit_initiative_path(current_initiative)) %> class="is-active" <% end %>>
6
+ <%= aria_selected_link_to t('.information'), decidim_admin_initiatives.edit_initiative_path(current_initiative) %>
7
+ </li>
8
+ <% end %>
9
+
10
+ <% if can? :manage_membership, current_initiative %>
11
+ <li <% if is_active_link?(decidim_admin_initiatives.initiative_committee_requests_path(current_initiative)) %> class="is-active" <% end %>>
12
+ <%= aria_selected_link_to t('.committee_members'), decidim_admin_initiatives.initiative_committee_requests_path(current_initiative) %>
13
+ </li>
14
+ <% end %>
15
+
16
+ <% if can? :read, Decidim::Feature %>
17
+ <li <% if is_active_link?(decidim_admin_initiatives.features_path(current_initiative)) %> class="is-active" <% end %>>
18
+ <%= aria_selected_link_to t('.features'), decidim_admin_initiatives.features_path(current_initiative) %>
19
+ <ul>
20
+ <% current_initiative.features.each do |feature| %>
21
+ <% if feature.manifest.admin_engine %>
22
+ <li <% if is_active_link?(manage_feature_path(feature)) %> class="is-active" <% end %>>
23
+ <%= link_to manage_feature_path(feature) do %>
24
+ <%= translated_attribute feature.name %>
25
+ <% if feature.primary_stat.present? %>
26
+ <span class="component-counter <%= 'component-counter--off' if feature.primary_stat.zero? %>">
27
+ <%= feature.primary_stat %>
28
+ </span>
29
+ <% end %>
30
+ <% end %>
31
+ </li>
32
+ <% end %>
33
+ <% end %>
34
+ </ul>
35
+ </li>
36
+ <% end %>
37
+
38
+ <% if can? :read, Decidim::Attachment %>
39
+ <li <% if is_active_link?(decidim_admin_initiatives.initiative_attachments_path(current_initiative)) %> class="is-active" <% end %>>
40
+ <%= aria_selected_link_to t('.attachments'), decidim_admin_initiatives.initiative_attachments_path(current_initiative) %>
41
+ </li>
42
+ <% end %>
43
+ </ul>
44
+ </div>
45
+ <% end %>
46
+
47
+ <%= render 'layouts/decidim/admin/application' do %>
48
+ <div class="process-title">
49
+ <div class="process-title-content">
50
+ <%= current_initiative.title.try(:[], I18n.locale.to_s) || current_initiative.title.values.compact.first %>
51
+ </div>
52
+ </div>
53
+ <%= yield %>
54
+ <% end %>
@@ -0,0 +1,20 @@
1
+ <% content_for :secondary_nav do %>
2
+ <div class="secondary-nav secondary-nav--subnav">
3
+ <ul>
4
+ <% if can?(:index, Decidim::Initiative) %>
5
+ <li <% if is_active_link?(decidim_admin_initiatives.initiatives_path) %> class="is-active" <% end %>>
6
+ <%= aria_selected_link_to I18n.t('menu.initiatives', scope: 'decidim.admin'), decidim_admin_initiatives.initiatives_path %>
7
+ </li>
8
+ <% end %>
9
+ <% if can?(:manage, Decidim::InitiativesType) %>
10
+ <li <% if is_active_link?(decidim_admin_initiatives.initiatives_types_path) %> class="is-active" <% end %>>
11
+ <%= aria_selected_link_to I18n.t('menu.initiatives_types', scope: 'decidim.admin'), decidim_admin_initiatives.initiatives_types_path %>
12
+ </li>
13
+ <% end %>
14
+ </ul>
15
+ </div>
16
+ <% end %>
17
+
18
+ <%= render 'layouts/decidim/admin/application' do %>
19
+ <%= yield %>
20
+ <% end %>
@@ -0,0 +1,15 @@
1
+ <%= render 'layouts/decidim/application' do %>
2
+ <div class="wrapper">
3
+ <%= render partial: 'layouts/decidim/initiative_header' %>
4
+ <%= yield %>
5
+ </div>
6
+ <% if content_for? :expanded %>
7
+ <div class="expanded">
8
+ <div class="wrapper wrapper--inner">
9
+ <div class="row">
10
+ <%= yield :expanded %>
11
+ </div>
12
+ </div>
13
+ </div>
14
+ <% end %>
15
+ <% end %>
@@ -0,0 +1,10 @@
1
+ <%= render 'layouts/decidim/application' do %>
2
+ <div class="wrapper">
3
+ <%= render partial: 'layouts/decidim/initiative_creation_header' %>
4
+ <%= yield %>
5
+ </div>
6
+ <%= stylesheet_link_tag 'decidim/initiatives/application' %>
7
+ <%= javascript_include_tag 'decidim/initiatives/application' %>
8
+ <% end %>
9
+
10
+
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ Rails.application.configure do
4
+ config.action_mailer.preview_path = Decidim::Initiatives::Engine.root.join("spec/mailers")
5
+ end
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ SocialShareButton.configure do |config|
4
+ config.allow_sites = %w(twitter facebook google_plus)
5
+ end
@@ -0,0 +1,325 @@
1
+ ca:
2
+ activemodel:
3
+ attributes:
4
+ initiative:
5
+ title: Títol
6
+ description: Descripció
7
+ signature_start_time: Inici del periode de recollida de signatures
8
+ signature_end_time: Fi del periode de recollida de signatures
9
+ signature_type: Tipus de signatura
10
+ offline_votes: Signatures pesencials
11
+ signature_type_values:
12
+ online: Digital
13
+ offline: Presencial
14
+ any: Mixta
15
+ scope_id: Àmbit
16
+ decidim_user_group_id: Autor
17
+ initiatives_type:
18
+ title: Titol
19
+ description: Descripció
20
+ banner_image: Imatge de bàner
21
+ initiatives_committee_member:
22
+ user: Membre del comité
23
+ initiative_author:
24
+ name: Nom i cognoms
25
+ id_document: DNI/NIE
26
+ address: Domicili (Carrer, Nombre, Pis, Porta)
27
+ city: Població
28
+ province: Provincia
29
+ post_code: Codi postal
30
+ phone_number: Telèfon
31
+ organization_data:
32
+ name: Nom complet
33
+ id_document: CIF
34
+ address: Adreça
35
+ decidim:
36
+ admin:
37
+ titles:
38
+ initiatives_types: Tipus d'iniciativa
39
+ initiatives: Iniciatives
40
+ menu:
41
+ initiatives_types: Tipus d'iniciativa
42
+ initiatives: Iniciatives
43
+ models:
44
+ initiatives_types:
45
+ name: Tipus d'iniciativa
46
+ fields:
47
+ title: Tipus d'iniciatives
48
+ created_at: Data de creació
49
+ initiatives:
50
+ fields:
51
+ title: Iniciatives
52
+ state: Estat
53
+ created_at: Data de creació
54
+ supports_count: Suports
55
+ initiatives_type_scope:
56
+ name: Àmbit per al tipus d'iniciativa
57
+ fields:
58
+ scope: Àmbit
59
+ supports_required: Suports necessaris
60
+ menu:
61
+ initiatives: Iniciatives
62
+ initiatives:
63
+ admin:
64
+ initiatives_types:
65
+ new:
66
+ title: Nou tipus d'iniciativa
67
+ create: Crear
68
+ form:
69
+ title: Informació general
70
+ edit:
71
+ update: Actualitzar
72
+ destroy: Eliminar
73
+ confirm_destroy: ¿Estas segur?
74
+ create:
75
+ success: S'ha creat un nou tipus d'iniciativa
76
+ error: S'ha produit un error
77
+ update:
78
+ success: Les dades del tipus d'iniciativa s'han actualitzat correctament
79
+ error: S'ha produit un error
80
+ destroy:
81
+ success: S'ha eliminat el tipus d'iniciativa.
82
+ initiative_type_scopes:
83
+ title: Àmbits per al tipus d'iniciativa
84
+ initiatives_type_scopes:
85
+ destroy:
86
+ success: S'ha eliminat l'àmbit
87
+ create:
88
+ success: S'ha creat un nou àmbit per aquest tipus d'iniciativa
89
+ error: S'ha produit un error
90
+ update:
91
+ success: L'àmbit ha estat correctament actualitzat
92
+ error: S'ha produit un error
93
+ edit:
94
+ title: Editar l'àmbit d'un tipus d'iniciativa
95
+ update: Actualitzar
96
+ back: Torna enrere
97
+ destroy: Esborrar
98
+ confirm_destroy: ¿Estas segur?
99
+ new:
100
+ title: Nou ambit de tipus d'iniciativa
101
+ create: Crear
102
+ back: Torna enrere
103
+ initiatives:
104
+ index:
105
+ actions_title: Acció
106
+ preview: Previsualitzar
107
+ search: Cerca
108
+ filter_by: Filtrar per
109
+ print: Imprimir
110
+ filter:
111
+ all: Tots
112
+ created: Creada
113
+ validating: Validació tècnica
114
+ discarded: Descartada
115
+ published: Publicada
116
+ rejected: Rebutjada
117
+ accepted: Acceptada
118
+ show:
119
+ print: Imprimir
120
+ edit:
121
+ update: Actualitzar
122
+ validate: Validar la iniciativa
123
+ discard: Descartar la iniciativa
124
+ confirm: ¿Estas segur?
125
+ send_to_technical_validation: Enviar a validació tècnica
126
+ success: La iniciativa ha segut enviada a validació tècnica
127
+ export_votes: Exportar suports
128
+ accept: Acceptar iniciativa
129
+ reject: Rebutjar iniciativa
130
+ form:
131
+ title: Informació general
132
+ update:
133
+ success: La iniciativa popular ha estat correctament actualitzada
134
+ error: Ha ocorregut un error
135
+ committee_requests:
136
+ index:
137
+ title: Membres del comité
138
+ invite_to_committee_help: Comparteix aquest enllaç per invitar a altres usuaris a la comisió promotora
139
+ approve: Aprovar
140
+ revoke: Rebutjar
141
+ confirm_revoke: ¿Estas segur?
142
+ no_members_yet: No hi ha membres al comité promotor de la iniciativa
143
+ states:
144
+ accepted: Acceptada
145
+ expired: Expirada
146
+ admin_states:
147
+ created: Creada
148
+ validating: En validació tècnica
149
+ discarded: Descartada
150
+ published: Publicada
151
+ rejected: Rebutjada
152
+ accepted: Acceptada
153
+ events:
154
+ create_initiative_event:
155
+ email_intro: "%{author_name} %{author_nickname}, a qui estàs seguint, ha creat una nova iniciativa, fes-hi un cop d’ull i contribueix:"
156
+ email_outro: "Has rebut aquesta notificació perquè estàs seguint a %{author_nickname}. Pots deixar de rebre’n seguint l’enllaç anterior."
157
+ email_subject: "%{author_nickname} ha creat una nova iniciativa"
158
+ notification_title: <a href="%{author_path}">%{author_name} %{author_nickname}</a> ha creat la iniciativa <a href="%{resource_path}">%{resource_title}</a>.
159
+ endorse_initiative_event:
160
+ email_intro: "%{author_name} %{author_nickname}, a qui estàs seguint, s'ha adherit a una iniciativa, fes-hi un cop d’ull i contribueix a la conversa:"
161
+ email_outro: "Has rebut aquesta notificació perquè estàs seguint a %{author_nickname}. Pots deixar de rebre’n seguint l’enllaç anterior."
162
+ email_subject: "%{author_nickname} s'ha adherit a una iniciativa"
163
+ notification_title: <a href="%{author_path}">%{author_name} %{author_nickname}</a> s'ha adherit a la iniciativa <a href="%{resource_path}">%{resource_title}</a>.
164
+ index:
165
+ title: Iniciatives
166
+ initiatives:
167
+ count:
168
+ title:
169
+ one: "%{count} iniciativa"
170
+ other: "%{count} iniciatives"
171
+ index_header:
172
+ new_initiative: Nova iniciativa
173
+ filters_small_view:
174
+ filter: Filtra
175
+ unfold: Desplegar
176
+ filter_by: Filtrar per
177
+ close_modal: Tancar finestra
178
+ filters:
179
+ search: Cerca
180
+ open: Obertes
181
+ closed: Tancades
182
+ state: Estat
183
+ type: Tipus
184
+ all: Tots
185
+ any: Qualsevol
186
+ myself: Les mues iniciatives
187
+ author: Autor
188
+ scopes: Àmbits
189
+ scope_prompt: Seleccioneu un àmbit
190
+ type_prompt: Seleccioneu un tipus
191
+ initiatives:
192
+ index:
193
+ loading: Carregant els resultats
194
+ supports_count:
195
+ count:
196
+ one: " signatura"
197
+ other: " signatures"
198
+ orders:
199
+ label: 'Ordenar iniciatives per:'
200
+ random: Aleatori
201
+ recent: Més recent
202
+ most_voted: Més votat
203
+ most_commented: Més comentat
204
+ vote_cabin:
205
+ vote: Signar
206
+ votes_blocked: Recollida de signatures desactivada
207
+ already_voted: Ja has signat
208
+ supports_required: "%{total_supports} signatures requerides"
209
+ signature_identities:
210
+ select_identity: Selecciona identitat
211
+ votes_count:
212
+ count:
213
+ one: SIGNATURA
214
+ other: SIGNATURES
215
+ show:
216
+ start_time: Data d'inici
217
+ end_time: Data de fi
218
+ any_vote_method: La recollida de signatures d'aquesta iniciativa ciutadana es realitza de manera digital i també de manera presencial.
219
+ offline_method: La recollida de signatures d'aquesta iniciativa ciutadana es realitza únicament de manera presencial.
220
+ promoter_committee:
221
+ committee_section_title: Comisió promotora
222
+ committee_members:
223
+ title: Membres del comité
224
+ supports:
225
+ title: Llistat d'adhesions
226
+ statistics:
227
+ supports_count_title: Adhesions
228
+ comments_count_title: Comentaris
229
+ meetings_count_title: Trobades
230
+ assistants_count_title: Assistents
231
+ result:
232
+ initiative_accepted_reason: Aquesta iniciativa ha estat acceptada perquè
233
+ initiative_rejected_reason: Aquesta iniciativa ha estat rebutjada a causa de la manca de support.
234
+ initiative_votes:
235
+ create:
236
+ error: Hi ha hagut errors en votar l'iniciativa.
237
+ create_initiative:
238
+ select_initiative_type:
239
+ select_initiative_type_help: Les iniciatives ciutadanes són un mitjà amb el qual la ciutadania intervé a fi que l’Ajuntament dugui a terme una determinada actuació d’interès general i competència municipal. Quina iniciativa vols impulsar?
240
+ select: Tria
241
+ back: Torna enrere
242
+ more_information: (Mes informació)
243
+ previous_form:
244
+ continue: Continuar
245
+ back: Torna enrere
246
+ help: En què consisteix la iniciativa? Escriu el títol i la descripció. Et recomanem que el títol sigui curt i concís, i la descripció estigui centrada en la solució que es proposa.
247
+ more_information: (Mes informació)
248
+ show_similar_initiatives:
249
+ continue: La meva iniciativa es diferent
250
+ back: Torna enrere
251
+ more_information: (Mes informació)
252
+ fill_data:
253
+ continue: Continuar
254
+ back: Torna enrere
255
+ select_scope: Sel·lecciona un àmbit
256
+ initiative_type: Tipus d'iniciativa
257
+ fill_data_help:
258
+ <ul>
259
+ <li>Revisa el contingut de la teva iniciativa. És entenedor el títol? Queda clar l’objectiu de la iniciativa?</li>
260
+ <li>Cal seleccionar el tipus de signatura. Presencial, digital o mixta</li>
261
+ <li>En quin àmbit geogràfic es desenvolupa la iniciativa? Ciutat, districte?</li>
262
+ </ul>
263
+ more_information: (Mes informació)
264
+ promotal_committee:
265
+ back: Torna enrere
266
+ continue: Continuar
267
+ individual_help_text: Les iniciatives ciutadanes requereixen una Comissió promotora formada per, com a mínim, tres persones (fedatàries). Cal que comparteixis el següent enllaç amb la resta de persones que promoguin aquesta iniciativa. Quan els teus contactes rebin l’enllaç, hauran de seguir els passos indicats.
268
+ more_information: (Mes informació)
269
+ share_committee_link:
270
+ invite_to_committee_help: Enllaç per invitar a les persones que formaran part de la comisió promotora
271
+ continue: Continuar
272
+ finish:
273
+ back: Torna enrere
274
+ callout_text: Enhorabona! La teva iniciativa ciutadana s’ha creat amb èxit.
275
+ go_to_my_initiatives: Ves a les meves iniciatives
276
+ back_to_initiatives: Tornar a iniciatives
277
+ more_information: (Mes informació)
278
+ committee_requests:
279
+ new:
280
+ help_text: Vas a sol·licitar formar part de la comisió promotora per aquesta iniciativa
281
+ continue: Continuar
282
+ spawn:
283
+ success: La teva petició ha estat enviada l'autor de la iniciativa
284
+ initiatives_mailer:
285
+ progress_report_for: "Actualització sobre l'estat de la iniciativa: %{title}"
286
+ progress_report_body_for: "La iniciativa %{title} ha alcançat el %{percentage}% de soports."
287
+ technical_validation_for: "La iniciativa %{title} ha sol·licitat validació tècnica."
288
+ technical_validation_body_for: "La iniciativa %{title} ha sol·licitat validació tècnica."
289
+ status_change_for: "La iniciativa %{title} ha canviat de estat"
290
+ status_change_body_for: "La iniciativa %{title} ha canviat de estat a: %{state}"
291
+ creation_subject: "La iniciativa popular '%{title}' ha estat creada"
292
+ more_information: Aqui pots trobar mes informació sobre el process de creació d'iniciatives
293
+ promotal_committee_help: "Recorda que al menys deus invitar a %{member_count} persones a la comisió promotora. Reenvía el sigüent enllaç per invitar persones a la comisió promotora:"
294
+ initiative_link:
295
+ check_initiative_details: Pots consultar la iniciativa
296
+ here: ací
297
+ pages:
298
+ home:
299
+ highlighted_initiatives:
300
+ active_initiatives: Iniciatives actives
301
+ see_all_initiatives: Veure totes les iniciatives
302
+ layouts:
303
+ decidim:
304
+ initiative_creation_header:
305
+ select_initiative_type: Tria
306
+ previous_form: Inicia
307
+ show_similar_initiatives: Compara
308
+ fill_data: Crea
309
+ promotal_committee: Comisió promotora
310
+ finish: Finalitza
311
+ initiatives:
312
+ initiative:
313
+ check_and_support: Veure i signar
314
+ check: Veure
315
+ no_initiatives_yet:
316
+ no_initiatives_yet: Encara no hi ha cap iniciativa!
317
+ initiative_header:
318
+ initiative_menu_item: Iniciativa
319
+ unfold: Desplega
320
+ admin:
321
+ initiative:
322
+ information: Informació
323
+ features: Funcionalitats
324
+ attachments: Adjunts
325
+ committee_members: Membres del comité