aboutsummaryrefslogtreecommitdiffstats
path: root/app
diff options
context:
space:
mode:
authorZog2017-12-20 17:48:17 +0100
committerAlban Peignier2017-12-21 21:35:02 +0100
commite8285678efc9a62115fe0af4086c7a3959666bf8 (patch)
tree64b18197dff4d6707be10bfccca9240c601ffded /app
parent01b2d2b785d99c9b031269fc741b70ee9c248f16 (diff)
downloadchouette-core-5349-deactivate-stop-areas.tar.bz2
Refs #5349 @1h; Deactivate StopAreas instead of destroying them5349-deactivate-stop-areas
- Update decorators (had to split `action_links` because of `StopPointDecorator` inheriting from `StopAreaDecorator`) - Add methods on model - Add routes - Add actions on controller (`Activatable` concern, shared with `LinesController`) - Add I18n keys
Diffstat (limited to 'app')
-rw-r--r--app/controllers/concerns/activatable.rb11
-rw-r--r--app/controllers/lines_controller.rb10
-rw-r--r--app/controllers/stop_areas_controller.rb3
-rw-r--r--app/decorators/stop_area_decorator.rb38
-rw-r--r--app/decorators/stop_point_decorator.rb2
-rw-r--r--app/models/chouette/stop_area.rb15
-rw-r--r--app/policies/stop_area_policy.rb8
7 files changed, 72 insertions, 15 deletions
diff --git a/app/controllers/concerns/activatable.rb b/app/controllers/concerns/activatable.rb
new file mode 100644
index 000000000..1a34551a9
--- /dev/null
+++ b/app/controllers/concerns/activatable.rb
@@ -0,0 +1,11 @@
+module Activatable
+ extend ActiveSupport::Concern
+
+ %w(activate deactivate).each do |action|
+ define_method action do
+ authorize resource, "#{action}?"
+ resource.send "#{action}!"
+ redirect_to request.referer || [current_referential, resource]
+ end
+ end
+end
diff --git a/app/controllers/lines_controller.rb b/app/controllers/lines_controller.rb
index 676581076..f446e1d37 100644
--- a/app/controllers/lines_controller.rb
+++ b/app/controllers/lines_controller.rb
@@ -1,6 +1,8 @@
class LinesController < ChouetteController
include ApplicationHelper
+ include Activatable
include PolicyChecker
+
defaults :resource_class => Chouette::Line
respond_to :html
respond_to :xml
@@ -50,14 +52,6 @@ class LinesController < ChouetteController
super
end
- %w(activate deactivate).each do |action|
- define_method action do
- authorize resource, "#{action}?"
- resource.send "#{action}!"
- redirect_to request.referer || [resource.line_referential, resource]
- end
- end
-
# overwrite inherited resources to use delete instead of destroy
# foreign keys will propagate deletion)
def destroy_resource(object)
diff --git a/app/controllers/stop_areas_controller.rb b/app/controllers/stop_areas_controller.rb
index 498493f1e..b478d38fa 100644
--- a/app/controllers/stop_areas_controller.rb
+++ b/app/controllers/stop_areas_controller.rb
@@ -1,6 +1,7 @@
class StopAreasController < ChouetteController
include ApplicationHelper
-
+ include Activatable
+
defaults :resource_class => Chouette::StopArea
belongs_to :stop_area_referential
diff --git a/app/decorators/stop_area_decorator.rb b/app/decorators/stop_area_decorator.rb
index cf3612f79..32f6e1d2b 100644
--- a/app/decorators/stop_area_decorator.rb
+++ b/app/decorators/stop_area_decorator.rb
@@ -3,12 +3,12 @@ class StopAreaDecorator < Draper::Decorator
delegate_all
- def action_links(stop_area = nil)
- links = []
+ def common_action_links(stop_area = nil)
+ top_links, bottom_links = [], []
stop_area ||= object
if h.policy(stop_area).update?
- links << Link.new(
+ top_links << Link.new(
content: h.t('stop_areas.actions.edit'),
href: h.edit_stop_area_referential_stop_area_path(
stop_area.stop_area_referential,
@@ -18,7 +18,7 @@ class StopAreaDecorator < Draper::Decorator
end
if h.policy(stop_area).destroy?
- links << Link.new(
+ bottom_links << Link.new(
content: h.destroy_link_content('stop_areas.actions.destroy'),
href: h.stop_area_referential_stop_area_path(
stop_area.stop_area_referential,
@@ -29,7 +29,35 @@ class StopAreaDecorator < Draper::Decorator
)
end
- links
+ [top_links, bottom_links]
+ end
+
+ def action_links(stop_area = nil)
+ stop_area ||= object
+ top_links, bottom_links = common_action_links(stop_area)
+ links = []
+
+ if h.policy(object).deactivate?
+ links << Link.new(
+ content: h.deactivate_link_content('stop_areas.actions.deactivate'),
+ href: h.deactivate_stop_area_referential_stop_area_path(stop_area.stop_area_referential, object),
+ method: :put,
+ data: {confirm: h.t('stop_areas.actions.deactivate_confirm')},
+ extra_class: "delete-action"
+ )
+ end
+
+ if h.policy(object).activate?
+ links << Link.new(
+ content: h.activate_link_content('stop_areas.actions.activate'),
+ href: h.activate_stop_area_referential_stop_area_path(stop_area.stop_area_referential, object),
+ method: :put,
+ data: {confirm: h.t('stop_areas.actions.activate_confirm')},
+ extra_class: "delete-action"
+ )
+ end
+
+ top_links + links + bottom_links
end
def waiting_time_text
diff --git a/app/decorators/stop_point_decorator.rb b/app/decorators/stop_point_decorator.rb
index 196d6d490..27e1a7058 100644
--- a/app/decorators/stop_point_decorator.rb
+++ b/app/decorators/stop_point_decorator.rb
@@ -4,6 +4,6 @@ class StopPointDecorator < StopAreaDecorator
delegate_all
def action_links
- super(object.stop_area)
+ common_action_links(object.stop_area).flatten
end
end
diff --git a/app/models/chouette/stop_area.rb b/app/models/chouette/stop_area.rb
index 3a9b44d59..2f8d7c096 100644
--- a/app/models/chouette/stop_area.rb
+++ b/app/models/chouette/stop_area.rb
@@ -328,5 +328,20 @@ module Chouette
end
end
+ def activated?
+ deleted_at.nil?
+ end
+
+ def deactivated?
+ !activated?
+ end
+
+ def activate!
+ update_attribute :deleted_at, nil
+ end
+
+ def deactivate!
+ update_attribute :deleted_at, Time.now
+ end
end
end
diff --git a/app/policies/stop_area_policy.rb b/app/policies/stop_area_policy.rb
index faeebbc2a..e5921ef61 100644
--- a/app/policies/stop_area_policy.rb
+++ b/app/policies/stop_area_policy.rb
@@ -16,4 +16,12 @@ class StopAreaPolicy < ApplicationPolicy
def update?
user.has_permission?('stop_areas.update')
end
+
+ def deactivate?
+ !record.deactivated? && user.has_permission?('stop_areas.change_status')
+ end
+
+ def activate?
+ record.deactivated? && user.has_permission?('stop_areas.change_status')
+ end
end