otwarchive-symphonyarchive/app/helpers/collections_helper.rb

139 lines
5.5 KiB
Ruby
Raw Permalink Normal View History

2026-03-11 22:22:11 +00:00
module CollectionsHelper
# Generates a draggable, pop-up div which contains the add-to-collection form
def collection_link(item)
if item.class == Chapter
item = item.work
end
if logged_in?
if item.class == Work
link_to ts("Add To Collection"), new_work_collection_item_path(item), remote: true
elsif item.class == Bookmark
link_to ts("Add To Collection"), new_bookmark_collection_item_path(item)
end
end
end
# show a section if it's not empty or if the parent collection has it
def show_collection_section(collection, section)
if ["intro", "faq", "rules"].include?(section) # just a check that we're not using a bogus section string
!collection.collection_profile.send(section).blank? || collection.parent && !collection.parent.collection_profile.send(section).blank?
end
end
# show collection preface if at least one section of the profile (or the parent collection's profile) is not empty
def show_collection_preface(collection)
show_collection_section(collection, "intro") || show_collection_section(collection, "faq") || show_collection_section(collection, "rules")
end
# show navigation to relevant sections of the profile if needed
def show_collection_profile_navigation(collection, section)
["intro", "faq", "rules"].each do |s|
if show_collection_section(collection, s) && s != section
return true # if at least one other section than the current one is not blank, we need the navigation; break out of the each...do
end
end
return false # if it passed through all tests above and not found a match, then we don't need the navigation
end
def challenge_class_name(collection)
collection.challenge.class.name.demodulize.tableize.singularize
end
def show_collections_data(collections)
collections.collect { |coll| link_to coll.title, collection_path(coll) }.join(ArchiveConfig.DELIMITER_FOR_OUTPUT).html_safe
end
def challenge_assignment_byline(assignment)
if assignment.offer_signup && assignment.offer_signup.pseud
assignment.offer_signup.pseud.byline
elsif assignment.pinch_hitter
assignment.pinch_hitter.byline + "* (pinch hitter)"
else
""
end
end
def challenge_assignment_email(assignment)
if assignment.offer_signup && assignment.offer_signup.pseud
user = assignment.offer_signup.pseud.user
elsif assignment.pinch_hitter
user = assignment.pinch_hitter.user
else
user = nil
end
if user
mailto_link user, subject: "[#{(@collection.title)}] Message from Collection Maintainer"
end
end
def collection_item_display_title(collection_item)
item = collection_item.item
item_type = collection_item.item_type
if item_type == 'Bookmark' && item.present? && item.bookmarkable.present?
# .html_safe is necessary for titles with ampersands etc when inside ts()
ts('Bookmark for %{title}', title: item.bookmarkable.title).html_safe
elsif item_type == 'Bookmark'
ts('Bookmark of deleted item')
elsif item_type == 'Work' && item.posted?
item.title
elsif item_type == 'Work' && !item.posted?
ts('%{title} (Draft)', title: item.title).html_safe
# Prevent 500 error if collection_item is not destroyed when collection_item.item is
else
ts('Deleted or unknown item')
end
end
def collection_item_approval_options_label(actor:, item_type:)
item_type = item_type.downcase
actor = actor.downcase
case actor
when "user"
t("collections_helper.collection_item_approval_options_label.user.#{item_type}")
when "collection"
t("collections_helper.collection_item_approval_options_label.collection")
end
end
# i18n-tasks-use t('collections_helper.collection_item_approval_options.collection.approved')
# i18n-tasks-use t('collections_helper.collection_item_approval_options.collection.rejected')
# i18n-tasks-use t('collections_helper.collection_item_approval_options.collection.unreviewed')
# i18n-tasks-use t('collections_helper.collection_item_approval_options.user.bookmark.approved')
# i18n-tasks-use t('collections_helper.collection_item_approval_options.user.bookmark.rejected')
# i18n-tasks-use t('collections_helper.collection_item_approval_options.user.bookmark.unreviewed')
# i18n-tasks-use t('collections_helper.collection_item_approval_options.user.work.approved')
# i18n-tasks-use t('collections_helper.collection_item_approval_options.user.work.rejected')
# i18n-tasks-use t('collections_helper.collection_item_approval_options.user.work.unreviewed')
def collection_item_approval_options(actor:, item_type:)
item_type = item_type.downcase
actor = actor.downcase
key = case actor
when "user"
"collections_helper.collection_item_approval_options.user.#{item_type}"
when "collection"
"collections_helper.collection_item_approval_options.collection"
end
[
[t("#{key}.unreviewed"), :unreviewed],
[t("#{key}.approved"), :approved],
[t("#{key}.rejected"), :rejected]
]
end
# Fetches the icon URL for the given collection, using the standard (100x100) variant.
def standard_icon_url(collection)
return "/images/skins/iconsets/default/icon_collection.png" unless collection.icon.attached?
rails_blob_url(collection.icon.variant(:standard))
end
# Wraps the collection's standard_icon_url in an image tag
def collection_icon_display(collection)
image_tag(standard_icon_url(collection), size: "100x100", alt: collection.icon_alt_text, class: "icon", skip_pipeline: true)
end
end