139 lines
5.5 KiB
Ruby
139 lines
5.5 KiB
Ruby
|
|
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
|