ActiveAdmin: Hide a whole panel in a smart way
I don't know ActiveAdmin, so I can only offer a local improvement.  That said, a little metaprogramming could work here.  The idea is to have the list of resource items in one place:

RESOURCES_ITEMS = [
  :phone,
  :fax,  
  :email,   
  :resource,
]


and then use that list with Object#public_send and Enumerable#any?:

if RESOURCE_ITEMS.any? { |item| resource.public_send(item).present? }
  panel I18n.t('contact_details') do
    attributes_table_for resource do
      RESOURCE_ITEMS.each do |item|
        if resource.public_send(item).present?
          row.public_send(item)
        end
      end
    end
  end
end


While not a huge improvement, this does DRY the list of resource items.