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, #valid_child_concerns

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


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

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


33
34
35
# File 'app/presenters/hyrax/collection_presenter.rb', line 33

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

#current_abilityObject

Returns the value of attribute current_ability.


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

def current_ability
  @current_ability
end

#parent_collectionsObject

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


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

def parent_collections
  @parent_collections
end

#requestObject

Returns the value of attribute request.


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

def request
  @request
end

#solr_documentObject

Returns the value of attribute solr_document.


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

def solr_document
  @solr_document
end

#subcollection_countObject

Returns the value of attribute subcollection_count.


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

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


45
46
47
48
# File 'app/presenters/hyrax/collection_presenter.rb', line 45

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

Parameters:

  • key (Symbol)

Returns:

  • (Object)

57
58
59
60
61
62
63
64
65
66
# File 'app/presenters/hyrax/collection_presenter.rb', line 57

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


212
213
214
215
# File 'app/presenters/hyrax/collection_presenter.rb', line 212

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

#available_parent_collections(scope:) ⇒ Object

Deprecated.

this implementation requires an extra db round trip, had a buggy cacheing mechanism, and was largely duplicative of other code. all versions of this code are replaced by Hyrax::CollectionsHelper#available_parent_collections_data.


180
181
182
183
184
185
186
187
188
189
190
# File 'app/presenters/hyrax/collection_presenter.rb', line 180

def available_parent_collections(scope:)
  Deprecation.warn("#{self.class}#available_parent_collections is " \
                   "deprecated. Use available_parent_collections_data " \
                   "helper instead.")
  return @available_parents if @available_parents.present?
  collection = Hyrax.config.collection_class.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.to_json
end

Returns a download path for the banner file.

Returns:

  • (#to_s, nil)

    a download path for the banner file


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

def banner_file
  banner = CollectionBrandingInfo.find_by(collection_id: id, role: "banner")
  "/" + banner.local_path.split("/")[-4..-1].join("/") if banner
end

#collection_type_badgeObject


113
114
115
# File 'app/presenters/hyrax/collection_presenter.rb', line 113

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

#create_many_work_types?Boolean

Returns:

  • (Boolean)

163
164
165
# File 'app/presenters/hyrax/collection_presenter.rb', line 163

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


159
160
161
# File 'app/presenters/hyrax/collection_presenter.rb', line 159

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

#draw_select_work_modal?Boolean

Returns:

  • (Boolean)

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

def draw_select_work_modal?
  create_many_work_types?
end

#first_work_typeObject


171
172
173
# File 'app/presenters/hyrax/collection_presenter.rb', line 171

def first_work_type
  create_work_presenter.first_model
end

#logo_recordObject


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

def logo_record
  CollectionBrandingInfo.where(collection_id: id, role: "logo")
                        .select(:local_path, :alt_text, :target_url).map do ||
    { alttext: .alt_text,
      file: File.split(.local_path).last,
      file_location: "/#{.local_path.split('/')[-4..-1].join('/')}",
      linkurl: .target_url }
  end
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)


199
200
201
202
203
204
# File 'app/presenters/hyrax/collection_presenter.rb', line 199

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.


124
125
126
# File 'app/presenters/hyrax/collection_presenter.rb', line 124

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

#show_pathObject


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

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

#sizeString

Deprecated.

to be removed in 4.0.0; this feature was replaced with a hard-coded null implementation

Returns 'unknown'.

Returns:

  • (String)

    'unknown'


71
72
73
74
75
76
77
78
# File 'app/presenters/hyrax/collection_presenter.rb', line 71

def size
  Deprecation.warn('#size has been deprecated for removal in Hyrax 4.0.0; ' \
                   'The implementation of the indexed Collection size ' \
                   'feature is extremely inefficient, so it has been removed. ' \
                   'This method now returns a hard-coded `"unknown"` for ' \
                   'compatibility.')
  'unknown'
end

#terms_with_valuesObject


50
51
52
# File 'app/presenters/hyrax/collection_presenter.rb', line 50

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

#total_itemsObject


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

def total_items
  field_pairs = { "member_of_collection_ids_ssim" => id.to_s }
  SolrQueryService.new
                  .with_field_pairs(field_pairs: field_pairs)
                  .count
end

#total_parent_collectionsObject

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


118
119
120
# File 'app/presenters/hyrax/collection_presenter.rb', line 118

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

#total_viewable_collectionsObject


104
105
106
107
108
109
110
111
# File 'app/presenters/hyrax/collection_presenter.rb', line 104

def total_viewable_collections
  field_pairs = { "member_of_collection_ids_ssim" => id.to_s }
  SolrQueryService.new
                  .with_field_pairs(field_pairs: field_pairs)
                  .with_generic_type(generic_type: "Collection")
                  .accessible_by(ability: current_ability)
                  .count
end

#total_viewable_itemsObject


87
88
89
90
91
92
93
# File 'app/presenters/hyrax/collection_presenter.rb', line 87

def total_viewable_items
  field_pairs = { "member_of_collection_ids_ssim" => id.to_s }
  SolrQueryService.new
                  .with_field_pairs(field_pairs: field_pairs)
                  .accessible_by(ability: current_ability)
                  .count
end

#total_viewable_worksObject


95
96
97
98
99
100
101
102
# File 'app/presenters/hyrax/collection_presenter.rb', line 95

def total_viewable_works
  field_pairs = { "member_of_collection_ids_ssim" => id.to_s }
  SolrQueryService.new
                  .with_field_pairs(field_pairs: field_pairs)
                  .with_generic_type(generic_type: "Work")
                  .accessible_by(ability: current_ability)
                  .count
end

#user_can_create_new_nest_collection?Boolean

Returns:

  • (Boolean)

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

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

#user_can_nest_collection?Boolean

Returns:

  • (Boolean)

128
129
130
# File 'app/presenters/hyrax/collection_presenter.rb', line 128

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