diff options
| author | Zog | 2017-12-20 17:48:17 +0100 |
|---|---|---|
| committer | Alban Peignier | 2017-12-21 21:35:02 +0100 |
| commit | e8285678efc9a62115fe0af4086c7a3959666bf8 (patch) | |
| tree | 64b18197dff4d6707be10bfccca9240c601ffded /app | |
| parent | 01b2d2b785d99c9b031269fc741b70ee9c248f16 (diff) | |
| download | chouette-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.rb | 11 | ||||
| -rw-r--r-- | app/controllers/lines_controller.rb | 10 | ||||
| -rw-r--r-- | app/controllers/stop_areas_controller.rb | 3 | ||||
| -rw-r--r-- | app/decorators/stop_area_decorator.rb | 38 | ||||
| -rw-r--r-- | app/decorators/stop_point_decorator.rb | 2 | ||||
| -rw-r--r-- | app/models/chouette/stop_area.rb | 15 | ||||
| -rw-r--r-- | app/policies/stop_area_policy.rb | 8 |
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 |
