diff --git a/app/controllers/conference_administration_controller.rb b/app/controllers/conference_administration_controller.rb index 193edb3..733efd4 100644 --- a/app/controllers/conference_administration_controller.rb +++ b/app/controllers/conference_administration_controller.rb @@ -1149,13 +1149,25 @@ class ConferenceAdministrationController < ApplicationController def admin_update_workshop_times case params[:button] when 'save_block' + empty_param = empty_params(:time, :time_span, :days) + if empty_param.present? + set_error_message "save_block_#{empty_param}_required".to_sym + else + @this_conference.workshop_blocks ||= [] + @this_conference.workshop_blocks[params[:workshop_block].to_i] = { + 'time' => params[:time], + 'length' => params[:time_span], + 'days' => params[:days].keys + } + @this_conference.save + set_success_message :block_saved + end + return false + when 'delete_block' @this_conference.workshop_blocks ||= [] - @this_conference.workshop_blocks[params[:workshop_block].to_i] = { - 'time' => params[:time], - 'length' => params[:time_span], - 'days' => params[:days].keys - } + @this_conference.workshop_blocks.delete_at(params[:workshop_block].to_i) @this_conference.save + set_success_message :block_deleted return false end @@ -1163,6 +1175,19 @@ class ConferenceAdministrationController < ApplicationController return nil end + def admin_update_publish_schedule + case params[:button] + when 'publish' + @this_conference.workshop_schedule_published = !@this_conference.workshop_schedule_published + @this_conference.save + set_success_message "schedule_#{@this_conference.workshop_schedule_published ? '' : 'un'}published".to_sym + return false + end + + do_404 + return false + end + def admin_update_schedule case params[:button] when 'deschedule_workshop' @@ -1207,18 +1232,6 @@ class ConferenceAdministrationController < ApplicationController return nil end - def admin_update_schedule - case params[:button] - when 'publish' - @this_conference.workshop_schedule_published = !@this_conference.workshop_schedule_published - @this_conference.save - return false - end - - do_404 - return false - end - def admin_update_providers case params[:button] when 'save_distance' @@ -1243,4 +1256,8 @@ class ConferenceAdministrationController < ApplicationController end return nil end + + def empty_params(*args) + get_empty(params, args) + end end diff --git a/app/views/conference_administration/_schedule.html.haml b/app/views/conference_administration/_schedule.html.haml index 03ffdbe..8a05083 100644 --- a/app/views/conference_administration/_schedule.html.haml +++ b/app/views/conference_administration/_schedule.html.haml @@ -1,85 +1,86 @@ -= columns(medium: 12) do - - conference = @this_conference || @conference - - if conference.event_locations.blank? && @entire_page - .warning-info=_'articles.admin.schedule.no_locations_warning' - - else - - add_inline_script :schedule if @entire_page - #schedule-preview - - @schedule.each do | day, data | - %h4=date(day, :weekday) - %table.schedule{class: [data[:locations].present? ? 'has-locations' : 'no-locations', "locations-#{data[:num_locations]}"]} - - if data[:locations].present? && data[:locations].values.first != :add - %thead - %tr - %th.corner - - data[:locations].each do | id, location | - %th=location.is_a?(Symbol) ? '' : location.title - %tbody - - data[:times].each do | time, time_data | - %tr - - rowspan = (time_data[:length] * 2).to_i - %th=time(time) - - if time_data[:type] == :workshop += row do + = columns(medium: 12) do + - conference = @this_conference || @conference + - if conference.event_locations.blank? && @entire_page + .warning-info=_'articles.admin.schedule.no_locations_warning' + - else + - add_inline_script :schedule if @entire_page + #schedule-preview + - @schedule.each do | day, data | + %h4=date(day, :weekday) + %table.schedule{class: [data[:locations].present? ? 'has-locations' : 'no-locations', "locations-#{data[:num_locations]}"]} + - if data[:locations].present? && data[:locations].values.first != :add + %thead + %tr + %th.corner - data[:locations].each do | id, location | - - if time_data[:item][:workshops][id].present? - - workshop = time_data[:item][:workshops][id][:workshop] - - status = time_data[:item][:workshops][id][:status] - - else - - workshop = status = nil - %td{class: [time_data[:type], workshop.present? ? :filled : :open], rowspan: rowspan, data: workshop.present? ? nil : { block: time_data[:item][:block], day: day, location: id }} - - if workshop.present? && workshop.event_location.present? - = link_to view_workshop_path(@conference.slug, workshop.id), class: 'event-detail-link' do - .details - .title=workshop.title - %template.event-details{data: { href: view_workshop_path(@conference.slug, workshop.id) }} - %h1.title=workshop.title - %p.address - = workshop.event_location.title + _!(': ') - = location_link workshop.event_location - .workshop-description= richtext workshop.info, 1 - - if @can_edit - = form_tag administration_update_path(conference.slug, @admin_step), class: 'deschedule-workshop' do - .status - .conflict-score - %span.title Conflicts: - %span.value="#{status[:conflict_score]} / #{workshop.interested.size}" - - if status[:errors].present? - .errors - - status[:errors].each do | error | - .error=_"errors.messages.schedule.#{error[:name].to_s}", vars: error[:i18nVars] - = hidden_field_tag :id, workshop.id - = button_tag :deschedule, value: :deschedule_workshop, class: [:delete, :small] - - elsif @can_edit - .title="Block #{time_data[:item][:block] + 1}" - - elsif time_data[:type] != :nil - %td{class: time_data[:type], rowspan: rowspan, colspan: data[:locations].present? ? data[:locations].size : 1} - - case time_data[:type] - - when :meal - - location = EventLocation.where(id: time_data[:item]['location'].to_i).first - - if location.present? - %a.event-detail-link + %th=location.is_a?(Symbol) ? '' : location.title + %tbody + - data[:times].each do | time, time_data | + %tr + - rowspan = (time_data[:length] * 2).to_i + %th=time(time) + - if time_data[:type] == :workshop + - data[:locations].each do | id, location | + - if time_data[:item][:workshops][id].present? + - workshop = time_data[:item][:workshops][id][:workshop] + - status = time_data[:item][:workshops][id][:status] + - else + - workshop = status = nil + %td{class: [time_data[:type], workshop.present? ? :filled : :open], rowspan: rowspan, data: workshop.present? ? nil : { block: time_data[:item][:block], day: day, location: id }} + - if workshop.present? && workshop.event_location.present? + = link_to view_workshop_path(@conference.slug, workshop.id), class: 'event-detail-link' do .details - .title= time_data[:item]['title'] - .location= location.title - %template.event-details - %h1.title=time_data[:item]['title'] + .title=workshop.title + %template.event-details{data: { href: view_workshop_path(@conference.slug, workshop.id) }} + %h1.title=workshop.title %p.address - = location.title + _!(': ') - = location_link location - - when :event - - if time_data[:item].event_location.present? - %a.event-detail-link - .details - .title= time_data[:item][:title] - .location= time_data[:item].event_location.title - %template.event-details - %h1.title=time_data[:item][:title] - %p.address - = time_data[:item].event_location.title + _!(': ') - = location_link time_data[:item].event_location - = richtext time_data[:item][:info], 1 - - if @entire_page - #workshop-selector - = form_tag administration_update_path(@this_conference.slug, @admin_step), class: 'workshop-dlg', id: 'workshop-table-form' do - %h3 Select a Workshop - #table + = workshop.event_location.title + _!(': ') + = location_link workshop.event_location + .workshop-description= richtext workshop.info, 1 + - if @can_edit + = form_tag administration_update_path(conference.slug, @admin_step), class: 'deschedule-workshop' do + .status + .conflict-score + %span.title Conflicts: + %span.value="#{status[:conflict_score]} / #{workshop.interested.size}" + - if status[:errors].present? + .errors + - status[:errors].each do | error | + .error=_"errors.messages.schedule.#{error[:name].to_s}", vars: error[:i18nVars] + = hidden_field_tag :id, workshop.id + = button_tag :deschedule, value: :deschedule_workshop, class: [:delete, :small] + - elsif @can_edit + .title="Block #{time_data[:item][:block] + 1}" + - elsif time_data[:type] != :nil + %td{class: time_data[:type], rowspan: rowspan, colspan: data[:locations].present? ? data[:locations].size : 1} + - case time_data[:type] + - when :meal + - location = EventLocation.where(id: time_data[:item]['location'].to_i).first + - if location.present? + %a.event-detail-link + .details + .title= time_data[:item]['title'] + .location= location.title + %template.event-details + %h1.title=time_data[:item]['title'] + %p.address + = location.title + _!(': ') + = location_link location + - when :event + - if time_data[:item].event_location.present? + %a.event-detail-link + .details + .title= time_data[:item][:title] + .location= time_data[:item].event_location.title + %template.event-details + %h1.title=time_data[:item][:title] + %p.address + = time_data[:item].event_location.title + _!(': ') + = location_link time_data[:item].event_location + = richtext time_data[:item][:info], 1 + - if @entire_page + #workshop-selector + = form_tag administration_update_path(@this_conference.slug, @admin_step), class: 'workshop-dlg', id: 'workshop-table-form' do + %h3 Select a Workshop + #table diff --git a/app/views/conferences/_conference.html.haml b/app/views/conferences/_conference.html.haml index eb41317..ec0b923 100644 --- a/app/views/conferences/_conference.html.haml +++ b/app/views/conferences/_conference.html.haml @@ -21,7 +21,7 @@ - if conference.workshop_schedule_published - add_inline_script :home_schedule %h3=_'articles.workshops.headings.Schedule' - = render 'conferences/admin/schedule' + = render 'conference_administration/schedule' - else %h3=_'articles.workshops.headings.Proposed_Workshops' %p=_'articles.workshops.paragraphs.Proposed_Workshops' diff --git a/app/views/conferences/view.html.haml b/app/views/conferences/view.html.haml index 55eca23..4c7e5a4 100644 --- a/app/views/conferences/view.html.haml +++ b/app/views/conferences/view.html.haml @@ -2,4 +2,4 @@ = @this_conference.poster.full.url || image_path('default_poster.jpg') - content_for :title do =@this_conference.title -= render 'conferences/conference', conference: @this_conference, links: @links += render 'conferences/conference', conference: @this_conference, links: @links, sections: [:info, :workshops] diff --git a/config/locales/en.yml b/config/locales/en.yml index 3bb98c0..dee6f17 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -202,6 +202,9 @@ en: error_removing_org_member: Error removing user from organization error_adding_administrator: Error adding administrator error_removing_administrator: Error removing administrator + save_block_time_required: Time is required + save_block_time_span_required: Length is required + save_block_days_required: Please select at least one day template: body: 'There were problems with the following fields:' header: @@ -244,6 +247,10 @@ en: administrator_added: Administrator added to conference administrator_removed: Administrator removed from conference distance_saved: Provider options updated + block_saved: Workshop time has been saved + block_deleted: Workshop time has been deleted + schedule_published: Your schedule has been published and should be visible on your conference page + schedule_unpublished: Your schedule has been un-published and should no longer be visible to users helpers: select: prompt: Please select