Skip to content

Commit

Permalink
Merge pull request #642 from bitzesty/main
Browse files Browse the repository at this point in the history
Staging deploy
  • Loading branch information
dreamfall authored Dec 8, 2023
2 parents 84eb2b0 + fb554e6 commit 8becfbf
Show file tree
Hide file tree
Showing 10 changed files with 113 additions and 24 deletions.
25 changes: 23 additions & 2 deletions app/controllers/admin/lieutenants_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,20 @@ def index
params[:search].permit!
authorize :lieutenant, :index?

@search = LieutenantSearch.new(Lieutenant.all).
search(params[:search])
@search = LieutenantSearch.new(Lieutenant.all)
.search(params[:search])
@resources = @search.results.page(params[:page])
end

def deleted
authorize :lieutenant, :restore?

@search = LieutenantSearch.new(Lieutenant.deleted)
.search(params[:search])
@resources = @search.results.page(params[:page])
render :index
end

def new
@resource = Lieutenant.new
authorize @resource, :create?
Expand Down Expand Up @@ -43,6 +52,18 @@ def update
notice: "User has been successfully updated."
end

def restore
@resource = Lieutenant.deleted.find(params[:id])

authorize @resource, :restore?
@resource.restore!

respond_with :admin,
@resource,
location: admin_lieutenants_path,
notice: "User has been successfully restored."
end

def destroy
authorize @resource, :destroy?
@resource.soft_delete!
Expand Down
2 changes: 1 addition & 1 deletion app/controllers/admin/users_controller.rb
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
class Admin::UsersController < Admin::BaseController
respond_to :html
before_action :find_resource, except: [:index, :new, :create]
before_action :find_resource, except: [:index, :new, :create, :deleted, :restore]

def index
params[:search] ||= UserSearch::DEFAULT_SEARCH
Expand Down
17 changes: 11 additions & 6 deletions app/helpers/search_helper.rb
Original file line number Diff line number Diff line change
Expand Up @@ -34,18 +34,23 @@ def sort_link_param(search, field)
end
end

def user_search_count(resource)
"Showing " + user_count(resource) unless resource.none?
def user_search_count(resource, deleted = false)
"Showing " + user_count(resource, deleted) unless resource.none?
end

def user_default_count(resource)
"Showing all " + user_count(resource) unless resource.none?
def user_default_count(resource, deleted = false)
if deleted
"Showing "
else
"Showing all "
end + user_count(resource, deleted) unless resource.none?
end

def user_count(resource)
def user_count(resource, deleted = false)
user_type = t("admin.users.role_headers.#{controller_name}")
user_type = user_type.downcase unless controller_name == "lieutenants"
user_type = resource.count == 1 ? user_type.singularize : user_type
"#{resource.count.to_s} #{user_type}"
deleted_msg = " deleted" if deleted
"#{resource.count.to_s}#{deleted_msg.to_s} #{user_type}"
end
end
6 changes: 6 additions & 0 deletions app/models/concerns/soft_delete.rb
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,15 @@ module SoftDelete

included do
default_scope { where(deleted: false) }

scope :deleted, -> { unscoped.where(deleted: true) }
end

def soft_delete!
update_column(:deleted, true)
end

def restore!
update_column(:deleted, false)
end
end
4 changes: 4 additions & 0 deletions app/policies/lieutenant_policy.rb
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,10 @@ def update?
admin? || (advanced_lieutenant? && same_county?)
end

def restore?
admin?
end

def destroy?
admin? || (advanced_lieutenant? && subject != record && record.role.regular? && same_county?)
end
Expand Down
42 changes: 30 additions & 12 deletions app/views/admin/lieutenants/_list.html.slim
Original file line number Diff line number Diff line change
Expand Up @@ -16,23 +16,34 @@ div role="region" aria-labelledby="table-list-lieutenancy-office-caption" tabind
= sort_link f, "Confirmed on", @search, :confirmed_at
th.sortable.govuk-table__header scope="col"
= sort_link f, "Locked on", @search, :locked_at
th.govuk-table__header
| Edit
- if action_name == "deleted"
th.govuk-table__header
| Restore
- else
th.govuk-table__header
| Edit
tbody.govuk-table__body
- if resources.none?
tr.govuk-table__row
td.text-center colspan=100
br
p.govuk-body.p-empty No Lord Lieutenancy office users found.
- if action_name == "deleted"
p.govuk-body.p-empty No deleted Lord Lieutenancy office users found.
- else
p.govuk-body.p-empty No Lord Lieutenancy office users found.
br
- else
- LieutenantDecorator.decorate_collection(resources).each do |lieutenant|
tr.govuk-table__row
th.govuk-table__header scope="row"
= link_to lieutenant.full_name,
edit_admin_lieutenant_path(lieutenant),
class: "govuk-link",
aria: { label: "edit-#{ lieutenant.first_name.downcase }-#{ lieutenant.last_name.downcase }" }
- if action_name == "deleted"
td.govuk-table__cell scope="row"
= lieutenant.full_name
- else
th.govuk-table__header scope="row"
= link_to lieutenant.full_name,
edit_admin_lieutenant_path(lieutenant),
class: "govuk-link",
aria: { label: "edit-#{ lieutenant.first_name.downcase }-#{ lieutenant.last_name.downcase }" }
td.govuk-table__cell
= lieutenant.ceremonial_county.name
td.govuk-table__cell
Expand All @@ -59,7 +70,14 @@ div role="region" aria-labelledby="table-list-lieutenancy-office-caption" tabind
.text-muted
' Not locked
td.govuk-table__cell
= link_to "Edit user", edit_admin_lieutenant_path(lieutenant),
class: "govuk-link",
id: "edit-#{ lieutenant.first_name.downcase }-#{ lieutenant.last_name.downcase }",
aria: { label: "edit-#{ lieutenant.first_name.downcase }-#{ lieutenant.last_name.downcase }" }
- if action_name == "deleted"
= link_to "Restore user", restore_admin_lieutenant_path(lieutenant),
class: "govuk-link",
id: "restore-#{ lieutenant.first_name.downcase }-#{ lieutenant.last_name.downcase }",
method: :post,
aria: { label: "restore-#{ lieutenant.first_name.downcase }-#{ lieutenant.last_name.downcase }" }
- else
= link_to "Edit user", edit_admin_lieutenant_path(lieutenant),
class: "govuk-link",
id: "edit-#{ lieutenant.first_name.downcase }-#{ lieutenant.last_name.downcase }",
aria: { label: "edit-#{ lieutenant.first_name.downcase }-#{ lieutenant.last_name.downcase }" }
15 changes: 15 additions & 0 deletions app/views/admin/users/index.html.slim
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,21 @@
.govuk-grid-row
= render "shared/users/search_count"
.govuk-button-group
- if controller_name == "lieutenants"
- if action_name == "deleted"
= link_to "Show active users",
admin_lieutenants_path,
class: "new-user govuk-button pull-right",
role: "button",
aria: { label: "Show active users" }

- else
= link_to "Show deleted users",
deleted_admin_lieutenants_path,
class: "new-user govuk-button pull-right",
role: "button",
aria: { label: "Show deleted users" }

= link_to public_send("new_admin_#{controller_name.singularize}_path"), class: 'new-user govuk-button pull-right', role: 'button' do
= t("admin.users.new_button.#{controller_name}")
.clear
Expand Down
4 changes: 2 additions & 2 deletions app/views/shared/users/_search_count.html.slim
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
p.govuk-body-l.govuk-grid-column-two-thirds class="govuk-!-font-weight-bold"
- if @search.query?
= user_search_count(@resources)
= user_search_count(@resources, action_name == "deleted")
- else
= user_default_count(@resources)
= user_default_count(@resources, action_name == "deleted")
.clear
7 changes: 6 additions & 1 deletion config/routes.rb
Original file line number Diff line number Diff line change
Expand Up @@ -187,7 +187,12 @@
end
end
resources :assessors
resources :lieutenants

resources :lieutenants do
get :deleted, on: :collection
post :restore, on: :member
end

resources :group_leaders, except: [:new, :create, :show]
resources :citations, only: [:index]

Expand Down
15 changes: 15 additions & 0 deletions spec/features/admin/lieutenants/manage_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -52,5 +52,20 @@

expect(page).to have_no_content "Rob Bobbers"
end

it "can restore deleted lieutenant" do
Lieutenant.last.soft_delete!

visit admin_lieutenants_path
expect(page).not_to have_content "Bob Bobbers"

click_link "Show deleted users"
click_link "Restore user"

expect(page).to have_content "User has been successfully restored"

visit admin_lieutenants_path
expect(page).to have_content "Bob Bobbers"
end
end
end

0 comments on commit 8becfbf

Please sign in to comment.