decidim-assemblies 0.11.2 → 0.12.0.pre

Sign up to get free protection for your applications and to get access to all the features.
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