decidim 0.2.0 → 0.3.0

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 (322) hide show
  1. checksums.yaml +4 -4
  2. data/.circleci/config.yml +3 -1
  3. data/.codeclimate.yml +2 -3
  4. data/.rubocop.yml +1 -48
  5. data/.travis.yml +1 -0
  6. data/Dockerfile +1 -0
  7. data/Gemfile +1 -0
  8. data/Gemfile.lock +119 -115
  9. data/README.md +24 -9
  10. data/Rakefile +14 -10
  11. data/decidim-admin/app/assets/javascripts/decidim/admin/application.js.es6 +21 -9
  12. data/decidim-admin/app/assets/javascripts/decidim/admin/sort_list.component.js.es6 +35 -0
  13. data/decidim-admin/app/assets/stylesheets/decidim/admin/extra/_language-chooser.scss +4 -0
  14. data/decidim-admin/app/assets/stylesheets/decidim/admin/extra/_sort.scss +12 -0
  15. data/decidim-admin/app/controllers/decidim/admin/application_controller.rb +1 -0
  16. data/decidim-admin/app/controllers/decidim/admin/participatory_process_attachments_controller.rb +4 -0
  17. data/decidim-admin/app/helpers/decidim/admin/menu_helper.rb +0 -1
  18. data/decidim-admin/app/models/decidim/admin/participatory_process_user_role.rb +2 -2
  19. data/decidim-admin/app/views/decidim/admin/categories/index.html.erb +7 -1
  20. data/decidim-admin/app/views/decidim/admin/exports/_dropdown.html.erb +1 -1
  21. data/decidim-admin/app/views/decidim/admin/moderations/index.html.erb +6 -2
  22. data/decidim-admin/app/views/decidim/admin/participatory_process_steps/index.html.erb +1 -0
  23. data/decidim-admin/app/views/layouts/decidim/admin/_title_bar.html.erb +10 -0
  24. data/decidim-admin/bin/rails +3 -3
  25. data/decidim-admin/config/locales/ca.yml +3 -1
  26. data/decidim-admin/config/locales/en.yml +3 -1
  27. data/decidim-admin/config/locales/es.yml +3 -1
  28. data/decidim-admin/config/locales/eu.yml +0 -1
  29. data/decidim-admin/config/locales/fi.yml +0 -1
  30. data/decidim-admin/config/locales/fr.yml +0 -1
  31. data/decidim-admin/config/locales/it.yml +490 -0
  32. data/decidim-admin/db/migrate/20161102144648_add_admin_participatory_process_user_roles.rb +5 -3
  33. data/decidim-admin/db/migrate/20170128112958_change_user_groups_verified_to_timestamp.rb +2 -0
  34. data/decidim-admin/decidim-admin.gemspec +2 -1
  35. data/decidim-admin/lib/decidim/admin/engine.rb +1 -1
  36. data/decidim-admin/lib/decidim/admin/test/manage_attachments_examples.rb +3 -3
  37. data/decidim-admin/spec/commands/reject_user_group_spec.rb +2 -2
  38. data/decidim-admin/spec/features/admin_copy_participatory_process_spec.rb +2 -2
  39. data/decidim-admin/spec/features/admin_invite_spec.rb +1 -1
  40. data/decidim-admin/spec/features/admin_manages_features_spec.rb +2 -2
  41. data/decidim-admin/spec/features/admin_manages_newsletters_spec.rb +4 -4
  42. data/decidim-admin/spec/features/admin_manages_organization_spec.rb +6 -6
  43. data/decidim-admin/spec/features/admin_manages_participatory_process_groups_spec.rb +4 -4
  44. data/decidim-admin/spec/features/admin_manages_participatory_processes_spec.rb +4 -4
  45. data/decidim-admin/spec/features/static_pages_spec.rb +4 -4
  46. data/decidim-admin/spec/forms/organization_form_spec.rb +1 -1
  47. data/decidim-admin/spec/shared/manage_process_categories_examples.rb +44 -29
  48. data/decidim-admin/spec/shared/manage_process_steps_examples.rb +3 -3
  49. data/decidim-admin/spec/shared/manage_processes_examples.rb +1 -1
  50. data/decidim-admin/spec/shared/participatory_admin_shared_context.rb +3 -3
  51. data/decidim-admin/spec/spec_helper.rb +3 -2
  52. data/decidim-api/bin/rails +3 -3
  53. data/decidim-api/decidim-api.gemspec +2 -1
  54. data/decidim-api/lib/decidim/api/engine.rb +1 -1
  55. data/decidim-api/spec/spec_helper.rb +3 -2
  56. data/decidim-budgets/app/controllers/decidim/budgets/application_controller.rb +1 -1
  57. data/decidim-budgets/app/models/decidim/budgets/line_item.rb +1 -2
  58. data/decidim-budgets/app/models/decidim/budgets/order.rb +2 -2
  59. data/decidim-budgets/app/views/decidim/budgets/projects/_linked_projects.html.erb +1 -1
  60. data/decidim-budgets/bin/rails +3 -3
  61. data/decidim-budgets/config/locales/it.yml +126 -0
  62. data/decidim-budgets/db/migrate/20170127114122_create_projects.rb +2 -0
  63. data/decidim-budgets/db/migrate/20170130095615_create_orders.rb +2 -0
  64. data/decidim-budgets/db/migrate/20170130101825_create_line_items.rb +2 -0
  65. data/decidim-budgets/db/migrate/20170207101750_remove_short_description_from_decidim_projects.rb +2 -0
  66. data/decidim-budgets/db/migrate/20170215132708_add_reference_to_projects.rb +2 -0
  67. data/decidim-budgets/db/migrate/20170410074214_remove_not_null_reference_budgets.rb +2 -0
  68. data/decidim-budgets/db/migrate/20170612101846_migrate_projects_category.rb +15 -0
  69. data/decidim-budgets/decidim-budgets.gemspec +3 -1
  70. data/decidim-budgets/lib/decidim/budgets/feature.rb +2 -2
  71. data/decidim-budgets/spec/features/admin_manages_project_attachments_spec.rb +5 -3
  72. data/decidim-budgets/spec/features/admin_manages_projects_spec.rb +5 -7
  73. data/decidim-budgets/spec/features/process_admin_manages_project_attachments_spec.rb +4 -4
  74. data/decidim-budgets/spec/features/process_admin_manages_projects_spec.rb +5 -8
  75. data/decidim-budgets/spec/shared/manage_attachments_examples.rb +0 -4
  76. data/decidim-budgets/spec/shared/manage_projects_examples.rb +3 -3
  77. data/decidim-budgets/spec/spec_helper.rb +2 -1
  78. data/decidim-comments/app/assets/javascripts/decidim/comments/bundle.js +0 -0
  79. data/decidim-comments/app/commands/decidim/comments/create_comment.rb +2 -2
  80. data/decidim-comments/app/frontend/comments/add_comment_form.component.tsx +1 -0
  81. data/decidim-comments/app/frontend/comments/comment.component.test.tsx +12 -1
  82. data/decidim-comments/app/frontend/comments/comment.component.tsx +42 -4
  83. data/decidim-comments/app/frontend/comments/comment_thread.component.test.tsx +11 -0
  84. data/decidim-comments/app/frontend/comments/comment_thread.component.tsx +5 -1
  85. data/decidim-comments/app/frontend/fragments/comment_data.fragment.graphql +3 -0
  86. data/decidim-comments/app/frontend/support/generate_comments_data.ts +3 -0
  87. data/decidim-comments/app/frontend/support/schema.ts +18 -12
  88. data/decidim-comments/app/mailers/decidim/comments/comment_notification_mailer.rb +6 -4
  89. data/decidim-comments/app/models/decidim/comments/comment.rb +6 -4
  90. data/decidim-comments/app/models/decidim/comments/comment_vote.rb +1 -2
  91. data/decidim-comments/app/models/decidim/comments/seed.rb +5 -2
  92. data/decidim-comments/app/resolvers/decidim/comments/vote_comment_resolver.rb +3 -0
  93. data/decidim-comments/app/types/decidim/comments/commentable_interface.rb +3 -3
  94. data/decidim-comments/app/views/decidim/comments/comment_notification_mailer/comment_created.html.erb +1 -1
  95. data/decidim-comments/app/views/decidim/comments/comment_notification_mailer/reply_created.html.erb +1 -1
  96. data/decidim-comments/bin/rails +3 -3
  97. data/decidim-comments/config/locales/ca.yml +5 -0
  98. data/decidim-comments/config/locales/en.yml +5 -0
  99. data/decidim-comments/config/locales/es.yml +5 -0
  100. data/decidim-comments/config/locales/it.yml +65 -0
  101. data/decidim-comments/db/migrate/20161130143508_create_comments.rb +2 -0
  102. data/decidim-comments/db/migrate/20161214082645_add_depth_to_comments.rb +2 -0
  103. data/decidim-comments/db/migrate/20161216102820_add_alignment_to_comments.rb +2 -0
  104. data/decidim-comments/db/migrate/20161219150806_create_comment_votes.rb +3 -1
  105. data/decidim-comments/db/migrate/20170123102043_add_user_group_id_to_comments.rb +2 -0
  106. data/decidim-comments/db/migrate/20170504085413_add_root_commentable_to_comments.rb +2 -0
  107. data/decidim-comments/db/migrate/20170510091348_update_root_commentable_for_comments.rb +3 -2
  108. data/decidim-comments/db/migrate/20170510091409_set_root_commentable_null_constraints.rb +2 -0
  109. data/decidim-comments/decidim-comments.gemspec +2 -1
  110. data/decidim-comments/lib/decidim/comments/comment_serializer.rb +1 -1
  111. data/decidim-comments/lib/decidim/comments/commentable.rb +4 -4
  112. data/decidim-comments/spec/commands/create_comment_spec.rb +2 -2
  113. data/decidim-comments/spec/features/admin_manages_comments_spec.rb +4 -9
  114. data/decidim-comments/spec/features/process_admin_manages_comments_spec.rb +5 -11
  115. data/decidim-comments/spec/mailers/comment_notification_mailer_spec.rb +12 -7
  116. data/decidim-comments/spec/shared/author_localised_email.rb +26 -0
  117. data/decidim-comments/spec/spec_helper.rb +1 -1
  118. data/decidim-dev/config/locales/it.yml +9 -0
  119. data/decidim-dev/decidim-dev.gemspec +8 -3
  120. data/decidim-dev/lib/decidim/dev.rb +1 -8
  121. data/decidim-dev/lib/decidim/dev/railtie.rb +1 -1
  122. data/decidim-dev/lib/decidim/dev/test/base_spec_helper.rb +6 -4
  123. data/decidim-dev/lib/decidim/dev/test/rspec_support/capybara.rb +2 -2
  124. data/decidim-dev/lib/decidim/dev/test/rspec_support/feature.rb +4 -2
  125. data/decidim-dev/lib/decidim/dev/test/rspec_support/feature_context.rb +28 -8
  126. data/decidim-dev/lib/decidim/dev/test/rspec_support/translation_helpers.rb +7 -2
  127. data/decidim-dev/lib/decidim/dev/test/spec_helper.rb +2 -2
  128. data/decidim-dev/lib/generators/decidim/dummy_generator.rb +1 -1
  129. data/decidim-meetings/README.md +1 -1
  130. data/decidim-meetings/app/controllers/decidim/meetings/application_controller.rb +1 -1
  131. data/decidim-meetings/app/views/decidim/meetings/meetings/_linked_meetings.html.erb +1 -1
  132. data/decidim-meetings/bin/rails +3 -3
  133. data/decidim-meetings/config/locales/it.yml +87 -0
  134. data/decidim-meetings/db/migrate/20161130121354_create_meetings.rb +2 -0
  135. data/decidim-meetings/db/migrate/20170110142105_close_a_meeting.rb +2 -0
  136. data/decidim-meetings/db/migrate/20170123151650_add_latitude_and_longitude_to_meetings.rb +2 -0
  137. data/decidim-meetings/db/migrate/20170129153716_remove_short_description_from_meetings.rb +2 -0
  138. data/decidim-meetings/db/migrate/20170215132546_add_reference_to_meetings.rb +2 -0
  139. data/decidim-meetings/db/migrate/20170410074252_remove_not_null_reference_meetings.rb +2 -0
  140. data/decidim-meetings/db/migrate/20170612101925_migrate_meetings_category.rb +15 -0
  141. data/decidim-meetings/decidim-meetings.gemspec +3 -1
  142. data/decidim-meetings/lib/decidim/meetings/feature.rb +2 -2
  143. data/decidim-meetings/spec/features/admin_manages_meetings_attachments_spec.rb +5 -1
  144. data/decidim-meetings/spec/features/admin_manages_meetings_spec.rb +5 -7
  145. data/decidim-meetings/spec/features/explore_meetings_spec.rb +32 -6
  146. data/decidim-meetings/spec/features/process_admin_manages_meetings_attachments_spec.rb +4 -2
  147. data/decidim-meetings/spec/features/process_admin_manages_meetings_spec.rb +5 -8
  148. data/decidim-meetings/spec/shared/manage_attachments_examples.rb +0 -3
  149. data/decidim-meetings/spec/shared/manage_meetings_examples.rb +11 -11
  150. data/decidim-meetings/spec/spec_helper.rb +2 -1
  151. data/decidim-pages/bin/rails +3 -3
  152. data/decidim-pages/config/locales/it.yml +22 -0
  153. data/decidim-pages/db/migrate/20161116121353_create_decidim_pages.rb +2 -0
  154. data/decidim-pages/db/migrate/20161214150429_add_commentable_to_pages.rb +2 -0
  155. data/decidim-pages/db/migrate/20170110145040_remove_commentable_flag_from_pages.rb +2 -0
  156. data/decidim-pages/db/migrate/20170220091402_remove_page_feature_titles.rb +2 -0
  157. data/decidim-pages/decidim-pages.gemspec +3 -1
  158. data/decidim-pages/spec/features/admin_spec.rb +1 -1
  159. data/decidim-pages/spec/spec_helper.rb +2 -3
  160. data/decidim-proposals/app/commands/decidim/proposals/unvote_proposal.rb +34 -0
  161. data/decidim-proposals/app/commands/decidim/proposals/vote_proposal.rb +39 -0
  162. data/decidim-proposals/app/controllers/concerns/decidim/proposals/orderable.rb +7 -3
  163. data/decidim-proposals/app/controllers/decidim/proposals/proposal_votes_controller.rb +18 -8
  164. data/decidim-proposals/app/models/decidim/proposals/proposal.rb +3 -3
  165. data/decidim-proposals/app/models/decidim/proposals/proposal_vote.rb +0 -1
  166. data/decidim-proposals/app/views/decidim/proposals/proposals/_author.html.erb +23 -0
  167. data/decidim-proposals/app/views/decidim/proposals/proposals/_linked_proposals.html.erb +2 -2
  168. data/decidim-proposals/app/views/decidim/proposals/proposals/_proposal.html.erb +1 -9
  169. data/decidim-proposals/app/views/decidim/proposals/proposals/_vote_button.html.erb +2 -6
  170. data/decidim-proposals/app/views/decidim/proposals/proposals/new.html.erb +1 -1
  171. data/decidim-proposals/app/views/decidim/proposals/proposals/show.html.erb +1 -11
  172. data/decidim-proposals/bin/rails +3 -3
  173. data/decidim-proposals/config/locales/ca.yml +6 -0
  174. data/decidim-proposals/config/locales/en.yml +6 -0
  175. data/decidim-proposals/config/locales/es.yml +6 -0
  176. data/decidim-proposals/config/locales/eu.yml +0 -2
  177. data/decidim-proposals/config/locales/fi.yml +0 -2
  178. data/decidim-proposals/config/locales/fr.yml +0 -2
  179. data/decidim-proposals/config/locales/it.yml +147 -0
  180. data/decidim-proposals/db/migrate/20161212110850_create_decidim_proposals.rb +2 -0
  181. data/decidim-proposals/db/migrate/20170112115253_create_proposal_votes.rb +3 -1
  182. data/decidim-proposals/db/migrate/20170113114245_add_text_search_indexes.rb +2 -0
  183. data/decidim-proposals/db/migrate/20170118120151_add_counter_cache_votes_to_proposals.rb +2 -0
  184. data/decidim-proposals/db/migrate/20170120151202_add_user_group_id_to_proposals.rb +2 -0
  185. data/decidim-proposals/db/migrate/20170131092413_add_answers_to_proposals.rb +2 -0
  186. data/decidim-proposals/db/migrate/20170205082832_add_index_to_decidim_proposals_proposals_proposal_votes_count.rb +2 -0
  187. data/decidim-proposals/db/migrate/20170215113152_create_proposal_reports.rb +2 -0
  188. data/decidim-proposals/db/migrate/20170215131720_add_report_count_to_proposals.rb +2 -0
  189. data/decidim-proposals/db/migrate/20170215132030_add_reference_to_proposals.rb +2 -0
  190. data/decidim-proposals/db/migrate/20170220152416_add_hidden_at_to_proposals.rb +2 -0
  191. data/decidim-proposals/db/migrate/20170228105156_add_geolocalization_fields_to_proposals.rb +2 -0
  192. data/decidim-proposals/db/migrate/20170307085300_migrate_proposal_reports_data_to_reports.rb +8 -10
  193. data/decidim-proposals/db/migrate/20170410073742_remove_not_null_reference_proposals.rb +2 -0
  194. data/decidim-proposals/db/migrate/20170612101809_migrate_proposals_category.rb +15 -0
  195. data/decidim-proposals/decidim-proposals.gemspec +4 -2
  196. data/decidim-proposals/lib/decidim/proposals/feature.rb +5 -1
  197. data/decidim-proposals/lib/decidim/proposals/proposal_serializer.rb +1 -6
  198. data/decidim-proposals/spec/commands/decidim/proposals/unvote_proposal_spec.rb +26 -0
  199. data/decidim-proposals/spec/commands/decidim/proposals/vote_proposal_spec.rb +47 -0
  200. data/decidim-proposals/spec/features/admin_manages_proposals_spec.rb +6 -11
  201. data/decidim-proposals/spec/features/process_admin_manages_proposals_spec.rb +6 -12
  202. data/decidim-proposals/spec/features/proposals_spec.rb +38 -12
  203. data/decidim-proposals/spec/shared/manage_proposals_examples.rb +3 -6
  204. data/decidim-proposals/spec/spec_helper.rb +2 -1
  205. data/decidim-results/app/controllers/decidim/results/application_controller.rb +1 -1
  206. data/decidim-results/app/views/decidim/results/results/_linked_results.html.erb +1 -1
  207. data/decidim-results/bin/rails +3 -3
  208. data/decidim-results/config/locales/it.yml +78 -0
  209. data/decidim-results/db/migrate/20170116104125_create_results.rb +2 -0
  210. data/decidim-results/db/migrate/20170129164553_remove_short_description_from_results.rb +2 -0
  211. data/decidim-results/db/migrate/20170215132624_add_reference_to_results.rb +2 -0
  212. data/decidim-results/db/migrate/20170410074358_remove_not_null_reference_results.rb +2 -0
  213. data/decidim-results/db/migrate/20170612101951_migrate_results_category.rb +15 -0
  214. data/decidim-results/decidim-results.gemspec +3 -1
  215. data/decidim-results/spec/features/admin_manages_results_spec.rb +5 -7
  216. data/decidim-results/spec/features/process_admin_manages_results_spec.rb +5 -8
  217. data/decidim-results/spec/shared/manage_results_examples.rb +3 -3
  218. data/decidim-results/spec/spec_helper.rb +2 -1
  219. data/decidim-surveys/README.md +24 -0
  220. data/decidim-surveys/Rakefile +3 -0
  221. data/decidim-surveys/app/assets/config/admin/decidim_surveys_manifest.js +1 -0
  222. data/decidim-surveys/app/assets/images/decidim/surveys/icon.svg +1 -0
  223. data/decidim-surveys/app/assets/javascripts/decidim/surveys/admin/auto_label_by_position.component.js.es6 +33 -0
  224. data/decidim-surveys/app/assets/javascripts/decidim/surveys/admin/dynamic_fields.component.js.es6 +95 -0
  225. data/decidim-surveys/app/assets/javascripts/decidim/surveys/admin/surveys.js.es6 +85 -0
  226. data/decidim-surveys/app/assets/stylesheets/decidim/surveys/surveys.scss +9 -0
  227. data/decidim-surveys/app/commands/decidim/surveys/admin/update_survey.rb +65 -0
  228. data/decidim-surveys/app/commands/decidim/surveys/answer_survey.rb +43 -0
  229. data/decidim-surveys/app/commands/decidim/surveys/create_survey.rb +19 -0
  230. data/decidim-surveys/app/controllers/decidim/surveys/admin/application_controller.rb +15 -0
  231. data/decidim-surveys/app/controllers/decidim/surveys/admin/surveys_controller.rb +55 -0
  232. data/decidim-surveys/app/controllers/decidim/surveys/application_controller.rb +13 -0
  233. data/decidim-surveys/app/controllers/decidim/surveys/surveys_controller.rb +39 -0
  234. data/decidim-surveys/app/forms/decidim/surveys/admin/survey_form.rb +19 -0
  235. data/decidim-surveys/app/forms/decidim/surveys/admin/survey_question_answer_option_form.rb +15 -0
  236. data/decidim-surveys/app/forms/decidim/surveys/admin/survey_question_form.rb +24 -0
  237. data/decidim-surveys/app/forms/decidim/surveys/survey_answer_form.rb +36 -0
  238. data/decidim-surveys/app/forms/decidim/surveys/survey_form.rb +22 -0
  239. data/decidim-surveys/app/helpers/decidim/surveys/admin/application_helper.rb +39 -0
  240. data/decidim-surveys/app/models/decidim/surveys/abilities/admin_user.rb +34 -0
  241. data/decidim-surveys/app/models/decidim/surveys/abilities/current_user.rb +47 -0
  242. data/decidim-surveys/app/models/decidim/surveys/abilities/process_admin_user.rb +44 -0
  243. data/decidim-surveys/app/models/decidim/surveys/application_record.rb +10 -0
  244. data/decidim-surveys/app/models/decidim/surveys/survey.rb +25 -0
  245. data/decidim-surveys/app/models/decidim/surveys/survey_answer.rb +27 -0
  246. data/decidim-surveys/app/models/decidim/surveys/survey_question.rb +18 -0
  247. data/decidim-surveys/app/queries/decidim/surveys/survey_user_answers.rb +28 -0
  248. data/decidim-surveys/app/views/decidim/surveys/admin/surveys/_answer_option.html.erb +23 -0
  249. data/decidim-surveys/app/views/decidim/surveys/admin/surveys/_form.html.erb +47 -0
  250. data/decidim-surveys/app/views/decidim/surveys/admin/surveys/_question.html.erb +57 -0
  251. data/decidim-surveys/app/views/decidim/surveys/admin/surveys/edit.html.erb +7 -0
  252. data/decidim-surveys/app/views/decidim/surveys/surveys/show.html.erb +102 -0
  253. data/decidim-surveys/bin/rails +15 -0
  254. data/decidim-surveys/config/i18n-tasks.yml +11 -0
  255. data/decidim-surveys/config/locales/ca.yml +69 -0
  256. data/decidim-surveys/config/locales/en.yml +73 -0
  257. data/decidim-surveys/config/locales/es.yml +69 -0
  258. data/decidim-surveys/config/locales/eu.yml +5 -0
  259. data/decidim-surveys/config/locales/fi.yml +5 -0
  260. data/decidim-surveys/config/locales/fr.yml +5 -0
  261. data/decidim-surveys/config/locales/it.yml +5 -0
  262. data/decidim-surveys/config/locales/nl.yml +5 -0
  263. data/decidim-surveys/db/migrate/20170511092231_create_decidim_surveys.rb +15 -0
  264. data/decidim-surveys/db/migrate/20170515090916_create_decidim_survey_questions.rb +12 -0
  265. data/decidim-surveys/db/migrate/20170515144119_create_decidim_survey_answers.rb +14 -0
  266. data/decidim-surveys/db/migrate/20170518085302_add_position_to_surveys_questions.rb +7 -0
  267. data/decidim-surveys/db/migrate/20170522075938_add_mandatory_to_surveys_questions.rb +7 -0
  268. data/decidim-surveys/db/migrate/20170524122229_add_question_type_to_surveys_questions.rb +7 -0
  269. data/decidim-surveys/db/migrate/20170525132233_add_answer_options_to_surveys_questions.rb +7 -0
  270. data/decidim-surveys/decidim-surveys.gemspec +22 -0
  271. data/decidim-surveys/lib/decidim/surveys.rb +14 -0
  272. data/decidim-surveys/lib/decidim/surveys/admin.rb +10 -0
  273. data/decidim-surveys/lib/decidim/surveys/admin_engine.rb +34 -0
  274. data/decidim-surveys/lib/decidim/surveys/engine.rb +25 -0
  275. data/decidim-surveys/lib/decidim/surveys/feature.rb +85 -0
  276. data/decidim-surveys/lib/decidim/surveys/survey_user_answers_serializer.rb +23 -0
  277. data/decidim-surveys/lib/decidim/surveys/test/factories.rb +39 -0
  278. data/decidim-surveys/spec/commands/decidim/surveys/admin/update_survey_spec.rb +147 -0
  279. data/decidim-surveys/spec/commands/decidim/surveys/answer_survey_spec.rb +71 -0
  280. data/decidim-surveys/spec/commands/decidim/surveys/create_survey_spec.rb +44 -0
  281. data/decidim-surveys/spec/factories.rb +3 -0
  282. data/decidim-surveys/spec/features/admin_manages_surveys_spec.rb +13 -0
  283. data/decidim-surveys/spec/features/process_admin_manages_surveys_spec.rb +13 -0
  284. data/decidim-surveys/spec/features/survey_spec.rb +235 -0
  285. data/decidim-surveys/spec/forms/decidim/surveys/admin/survey_form_spec.rb +64 -0
  286. data/decidim-surveys/spec/forms/decidim/surveys/admin/survey_question_form_spec.rb +36 -0
  287. data/decidim-surveys/spec/forms/decidim/surveys/survey_answer_form_spec.rb +36 -0
  288. data/decidim-surveys/spec/forms/decidim/surveys/survey_form_spec.rb +32 -0
  289. data/decidim-surveys/spec/models/decidim/surveys/abilities/admin_user_spec.rb +22 -0
  290. data/decidim-surveys/spec/models/decidim/surveys/abilities/current_user_spec.rb +19 -0
  291. data/decidim-surveys/spec/models/decidim/surveys/abilities/process_admin_user_spec.rb +23 -0
  292. data/decidim-surveys/spec/models/decidim/surveys/survey_answer_spec.rb +55 -0
  293. data/decidim-surveys/spec/models/decidim/surveys/survey_question_spec.rb +19 -0
  294. data/decidim-surveys/spec/models/decidim/surveys/survey_spec.rb +65 -0
  295. data/decidim-surveys/spec/queries/decidim/surveys/survey_user_answers_spec.rb +21 -0
  296. data/decidim-surveys/spec/services/decidim/surveys/surveys/survey_user_answer_serializer_spec.rb +34 -0
  297. data/decidim-surveys/spec/shared/edit_survey_examples.rb +213 -0
  298. data/decidim-surveys/spec/shared/export_survey_user_answers_examples.rb +47 -0
  299. data/decidim-surveys/spec/spec_helper.rb +4 -0
  300. data/decidim-system/app/controllers/decidim/system/devise/passwords_controller.rb +2 -0
  301. data/decidim-system/app/helpers/decidim/system/menu_helper.rb +0 -1
  302. data/decidim-system/bin/rails +3 -3
  303. data/decidim-system/config/locales/it.yml +66 -0
  304. data/decidim-system/db/migrate/20160919105637_devise_create_decidim_admins.rb +2 -0
  305. data/decidim-system/decidim-system.gemspec +2 -1
  306. data/decidim-system/spec/spec_helper.rb +3 -2
  307. data/decidim.gemspec +5 -4
  308. data/docs/geocoding.md +2 -2
  309. data/docs/how_to_create_a_plugin.md +11 -11
  310. data/lib/decidim.rb +1 -0
  311. data/lib/generators/decidim/app_generator.rb +3 -2
  312. data/lib/generators/decidim/demo_generator.rb +1 -1
  313. data/lib/generators/decidim/docker_generator.rb +2 -2
  314. data/lib/generators/decidim/install_generator.rb +3 -6
  315. data/lib/generators/decidim/templates/initializer.rb +2 -2
  316. metadata +130 -47
  317. data/decidim-admin/app/assets/javascripts/decidim/admin/sort_steps.js.es6 +0 -30
  318. data/decidim-budgets/spec/shared/admin_shared_context.rb +0 -13
  319. data/decidim-comments/spec/shared/admin_shared_context.rb +0 -13
  320. data/decidim-meetings/spec/shared/admin_shared_context.rb +0 -13
  321. data/decidim-proposals/spec/shared/admin_shared_context.rb +0 -13
  322. data/decidim-results/spec/shared/admin_shared_context.rb +0 -13
@@ -92,13 +92,17 @@ Decidim.register_feature(:proposals) do |feature|
92
92
  scopes = feature.organization.scopes + [nil]
93
93
 
94
94
  20.times do |n|
95
+ author = Decidim::User.where(organization: feature.organization).all.sample
96
+ user_group = [true, false].sample ? author.user_groups.verified.sample : nil
97
+
95
98
  proposal = Decidim::Proposals::Proposal.create!(
96
99
  feature: feature,
97
100
  category: categories.sample,
98
101
  scope: scopes.sample,
99
102
  title: Faker::Lorem.sentence(2),
100
103
  body: Faker::Lorem.paragraphs(2).join("\n"),
101
- author: Decidim::User.where(organization: feature.organization).all.sample
104
+ author: author,
105
+ user_group: user_group
102
106
  )
103
107
 
104
108
  if n > 15
@@ -46,12 +46,7 @@ module Decidim
46
46
 
47
47
  def meetings
48
48
  @proposal.linked_resources(:meetings, "proposals_from_meeting").map do |meeting|
49
- decidim_resource_url(
50
- meeting,
51
- feature_id: feature,
52
- participatory_process_id: participatory_process,
53
- host: organization.host
54
- )
49
+ Decidim::ResourceLocatorPresenter.new(meeting).url
55
50
  end
56
51
  end
57
52
 
@@ -0,0 +1,26 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "spec_helper"
4
+
5
+ module Decidim
6
+ module Proposals
7
+ describe UnvoteProposal do
8
+ describe "call" do
9
+ let(:proposal) { create(:proposal) }
10
+ let(:current_user) { create(:user, organization: proposal.feature.organization) }
11
+ let!(:proposal_vote) { create(:proposal_vote, author: current_user, proposal: proposal) }
12
+ let(:command) { described_class.new(proposal, current_user) }
13
+
14
+ it "broadcasts ok" do
15
+ expect { command.call }.to broadcast(:ok)
16
+ end
17
+
18
+ it "deletes the proposal vote for that user" do
19
+ expect do
20
+ command.call
21
+ end.to change { ProposalVote.count }.by(-1)
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,47 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "spec_helper"
4
+
5
+ module Decidim
6
+ module Proposals
7
+ describe VoteProposal do
8
+ describe "call" do
9
+ let(:proposal) { create(:proposal) }
10
+ let(:current_user) { create(:user, organization: proposal.feature.organization) }
11
+ let(:command) { described_class.new(proposal, current_user) }
12
+
13
+ describe "when the vote is not valid" do
14
+ before do
15
+ allow_any_instance_of(ProposalVote).to receive(:valid?).and_return(false)
16
+ end
17
+
18
+ it "broadcasts invalid" do
19
+ expect { command.call }.to broadcast(:invalid)
20
+ end
21
+
22
+ it "doesn't create a new vote for the proposal" do
23
+ expect do
24
+ command.call
25
+ end.to change { ProposalVote.count }.by(0)
26
+ end
27
+ end
28
+
29
+ describe "when the vote is valid" do
30
+ before do
31
+ allow_any_instance_of(ProposalVote).to receive(:valid?).and_return(true)
32
+ end
33
+
34
+ it "broadcasts ok" do
35
+ expect { command.call }.to broadcast(:ok)
36
+ end
37
+
38
+ it "creates a new vote for the proposal" do
39
+ expect do
40
+ command.call
41
+ end.to change { ProposalVote.count }.by(1)
42
+ end
43
+ end
44
+ end
45
+ end
46
+ end
47
+ end
@@ -3,18 +3,13 @@
3
3
  require "spec_helper"
4
4
 
5
5
  describe "Admin manages proposals", type: :feature do
6
- include_context "admin"
7
- it_behaves_like "manage proposals"
8
- it_behaves_like "manage moderations"
9
- it_behaves_like "export proposals"
10
- include_context "feature"
11
6
  let(:manifest_name) { "proposals" }
12
-
7
+ let!(:proposal) { create :proposal, feature: current_feature }
13
8
  let!(:reportables) { create_list(:proposal, 3, feature: current_feature) }
14
9
 
15
- before do
16
- switch_to_host(organization.host)
17
- login_as user, scope: :user
18
- visit decidim_admin.manage_feature_path(participatory_process_id: participatory_process, feature_id: current_feature)
19
- end
10
+ include_context "feature admin"
11
+
12
+ it_behaves_like "manage proposals"
13
+ it_behaves_like "manage moderations"
14
+ it_behaves_like "export proposals"
20
15
  end
@@ -3,19 +3,13 @@
3
3
  require "spec_helper"
4
4
 
5
5
  describe "Process admin manages proposals", type: :feature do
6
- include_context "admin"
7
- let(:user) { process_admin }
8
- it_behaves_like "manage proposals"
9
- it_behaves_like "manage moderations"
10
- it_behaves_like "export proposals"
11
- include_context "feature"
12
6
  let(:manifest_name) { "proposals" }
13
-
7
+ let!(:proposal) { create :proposal, feature: current_feature }
14
8
  let!(:reportables) { create_list(:proposal, 3, feature: current_feature) }
15
9
 
16
- before do
17
- switch_to_host(organization.host)
18
- login_as user, scope: :user
19
- visit decidim_admin.manage_feature_path(participatory_process_id: participatory_process, feature_id: current_feature)
20
- end
10
+ include_context "feature process admin"
11
+
12
+ it_behaves_like "manage proposals"
13
+ it_behaves_like "manage moderations"
14
+ it_behaves_like "export proposals"
21
15
  end
@@ -354,6 +354,22 @@ describe "Proposals", type: :feature do
354
354
  expect(page).to have_i18n_content(proposal.answer)
355
355
  end
356
356
  end
357
+
358
+ context "when the proposals'a author account has been deleted" do
359
+ let(:proposal) { proposals.first }
360
+
361
+ before do
362
+ Decidim::DestroyAccount.call(proposal.author, Decidim::DeleteAccountForm.from_params({}))
363
+ end
364
+
365
+ it "the user is displayed as a deleted user" do
366
+ visit_feature
367
+
368
+ click_link proposal.title
369
+
370
+ expect(page).to have_content("Deleted user")
371
+ end
372
+ end
357
373
  end
358
374
 
359
375
  context "when a proposal has been linked in a project" do
@@ -381,6 +397,20 @@ describe "Proposals", type: :feature do
381
397
  end
382
398
 
383
399
  context "listing proposals in a participatory process" do
400
+ shared_examples_for "a random proposal ordering" do
401
+ let!(:lucky_proposal) { create(:proposal, feature: feature) }
402
+ let!(:unlucky_proposal) { create(:proposal, feature: feature) }
403
+
404
+ it "lists the proposals ordered randomly by default" do
405
+ visit_feature
406
+
407
+ expect(page).to have_selector("a", text: "Random")
408
+ expect(page).to have_selector("#proposals .card-grid .column", count: 2)
409
+ expect(page).to have_selector("#proposals .card-grid .column", text: lucky_proposal.title)
410
+ expect(page).to have_selector("#proposals .card-grid .column", text: unlucky_proposal.title)
411
+ end
412
+ end
413
+
384
414
  it "lists all the proposals" do
385
415
  create(:proposal_feature,
386
416
  manifest: manifest,
@@ -392,6 +422,10 @@ describe "Proposals", type: :feature do
392
422
  expect(page).to have_css(".card--proposal", count: 3)
393
423
  end
394
424
 
425
+ describe "default ordering" do
426
+ it_behaves_like "a random proposal ordering"
427
+ end
428
+
395
429
  context "when voting phase is over" do
396
430
  let!(:feature) do
397
431
  create(:proposal_feature,
@@ -430,21 +464,13 @@ describe "Proposals", type: :feature do
430
464
  participatory_process: participatory_process)
431
465
  end
432
466
 
433
- let!(:lucky_proposal) { create(:proposal, title: "A", feature: feature) }
434
- let!(:unlucky_proposal) { create(:proposal, title: "B", feature: feature) }
435
-
436
- it "lists the proposals ordered randomly by default" do
437
- allow_any_instance_of(Decidim::Proposals::Proposal::ActiveRecord_Relation).to \
438
- receive(:order_randomly) { |scope, _seed| scope.order(title: :asc) }
439
-
440
- visit_feature
441
-
442
- expect(page).to have_selector("a", text: "Random")
443
- expect(page).to have_selector("#proposals .card-grid .column:first-child", text: lucky_proposal.title)
444
- expect(page).to have_selector("#proposals .card-grid .column:last-child", text: unlucky_proposal.title)
467
+ describe "order" do
468
+ it_behaves_like "a random proposal ordering"
445
469
  end
446
470
 
447
471
  it "shows only links to full proposals" do
472
+ create_list(:proposal, 2, feature: feature)
473
+
448
474
  visit_feature
449
475
 
450
476
  expect(page).to have_no_button("Voting disabled", disabled: true)
@@ -122,11 +122,8 @@ RSpec.shared_examples "manage proposals" do
122
122
  end
123
123
 
124
124
  context "when geocoding is enabled" do
125
- let!(:current_feature) do
126
- create(:proposal_feature,
127
- :with_geocoding_enabled,
128
- manifest: manifest,
129
- participatory_process: participatory_process)
125
+ before do
126
+ current_feature.update_attributes(settings: { geocoding_enabled: true })
130
127
  end
131
128
 
132
129
  it "creates a new proposal related to the process scope" do
@@ -194,7 +191,7 @@ RSpec.shared_examples "manage proposals" do
194
191
  within ".edit_proposal_answer" do
195
192
  fill_in_i18n_editor(
196
193
  :proposal_answer_answer,
197
- "#answer-tabs",
194
+ "#proposal_answer-answer-tabs",
198
195
  en: "The proposal doesn't make any sense",
199
196
  es: "La propuesta no tiene sentido",
200
197
  ca: "La proposta no te sentit"
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- ENV["ENGINE_NAME"] = File.dirname(File.dirname(__FILE__)).split("/").last
3
+ ENV["ENGINE_NAME"] = File.dirname(__dir__).split("/").last
4
+
4
5
  require "decidim/dev/test/base_spec_helper"
@@ -5,7 +5,7 @@ module Decidim
5
5
  # This controller is the abstract class from which all other controllers of
6
6
  # this engine inherit.
7
7
  #
8
- # Note that it inherits from `Decidim::Components::BaseController`, which
8
+ # Note that it inherits from `Decidim::Features::BaseController`, which
9
9
  # override its layout and provide all kinds of useful methods.
10
10
  class ApplicationController < Decidim::Features::BaseController
11
11
  end
@@ -2,7 +2,7 @@
2
2
  <% resources.each do |result| %>
3
3
  <div class="card--list__item">
4
4
  <%= icon "actions", class: "card--list__icon", remove_icon_class: true %>
5
- <%= link_to decidim_resource_path(result), class: "card--list__text card__link card__link--block" do %>
5
+ <%= link_to resource_locator(result).path, class: "card--list__text card__link card__link--block" do %>
6
6
  <h5 class="card--list__heading">
7
7
  <%= translated_attribute(result.title) %>
8
8
  </h5>
@@ -4,11 +4,11 @@
4
4
  # This command will automatically be run when you run "rails" with Rails gems
5
5
  # installed from the root of your application.
6
6
 
7
- ENGINE_ROOT = File.expand_path("../..", __FILE__)
8
- ENGINE_PATH = File.expand_path("../../lib/decidim/results/engine", __FILE__)
7
+ ENGINE_ROOT = File.expand_path("..", __dir__)
8
+ ENGINE_PATH = File.expand_path("../lib/decidim/results/engine", __dir__)
9
9
 
10
10
  # Set up gems listed in the Gemfile.
11
- ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../../Gemfile", __FILE__)
11
+ ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../Gemfile", __dir__)
12
12
  require "bundler/setup" if File.exist?(ENV["BUNDLE_GEMFILE"])
13
13
 
14
14
  require "rails/all"
@@ -0,0 +1,78 @@
1
+ it:
2
+ activemodel:
3
+ attributes:
4
+ result:
5
+ decidim_category_id: Categoria
6
+ decidim_scope_id: Visibilità
7
+ description: Descrizione
8
+ proposal_ids: Proposte incluse
9
+ title: Titolo
10
+ decidim:
11
+ features:
12
+ results:
13
+ name: Risultati
14
+ settings:
15
+ global:
16
+ comments_enabled: Commenti abilitati
17
+ step:
18
+ comments_blocked: Commenti bloccati
19
+ resource_links:
20
+ included_proposals:
21
+ result_proposals: Proposte incluse in questo risultato
22
+ meetings_through_proposals:
23
+ result_meetings: Meetin correlati
24
+ results:
25
+ actions:
26
+ confirm_destroy: Sei sicuro di voler cancellare questo risultato?
27
+ destroy: Cancella
28
+ edit: Modifica
29
+ new: Nuovo
30
+ preview: Anteprima
31
+ title: Azioni
32
+ admin:
33
+ models:
34
+ result:
35
+ name: Risultato
36
+ results:
37
+ create:
38
+ invalid: C'è stato un problema durante la creazione di questo risultato
39
+ success: OK, il risultato è stato creato
40
+ destroy:
41
+ success: Il risultato è stato cancellato
42
+ edit:
43
+ title: Modifica il risultato (Ambito)
44
+ update: Modifica
45
+ index:
46
+ title: Risultati
47
+ new:
48
+ create: Crea
49
+ title: Nuovo risultato
50
+ update:
51
+ invalid: C'è stato un problema durante l'aggiornamento di questo risultato
52
+ success: OK, il risultato è stato modificato
53
+ models:
54
+ result:
55
+ fields:
56
+ title: Titolo
57
+ results:
58
+ count:
59
+ results_count:
60
+ one: 1 risultato
61
+ other: "%{count} risultati"
62
+ filters:
63
+ category: Categoria
64
+ category_prompt: Scegli una categoria
65
+ scopes: Visibilità
66
+ search: Cerca
67
+ filters_small_view:
68
+ close_modal: Chiudi modalità
69
+ filter: Filtro
70
+ filter_by: Filtra per
71
+ unfold: Espandi
72
+ show:
73
+ stats:
74
+ attendees: Partecipanti
75
+ comments: Commenti
76
+ contributions: Contributi
77
+ proposals: Proposte
78
+ votes: Voti
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class CreateResults < ActiveRecord::Migration[5.0]
2
4
  def change
3
5
  create_table :decidim_results_results do |t|
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class RemoveShortDescriptionFromResults < ActiveRecord::Migration[5.0]
2
4
  def change
3
5
  remove_column :decidim_results_results, :short_description
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class AddReferenceToResults < ActiveRecord::Migration[5.0]
2
4
  def change
3
5
  add_column :decidim_results_results, :reference, :string
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class RemoveNotNullReferenceResults < ActiveRecord::Migration[5.0]
2
4
  def change
3
5
  change_column_null :decidim_results_results, :reference, true
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ class MigrateResultsCategory < ActiveRecord::Migration[5.1]
4
+ def change
5
+ # Create categorizations ensuring database integrity
6
+ execute('
7
+ INSERT INTO decidim_categorizations(decidim_category_id, categorizable_id, categorizable_type, created_at, updated_at)
8
+ SELECT decidim_category_id, decidim_results_results.id, \'Decidim::Results::Result\', NOW(), NOW()
9
+ FROM decidim_results_results
10
+ INNER JOIN decidim_categories ON decidim_categories.id = decidim_results_results.decidim_category_id
11
+ ')
12
+ # Remove unused column
13
+ remove_column :decidim_results_results, :decidim_category_id
14
+ end
15
+ end
@@ -1,4 +1,6 @@
1
- $:.push File.expand_path("../lib", __FILE__)
1
+ # frozen_string_literal: true
2
+
3
+ $LOAD_PATH.push File.expand_path("lib", __dir__)
2
4
 
3
5
  # Maintain your gem's version:
4
6
  require_relative "../decidim-core/lib/decidim/core/version"
@@ -3,12 +3,10 @@
3
3
  require "spec_helper"
4
4
 
5
5
  describe "Admin manages results", type: :feature do
6
- include_context "admin"
7
- it_behaves_like "manage results"
6
+ let(:manifest_name) { "results" }
7
+ let!(:result) { create :result, scope: scope, feature: current_feature }
8
+
9
+ include_context "feature admin"
8
10
 
9
- before do
10
- switch_to_host(organization.host)
11
- login_as user, scope: :user
12
- visit decidim_admin.manage_feature_path(participatory_process_id: participatory_process, feature_id: current_feature)
13
- end
11
+ it_behaves_like "manage results"
14
12
  end