diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index 440204b3..7d898595 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -518,4 +518,22 @@ module ApplicationHelper def link_if_alive(version, link_text, link_url) version.item ? link_to(link_text, link_url) : link_text end + + def canceled_replacement_event_label(event, event_schedule, *label_classes) + if event.state == 'canceled' || event.state == 'withdrawn' + content_tag :span, 'CANCELED', class: (['label', 'label-danger'] + label_classes) + elsif event_schedule.present? && event_schedule.replacement? + content_tag :span, 'REPLACEMENT', class: (['label', 'label-info'] + label_classes) + end + end + + def replacement_event_notice(event_schedule) + if event_schedule.present? && event_schedule.replacement? + replaced_event = (event_schedule.intersecting_events.withdrawn.first || event_schedule.intersecting_events.canceled.first).event + content_tag :span do + concat content_tag :span, 'Please note that this talk replaces ' + concat link_to replaced_event.title, conference_program_proposal_path(@conference.short_title, replaced_event.id) + end + end + end end diff --git a/app/models/event_schedule.rb b/app/models/event_schedule.rb index cb630acd..b83e7c8c 100644 --- a/app/models/event_schedule.rb +++ b/app/models/event_schedule.rb @@ -31,6 +31,10 @@ class EventSchedule < ActiveRecord::Base room.event_schedules.where(start_time: start_time, schedule: schedule).where.not(id: id) end + def replacement? + event.state == 'confirmed' && (!intersecting_events.canceled.empty? || !intersecting_events.withdrawn.empty?) + end + private def conference_id diff --git a/app/views/proposals/show.html.haml b/app/views/proposals/show.html.haml index 7953a695..432a5dcd 100644 --- a/app/views/proposals/show.html.haml +++ b/app/views/proposals/show.html.haml @@ -23,11 +23,6 @@ - if can? :schedule, @conference = link_to "Schedule", conference_schedule_path(@conference.short_title), :class =>"btn btn-success" - - if @event.state == 'canceled' || @event.state == 'withdrawn' - %span.label.label-danger CANCELED - - elsif @event.state == 'confirmed' && @event_schedule.present? && (!@event_schedule.intersecting_events.canceled.empty? || !@event_schedule.intersecting_events.withdrawn.empty?) - %span.label.label-info REPLACEMENT - .row .col-md-3 .speakerinfo @@ -48,16 +43,9 @@ .col-md-9 .row .col-md-12 - -if @event_schedule.present? - .lead - - if @event.state == 'confirmed' && !@event_schedule.intersecting_events.withdrawn.empty? - = "Please note that this talk replaces" - = link_to @event_schedule.intersecting_events.withdrawn.first.event.title, - conference_program_proposal_path(@conference.short_title, @event_schedule.intersecting_events.withdrawn.first.event.id) - - elsif @event.state == 'confirmed' && !@event_schedule.intersecting_events.canceled.empty? - = "Please note that this talk replaces" - = link_to @event_schedule.intersecting_events.canceled.first.title, - conference_program_proposal_path(@conference.short_title, @event_schedule.intersecting_events.canceled.first.event.id) + .lead + = canceled_replacement_event_label(@event, @event_schedule) + = replacement_event_notice(@event_schedule) - if @event.commercials.empty? %h5.text-warning diff --git a/app/views/schedules/_event.html.haml b/app/views/schedules/_event.html.haml index 2c988e59..49116e42 100644 --- a/app/views/schedules/_event.html.haml +++ b/app/views/schedules/_event.html.haml @@ -4,6 +4,11 @@ = image_tag speaker.gravatar_url, :class => "img-circle pull-right all-speaker-pic", | :alt => speaker.name, | :title => speaker.name | + + %p + = canceled_replacement_event_label(event, event_schedule) + = replacement_event_notice(event_schedule) + %span.h3 = event.title %br diff --git a/app/views/schedules/_schedule_item.html.haml b/app/views/schedules/_schedule_item.html.haml index 5d3f97c6..ffed1716 100644 --- a/app/views/schedules/_schedule_item.html.haml +++ b/app/views/schedules/_schedule_item.html.haml @@ -5,10 +5,7 @@ %div{ class: "elipsis break-words event-title", | style: "-webkit-line-clamp: #{ event_lines(@rooms) }; height: #{ event_height(@rooms) }px;"} | - - if event.state == 'canceled' || event.state == 'withdrawn' - %span.label.label-danger.schedule-label CANCELED - - elsif event.state == 'confirmed' && (!event_schedule.intersecting_events.canceled.empty? || !event_schedule.intersecting_events.withdrawn.empty?) - %span.label.label-info.schedule-label REPLACEMENT + = canceled_replacement_event_label(event, event_schedule, 'schedule-label') = event.title