decidim 0.0.3 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of decidim might be problematic. Click here for more details.

Files changed (251) hide show
  1. checksums.yaml +4 -4
  2. data/.github/ISSUE_TEMPLATE.md +23 -4
  3. data/.travis.yml +4 -1
  4. data/Gemfile.lock +56 -48
  5. data/Rakefile +1 -1
  6. data/decidim-admin/app/commands/decidim/admin/create_participatory_process_admin.rb +3 -0
  7. data/decidim-admin/app/commands/decidim/admin/update_feature_permissions.rb +46 -0
  8. data/decidim-admin/app/commands/decidim/admin/update_organization.rb +17 -2
  9. data/decidim-admin/app/commands/decidim/admin/update_participatory_process.rb +4 -2
  10. data/decidim-admin/app/controllers/decidim/admin/application_controller.rb +3 -0
  11. data/decidim-admin/app/controllers/decidim/admin/feature_permissions_controller.rb +59 -0
  12. data/decidim-admin/app/controllers/decidim/admin/features_controller.rb +20 -0
  13. data/decidim-admin/app/controllers/decidim/admin/users_controller.rb +3 -1
  14. data/decidim-admin/app/forms/decidim/admin/organization_form.rb +10 -0
  15. data/decidim-admin/app/forms/decidim/admin/participatory_process_form.rb +8 -5
  16. data/decidim-admin/app/forms/decidim/admin/permission_form.rb +31 -0
  17. data/decidim-admin/app/forms/decidim/admin/permissions_form.rb +16 -0
  18. data/decidim-admin/app/helpers/decidim/admin/application_helper.rb +1 -0
  19. data/decidim-admin/app/models/decidim/admin/participatory_process_user_role.rb +1 -1
  20. data/decidim-admin/app/views/decidim/admin/attachments/edit.html.erb +1 -1
  21. data/decidim-admin/app/views/decidim/admin/attachments/new.html.erb +1 -1
  22. data/decidim-admin/app/views/decidim/admin/categories/edit.html.erb +1 -1
  23. data/decidim-admin/app/views/decidim/admin/categories/new.html.erb +1 -1
  24. data/decidim-admin/app/views/decidim/admin/dashboard/show.html.erb +1 -1
  25. data/decidim-admin/app/views/decidim/admin/feature_permissions/edit.html.erb +27 -0
  26. data/decidim-admin/app/views/decidim/admin/features/_feature.html.erb +10 -0
  27. data/decidim-admin/app/views/decidim/admin/features/edit.html.erb +1 -1
  28. data/decidim-admin/app/views/decidim/admin/features/new.html.erb +1 -1
  29. data/decidim-admin/app/views/decidim/admin/organization/_form.html.erb +34 -0
  30. data/decidim-admin/app/views/decidim/admin/organization/edit.html.erb +2 -2
  31. data/decidim-admin/app/views/decidim/admin/participatory_process_steps/edit.html.erb +1 -1
  32. data/decidim-admin/app/views/decidim/admin/participatory_process_steps/new.html.erb +1 -1
  33. data/decidim-admin/app/views/decidim/admin/participatory_process_user_roles/index.html.erb +1 -1
  34. data/decidim-admin/app/views/decidim/admin/participatory_processes/_form.html.erb +17 -4
  35. data/decidim-admin/app/views/decidim/admin/participatory_processes/edit.html.erb +1 -1
  36. data/decidim-admin/app/views/decidim/admin/participatory_processes/index.html.erb +1 -1
  37. data/decidim-admin/app/views/decidim/admin/participatory_processes/new.html.erb +2 -2
  38. data/decidim-admin/app/views/decidim/admin/participatory_processes/show.html.erb +5 -2
  39. data/decidim-admin/app/views/decidim/admin/scopes/edit.html.erb +2 -2
  40. data/decidim-admin/app/views/decidim/admin/scopes/index.html.erb +1 -1
  41. data/decidim-admin/app/views/decidim/admin/scopes/new.html.erb +2 -2
  42. data/decidim-admin/app/views/decidim/admin/static_pages/_form.html.erb +1 -1
  43. data/decidim-admin/app/views/decidim/admin/static_pages/edit.html.erb +2 -2
  44. data/decidim-admin/app/views/decidim/admin/static_pages/index.html.erb +1 -1
  45. data/decidim-admin/app/views/decidim/admin/static_pages/new.html.erb +2 -2
  46. data/decidim-admin/app/views/decidim/admin/static_pages/show.html.erb +1 -1
  47. data/decidim-admin/app/views/decidim/admin/user_groups/index.html.erb +1 -1
  48. data/decidim-admin/app/views/decidim/admin/users/index.html.erb +1 -1
  49. data/decidim-admin/app/views/decidim/admin/users/new.html.erb +2 -2
  50. data/decidim-admin/app/views/layouts/decidim/admin/participatory_process.html.erb +1 -1
  51. data/decidim-admin/config/i18n-tasks.yml +4 -3
  52. data/decidim-admin/config/locales/ca.yml +20 -1
  53. data/decidim-admin/config/locales/en.yml +19 -0
  54. data/decidim-admin/config/locales/es.yml +19 -0
  55. data/decidim-admin/config/locales/eu.yml +5 -0
  56. data/decidim-admin/config/routes.rb +8 -1
  57. data/decidim-admin/db/seeds.rb +3 -1
  58. data/decidim-admin/spec/commands/create_participatory_process_admin_spec.rb +19 -0
  59. data/decidim-admin/spec/commands/update_organization_spec.rb +20 -0
  60. data/decidim-admin/spec/features/admin_invite_spec.rb +5 -3
  61. data/decidim-admin/spec/features/admin_manages_feature_permissions_spec.rb +44 -0
  62. data/decidim-admin/spec/features/admin_manages_features_spec.rb +38 -0
  63. data/decidim-admin/spec/features/admin_manages_participatory_process_admins_spec.rb +0 -2
  64. data/decidim-admin/spec/features/admin_manages_participatory_process_attachments_spec.rb +0 -2
  65. data/decidim-admin/spec/features/admin_manages_participatory_process_categories_spec.rb +0 -2
  66. data/decidim-admin/spec/features/admin_manages_participatory_process_steps_spec.rb +0 -2
  67. data/decidim-admin/spec/features/admin_manages_participatory_processes_spec.rb +0 -2
  68. data/decidim-admin/spec/features/admin_manages_user_groups_spec.rb +1 -3
  69. data/decidim-admin/spec/features/participatory_process_admin_manages_participatory_process_admins_spec.rb +0 -2
  70. data/decidim-admin/spec/features/participatory_process_admin_manages_participatory_process_attachments_spec.rb +0 -2
  71. data/decidim-admin/spec/features/participatory_process_admin_manages_participatory_process_steps_spec.rb +0 -2
  72. data/decidim-admin/spec/features/participatory_process_admin_manages_participatory_processes_spec.rb +0 -2
  73. data/decidim-admin/spec/features/process_admin_manages_participatory_process_categories_spec.rb +0 -2
  74. data/decidim-admin/spec/forms/organization_form_spec.rb +11 -2
  75. data/decidim-admin/spec/models/participatory_process_user_role_spec.rb +17 -0
  76. data/decidim-admin/spec/shared/manage_process_steps_examples.rb +3 -2
  77. data/decidim-budgets/app/assets/images/decidim/budgets/icon.svg +16 -4
  78. data/decidim-budgets/app/assets/javascripts/decidim/budgets/progressFixed.js.es6 +23 -0
  79. data/decidim-budgets/app/assets/javascripts/decidim/budgets/projects.js.es6 +1 -0
  80. data/decidim-budgets/app/assets/stylesheets/decidim/budgets/budget/_budget-list.scss +1 -1
  81. data/decidim-budgets/app/commands/decidim/budgets/admin/create_project.rb +0 -1
  82. data/decidim-budgets/app/commands/decidim/budgets/admin/update_project.rb +0 -1
  83. data/decidim-budgets/app/controllers/decidim/budgets/admin/application_controller.rb +9 -0
  84. data/decidim-budgets/app/controllers/decidim/budgets/admin/attachments_controller.rb +29 -0
  85. data/decidim-budgets/app/controllers/decidim/budgets/line_items_controller.rb +2 -0
  86. data/decidim-budgets/app/controllers/decidim/budgets/orders_controller.rb +2 -0
  87. data/decidim-budgets/app/forms/decidim/budgets/admin/project_form.rb +1 -2
  88. data/decidim-budgets/app/models/decidim/budgets/project.rb +1 -0
  89. data/decidim-budgets/app/services/decidim/budgets/project_search.rb +0 -1
  90. data/decidim-budgets/app/views/decidim/budgets/admin/projects/_form.html.erb +0 -4
  91. data/decidim-budgets/app/views/decidim/budgets/admin/projects/edit.html.erb +1 -1
  92. data/decidim-budgets/app/views/decidim/budgets/admin/projects/index.html.erb +1 -0
  93. data/decidim-budgets/app/views/decidim/budgets/admin/projects/new.html.erb +1 -1
  94. data/decidim-budgets/app/views/decidim/budgets/line_items/update_budget.js.erb +2 -0
  95. data/decidim-budgets/app/views/decidim/budgets/projects/_project.html.erb +2 -2
  96. data/decidim-budgets/app/views/decidim/budgets/projects/_project_budget_button.html.erb +2 -2
  97. data/decidim-budgets/app/views/decidim/budgets/projects/index.html.erb +3 -2
  98. data/decidim-budgets/app/views/decidim/budgets/projects/show.html.erb +3 -7
  99. data/decidim-budgets/config/i18n-tasks.yml +1 -0
  100. data/decidim-budgets/config/locales/ca.yml +24 -5
  101. data/decidim-budgets/config/locales/en.yml +12 -3
  102. data/decidim-budgets/config/locales/es.yml +22 -3
  103. data/decidim-budgets/config/locales/eu.yml +5 -0
  104. data/decidim-budgets/db/migrate/20170207101750_remove_short_description_from_decidim_projects.rb +5 -0
  105. data/decidim-budgets/decidim-budgets.gemspec +1 -0
  106. data/decidim-budgets/lib/decidim/budgets/admin_engine.rb +4 -1
  107. data/decidim-budgets/lib/decidim/budgets/feature.rb +15 -4
  108. data/decidim-budgets/lib/decidim/budgets/test/factories.rb +2 -3
  109. data/decidim-budgets/spec/commands/create_project_spec.rb +0 -1
  110. data/decidim-budgets/spec/commands/update_project_spec.rb +0 -1
  111. data/decidim-budgets/spec/features/admin_manages_project_attachments_spec.rb +10 -0
  112. data/decidim-budgets/spec/features/admin_manages_projects_spec.rb +0 -2
  113. data/decidim-budgets/spec/features/orders_spec.rb +43 -5
  114. data/decidim-budgets/spec/features/process_admin_manages_project_attachments_spec.rb +12 -0
  115. data/decidim-budgets/spec/features/process_admin_manages_projects_spec.rb +0 -2
  116. data/decidim-budgets/spec/forms/project_form_spec.rb +0 -10
  117. data/decidim-budgets/spec/shared/manage_attachments_examples.rb +17 -0
  118. data/decidim-budgets/spec/shared/manage_projects_examples.rb +0 -7
  119. data/decidim-comments/app/assets/javascripts/decidim/comments/bundle.js +0 -0
  120. data/decidim-comments/app/commands/decidim/comments/create_comment.rb +10 -0
  121. data/decidim-comments/app/forms/decidim/comments/comment_form.rb +1 -1
  122. data/decidim-comments/app/frontend/comments/add_comment_form.component.jsx +33 -12
  123. data/decidim-comments/app/frontend/comments/add_comment_form.component.test.jsx +6 -0
  124. data/decidim-comments/app/frontend/comments/comment.component.jsx +7 -5
  125. data/decidim-comments/app/frontend/comments/comment_order_selector.component.jsx +2 -2
  126. data/decidim-comments/app/frontend/comments/comment_thread.component.jsx +5 -0
  127. data/decidim-comments/app/frontend/comments/comments.component.jsx +11 -0
  128. data/decidim-comments/app/frontend/comments/vote_button.component.jsx +5 -0
  129. data/decidim-comments/app/frontend/comments/vote_button_component.test.jsx +1 -1
  130. data/decidim-comments/app/frontend/entry.test.js +2 -0
  131. data/decidim-comments/app/mailers/decidim/comments/comment_notification_mailer.rb +31 -0
  132. data/decidim-comments/app/models/decidim/comments/comment.rb +6 -0
  133. data/decidim-comments/app/views/decidim/comments/comment_notification_mailer/comment_created.html.erb +18 -0
  134. data/decidim-comments/app/views/decidim/comments/comment_notification_mailer/reply_created.html.erb +18 -0
  135. data/decidim-comments/config/locales/ca.yml +17 -3
  136. data/decidim-comments/config/locales/en.yml +17 -3
  137. data/decidim-comments/config/locales/es.yml +17 -3
  138. data/decidim-comments/config/locales/eu.yml +5 -0
  139. data/decidim-comments/lib/decidim/comments.rb +1 -0
  140. data/decidim-comments/{app/helpers → lib}/decidim/comments/comments_helper.rb +0 -0
  141. data/decidim-comments/spec/commands/create_comment_spec.rb +68 -1
  142. data/decidim-comments/spec/features/comments_spec.rb +27 -20
  143. data/decidim-comments/spec/features/notifications_spec.rb +45 -0
  144. data/decidim-comments/spec/forms/comment_form_spec.rb +6 -0
  145. data/decidim-comments/spec/mailers/comment_notification_mailer_spec.rb +36 -0
  146. data/decidim-comments/spec/models/comment_spec.rb +8 -0
  147. data/decidim-comments/spec/spec_helper.rb +0 -1
  148. data/decidim-comments/spec/types/mutation_type_spec.rb +8 -7
  149. data/decidim-dev/config/locales/ca.yml +5 -0
  150. data/decidim-dev/config/locales/es.yml +5 -0
  151. data/decidim-dev/config/locales/eu.yml +5 -0
  152. data/decidim-dev/decidim-dev.gemspec +2 -1
  153. data/decidim-dev/lib/decidim/dev.rb +2 -0
  154. data/decidim-dev/lib/decidim/dev/dummy_authorization_handler.rb +1 -0
  155. data/decidim-dev/lib/decidim/dev/test/base_spec_helper.rb +4 -1
  156. data/decidim-dev/lib/decidim/dev/test/rspec_support/action_mailer.rb +19 -0
  157. data/decidim-dev/lib/decidim/dev/test/rspec_support/feature.rb +26 -3
  158. data/decidim-dev/lib/decidim/dev/test/rspec_support/translation_helpers.rb +1 -1
  159. data/decidim-meetings/app/forms/decidim/meetings/admin/meeting_form.rb +2 -2
  160. data/decidim-meetings/app/views/decidim/meetings/admin/meeting_closes/edit.html.erb +1 -1
  161. data/decidim-meetings/app/views/decidim/meetings/admin/meetings/edit.html.erb +1 -1
  162. data/decidim-meetings/app/views/decidim/meetings/admin/meetings/new.html.erb +1 -1
  163. data/decidim-meetings/app/views/decidim/meetings/meetings/index.html.erb +3 -1
  164. data/decidim-meetings/app/views/decidim/meetings/meetings/show.html.erb +11 -1
  165. data/decidim-meetings/config/locales/ca.yml +3 -3
  166. data/decidim-meetings/config/locales/en.yml +1 -1
  167. data/decidim-meetings/config/locales/es.yml +1 -1
  168. data/decidim-meetings/config/locales/eu.yml +5 -0
  169. data/decidim-meetings/decidim-meetings.gemspec +1 -1
  170. data/decidim-meetings/lib/decidim/meetings/feature.rb +1 -0
  171. data/decidim-meetings/spec/features/admin_manages_meetings_attachments_spec.rb +0 -2
  172. data/decidim-meetings/spec/features/admin_manages_meetings_spec.rb +0 -2
  173. data/decidim-meetings/spec/features/process_admin_manages_meetings_attachments_spec.rb +0 -2
  174. data/decidim-meetings/spec/features/process_admin_manages_meetings_spec.rb +0 -2
  175. data/decidim-pages/app/assets/images/decidim/pages/icon.svg +1 -3
  176. data/decidim-pages/app/views/decidim/pages/admin/pages/edit.html.erb +1 -1
  177. data/decidim-pages/app/views/decidim/pages/application/show.html.erb +4 -1
  178. data/decidim-pages/config/locales/eu.yml +7 -0
  179. data/decidim-pages/lib/decidim/pages/feature.rb +1 -0
  180. data/decidim-proposals/app/controllers/decidim/proposals/proposals_controller.rb +42 -5
  181. data/decidim-proposals/app/forms/decidim/proposals/proposal_form.rb +3 -1
  182. data/decidim-proposals/app/helpers/decidim/proposals/proposal_votes_helper.rb +1 -1
  183. data/decidim-proposals/app/models/decidim/proposals/abilities/current_user.rb +22 -4
  184. data/decidim-proposals/app/models/decidim/proposals/proposal.rb +2 -2
  185. data/decidim-proposals/app/services/decidim/proposals/proposal_search.rb +25 -13
  186. data/decidim-proposals/app/views/decidim/proposals/admin/proposal_answers/edit.html.erb +1 -1
  187. data/decidim-proposals/app/views/decidim/proposals/admin/proposals/new.html.erb +1 -1
  188. data/decidim-proposals/app/views/decidim/proposals/proposals/_filters.html.erb +9 -1
  189. data/decidim-proposals/app/views/decidim/proposals/proposals/_proposal.html.erb +2 -6
  190. data/decidim-proposals/app/views/decidim/proposals/proposals/_proposals.html.erb +2 -1
  191. data/decidim-proposals/app/views/decidim/proposals/proposals/_tags.html.erb +10 -0
  192. data/decidim-proposals/app/views/decidim/proposals/proposals/_vote_button.html.erb +9 -9
  193. data/decidim-proposals/app/views/decidim/proposals/proposals/_votes_count.html.erb +2 -2
  194. data/decidim-proposals/app/views/decidim/proposals/proposals/index.html.erb +7 -3
  195. data/decidim-proposals/app/views/decidim/proposals/proposals/index.js.erb +6 -1
  196. data/decidim-proposals/app/views/decidim/proposals/proposals/new.html.erb +1 -1
  197. data/decidim-proposals/app/views/decidim/proposals/proposals/show.html.erb +22 -23
  198. data/decidim-proposals/config/i18n-tasks.yml +2 -0
  199. data/decidim-proposals/config/locales/ca.yml +23 -15
  200. data/decidim-proposals/config/locales/en.yml +12 -4
  201. data/decidim-proposals/config/locales/es.yml +12 -4
  202. data/decidim-proposals/config/locales/eu.yml +5 -0
  203. data/decidim-proposals/db/migrate/20170205082832_add_index_to_decidim_proposals_proposals_proposal_votes_count.rb +7 -0
  204. data/decidim-proposals/lib/decidim/proposals/feature.rb +10 -1
  205. data/decidim-proposals/lib/decidim/proposals/test/factories.rb +1 -1
  206. data/decidim-proposals/spec/commands/decidim/proposals/admin_create_proposal_spec.rb +0 -1
  207. data/decidim-proposals/spec/commands/decidim/proposals/create_proposal_spec.rb +0 -1
  208. data/decidim-proposals/spec/features/admin_manages_proposals_spec.rb +0 -2
  209. data/decidim-proposals/spec/features/process_admin_manages_proposals_spec.rb +0 -2
  210. data/decidim-proposals/spec/features/proposals_spec.rb +77 -0
  211. data/decidim-proposals/spec/features/vote_proposal_spec.rb +16 -1
  212. data/decidim-proposals/spec/forms/decidim/proposals/admin_proposal_form_spec.rb +0 -1
  213. data/decidim-proposals/spec/forms/decidim/proposals/proposal_form_spec.rb +0 -1
  214. data/decidim-proposals/spec/helpers/proposal_votes_helper_spec.rb +10 -0
  215. data/decidim-proposals/spec/services/decidim/proposals/proposal_search_spec.rb +56 -31
  216. data/decidim-proposals/spec/shared/create_proposal_examples.rb +2 -2
  217. data/decidim-results/app/views/decidim/results/admin/results/edit.html.erb +1 -1
  218. data/decidim-results/app/views/decidim/results/admin/results/new.html.erb +1 -1
  219. data/decidim-results/app/views/decidim/results/results/index.html.erb +3 -1
  220. data/decidim-results/app/views/decidim/results/results/show.html.erb +11 -1
  221. data/decidim-results/config/locales/ca.yml +2 -2
  222. data/decidim-results/config/locales/en.yml +1 -1
  223. data/decidim-results/config/locales/es.yml +1 -1
  224. data/decidim-results/config/locales/eu.yml +5 -0
  225. data/decidim-results/lib/decidim/results/feature.rb +1 -0
  226. data/decidim-results/spec/features/admin_manages_results_spec.rb +0 -2
  227. data/decidim-results/spec/features/process_admin_manages_results_spec.rb +0 -2
  228. data/decidim-system/app/assets/stylesheets/decidim/system/_foundation_and_overrides.scss +1 -1
  229. data/decidim-system/app/controllers/decidim/system/application_controller.rb +1 -0
  230. data/decidim-system/app/controllers/decidim/system/devise/sessions_controller.rb +1 -0
  231. data/decidim-system/app/views/decidim/system/admins/edit.html.erb +2 -2
  232. data/decidim-system/app/views/decidim/system/admins/index.html.erb +1 -1
  233. data/decidim-system/app/views/decidim/system/admins/new.html.erb +2 -2
  234. data/decidim-system/app/views/decidim/system/admins/show.html.erb +1 -1
  235. data/decidim-system/app/views/decidim/system/dashboard/show.html.erb +1 -1
  236. data/decidim-system/app/views/decidim/system/devise/passwords/edit.html.erb +1 -1
  237. data/decidim-system/app/views/decidim/system/devise/passwords/new.html.erb +1 -1
  238. data/decidim-system/app/views/decidim/system/devise/sessions/new.html.erb +1 -1
  239. data/decidim-system/app/views/decidim/system/organizations/edit.html.erb +1 -1
  240. data/decidim-system/app/views/decidim/system/organizations/index.html.erb +1 -1
  241. data/decidim-system/app/views/decidim/system/organizations/new.html.erb +2 -2
  242. data/decidim-system/app/views/decidim/system/organizations/show.html.erb +1 -1
  243. data/decidim-system/config/locales/eu.yml +7 -0
  244. data/decidim-system/spec/features/organizations_spec.rb +1 -2
  245. data/lib/generators/decidim/install_generator.rb +9 -0
  246. data/lib/generators/decidim/templates/initializer.rb +1 -0
  247. data/package.json +6 -6
  248. data/yarn.lock +743 -738
  249. metadata +53 -25
  250. data/decidim-comments/spec/support/dummy.rb +0 -20
  251. data/decidim-proposals/app/views/decidim/proposals/proposals/_share.html.erb +0 -33
@@ -1,6 +1,6 @@
1
1
  <span class="<%= votes_count_classes(from_proposals_list)[:number] %>">
2
- <%= proposal.votes.size %>
2
+ <%= proposal.proposal_votes_count %>
3
3
  </span>
4
4
  <span class="<%= votes_count_classes(from_proposals_list)[:label] %>">
5
- <%= t('.count', count: proposal.votes.size) %>
5
+ <%= t('.count', count: proposal.proposal_votes_count) %>
6
6
  </span>
@@ -1,11 +1,15 @@
1
+ <% add_meta_tags({
2
+ title: t(".meta_title", feature_name: translated_attribute(current_feature.name))
3
+ }) %>
4
+
1
5
  <%= render partial: "votes_limit" %>
2
6
  <div class="row columns">
3
7
  <div class="title-action">
4
8
  <h2 id="proposals-count" class="title-action__title section-heading">
5
9
  <%= render partial: "count" %>
6
10
  </h2>
7
- <% if can? :create, Decidim::Proposals::Proposal %>
8
- <%= link_to new_proposal_path, class: "title-action__action button small hollow" do %>
11
+ <% if current_settings.creation_enabled %>
12
+ <%= action_authorized_link_to :create, new_proposal_path, class: "title-action__action button small hollow" do %>
9
13
  <%= t(".new_proposal") %>
10
14
  <%= icon "plus" %>
11
15
  <% end %>
@@ -30,4 +34,4 @@
30
34
  </div>
31
35
 
32
36
  <%= javascript_include_tag("decidim/filters") %>
33
- <%= render partial: "decidim/shared/login_modal" %>
37
+ <%= javascript_include_tag "decidim/orders" %>
@@ -1,5 +1,10 @@
1
1
  var $proposals = $('#proposals');
2
2
  var $proposalsCount = $('#proposals-count');
3
+ var $orderFilterInput = $('.order_filter');
3
4
 
4
5
  $proposals.html('<%= j(render partial: "proposals") %>');
5
- $proposalsCount.html('<%= j(render partial: "count") %>');
6
+ $proposalsCount.html('<%= j(render partial: "count") %>');
7
+ $orderFilterInput.val('<%= order %>');
8
+
9
+ var $dropdownMenu = $('.dropdown.menu:last');
10
+ $dropdownMenu.foundation();
@@ -9,7 +9,7 @@
9
9
  <div class="columns large-6 medium-centered">
10
10
  <div class="card">
11
11
  <div class="card__content">
12
- <%= form_for(@form) do |form| %>
12
+ <%= decidim_form_for(@form) do |form| %>
13
13
  <div class="field">
14
14
  <%= form.text_field :title %>
15
15
  </div>
@@ -1,7 +1,8 @@
1
- <% content_for :meta_description, @proposal.body %>
2
- <% content_for :meta_title, @proposal.title %>
3
- <% content_for :meta_url, proposal_url(@proposal.id) %>
4
- <% content_for :twitter_handler, current_organization.twitter_handler %>
1
+ <% add_meta_tags({
2
+ description: @proposal.body,
3
+ title: @proposal.title,
4
+ url: proposal_url(@proposal.id)
5
+ }) %>
5
6
 
6
7
  <%= render partial: "votes_limit" %>
7
8
  <div class="row column view-header">
@@ -34,30 +35,30 @@
34
35
  </div>
35
36
  </div>
36
37
  <% end %>
37
- <%= render partial: "share", locals: { proposal: @proposal } %>
38
+ <%= render partial: "decidim/shared/share_modal" %>
38
39
  </div>
39
40
  <div class="columns mediumlarge-8 mediumlarge-pull-4">
40
41
  <div class="section">
41
42
  <%= render partial: "proposal_badge", locals: { proposal: @proposal } %>
42
43
  <p><%= @proposal.body %></p>
43
- <% if @proposal.category || @proposal.scope %>
44
- <ul class="tags tags--proposal">
45
- <% if @proposal.category %>
46
- <li><a href=""><%= translated_attribute(@proposal.category.name) %></a></li>
47
- <% end %>
48
- <% if @proposal.scope %>
49
- <li><a href=""><%= @proposal.scope.name %></a></li>
50
- <% end %>
51
- </ul>
52
- <% end %>
44
+ <%= render partial: "tags", locals: { proposal: @proposal } %>
53
45
  </div>
54
- <% if @proposal.rejected? %>
55
- <div class="section">
56
- <div class="callout warning">
57
- <h5><%= t(".proposal_rejected_reason") %></h5>
58
- <p><%= translated_attribute @proposal.answer %></p>
46
+ <% if @proposal.answered? && translated_attribute(@proposal.answer).present? %>
47
+ <% if @proposal.accepted? %>
48
+ <div class="section">
49
+ <div class="callout success">
50
+ <h5><%= t(".proposal_accepted_reason") %></h5>
51
+ <p><%= translated_attribute @proposal.answer %></p>
52
+ </div>
59
53
  </div>
60
- </div>
54
+ <% else %>
55
+ <div class="section">
56
+ <div class="callout warning">
57
+ <h5><%= t(".proposal_rejected_reason") %></h5>
58
+ <p><%= translated_attribute @proposal.answer %></p>
59
+ </div>
60
+ </div>
61
+ <% end %>
61
62
  <% end %>
62
63
  <%= linked_resources_for @proposal, :results, "included_proposals" %>
63
64
  <%= linked_resources_for @proposal, :projects, "included_proposals" %>
@@ -71,7 +72,5 @@
71
72
  <% end %>
72
73
  <% end %>
73
74
 
74
- <%= render partial: "decidim/shared/login_modal" %>
75
-
76
75
  <%= javascript_include_tag "decidim/proposals/social_share" %>
77
76
  <%= stylesheet_link_tag "decidim/proposals/social_share" %>
@@ -6,3 +6,5 @@ ignore_unused:
6
6
  - "decidim.resource_links.*"
7
7
  - "activemodel.attributes.proposal.*"
8
8
  - "decidim.proposals.answers.*"
9
+ - "decidim.features.proposals.actions.*"
10
+ - "decidim.proposals.proposals.orders.*"
@@ -10,12 +10,15 @@ ca:
10
10
  decidim:
11
11
  features:
12
12
  proposals:
13
+ actions:
14
+ create: Crear propostes
15
+ vote: Votar
13
16
  name: Propostes
14
17
  settings:
15
18
  step:
16
19
  creation_enabled: Habilitar de creació de propostes
17
- votes_blocked: Vots bloquejats
18
- votes_enabled: Vots habilitats
20
+ votes_blocked: Suports bloquejats
21
+ votes_enabled: Suports habilitats
19
22
  proposals:
20
23
  actions:
21
24
  answer: Respondre
@@ -75,6 +78,8 @@ ca:
75
78
  official: Oficial
76
79
  origin: Origen
77
80
  rejected: Rebutjades
81
+ related_to: Relacionat amb
82
+ scopes: Àmbits
78
83
  search: Cerca
79
84
  state: Estat
80
85
  voted: Votat
@@ -84,40 +89,43 @@ ca:
84
89
  filter_for: Filtrar per
85
90
  unfold: Desplegar
86
91
  index:
92
+ meta_title: "%{feature_name}"
87
93
  new_proposal: Nova proposta
88
94
  linked_proposals:
89
95
  proposal_votes:
90
- one: <span class="card--list__data__number">1</span>vot
91
- other: <span class="card--list__data__number">%{count}</span>vots
96
+ one: <span class="card--list__data__number">1</span>suport
97
+ other: <span class="card--list__data__number">%{count}</span>suports
92
98
  new:
93
99
  back: Enrere
94
100
  select_a_category: Si us plau, seleccioni una categoria
95
101
  select_a_scope: Si us plau, seleccioni un àmbit
96
102
  send: Enviar
97
103
  title: Nova proposta
104
+ orders:
105
+ label: 'Ordenar propostes per:'
106
+ most_voted: Més votat
107
+ random: Aleatori
108
+ recent: Recent
98
109
  proposal:
99
110
  view_proposal: Veure proposta
100
- share:
101
- close_window: Tanca la finestra
102
- share: Compartir
103
- share_link: Comparteix l'enllaç
104
111
  show:
112
+ proposal_accepted_reason: 'Aquesta proposta ha estat acceptada perquè:'
105
113
  proposal_rejected_reason: 'Aquesta proposta ha estat rebutjada perquè:'
106
114
  vote_button:
107
115
  already_voted: Ja has votat
108
- no_votes_remaining: No hi ha vots restants
116
+ no_votes_remaining: No hi ha suports restants
109
117
  vote: Votar
110
- votes_blocked: Votació desactivada
118
+ votes_blocked: Recollida de suports desactivada
111
119
  votes_count:
112
120
  count:
113
- one: VOT
114
- other: VOTS
121
+ one: SUPORT
122
+ other: SUPORTS
115
123
  votes_limit:
116
124
  vote_limit:
117
- description: En lloc de votar tantes propostes com vulgui, només es pot votar fins %{limit} propostes.
125
+ description: En lloc de donar suport a tantes propostes com es vulgui, només es pot donar suport fins a un màxim de %{limit} propostes.
118
126
  left: Restant
119
- title: Té %{limit} vots a distribuir
120
- votes: Vots
127
+ title: Té %{limit} suports a distribuir
128
+ votes: Suports
121
129
  resource_links:
122
130
  included_proposals:
123
131
  results: 'La proposta apareix en aquests resultats:'
@@ -11,6 +11,9 @@ en:
11
11
  decidim:
12
12
  features:
13
13
  proposals:
14
+ actions:
15
+ create: Create proposals
16
+ vote: Vote
14
17
  name: Proposals
15
18
  settings:
16
19
  step:
@@ -76,6 +79,8 @@ en:
76
79
  official: Official
77
80
  origin: Origin
78
81
  rejected: Rejected
82
+ related_to: Related to
83
+ scopes: Scopes
79
84
  search: Search
80
85
  state: State
81
86
  voted: Voted
@@ -85,6 +90,7 @@ en:
85
90
  filter_for: Filter by
86
91
  unfold: Unfold
87
92
  index:
93
+ meta_title: "%{feature_name}"
88
94
  new_proposal: New proposal
89
95
  linked_proposals:
90
96
  proposal_votes:
@@ -96,13 +102,15 @@ en:
96
102
  select_a_scope: Please select a scope
97
103
  send: Send
98
104
  title: New proposal
105
+ orders:
106
+ label: 'Order proposals by:'
107
+ most_voted: Most voted
108
+ random: Random
109
+ recent: Recent
99
110
  proposal:
100
111
  view_proposal: View proposal
101
- share:
102
- close_window: Close window
103
- share: Share
104
- share_link: Share link
105
112
  show:
113
+ proposal_accepted_reason: 'This proposal has been accepted because:'
106
114
  proposal_rejected_reason: 'This proposal has been rejected because:'
107
115
  vote_button:
108
116
  already_voted: Already voted
@@ -10,6 +10,9 @@ es:
10
10
  decidim:
11
11
  features:
12
12
  proposals:
13
+ actions:
14
+ create: Crear propuestas
15
+ vote: Votar
13
16
  name: Propuestas
14
17
  settings:
15
18
  step:
@@ -75,6 +78,8 @@ es:
75
78
  official: Oficial
76
79
  origin: Origen
77
80
  rejected: Rechazadas
81
+ related_to: Relacionado con
82
+ scopes: Ámbitos
78
83
  search: Buscar
79
84
  state: Estado
80
85
  voted: Votado
@@ -84,6 +89,7 @@ es:
84
89
  filter_for: Filtrar por
85
90
  unfold: Desplegar
86
91
  index:
92
+ meta_title: "%{feature_name}"
87
93
  new_proposal: Nueva propuesta
88
94
  linked_proposals:
89
95
  proposal_votes:
@@ -95,13 +101,15 @@ es:
95
101
  select_a_scope: Por favor, seleccione un ámbito
96
102
  send: Enviar
97
103
  title: Nueva propuesta
104
+ orders:
105
+ label: 'Ordenar propuestas por:'
106
+ most_voted: Más votado
107
+ random: Aleatorio
108
+ recent: Reciente
98
109
  proposal:
99
110
  view_proposal: Ver propuesta
100
- share:
101
- close_window: Cerrar ventana
102
- share: Compartir
103
- share_link: Compartir enlace
104
111
  show:
112
+ proposal_accepted_reason: 'Esta propuesta ha sido aceptada porque:'
105
113
  proposal_rejected_reason: 'Esta propuesta ha sido rechazada porque:'
106
114
  vote_button:
107
115
  already_voted: Ya votado
@@ -0,0 +1,5 @@
1
+ eu:
2
+ activemodel:
3
+ attributes:
4
+ proposal:
5
+ category_id: Kategoria
@@ -0,0 +1,7 @@
1
+ class AddIndexToDecidimProposalsProposalsProposalVotesCount < ActiveRecord::Migration[5.0]
2
+ def change
3
+ add_index :decidim_proposals_proposals, :proposal_votes_count
4
+ add_index :decidim_proposals_proposals, :created_at
5
+ add_index :decidim_proposals_proposals, :state
6
+ end
7
+ end
@@ -13,6 +13,8 @@ Decidim.register_feature(:proposals) do |feature|
13
13
  end
14
14
  end
15
15
 
16
+ feature.actions = %w(vote create)
17
+
16
18
  feature.settings(:global) do |settings|
17
19
  settings.attribute :vote_limit, type: :integer, default: 0
18
20
  settings.attribute :comments_always_enabled, type: :boolean, default: true
@@ -37,6 +39,7 @@ Decidim.register_feature(:proposals) do |feature|
37
39
  feature = Decidim::Feature.create!(
38
40
  name: Decidim::Features::Namer.new(process.organization.available_locales, :proposals).i18n_name,
39
41
  manifest_name: :proposals,
42
+ published_at: Time.current,
40
43
  participatory_process: process,
41
44
  settings: {
42
45
  vote_limit: 0
@@ -45,10 +48,14 @@ Decidim.register_feature(:proposals) do |feature|
45
48
  process.active_step.id => { votes_enabled: true, votes_blocked: false, creation_enabled: true }
46
49
  }
47
50
  )
51
+ categories = feature.participatory_process.categories
52
+ scopes = feature.organization.scopes
48
53
 
49
54
  20.times do |n|
50
55
  proposal = Decidim::Proposals::Proposal.create!(
51
56
  feature: feature,
57
+ category: categories.sample,
58
+ scope: scopes.sample,
52
59
  title: Faker::Lorem.sentence(2),
53
60
  body: Faker::Lorem.paragraphs(2).join("\n"),
54
61
  author: Decidim::User.where(organization: feature.organization).all.sample
@@ -75,7 +82,9 @@ Decidim.register_feature(:proposals) do |feature|
75
82
  name: name,
76
83
  organization: feature.organization,
77
84
  tos_agreement: "1",
78
- confirmed_at: Time.now)
85
+ confirmed_at: Time.current,
86
+ comments_notifications: true,
87
+ replies_notifications: true)
79
88
 
80
89
  Decidim::Proposals::ProposalVote.create!(proposal: proposal,
81
90
  author: author)
@@ -7,7 +7,7 @@ require "decidim/results/test/factories"
7
7
  require "decidim/budgets/test/factories"
8
8
 
9
9
  FactoryGirl.define do
10
- factory :proposal_feature, class: Decidim::Feature do
10
+ factory :proposal_feature, parent: :feature do
11
11
  name { Decidim::Features::Namer.new(participatory_process.organization.available_locales, :proposals).i18n_name }
12
12
  manifest_name :proposals
13
13
  participatory_process { create(:participatory_process, :with_steps) }
@@ -1,6 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
  require "spec_helper"
3
- require_relative "../../../shared/create_proposal_examples"
4
3
 
5
4
  module Decidim
6
5
  module Proposals
@@ -1,6 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
  require "spec_helper"
3
- require_relative "../../../shared/create_proposal_examples"
4
3
 
5
4
  module Decidim
6
5
  module Proposals
@@ -1,8 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require "spec_helper"
4
- require_relative "../shared/admin_shared_context"
5
- require_relative "../shared/manage_proposals_examples"
6
4
 
7
5
  describe "Admin manages proposals", type: :feature do
8
6
  include_context "admin"
@@ -1,8 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require "spec_helper"
4
- require_relative "../shared/admin_shared_context"
5
- require_relative "../shared/manage_proposals_examples"
6
4
 
7
5
  describe "Process admin manages proposals", type: :feature do
8
6
  include_context "admin"
@@ -77,6 +77,18 @@ describe "Proposals", type: :feature do
77
77
  expect(page).to have_content(user_group.name)
78
78
  end
79
79
  end
80
+
81
+ context "when the user isn't authorized" do
82
+ before do
83
+ feature.update_attribute(:permissions, create: { authorization_handler_name: "decidim/dummy_authorization_handler" })
84
+ visit_feature
85
+ end
86
+
87
+ it "should show a modal dialog" do
88
+ click_link "New proposal"
89
+ expect(page).to have_content("Authorization required")
90
+ end
91
+ end
80
92
  end
81
93
 
82
94
  context "when creation is not enabled" do
@@ -169,6 +181,7 @@ describe "Proposals", type: :feature do
169
181
  click_link proposal.title
170
182
 
171
183
  expect(page).to have_content("Accepted")
184
+ expect(page).to have_i18n_content(proposal.answer)
172
185
  end
173
186
  end
174
187
 
@@ -183,6 +196,18 @@ describe "Proposals", type: :feature do
183
196
  expect(page).to have_i18n_content(proposal.answer)
184
197
  end
185
198
  end
199
+
200
+ context "when a proposal has been accepted" do
201
+ let!(:proposal) { create(:proposal, :accepted, feature: feature) }
202
+
203
+ it "shows the acceptance reason" do
204
+ visit_feature
205
+ click_link proposal.title
206
+
207
+ expect(page).to have_content("Accepted")
208
+ expect(page).to have_i18n_content(proposal.answer)
209
+ end
210
+ end
186
211
  end
187
212
 
188
213
  context "when a proposal has been linked in a project" do
@@ -286,5 +311,57 @@ describe "Proposals", type: :feature do
286
311
  end
287
312
  end
288
313
  end
314
+
315
+ context "when ordering" do
316
+ context "by 'most_support'" do
317
+ let!(:feature) do
318
+ create(:proposal_feature,
319
+ :with_votes_enabled,
320
+ manifest: manifest,
321
+ participatory_process: participatory_process)
322
+ end
323
+
324
+ before do
325
+ proposals.each do |proposal|
326
+ create(:proposal_vote, proposal: proposal)
327
+ end
328
+ end
329
+
330
+ it "lists the proposals ordered by votes" do
331
+ most_voted_proposal = create(:proposal, feature: feature)
332
+ create_list(:proposal_vote, 3, proposal: most_voted_proposal)
333
+ less_voted_proposal = create(:proposal, feature: feature)
334
+
335
+ visit_feature
336
+
337
+ within ".order-by" do
338
+ page.find('.dropdown.menu .is-dropdown-submenu-parent').hover
339
+ end
340
+
341
+ click_link "Most voted"
342
+
343
+ expect(page.find('#proposals .card-grid .column:first-child', text: most_voted_proposal.title)).to be
344
+ expect(page.find('#proposals .card-grid .column:last-child', text: less_voted_proposal.title)).to be
345
+ end
346
+ end
347
+
348
+ context "by 'recent'" do
349
+ it "lists the proposals ordered by created at" do
350
+ older_proposal = create(:proposal, feature: feature, created_at: 1.month.ago)
351
+ recent_proposal = create(:proposal, feature: feature)
352
+
353
+ visit_feature
354
+
355
+ within ".order-by" do
356
+ page.find('.dropdown.menu .is-dropdown-submenu-parent').hover
357
+ end
358
+
359
+ click_link "Recent"
360
+
361
+ expect(page.find('#proposals .card-grid .column:first-child', text: recent_proposal.title)).to be
362
+ expect(page.find('#proposals .card-grid .column:last-child', text: older_proposal.title)).to be
363
+ end
364
+ end
365
+ end
289
366
  end
290
367
  end