Merge branch 'master' into responsive_charts
This commit is contained in:
commit
56c8328b2f
273 changed files with 7772 additions and 3171 deletions
12
app/views/admin/cfps/_booths_cfp.html.haml
Normal file
12
app/views/admin/cfps/_booths_cfp.html.haml
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
%dt
|
||||
Start Date
|
||||
%dd
|
||||
= @cfp.start_date.strftime('%A, %B %e. %Y')
|
||||
%dt
|
||||
End Date
|
||||
%dd
|
||||
= @cfp.end_date.strftime('%A, %B %e. %Y')
|
||||
%dt
|
||||
Days Left
|
||||
%dd
|
||||
= pluralize(@cfp.remaining_days, 'day')
|
||||
38
app/views/admin/cfps/_events_cfp.html.haml
Normal file
38
app/views/admin/cfps/_events_cfp.html.haml
Normal file
|
|
@ -0,0 +1,38 @@
|
|||
%dt
|
||||
Start Date:
|
||||
%dd#start_date
|
||||
= @cfp.start_date.strftime('%A, %B %-d. %Y')
|
||||
%dt
|
||||
End Date:
|
||||
%dd#end_date
|
||||
= @cfp.end_date.strftime('%A, %B %-d. %Y')
|
||||
%dt
|
||||
Days Left:
|
||||
%dd
|
||||
= pluralize(@cfp.remaining_days, 'day')
|
||||
%dt
|
||||
Event types:
|
||||
%dd
|
||||
= event_types(@conference)
|
||||
%dt
|
||||
Tracks:
|
||||
%dd
|
||||
= tracks(@conference)
|
||||
%dt
|
||||
Public Schedule
|
||||
%dd#schedule_public
|
||||
- if @program.schedule_public
|
||||
Yes
|
||||
- else
|
||||
No
|
||||
%dt
|
||||
Schedule changeable?
|
||||
%dd#schedule_changes
|
||||
- if @program.schedule_fluid
|
||||
Yes
|
||||
- else
|
||||
No
|
||||
%dt
|
||||
Rating Levels
|
||||
%dd#rating
|
||||
= @program.rating
|
||||
|
|
@ -4,8 +4,9 @@
|
|||
%h1 Call for Papers
|
||||
.row
|
||||
.col-md-8
|
||||
= semantic_form_for(@cfp, url: admin_conference_program_cfp_path(@conference.short_title), html: {multipart: true}) do |f|
|
||||
= semantic_form_for(@cfp, url: (@cfp.new_record? ? admin_conference_program_cfps_path : admin_conference_program_cfp_path(@conference.short_title, @cfp)), html: {multipart: true}) do |f|
|
||||
= f.input :start_date, as: :string, input_html: { id: 'registration-period-start-datepicker', start_date: @conference.start_date, end_date: @conference.end_date, readonly: 'readonly' }
|
||||
= f.input :end_date, as: :string, input_html: { id: 'registration-period-end-datepicker', readonly: 'readonly' }
|
||||
= f.input :cfp_type, as: :select, collection: (@cfp.new_record? ? @program.remaining_cfp_types : [@cfp.cfp_type] + @program.remaining_cfp_types).map {|type| ["#{type.capitalize}", type]}, include_blank: false, label: 'Type', input_html: { class: 'select-help-toggle' }
|
||||
%p.text-right
|
||||
= f.action :submit, as: :button, button_html: { class: 'btn btn-primary' }
|
||||
|
|
|
|||
36
app/views/admin/cfps/index.html.haml
Normal file
36
app/views/admin/cfps/index.html.haml
Normal file
|
|
@ -0,0 +1,36 @@
|
|||
.row
|
||||
.col-md-12
|
||||
.page-header
|
||||
%h1 Call for Papers
|
||||
%p.text-muted
|
||||
Call for people to submit events to your conference
|
||||
- if @program.cfps
|
||||
.row
|
||||
.col-md-12
|
||||
%table.table.table-hover.datatable#tickets
|
||||
%thead
|
||||
%th Type
|
||||
%th Start Date
|
||||
%th End Date
|
||||
%th Days Left
|
||||
%th Actions
|
||||
%tbody
|
||||
- @program.cfps.each do |cfp|
|
||||
%tr
|
||||
%td
|
||||
= link_to(admin_conference_program_cfp_path(@conference.short_title, cfp.id)) do
|
||||
= cfp.cfp_type.capitalize
|
||||
%td
|
||||
= cfp.start_date.strftime('%A, %B %-d. %Y')
|
||||
%td
|
||||
= cfp.end_date.strftime('%A, %B %-d. %Y')
|
||||
%td
|
||||
= pluralize(cfp.remaining_days, 'day')
|
||||
%td
|
||||
.btn-group
|
||||
= link_to 'Edit', edit_admin_conference_program_cfp_path(@conference.short_title, cfp.id), method: :get, class: 'btn btn-primary'
|
||||
= link_to 'Delete', admin_conference_program_cfp_path(@conference.short_title, cfp.id), method: 'delete', class: 'btn btn-danger', data: { confirm: 'Are you sure you want to delete the CfP?' }
|
||||
- if can? :new, @program.cfps.new
|
||||
.row
|
||||
.col-md-12.text-right
|
||||
= link_to 'Create Call for Papers', new_admin_conference_program_cfp_path(@conference.short_title), class: 'btn btn-primary'
|
||||
|
|
@ -4,55 +4,13 @@
|
|||
%h1 Call for Papers
|
||||
%p.text-muted
|
||||
Call for people to submit events to your conference
|
||||
- if @cfp
|
||||
.row
|
||||
.col-md-8
|
||||
%dl.dl-horizontal
|
||||
%dt
|
||||
Start Date:
|
||||
%dd#start_date
|
||||
= @cfp.start_date.strftime('%A, %B %-d. %Y')
|
||||
%dt
|
||||
End Date:
|
||||
%dd#end_date
|
||||
= @cfp.end_date.strftime('%A, %B %-d. %Y')
|
||||
%dt
|
||||
Days Left:
|
||||
%dd
|
||||
= pluralize(@cfp.remaining_days, 'day')
|
||||
%dt
|
||||
Event types:
|
||||
%dd
|
||||
= event_types(@conference)
|
||||
%dt
|
||||
Tracks:
|
||||
%dd
|
||||
= tracks(@conference)
|
||||
%dt
|
||||
Public Schedule
|
||||
%dd#schedule_public
|
||||
- if @program.schedule_public
|
||||
Yes
|
||||
- else
|
||||
No
|
||||
%dt
|
||||
Schedule changeable?
|
||||
%dd#schedule_changes
|
||||
- if @program.schedule_fluid
|
||||
Yes
|
||||
- else
|
||||
No
|
||||
%dt
|
||||
Rating Levels
|
||||
%dd#rating
|
||||
= @program.rating
|
||||
.row
|
||||
.col-md-12.text-right
|
||||
= link_to(edit_admin_conference_program_cfp_path(@conference.short_title), class: 'btn btn-primary') do
|
||||
Edit
|
||||
= link_to(admin_conference_program_cfp_path(@conference.short_title), method: 'delete', class: 'btn btn-danger', data: { confirm: 'Are you sure you want to delete the CfP?' }) do
|
||||
Delete
|
||||
- else
|
||||
.row
|
||||
.col-md-12.text-right
|
||||
= link_to 'Create Call for Papers', new_admin_conference_program_cfp_path(@conference.short_title), class: 'btn btn-primary'
|
||||
.row
|
||||
.col-md-8
|
||||
%dl.dl-horizontal
|
||||
= render "#{@cfp.cfp_type}_cfp"
|
||||
.row
|
||||
.col-md-12.text-right
|
||||
= link_to(edit_admin_conference_program_cfp_path(@conference.short_title, @cfp.id), class: 'btn btn-primary') do
|
||||
Edit
|
||||
= link_to(admin_conference_program_cfp_path(@conference.short_title, @cfp.id), method: 'delete', class: 'btn btn-danger', data: { confirm: 'Are you sure you want to delete the CfP?' }) do
|
||||
Delete
|
||||
|
|
|
|||
|
|
@ -1,12 +1,12 @@
|
|||
.list-group
|
||||
%li.list-group-item
|
||||
%li{ 'class' => "list-group-item #{hidden_if_conference_over(conference)}" }
|
||||
%h4
|
||||
Conference progress
|
||||
.progress
|
||||
.progress-bar{ 'role' => 'progressbar', 'aria-valuenow' => "#{conference_progress['process']}", 'aria-valuemin' => '0',
|
||||
'aria-valuemax' => '100', 'style' => "width: #{conference_progress['process']}%;" }
|
||||
= conference_progress['process'] + '%'
|
||||
%li{ 'class' => "list-group-item #{class_for_todo(conference_progress['registration'])}" }
|
||||
%li{ 'class' => "list-group-item #{hidden_if_conference_over(conference)} #{class_for_todo(conference_progress['registration'])}" }
|
||||
%span{ 'class' => icon_for_todo(conference_progress['registration']) }
|
||||
- if can? :update, @conference
|
||||
- if conference.registration_period
|
||||
|
|
@ -15,46 +15,48 @@
|
|||
= link_to 'Set up registration period', new_admin_conference_registration_period_path(conference_progress['short_title'])
|
||||
- else
|
||||
Set up registration period
|
||||
%li{ 'class' => "list-group-item #{class_for_todo(conference_progress['cfp'])}" }
|
||||
%li{ 'class' => "list-group-item #{hidden_if_conference_over(conference)} #{class_for_todo(conference_progress['cfp'])}" }
|
||||
%span{ 'class' => icon_for_todo(conference_progress['cfp']) }
|
||||
- if can? :update, Cfp.new(program_id: @program.id)
|
||||
= link_to 'Set up call for papers', admin_conference_program_cfp_path(conference_progress['short_title'])
|
||||
= link_to 'Set up call for papers', admin_conference_program_cfps_path(conference_progress['short_title'])
|
||||
- else
|
||||
Set up call for papers
|
||||
%li{ 'class' => "list-group-item #{class_for_todo(conference_progress['venue'])}" }
|
||||
%span{ 'class' => icon_for_todo(conference_progress['venue']) }
|
||||
- if can? :update, @conference.venue
|
||||
%li{'class'=>"list-group-item #{hidden_if_conference_over(conference)} #{class_for_todo(conference_progress['venue'])}"}
|
||||
%span{'class'=>icon_for_todo(conference_progress['venue'])}
|
||||
- if can? :update, Venue.new(conference: @conference)
|
||||
- @conference.reload
|
||||
- if conference.venue
|
||||
= link_to 'Add venue', edit_admin_conference_venue_path(conference_progress['short_title'])
|
||||
- else
|
||||
= link_to 'Add venue', new_admin_conference_venue_path(conference_progress['short_title'])
|
||||
- else
|
||||
- @conference.reload
|
||||
Add venue
|
||||
%li{ 'class' => "list-group-item #{class_for_todo(conference_progress['rooms'])}" }
|
||||
%li{ 'class' => "list-group-item #{hidden_if_conference_over(conference)} #{class_for_todo(conference_progress['rooms'])}" }
|
||||
%span{ 'class' => icon_for_todo(conference_progress['rooms']) }
|
||||
- if @conference.venue && (can? :update, @conference.venue.rooms.build)
|
||||
= link_to 'Add rooms', admin_conference_venue_rooms_path(conference_progress['short_title'])
|
||||
- else
|
||||
Add rooms
|
||||
%li{ 'class' => "list-group-item #{class_for_todo(conference_progress['tracks'])}" }
|
||||
%li{ 'class' => "list-group-item #{hidden_if_conference_over(conference)} #{class_for_todo(conference_progress['tracks'])}" }
|
||||
%span{ 'class' => icon_for_todo(conference_progress['tracks']) }
|
||||
- if can? :update, @conference.program.tracks.build
|
||||
= link_to 'Add tracks', admin_conference_program_tracks_path(conference_progress['short_title'])
|
||||
- else
|
||||
Add tracks
|
||||
%li{ 'class' => "list-group-item #{class_for_todo(conference_progress['event_types'])}" }
|
||||
%li{ 'class' => "list-group-item #{hidden_if_conference_over(conference)} #{class_for_todo(conference_progress['event_types'])}" }
|
||||
%span{ 'class' => icon_for_todo(conference_progress['event_types']) }
|
||||
- if can? :update, @conference.program.event_types.build
|
||||
= link_to 'Add event types', admin_conference_program_event_types_path(conference_progress['short_title'])
|
||||
- else
|
||||
Add event types
|
||||
%li{ 'class' => "list-group-item #{class_for_todo(conference_progress['difficulty_levels'])}" }
|
||||
%li{ 'class' => "list-group-item #{hidden_if_conference_over(conference)} #{class_for_todo(conference_progress['difficulty_levels'])}" }
|
||||
%span{ 'class' => icon_for_todo(conference_progress['difficulty_levels']) }
|
||||
- if can? :update, @conference.program.difficulty_levels.build
|
||||
= link_to 'Add difficulty levels', admin_conference_program_difficulty_levels_path(conference_progress['short_title'])
|
||||
- else
|
||||
Add difficulty levels
|
||||
%li{ class: "list-group-item #{class_for_todo(conference_progress['splashpage'])}" }
|
||||
%li{ class: "list-group-item #{hidden_if_conference_over(conference)} #{class_for_todo(conference_progress['splashpage'])}" }
|
||||
%span{ 'class' => icon_for_todo(conference_progress['splashpage']) }
|
||||
- if can? :update, @conference
|
||||
= link_to 'Set up a Splashpage', admin_conference_splashpage_path(conference_progress['short_title'])
|
||||
|
|
|
|||
|
|
@ -17,6 +17,7 @@
|
|||
= image_tag @conference.picture.thumb.url
|
||||
= f.input :picture, label: false, hint: 'This will be displayed on the front page.'
|
||||
= f.hidden_field :picture_cache
|
||||
= f.input :ticket_layout, as: :select, collection: Conference.ticket_layouts.keys, hint: "Layout type for tickets of the conference."
|
||||
= f.inputs name: 'Scheduling' do
|
||||
= f.input :timezone, as: :time_zone, hint: 'The conference time zone'
|
||||
= f.input :start_date, as: :string, input_html: { id: 'conference-start-datepicker', readonly: 'readonly' }
|
||||
|
|
@ -24,5 +25,5 @@
|
|||
= f.input :start_hour, input_html: {size: 2, type: 'number', min: 0, max: 23}
|
||||
= f.input :end_hour, input_html: {size: 2, type: 'number', min: 1, max: 24}
|
||||
= f.inputs name: 'Registrations' do
|
||||
= f.input :registration_limit, as: :number, in: 0..9999, hint: 'Limit the number of registrations to the conference (0 no limit). You currently have ' + pluralize(@conference.registrations.count, 'registration')
|
||||
= f.input :registration_limit, as: :number, in: 0..9999, hint: 'Limit the number of registrations to the conference (0 no limit). Please note that the registration limit doesn\'t apply to speakers of confirmed events (they will still be able to register even if it has been reached). You currently have ' + pluralize(@conference.registrations.count, 'registration')
|
||||
= f.action :submit, as: :button, button_html: {class: 'btn btn-primary'}
|
||||
|
|
|
|||
|
|
@ -60,6 +60,17 @@
|
|||
unit: 'weeks' }
|
||||
.col-md-4
|
||||
= render partial: 'doughnut_chart', locals: { title: 'User', data: @user_distribution }
|
||||
.row#tickets
|
||||
.col-md-8
|
||||
= render partial: 'line_chart', locals: { title: 'Tickets sold over time',
|
||||
name: 'tickets',
|
||||
conferences: @conferences,
|
||||
active_conferences: @active_conferences,
|
||||
deactive_conferences: @deactive_conferences,
|
||||
y: @tickets,
|
||||
x: @ticket_weeks,
|
||||
unit: 'weeks' }
|
||||
%br
|
||||
.row
|
||||
.col-md-8
|
||||
%ul.nav.nav-tabs#recentTable
|
||||
|
|
|
|||
|
|
@ -69,6 +69,17 @@
|
|||
.col-md-4
|
||||
= render partial: 'todo_list', locals: { conference_progress: @conference_progress,
|
||||
conference: @conference }
|
||||
.row#tickets
|
||||
.col-md-8
|
||||
= render partial: 'line_chart', locals: { title: 'Tickets sold over time',
|
||||
name: 'tickets',
|
||||
conferences: @tickets,
|
||||
active_conferences: @tickets,
|
||||
deactive_conferences: [],
|
||||
y: @tickets_data,
|
||||
x: @ticket_weeks,
|
||||
unit: 'weeks' }
|
||||
%br
|
||||
.row
|
||||
.col-md-12#doughnut
|
||||
%ul.nav.nav-tabs#doughnut_tabs
|
||||
|
|
@ -101,11 +112,11 @@
|
|||
.row
|
||||
.col-md-8
|
||||
%ul.nav.nav-tabs#recentTable
|
||||
%li.active
|
||||
%li{ 'class' => "active #{hidden_if_conference_over(@conference)}" }
|
||||
%a{ href: '#recent_reg', 'data-toggle' => 'tab' }
|
||||
%span.fa.fa-user
|
||||
Recent Registrations
|
||||
%li
|
||||
%li{ 'class' => "#{hidden_if_conference_over(@conference)}" }
|
||||
%a{ href: '#recent_submissions', 'data-toggle' => 'tab' }
|
||||
%span.fa.fa-file-text
|
||||
Recent Submissions
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@
|
|||
.col-md-12
|
||||
= semantic_form_for(@event_type, url: (@event_type.new_record? ? admin_conference_program_event_types_path : admin_conference_program_event_type_path(@conference.short_title, @event_type))) do |f|
|
||||
= f.input :title
|
||||
= f.input :length, input_html: {size: 3, type: 'number', step: EventType::LENGTH_STEP, min: EventType::LENGTH_STEP}
|
||||
= f.input :length, input_html: {size: 3, type: 'number', step: @event_type.program.schedule_interval, min: @event_type.program.schedule_interval}
|
||||
= f.input :description
|
||||
= f.input :minimum_abstract_length, input_html: {size: 3}
|
||||
= f.input :maximum_abstract_length, input_html: {size: 3}
|
||||
|
|
|
|||
11
app/views/admin/events/_form.html.haml
Normal file
11
app/views/admin/events/_form.html.haml
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
.row
|
||||
.col-md-12
|
||||
.page-header
|
||||
%h1
|
||||
-if @event.new_record?
|
||||
New
|
||||
= @event.title
|
||||
Event
|
||||
.row
|
||||
.col-md-12
|
||||
= render 'proposals/proposal_form'
|
||||
|
|
@ -117,7 +117,7 @@
|
|||
%td
|
||||
%b Scheduled time
|
||||
%td
|
||||
= @event.time
|
||||
= time_with_timezone(@event.time)
|
||||
%tr
|
||||
%td
|
||||
%b Submitter
|
||||
|
|
@ -131,9 +131,26 @@
|
|||
%i Hidden
|
||||
%tr
|
||||
%td
|
||||
%b Biography
|
||||
%b Speakers
|
||||
%td
|
||||
= markdown(@event.submitter.biography)
|
||||
- if @program.show_voting?
|
||||
- @event.speakers.each do |speaker|
|
||||
%div
|
||||
= link_to speaker.name, admin_user_path(speaker)
|
||||
(
|
||||
= link_to speaker.email, "mailto: #{speaker.email}"
|
||||
)
|
||||
- else
|
||||
%i Hidden
|
||||
%tr
|
||||
%td
|
||||
%b Biographies
|
||||
%td
|
||||
- @event.speakers.each do |speaker|
|
||||
- unless speaker.biography.blank?
|
||||
%b
|
||||
= speaker.name
|
||||
= markdown(speaker.biography)
|
||||
%tr
|
||||
%td
|
||||
%b Submitted on
|
||||
|
|
|
|||
|
|
@ -4,7 +4,9 @@
|
|||
%h1
|
||||
Events
|
||||
= "(#{@events.length})" if @events.any?
|
||||
.btn-group.pull-right
|
||||
.pull-right
|
||||
- if can? :create, Event
|
||||
=link_to 'Add Event', new_admin_conference_program_event_path(@conference.short_title), class: 'button btn btn-default btn-info'
|
||||
- if can? :read, Event
|
||||
.btn-group
|
||||
%button.btn.btn-default.dropdown-toggle{ 'data-toggle' => 'dropdown', type: 'button', class: 'btn btn-success' }
|
||||
|
|
@ -54,8 +56,8 @@
|
|||
%th
|
||||
%b Submitter
|
||||
%th
|
||||
%b Speaker
|
||||
- if @program.languages.present?
|
||||
%b Speakers
|
||||
-if @program.languages.present?
|
||||
%th
|
||||
%b Language
|
||||
%th
|
||||
|
|
@ -99,10 +101,9 @@
|
|||
%i Hidden
|
||||
%td
|
||||
- if @program.show_voting?
|
||||
- if speaker = event.speakers.first
|
||||
= link_to speaker.name, admin_user_path(speaker)
|
||||
- else
|
||||
Unknown speaker
|
||||
- event.speakers_ordered.each do |speaker|
|
||||
.speaker
|
||||
= link_to speaker.name, admin_user_path(speaker)
|
||||
- else
|
||||
%i Hidden
|
||||
|
||||
|
|
@ -183,4 +184,4 @@
|
|||
%ul.dropdown-menu{ role: 'menu' }
|
||||
= render 'change_state_dropdown', event: event
|
||||
%td.text-center
|
||||
= link_to "#{event.comment_threads.count}", admin_conference_program_event_path(@conference.short_title, event), anchor: 'comments-div'
|
||||
= link_to "#{event.comments_count}", admin_conference_program_event_path(@conference.short_title, event), anchor: 'comments-div'
|
||||
|
|
|
|||
|
|
@ -1,127 +0,0 @@
|
|||
.tabbable
|
||||
%ul.nav.nav-tabs
|
||||
%li.active
|
||||
= link_to 'All Events', '#all', 'data-toggle' => 'tab'
|
||||
%li
|
||||
%a{ href: '#missing-commercial', 'data-toggle' => 'tab' }
|
||||
Events without Commercials
|
||||
%span.label.label-danger{ style: 'border-radius: 1em;' }
|
||||
= @events_missing_commercial.length
|
||||
%li
|
||||
%a{ href: '#requirements', 'data-toggle' => 'tab' }
|
||||
Speaker Requirements
|
||||
%span.label.label-success{ style: 'border-radius: 1em;' }
|
||||
= @events_with_requirements.length
|
||||
|
||||
%li
|
||||
%a{ href: '#missing-speakers', 'data-toggle' => 'tab' }
|
||||
Missing Speakers
|
||||
%span.label.label-danger{ style: 'border-radius: 1em;' }
|
||||
= @missing_event_speakers.length
|
||||
|
||||
.tab-content
|
||||
#all.tab-pane.active
|
||||
.row
|
||||
.col-md-12
|
||||
.page-header
|
||||
%h1
|
||||
All Events
|
||||
= "(#{@events.length})"
|
||||
%p.text-muted
|
||||
All submissions and the information that they are mssing
|
||||
|
||||
.col-md-12
|
||||
%table.table.table-striped.table-bordered.table-hover.datatable
|
||||
%thead
|
||||
%th Title
|
||||
%th Submitter Registered
|
||||
%th Submitter Biography
|
||||
%th Commercial
|
||||
%th Subtitle
|
||||
%th Difficulty Level
|
||||
- if @program.tracks.any?
|
||||
%th Track
|
||||
%tbody
|
||||
- @events.each do |event|
|
||||
%tr
|
||||
- progress_status = event.progress_status
|
||||
%td
|
||||
= link_to event.title, edit_conference_program_proposal_path(@conference.short_title, event)
|
||||
%br
|
||||
.small (Presented by #{event.speaker_names})
|
||||
|
||||
- %w(registered biography commercials subtitle difficulty_level).each do |info|
|
||||
%td{ 'data-order' => "#{progress_status[info]}" }
|
||||
%span{ class: class_for_todo(progress_status[info]) }
|
||||
%span{ class: [icon_for_todo(progress_status[info]), 'fa-lg'] }
|
||||
- if @program.tracks.any?
|
||||
%td{ 'data-order' => "#{progress_status['track']}" }
|
||||
%span{ class: class_for_todo(progress_status['track']) }
|
||||
%span{ class: [icon_for_todo(progress_status['track']), 'fa-lg'] }
|
||||
|
||||
#missing-commercial.tab-pane
|
||||
.row
|
||||
.col-md-12
|
||||
.page-header
|
||||
%h1
|
||||
Events without commercials
|
||||
= "(#{@events_missing_commercial.length})"
|
||||
%p.text-muted
|
||||
All submissions that have no commercial
|
||||
.col-md-12
|
||||
%table.table.table-striped.table-bordered.table-hover.datatable
|
||||
%thead
|
||||
%th Title
|
||||
%th Speaker(s)
|
||||
%tbody
|
||||
- @events_missing_commercial.each do |event|
|
||||
%tr
|
||||
%td= link_to event.title, edit_conference_program_proposal_path(@conference.short_title, event)
|
||||
%td #{event.speaker_names}
|
||||
|
||||
#requirements.tab-pane
|
||||
.row
|
||||
.col-md-12
|
||||
.page-header
|
||||
%h1
|
||||
Requirements
|
||||
= "(#{@events_with_requirements.length})"
|
||||
%p.text-muted
|
||||
All submissions where the speakers have special requirements
|
||||
.col-md-12
|
||||
%table.table.table-striped.table-bordered.table-hover.datatable
|
||||
%thead
|
||||
%th Title
|
||||
%th Speaker(s)
|
||||
%th Requirements
|
||||
%tbody
|
||||
- @events_with_requirements.each do |event|
|
||||
%tr
|
||||
%td= link_to event.title, edit_conference_program_proposal_path(@conference.short_title, event)
|
||||
%td #{event.speaker_names}
|
||||
%td= event.description
|
||||
|
||||
#missing-speakers.tab-pane
|
||||
.row
|
||||
.col-md-12
|
||||
.page-header
|
||||
%h1
|
||||
Missing Speakers
|
||||
= "(#{@missing_event_speakers.length})"
|
||||
%p.text-muted
|
||||
All event speakers who haven't checked in
|
||||
.col-md-12
|
||||
%table.table.table-striped.table-bordered.table-hover.datatable
|
||||
%thead
|
||||
%th Speaker Name
|
||||
%th Registered?
|
||||
%th Event
|
||||
%th Start Time
|
||||
%tbody
|
||||
- @missing_event_speakers.each do |speaker|
|
||||
%tr
|
||||
%td= speaker.user.name
|
||||
%td= @conference.user_registered?(speaker.user) ? 'Yes' : 'No'
|
||||
%td= link_to speaker.event.title, edit_conference_program_proposal_path(@conference.short_title, speaker.event)
|
||||
- event_start_time = speaker.event.time
|
||||
%td= event_start_time.present? ? event_start_time : '-'
|
||||
|
|
@ -64,13 +64,18 @@
|
|||
%br
|
||||
%table.table.table-hover
|
||||
%tr
|
||||
%td= link_to 'Submitter must be registered to the conference', admin_conference_registrations_path(@event.program.conference.short_title)
|
||||
%td= link_to "#{'Speaker'.pluralize(@event.speakers.count)} must be registered to the conference", admin_conference_registrations_path(@event.program.conference.short_title)
|
||||
%td{ 'class' => class_for_todo(progress_status['registered']) }
|
||||
%span{ 'class' => [icon_for_todo(progress_status['registered']), 'fa-lg'] }
|
||||
%tr
|
||||
%td= link_to 'Fill out submitter biography', edit_admin_user_path(@event.submitter)
|
||||
%td{ 'class' => class_for_todo(progress_status['biography']) }
|
||||
%span{ 'class' => [icon_for_todo(progress_status['biography']), 'fa-lg'] }
|
||||
%td
|
||||
- if @event.speakers.count == 1
|
||||
= link_to 'Fill out speaker\'s biography', edit_admin_user_path(@event.speakers.first)
|
||||
- else
|
||||
Fill out speaker's biography:
|
||||
= speaker_links(@event)
|
||||
%td{ 'class' => class_for_todo(progress_status['biographies']) }
|
||||
%span{ 'class' => [icon_for_todo(progress_status['biographies']), 'fa-lg'] }
|
||||
%tr
|
||||
%td= link_to 'Add a subtitle', edit_admin_conference_program_event_path(@event.program.conference.short_title, @event)
|
||||
%td{ 'class' => class_for_todo(progress_status['subtitle']) }
|
||||
|
|
|
|||
13
app/views/admin/organizations/_form.html.haml
Normal file
13
app/views/admin/organizations/_form.html.haml
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
= semantic_form_for(@organization, url: (@organization.new_record? ? admin_organizations_path : admin_organization_path(@organization))) do |f|
|
||||
= f.inputs name: 'Organization details' do
|
||||
= f.input :name, as: :string, required: true
|
||||
= f.input :description, as: :text, input_html: { rows: 10 }, placeholder: 'Decribe about your organization..'
|
||||
= image_tag f.object.picture.thumb.url if f.object.picture?
|
||||
- if @organization.picture
|
||||
= image_tag(@organization.picture.thumb.url, width: '20%')
|
||||
= f.input :picture
|
||||
%p.text-right
|
||||
- if @organization.new_record?
|
||||
= f.submit 'Create Organization', class: 'btn btn-success'
|
||||
- else
|
||||
= f.submit 'Update Organization', class: 'btn btn-success'
|
||||
31
app/views/admin/organizations/index.html.haml
Normal file
31
app/views/admin/organizations/index.html.haml
Normal file
|
|
@ -0,0 +1,31 @@
|
|||
.row
|
||||
.col-md-12
|
||||
.page-header
|
||||
%h1 Organizations
|
||||
.btn-group.pull-right
|
||||
= link_to 'Create Organization', new_admin_organization_path, class: 'btn btn-success pull-right'
|
||||
%p.text-muted
|
||||
Manage organizations in OSEM
|
||||
.row
|
||||
.col-md-12
|
||||
%table.table.table-hover.datatable
|
||||
%thead
|
||||
%th Name
|
||||
%th Upcoming Conferences
|
||||
%th Past Conferences
|
||||
%th Actions
|
||||
%tbody
|
||||
- @organizations.each do |organization|
|
||||
%tr
|
||||
%td
|
||||
= organization.name
|
||||
%td
|
||||
= organization.conferences.upcoming.count
|
||||
%td
|
||||
= organization.conferences.past.count
|
||||
%td
|
||||
.btn-group
|
||||
= link_to 'Edit', edit_admin_organization_path(organization),
|
||||
method: :get, class: 'btn btn-primary'
|
||||
= link_to 'Delete', admin_organization_path(organization),
|
||||
method: :delete, class: 'btn btn-danger', data: { confirm: "Warning: This will delete #{organization.name} and all its data which includes data for all conferences within #{organization.name}. Do you really want to continue?" }
|
||||
43
app/views/admin/physical_ticket/index.html.haml
Normal file
43
app/views/admin/physical_ticket/index.html.haml
Normal file
|
|
@ -0,0 +1,43 @@
|
|||
.container
|
||||
.row
|
||||
.col-md-12.page-header
|
||||
%h2
|
||||
Tickets Sold
|
||||
.text-muted
|
||||
Tickets sold for the conference
|
||||
.row
|
||||
.col-md-4
|
||||
= render partial: 'admin/conferences/doughnut_chart',
|
||||
locals: { title: 'Tickets sold', data: @tickets_sold_distribution }
|
||||
.col-md-4
|
||||
= render partial: 'admin/conferences/doughnut_chart',
|
||||
locals: {title: 'Tickets turnover', data: @tickets_turnover_distribution}
|
||||
%br
|
||||
- if @physical_tickets.any?
|
||||
.row
|
||||
.col-md-12
|
||||
%table.table.table-hover.datatable#tickets
|
||||
%thead
|
||||
%th ID
|
||||
%th Type
|
||||
%th User
|
||||
%th Actions
|
||||
%tbody
|
||||
- @physical_tickets.each do |physical_ticket|
|
||||
%tr
|
||||
%td= physical_ticket.id
|
||||
%td= physical_ticket.ticket.title
|
||||
%td= physical_ticket.user.email
|
||||
%td
|
||||
.btn-group
|
||||
= link_to 'Show',
|
||||
conference_physical_ticket_path(@conference.short_title,
|
||||
physical_ticket.id),
|
||||
class: 'btn btn-primary'
|
||||
= link_to 'Generate PDF',
|
||||
conference_physical_ticket_path(@conference.short_title,
|
||||
physical_ticket.id,
|
||||
format: :pdf),
|
||||
class: 'button btn btn-default btn-info'
|
||||
- else
|
||||
%h5 No Tickets sold!
|
||||
|
|
@ -9,6 +9,7 @@
|
|||
= f.input :schedule_fluid, label: 'Allow submitters to change their event after it is scheduled'
|
||||
= f.input :rating, hint: 'Enter the number of different rating levels you want to have for voting on proposals. Enter 0 if you do not want to vote on proposals.'
|
||||
= f.input :languages, hint: "Enter the languages allowed for events as values of #{link_to('ISO 639-1', 'http://www.loc.gov/standards/iso639-2/php/code_list.php', target: "_blank")} language codes separated with commas. The first language would be the default language. Leave it blank if you do not want to specify languages.".html_safe
|
||||
= f.input :schedule_interval, hint: "It is the minimal time interval of your schedule. The value should be 5, 6, 10, 12, 15, 20, 30 or 60. Warning! Some events could be unscheduled when changing this value."
|
||||
= f.input :blind_voting, hint: 'Enable this feature if you do not want to show voting results and voters prior to user submitting a vote. For the feature to work you need to set the voting dates below as well'
|
||||
= f.input :voting_start_date, as: :string, input_html: { id: 'datetimepicker-voting_start_date', readonly: true, value: (f.object.voting_start_date.to_formatted_s(:db_without_seconds) unless f.object.voting_start_date.nil?) }
|
||||
= f.input :voting_end_date, as: :string, input_html: { id: 'datetimepicker-voting_start_date', readonly: true, value: (f.object.voting_end_date.to_formatted_s(:db_without_seconds) unless f.object.voting_end_date.nil?) }
|
||||
|
|
|
|||
|
|
@ -49,6 +49,11 @@
|
|||
Yes
|
||||
- else
|
||||
No
|
||||
%dt
|
||||
Schedule interval
|
||||
%dd
|
||||
= @program.schedule_interval
|
||||
minutes
|
||||
|
||||
%h3 Voting Options
|
||||
%hr
|
||||
|
|
|
|||
|
|
@ -25,5 +25,5 @@
|
|||
= link_to 'Delete', admin_conference_registration_period_path,
|
||||
method: :delete, data: { confirm: 'Are you sure?' }, class: 'btn btn-danger'
|
||||
- else
|
||||
- if can? :create, @conference
|
||||
- if can? :create, @conference.build_registration_period
|
||||
= link_to 'New Registration Period', new_admin_conference_registration_period_path, class: 'btn btn-primary'
|
||||
|
|
|
|||
|
|
@ -56,7 +56,7 @@
|
|||
-if @conference.questions.any?
|
||||
%td
|
||||
= link_to 'Questions','#', class: 'btn btn-success question-btn', 'data-id' => index, 'data-name' => registration.name
|
||||
%td
|
||||
%td{ 'data-order' => registration.attended.to_s }
|
||||
= check_box_tag "#{@conference.short_title}_#{registration.id}", registration.id, registration.attended,
|
||||
class: 'switch-checkbox', method: :patch,
|
||||
url: toggle_attendance_admin_conference_registration_path(@conference.short_title, id: registration.id)+"?attended=",
|
||||
|
|
|
|||
|
|
@ -12,8 +12,8 @@
|
|||
%thead
|
||||
%th ID
|
||||
%th Title
|
||||
%th Submitter Registered
|
||||
%th Submitter Biography
|
||||
%th Speakers Registered
|
||||
%th Speakers Biographies
|
||||
%th Commercial
|
||||
%th Subtitle
|
||||
%th Difficulty Level
|
||||
|
|
@ -27,9 +27,12 @@
|
|||
%td
|
||||
= link_to event.title, edit_admin_conference_program_event_path(@conference.short_title, event)
|
||||
%br
|
||||
.small (Presented by #{event.speaker_names})
|
||||
.small
|
||||
(Presented by
|
||||
= speaker_links(event)
|
||||
)
|
||||
|
||||
- %w(registered biography commercials subtitle difficulty_level).each do |info|
|
||||
- %w(registered biographies commercials subtitle difficulty_level).each do |info|
|
||||
%td{'data-order' => "#{progress_status[info]}"}
|
||||
%span{class: class_for_todo(progress_status[info])}
|
||||
%span{class: [icon_for_todo(progress_status[info]), 'fa-lg']}
|
||||
|
|
|
|||
|
|
@ -21,7 +21,8 @@
|
|||
%tr
|
||||
%td= event.id
|
||||
%td= link_to event.title, edit_admin_conference_program_event_path(@conference.short_title, event)
|
||||
%td #{event.speaker_names}
|
||||
%td
|
||||
= speaker_links(event)
|
||||
%td= event.description
|
||||
%td= event.room.name if event.room
|
||||
%td= event.time.to_date if event.time
|
||||
|
|
|
|||
|
|
@ -17,4 +17,5 @@
|
|||
%tr
|
||||
%td= event.id
|
||||
%td= link_to event.title, edit_admin_conference_program_event_path(@conference.short_title, event)
|
||||
%td #{event.speaker_names}
|
||||
%td
|
||||
= speaker_links(event)
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@
|
|||
.page-header
|
||||
%h1
|
||||
Missing Speakers
|
||||
= "(#{@missing_event_speakers.group(:user_id).length})"
|
||||
= "(#{@missing_event_speakers.distinct(:user_id).length})"
|
||||
%p.text-muted
|
||||
All event speakers who haven't checked in
|
||||
.col-md-12
|
||||
|
|
|
|||
|
|
@ -17,7 +17,7 @@
|
|||
%a{href: '#missing-speakers', 'data-toggle' => 'tab'}
|
||||
Missing Speakers
|
||||
%span.label.label-danger{style: 'border-radius: 1em;'}
|
||||
= @missing_event_speakers.group(:user_id).length
|
||||
= @missing_event_speakers.distinct(:user_id).length
|
||||
|
||||
.tab-content
|
||||
#all.tab-pane.active
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@
|
|||
.col-md-8
|
||||
= semantic_form_for(@resource, :url => (@resource.new_record? ? admin_conference_resources_path : admin_conference_resource_path(@conference.short_title, @resource))) do |f|
|
||||
= f.input :name
|
||||
= f.input :description, input_html: { rows: 5, data: { provide: "markdown-editable" } }
|
||||
= f.input :description, input_html: { rows: 5, data: { provide: 'markdown-editable' } }
|
||||
= f.input :used
|
||||
= f.input :quantity
|
||||
%p.text-right
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@
|
|||
.text-muted
|
||||
= @role.description
|
||||
|
||||
= semantic_form_for @role, url: admin_conference_role_path(@conference.short_title, @role.name) do |f|
|
||||
= semantic_form_for @role, url: @url do |f|
|
||||
.row
|
||||
.col-md-5
|
||||
= f.input :description
|
||||
|
|
|
|||
|
|
@ -14,7 +14,7 @@
|
|||
- if ( can? :toggle_user, @role )
|
||||
%td.text-right
|
||||
= hidden_field_tag "role[user_ids][]", nil
|
||||
= check_box_tag @conference.short_title, @role.id, (@role.user_ids.include? user.id), method: :post, url: "/admin/conferences/#{@conference.short_title}/roles/#{@role.name}/toggle_user?user[email]=#{user.email}&user[state]=", class: 'switch-checkbox', data: { size: 'small', off_color: 'warning', on_text: 'Yes', off_text: 'No' }
|
||||
= check_box_tag @conference.short_title, @role.id, (@role.user_ids.include? user.id), method: :post, url: "#{@url}?user[email]=#{user.email}&user[state]=", class: 'switch-checkbox', data: { size: 'small', off_color: 'warning', on_text: 'Yes', off_text: 'No' }
|
||||
%td= user.id
|
||||
%td= user.name
|
||||
%td= user.email
|
||||
|
|
|
|||
|
|
@ -19,13 +19,24 @@
|
|||
%tr
|
||||
%td= role.id
|
||||
%td= role.name.titleize
|
||||
%td= role.description
|
||||
%td
|
||||
= role.description
|
||||
- if role.resource_type == 'Track'
|
||||
= link_to role.resource.name, admin_conference_program_track_path(@conference.short_title, role.resource)
|
||||
%td
|
||||
= role.users.pluck(:name).first(5).join ', '
|
||||
- if role.users.count > 5
|
||||
= link_to '...', admin_conference_role_path(@conference.short_title, role.name)
|
||||
- if role.resource_type == 'Track'
|
||||
= link_to '...', track_admin_conference_role_path(@conference.short_title, role.name, role.resource)
|
||||
- else
|
||||
= link_to '...', admin_conference_role_path(@conference.short_title, role.name)
|
||||
%td
|
||||
.btn-group
|
||||
= link_to 'Users', admin_conference_role_path(@conference.short_title, role.name), class: 'btn btn-success'
|
||||
- if can? :edit, role
|
||||
= link_to 'Edit', edit_admin_conference_role_path(@conference.short_title, role.name), class: 'btn btn-primary'
|
||||
- if role.resource_type == 'Track'
|
||||
= link_to 'Users', track_admin_conference_role_path(@conference.short_title, role.name, role.resource), class: 'btn btn-success'
|
||||
- if can? :edit, role
|
||||
= link_to 'Edit', track_edit_admin_conference_role_path(@conference.short_title, role.name, role.resource), class: 'btn btn-primary'
|
||||
- else
|
||||
= link_to 'Users', admin_conference_role_path(@conference.short_title, role.name), class: 'btn btn-success'
|
||||
- if can? :edit, role
|
||||
= link_to 'Edit', edit_admin_conference_role_path(@conference.short_title, role.name), class: 'btn btn-primary'
|
||||
|
|
|
|||
|
|
@ -6,14 +6,20 @@
|
|||
Role
|
||||
= @role.name.titleize
|
||||
- if can? :edit, @role
|
||||
= link_to 'Edit', edit_admin_conference_role_path(@conference.short_title, @role.name), class: 'btn btn-primary pull-right'
|
||||
- if @track
|
||||
= link_to 'Edit', track_edit_admin_conference_role_path(@conference.short_title, @role.name, @track), class: 'btn btn-primary pull-right'
|
||||
- else
|
||||
= link_to 'Edit', edit_admin_conference_role_path(@conference.short_title, @role.name), class: 'btn btn-primary pull-right'
|
||||
.text-muted
|
||||
= @role.description
|
||||
- if @track
|
||||
= link_to @track.name, admin_conference_program_track_path(@conference.short_title, @track)
|
||||
|
||||
|
||||
.row.col-md-3
|
||||
- if ( can? :toggle_user, @role ) && !@role.new_record?
|
||||
|
||||
= semantic_form_for :user, url: toggle_user_admin_conference_role_path(@conference.short_title, @role.name), method: :post do |u|
|
||||
= semantic_form_for :user, url: @url, method: :post do |u|
|
||||
|
||||
= u.label 'Add user by email: '
|
||||
.input-group
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
- compact_grid = EventType::LENGTH_STEP < 15
|
||||
- cells_per_hour = 60 / EventType::LENGTH_STEP
|
||||
- compact_grid = @program.schedule_interval < 15
|
||||
- cells_per_hour = 60 / @program.schedule_interval
|
||||
/ use smaller cell heights for more compact grids
|
||||
- cell_height = compact_grid ? 32 : 58
|
||||
- date_event_schedules = @event_schedules.select{ |e| e.start_time.to_date.eql? date }
|
||||
|
|
@ -11,7 +11,7 @@
|
|||
= room.name
|
||||
- (@conference.start_hour * cells_per_hour..@conference.end_hour * cells_per_hour).each do |slot|
|
||||
- hour = slot / cells_per_hour
|
||||
- minutes = (EventType::LENGTH_STEP * (slot % cells_per_hour)).to_s.rjust(2, '0')
|
||||
- minutes = (@program.schedule_interval * (slot % cells_per_hour)).to_s.rjust(2, '0')
|
||||
- time = "#{hour}:#{minutes}"
|
||||
.schedule-room-slot{ id: "schedule-room-#{room.guid}-#{hour}-#{minutes}", |
|
||||
room_id: room.id, |
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
- cells_length = event.event_type.length / EventType::LENGTH_STEP
|
||||
- cells_length = event.event_type.length / @program.schedule_interval
|
||||
/ this height fits the room cells
|
||||
- compact_grid = EventType::LENGTH_STEP < 15
|
||||
- compact_grid = @program.schedule_interval < 15
|
||||
- single_cell_height = compact_grid ? 32 : 58
|
||||
- height = (cells_length * single_cell_height)
|
||||
- height -= 23 unless compact_grid
|
||||
|
|
|
|||
|
|
@ -6,15 +6,15 @@
|
|||
.col-md-8
|
||||
= semantic_form_for(@splashpage, url: admin_conference_splashpage_path(@conference.short_title)) do |f|
|
||||
= f.inputs name: 'Components' do
|
||||
= f.input :include_tracks, label: 'Display tracks on the splashpage?'
|
||||
= f.input :include_program, label: 'Display program on the splashpage?'
|
||||
= f.input :include_cfp, label: 'Display call for papers information on splashpage, while cfp is open?'
|
||||
= f.input :include_venue, label: 'Display venue on the splashpage?'
|
||||
= f.input :include_registrations, label: 'Display the registration period on the splashpage?'
|
||||
= f.input :include_tickets, label: 'Display tickets on the splashpage?'
|
||||
= f.input :include_lodgings, label: 'Display the lodgings on the splashpage?'
|
||||
= f.input :include_sponsors, label: 'Display sponsors on the splashpage?'
|
||||
= f.input :include_social_media, label: 'Display social media on the splashpage?'
|
||||
= f.input :include_tracks, label: 'Display tracks', input_html: { checked: params[:action] == 'new' || @splashpage.try(:include_tracks) }
|
||||
= f.input :include_program, label: 'Display program', input_html: { checked: params[:action] == 'new' || @splashpage.try(:include_program) }
|
||||
= f.input :include_cfp, label: 'Display call for papers information on splashpage, while cfp is open', input_html: { checked: params[:action] == 'new' || @splashpage.try(:include_cfp) }
|
||||
= f.input :include_venue, label: 'Display venue', input_html: { checked: params[:action] == 'new' || @splashpage.try(:include_venue) }
|
||||
= f.input :include_registrations, label: 'Display the registration period', input_html: { checked: params[:action] == 'new' || @splashpage.try(:include_registrations) }
|
||||
= f.input :include_tickets, label: 'Display tickets', input_html: { checked: params[:action] == 'new' || @splashpage.try(:include_tickets) }
|
||||
= f.input :include_lodgings, label: 'Display the lodgings', input_html: { checked: params[:action] == 'new' || @splashpage.try(:include_lodgings) }
|
||||
= f.input :include_sponsors, label: 'Display sponsors', input_html: { checked: params[:action] == 'new' || @splashpage.try(:include_sponsors) }
|
||||
= f.input :include_social_media, label: 'Display social media', input_html: { checked: params[:action] == 'new' || @splashpage.try(:include_social_media) }
|
||||
= f.inputs name: 'Access' do
|
||||
= f.input :public, label: 'Make splash page public?'
|
||||
%p.text-right
|
||||
|
|
|
|||
|
|
@ -10,27 +10,6 @@
|
|||
.row
|
||||
.col-md-8
|
||||
%dl.dl-horizontal
|
||||
%dt
|
||||
Include Tickets:
|
||||
%dd
|
||||
- if @splashpage.include_tickets
|
||||
Yes
|
||||
- else
|
||||
No
|
||||
%dt
|
||||
Include Sponsors:
|
||||
%dd
|
||||
- if @splashpage.include_sponsors
|
||||
Yes
|
||||
- else
|
||||
No
|
||||
%dt
|
||||
Include Registrations:
|
||||
%dd
|
||||
- if @splashpage.include_registrations
|
||||
Yes
|
||||
- else
|
||||
No
|
||||
%dt
|
||||
Include Tracks:
|
||||
%dd
|
||||
|
|
@ -52,6 +31,41 @@
|
|||
Yes
|
||||
- else
|
||||
No
|
||||
%dt
|
||||
Include Venue:
|
||||
%dd
|
||||
-if @splashpage.include_venue
|
||||
Yes
|
||||
-else
|
||||
No
|
||||
%dt
|
||||
Include Registrations:
|
||||
%dd
|
||||
- if @splashpage.include_registrations
|
||||
Yes
|
||||
- else
|
||||
No
|
||||
%dt
|
||||
Include Tickets:
|
||||
%dd
|
||||
- if @splashpage.include_tickets
|
||||
Yes
|
||||
- else
|
||||
No
|
||||
%dt
|
||||
Include Lodgins
|
||||
%dd
|
||||
-if @splashpage.include_lodgings
|
||||
Yes
|
||||
-else
|
||||
No
|
||||
%dt
|
||||
Include Sponsors:
|
||||
%dd
|
||||
- if @splashpage.include_sponsors
|
||||
Yes
|
||||
- else
|
||||
No
|
||||
%dt
|
||||
Include Social Media:
|
||||
%dd
|
||||
|
|
@ -76,5 +90,5 @@
|
|||
- else
|
||||
.row
|
||||
.col-md-12.text-right
|
||||
- if can? :create, @conference
|
||||
- if can? :create, @conference.build_splashpage
|
||||
= link_to 'Create Splashpage', new_admin_conference_splashpage_path, class: 'btn btn-primary'
|
||||
|
|
|
|||
|
|
@ -10,6 +10,6 @@
|
|||
= semantic_form_for(@target, url: (@target.new_record? ? admin_conference_targets_path : admin_conference_target_path(@conference.short_title, @target))) do |f|
|
||||
= f.input :due_date, as: :string, input_html: { class: 'target-due-date-datepicker'}, label: 'Until when do you want to have '
|
||||
= f.input :target_count, label: 'this amount of '
|
||||
= f.input :unit, as: :select, label: 'Unit', class: 'form-control', collection: Target.units.values, include_blank: false, label: 'units '
|
||||
= f.input :unit, as: :select, label: 'Unit', class: 'form-control', collection: Target.units.values, include_blank: false
|
||||
%p.text-right
|
||||
= f.action :submit, as: :button, button_html: { class: 'btn btn-primary' }
|
||||
|
|
|
|||
|
|
@ -4,6 +4,7 @@
|
|||
%h1 Tickets
|
||||
%p.text-muted
|
||||
Tickets to get during registration
|
||||
%br
|
||||
- if @conference.tickets.any?
|
||||
.row
|
||||
.col-md-12
|
||||
|
|
@ -36,4 +37,4 @@
|
|||
.row
|
||||
.col-md-12
|
||||
= link_to 'Add Ticket', new_admin_conference_ticket_path, class: 'btn btn-success pull-right'
|
||||
|
||||
= link_to 'Tickets Sold', admin_conference_physical_ticket_index_path, class: 'button btn btn-default btn-info pull-right'
|
||||
|
|
|
|||
|
|
@ -10,6 +10,9 @@
|
|||
.col-md-12
|
||||
= semantic_form_for(@track, url: (@track.new_record? ? admin_conference_program_tracks_path : admin_conference_program_track_path(@conference.short_title, @track))) do |f|
|
||||
= f.input :name
|
||||
= f.input :short_name, hint: "A short and unique handle for the track, using only letters, numbers, underscores, and dashes. This will be used to identify the track in URLs etc. Example: 'my_awesome_track'", input_html: { required: 'required', pattern: '[a-zA-Z0-9_-]+', title: 'Only letters, numbers, underscores, and dashes.' }
|
||||
= f.input :color, input_html: {size: 6, type: 'color'}, required: true
|
||||
= f.input :description, input_html: {rows: 2, data: { provide: 'markdown-editable' } }, hint: markdown_hint
|
||||
- if @track.self_organized?
|
||||
= f.input :cfp_active, label: 'Allow event submitters to select this track for their proposal'
|
||||
= f.action :submit, as: :button, button_html: { class: 'btn btn-primary' }
|
||||
|
|
|
|||
|
|
@ -9,8 +9,12 @@
|
|||
%table.table.table-hover#tracks
|
||||
%thead
|
||||
%th Name
|
||||
%th Short name
|
||||
%th Description
|
||||
%th Submitter
|
||||
%th Color
|
||||
%th State
|
||||
%th Included in the Cfp
|
||||
%th Actions
|
||||
%tbody
|
||||
- @tracks.each do |track|
|
||||
|
|
@ -18,19 +22,44 @@
|
|||
%td
|
||||
= link_to(admin_conference_program_track_path(@conference.short_title, track)) do
|
||||
= track.name
|
||||
%td
|
||||
= track.short_name
|
||||
%td
|
||||
%p
|
||||
= truncate(track.description)
|
||||
%td
|
||||
- if track.self_organized?
|
||||
= link_to track.submitter.name, admin_user_path(track.submitter)
|
||||
- else
|
||||
N/A
|
||||
%td
|
||||
%span.label{style: "background-color: #{track.color}; color: #{ contrast_color(track.color) }"}
|
||||
= track.color
|
||||
%td
|
||||
- if track.self_organized?
|
||||
= track.state
|
||||
- else
|
||||
N/A
|
||||
%td
|
||||
- if track.self_organized?
|
||||
= check_box_tag "#{@conference.short_title}_#{track.short_name}", track.id, track.cfp_active,
|
||||
class: 'switch-checkbox', method: :patch,
|
||||
url: toggle_cfp_inclusion_admin_conference_program_track_path(@conference.short_title, id: track.short_name)+"?included=",
|
||||
data: { size: 'small',
|
||||
on_color: 'success',
|
||||
off_color: 'warning',
|
||||
on_text: 'Yes',
|
||||
off_text: 'No' }
|
||||
- else
|
||||
%i.fa.fa-check
|
||||
%td
|
||||
.btn-group{role: "group"}
|
||||
= link_to 'Edit', edit_admin_conference_program_track_path(@conference.short_title, track.id),
|
||||
= link_to 'Edit', edit_admin_conference_program_track_path(@conference.short_title, track),
|
||||
method: :get, class: 'btn btn-primary'
|
||||
= link_to 'Delete', admin_conference_program_track_path(@conference.short_title, track.id),
|
||||
method: :delete, class: 'btn btn-danger',
|
||||
data: { confirm: "Do you really want to delete #{track.name}? Attention: This track will be removed from all Events that have it set" }
|
||||
- if can? :destroy, track
|
||||
= link_to 'Delete', admin_conference_program_track_path(@conference.short_title, track),
|
||||
method: :delete, class: 'btn btn-danger',
|
||||
data: { confirm: "Do you really want to delete #{track.name}? Attention: This track will be removed from all Events that have it set" }
|
||||
.row
|
||||
.col-md-12.text-right
|
||||
= link_to 'New Track', new_admin_conference_program_track_path(@conference.short_title), class: 'btn btn-success'
|
||||
|
|
|
|||
|
|
@ -1,25 +1,28 @@
|
|||
= semantic_form_for [:admin, @user] do |f|
|
||||
= f.inputs 'Basic Information' do
|
||||
.pull-right
|
||||
%b
|
||||
Confirmed?
|
||||
- if can? :toggle_confirmation, @user
|
||||
= check_box_tag @user.id, @user.id, @user.confirmed?,
|
||||
method: :patch,
|
||||
url: "/admin/users/#{@user.id}/toggle_confirmation?user[to_confirm]=",
|
||||
class: 'switch-checkbox',
|
||||
readonly: false,
|
||||
data: { size: 'small', on_color: 'success', off_color: 'warning', on_text: 'Yes', off_text: 'No' }
|
||||
- else
|
||||
= check_box_tag @user.id, @user.id, @user.confirmed?,
|
||||
method: :patch,
|
||||
url: "/admin/users/#{@user.id}/toggle_confirmation?user[to_confirm]=",
|
||||
class: 'switch-checkbox',
|
||||
readonly: true,
|
||||
data: { size: 'small', on_color: 'success', off_color: 'warning', on_text: 'Yes', off_text: 'No' }
|
||||
- unless @user.new_record?
|
||||
.pull-right
|
||||
%b
|
||||
Confirmed?
|
||||
- if can? :toggle_confirmation, @user
|
||||
= check_box_tag @user.id, @user.id, @user.confirmed?,
|
||||
method: :patch,
|
||||
url: "/admin/users/#{@user.id}/toggle_confirmation?user[to_confirm]=",
|
||||
class: 'switch-checkbox',
|
||||
readonly: false,
|
||||
data: { size: 'small', on_color: 'success', off_color: 'warning', on_text: 'Yes', off_text: 'No' }
|
||||
- else
|
||||
= check_box_tag @user.id, @user.id, @user.confirmed?,
|
||||
method: :patch,
|
||||
url: "/admin/users/#{@user.id}/toggle_confirmation?user[to_confirm]=",
|
||||
class: 'switch-checkbox',
|
||||
readonly: true,
|
||||
data: { size: 'small', on_color: 'success', off_color: 'warning', on_text: 'Yes', off_text: 'No' }
|
||||
= f.input :is_admin, hint: 'An admin can create a new conference, manage users and make other users admins.'
|
||||
= f.input :name, as: :string
|
||||
= f.input :username, :as => :string if @user.new_record?
|
||||
= f.input :email
|
||||
= f.input :password if @user.new_record?
|
||||
= f.input :affiliation, as: :string
|
||||
= f.input :biography, input_html: { rows: 10, data: { provide: 'markdown-editable' } },
|
||||
hint: markdown_hint
|
||||
|
|
|
|||
|
|
@ -1,10 +1,13 @@
|
|||
.row
|
||||
.col-md-12
|
||||
.page-header
|
||||
%h2
|
||||
%h1
|
||||
Users
|
||||
- if @users
|
||||
= "(#{@users.length})"
|
||||
- if can? :create, User
|
||||
.pull-right
|
||||
= link_to 'Add User', new_admin_user_path, :class => 'button btn btn-default btn-info'
|
||||
.row
|
||||
.col-md-12.table-responsive
|
||||
%table.table.table-striped.table-bordered.table-hover.datatable
|
||||
|
|
|
|||
|
|
@ -85,14 +85,16 @@
|
|||
admin_conference_program_path(conference_id: Conference.find(version.conference_id).short_title)
|
||||
|
||||
- when 'Cfp'
|
||||
= link_if_alive version, 'cfp',
|
||||
admin_conference_program_cfp_path(conference_id: Conference.find(version.conference_id).short_title)
|
||||
= 'cfp for'
|
||||
- cfp = current_or_last_object_state(version.item_type, version.item_id)
|
||||
= link_if_alive version, cfp.cfp_type,
|
||||
admin_conference_program_cfp_path(conference_id: Conference.find(version.conference_id).short_title, id: version.item_id)
|
||||
|
||||
- when 'Track'
|
||||
= 'track'
|
||||
- track = current_or_last_object_state(version.item_type, version.item_id)
|
||||
= link_if_alive version, track.name,
|
||||
admin_conference_program_track_path(conference_id: Conference.find(version.conference_id).short_title, id: version.item_id)
|
||||
admin_conference_program_track_path(conference_id: Conference.find(version.conference_id).short_title, id: track.try(:short_name))
|
||||
|
||||
- when 'EventType'
|
||||
= 'event type'
|
||||
|
|
|
|||
|
|
@ -142,7 +142,7 @@
|
|||
Registered
|
||||
= word_pluralize(@conference.participants.count, 'Attendee')
|
||||
- @conference.participants.each do |participant|
|
||||
= image_tag(participant.gravatar_url(size: '25'), title: "#{participant.name}!", class: 'img-circle')
|
||||
= link_to image_tag(participant.gravatar_url(size: '25'), title: "#{participant.name}!", class: 'img-circle'), user_path(participant)
|
||||
.col-md-4.col-md-offset-2
|
||||
- if @conference.program.speakers.confirmed.any?
|
||||
%h4
|
||||
|
|
@ -153,4 +153,4 @@
|
|||
Confirmed
|
||||
= word_pluralize(@conference.program.speakers.confirmed.count, 'Speaker')
|
||||
- @conference.program.speakers.confirmed.each do |speaker|
|
||||
= image_tag(speaker.gravatar_url(size: '25'), title: "#{speaker.name}!", class: 'img-circle')
|
||||
= link_to image_tag(speaker.gravatar_url(size: '25'), title: "#{speaker.name}!", class: 'img-circle'), user_path(speaker)
|
||||
|
|
|
|||
|
|
@ -27,8 +27,8 @@
|
|||
- if conference.user_registered?(current_user)
|
||||
= link_to "My Registration", conference_conference_registration_path(conference.short_title), class: 'btn btn-default'
|
||||
- else
|
||||
= link_to "Register", new_conference_conference_registration_path(conference.short_title), class: "btn btn-default", disabled: conference.registration_limit_exceeded?
|
||||
- if conference.registration_limit_exceeded?
|
||||
= link_to "Register", new_conference_conference_registration_path(conference.short_title), class: "btn btn-default", disabled: cannot?(:new, Registration.new(conference_id: conference.id))
|
||||
- if cannot?(:new, Registration.new(conference_id: conference.id)) && conference.registration_limit_exceeded?
|
||||
Sorry, no places left
|
||||
- if !current_user.nil? && current_user.proposal_count(conference) > 0
|
||||
= link_to "My Proposals", conference_program_proposals_path(conference.short_title), class: 'btn btn-default'
|
||||
|
|
@ -38,3 +38,5 @@
|
|||
= link_to 'Subscribe', conference_subscriptions_path(conference.short_title), method: :post, class: 'btn btn-default'
|
||||
- else
|
||||
= link_to 'Unsubscribe', conference_subscriptions_path(conference.short_title), method: :delete, class: 'btn btn-default'
|
||||
- if current_user && current_user.physical_tickets.by_conference(conference).any?
|
||||
= link_to "My Tickets", conference_physical_ticket_index_path(conference.short_title), class: 'btn btn-default'
|
||||
|
|
|
|||
|
|
@ -1,3 +1,7 @@
|
|||
= content_for :splash_nav do
|
||||
%li
|
||||
%a.smoothscroll{ href: '#lodging' } Lodging
|
||||
|
||||
.container
|
||||
.row
|
||||
.col-md-12.text-center
|
||||
|
|
|
|||
|
|
@ -15,7 +15,11 @@
|
|||
%h4
|
||||
Currently the following openIDs are associated with your account
|
||||
- @openids.each do |openid|
|
||||
%li= "#{openid.provider}:#{openid.email}"
|
||||
%li{ style: "list-style: none; margin-left: 20px;" }
|
||||
= link_to user_openid_path(openid, user_id: current_user.id), method: :delete,
|
||||
data: { confirm: "Remove association with #{openid.provider} account?" } do
|
||||
%span.fa.fa-times{ style: "color: red;" }
|
||||
%span #{openid.provider}:#{openid.email}
|
||||
%br
|
||||
%h4
|
||||
To add an openID with a different email address to your account, sign in with your
|
||||
|
|
|
|||
|
|
@ -7,9 +7,9 @@
|
|||
Sign Up
|
||||
.panel-body
|
||||
= semantic_form_for(resource, as: resource_name, url: registration_path(resource_name)) do |f|
|
||||
= f.input :username, input_html: { required: true }
|
||||
= f.input :username, input_html: { required: true }, hint: 'This is how the other users see you, not your real name'
|
||||
= f.input :email, input_html: { required: true }
|
||||
= f.input :name, input_html: { required: true }
|
||||
= f.input :name, input_html: { required: true }, hint: 'This is your real name'
|
||||
= f.input :password, input_html: { required: true }
|
||||
= f.input :password_confirmation, input_html: { required: true }
|
||||
%p.text-right
|
||||
|
|
|
|||
|
|
@ -16,7 +16,7 @@
|
|||
%span.fa.fa-cog
|
||||
Manage
|
||||
= conference.short_title
|
||||
- if (current_user.is_admin) || (current_user.has_role? :organizer, :any)
|
||||
- if can? :new, Conference.new
|
||||
%li
|
||||
= link_to(new_admin_conference_path) do
|
||||
%span.fa.fa-plus
|
||||
|
|
@ -67,8 +67,8 @@
|
|||
- if @conference.program
|
||||
%ul
|
||||
- if can? :update, Cfp.new(program_id: @conference.program.id)
|
||||
%li{class: active_nav_li(admin_conference_program_cfp_path(@conference.short_title))}
|
||||
= link_to 'Call for Papers', admin_conference_program_cfp_path(@conference.short_title)
|
||||
%li{class: active_nav_li(admin_conference_program_cfps_path(@conference.short_title))}
|
||||
= link_to 'Call for Papers', admin_conference_program_cfps_path(@conference.short_title)
|
||||
- if can? :update, @conference.program.events.build
|
||||
%li{class: active_nav_li(admin_conference_program_events_path(@conference.short_title))}
|
||||
= link_to 'Events', admin_conference_program_events_path(@conference.short_title)
|
||||
|
|
|
|||
|
|
@ -16,7 +16,7 @@
|
|||
%span.fa.fa-cog
|
||||
Manage
|
||||
= conference.short_title
|
||||
- if can? :create, Conference
|
||||
- if can? :new, Conference.new
|
||||
%li
|
||||
= link_to(new_admin_conference_path) do
|
||||
%span.fa.fa-plus
|
||||
|
|
@ -32,3 +32,8 @@
|
|||
= link_to(admin_revision_history_path) do
|
||||
%span.fa.fa-history
|
||||
Revision History
|
||||
- if ENV['ORGANIZATIONS_ENABLED'] == 'true'
|
||||
%li
|
||||
= link_to(admin_organizations_path) do
|
||||
%span.fa.fa-group
|
||||
Organizations
|
||||
|
|
|
|||
|
|
@ -28,19 +28,18 @@
|
|||
- if can? :index, Comment
|
||||
%ul.nav.navbar-nav.navbar-right
|
||||
%li.dropdown
|
||||
%a.dropdown-toggle{"data-toggle" => "dropdown", href: '#'}
|
||||
- if unread_notifications(current_user)
|
||||
Notifications (#{unread_notifications(current_user).length})
|
||||
%span.fa.fa-comment
|
||||
%b.caret
|
||||
%ul.dropdown-menu
|
||||
- if unread_notifications(current_user).length > 0
|
||||
%li.dropdown-header Last 5 Comments for:
|
||||
- unread_notifications(current_user).limit(5).group_by{ |comment| comment.commentable}.each do |event, comments|
|
||||
%li= link_to("#{event.title}(#{comments.count})", admin_conference_program_event_path(event.program.conference.short_title, event.id))
|
||||
%li.divider
|
||||
%li= link_to "See all unread Comments (#{unread_notifications(current_user).length})", admin_comments_path
|
||||
%li= link_to 'See all Comments', admin_comments_path(anchor: 'all_comments')
|
||||
%a.dropdown-toggle{"data-toggle" => "dropdown", :href => "#"}
|
||||
Notifications (#{unread_notifications(current_user).length})
|
||||
%span.fa.fa-comment
|
||||
%b.caret
|
||||
%ul.dropdown-menu
|
||||
- if unread_notifications(current_user).length > 0
|
||||
%li.dropdown-header Last 5 Comments for:
|
||||
- unread_notifications(current_user).limit(5).group_by{ |comment| comment.commentable}.each do |event, comments|
|
||||
%li= link_to("#{event.title}(#{comments.count})", admin_conference_program_event_path(event.program.conference.short_title, event.id))
|
||||
%li.divider
|
||||
%li= link_to "See all unread Comments (#{unread_notifications(current_user).length})", admin_comments_path
|
||||
%li= link_to 'See all Comments', admin_comments_path(anchor: 'all_comments')
|
||||
- else
|
||||
%ul.nav.navbar-nav.navbar-right
|
||||
- if ENV['OSEM_ICHAIN_ENABLED'] == 'true'
|
||||
|
|
|
|||
|
|
@ -28,10 +28,10 @@
|
|||
= link_to(admin_conferences_path()) do
|
||||
%span.fa.fa-home
|
||||
Administration
|
||||
- if can? :create, Conference
|
||||
- if can? :new, Conference.new
|
||||
=link_to(new_admin_conference_path) do
|
||||
%span.fa.fa-plus
|
||||
Create Conference
|
||||
New Conference
|
||||
-if @conference and @conference.id and can? :show, @conference
|
||||
%li
|
||||
= link_to(admin_conference_path(@conference.short_title)) do
|
||||
|
|
@ -49,3 +49,8 @@
|
|||
= link_to(admin_revision_history_path) do
|
||||
%span.fa.fa-history
|
||||
Revision History
|
||||
- if ENV['ORGANIZATIONS_ENABLED'] == 'true'
|
||||
%li
|
||||
= link_to(admin_organizations_path) do
|
||||
%span.fa.fa-group
|
||||
Organizations
|
||||
|
|
|
|||
16
app/views/organizations/index.html.haml
Normal file
16
app/views/organizations/index.html.haml
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
.container
|
||||
.row
|
||||
.col-md-12.page-header
|
||||
%h1
|
||||
Organizations
|
||||
.btn-group.pull-right
|
||||
/ = link_to 'Add new', new_organization_path, class: 'btn btn-mini btn-success'
|
||||
- @organizations.each do |organization|
|
||||
.col-md-4
|
||||
.thumbnail
|
||||
= image_tag(organization.picture.thumb.url, width: '20%')
|
||||
.caption
|
||||
%h4
|
||||
= organization.name
|
||||
%button.btn.btn-success Conferences
|
||||
/ = link_to 'Edit', edit_organization_path(organization), class: 'btn btn-mini btn-default'
|
||||
42
app/views/physical_ticket/index.html.haml
Normal file
42
app/views/physical_ticket/index.html.haml
Normal file
|
|
@ -0,0 +1,42 @@
|
|||
.container
|
||||
.row
|
||||
.col-md-12.page-header
|
||||
%h2
|
||||
Tickets
|
||||
.text-muted
|
||||
Your tickets for the conference
|
||||
|
||||
.col-md-12
|
||||
- if @physical_tickets.present?
|
||||
%table.table.table-bordered.table-striped.table-hover#roles
|
||||
%thead
|
||||
%th ID
|
||||
%th Type
|
||||
%th User
|
||||
%th Actions
|
||||
%tbody
|
||||
- @physical_tickets.each do |physical_ticket|
|
||||
%tr
|
||||
%td= physical_ticket.id
|
||||
%td= physical_ticket.ticket.title
|
||||
%td= physical_ticket.user.name
|
||||
%td
|
||||
.btn-group
|
||||
= link_to 'Show',
|
||||
conference_physical_ticket_path(@conference.short_title,
|
||||
physical_ticket.id),
|
||||
class: 'btn btn-primary'
|
||||
= link_to 'Generate PDF',
|
||||
conference_physical_ticket_path(@conference.short_title,
|
||||
physical_ticket.id,
|
||||
format: :pdf),
|
||||
class: 'button btn btn-default btn-info'
|
||||
- else
|
||||
%h5 No Tickets found!
|
||||
.row
|
||||
.col-md-12
|
||||
- if @unpaid_ticket_purchases.any?
|
||||
.h3
|
||||
You have unpaid tickets!
|
||||
%small
|
||||
= link_to "Pay them here", conference_ticket_purchases_path
|
||||
0
app/views/physical_ticket/show.html.haml
Normal file
0
app/views/physical_ticket/show.html.haml
Normal file
62
app/views/physical_ticket/show.pdf.prawn
Normal file
62
app/views/physical_ticket/show.pdf.prawn
Normal file
|
|
@ -0,0 +1,62 @@
|
|||
prawn_document(filename: @file_name, page_layout: @ticket_layout, :page_size =>'A4' ) do |pdf|
|
||||
# Vertical Layout
|
||||
top = pdf.bounds.top
|
||||
bottom = pdf.bounds.bottom
|
||||
left = pdf.bounds.left
|
||||
right = pdf.bounds.right
|
||||
mid_vertical = (pdf.bounds.top-pdf.bounds.bottom)/2
|
||||
mid_horizontal = (pdf.bounds.right-pdf.bounds.left)/2
|
||||
x = 0
|
||||
|
||||
pdf.move_down mid_vertical
|
||||
pdf.dash(2, :space => 1)
|
||||
pdf.stroke_horizontal_rule
|
||||
pdf.stroke_vertical_line pdf.bounds.top, pdf.bounds.bottom, :at => mid_horizontal
|
||||
pdf.move_up mid_vertical
|
||||
pdf.draw_text "TICKET HOLDER", :at => [x,pdf.cursor-30], :size => 17
|
||||
pdf.dash(2, :space => 0)
|
||||
pdf.stroke_rectangle [x, pdf.cursor-50], 230, 150
|
||||
pdf.move_down 80
|
||||
pdf.draw_text "NAME", :at => [x+10,pdf.cursor], :size => 13
|
||||
pdf.fill_color "808080"
|
||||
pdf.draw_text "#{@user.name}", :at => [x+10,pdf.cursor-25], size: 20
|
||||
pdf.fill_color "000000"
|
||||
pdf.draw_text "EMAIL", :at => [x+10,pdf.cursor-50], :size => 13
|
||||
pdf.fill_color "808080"
|
||||
pdf.draw_text "#{@user.email}", :at => [x+10,pdf.cursor-75], size: 20
|
||||
pdf.fill_color "000000"
|
||||
pdf.move_up 20
|
||||
if @conference.picture?
|
||||
if 7 * @conference.picture.image[:width] > 12 * @conference.picture.image[:height]
|
||||
pdf.image "#{Rails.root}/public#{@conference.picture_url}", :at => [mid_horizontal+30, pdf.cursor], :width => 120
|
||||
else
|
||||
pdf.image "#{Rails.root}/public#{@conference.picture_url}", :at => [mid_horizontal+30, pdf.cursor], :height => 70
|
||||
end
|
||||
else
|
||||
pdf.image "#{Rails.root}/public/img/osem-logo.png", :at => [mid_horizontal+30, pdf.cursor], :height => 70
|
||||
end
|
||||
pdf.move_down 70
|
||||
pdf.draw_text "#{@conference.title}", :at => [mid_horizontal+30,pdf.cursor-30], :size => 12
|
||||
pdf.draw_text "#{@conference.organization.name}", :at => [mid_horizontal+30,pdf.cursor-50], :size => 12
|
||||
pdf.draw_text "#{@conference.venue.name}", :at => [mid_horizontal+30,pdf.cursor-70]
|
||||
pdf.move_up 130
|
||||
pdf.move_down mid_vertical
|
||||
pdf.draw_text "EVENT", :at => [x,pdf.cursor-40], :size => 15
|
||||
pdf.fill_color "808080"
|
||||
pdf.draw_text "#{@conference.title}", :at => [x,pdf.cursor-60], size: 12
|
||||
pdf.draw_text "#{@conference.start_date.strftime('%B %d, %Y')}", :at => [x,pdf.cursor-80], size: 12
|
||||
pdf.move_down 80
|
||||
pdf.fill_color "000000"
|
||||
pdf.draw_text "TICKET", :at => [x,pdf.cursor-30], :size => 15
|
||||
pdf.fill_color "808080"
|
||||
pdf.draw_text "#{@physical_ticket.ticket.title}", :at => [x,pdf.cursor-50], size: 12
|
||||
pdf.move_down 50
|
||||
pdf.fill_color "000000"
|
||||
pdf.draw_text "TICKET REF.", :at => [x,pdf.cursor-30], :size => 15
|
||||
pdf.fill_color "808080"
|
||||
pdf.draw_text "#{@physical_ticket.ticket_purchase.id}", :at => [x,pdf.cursor-50], size: 12
|
||||
pdf.move_down 50
|
||||
pdf.fill_color "000000"
|
||||
pdf.draw_text "Powered By OSEM", :at => [(mid_horizontal-left-100)/2,pdf.cursor-100], :size => 11
|
||||
pdf.move_up 180
|
||||
end
|
||||
|
|
@ -4,6 +4,8 @@
|
|||
|
||||
= f.input :subtitle, as: :string
|
||||
|
||||
= speaker_selector_input f
|
||||
|
||||
- if @program.tracks.any?
|
||||
= f.input :track_id, as: :select,
|
||||
collection: @program.tracks.map {|track| ["#{track.name}", track.id] },
|
||||
|
|
@ -60,4 +62,15 @@
|
|||
|
||||
|
||||
%p.text-right
|
||||
= f.submit 'Update Proposal', class: 'btn btn-success'
|
||||
- if @event.new_record?
|
||||
= f.submit 'Create Proposal', class: 'btn btn-success'
|
||||
- else
|
||||
= f.submit 'Update Proposal', class: 'btn btn-success'
|
||||
|
||||
:javascript
|
||||
$(document).ready(function() {
|
||||
$('#event_speaker_ids').selectize({
|
||||
plugins: ['remove_button'],
|
||||
maxItems: 5
|
||||
} )
|
||||
});
|
||||
|
|
|
|||
|
|
@ -3,12 +3,17 @@
|
|||
%li{'class'=>class_for_todo(progress_status['registered'])}
|
||||
%span{'class'=>icon_for_todo(progress_status['registered'])}
|
||||
- if progress_status['registered']
|
||||
= link_to 'Register to the conference', edit_conference_conference_registration_path(event.program.conference.short_title)
|
||||
Speaker(s) registered to the conference
|
||||
- else
|
||||
= link_to 'Register to the conference', new_conference_conference_registration_path(event.program.conference.short_title)
|
||||
%li{'class'=>class_for_todo(progress_status['biography'])}
|
||||
%span{'class'=>icon_for_todo(progress_status['biography'])}
|
||||
= link_to 'Fill out your biography', edit_user_path(event.submitter)
|
||||
= link_to 'Speaker(s) not registered to the conference', new_conference_conference_registration_path(event.program.conference.short_title)
|
||||
%li{'class'=>class_for_todo(progress_status['biographies'])}
|
||||
%span{'class'=>icon_for_todo(progress_status['biographies'])}
|
||||
- if progress_status['biographies']
|
||||
Speakers have filled out their biographies
|
||||
- elsif current_user.biography.blank? && event.speakers.include?(current_user)
|
||||
= link_to 'Fill out your biography', edit_user_path(current_user)
|
||||
- else
|
||||
Speakers' biographies missing
|
||||
%li{'class'=>class_for_todo(progress_status['subtitle'])}
|
||||
%span{'class'=>icon_for_todo(progress_status['subtitle'])}
|
||||
= link_to 'Add a subtitle', edit_conference_program_proposal_path(event.program.conference.short_title, event)
|
||||
|
|
|
|||
|
|
@ -3,8 +3,9 @@
|
|||
%meta{ property: "og:url", content: conference_program_proposal_url(@conference.short_title, @event) }
|
||||
%meta{ property: "og:description", content: @event.abstract }
|
||||
%meta{ property: "og:site_name", content: (ENV['OSEM_NAME'] || 'OSEM') }
|
||||
%meta{ property: "og:image", content: @speaker.gravatar_url }
|
||||
%meta{ property: "og:image:secure_url", content: @speaker.gravatar_url }
|
||||
- if @speakers_ordered.any?
|
||||
%meta{ property: "og:image", content: @speakers_ordered.first.gravatar_url }
|
||||
%meta{ property: "og:image:secure_url", content: @speakers_ordered.first.gravatar_url }
|
||||
|
||||
.container
|
||||
.row
|
||||
|
|
@ -25,21 +26,25 @@
|
|||
|
||||
.row
|
||||
.col-md-3
|
||||
.speakerinfo
|
||||
.col-md-12
|
||||
= image_tag @speaker.gravatar_url(size: 200), class: 'img-responsive img-rounded'
|
||||
.col-md-12
|
||||
%h3
|
||||
by
|
||||
= link_to @speaker.name, user_path(@speaker.id)
|
||||
= "(#{@speaker.email})" if @speaker.email_public
|
||||
- if @speaker.affiliation?
|
||||
%br
|
||||
%span.muted
|
||||
from
|
||||
= @speaker.affiliation
|
||||
-if @speaker.biography?
|
||||
= markdown(@speaker.biography)
|
||||
%h3
|
||||
Presented by:
|
||||
- @speakers_ordered.each do |speaker|
|
||||
.speakerinfo
|
||||
.row
|
||||
.col-md-4
|
||||
= image_tag speaker.gravatar_url(:size => 120), class: 'img-responsive img-rounded'
|
||||
.col-md-8
|
||||
%h4
|
||||
= link_to speaker.name, user_path(speaker.id)
|
||||
= "(#{speaker.email})"
|
||||
- if speaker.affiliation?
|
||||
.text-muted
|
||||
from
|
||||
= speaker.affiliation
|
||||
-if speaker.biography?
|
||||
.row.speakerbio
|
||||
.col-md-12
|
||||
= markdown(speaker.biography)
|
||||
.col-md-9
|
||||
.row
|
||||
.col-md-12
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
- intervals = hrs_per_slide * 60 / EventType::LENGTH_STEP + 1
|
||||
- intervals = hrs_per_slide * 60 / @conference.program.schedule_interval + 1
|
||||
- width = 85 / intervals
|
||||
- carousel_number = (@conf_period / hrs_per_slide.to_f).ceil
|
||||
.carousel.slide{ id: "carousel-#{ date }-#{ hrs_per_slide }", |
|
||||
|
|
@ -41,7 +41,7 @@
|
|||
|
||||
- if event_schedule
|
||||
/ There is an event, calculate the span and show it
|
||||
- event_span = (event_schedule.end_time.to_i - start_room_time.to_i) / 60 / EventType::LENGTH_STEP
|
||||
- event_span = (event_schedule.end_time.to_i - start_room_time.to_i) / 60 / @conference.program.schedule_interval
|
||||
- span = ((event_span + i - 1 ) > intervals ? intervals + 1 - i : event_span)
|
||||
= render partial: 'schedule_item', locals: {event: event_schedule.event, event_schedule: event_schedule, span: span, width: width}
|
||||
- else
|
||||
|
|
|
|||
|
|
@ -1,9 +1,9 @@
|
|||
.panel.panel-default.event-panel{ onClick: 'eventClicked(event, this);', "data-url" => "#{url_for(conference_program_proposal_path(@conference.short_title, event.id))}" }
|
||||
.panel-body
|
||||
- if speaker = event.speakers.first
|
||||
= image_tag speaker.gravatar_url, class: "img-circle pull-right all-speaker-pic", |
|
||||
alt: speaker.name, |
|
||||
title: speaker.name |
|
||||
- event.speakers_ordered.each do |speaker|
|
||||
= 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)
|
||||
|
|
@ -18,7 +18,7 @@
|
|||
presented by #{event.speaker_names}
|
||||
%p
|
||||
= markdown(truncate(event.abstract, length: 400))
|
||||
= link_to 'more', conference_program_proposal_path(@conference.short_title, event.id) if event.abstract.length > 400=>
|
||||
= link_to 'more', conference_program_proposal_path(@conference.short_title, event.id) if event.abstract.length > 400
|
||||
- if event_schedule.present?
|
||||
%span.track
|
||||
%span.fa.fa-clock-o
|
||||
|
|
|
|||
|
|
@ -9,8 +9,9 @@
|
|||
|
||||
= event.title
|
||||
|
||||
- if speaker = event.speakers.first
|
||||
= image_tag speaker.gravatar_url, class: "img-circle pull-right speaker-pic", |
|
||||
alt: speaker.name, |
|
||||
title: speaker.name, |
|
||||
style: "height: #{ speaker_height(@rooms) }px; width: #{ speaker_width(@rooms) }px;"
|
||||
- event.speakers_ordered.each do |speaker|
|
||||
= image_tag speaker.gravatar_url, :class => "img-circle pull-right speaker-pic", |
|
||||
:alt => speaker.name, |
|
||||
:title => speaker.name, |
|
||||
:style => "height: #{ speaker_height(@rooms) }px; width: #{ speaker_width(@rooms) }px;"
|
||||
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@
|
|||
%start= @conference.start_date
|
||||
%end= @conference.end_date
|
||||
%days= (@conference.end_date - @conference.start_date).to_i + 1
|
||||
%timeslot_duration= length_timestamp(EventType::LENGTH_STEP)
|
||||
%timeslot_duration= length_timestamp(@conference.program.schedule_interval)
|
||||
|
||||
- if @events_xml.any?
|
||||
- @events_xml.keys.each.with_index(1) do |day, index|
|
||||
|
|
@ -16,7 +16,7 @@
|
|||
%room{ name: room.name }
|
||||
- events_in_rooms[room].each do |event|
|
||||
%event{ guid: event.guid, id: event.id }
|
||||
%date= event.time.iso8601
|
||||
%date= time_with_timezone(event.time)
|
||||
%start= event.time.strftime('%H:%M')
|
||||
%duration= length_timestamp(event.event_type.length)
|
||||
%room= event.room.name
|
||||
|
|
@ -27,6 +27,7 @@
|
|||
%subtitle= event.subtitle
|
||||
%track= event.track.name if event.track
|
||||
%abstract= event.abstract
|
||||
%description= event.abstract
|
||||
%recording
|
||||
%license/
|
||||
%optout=false #FIXME
|
||||
|
|
|
|||
30
app/views/ticket_purchases/index.html.haml
Normal file
30
app/views/ticket_purchases/index.html.haml
Normal file
|
|
@ -0,0 +1,30 @@
|
|||
.container
|
||||
.row
|
||||
.col-md-12.page-header
|
||||
%h2
|
||||
Ticket Purchases
|
||||
.text-muted
|
||||
Your unpaid ticket purchases for the conference
|
||||
|
||||
.col-md-12
|
||||
- if @unpaid_ticket_purchases.present?
|
||||
%table.table.table-bordered.table-striped.table-hover#roles
|
||||
%thead
|
||||
%th ID
|
||||
%th Type
|
||||
%th Quantity
|
||||
%th Date
|
||||
%th Actions
|
||||
%tbody
|
||||
- @unpaid_ticket_purchases.each do |ticket_purchase|
|
||||
%tr
|
||||
%td= ticket_purchase.id
|
||||
%td= ticket_purchase.ticket.title
|
||||
%td= ticket_purchase.quantity
|
||||
%td= ticket_purchase.created_at.strftime('%B %d, %Y')
|
||||
%td
|
||||
.btn-group
|
||||
= link_to 'Pay', new_conference_payment_path,
|
||||
class: 'btn btn-primary'
|
||||
- else
|
||||
%h5 You don't have any unpaid ticket purchase!
|
||||
17
app/views/tracks/_form.html.haml
Normal file
17
app/views/tracks/_form.html.haml
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
.container
|
||||
.row
|
||||
.col-md-12
|
||||
.page-header
|
||||
%h1
|
||||
- if @track.new_record?
|
||||
New
|
||||
= @track.name
|
||||
Track
|
||||
.row
|
||||
.col-md-12
|
||||
= semantic_form_for(@track, url: (@track.new_record? ? conference_program_tracks_path : conference_program_track_path(@conference.short_title, @track))) do |f|
|
||||
= f.input :name
|
||||
= f.input :short_name, hint: "A short and unique handle for the track, using only letters, numbers, underscores, and dashes. This will be used to identify the track in URLs etc. Example: 'my_awesome_track'", input_html: { required: 'required', pattern: '[a-zA-Z0-9_-]+', title: 'Only letters, numbers, underscores, and dashes.' }
|
||||
= f.input :color, input_html: {size: 6, type: 'color'}, required: true
|
||||
= f.input :description, input_html: {rows: 2, data: { provide: 'markdown-editable' } }, required: true, hint: markdown_hint
|
||||
= f.action :submit, as: :button, button_html: { class: 'btn btn-primary' }
|
||||
43
app/views/tracks/index.html.haml
Normal file
43
app/views/tracks/index.html.haml
Normal file
|
|
@ -0,0 +1,43 @@
|
|||
.container
|
||||
.row
|
||||
.col-md-12.page-header
|
||||
%h1
|
||||
Track requests for
|
||||
%span.notranslate
|
||||
= @conference.title
|
||||
|
||||
- if @tracks.any?
|
||||
.row
|
||||
.col-md-12
|
||||
%table.table.table-hover#tracks
|
||||
%thead
|
||||
%th Name
|
||||
%th Short name
|
||||
%th Description
|
||||
%th Color
|
||||
%th State
|
||||
%th Actions
|
||||
%tbody
|
||||
- @tracks.each do |track|
|
||||
%tr
|
||||
%td
|
||||
= link_to(conference_program_track_path(@conference.short_title, track)) do
|
||||
= track.name
|
||||
%td
|
||||
= track.short_name
|
||||
%td
|
||||
%p
|
||||
= truncate(track.description)
|
||||
%td
|
||||
%span.label{style: "background-color: #{track.color}; color: #{ contrast_color(track.color) }"}
|
||||
= track.color
|
||||
%td
|
||||
= track.state
|
||||
%td
|
||||
= link_to 'Edit', edit_conference_program_track_path(@conference.short_title, track),
|
||||
method: :get, class: 'btn btn-primary'
|
||||
|
||||
.row
|
||||
.col-md-12
|
||||
- if can? :create, @track
|
||||
= link_to "New Track request", new_conference_program_track_path(@conference.short_title), class: 'btn btn-success pull-right'
|
||||
26
app/views/tracks/show.html.haml
Normal file
26
app/views/tracks/show.html.haml
Normal file
|
|
@ -0,0 +1,26 @@
|
|||
.container
|
||||
.row
|
||||
.col-md-12
|
||||
.page-header
|
||||
%h1
|
||||
= @track.name
|
||||
Track
|
||||
.row
|
||||
.col-md-8
|
||||
%dl.dl-horizontal
|
||||
%dt
|
||||
Color:
|
||||
%dd
|
||||
%span.label{style: "background-color: #{@track.color}; color: #{ contrast_color(@track.color) }"}
|
||||
= @track.color
|
||||
%dt
|
||||
State:
|
||||
%dd
|
||||
= @track.state
|
||||
%dt
|
||||
Description
|
||||
%dd
|
||||
= @track.description
|
||||
.row
|
||||
.col-md-12.text-right
|
||||
= link_to 'Edit Track request', edit_conference_program_track_path(@conference.short_title, @track), class: 'btn btn-primary'
|
||||
|
|
@ -6,8 +6,8 @@
|
|||
.row
|
||||
.col-md-12
|
||||
= semantic_form_for(@user, url: user_path(@user.id)) do |f|
|
||||
= f.input :name, as: :string
|
||||
= f.input :nickname, as: :string
|
||||
= f.input :name, as: :string, hint: 'This is your real name.'
|
||||
= f.input :nickname, as: :string, hint: 'This is how the other users see you, not your real name'
|
||||
.control-label
|
||||
= "Avatar"
|
||||
= image_tag(@user.gravatar_url(size: '48'), title: "Yo #{@user.name}!", alt: '')
|
||||
|
|
|
|||
|
|
@ -11,11 +11,11 @@
|
|||
= markdown(@user.biography)
|
||||
.row
|
||||
.col-md-12
|
||||
- if @user.events.confirmed.any?
|
||||
- if @user.presented_events.confirmed.any?
|
||||
%h3
|
||||
= "#{@user.name} presents #{pluralize(@user.events.confirmed.count, 'Event')}:"
|
||||
= "#{@user.name} presents #{pluralize(@user.presented_events.confirmed.count, 'Event')}:"
|
||||
%ul.list-unstyled
|
||||
- @user.events.confirmed.each do |event|
|
||||
- @user.presented_events.confirmed.each do |event|
|
||||
%li
|
||||
%h4
|
||||
= link_to event.title, conference_program_proposal_path(event.program.conference.short_title, event.id)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue