192 lines
6.9 KiB
Ruby
192 lines
6.9 KiB
Ruby
module UsersHelper
|
|
# Can be used to check ownership of items
|
|
def is_author_of?(item)
|
|
if @own_bookmarks && item.is_a?(Bookmark)
|
|
@own_bookmarks.include?(item)
|
|
elsif @own_works && item.is_a?(Work)
|
|
@own_works.include?(item)
|
|
else
|
|
current_user.is_a?(User) && current_user.is_author_of?(item)
|
|
end
|
|
end
|
|
|
|
# Can be used to check if user is maintainer of any collections
|
|
def is_maintainer?
|
|
current_user.is_a?(User) ? current_user.maintained_collections.present? : false
|
|
end
|
|
|
|
# Prints user pseuds with links to anchors for each pseud on the page and the description as the title
|
|
def print_pseuds(user)
|
|
user.pseuds.collect(&:name).join(', ')
|
|
end
|
|
|
|
# Determine which icon to show on user pages
|
|
def standard_icon(pseud = nil)
|
|
return "/images/skins/iconsets/default/icon_user.png" unless pseud&.icon&.attached?
|
|
|
|
rails_blob_url(pseud.icon.variant(:standard))
|
|
end
|
|
|
|
# no alt text if there isn't specific alt text
|
|
def icon_display(user = nil, pseud = nil)
|
|
path = user ? (pseud ? user_pseud_path(pseud.user, pseud) : user_path(user)) : nil
|
|
pseud ||= user.default_pseud if user
|
|
icon = standard_icon(pseud)
|
|
alt_text = pseud.try(:icon_alt_text) || nil
|
|
|
|
if path
|
|
link_to image_tag(icon, alt: alt_text, class: 'icon', skip_pipeline: true), path
|
|
else
|
|
image_tag(icon, class: 'icon', skip_pipeline: true)
|
|
end
|
|
end
|
|
|
|
# Prints coauthors
|
|
def print_coauthors(user)
|
|
user.coauthors.collect(&:name).join(', ')
|
|
end
|
|
|
|
# Prints link to bookmarks page with user-appropriate number of bookmarks
|
|
# (The total should reflect the number of bookmarks the user can actually see.)
|
|
def bookmarks_link(user, pseud = nil)
|
|
return pseud_bookmarks_link(pseud) if pseud.present? && !pseud.new_record?
|
|
|
|
total = SearchCounts.bookmark_count_for_user(user)
|
|
span_if_current ts('Bookmarks (%{bookmark_number})', bookmark_number: total.to_s), user_bookmarks_path(@user)
|
|
end
|
|
|
|
def pseud_bookmarks_link(pseud)
|
|
total = SearchCounts.bookmark_count_for_pseud(pseud)
|
|
span_if_current ts('Bookmarks (%{bookmark_number})', bookmark_number: total.to_s), user_pseud_bookmarks_path(@user, pseud)
|
|
end
|
|
|
|
# Prints link to works page with user-appropriate number of works
|
|
# (The total should reflect the number of works the user can actually see.)
|
|
def works_link(user, pseud = nil)
|
|
return pseud_works_link(pseud) if pseud.present? && !pseud.new_record?
|
|
|
|
total = SearchCounts.work_count_for_user(user)
|
|
span_if_current ts('Works (%{works_number})', works_number: total.to_s), user_works_path(@user)
|
|
end
|
|
|
|
def pseud_works_link(pseud)
|
|
total = SearchCounts.work_count_for_pseud(pseud)
|
|
span_if_current ts('Works (%{works_number})', works_number: total.to_s), user_pseud_works_path(@user, pseud)
|
|
end
|
|
|
|
# Prints link to series page with user-appropriate number of series
|
|
def series_link(user, pseud = nil)
|
|
return pseud_series_link(pseud) if pseud.present? && !pseud.new_record?
|
|
|
|
total = if current_user.nil?
|
|
Series.visible_to_all.exclude_anonymous.for_user(user).count.size
|
|
else
|
|
Series.visible_to_registered_user.exclude_anonymous.for_user(user).count.size
|
|
end
|
|
span_if_current ts("Series (%{series_number})", series_number: total.to_s), user_series_index_path(user)
|
|
end
|
|
|
|
def pseud_series_link(pseud)
|
|
total = if current_user.nil?
|
|
Series.visible_to_all.exclude_anonymous.for_pseud(pseud).count.size
|
|
else
|
|
Series.visible_to_registered_user.exclude_anonymous.for_pseud(pseud).count.size
|
|
end
|
|
span_if_current ts("Series (%{series_number})", series_number: total.to_s), user_pseud_series_index_path(pseud.user, pseud)
|
|
end
|
|
|
|
def gifts_link(user)
|
|
if current_user.nil?
|
|
gift_number = user.gift_works.visible_to_all.distinct.count
|
|
else
|
|
gift_number = user.gift_works.visible_to_registered_user.distinct.count
|
|
end
|
|
span_if_current ts('Gifts (%{gift_number})', gift_number: gift_number.to_s), user_gifts_path(user)
|
|
end
|
|
|
|
def authored_items(pseud, work_counts = {}, rec_counts = {})
|
|
visible_works = pseud.respond_to?(:work_count) ? pseud.work_count.to_i : (work_counts[pseud.id] || 0)
|
|
visible_recs = pseud.respond_to?(:rec_count) ? pseud.rec_count.to_i : (rec_counts[pseud.id] || 0)
|
|
items = visible_works == 1 ? link_to(visible_works.to_s + ' work', user_pseud_works_path(pseud.user, pseud)) : (visible_works > 1 ? link_to(visible_works.to_s + ' works', user_pseud_works_path(pseud.user, pseud)) : '')
|
|
items += ', ' if (visible_works > 0) && (visible_recs > 0)
|
|
if visible_recs > 0
|
|
items += visible_recs == 1 ? link_to(visible_recs.to_s + ' rec', user_pseud_bookmarks_path(pseud.user, pseud, recs_only: true)) : link_to(visible_recs.to_s + ' recs', user_pseud_bookmarks_path(pseud.user, pseud, recs_only: true))
|
|
end
|
|
items.html_safe
|
|
end
|
|
|
|
def log_item_action_name(item)
|
|
action = item.action
|
|
|
|
return fnok_action_name(item) if fnok_action?(action)
|
|
|
|
case action
|
|
when ArchiveConfig.ACTION_ACTIVATE
|
|
t("users_helper.log.validated")
|
|
when ArchiveConfig.ACTION_ADD_ROLE
|
|
t("users_helper.log.role_added")
|
|
when ArchiveConfig.ACTION_REMOVE_ROLE
|
|
t("users_helper.log.role_removed")
|
|
when ArchiveConfig.ACTION_SUSPEND
|
|
t("users_helper.log.suspended")
|
|
when ArchiveConfig.ACTION_UNSUSPEND
|
|
t("users_helper.log.lift_suspension")
|
|
when ArchiveConfig.ACTION_BAN
|
|
t("users_helper.log.ban")
|
|
when ArchiveConfig.ACTION_WARN
|
|
t("users_helper.log.warn")
|
|
when ArchiveConfig.ACTION_RENAME
|
|
t("users_helper.log.rename")
|
|
when ArchiveConfig.ACTION_PASSWORD_CHANGE
|
|
t("users_helper.log.password_change")
|
|
when ArchiveConfig.ACTION_NEW_EMAIL
|
|
t("users_helper.log.email_change")
|
|
when ArchiveConfig.ACTION_TROUBLESHOOT
|
|
t("users_helper.log.troubleshot")
|
|
when ArchiveConfig.ACTION_NOTE
|
|
t("users_helper.log.note")
|
|
when ArchiveConfig.ACTION_PASSWORD_RESET
|
|
t("users_helper.log.password_reset")
|
|
end
|
|
end
|
|
|
|
# Give the TOS field in the new user form a different name in non-production environments
|
|
# so that it can be filtered out of the log, for ease of debugging
|
|
def tos_field_name
|
|
if Rails.env.production?
|
|
'terms_of_service'
|
|
else
|
|
'terms_of_service_non_production'
|
|
end
|
|
end
|
|
|
|
private
|
|
|
|
def fnok_action?(action)
|
|
[
|
|
ArchiveConfig.ACTION_ADD_FNOK,
|
|
ArchiveConfig.ACTION_REMOVE_FNOK,
|
|
ArchiveConfig.ACTION_ADDED_AS_FNOK,
|
|
ArchiveConfig.ACTION_REMOVED_AS_FNOK
|
|
].include?(action)
|
|
end
|
|
|
|
def fnok_action_name(item)
|
|
action_leaf =
|
|
case item.action
|
|
when ArchiveConfig.ACTION_ADD_FNOK
|
|
"has_added"
|
|
when ArchiveConfig.ACTION_REMOVE_FNOK
|
|
"has_removed"
|
|
when ArchiveConfig.ACTION_ADDED_AS_FNOK
|
|
"was_added"
|
|
when ArchiveConfig.ACTION_REMOVED_AS_FNOK
|
|
"was_removed"
|
|
end
|
|
|
|
t(
|
|
"users_helper.log.fnok.#{action_leaf}",
|
|
user_id: item.fnok_user_id
|
|
)
|
|
end
|
|
end
|