decidim-admin 0.0.1.alpha7 → 0.0.1.alpha8
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.
- checksums.yaml +4 -4
- data/LICENSE.txt +619 -0
- data/README.md +1 -1
- data/app/assets/javascripts/decidim/admin/application.js.es6 +12 -0
- data/app/assets/javascripts/decidim/admin/sort_steps.js.es6 +21 -0
- data/app/assets/stylesheets/decidim/admin/_tables.scss +9 -0
- data/app/commands/decidim/admin/activate_participatory_process_step.rb +43 -0
- data/app/commands/decidim/admin/create_participatory_process.rb +1 -0
- data/app/commands/decidim/admin/create_participatory_process_step.rb +46 -0
- data/app/commands/decidim/admin/deactivate_participatory_process_step.rb +35 -0
- data/app/commands/decidim/admin/publish_participatory_process.rb +35 -0
- data/app/commands/decidim/admin/reorder_participatory_process_steps.rb +47 -0
- data/app/commands/decidim/admin/unpublish_participatory_process.rb +35 -0
- data/app/commands/decidim/admin/update_participatory_process.rb +1 -0
- data/app/commands/decidim/admin/update_participatory_process_step.rb +49 -0
- data/app/constraints/decidim/admin/organization_dashboard_constraint.rb +1 -1
- data/app/controllers/decidim/admin/application_controller.rb +4 -0
- data/app/controllers/decidim/admin/dashboard_controller.rb +1 -9
- data/app/controllers/decidim/admin/participatory_process_publications_controller.rb +49 -0
- data/app/controllers/decidim/admin/participatory_process_step_activations_controller.rb +56 -0
- data/app/controllers/decidim/admin/participatory_process_step_ordering_controller.rb +30 -0
- data/app/controllers/decidim/admin/participatory_process_steps_controller.rb +81 -0
- data/app/controllers/decidim/admin/participatory_processes_controller.rb +7 -12
- data/app/forms/decidim/admin/participatory_process_form.rb +1 -0
- data/app/forms/decidim/admin/participatory_process_step_form.rb +25 -0
- data/app/helpers/decidim/admin/application_helper.rb +1 -0
- data/app/mailers/decidim/admin/application_mailer.rb +1 -1
- data/app/models/decidim/admin/abilities/admin.rb +21 -0
- data/app/views/decidim/admin/participatory_process_steps/_form.html.erb +19 -0
- data/app/views/decidim/admin/participatory_process_steps/_table.html.erb +53 -0
- data/app/views/decidim/admin/participatory_process_steps/edit.html.erb +11 -0
- data/app/views/decidim/admin/participatory_process_steps/new.html.erb +11 -0
- data/app/views/decidim/admin/participatory_process_steps/show.html.erb +22 -0
- data/app/views/decidim/admin/participatory_processes/_form.html.erb +4 -0
- data/app/views/decidim/admin/participatory_processes/index.html.erb +22 -2
- data/app/views/decidim/admin/participatory_processes/show.html.erb +21 -2
- data/config/i18n-tasks.yml +2 -2
- data/config/locales/ca.yml +55 -2
- data/config/locales/en.yml +55 -2
- data/config/locales/es.yml +56 -3
- data/config/routes.rb +10 -1
- data/lib/decidim/admin/engine.rb +6 -1
- data/vendor/assets/javascripts/html.sortable.min.js +2 -0
- metadata +39 -37
- data/app/assets/javascripts/decidim/admin/application.js +0 -22
- data/app/controllers/concerns/decidim/needs_authorization.rb +0 -50
- data/app/policies/decidim/admin/application_policy.rb +0 -20
- data/app/policies/decidim/admin/dashboard_policy.rb +0 -15
- data/app/policies/decidim/admin/organization_policy.rb +0 -15
- data/app/policies/decidim/admin/participatory_process_policy.rb +0 -57
@@ -0,0 +1,56 @@
|
|
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 ParticipatoryProcessStepActivationsController < ApplicationController
|
9
|
+
def create
|
10
|
+
authorize! :activate, process_step
|
11
|
+
|
12
|
+
ActivateParticipatoryProcessStep.call(process_step) do
|
13
|
+
on(:ok) do
|
14
|
+
flash[:notice] = I18n.t("participatory_process_step_activations.create.success", scope: "decidim.admin")
|
15
|
+
redirect_to participatory_process_path(participatory_process)
|
16
|
+
end
|
17
|
+
|
18
|
+
on(:invalid) do
|
19
|
+
flash.now[:alert] = I18n.t("participatory_process_step_activations.create.error", scope: "decidim.admin")
|
20
|
+
redirect_to participatory_process_path(participatory_process)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
def destroy
|
26
|
+
authorize! :deactivate, process_step
|
27
|
+
|
28
|
+
DeactivateParticipatoryProcessStep.call(process_step) do
|
29
|
+
on(:ok) do
|
30
|
+
flash[:notice] = I18n.t("participatory_process_step_activations.destroy.success", scope: "decidim.admin")
|
31
|
+
redirect_to participatory_process_path(participatory_process)
|
32
|
+
end
|
33
|
+
|
34
|
+
on(:invalid) do
|
35
|
+
flash.now[:alert] = I18n.t("participatory_process_step_activations.destroy.error", scope: "decidim.admin")
|
36
|
+
redirect_to participatory_process_path(participatory_process)
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
private
|
42
|
+
|
43
|
+
def process_step
|
44
|
+
collection.find(params[:step_id])
|
45
|
+
end
|
46
|
+
|
47
|
+
def participatory_process
|
48
|
+
current_organization.participatory_processes.find(params[:participatory_process_id])
|
49
|
+
end
|
50
|
+
|
51
|
+
def collection
|
52
|
+
participatory_process.steps
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
@@ -0,0 +1,30 @@
|
|
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 ParticipatoryProcessStepOrderingController < ApplicationController
|
9
|
+
def create
|
10
|
+
authorize! :reorder, Decidim::ParticipatoryProcessStep
|
11
|
+
ReorderParticipatoryProcessSteps.call(collection, params[:items_ids]) do
|
12
|
+
on(:invalid) do
|
13
|
+
flash.now[:alert] = I18n.t("participatory_process_steps.ordering.error", scope: "decidim.admin")
|
14
|
+
redirect_to participatory_process_path(participatory_process)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
private
|
20
|
+
|
21
|
+
def participatory_process
|
22
|
+
current_organization.participatory_processes.find(params[:participatory_process_id])
|
23
|
+
end
|
24
|
+
|
25
|
+
def collection
|
26
|
+
participatory_process.steps
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,81 @@
|
|
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 ParticipatoryProcessStepsController < ApplicationController
|
9
|
+
def new
|
10
|
+
authorize! :create, Decidim::ParticipatoryProcessStep
|
11
|
+
@form = ParticipatoryProcessStepForm.new
|
12
|
+
end
|
13
|
+
|
14
|
+
def create
|
15
|
+
authorize! :create, Decidim::ParticipatoryProcessStep
|
16
|
+
@form = ParticipatoryProcessStepForm.from_params(params)
|
17
|
+
|
18
|
+
CreateParticipatoryProcessStep.call(@form, participatory_process) do
|
19
|
+
on(:ok) do
|
20
|
+
flash[:notice] = I18n.t("participatory_process_steps.create.success", scope: "decidim.admin")
|
21
|
+
redirect_to participatory_process_path(participatory_process)
|
22
|
+
end
|
23
|
+
|
24
|
+
on(:invalid) do
|
25
|
+
flash.now[:alert] = I18n.t("participatory_process_steps.create.error", scope: "decidim.admin")
|
26
|
+
render :new
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
def edit
|
32
|
+
@participatory_process_step = collection.find(params[:id])
|
33
|
+
authorize! :update, @participatory_process_step
|
34
|
+
@form = ParticipatoryProcessStepForm.from_model(@participatory_process_step)
|
35
|
+
end
|
36
|
+
|
37
|
+
def update
|
38
|
+
@participatory_process_step = collection.find(params[:id])
|
39
|
+
authorize! :update, @participatory_process_step
|
40
|
+
@form = ParticipatoryProcessStepForm.from_params(params)
|
41
|
+
|
42
|
+
UpdateParticipatoryProcessStep.call(@participatory_process_step, @form) do
|
43
|
+
on(:ok) do
|
44
|
+
flash[:notice] = I18n.t("participatory_process_steps.update.success", scope: "decidim.admin")
|
45
|
+
redirect_to participatory_process_path(participatory_process)
|
46
|
+
end
|
47
|
+
|
48
|
+
on(:invalid) do
|
49
|
+
flash.now[:alert] = I18n.t("participatory_process_steps.update.error", scope: "decidim.admin")
|
50
|
+
render :edit
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
def show
|
56
|
+
@participatory_process_step = collection.find(params[:id])
|
57
|
+
authorize! :read, @participatory_process_step
|
58
|
+
end
|
59
|
+
|
60
|
+
def destroy
|
61
|
+
@participatory_process_step = collection.find(params[:id])
|
62
|
+
authorize! :destroy, @participatory_process_step
|
63
|
+
@participatory_process_step.destroy!
|
64
|
+
|
65
|
+
flash[:notice] = I18n.t("participatory_process_steps.destroy.success", scope: "decidim.admin")
|
66
|
+
|
67
|
+
redirect_to participatory_process_path(@participatory_process_step.participatory_process)
|
68
|
+
end
|
69
|
+
|
70
|
+
private
|
71
|
+
|
72
|
+
def participatory_process
|
73
|
+
@participatory_process ||= current_organization.participatory_processes.find(params[:participatory_process_id])
|
74
|
+
end
|
75
|
+
|
76
|
+
def collection
|
77
|
+
@collection ||= participatory_process.steps
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
@@ -7,18 +7,18 @@ module Decidim
|
|
7
7
|
#
|
8
8
|
class ParticipatoryProcessesController < ApplicationController
|
9
9
|
def index
|
10
|
+
authorize! :index, Decidim::ParticipatoryProcess
|
10
11
|
@participatory_processes = collection
|
11
|
-
authorize @participatory_processes
|
12
12
|
end
|
13
13
|
|
14
14
|
def new
|
15
|
+
authorize! :new, Decidim::ParticipatoryProcess
|
15
16
|
@form = ParticipatoryProcessForm.new
|
16
|
-
authorize ParticipatoryProcess
|
17
17
|
end
|
18
18
|
|
19
19
|
def create
|
20
|
+
authorize! :new, Decidim::ParticipatoryProcess
|
20
21
|
@form = ParticipatoryProcessForm.from_params(params)
|
21
|
-
authorize ParticipatoryProcess
|
22
22
|
|
23
23
|
CreateParticipatoryProcess.call(@form, current_organization) do
|
24
24
|
on(:ok) do
|
@@ -35,13 +35,13 @@ module Decidim
|
|
35
35
|
|
36
36
|
def edit
|
37
37
|
@participatory_process = collection.find(params[:id])
|
38
|
-
authorize @participatory_process
|
38
|
+
authorize! :update, @participatory_process
|
39
39
|
@form = ParticipatoryProcessForm.from_model(@participatory_process)
|
40
40
|
end
|
41
41
|
|
42
42
|
def update
|
43
43
|
@participatory_process = collection.find(params[:id])
|
44
|
-
authorize @participatory_process
|
44
|
+
authorize! :update, @participatory_process
|
45
45
|
@form = ParticipatoryProcessForm.from_params(params)
|
46
46
|
|
47
47
|
UpdateParticipatoryProcess.call(@participatory_process, @form) do
|
@@ -59,13 +59,12 @@ module Decidim
|
|
59
59
|
|
60
60
|
def show
|
61
61
|
@participatory_process = collection.find(params[:id])
|
62
|
-
authorize @participatory_process
|
62
|
+
authorize! :read, @participatory_process
|
63
63
|
end
|
64
64
|
|
65
65
|
def destroy
|
66
66
|
@participatory_process = collection.find(params[:id])
|
67
|
-
authorize @participatory_process
|
68
|
-
|
67
|
+
authorize! :destroy, @participatory_process
|
69
68
|
@participatory_process.destroy!
|
70
69
|
|
71
70
|
flash[:notice] = I18n.t("participatory_processes.destroy.success", scope: "decidim.admin")
|
@@ -78,10 +77,6 @@ module Decidim
|
|
78
77
|
def collection
|
79
78
|
current_organization.participatory_processes
|
80
79
|
end
|
81
|
-
|
82
|
-
def policy_class
|
83
|
-
Decidim::Admin::ParticipatoryProcessPolicy
|
84
|
-
end
|
85
80
|
end
|
86
81
|
end
|
87
82
|
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
module Decidim
|
3
|
+
module Admin
|
4
|
+
# A form object used to create participatory processes steps from the admin
|
5
|
+
# dashboard.
|
6
|
+
#
|
7
|
+
class ParticipatoryProcessStepForm < Rectify::Form
|
8
|
+
include TranslatableAttributes
|
9
|
+
|
10
|
+
translatable_attribute :title, String
|
11
|
+
translatable_attribute :description, String
|
12
|
+
translatable_attribute :short_description, String
|
13
|
+
|
14
|
+
mimic :participatory_process_step
|
15
|
+
|
16
|
+
attribute :start_date, DateTime
|
17
|
+
attribute :end_date, DateTime
|
18
|
+
|
19
|
+
translatable_validates :title, :description, :short_description, presence: true
|
20
|
+
|
21
|
+
validates :start_date, date: { before: :end_date, allow_blank: true, if: proc { |obj| obj.end_date.present? } }
|
22
|
+
validates :end_date, date: { after: :start_date, allow_blank: true, if: proc { |obj| obj.start_date.present? } }
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
module Decidim
|
3
|
+
module Admin
|
4
|
+
module Abilities
|
5
|
+
# Defines the abilities for a user in the admin section. Intended to be
|
6
|
+
# used with `cancancan`.
|
7
|
+
class Admin
|
8
|
+
include CanCan::Ability
|
9
|
+
|
10
|
+
def initialize(user)
|
11
|
+
return unless user
|
12
|
+
return unless user.role?(:admin)
|
13
|
+
|
14
|
+
can :manage, ParticipatoryProcess
|
15
|
+
can :manage, ParticipatoryProcessStep
|
16
|
+
can :read, :admin_dashboard
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
<div class="field">
|
2
|
+
<%= form.translated :text_field, :title, autofocus: true %>
|
3
|
+
</div>
|
4
|
+
|
5
|
+
<div class="field">
|
6
|
+
<%= form.translated :text_area, :short_description %>
|
7
|
+
</div>
|
8
|
+
|
9
|
+
<div class="field">
|
10
|
+
<%= form.translated :text_area, :description %>
|
11
|
+
</div>
|
12
|
+
|
13
|
+
<div class="field">
|
14
|
+
<%= form.date_field :start_date %>
|
15
|
+
</div>
|
16
|
+
|
17
|
+
<div class="field">
|
18
|
+
<%= form.date_field :end_date %>
|
19
|
+
</div>
|
@@ -0,0 +1,53 @@
|
|
1
|
+
<section id="steps">
|
2
|
+
<h4><%= t(".steps_title", scope: "decidim.admin") %></h4>
|
3
|
+
|
4
|
+
<% if can? :create, Decidim::ParticipatoryProcessStep %>
|
5
|
+
<div class="actions title">
|
6
|
+
<%= link_to t("actions.new", scope: "decidim.admin", name: t("models.participatory_process_step.name", scope: "decidim.admin")), new_participatory_process_step_path(@participatory_process), class: 'new' %>
|
7
|
+
</div>
|
8
|
+
<% end %>
|
9
|
+
|
10
|
+
<% if @participatory_process.steps.any? %>
|
11
|
+
<p><%= t(".steps_hint", scope: "decidim.admin") %></p>
|
12
|
+
<table class="stack">
|
13
|
+
<thead>
|
14
|
+
<tr>
|
15
|
+
<th><%= t("models.participatory_process_step.fields.title", scope: "decidim.admin") %></th>
|
16
|
+
<th><%= t("models.participatory_process_step.fields.start_date", scope: "decidim.admin") %></th>
|
17
|
+
<th><%= t("models.participatory_process_step.fields.end_date", scope: "decidim.admin") %></th>
|
18
|
+
<th><%= t("models.participatory_process_step.fields.active", scope: "decidim.admin") %></th>
|
19
|
+
<th class="actions"><%= t("actions.title", scope: "decidim.admin") %></th>
|
20
|
+
</tr>
|
21
|
+
</thead>
|
22
|
+
<tbody class="sortable" data-sort-url="<%= ordering_participatory_process_steps_path(@participatory_process) %>">
|
23
|
+
<% @participatory_process.steps.each do |step| %>
|
24
|
+
<tr data-id="<%= step.id %>">
|
25
|
+
<td>
|
26
|
+
<%= link_to translated_attribute(step.title), participatory_process_step_path(@participatory_process, step) %><br />
|
27
|
+
</td>
|
28
|
+
<td>
|
29
|
+
<%= l step.start_date, format: :short %>
|
30
|
+
</td>
|
31
|
+
<td>
|
32
|
+
<%= l step.end_date, format: :short %>
|
33
|
+
</td>
|
34
|
+
<td>
|
35
|
+
<%= humanize_boolean step.active? %>
|
36
|
+
</td>
|
37
|
+
<td class="actions">
|
38
|
+
<%= link_to t("actions.edit", scope: "decidim.admin"), edit_participatory_process_step_path(@participatory_process, step) if can? :update, step %>
|
39
|
+
<% if can? :activate, step %>
|
40
|
+
<% if step.active? %>
|
41
|
+
<%= link_to t("actions.deactivate", scope: "decidim.admin"), participatory_process_step_activate_path(@participatory_process, step), method: :delete, class: "small button secondary" %>
|
42
|
+
<% else %>
|
43
|
+
<%= link_to t("actions.activate", scope: "decidim.admin"), participatory_process_step_activate_path(@participatory_process, step), method: :post, class: "small button secondary" %>
|
44
|
+
<% end %>
|
45
|
+
<% end %>
|
46
|
+
<%= link_to t("actions.destroy", scope: "decidim.admin"), participatory_process_step_path(@participatory_process, step), method: :delete, class: "small alert button", data: { confirm: t("actions.confirm_destroy", scope: "decidim.admin") } if can? :destroy, step %>
|
47
|
+
</td>
|
48
|
+
</tr>
|
49
|
+
<% end %>
|
50
|
+
</tbody>
|
51
|
+
</table>
|
52
|
+
<% end %>
|
53
|
+
</section>
|
@@ -0,0 +1,11 @@
|
|
1
|
+
<% content_for :title do %>
|
2
|
+
<h2><%= t ".title" %></h2>
|
3
|
+
<% end %>
|
4
|
+
|
5
|
+
<%= form_for(@form, url: participatory_process_step_path(@participatory_process_step.participatory_process, @participatory_process_step)) do |f| %>
|
6
|
+
<%= render partial: 'form', object: f %>
|
7
|
+
|
8
|
+
<div class="actions">
|
9
|
+
<%= f.submit t(".update") %>
|
10
|
+
</div>
|
11
|
+
<% end %>
|
@@ -0,0 +1,22 @@
|
|
1
|
+
<% content_for :title do %>
|
2
|
+
<h2><%= link_to translated_attribute(@participatory_process_step.participatory_process.title), @participatory_process_step.participatory_process %></h2>
|
3
|
+
<h3 class="subheader"><%= translated_attribute(@participatory_process_step.title) %></h3>
|
4
|
+
<% end %>
|
5
|
+
|
6
|
+
<div class="actions">
|
7
|
+
<hr />
|
8
|
+
<%= link_to t("decidim.admin.actions.edit"), ['edit', @participatory_process_step] if can? :update, @participatory_process_step %>
|
9
|
+
<%= link_to t("decidim.admin.actions.destroy"), @participatory_process_step, method: :delete, class: "alert button", data: { confirm: t("decidim.admin.actions.confirm_destroy") } if can? :destroy, @participatory_process_step %>
|
10
|
+
</div>
|
11
|
+
|
12
|
+
<dl>
|
13
|
+
<%= display_for @participatory_process_step,
|
14
|
+
:title,
|
15
|
+
:short_description,
|
16
|
+
:description
|
17
|
+
%>
|
18
|
+
<dt><%= display_label(@participatory_process_step, :start_date) %></dt>
|
19
|
+
<dd><%= l @participatory_process_step.start_date, format: :short %></dd>
|
20
|
+
<dt><%= display_label(@participatory_process_step, :end_date) %></dt>
|
21
|
+
<dd><%= l @participatory_process_step.end_date, format: :short %></dd>
|
22
|
+
</dl>
|
@@ -10,6 +10,8 @@
|
|
10
10
|
<thead>
|
11
11
|
<tr>
|
12
12
|
<th><%= t("models.participatory_process.fields.title", scope: "decidim.admin") %></th>
|
13
|
+
<th><%= t("models.participatory_process.fields.promoted", scope: "decidim.admin") %></th>
|
14
|
+
<th><%= t("models.participatory_process.fields.published", scope: "decidim.admin") %></th>
|
13
15
|
<th><%= t("models.participatory_process.fields.created_at", scope: "decidim.admin") %></th>
|
14
16
|
<th class="actions"><%= t("actions.title", scope: "decidim.admin") %></th>
|
15
17
|
</tr>
|
@@ -20,13 +22,31 @@
|
|
20
22
|
<td>
|
21
23
|
<%= link_to translated_attribute(process.title), process %><br />
|
22
24
|
</td>
|
25
|
+
<td>
|
26
|
+
<%= humanize_boolean process.promoted? %>
|
27
|
+
</td>
|
28
|
+
<td>
|
29
|
+
<%= humanize_boolean process.published? %>
|
30
|
+
</td>
|
23
31
|
<td>
|
24
32
|
<%= l process.created_at, format: :short %>
|
25
33
|
</td>
|
26
34
|
<td class="actions">
|
27
|
-
|
35
|
+
<% if can? :update, process %>
|
36
|
+
<%= link_to t("actions.edit", scope: "decidim.admin"), ['edit', process] %>
|
37
|
+
<% end %>
|
38
|
+
|
39
|
+
<% if can? :publish, process %>
|
40
|
+
<% if process.published? %>
|
41
|
+
<%= link_to t("actions.unpublish", scope: "decidim.admin"), participatory_process_publish_path(process), method: :delete, class: "small button secondary" %>
|
42
|
+
<% else %>
|
43
|
+
<%= link_to t("actions.publish", scope: "decidim.admin"), participatory_process_publish_path(process), method: :post, class: "small button secondary" %>
|
44
|
+
<% end %>
|
45
|
+
<% end %>
|
28
46
|
|
29
|
-
|
47
|
+
<% if can? :destroy, process %>
|
48
|
+
<%= link_to t("actions.destroy", scope: "decidim.admin"), process, method: :delete, class: "small alert button", data: { confirm: t("actions.confirm_destroy", scope: "decidim.admin") } %>
|
49
|
+
<% end %>
|
30
50
|
</td>
|
31
51
|
</tr>
|
32
52
|
<% end %>
|