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
@@ -7,6 +7,9 @@ module Decidim
7
7
  include NeedsAuthorization
8
8
  include FormFactory
9
9
  include LocaleSwitcher
10
+ helper Decidim::DecidimFormHelper
11
+
12
+ helper Decidim::LanguageChooserHelper
10
13
 
11
14
  protect_from_forgery with: :exception, prepend: true
12
15
 
@@ -0,0 +1,59 @@
1
+ # frozen_string_literal: true
2
+ require_dependency "decidim/admin/application_controller"
3
+
4
+ module Decidim
5
+ module Admin
6
+ # Controller that allows managing all the Admins.
7
+ #
8
+ class FeaturePermissionsController < ApplicationController
9
+ include Concerns::ParticipatoryProcessAdmin
10
+ helper_method :authorizations, :feature
11
+
12
+ def edit
13
+ authorize! :update, feature
14
+ @permissions_form = PermissionsForm.new(
15
+ permissions: permission_forms
16
+ )
17
+ end
18
+
19
+ def update
20
+ authorize! :update, feature
21
+ @permissions_form = PermissionsForm.from_params(params)
22
+
23
+ UpdateFeaturePermissions.call(@permissions_form, feature) do
24
+ on(:ok) do
25
+ flash[:notice] = t("feature_permissions.update.success", scope: "decidim.admin")
26
+ redirect_to participatory_process_features_path(participatory_process)
27
+ end
28
+
29
+ on(:invalid) do
30
+ render action: :edit
31
+ end
32
+ end
33
+ end
34
+
35
+ private
36
+
37
+ def permission_forms
38
+ permissions = feature.permissions || {}
39
+
40
+ @permission_forms ||= feature.manifest.actions.inject({}) do |result, action|
41
+ form = PermissionForm.new(
42
+ authorization_handler_name: permissions.dig(action, "authorization_handler_name"),
43
+ options: permissions.dig(action, "options").try(:to_json)
44
+ )
45
+
46
+ result.update(action => form)
47
+ end
48
+ end
49
+
50
+ def authorizations
51
+ Decidim.authorization_handlers.map(&:handler_name)
52
+ end
53
+
54
+ def feature
55
+ @feature ||= participatory_process.features.find(params[:feature_id])
56
+ end
57
+ end
58
+ end
59
+ end
@@ -88,6 +88,26 @@ module Decidim
88
88
  end
89
89
  end
90
90
 
91
+ def publish
92
+ @feature = query_scope.find(params[:id])
93
+ authorize! :update, @feature
94
+
95
+ @feature.update_attribute(:published_at, Time.current)
96
+
97
+ flash[:notice] = I18n.t("features.publish.success", scope: "decidim.admin")
98
+ redirect_to :back
99
+ end
100
+
101
+ def unpublish
102
+ @feature = query_scope.find(params[:id])
103
+ authorize! :update, @feature
104
+
105
+ @feature.update_attribute(:published_at, nil)
106
+
107
+ flash[:notice] = I18n.t("features.unpublish.success", scope: "decidim.admin")
108
+ redirect_to :back
109
+ end
110
+
91
111
  private
92
112
 
93
113
  def query_scope
@@ -23,7 +23,9 @@ module Decidim
23
23
  organization: current_organization,
24
24
  invitation_instructions: "invite_admin",
25
25
  roles: %w(admin),
26
- invited_by: current_user
26
+ invited_by: current_user,
27
+ comments_notifications: true,
28
+ replies_notifications: true
27
29
  }
28
30
 
29
31
  @form = form(InviteAdminForm).from_params(params.merge(default_params))
@@ -11,10 +11,17 @@ module Decidim
11
11
 
12
12
  attribute :name, String
13
13
  attribute :twitter_handler, String
14
+ attribute :facebook_handler, String
15
+ attribute :instagram_handler, String
16
+ attribute :youtube_handler, String
17
+ attribute :github_handler, String
14
18
  attribute :default_locale, String
15
19
  attribute :homepage_image
16
20
  attribute :logo
17
21
  attribute :favicon
22
+ attribute :official_url
23
+ attribute :official_img_header
24
+ attribute :official_img_footer
18
25
  attribute :show_statistics
19
26
 
20
27
  translatable_attribute :description, String
@@ -24,6 +31,9 @@ module Decidim
24
31
  validates :default_locale, presence: true
25
32
  validates :default_locale, inclusion: { in: :available_locales }
26
33
 
34
+ validates :official_img_header, file_size: { less_than_or_equal_to: ->(_record) { Decidim.maximum_attachment_size } }, file_content_type: { allow: ["image/jpeg", "image/png"] }
35
+ validates :official_img_footer, file_size: { less_than_or_equal_to: ->(_record) { Decidim.maximum_attachment_size } }, file_content_type: { allow: ["image/jpeg", "image/png"] }
36
+
27
37
  private
28
38
 
29
39
  def available_locales
@@ -11,13 +11,16 @@ module Decidim
11
11
  translatable_attribute :subtitle, String
12
12
  translatable_attribute :description, String
13
13
  translatable_attribute :short_description, String
14
- translatable_attribute :domain, String
15
14
  translatable_attribute :scope, String
15
+ translatable_attribute :developer_group, String
16
+ translatable_attribute :local_area, String
17
+ translatable_attribute :target, String
18
+ translatable_attribute :participatory_scope, String
19
+ translatable_attribute :participatory_structure, String
16
20
 
17
21
  mimic :participatory_process
18
22
 
19
23
  attribute :end_date, Date
20
- attribute :developer_group, String
21
24
  attribute :slug, String
22
25
  attribute :hashtag, String
23
26
  attribute :promoted, Boolean
@@ -29,10 +32,10 @@ module Decidim
29
32
 
30
33
  validate :slug, :slug_uniqueness
31
34
 
32
- validates :hero_image, file_size: { less_than_or_equal_to: lambda { |_record| Decidim.maximum_attachment_size } }, file_content_type: { allow: ['image/jpeg', 'image/png'] }
33
- validates :banner_image, file_size: { less_than_or_equal_to:lambda { |_record| Decidim.maximum_attachment_size } }, file_content_type: { allow: ['image/jpeg', 'image/png'] }
35
+ validates :hero_image, file_size: { less_than_or_equal_to: ->(_record) { Decidim.maximum_attachment_size } }, file_content_type: { allow: ["image/jpeg", "image/png"] }
36
+ validates :banner_image, file_size: { less_than_or_equal_to: ->(_record) { Decidim.maximum_attachment_size } }, file_content_type: { allow: ["image/jpeg", "image/png"] }
34
37
 
35
- private
38
+ private
36
39
 
37
40
  def slug_uniqueness
38
41
  return unless current_organization.participatory_processes.where(slug: slug).where.not(id: id).any?
@@ -0,0 +1,31 @@
1
+ # frozen_string_literal: true
2
+ module Decidim
3
+ module Admin
4
+ # This form handles permissions for a particular action in the admin panel.
5
+ class PermissionForm < Form
6
+ attribute :authorization_handler_name, String
7
+ attribute :options, String
8
+
9
+ validate :sanitize
10
+ validate :options_is_valid_json
11
+
12
+ private
13
+
14
+ def sanitize
15
+ self.authorization_handler_name = nil if authorization_handler_name.blank?
16
+ self.options = nil if authorization_handler_name.blank?
17
+ self.options = nil if options.blank?
18
+ end
19
+
20
+ def options_is_valid_json
21
+ return unless options
22
+
23
+ result = JSON.parse(options)
24
+ errors.add(:options, :invalid_json) unless result.is_a?(Hash)
25
+ result
26
+ rescue JSON::ParserError
27
+ errors.add(:options, :invalid_json)
28
+ end
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+ module Decidim
3
+ module Admin
4
+ # This form handles a set of forms related to handling permissions
5
+ # in the admin panel.
6
+ class PermissionsForm < Form
7
+ mimic :feature_permissions
8
+
9
+ attribute :permissions, Hash[String => PermissionForm]
10
+
11
+ def valid?
12
+ super && permissions.values.all?(&:valid?)
13
+ end
14
+ end
15
+ end
16
+ end
@@ -8,6 +8,7 @@ module Decidim
8
8
  include Decidim::TranslationsHelper
9
9
  include Decidim::HumanizeBooleansHelper
10
10
  include Decidim::AriaSelectedLinkToHelper
11
+ include Decidim::MetaTagsHelper
11
12
 
12
13
  def title
13
14
  current_organization.name
@@ -8,7 +8,7 @@ module Decidim
8
8
  belongs_to :participatory_process, foreign_key: "decidim_participatory_process_id", class_name: Decidim::ParticipatoryProcess
9
9
 
10
10
  ROLES = %w(admin).freeze
11
- validates :role, inclusion: { in: ROLES }
11
+ validates :role, inclusion: { in: ROLES }, uniqueness: { scope: [:user, :participatory_process] }
12
12
  end
13
13
  end
14
14
  end
@@ -1,6 +1,6 @@
1
1
  <h3><%= t ".title" %></h3>
2
2
 
3
- <%= form_for(@form, url: url_for([@attachment.attached_to, @attachment])) do |f| %>
3
+ <%= decidim_form_for(@form, url: url_for([@attachment.attached_to, @attachment])) do |f| %>
4
4
  <%= render partial: 'decidim/admin/attachments/form', object: f %>
5
5
 
6
6
  <div class="actions">
@@ -1,6 +1,6 @@
1
1
  <h3><%= t ".title" %></h3>
2
2
 
3
- <%= form_for(@form, url: [attached_to, @form]) do |f| %>
3
+ <%= decidim_form_for(@form, url: [attached_to, @form]) do |f| %>
4
4
  <%= render partial: 'decidim/admin/attachments/form', object: f %>
5
5
 
6
6
  <div class="actions">
@@ -1,6 +1,6 @@
1
1
  <h3><%= t ".title" %></h3>
2
2
 
3
- <%= form_for(@form, url: participatory_process_category_path(@category.participatory_process, @category)) do |f| %>
3
+ <%= decidim_form_for(@form, url: participatory_process_category_path(@category.participatory_process, @category)) do |f| %>
4
4
  <%= render partial: 'form', object: f %>
5
5
 
6
6
  <div class="actions">
@@ -1,6 +1,6 @@
1
1
  <h3><%= t ".title" %></h3>
2
2
 
3
- <%= form_for(@form, url: participatory_process_categories_path(participatory_process)) do |f| %>
3
+ <%= decidim_form_for(@form, url: participatory_process_categories_path(participatory_process)) do |f| %>
4
4
  <%= render partial: 'form', object: f %>
5
5
 
6
6
  <div class="actions">
@@ -1,3 +1,3 @@
1
- <% content_for :title do %>
1
+ <% provide :title do %>
2
2
  <h2><%= t("decidim.admin.titles.dashboard") %></h2>
3
3
  <% end %>
@@ -0,0 +1,27 @@
1
+ <section id="features">
2
+ <div class="row">
3
+ <div class="columns">
4
+ <h3><%= t(".title") %></h3>
5
+ </div>
6
+ </div>
7
+
8
+ <%= form_for @permissions_form, url: url_for(action: :update), method: "put" do |form| %>
9
+ <%= form.fields_for :permissions, form.object do |form| %>
10
+ <% form.object.permissions.each do |action, permission| %>
11
+ <%= form.fields_for(action, permission) do |form| %>
12
+ <fieldset class="card <%=action %>-permission">
13
+ <div class="card-divider"><%= t("#{feature.manifest.name}.actions.#{action}", scope: "decidim.features") %></div>
14
+ <div class="card-section">
15
+ <%= form.select :authorization_handler_name,
16
+ authorizations.map { |authorization|
17
+ [t("#{authorization}.name", scope: "decidim.authorization_handlers"), authorization]
18
+ }, include_blank: t(".everyone") %>
19
+ <%= form.text_field :options %>
20
+ </div>
21
+ </fieldset>
22
+ <% end %>
23
+ <% end %>
24
+ <% end %>
25
+ <%= form.submit t(".submit") %>
26
+ <% end %>
27
+ </section>
@@ -16,8 +16,18 @@
16
16
  <% end %>
17
17
  <% end %>
18
18
 
19
+ <% if can?(:update, feature) %>
20
+ <% if feature.published? %>
21
+ <%= link_to t("actions.unpublish", scope: "decidim.admin"), url_for(action: :unpublish, id: feature, controller: "features"), class: "small button", method: :put %>
22
+ <% else %>
23
+ <%= link_to t("actions.publish", scope: "decidim.admin"), url_for(action: :publish, id: feature, controller: "features"), class: "small button", method: :put %>
24
+ <% end %>
25
+ <% end %>
26
+
19
27
  <%= link_to t("actions.configure", scope: "decidim.admin"), url_for(action: :edit, id: feature, controller: "features"), class: "small button" if can? :update, feature %>
20
28
 
29
+ <%= link_to t("actions.permissions", scope: "decidim.admin"), edit_participatory_process_feature_permissions_path(feature_id: feature), class: "small button" if can? :update, feature %>
30
+
21
31
  <%= link_to t("actions.destroy", scope: "decidim.admin"), url_for(action: :destroy, id: feature, controller: "features"), method: :delete, class: "small alert button", data: { confirm: t("actions.confirm_destroy", scope: "decidim.admin") } if can? :destroy, feature %>
22
32
  </td>
23
33
  </tr>
@@ -1,6 +1,6 @@
1
1
  <h3><%= t ".title", name: t("#{@feature.manifest.name}.name", scope: "decidim.features") %></h3>
2
2
 
3
- <%= form_for([participatory_process, @form], url: participatory_process_feature_path(participatory_process, @feature), method: "put") do |form| %>
3
+ <%= decidim_form_for([participatory_process, @form], url: participatory_process_feature_path(participatory_process, @feature), method: "put") do |form| %>
4
4
  <%= render partial: 'form', object: form, locals: { feature: @feature } %>
5
5
 
6
6
  <div class="actions">
@@ -1,6 +1,6 @@
1
1
  <h3><%= t ".title", name: t("#{manifest.name}.name", scope: "decidim.features") %></h3>
2
2
 
3
- <%= form_for([participatory_process, @form], url: participatory_process_features_path(type: params[:type]), method: "post") do |form| %>
3
+ <%= decidim_form_for([participatory_process, @form], url: participatory_process_features_path(type: params[:type]), method: "post") do |form| %>
4
4
  <%= render partial: 'form', object: form, locals: { feature: @feature } %>
5
5
 
6
6
  <div class="actions">
@@ -6,6 +6,22 @@
6
6
  <%= form.text_field :twitter_handler %>
7
7
  </div>
8
8
 
9
+ <div class="field">
10
+ <%= form.text_field :facebook_handler %>
11
+ </div>
12
+
13
+ <div class="field">
14
+ <%= form.text_field :instagram_handler %>
15
+ </div>
16
+
17
+ <div class="field">
18
+ <%= form.text_field :youtube_handler %>
19
+ </div>
20
+
21
+ <div class="field">
22
+ <%= form.text_field :github_handler %>
23
+ </div>
24
+
9
25
  <div class="field">
10
26
  <%= form.translated :editor, :description %>
11
27
  </div>
@@ -30,6 +46,24 @@
30
46
  <%= form.file_field :favicon %>
31
47
  </div>
32
48
 
49
+ <div class="field">
50
+ <%= form.text_field :official_url %>
51
+ </div>
52
+
53
+ <div class="field">
54
+ <%= form.file_field :official_img_header %>
55
+ <% if current_organization.official_img_header? %>
56
+ <%= image_tag current_organization.official_img_header.url.to_s %>
57
+ <% end %>
58
+ </div>
59
+
60
+ <div class="field">
61
+ <%= form.file_field :official_img_footer %>
62
+ <% if current_organization.official_img_footer? %>
63
+ <%= image_tag current_organization.official_img_footer.url.to_s %>
64
+ <% end %>
65
+ </div>
66
+
33
67
  <div class="field">
34
68
  <%= form.check_box :show_statistics %>
35
69
  </div>
@@ -1,8 +1,8 @@
1
- <% content_for :title do %>
1
+ <% provide :title do %>
2
2
  <h2><%= t ".title" %></h2>
3
3
  <% end %>
4
4
 
5
- <%= form_for(@form, url: organization_path) do |f| %>
5
+ <%= decidim_form_for(@form, url: organization_path) do |f| %>
6
6
  <%= render partial: 'form', object: f %>
7
7
 
8
8
  <div class="actions">
@@ -1,6 +1,6 @@
1
1
  <h3><%= t ".title" %></h3>
2
2
 
3
- <%= form_for(@form, url: participatory_process_step_path(@participatory_process_step.participatory_process, @participatory_process_step)) do |f| %>
3
+ <%= decidim_form_for(@form, url: participatory_process_step_path(@participatory_process_step.participatory_process, @participatory_process_step)) do |f| %>
4
4
  <%= render partial: 'form', object: f %>
5
5
 
6
6
  <div class="actions">
@@ -1,6 +1,6 @@
1
1
  <h3><%= t ".title" %></h3>
2
2
 
3
- <%= form_for(@form) do |f| %>
3
+ <%= decidim_form_for(@form) do |f| %>
4
4
  <%= render partial: 'form', object: f %>
5
5
 
6
6
  <div class="actions">
@@ -1,7 +1,7 @@
1
1
  <section id="process_admins">
2
2
  <h3><%= t(".process_admins_title", scope: "decidim.admin") %></h3>
3
3
 
4
- <%= form_for :participatory_process_user_role, url: participatory_process_user_roles_path(participatory_process) do |f| %>
4
+ <%= decidim_form_for :participatory_process_user_role, url: participatory_process_user_roles_path(participatory_process) do |f| %>
5
5
  <table class="stack">
6
6
  <thead>
7
7
  <tr>
@@ -35,7 +35,7 @@
35
35
  </div>
36
36
 
37
37
  <div class="field">
38
- <%= form.translated :text_field, :domain %>
38
+ <%= form.date_field :end_date %>
39
39
  </div>
40
40
 
41
41
  <div class="field">
@@ -43,9 +43,22 @@
43
43
  </div>
44
44
 
45
45
  <div class="field">
46
- <%= form.text_field :developer_group %>
46
+ <%= form.translated :text_field, :developer_group %>
47
47
  </div>
48
48
 
49
49
  <div class="field">
50
- <%= form.date_field :end_date %>
51
- </div>
50
+ <%= form.translated :text_field, :local_area %>
51
+ </div>
52
+
53
+ <div class="field">
54
+ <%= form.translated :text_field, :target %>
55
+ </div>
56
+
57
+ <div class="field">
58
+ <%= form.translated :text_field, :participatory_scope %>
59
+ </div>
60
+
61
+ <div class="field">
62
+ <%= form.translated :text_field, :participatory_structure %>
63
+ </div>
64
+