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
@@ -5,23 +5,23 @@ module Decidim
5
5
  module Admin
6
6
  # Controller that allows managing assemblies.
7
7
  #
8
- class AssembliesController < Decidim::Admin::ApplicationController
8
+ class AssembliesController < Decidim::Assemblies::Admin::ApplicationController
9
9
  helper_method :current_assembly, :parent_assembly, :parent_assemblies, :current_participatory_space
10
10
  layout "decidim/admin/assemblies"
11
11
 
12
12
  def index
13
- authorize! :index, Decidim::Assembly
13
+ enforce_permission_to :read, :assembly_list
14
14
  @assemblies = collection
15
15
  end
16
16
 
17
17
  def new
18
- authorize! :new, Decidim::Assembly
18
+ enforce_permission_to :create, :assembly
19
19
  @form = form(AssemblyForm).instance
20
20
  @form.parent_id = params[:parent_id]
21
21
  end
22
22
 
23
23
  def create
24
- authorize! :new, Decidim::Assembly
24
+ enforce_permission_to :create, :assembly
25
25
  @form = form(AssemblyForm).from_params(params)
26
26
 
27
27
  CreateAssembly.call(@form) do
@@ -38,13 +38,13 @@ module Decidim
38
38
  end
39
39
 
40
40
  def edit
41
- authorize! :update, current_assembly
41
+ enforce_permission_to :update, :assembly, assembly: current_assembly
42
42
  @form = form(AssemblyForm).from_model(current_assembly)
43
43
  render layout: "decidim/admin/assembly"
44
44
  end
45
45
 
46
46
  def update
47
- authorize! :update, current_assembly
47
+ enforce_permission_to :update, :assembly, assembly: current_assembly
48
48
  @form = form(AssemblyForm).from_params(
49
49
  assembly_params,
50
50
  assembly_id: current_assembly.id
@@ -64,7 +64,7 @@ module Decidim
64
64
  end
65
65
 
66
66
  def destroy
67
- authorize! :destroy, current_assembly
67
+ enforce_permission_to :destroy, :assembly, assembly: current_assembly
68
68
  current_assembly.destroy!
69
69
 
70
70
  flash[:notice] = I18n.t("assemblies.destroy.success", scope: "decidim.admin")
@@ -73,7 +73,7 @@ module Decidim
73
73
  end
74
74
 
75
75
  def copy
76
- authorize! :create, Decidim::Assembly
76
+ enforce_permission_to :create, :assembly
77
77
  end
78
78
 
79
79
  private
@@ -100,10 +100,6 @@ module Decidim
100
100
  @collection ||= OrganizationAssemblies.new(current_user.organization).query.where(parent_id: parent_id)
101
101
  end
102
102
 
103
- def ability_context
104
- super.merge(current_participatory_space: current_assembly)
105
- end
106
-
107
103
  def assembly_params
108
104
  {
109
105
  id: params[:slug],
@@ -5,7 +5,7 @@ module Decidim
5
5
  module Admin
6
6
  # Controller that allows managing all the attachment collections for an assembly.
7
7
  #
8
- class AssemblyAttachmentCollectionsController < Decidim::Admin::ApplicationController
8
+ class AssemblyAttachmentCollectionsController < Decidim::Assemblies::Admin::ApplicationController
9
9
  include Concerns::AssemblyAdmin
10
10
  include Decidim::Admin::Concerns::HasAttachmentCollections
11
11
 
@@ -6,7 +6,7 @@ module Decidim
6
6
  # Controller that allows managing all the attachments for a participatory
7
7
  # assembly.
8
8
  #
9
- class AssemblyAttachmentsController < Decidim::Admin::ApplicationController
9
+ class AssemblyAttachmentsController < Decidim::Assemblies::Admin::ApplicationController
10
10
  include Concerns::AssemblyAdmin
11
11
  include Decidim::Admin::Concerns::HasAttachments
12
12
 
@@ -5,16 +5,16 @@ module Decidim
5
5
  module Admin
6
6
  # Controller that allows managing assemblies.
7
7
  #
8
- class AssemblyCopiesController < Decidim::Admin::ApplicationController
8
+ class AssemblyCopiesController < Decidim::Assemblies::Admin::ApplicationController
9
9
  include Concerns::AssemblyAdmin
10
10
 
11
11
  def new
12
- authorize! :new, Decidim::Assembly
12
+ enforce_permission_to :create, :assembly
13
13
  @form = form(AssemblyCopyForm).from_model(current_assembly)
14
14
  end
15
15
 
16
16
  def create
17
- authorize! :create, Decidim::Assembly
17
+ enforce_permission_to :create, :assembly
18
18
  @form = form(AssemblyCopyForm).from_params(params)
19
19
 
20
20
  CopyAssembly.call(@form, current_assembly) do
@@ -0,0 +1,86 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ module Assemblies
5
+ module Admin
6
+ # Controller that allows managing assembly members.
7
+ #
8
+ class AssemblyMembersController < Decidim::Assemblies::Admin::ApplicationController
9
+ include Concerns::AssemblyAdmin
10
+
11
+ def index
12
+ enforce_permission_to :index, :assembly_member
13
+
14
+ @query = params[:q]
15
+ @status = params[:status]
16
+
17
+ @assembly_members = Decidim::Assemblies::Admin::AssemblyMembers.for(collection, @query, @status).page(params[:page]).per(15)
18
+ end
19
+
20
+ def new
21
+ enforce_permission_to :create, :assembly_member
22
+ @form = form(AssemblyMemberForm).instance
23
+ end
24
+
25
+ def create
26
+ enforce_permission_to :create, :assembly_member
27
+ @form = form(AssemblyMemberForm).from_params(params)
28
+
29
+ CreateAssemblyMember.call(@form, current_user, current_assembly) do
30
+ on(:ok) do
31
+ flash[:notice] = I18n.t("assembly_members.create.success", scope: "decidim.admin")
32
+ redirect_to assembly_members_path(current_assembly)
33
+ end
34
+
35
+ on(:invalid) do
36
+ flash[:alert] = I18n.t("assembly_members.create.error", scope: "decidim.admin")
37
+ render :new
38
+ end
39
+ end
40
+ end
41
+
42
+ def edit
43
+ @assembly_member = collection.find(params[:id])
44
+ enforce_permission_to :update, :assembly_member, member: @assembly_member
45
+ @form = form(AssemblyMemberForm).from_model(@assembly_member)
46
+ end
47
+
48
+ def update
49
+ @assembly_member = collection.find(params[:id])
50
+ enforce_permission_to :update, :assembly_member, member: @assembly_member
51
+ @form = form(AssemblyMemberForm).from_params(params)
52
+
53
+ UpdateAssemblyMember.call(@form, @assembly_member) do
54
+ on(:ok) do
55
+ flash[:notice] = I18n.t("assembly_members.update.success", scope: "decidim.admin")
56
+ redirect_to assembly_members_path(current_assembly)
57
+ end
58
+
59
+ on(:invalid) do
60
+ flash.now[:alert] = I18n.t("assembly_members.update.error", scope: "decidim.admin")
61
+ render :edit
62
+ end
63
+ end
64
+ end
65
+
66
+ def destroy
67
+ @assembly_member = collection.find(params[:id])
68
+ enforce_permission_to :destroy, :assembly_member, member: @assembly_member
69
+
70
+ DestroyAssemblyMember.call(@assembly_member, current_user) do
71
+ on(:ok) do
72
+ flash[:notice] = I18n.t("assembly_members.destroy.success", scope: "decidim.admin")
73
+ redirect_to assembly_members_path(current_assembly)
74
+ end
75
+ end
76
+ end
77
+
78
+ private
79
+
80
+ def collection
81
+ @collection ||= Decidim::AssemblyMember.where(assembly: current_assembly)
82
+ end
83
+ end
84
+ end
85
+ end
86
+ end
@@ -5,11 +5,11 @@ module Decidim
5
5
  module Admin
6
6
  # Controller that allows managing assembly publications.
7
7
  #
8
- class AssemblyPublicationsController < Decidim::Admin::ApplicationController
8
+ class AssemblyPublicationsController < Decidim::Assemblies::Admin::ApplicationController
9
9
  include Concerns::AssemblyAdmin
10
10
 
11
11
  def create
12
- authorize! :publish, current_assembly
12
+ enforce_permission_to :publish, :assembly, assembly: current_assembly
13
13
 
14
14
  PublishAssembly.call(current_assembly, current_user) do
15
15
  on(:ok) do
@@ -25,7 +25,7 @@ module Decidim
25
25
  end
26
26
 
27
27
  def destroy
28
- authorize! :publish, current_assembly
28
+ enforce_permission_to :publish, :assembly, assembly: current_assembly
29
29
 
30
30
  UnpublishAssembly.call(current_assembly, current_user) do
31
31
  on(:ok) do
@@ -9,17 +9,17 @@ module Decidim
9
9
  include Concerns::AssemblyAdmin
10
10
 
11
11
  def index
12
- authorize! :read, Decidim::AssemblyUserRole
12
+ enforce_permission_to :index, :assembly_user_role
13
13
  @assembly_user_roles = collection
14
14
  end
15
15
 
16
16
  def new
17
- authorize! :create, Decidim::AssemblyUserRole
17
+ enforce_permission_to :create, :assembly_user_role
18
18
  @form = form(AssemblyUserRoleForm).instance
19
19
  end
20
20
 
21
21
  def create
22
- authorize! :create, Decidim::AssemblyUserRole
22
+ enforce_permission_to :create, :assembly_user_role
23
23
  @form = form(AssemblyUserRoleForm).from_params(params)
24
24
 
25
25
  CreateAssemblyAdmin.call(@form, current_user, current_assembly) do
@@ -36,13 +36,13 @@ module Decidim
36
36
 
37
37
  def edit
38
38
  @user_role = collection.find(params[:id])
39
- authorize! :update, @user_role
39
+ enforce_permission_to :update, :assembly_user_role, user_role: @user_role
40
40
  @form = form(AssemblyUserRoleForm).from_model(@user_role.user)
41
41
  end
42
42
 
43
43
  def update
44
44
  @user_role = collection.find(params[:id])
45
- authorize! :update, @user_role
45
+ enforce_permission_to :update, :assembly_user_role, user_role: @user_role
46
46
  @form = form(AssemblyUserRoleForm).from_params(params)
47
47
 
48
48
  UpdateAssemblyAdmin.call(@form, @user_role) do
@@ -60,7 +60,7 @@ module Decidim
60
60
 
61
61
  def destroy
62
62
  @assembly_user_role = collection.find(params[:id])
63
- authorize! :destroy, @assembly_user_role
63
+ enforce_permission_to :destroy, :assembly_user_role, user_role: @assembly_user_role
64
64
 
65
65
  DestroyAssemblyAdmin.call(@assembly_user_role, current_user) do
66
66
  on(:ok) do
@@ -72,7 +72,7 @@ module Decidim
72
72
 
73
73
  def resend_invitation
74
74
  @user_role = collection.find(params[:id])
75
- authorize! :invite, @user_role
75
+ enforce_permission_to :invite, :assembly_user_role, user_role: @user_role
76
76
 
77
77
  InviteUserAgain.call(@user_role.user, "invite_admin") do
78
78
  on(:ok) do
@@ -17,17 +17,29 @@ module Decidim
17
17
  participatory_space_admin_layout
18
18
 
19
19
  helper_method :current_assembly
20
+
21
+ def current_assembly
22
+ @current_assembly ||= organization_assemblies.find_by!(
23
+ slug: params[:assembly_slug] || params[:slug]
24
+ )
25
+ end
26
+
20
27
  alias_method :current_participatory_space, :current_assembly
21
- end
22
28
 
23
- def current_assembly
24
- @current_assembly ||= organization_assemblies.find_by!(
25
- slug: params[:assembly_slug] || params[:slug]
26
- )
27
- end
29
+ def organization_assemblies
30
+ @organization_assemblies ||= OrganizationAssemblies.new(current_organization).query
31
+ end
32
+
33
+ def permissions_context
34
+ super.merge(current_participatory_space: current_participatory_space)
35
+ end
28
36
 
29
- def organization_assemblies
30
- @organization_assemblies ||= OrganizationAssemblies.new(current_organization).query
37
+ def permission_class_chain
38
+ [
39
+ Decidim::Assemblies::Permissions,
40
+ Decidim::Admin::Permissions
41
+ ]
42
+ end
31
43
  end
32
44
  end
33
45
  end
@@ -5,7 +5,7 @@ module Decidim
5
5
  module Admin
6
6
  # Controller that allows managing assembly private users
7
7
  # on assembies
8
- class ParticipatorySpacePrivateUsersController < Decidim::Admin::ApplicationController
8
+ class ParticipatorySpacePrivateUsersController < Decidim::Assemblies::Admin::ApplicationController
9
9
  include Concerns::AssemblyAdmin
10
10
  include Decidim::Admin::Concerns::HasPrivateUsers
11
11
 
@@ -0,0 +1,32 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ module Assemblies
5
+ # The main admin application controller for assemblies
6
+ class ApplicationController < Decidim::ApplicationController
7
+ helper Decidim::ApplicationHelper
8
+ helper Decidim::Assemblies::AssembliesHelper
9
+ include NeedsPermission
10
+
11
+ private
12
+
13
+ def permissions_context
14
+ super.merge(
15
+ current_participatory_space: try(:current_participatory_space)
16
+ )
17
+ end
18
+
19
+ def permission_class_chain
20
+ [
21
+ Decidim::Assemblies::Permissions,
22
+ Decidim::Admin::Permissions,
23
+ Decidim::Permissions
24
+ ]
25
+ end
26
+
27
+ def permission_scope
28
+ :public
29
+ end
30
+ end
31
+ end
32
+ end
@@ -4,7 +4,7 @@ module Decidim
4
4
  module Assemblies
5
5
  # A controller that holds the logic to show Assemblies in a
6
6
  # public layout.
7
- class AssembliesController < Decidim::ApplicationController
7
+ class AssembliesController < Decidim::Assemblies::ApplicationController
8
8
  include ParticipatorySpaceContext
9
9
  participatory_space_layout only: :show
10
10
 
@@ -19,7 +19,7 @@ module Decidim
19
19
  def index
20
20
  redirect_to "/404" if published_assemblies.none?
21
21
 
22
- authorize! :read, Assembly
22
+ enforce_permission_to :list, :assembly
23
23
  end
24
24
 
25
25
  def show
@@ -0,0 +1,35 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ module Assemblies
5
+ class AssemblyMembersController < Decidim::Assemblies::ApplicationController
6
+ include ParticipatorySpaceContext
7
+ participatory_space_layout only: :index
8
+
9
+ helper_method :collection
10
+
11
+ def index
12
+ raise ActionController::RoutingError, "No members for this assembly" if members.none?
13
+
14
+ enforce_permission_to :list, :members
15
+ redirect_to decidim_assemblies.assembly_path(current_participatory_space) unless current_user_can_visit_space?
16
+ end
17
+
18
+ private
19
+
20
+ def members
21
+ @members ||= current_participatory_space.members.not_ceased
22
+ end
23
+
24
+ alias collection members
25
+
26
+ def current_participatory_space
27
+ return unless params[:assembly_slug]
28
+
29
+ @current_participatory_space ||= OrganizationAssemblies.new(current_organization).query.where(slug: params[:assembly_slug]).or(
30
+ OrganizationAssemblies.new(current_organization).query.where(id: params[:assembly_slug])
31
+ ).first!
32
+ end
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,51 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ module Assemblies
5
+ module Admin
6
+ # A form object used to create assembly members from the admin dashboard.
7
+ #
8
+ class AssemblyMemberForm < Form
9
+ mimic :assembly_member
10
+
11
+ attribute :weight, Integer, default: 0
12
+ attribute :full_name, String
13
+ attribute :gender, String
14
+ attribute :birthday, Decidim::Attributes::TimeWithZone
15
+ attribute :birthplace, String
16
+ attribute :ceased_date, Decidim::Attributes::TimeWithZone
17
+ attribute :designation_date, Decidim::Attributes::TimeWithZone
18
+ attribute :designation_mode, String
19
+ attribute :position, String
20
+ attribute :position_other, String
21
+ attribute :user_id, Integer
22
+ attribute :existing_user, Boolean, default: false
23
+
24
+ validates :designation_date, presence: true
25
+ validates :full_name, presence: true, unless: proc { |object| object.existing_user }
26
+ validates :position, inclusion: { in: Decidim::AssemblyMember::POSITIONS }
27
+ validates :position_other, presence: true, if: ->(form) { form.position == "other" }
28
+ validates :ceased_date, date: { after: :designation_date, allow_blank: true }
29
+ validates :user, presence: true, if: proc { |object| object.existing_user }
30
+
31
+ def map_model(model)
32
+ self.user_id = model.decidim_user_id
33
+ self.existing_user = user_id.present?
34
+ end
35
+
36
+ def user
37
+ @user ||= current_organization.users.find_by(id: user_id)
38
+ end
39
+
40
+ def positions_for_select
41
+ Decidim::AssemblyMember::POSITIONS.map do |position|
42
+ [
43
+ I18n.t(position, scope: "decidim.admin.models.assembly_member.positions"),
44
+ position
45
+ ]
46
+ end
47
+ end
48
+ end
49
+ end
50
+ end
51
+ end