Class: Hyrax::CollectionPresenter

Inherits:
Object
  • Object
show all
Includes:
ActionView::Helpers::NumberHelper, ActionView::Helpers::TagHelper, ModelProxy, PresentsAttributes
Defined in:
app/presenters/hyrax/collection_presenter.rb

Direct Known Subclasses

AdminSetPresenter

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Methods included from PresentsAttributes

#attribute_to_html, #display_microdata?, #microdata_type_to_html, #permission_badge, #permission_badge_class

Methods included from ModelProxy

#persisted?, #to_model, #to_partial_path

Constructor Details

#initialize(solr_document, current_ability, request = nil) ⇒ CollectionPresenter

Returns a new instance of CollectionPresenter.

Parameters:

  • solr_document (SolrDocument)
  • current_ability (Ability)
  • request (ActionDispatch::Request) (defaults to: nil)

    the http request context



18
19
20
21
22
23
# File 'app/presenters/hyrax/collection_presenter.rb', line 18

def initialize(solr_document, current_ability, request = nil)
  @solr_document = solr_document
  @current_ability = current_ability
  @request = request
  @subcollection_count = 0
end

Instance Attribute Details

#collection_typeObject



31
32
33
# File 'app/presenters/hyrax/collection_presenter.rb', line 31

def collection_type
  @collection_type ||= Hyrax::CollectionType.find_by_gid!(collection_type_gid)
end

#current_abilityObject

Returns the value of attribute current_ability.



7
8
9
# File 'app/presenters/hyrax/collection_presenter.rb', line 7

def current_ability
  @current_ability
end

#parent_collectionsObject

This is expected to be a Blacklight::Solr::Response with all of the parent collections



9
10
11
# File 'app/presenters/hyrax/collection_presenter.rb', line 9

def parent_collections
  @parent_collections
end

#requestObject

Returns the value of attribute request.



7
8
9
# File 'app/presenters/hyrax/collection_presenter.rb', line 7

def request
  @request
end

#solr_documentObject

Returns the value of attribute solr_document.



7
8
9
# File 'app/presenters/hyrax/collection_presenter.rb', line 7

def solr_document
  @solr_document
end

#subcollection_countObject

Returns the value of attribute subcollection_count.



8
9
10
# File 'app/presenters/hyrax/collection_presenter.rb', line 8

def subcollection_count
  @subcollection_count
end

Class Method Details

.termsObject

Terms is the list of fields displayed by app/views/collections/_show_descriptions.html.erb



43
44
45
46
# File 'app/presenters/hyrax/collection_presenter.rb', line 43

def self.terms
  [:total_items, :size, :resource_type, :creator, :contributor, :keyword, :license, :publisher, :date_created, :subject,
   :language, :identifier, :based_near, :related_url]
end

Instance Method Details

#[](key) ⇒ Object



52
53
54
55
56
57
58
59
60
61
# File 'app/presenters/hyrax/collection_presenter.rb', line 52

def [](key)
  case key
  when :size
    size
  when :total_items
    total_items
  else
    solr_document.send key
  end
end

#allow_batch?Boolean

Determine if the user can perform batch operations on this collection. Currently, the only batch operation allowed is deleting, so this is equivalent to checking if the user can delete the collection determined by criteria…

  • user must be able to edit the collection to be able to delete it

  • the collection does not have to be empty

Returns:

  • (Boolean)

    Boolean true if the user can perform batch actions; otherwise, false



179
180
181
182
# File 'app/presenters/hyrax/collection_presenter.rb', line 179

def allow_batch?
  return true if current_ability.can?(:edit, solr_document)
  false
end

#available_parent_collections(scope:) ⇒ Object



149
150
151
152
153
154
155
156
157
# File 'app/presenters/hyrax/collection_presenter.rb', line 149

def available_parent_collections(scope:)
  return @available_parents if @available_parents.present?
  collection = Collection.find(id)
  colls = Hyrax::Collections::NestedCollectionQueryService.available_parent_collections(child: collection, scope: scope, limit_to_id: nil)
  @available_parents = colls.map do |col|
    { "id" => col.id, "title_first" => col.title.first }
  end
  @available_parents.to_json
end


110
111
112
113
114
# File 'app/presenters/hyrax/collection_presenter.rb', line 110

def banner_file
  # Find Banner filename
  ci = CollectionBrandingInfo.where(collection_id: id, role: "banner")
  "/" + ci[0].local_path.split("/")[-4..-1].join("/") unless ci.empty?
end

#collection_type_badgeObject



83
84
85
# File 'app/presenters/hyrax/collection_presenter.rb', line 83

def collection_type_badge
  (:span, collection_type.title, class: "label", style: "background-color: " + collection_type.badge_color + ";")
end

#create_many_work_types?Boolean

Returns:

  • (Boolean)


137
138
139
# File 'app/presenters/hyrax/collection_presenter.rb', line 137

def create_many_work_types?
  create_work_presenter.many?
end

#create_work_presenterObject

A presenter for selecting a work type to create this is needed here because the selector is in the header on every page



133
134
135
# File 'app/presenters/hyrax/collection_presenter.rb', line 133

def create_work_presenter
  @create_work_presenter ||= create_work_presenter_class.new(current_ability.current_user)
end

#draw_select_work_modal?Boolean

Returns:

  • (Boolean)


141
142
143
# File 'app/presenters/hyrax/collection_presenter.rb', line 141

def draw_select_work_modal?
  create_many_work_types?
end

#first_work_typeObject



145
146
147
# File 'app/presenters/hyrax/collection_presenter.rb', line 145

def first_work_type
  create_work_presenter.first_model
end

#logo_recordObject



116
117
118
119
120
121
122
123
124
125
126
127
128
129
# File 'app/presenters/hyrax/collection_presenter.rb', line 116

def logo_record
  logo_info = []
  # Find Logo filename, alttext, linktext
  cis = CollectionBrandingInfo.where(collection_id: id, role: "logo")
  return if cis.empty?
  cis.each do |coll_info|
    logo_file = File.split(coll_info.local_path).last
    file_location = "/" + coll_info.local_path.split("/")[-4..-1].join("/") unless logo_file.empty?
    alttext = coll_info.alt_text
    linkurl = coll_info.target_url
    logo_info << { file: logo_file, file_location: file_location, alttext: alttext, linkurl: linkurl }
  end
  logo_info
end

#managed_accessObject

For the Managed Collections tab, determine the label to use for the level of access the user has for this admin set. Checks from most permissive to most restrictive.

Returns:

  • String the access label (e.g. Manage, Deposit, View)



166
167
168
169
170
171
# File 'app/presenters/hyrax/collection_presenter.rb', line 166

def managed_access
  return I18n.t('hyrax.dashboard.my.collection_list.managed_access.manage') if current_ability.can?(:edit, solr_document)
  return I18n.t('hyrax.dashboard.my.collection_list.managed_access.deposit') if current_ability.can?(:deposit, solr_document)
  return I18n.t('hyrax.dashboard.my.collection_list.managed_access.view') if current_ability.can?(:read, solr_document)
  ''
end

#parent_collection_countObject

The number of parent collections shown on the current page. This will differ from total_parent_collections due to pagination.



94
95
96
# File 'app/presenters/hyrax/collection_presenter.rb', line 94

def parent_collection_count
  parent_collections.nil? ? 0 : parent_collections.documents.size
end

#show_pathObject



106
107
108
# File 'app/presenters/hyrax/collection_presenter.rb', line 106

def show_path
  Hyrax::Engine.routes.url_helpers.dashboard_collection_path(id, locale: I18n.locale)
end

#sizeObject



63
64
65
# File 'app/presenters/hyrax/collection_presenter.rb', line 63

def size
  number_to_human_size(@solr_document['bytes_lts'])
end

#terms_with_valuesObject



48
49
50
# File 'app/presenters/hyrax/collection_presenter.rb', line 48

def terms_with_values
  self.class.terms.select { |t| self[t].present? }
end

#total_itemsObject



67
68
69
# File 'app/presenters/hyrax/collection_presenter.rb', line 67

def total_items
  ActiveFedora::Base.where("member_of_collection_ids_ssim:#{id}").count
end

#total_parent_collectionsObject

The total number of parents that this collection belongs to, visible or not.



88
89
90
# File 'app/presenters/hyrax/collection_presenter.rb', line 88

def total_parent_collections
  parent_collections.nil? ? 0 : parent_collections.response['numFound']
end

#total_viewable_collectionsObject



79
80
81
# File 'app/presenters/hyrax/collection_presenter.rb', line 79

def total_viewable_collections
  ActiveFedora::Base.where("member_of_collection_ids_ssim:#{id} AND generic_type_sim:Collection").accessible_by(current_ability).count
end

#total_viewable_itemsObject



71
72
73
# File 'app/presenters/hyrax/collection_presenter.rb', line 71

def total_viewable_items
  ActiveFedora::Base.where("member_of_collection_ids_ssim:#{id}").accessible_by(current_ability).count
end

#total_viewable_worksObject



75
76
77
# File 'app/presenters/hyrax/collection_presenter.rb', line 75

def total_viewable_works
  ActiveFedora::Base.where("member_of_collection_ids_ssim:#{id} AND generic_type_sim:Work").accessible_by(current_ability).count
end

#user_can_create_new_nest_collection?Boolean

Returns:

  • (Boolean)


102
103
104
# File 'app/presenters/hyrax/collection_presenter.rb', line 102

def user_can_create_new_nest_collection?
  current_ability.can?(:create_collection_of_type, collection_type)
end

#user_can_nest_collection?Boolean

Returns:

  • (Boolean)


98
99
100
# File 'app/presenters/hyrax/collection_presenter.rb', line 98

def user_can_nest_collection?
  current_ability.can?(:deposit, solr_document)
end