decidim-assemblies 0.11.2 → 0.12.0.pre

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (86) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/config/admin/decidim_assemblies_manifest.js +1 -0
  3. data/app/assets/javascripts/decidim/assemblies/admin/assembly_members.js.es6 +37 -0
  4. data/app/cells/decidim/assemblies/assembly_cell.rb +19 -0
  5. data/app/cells/decidim/assemblies/assembly_m/footer.erb +15 -0
  6. data/app/cells/decidim/assemblies/assembly_m/tags.erb +1 -0
  7. data/app/cells/decidim/assemblies/assembly_m_cell.rb +50 -0
  8. data/app/cells/decidim/assemblies/assembly_member/show.erb +53 -0
  9. data/app/cells/decidim/assemblies/assembly_member_cell.rb +21 -0
  10. data/app/commands/decidim/assemblies/admin/create_assembly_member.rb +73 -0
  11. data/app/commands/decidim/assemblies/admin/destroy_assembly_member.rb +56 -0
  12. data/app/commands/decidim/assemblies/admin/update_assembly_member.rb +69 -0
  13. data/app/controllers/decidim/assemblies/admin/application_controller.rb +14 -0
  14. data/app/controllers/decidim/assemblies/admin/assemblies_controller.rb +8 -12
  15. data/app/controllers/decidim/assemblies/admin/assembly_attachment_collections_controller.rb +1 -1
  16. data/app/controllers/decidim/assemblies/admin/assembly_attachments_controller.rb +1 -1
  17. data/app/controllers/decidim/assemblies/admin/assembly_copies_controller.rb +3 -3
  18. data/app/controllers/decidim/assemblies/admin/assembly_members_controller.rb +86 -0
  19. data/app/controllers/decidim/assemblies/admin/assembly_publications_controller.rb +3 -3
  20. data/app/controllers/decidim/assemblies/admin/assembly_user_roles_controller.rb +7 -7
  21. data/app/controllers/decidim/assemblies/admin/concerns/assembly_admin.rb +20 -8
  22. data/app/controllers/decidim/assemblies/admin/participatory_space_private_users_controller.rb +1 -1
  23. data/app/controllers/decidim/assemblies/application_controller.rb +32 -0
  24. data/app/controllers/decidim/assemblies/assemblies_controller.rb +2 -2
  25. data/app/controllers/decidim/assemblies/assembly_members_controller.rb +35 -0
  26. data/app/forms/decidim/assemblies/admin/assembly_member_form.rb +51 -0
  27. data/app/models/decidim/assembly.rb +12 -1
  28. data/app/models/decidim/assembly_member.rb +24 -0
  29. data/app/permissions/decidim/assemblies/permissions.rb +230 -0
  30. data/app/presenters/decidim/admin/assembly_member_presenter.rb +24 -0
  31. data/app/presenters/decidim/assemblies/admin_log/assembly_member_presenter.rb +52 -0
  32. data/app/presenters/decidim/assemblies/admin_log/value_types/member_position_presenter.rb +21 -0
  33. data/app/presenters/decidim/assembly_member_presenter.rb +46 -0
  34. data/app/queries/decidim/assemblies/admin/assembly_members.rb +55 -0
  35. data/app/views/decidim/assemblies/_assembly.html.erb +1 -22
  36. data/app/views/decidim/assemblies/admin/assemblies/_form.html.erb +2 -0
  37. data/app/views/decidim/assemblies/admin/assemblies/edit.html.erb +2 -2
  38. data/app/views/decidim/assemblies/admin/assemblies/index.html.erb +8 -8
  39. data/app/views/decidim/assemblies/admin/assembly_members/_form.html.erb +66 -0
  40. data/app/views/decidim/assemblies/admin/assembly_members/edit.html.erb +7 -0
  41. data/app/views/decidim/assemblies/admin/assembly_members/index.html.erb +91 -0
  42. data/app/views/decidim/assemblies/admin/assembly_members/new.html.erb +7 -0
  43. data/app/views/decidim/assemblies/admin/assembly_user_roles/index.html.erb +4 -4
  44. data/app/views/decidim/assemblies/assemblies/show.html.erb +1 -2
  45. data/app/views/decidim/assemblies/assembly_members/index.html.erb +10 -0
  46. data/app/views/decidim/assemblies/pages/user_profile/_member_of.html.erb +12 -0
  47. data/app/views/decidim/assembly_members/_assembly_member.html.erb +1 -0
  48. data/app/views/layouts/decidim/_assembly_header.html.erb +10 -1
  49. data/app/views/layouts/decidim/admin/assemblies.html.erb +7 -10
  50. data/app/views/layouts/decidim/admin/assembly.html.erb +19 -11
  51. data/config/locales/ca.yml +84 -0
  52. data/config/locales/en.yml +84 -0
  53. data/config/locales/es.yml +84 -0
  54. data/config/locales/eu.yml +84 -0
  55. data/config/locales/fi.yml +84 -0
  56. data/config/locales/fr.yml +84 -0
  57. data/config/locales/gl.yml +84 -0
  58. data/config/locales/it.yml +84 -0
  59. data/config/locales/nl.yml +84 -0
  60. data/config/locales/pl.yml +90 -0
  61. data/config/locales/pt-BR.yml +84 -0
  62. data/config/locales/pt.yml +84 -0
  63. data/config/locales/ru.yml +96 -11
  64. data/config/locales/sv.yml +84 -0
  65. data/config/locales/uk.yml +91 -1
  66. data/db/migrate/20180314143822_add_assembly_members.rb +21 -0
  67. data/db/migrate/20180426162405_assembly_member_belongs_to_user.rb +7 -0
  68. data/db/migrate/20180515073049_update_assembly_members_index.rb +8 -0
  69. data/lib/decidim/assemblies/admin_engine.rb +2 -12
  70. data/lib/decidim/assemblies/engine.rb +21 -10
  71. data/lib/decidim/assemblies/participatory_space.rb +58 -2
  72. data/lib/decidim/assemblies/test/factories.rb +35 -0
  73. data/lib/decidim/assemblies/version.rb +1 -1
  74. metadata +41 -22
  75. data/app/controllers/decidim/assemblies/categories_controller.rb +0 -13
  76. data/app/models/decidim/assemblies/abilities/admin/admin_ability.rb +0 -20
  77. data/app/models/decidim/assemblies/abilities/admin/assembly_admin_ability.rb +0 -58
  78. data/app/models/decidim/assemblies/abilities/admin/assembly_collaborator_ability.rb +0 -25
  79. data/app/models/decidim/assemblies/abilities/admin/assembly_moderator_ability.rb +0 -33
  80. data/app/models/decidim/assemblies/abilities/admin/assembly_role_ability.rb +0 -65
  81. data/app/models/decidim/assemblies/abilities/admin_ability.rb +0 -16
  82. data/app/models/decidim/assemblies/abilities/assembly_admin_ability.rb +0 -15
  83. data/app/models/decidim/assemblies/abilities/assembly_collaborator_ability.rb +0 -15
  84. data/app/models/decidim/assemblies/abilities/assembly_moderator_ability.rb +0 -15
  85. data/app/models/decidim/assemblies/abilities/assembly_role_ability.rb +0 -51
  86. data/app/models/decidim/assemblies/abilities/everyone_ability.rb +0 -17
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e7ad3fefc7eaa3f3e29dbefa31a38549573debc492ab32303fb0138ae66bff80
4
- data.tar.gz: d20931298047f943d92a0b7b68ccb710bcab1b4ff00c4d0ed1b620a0fa33afc4
3
+ metadata.gz: 6791d7eb831082ab5c0b7bd445aecf6443ebf0dc01cf3155778b66448fc2f56d
4
+ data.tar.gz: 7fa22c9afb9bb26187c823324f82d87203c9e728a470e47790b0b09befd39597
5
5
  SHA512:
6
- metadata.gz: 7322b8beffd1402d43d86c794cf15a9855ba774606f772f0b9f80c678916d850f7199d210dd012d8ecca52b1dcbf1df6a23cae4c81ed49ac26b595b6b5920b48
7
- data.tar.gz: 85efe0de3c6655b697b087275cf487966edf3b65fcd1a07c89114d5f83653a927bf86c5f4fe47ab890480f382b4f0ad5071dbc9e6cf83b9afaf78a30bb89cf3e
6
+ metadata.gz: af08717e850454bcf5fd18078fc2d6ddbe1e2dfc1f2d5da84e28afbbf61cc06e4e2d6aa9a37b486d510f6f6dca5f54bdadda8dba5c73dfd32035c1cf89c80bc0
7
+ data.tar.gz: '09861ca737a3a80d48c3a3bdb6589be3ede4cf2d88f26f3661af23c53ede41049a53ae2645ad7fc9fe71f474670710c705f4e62bd9ce39f6f54a4ef1e99f95bb'
@@ -1 +1,2 @@
1
1
  //= link decidim/assemblies/admin/assemblies.js
2
+ //= link decidim/assemblies/admin/assembly_members.js
@@ -0,0 +1,37 @@
1
+ ((exports) => {
2
+ const { createFieldDependentInputs } = exports.DecidimAdmin;
3
+
4
+ const $assemblyMemberType = $("#assembly_member_existing_user");
5
+
6
+ createFieldDependentInputs({
7
+ controllerField: $assemblyMemberType,
8
+ wrapperSelector: ".user-fields",
9
+ dependentFieldsSelector: ".user-fields--full-name",
10
+ dependentInputSelector: "input",
11
+ enablingCondition: ($field) => {
12
+ return $field.val() === "false"
13
+ }
14
+ });
15
+
16
+ createFieldDependentInputs({
17
+ controllerField: $assemblyMemberType,
18
+ wrapperSelector: ".user-fields",
19
+ dependentFieldsSelector: ".user-fields--user-picker",
20
+ dependentInputSelector: "input",
21
+ enablingCondition: ($field) => {
22
+ return $field.val() === "true"
23
+ }
24
+ });
25
+
26
+ const $assemblyMemberPosition = $("#assembly_member_position");
27
+
28
+ createFieldDependentInputs({
29
+ controllerField: $assemblyMemberPosition,
30
+ wrapperSelector: ".position-fields",
31
+ dependentFieldsSelector: ".position-fields--position-other",
32
+ dependentInputSelector: "input",
33
+ enablingCondition: ($field) => {
34
+ return $field.val() === "other"
35
+ }
36
+ });
37
+ })(window);
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ module Assemblies
5
+ # This cell renders the assembly card for an instance of an Assembly
6
+ # the default size is the Medium Card (:m)
7
+ class AssemblyCell < Decidim::ViewModel
8
+ def show
9
+ cell card_size, model
10
+ end
11
+
12
+ private
13
+
14
+ def card_size
15
+ "decidim/assemblies/assembly_m"
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,15 @@
1
+ <div class="card__footer card__footer--spaces">
2
+ <div class="card__support">
3
+ <% if has_assembly_type? %>
4
+ <div class="card__support__data--left">
5
+ <div class="text-uppercase"><%= t("assemblies.show.assembly_type", scope: "decidim") %></div>
6
+ <div class="text-ellipsis"><strong><%= assembly_type %></strong></div>
7
+ </div>
8
+ <% end %>
9
+ <%= link_to(
10
+ t("layouts.decidim.assemblies.assembly.take_part"),
11
+ resource_path,
12
+ class: "card__button button button--sc secondary light small"
13
+ ) %>
14
+ </div>
15
+ </div>
@@ -0,0 +1 @@
1
+ <%= render_hook :upcoming_meeting_for_card %>
@@ -0,0 +1,50 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ module Assemblies
5
+ # This cell renders the Medium (:m) assembyl card
6
+ # for an given instance of an Assembly
7
+ class AssemblyMCell < Decidim::CardMCell
8
+ include Decidim::ViewHooksHelper
9
+
10
+ # Needed for the view hooks
11
+ def current_participatory_space
12
+ model
13
+ end
14
+
15
+ private
16
+
17
+ def has_image?
18
+ true
19
+ end
20
+
21
+ def resource_path
22
+ Decidim::Assemblies::Engine.routes.url_helpers.assembly_path(model)
23
+ end
24
+
25
+ def resource_image_path
26
+ model.hero_image.url
27
+ end
28
+
29
+ def statuses
30
+ [:creation_date, :follow]
31
+ end
32
+
33
+ def resource_icon
34
+ icon "assemblies", class: "icon--big"
35
+ end
36
+
37
+ def has_assembly_type?
38
+ model.assembly_type.present?
39
+ end
40
+
41
+ def assembly_type
42
+ if model.assembly_type == "others"
43
+ translated_attribute(model.assembly_type_other)
44
+ else
45
+ t("assembly_types.#{model.assembly_type}", scope: "decidim.assemblies").to_s
46
+ end
47
+ end
48
+ end
49
+ end
50
+ end
@@ -0,0 +1,53 @@
1
+ <div class="column">
2
+ <article class="card card--member">
3
+ <div class="card__content">
4
+ <div class="card__header collapse">
5
+ <div class="author-data author-data--big">
6
+ <div class="author-data__main">
7
+ <div class="author author--flex">
8
+ <% if has_profile? %>
9
+ <%= link_to profile_url, class: "author__avatar" do %>
10
+ <%= image_tag model.avatar_url(:big) %>
11
+ <% end %>
12
+ <div>
13
+ <div class="author__name--container">
14
+ <%= link_to profile_url, class: "author__name" do %>
15
+ <%= name %>
16
+ <% end %>
17
+ </div>
18
+ <% if nickname.present? %>
19
+ <%= link_to profile_url, class: "author__nickname" do %>
20
+ <%= nickname %>
21
+ <% end %>
22
+ <% else %>
23
+ <div class="author__nickname">&nbsp;</div>
24
+ <% end %>
25
+ </div>
26
+ <% else %>
27
+ <div class="author__avatar"><%= image_tag asset_path("decidim/default-avatar.svg") %></div>
28
+ <div>
29
+ <div class="author__name--container">
30
+ <div class="author__name">
31
+ <%= name %>
32
+ </div>
33
+ </div>
34
+ <div class="author__nickname"><%= nickname.presence || "&nbsp;" %></div>
35
+ </div>
36
+ <% end %>
37
+ </div>
38
+ </div>
39
+ </div>
40
+ </div>
41
+ <div class="card__text card--picture-offset">
42
+ <div>
43
+ <small><strong><%= position %></strong></small>
44
+ </div>
45
+ <div class="text-small">
46
+ <%= t("decidim.assembly_members.assembly_member.designated_on") %>
47
+ <strong> <%= l designation_date, format: :decidim_short %></strong>
48
+ </div>
49
+ <div class="text-small mt-s"><%= personal_information %></div>
50
+ </div>
51
+ </div>
52
+ </article>
53
+ </div>
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ module Assemblies
5
+ # This cell renders the card for an instance of an Assembly member
6
+ class AssemblyMemberCell < Decidim::ViewModel
7
+ property :designation_date
8
+ property :name
9
+ property :nickname
10
+ property :personal_information
11
+ property :position
12
+ property :profile_url
13
+
14
+ private
15
+
16
+ def has_profile?
17
+ model.profile_url.present?
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,73 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ module Assemblies
5
+ module Admin
6
+ # A command with all the business logic when creating a new assembly
7
+ # member in the system.
8
+ class CreateAssemblyMember < Rectify::Command
9
+ # Public: Initializes the command.
10
+ #
11
+ # form - A form object with the params.
12
+ # assembly - The Assembly that will hold the member
13
+ def initialize(form, current_user, assembly)
14
+ @form = form
15
+ @current_user = current_user
16
+ @assembly = assembly
17
+ end
18
+
19
+ # Executes the command. Broadcasts these events:
20
+ #
21
+ # - :ok when everything is valid.
22
+ # - :invalid if the form wasn't valid and we couldn't proceed.
23
+ #
24
+ # Returns nothing.
25
+ def call
26
+ return broadcast(:invalid) if form.invalid?
27
+
28
+ transaction do
29
+ create_assembly_member!
30
+ end
31
+
32
+ broadcast(:ok)
33
+ end
34
+
35
+ private
36
+
37
+ attr_reader :form, :assembly, :current_user
38
+
39
+ def create_assembly_member!
40
+ log_info = {
41
+ resource: {
42
+ title: form.full_name
43
+ },
44
+ participatory_space: {
45
+ title: assembly.title
46
+ }
47
+ }
48
+
49
+ @assembly_member = Decidim.traceability.create!(
50
+ Decidim::AssemblyMember,
51
+ current_user,
52
+ form.attributes.slice(
53
+ :full_name,
54
+ :gender,
55
+ :birthday,
56
+ :birthplace,
57
+ :ceased_date,
58
+ :designation_date,
59
+ :designation_mode,
60
+ :position,
61
+ :position_other,
62
+ :weight
63
+ ).merge(
64
+ assembly: assembly,
65
+ user: form.user
66
+ ),
67
+ log_info
68
+ )
69
+ end
70
+ end
71
+ end
72
+ end
73
+ end
@@ -0,0 +1,56 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ module Assemblies
5
+ module Admin
6
+ # A command with all the business logic when destroying an assembly
7
+ # member in the system.
8
+ class DestroyAssemblyMember < Rectify::Command
9
+ # Public: Initializes the command.
10
+ #
11
+ # assembly_member - the AssemblyMember to destroy
12
+ # current_user - the user performing this action
13
+ def initialize(assembly_member, current_user)
14
+ @assembly_member = assembly_member
15
+ @current_user = current_user
16
+ end
17
+
18
+ # Executes the command. Broadcasts these events:
19
+ #
20
+ # - :ok when everything is valid.
21
+ # - :invalid if the form wasn't valid and we couldn't proceed.
22
+ #
23
+ # Returns nothing.
24
+ def call
25
+ destroy_member!
26
+ broadcast(:ok)
27
+ end
28
+
29
+ private
30
+
31
+ attr_reader :assembly_member, :current_user
32
+
33
+ def destroy_member!
34
+ log_info = {
35
+ resource: {
36
+ title: assembly_member.full_name
37
+ },
38
+ participatory_space: {
39
+ title: assembly_member.assembly.title
40
+ }
41
+ }
42
+
43
+ Decidim.traceability.perform_action!(
44
+ "delete",
45
+ assembly_member,
46
+ current_user,
47
+ log_info
48
+ ) do
49
+ assembly_member.destroy!
50
+ assembly_member
51
+ end
52
+ end
53
+ end
54
+ end
55
+ end
56
+ end
@@ -0,0 +1,69 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ module Assemblies
5
+ module Admin
6
+ # A command with all the business logic when updating an assembly
7
+ # member in the system.
8
+ class UpdateAssemblyMember < Rectify::Command
9
+ # Public: Initializes the command.
10
+ #
11
+ # form - A form object with the params.
12
+ # assembly_member - The AssemblyMember to update
13
+ def initialize(form, assembly_member)
14
+ @form = form
15
+ @assembly_member = assembly_member
16
+ end
17
+
18
+ # Executes the command. Broadcasts these events:
19
+ #
20
+ # - :ok when everything is valid.
21
+ # - :invalid if the form wasn't valid and we couldn't proceed.
22
+ #
23
+ # Returns nothing.
24
+ def call
25
+ return broadcast(:invalid) if form.invalid?
26
+ return broadcast(:invalid) unless assembly_member
27
+
28
+ update_assembly_member!
29
+ broadcast(:ok)
30
+ end
31
+
32
+ private
33
+
34
+ attr_reader :form, :assembly_member
35
+
36
+ def update_assembly_member!
37
+ log_info = {
38
+ resource: {
39
+ title: assembly_member.full_name
40
+ },
41
+ participatory_space: {
42
+ title: assembly_member.assembly.title
43
+ }
44
+ }
45
+
46
+ Decidim.traceability.update!(
47
+ assembly_member,
48
+ form.current_user,
49
+ form.attributes.slice(
50
+ :full_name,
51
+ :gender,
52
+ :birthday,
53
+ :birthplace,
54
+ :ceased_date,
55
+ :designation_date,
56
+ :designation_mode,
57
+ :position,
58
+ :position_other,
59
+ :weight
60
+ ).merge(
61
+ user: form.user
62
+ ),
63
+ log_info
64
+ )
65
+ end
66
+ end
67
+ end
68
+ end
69
+ end
@@ -5,6 +5,20 @@ module Decidim
5
5
  module Admin
6
6
  # The main admin application controller for assemblies
7
7
  class ApplicationController < Decidim::Admin::ApplicationController
8
+ private
9
+
10
+ def permissions_context
11
+ super.merge(
12
+ current_participatory_space: try(:current_participatory_space)
13
+ )
14
+ end
15
+
16
+ def permission_class_chain
17
+ [
18
+ Decidim::Assemblies::Permissions,
19
+ Decidim::Admin::Permissions
20
+ ]
21
+ end
8
22
  end
9
23
  end
10
24
  end