From e50cf7d2001b0d96a3a01af894b1601e20220fe6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Karl=20Erik=20=C3=95unapuu?= Date: Wed, 12 Feb 2020 15:33:22 +0200 Subject: [PATCH] Registrar: Allow to view other contacts of domain --- app/controllers/registrant/contacts_controller.rb | 3 ++- app/models/contact.rb | 11 ++++++++--- app/views/registrant/contacts/show/_domains.html.erb | 2 +- 3 files changed, 11 insertions(+), 5 deletions(-) diff --git a/app/controllers/registrant/contacts_controller.rb b/app/controllers/registrant/contacts_controller.rb index af7136ce9..e690b50f4 100644 --- a/app/controllers/registrant/contacts_controller.rb +++ b/app/controllers/registrant/contacts_controller.rb @@ -5,7 +5,8 @@ class Registrant::ContactsController < RegistrantController skip_authorization_check only: %i[edit update] def show - @contact = current_user_contacts.find(params[:id]) + @contact = domain.contacts.find(params[:id]) + @requester_contact = domain.contacts.find_by(ident: current_registrant_user.ident).id authorize! :read, @contact end diff --git a/app/models/contact.rb b/app/models/contact.rb index 558292dbd..ddf39c9bb 100644 --- a/app/models/contact.rb +++ b/app/models/contact.rb @@ -415,7 +415,7 @@ class Contact < ApplicationRecord # if total is smaller than needed, the load more # we also need to sort by valid_to # todo: extract to drapper. Then we can remove Domain#roles - def all_domains(page: nil, per: nil, params:) + def all_domains(page: nil, per: nil, params:, requester:) # compose filter sql filter_sql = case params[:domain_filter] when "Registrant".freeze @@ -431,9 +431,14 @@ class Contact < ApplicationRecord sort = Domain.column_names.include?(sorts.first) ? sorts.first : "valid_to" order = {"asc"=>"desc", "desc"=>"asc"}[sorts.second] || "desc" - # fetch domains - domains = Domain.where("domains.id IN (#{filter_sql})") + if requester + requester_domains = Contact.find(requester).domains + domains = requester_domains.where("domains.id IN (#{filter_sql})") + else + domains = Domain.where("domains.id IN (#{filter_sql})") + end + domains = domains.includes(:registrar).page(page).per(per) if sorts.first == "registrar_name".freeze diff --git a/app/views/registrant/contacts/show/_domains.html.erb b/app/views/registrant/contacts/show/_domains.html.erb index 167ab1240..d783b55b2 100644 --- a/app/views/registrant/contacts/show/_domains.html.erb +++ b/app/views/registrant/contacts/show/_domains.html.erb @@ -1,5 +1,5 @@ <% domains = contact.all_domains(page: params[:domain_page], per: 20, - params: domain_filter_params.to_h) %> + params: domain_filter_params.to_h, requester: @requester_contact) %>