decidim-admin 0.0.5 → 0.0.6

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of decidim-admin might be problematic. Click here for more details.

Files changed (67) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +1 -1
  3. data/app/assets/stylesheets/decidim/admin/_sidebar.scss +30 -1
  4. data/app/assets/stylesheets/decidim/admin/_tables.scss +3 -0
  5. data/app/assets/stylesheets/decidim/admin/application.scss +3 -0
  6. data/app/commands/decidim/admin/create_participatory_process.rb +4 -1
  7. data/app/commands/decidim/admin/create_participatory_process_admin.rb +26 -7
  8. data/app/commands/decidim/admin/create_participatory_process_group.rb +54 -0
  9. data/app/commands/decidim/admin/create_participatory_process_step.rb +0 -1
  10. data/app/commands/decidim/admin/destroy_participatory_process_step.rb +3 -1
  11. data/app/commands/decidim/admin/hide_resource.rb +37 -0
  12. data/app/commands/decidim/admin/reorder_participatory_process_steps.rb +1 -0
  13. data/app/commands/decidim/admin/unreport_resource.rb +33 -0
  14. data/app/commands/decidim/admin/update_participatory_process.rb +4 -2
  15. data/app/commands/decidim/admin/update_participatory_process_group.rb +57 -0
  16. data/app/commands/decidim/admin/update_participatory_process_step.rb +1 -2
  17. data/app/controllers/decidim/admin/application_controller.rb +4 -0
  18. data/app/controllers/decidim/admin/categories_controller.rb +1 -1
  19. data/app/controllers/decidim/admin/feature_permissions_controller.rb +2 -2
  20. data/{lib → app/controllers}/decidim/admin/features/base_controller.rb +0 -0
  21. data/app/controllers/decidim/admin/moderations_controller.rb +64 -0
  22. data/app/controllers/decidim/admin/newsletters_controller.rb +1 -1
  23. data/app/controllers/decidim/admin/participatory_process_groups_controller.rb +86 -0
  24. data/app/controllers/decidim/admin/participatory_process_publications_controller.rb +1 -1
  25. data/app/controllers/decidim/admin/participatory_process_step_activations_controller.rb +1 -1
  26. data/app/controllers/decidim/admin/participatory_process_step_ordering_controller.rb +1 -1
  27. data/app/controllers/decidim/admin/participatory_process_steps_controller.rb +1 -1
  28. data/app/controllers/decidim/admin/participatory_process_user_roles_controller.rb +3 -3
  29. data/app/controllers/decidim/admin/participatory_processes_controller.rb +3 -2
  30. data/app/forms/decidim/admin/organization_form.rb +1 -0
  31. data/app/forms/decidim/admin/participatory_process_form.rb +12 -1
  32. data/app/forms/decidim/admin/participatory_process_group_form.rb +23 -0
  33. data/app/forms/decidim/admin/participatory_process_step_form.rb +0 -1
  34. data/app/forms/decidim/admin/participatory_process_user_role_form.rb +5 -1
  35. data/app/helpers/decidim/admin/application_helper.rb +1 -0
  36. data/app/helpers/decidim/admin/process_groups_for_select_helper.rb +20 -0
  37. data/app/helpers/decidim/admin/processes_for_select_helper.rb +22 -0
  38. data/app/models/decidim/admin/abilities/admin_user.rb +2 -0
  39. data/app/models/decidim/admin/abilities/participatory_process_admin.rb +4 -0
  40. data/app/models/decidim/admin/participatory_process_user_role.rb +1 -1
  41. data/app/queries/decidim/admin/process_admins.rb +43 -0
  42. data/app/views/decidim/admin/moderations/index.html.erb +65 -0
  43. data/app/views/decidim/admin/organization/_form.html.erb +4 -0
  44. data/app/views/decidim/admin/participatory_process_groups/_form.html.erb +17 -0
  45. data/app/views/decidim/admin/participatory_process_groups/edit.html.erb +13 -0
  46. data/app/views/decidim/admin/participatory_process_groups/index.html.erb +38 -0
  47. data/app/views/decidim/admin/participatory_process_groups/new.html.erb +11 -0
  48. data/app/views/decidim/admin/participatory_process_groups/show.html.erb +23 -0
  49. data/app/views/decidim/admin/participatory_process_steps/_form.html.erb +0 -4
  50. data/app/views/decidim/admin/participatory_process_steps/show.html.erb +4 -5
  51. data/app/views/decidim/admin/participatory_process_user_roles/index.html.erb +27 -24
  52. data/app/views/decidim/admin/participatory_processes/_form.html.erb +10 -1
  53. data/app/views/decidim/admin/participatory_processes/show.html.erb +15 -1
  54. data/app/views/layouts/decidim/admin/_header.html.erb +1 -0
  55. data/app/views/layouts/decidim/admin/_language_chooser.html.erb +14 -0
  56. data/app/views/layouts/decidim/admin/_sidebar.html.erb +2 -0
  57. data/app/views/layouts/decidim/admin/participatory_process.html.erb +5 -0
  58. data/config/i18n-tasks.yml +3 -1
  59. data/config/locales/ca.yml +83 -3
  60. data/config/locales/en.yml +81 -1
  61. data/config/locales/es.yml +81 -1
  62. data/config/locales/eu.yml +340 -1
  63. data/config/locales/fi.yml +464 -0
  64. data/config/routes.rb +8 -0
  65. data/db/seeds.rb +1 -1
  66. data/lib/decidim/admin/engine.rb +1 -0
  67. metadata +27 -15
@@ -0,0 +1,64 @@
1
+ # frozen_string_literal: true
2
+ module Decidim
3
+ module Admin
4
+ # This controller allows admins to manage moderations in a participatory process.
5
+ class ModerationsController < Admin::ApplicationController
6
+ include Concerns::ParticipatoryProcessAdmin
7
+
8
+ helper_method :moderations
9
+
10
+ def index
11
+ authorize! :read, Decidim::Moderation
12
+ end
13
+
14
+ def unreport
15
+ authorize! :unreport, reportable
16
+
17
+ Admin::UnreportResource.call(reportable) do
18
+ on(:ok) do
19
+ flash[:notice] = I18n.t("reportable.unreport.success", scope: "decidim.moderations.admin")
20
+ redirect_to decidim_admin.participatory_process_moderations_path
21
+ end
22
+
23
+ on(:invalid) do
24
+ flash.now[:alert] = I18n.t("reportable.unreport.invalid", scope: "decidim.moderations.admin")
25
+ redirect_to decidim_admin.participatory_process_moderations_path
26
+ end
27
+ end
28
+ end
29
+
30
+ def hide
31
+ authorize! :hide, reportable
32
+
33
+ Admin::HideResource.call(reportable) do
34
+ on(:ok) do
35
+ flash[:notice] = I18n.t("reportable.hide.success", scope: "decidim.moderations.admin")
36
+ redirect_to decidim_admin.participatory_process_moderations_path
37
+ end
38
+
39
+ on(:invalid) do
40
+ flash.now[:alert] = I18n.t("reportable.hide.invalid", scope: "decidim.moderations.admin")
41
+ redirect_to decidim_admin.participatory_process_moderations_path
42
+ end
43
+ end
44
+ end
45
+
46
+ private
47
+
48
+ def moderations
49
+ @moderations ||= begin
50
+ moderations = Decidim::Moderation.where(participatory_process: participatory_process)
51
+ moderations = if params[:hidden]
52
+ moderations.where.not(hidden_at: nil)
53
+ else
54
+ moderations.where(hidden_at: nil)
55
+ end
56
+ end
57
+ end
58
+
59
+ def reportable
60
+ @reportable ||= Decidim::Moderation.where(participatory_process: participatory_process).find(params[:id]).reportable
61
+ end
62
+ end
63
+ end
64
+ end
@@ -2,7 +2,7 @@
2
2
 
3
3
  module Decidim
4
4
  module Admin
5
- # Controller that allows managing user groups at the admin panel.
5
+ # Controller that allows managing newsletters.
6
6
  #
7
7
  class NewslettersController < ApplicationController
8
8
  def index
@@ -0,0 +1,86 @@
1
+ # frozen_string_literal: true
2
+ require_dependency "decidim/admin/application_controller"
3
+
4
+ module Decidim
5
+ module Admin
6
+ # Controller that allows managing participatory process groups.
7
+ #
8
+ class ParticipatoryProcessGroupsController < ApplicationController
9
+ helper_method :collection, :participatory_process_group
10
+
11
+ def index
12
+ authorize! :read, ParticipatoryProcessGroup
13
+ end
14
+
15
+ def show
16
+ authorize! :read, participatory_process_group
17
+ end
18
+
19
+ def new
20
+ authorize! :new, Decidim::ParticipatoryProcessGroup
21
+ @form = form(ParticipatoryProcessGroupForm).instance
22
+ end
23
+
24
+ def create
25
+ authorize! :new, Decidim::ParticipatoryProcessGroup
26
+ @form = form(ParticipatoryProcessGroupForm).from_params(params)
27
+
28
+ CreateParticipatoryProcessGroup.call(@form) do
29
+ on(:ok) do |participatory_process_group|
30
+ flash[:notice] = I18n.t("participatory_processes_group.create.success", scope: "decidim.admin")
31
+ redirect_to participatory_process_group_path(participatory_process_group)
32
+ end
33
+
34
+ on(:invalid) do
35
+ flash.now[:alert] = I18n.t("participatory_processes_group.create.error", scope: "decidim.admin")
36
+ render :new
37
+ end
38
+ end
39
+ end
40
+
41
+ def edit
42
+ @participatory_process_group = collection.find(params[:id])
43
+ authorize! :update, @participatory_process_group
44
+ @form = form(ParticipatoryProcessGroupForm).from_model(@participatory_process_group)
45
+ end
46
+
47
+ def update
48
+ @participatory_process_group = collection.find(params[:id])
49
+ authorize! :update, @participatory_process_group
50
+ @form = form(ParticipatoryProcessGroupForm).from_params(params)
51
+
52
+ UpdateParticipatoryProcessGroup.call(@participatory_process_group, @form) do
53
+ on(:ok) do |participatory_process_group|
54
+ flash[:notice] = I18n.t("participatory_process_groups.update.success", scope: "decidim.admin")
55
+ redirect_to participatory_process_group_path(participatory_process_group)
56
+ end
57
+
58
+ on(:invalid) do
59
+ flash.now[:alert] = I18n.t("participatory_process_groups.update.error", scope: "decidim.admin")
60
+ render :edit
61
+ end
62
+ end
63
+ end
64
+
65
+ def destroy
66
+ @participatory_process_group = collection.find(params[:id])
67
+ authorize! :destroy, @participatory_process_group
68
+ @participatory_process_group.destroy!
69
+
70
+ flash[:notice] = I18n.t("participatory_process_groups.destroy.success", scope: "decidim.admin")
71
+
72
+ redirect_to participatory_process_groups_path
73
+ end
74
+
75
+ private
76
+
77
+ def participatory_process_group
78
+ @participatory_process_group ||= Decidim::ParticipatoryProcessGroup.find(params[:id])
79
+ end
80
+
81
+ def collection
82
+ @collection ||= current_user.organization.participatory_process_groups
83
+ end
84
+ end
85
+ end
86
+ end
@@ -3,7 +3,7 @@ require_dependency "decidim/admin/application_controller"
3
3
 
4
4
  module Decidim
5
5
  module Admin
6
- # Controller that allows managing all the Admins.
6
+ # Controller that allows managing participatory process publications.
7
7
  #
8
8
  class ParticipatoryProcessPublicationsController < ApplicationController
9
9
  include Concerns::ParticipatoryProcessAdmin
@@ -3,7 +3,7 @@ require_dependency "decidim/admin/application_controller"
3
3
 
4
4
  module Decidim
5
5
  module Admin
6
- # Controller that allows managing all the Admins.
6
+ # Controller that allows managing participatory process step activations.
7
7
  #
8
8
  class ParticipatoryProcessStepActivationsController < ApplicationController
9
9
  include Concerns::ParticipatoryProcessAdmin
@@ -3,7 +3,7 @@ require_dependency "decidim/admin/application_controller"
3
3
 
4
4
  module Decidim
5
5
  module Admin
6
- # Controller that allows managing all the Admins.
6
+ # Controller that allows managing participatory process step ordering.
7
7
  #
8
8
  class ParticipatoryProcessStepOrderingController < ApplicationController
9
9
  include Concerns::ParticipatoryProcessAdmin
@@ -3,7 +3,7 @@ require_dependency "decidim/admin/application_controller"
3
3
 
4
4
  module Decidim
5
5
  module Admin
6
- # Controller that allows managing all the Admins.
6
+ # Controller that allows managing participatory process steps.
7
7
  #
8
8
  class ParticipatoryProcessStepsController < ApplicationController
9
9
  include Concerns::ParticipatoryProcessAdmin
@@ -3,7 +3,7 @@ require_dependency "decidim/admin/application_controller"
3
3
 
4
4
  module Decidim
5
5
  module Admin
6
- # Controller that allows managing all the Admins.
6
+ # Controller that allows managing participatory process user roles.
7
7
  #
8
8
  class ParticipatoryProcessUserRolesController < ApplicationController
9
9
  include Concerns::ParticipatoryProcessAdmin
@@ -18,13 +18,13 @@ module Decidim
18
18
  authorize! :create, Decidim::Admin::ParticipatoryProcessUserRole
19
19
  @form = form(ParticipatoryProcessUserRoleForm).from_params(params)
20
20
 
21
- CreateParticipatoryProcessAdmin.call(@form, participatory_process) do
21
+ CreateParticipatoryProcessAdmin.call(@form, current_user, participatory_process) do
22
22
  on(:ok) do
23
23
  flash[:notice] = I18n.t("participatory_process_user_roles.create.success", scope: "decidim.admin")
24
24
  end
25
25
 
26
26
  on(:invalid) do
27
- flash.now[:alert] = I18n.t("participatory_process_user_roles.create.error", scope: "decidim.admin")
27
+ flash[:alert] = I18n.t("participatory_process_user_roles.create.error", scope: "decidim.admin")
28
28
  end
29
29
  redirect_to participatory_process_user_roles_path(participatory_process)
30
30
  end
@@ -3,11 +3,12 @@ require_dependency "decidim/admin/application_controller"
3
3
 
4
4
  module Decidim
5
5
  module Admin
6
- # Controller that allows managing all the Admins.
6
+ # Controller that allows managing participatory processes.
7
7
  #
8
8
  class ParticipatoryProcessesController < ApplicationController
9
9
  helper_method :participatory_process
10
- layout "decidim/admin/participatory_process", only: [:show, :edit]
10
+ helper Decidim::OrganizationScopesHelper
11
+ layout "decidim/admin/participatory_process", only: [:show, :edit, :update]
11
12
 
12
13
  def index
13
14
  authorize! :index, Decidim::ParticipatoryProcess
@@ -10,6 +10,7 @@ module Decidim
10
10
  mimic :organization
11
11
 
12
12
  attribute :name, String
13
+ attribute :reference_prefix, String
13
14
  attribute :twitter_handler, String
14
15
  attribute :facebook_handler, String
15
16
  attribute :instagram_handler, String
@@ -11,7 +11,7 @@ module Decidim
11
11
  translatable_attribute :subtitle, String
12
12
  translatable_attribute :description, String
13
13
  translatable_attribute :short_description, String
14
- translatable_attribute :scope, String
14
+ translatable_attribute :meta_scope, String
15
15
  translatable_attribute :developer_group, String
16
16
  translatable_attribute :local_area, String
17
17
  translatable_attribute :target, String
@@ -24,17 +24,28 @@ module Decidim
24
24
  attribute :slug, String
25
25
  attribute :hashtag, String
26
26
  attribute :promoted, Boolean
27
+ attribute :scope_id, Integer
27
28
  attribute :hero_image
28
29
  attribute :banner_image
30
+ attribute :participatory_process_group_id, Integer
29
31
 
30
32
  validates :slug, presence: true
31
33
  validates :title, :subtitle, :description, :short_description, translatable_presence: true
34
+ validates :scope, presence: true, if: proc { |object| object.scope_id.present? }
32
35
 
33
36
  validate :slug, :slug_uniqueness
34
37
 
35
38
  validates :hero_image, file_size: { less_than_or_equal_to: ->(_record) { Decidim.maximum_attachment_size } }, file_content_type: { allow: ["image/jpeg", "image/png"] }
36
39
  validates :banner_image, file_size: { less_than_or_equal_to: ->(_record) { Decidim.maximum_attachment_size } }, file_content_type: { allow: ["image/jpeg", "image/png"] }
37
40
 
41
+ def scope
42
+ @scope ||= current_organization.scopes.where(id: scope_id).first
43
+ end
44
+
45
+ def participatory_process_group
46
+ Decidim::ParticipatoryProcessGroup.where(id: participatory_process_group_id).first
47
+ end
48
+
38
49
  private
39
50
 
40
51
  def slug_uniqueness
@@ -0,0 +1,23 @@
1
+ # frozen_string_literal: true
2
+ module Decidim
3
+ module Admin
4
+ # A form object used to create participatory process groups from the admin
5
+ # dashboard.
6
+ #
7
+ class ParticipatoryProcessGroupForm < Form
8
+ include TranslatableAttributes
9
+
10
+ translatable_attribute :name, String
11
+ translatable_attribute :description, String
12
+ attribute :participatory_process_ids, Array[Integer]
13
+
14
+ mimic :participatory_process_group
15
+
16
+ attribute :hero_image
17
+
18
+ validates :name, :description, translatable_presence: true
19
+
20
+ validates :hero_image, file_size: { less_than_or_equal_to: ->(_record) { Decidim.maximum_attachment_size } }, file_content_type: { allow: ["image/jpeg", "image/png"] }
21
+ end
22
+ end
23
+ end
@@ -9,7 +9,6 @@ module Decidim
9
9
 
10
10
  translatable_attribute :title, String
11
11
  translatable_attribute :description, String
12
- translatable_attribute :short_description, String
13
12
 
14
13
  mimic :participatory_process_step
15
14
 
@@ -7,9 +7,13 @@ module Decidim
7
7
  class ParticipatoryProcessUserRoleForm < Form
8
8
  mimic :participatory_process_user_role
9
9
 
10
+ attribute :name, String
10
11
  attribute :email, String
12
+ attribute :role, String
11
13
 
12
- validates :email, presence: true
14
+ validates :email, :role, presence: true
15
+ validates :name, presence: true
16
+ validates :role, inclusion: { in: ParticipatoryProcessUserRole::ROLES }
13
17
  end
14
18
  end
15
19
  end
@@ -9,6 +9,7 @@ module Decidim
9
9
  include Decidim::HumanizeBooleansHelper
10
10
  include Decidim::AriaSelectedLinkToHelper
11
11
  include Decidim::MetaTagsHelper
12
+ include Decidim::MapHelper
12
13
 
13
14
  def title
14
15
  current_organization.name
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+ module Decidim
3
+ module Admin
4
+ # This class contains helpers needed to format ParticipatoryProcessGroups
5
+ # in order to use them in select forms.
6
+ #
7
+ module ProcessGroupsForSelectHelper
8
+ # Public: A formatted collection of ParticipatoryProcessGroups to be used
9
+ # in forms.
10
+ #
11
+ # Returns an Array.
12
+ def process_groups_for_select
13
+ @process_groups_for_select ||=
14
+ current_organization.participatory_process_groups.map do |group|
15
+ [translated_attribute(group.name), group.id]
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+ module Decidim
3
+ module Admin
4
+ # This class contains helpers needed to format ParticipatoryProcesses
5
+ # in order to use them in select forms.
6
+ #
7
+ module ProcessesForSelectHelper
8
+ # Public: A formatted collection of ParticipatoryProcesses to be used
9
+ # in forms.
10
+ #
11
+ # Returns an Array.
12
+ def processes_for_select
13
+ @processes_for_select ||= current_organization.participatory_processes.map do |process|
14
+ [
15
+ translated_attribute(process.title),
16
+ process.id
17
+ ]
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
@@ -11,6 +11,7 @@ module Decidim
11
11
  return unless user && user.role?(:admin)
12
12
 
13
13
  can :manage, ParticipatoryProcess
14
+ can :manage, ParticipatoryProcessGroup
14
15
  can :manage, ParticipatoryProcessStep
15
16
  can :manage, Category
16
17
  can :manage, ParticipatoryProcessUserRole
@@ -27,6 +28,7 @@ module Decidim
27
28
  can :manage, Feature
28
29
  can :read, :admin_dashboard
29
30
  can :manage, :admin_users
31
+ can :manage, Moderation
30
32
  can :manage, Attachment
31
33
  can :manage, Scope
32
34
  can :manage, Newsletter
@@ -33,6 +33,10 @@ module Decidim
33
33
  role.user != user
34
34
  end
35
35
 
36
+ can :manage, Moderation do |moderation|
37
+ participatory_processes.include?(moderation.participatory_process)
38
+ end
39
+
36
40
  can :manage, Attachment do |attachment|
37
41
  participatory_processes.include?(attachment.attached_to)
38
42
  end
@@ -7,7 +7,7 @@ module Decidim
7
7
  belongs_to :user, foreign_key: "decidim_user_id", class_name: Decidim::User
8
8
  belongs_to :participatory_process, foreign_key: "decidim_participatory_process_id", class_name: Decidim::ParticipatoryProcess
9
9
 
10
- ROLES = %w(admin).freeze
10
+ ROLES = %w(admin collaborator).freeze
11
11
  validates :role, inclusion: { in: ROLES }, uniqueness: { scope: [:user, :participatory_process] }
12
12
  end
13
13
  end
@@ -0,0 +1,43 @@
1
+ # frozen_string_literal: true
2
+ module Decidim
3
+ module Admin
4
+ # A class used to find the admins for a participatory process including
5
+ # organization admins.
6
+ class ProcessAdmins < Rectify::Query
7
+ # Syntactic sugar to initialize the class and return the queried objects.
8
+ #
9
+ # process - a process that needs to find its process admins
10
+ def self.for(process)
11
+ new(process).query
12
+ end
13
+
14
+ # Initializes the class.
15
+ #
16
+ # process - a process that needs to find its process admins
17
+ def initialize(process)
18
+ @process = process
19
+ end
20
+
21
+ # Finds organization admins and the users with role admin for the given process.
22
+ #
23
+ # Returns an ActiveRecord::Relation.
24
+ def query
25
+ Decidim::User.where(id: organization_admins).or(Decidim::User.where(id: process_admins))
26
+ end
27
+
28
+ private
29
+
30
+ attr_reader :process
31
+
32
+ def organization_admins
33
+ process.organization.admins
34
+ end
35
+
36
+ def process_admins
37
+ Decidim::Admin::ParticipatoryProcessUserRole
38
+ .where(participatory_process: process, role: :admin)
39
+ .pluck(:decidim_user_id)
40
+ end
41
+ end
42
+ end
43
+ end