102 lines
3.1 KiB
Ruby
102 lines
3.1 KiB
Ruby
module EventSessionHelper
|
|
|
|
def event_session_img(event_session)
|
|
|
|
# need to figure out img, width, height
|
|
|
|
# prefer the session URL if specified; otherwise use the band/user
|
|
url = nil
|
|
width = nil
|
|
height = nil
|
|
|
|
if event_session.img_url
|
|
url = image_path(event_session.img_url)
|
|
else
|
|
url = resolve_avatarables(event_session.band, event_session.user, allow_none: true)
|
|
url = image_path(url) if url
|
|
end
|
|
|
|
if url
|
|
width = event_session.img_width
|
|
height = event_session.img_height
|
|
else
|
|
url = image_path('web/logo-256.png')
|
|
width = 115
|
|
end
|
|
|
|
content_tag(:img, nil, src: url, width: width, height: height)
|
|
end
|
|
|
|
def event_session_title(event_session)
|
|
return event_session.band.name if event_session.band
|
|
return event_session.user.name if event_session.user
|
|
'TBD'
|
|
end
|
|
|
|
def event_session_start_hour(event_session)
|
|
return 'TBD' unless event_session.starts_at
|
|
timezone = ActiveSupport::TimeZone.new('Central Time (US & Canada)')
|
|
timezone.at(event_session.starts_at.to_i).strftime('%l:%M %P')
|
|
end
|
|
|
|
def fetch_last_session(event_session)
|
|
# if no pinned state, then we try to find if there is a session currently on going during the specified time range
|
|
# if so, then we are playing.
|
|
# if there has been none, we say it's still coming,
|
|
# if there has been at least one, and it's over, we say session over
|
|
query = MusicSession.where(fan_access: true).where(created_at: (event_session.starts_at - 12.hours)..(event_session.ends_at + 12.hours))
|
|
if event_session.user_id
|
|
query = query.where(user_id: event_session.user_id)
|
|
elsif event_session.band_id
|
|
query = query.where(band_id: event_session.band_id)
|
|
else
|
|
raise 'invalid state in event_session_button'
|
|
end
|
|
|
|
query.order('created_at DESC').first
|
|
end
|
|
|
|
def event_session_button(event_session)
|
|
|
|
state = nil # can be :not_started, :over, :playing
|
|
state = event_session.pinned_state if event_session.pinned_state
|
|
if state
|
|
|
|
music_session = fetch_last_session(event_session)
|
|
|
|
elsif !state && (event_session.starts_at && event_session.ends_at && (event_session.user_id || event_session.band_id))
|
|
|
|
music_session = fetch_last_session(event_session)
|
|
|
|
if music_session
|
|
if music_session.session_removed_at
|
|
state = 'over'
|
|
else
|
|
state = 'playing'
|
|
end
|
|
else
|
|
state = 'not_started'
|
|
end
|
|
end
|
|
|
|
if state == 'over'
|
|
content_tag(:a, 'SESSION ENDED', href: music_session.nil? ? '#' : music_session_detail_path(music_session.id), class: 'button-grey')
|
|
elsif state == 'playing'
|
|
content_tag(:a, '', href: music_session_detail_path(music_session.id), class: 'button-orange') do
|
|
content_tag(:span, image_tag('content/icon_playbutton.png', :width => 20, height: 20, align: 'absmiddle', class:'listen-now-play') + 'LISTEN NOW')
|
|
end
|
|
elsif state == 'not_started'
|
|
nil
|
|
else
|
|
nil
|
|
end
|
|
|
|
end
|
|
|
|
def event_session_description(event_session)
|
|
return event_session.band.biography if event_session.band
|
|
return event_session.user.biography if event_session.user
|
|
''
|
|
end
|
|
end
|