Merge branch 'master' into render_show_if_one_conf
This commit is contained in:
commit
747ecc80e9
77 changed files with 822 additions and 115 deletions
14
Dockerfile
14
Dockerfile
|
|
@ -16,6 +16,12 @@ RUN cd /usr/bin && \
|
||||||
tar -xf dockerize.tar.gz && \
|
tar -xf dockerize.tar.gz && \
|
||||||
rm dockerize.tar.gz
|
rm dockerize.tar.gz
|
||||||
|
|
||||||
|
# dumb-init for a proper PID 1
|
||||||
|
RUN cd /tmp && \
|
||||||
|
wget https://github.com/Yelp/dumb-init/releases/download/v1.2.0/dumb-init_1.2.0_amd64.deb && \
|
||||||
|
dpkg -i dumb-init_1.2.0_amd64.deb && \
|
||||||
|
rm dumb-init_1.2.0_amd64.deb
|
||||||
|
|
||||||
# explicitly add Gemfile and install dependencies using bundler to make use of
|
# explicitly add Gemfile and install dependencies using bundler to make use of
|
||||||
# Docker's caching
|
# Docker's caching
|
||||||
WORKDIR /osem/
|
WORKDIR /osem/
|
||||||
|
|
@ -25,12 +31,13 @@ RUN bundle install --without test development
|
||||||
|
|
||||||
# add OSEM files and prepare them for use inside a Docker container
|
# add OSEM files and prepare them for use inside a Docker container
|
||||||
COPY . /osem/
|
COPY . /osem/
|
||||||
RUN chown osem.osem /osem/ -R && \
|
RUN chown -R osem.root /osem/ && \
|
||||||
|
chmod -R g=u /osem/ && \
|
||||||
mv /osem/config/database.yml.docker /osem/config/database.yml
|
mv /osem/config/database.yml.docker /osem/config/database.yml
|
||||||
|
|
||||||
# data directory is used to cache the secret key in a file
|
# data directory is used to cache the secret key in a file
|
||||||
ENV DATA_DIR /data
|
ENV DATA_DIR /data
|
||||||
RUN install -d -m 0700 -o osem $DATA_DIR
|
RUN install -d -m 0770 -o osem -g root $DATA_DIR
|
||||||
VOLUME ["$DATA_DIR"]
|
VOLUME ["$DATA_DIR"]
|
||||||
|
|
||||||
USER osem
|
USER osem
|
||||||
|
|
@ -42,4 +49,7 @@ COPY docker/init.sh /init.sh
|
||||||
# from a webserver
|
# from a webserver
|
||||||
ENV RAILS_SERVE_STATIC_FILES 1
|
ENV RAILS_SERVE_STATIC_FILES 1
|
||||||
|
|
||||||
|
# Runs "/usr/bin/dumb-init -- /my/script --with --args"
|
||||||
|
ENTRYPOINT ["/usr/bin/dumb-init", "--"]
|
||||||
|
|
||||||
CMD ["bash", "/init.sh"]
|
CMD ["bash", "/init.sh"]
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,7 @@ function update_price($this){
|
||||||
$('.total_row').each(function( index ) {
|
$('.total_row').each(function( index ) {
|
||||||
total += parseFloat($(this).text());
|
total += parseFloat($(this).text());
|
||||||
});
|
});
|
||||||
$('#total_price').text(total);
|
$('#total_price').text(total.toFixed(2));
|
||||||
}
|
}
|
||||||
|
|
||||||
$( document ).ready(function() {
|
$( document ).ready(function() {
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,24 @@ module Admin
|
||||||
load_and_authorize_resource :conference, find_by: :short_title
|
load_and_authorize_resource :conference, find_by: :short_title
|
||||||
load_and_authorize_resource through: :conference
|
load_and_authorize_resource through: :conference
|
||||||
|
|
||||||
def index; end
|
def index
|
||||||
|
@file_name = "booths_for_#{@conference.short_title}"
|
||||||
|
@booth_export_option = params[:booth_export_option]
|
||||||
|
respond_to do |format|
|
||||||
|
format.html
|
||||||
|
# Explicity call #to_json to avoid the use of EventSerializer
|
||||||
|
format.json { render json: Booth.where(state: :confirmed, program: @program).to_json }
|
||||||
|
format.xlsx do
|
||||||
|
response.headers['Content-Disposition'] = "attachment; filename=\"#{@file_name}.xlsx\""
|
||||||
|
render 'booths'
|
||||||
|
end
|
||||||
|
format.pdf { render 'booths' }
|
||||||
|
format.csv do
|
||||||
|
response.headers['Content-Disposition'] = "attachment; filename=\"#{@file_name}.csv\""
|
||||||
|
render 'booths'
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
def show; end
|
def show; end
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -55,7 +55,7 @@ module Admin
|
||||||
private
|
private
|
||||||
|
|
||||||
def cfp_params
|
def cfp_params
|
||||||
params.require(:cfp).permit(:start_date, :end_date, :cfp_type)
|
params.require(:cfp).permit(:start_date, :end_date, :description, :cfp_type)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
||||||
|
|
@ -193,6 +193,7 @@ module Admin
|
||||||
def edit
|
def edit
|
||||||
@conferences = Conference.all
|
@conferences = Conference.all
|
||||||
@date_string = date_string(@conference.start_date, @conference.end_date)
|
@date_string = date_string(@conference.start_date, @conference.end_date)
|
||||||
|
@affected_event_count = @conference.program.events.scheduled(@conference.program.selected_schedule_id).count
|
||||||
respond_to do |format|
|
respond_to do |format|
|
||||||
format.html
|
format.html
|
||||||
format.json { render json: @conference.to_json }
|
format.json { render json: @conference.to_json }
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,25 @@ module Admin
|
||||||
# Show flash message with ajax calls
|
# Show flash message with ajax calls
|
||||||
after_action :prepare_unobtrusive_flash, only: :toggle_cfp_inclusion
|
after_action :prepare_unobtrusive_flash, only: :toggle_cfp_inclusion
|
||||||
|
|
||||||
def index; end
|
def index
|
||||||
|
@file_name = "tracks_for_#{@conference.short_title}"
|
||||||
|
@track_export_option = params[:track_export_option]
|
||||||
|
|
||||||
|
respond_to do |format|
|
||||||
|
format.html
|
||||||
|
# Explicity call #to_json to avoid the use of EventSerializer
|
||||||
|
format.json { render json: Track.where(state: :confirmed, program: @program).to_json }
|
||||||
|
format.xlsx do
|
||||||
|
response.headers['Content-Disposition'] = "attachment; filename=\"#{@file_name}.xlsx\""
|
||||||
|
render 'tracks'
|
||||||
|
end
|
||||||
|
format.pdf { render 'tracks' }
|
||||||
|
format.csv do
|
||||||
|
response.headers['Content-Disposition'] = "attachment; filename=\"#{@file_name}.csv\""
|
||||||
|
render 'tracks'
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
def show
|
def show
|
||||||
respond_to do |format|
|
respond_to do |format|
|
||||||
|
|
|
||||||
|
|
@ -27,8 +27,9 @@ class ConferenceRegistrationsController < ApplicationController
|
||||||
end
|
end
|
||||||
|
|
||||||
def show
|
def show
|
||||||
@total_price = Ticket.total_price(@conference, current_user, paid: true)
|
@total_price = Ticket.total_price_user(@conference, current_user, paid: true)
|
||||||
@tickets = current_user.ticket_purchases.by_conference(@conference).paid
|
@tickets = current_user.ticket_purchases.by_conference(@conference).paid
|
||||||
|
@total_price_per_ticket = @tickets.group(:ticket_id).sum('amount_paid * quantity')
|
||||||
@ticket_payments = @tickets.group_by(&:ticket_id)
|
@ticket_payments = @tickets.group_by(&:ticket_id)
|
||||||
@total_quantity = @tickets.group(:ticket_id).sum(:quantity)
|
@total_quantity = @tickets.group(:ticket_id).sum(:quantity)
|
||||||
end
|
end
|
||||||
|
|
|
||||||
|
|
@ -4,4 +4,10 @@ class OrganizationsController < ApplicationController
|
||||||
def index
|
def index
|
||||||
@organizations = Organization.all
|
@organizations = Organization.all
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def conferences
|
||||||
|
@current = @organization.conferences.upcoming.reorder(start_date: :asc)
|
||||||
|
@antiquated = @organization.conferences.past
|
||||||
|
render '/conferences/index'
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
|
||||||
|
|
@ -163,6 +163,12 @@ module ApplicationHelper
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def rescheduling_hint(affected_event_count)
|
||||||
|
if affected_event_count > 0
|
||||||
|
"You have #{affected_event_count} scheduled #{'event'.pluralize(affected_event_count)}. Changing the conference hours will unschedule those scheduled outside the conference hours."
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
##
|
##
|
||||||
# ====Gets
|
# ====Gets
|
||||||
# a conference object
|
# a conference object
|
||||||
|
|
@ -171,4 +177,18 @@ module ApplicationHelper
|
||||||
def hidden_if_conference_over(conference)
|
def hidden_if_conference_over(conference)
|
||||||
'hidden' if Date.today > conference.end_date
|
'hidden' if Date.today > conference.end_date
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def nav_root_link_for(conference)
|
||||||
|
link_text = (
|
||||||
|
conference.try(:organization).try(:name) ||
|
||||||
|
ENV['OSEM_NAME'] ||
|
||||||
|
'OSEM'
|
||||||
|
)
|
||||||
|
link_to(
|
||||||
|
link_text,
|
||||||
|
root_path,
|
||||||
|
class: 'navbar-brand',
|
||||||
|
title: 'Open Source Event Manager'
|
||||||
|
)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
|
||||||
|
|
@ -15,7 +15,7 @@ class Ability
|
||||||
|
|
||||||
# Abilities for not signed in users (guests)
|
# Abilities for not signed in users (guests)
|
||||||
def not_signed_in
|
def not_signed_in
|
||||||
can [:index], Organization
|
can [:index, :conferences], Organization
|
||||||
can [:index], Conference
|
can [:index], Conference
|
||||||
can [:show], Conference do |conference|
|
can [:show], Conference do |conference|
|
||||||
conference.splashpage && conference.splashpage.public == true
|
conference.splashpage && conference.splashpage.public == true
|
||||||
|
|
|
||||||
|
|
@ -496,7 +496,7 @@ class Conference < ActiveRecord::Base
|
||||||
if tickets && ticket_purchases
|
if tickets && ticket_purchases
|
||||||
tickets.each do |ticket|
|
tickets.each do |ticket|
|
||||||
result[ticket.title] = {
|
result[ticket.title] = {
|
||||||
'value' => ApplicationController.helpers.humanized_money(ticket.tickets_turnover).delete(',').to_i,
|
'value' => ApplicationController.helpers.humanized_money(ticket.tickets_turnover_total(ticket.id)).delete(',').to_i,
|
||||||
'color' => "\##{Digest::MD5.hexdigest(ticket.title)[0..5]}"
|
'color' => "\##{Digest::MD5.hexdigest(ticket.title)[0..5]}"
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
|
|
||||||
|
|
@ -204,11 +204,12 @@ class Event < ActiveRecord::Base
|
||||||
end
|
end
|
||||||
|
|
||||||
def speaker_names
|
def speaker_names
|
||||||
result = Set.new
|
speakers.map(&:name).join(', ')
|
||||||
speakers.each do |speaker|
|
end
|
||||||
result.add(speaker.name)
|
|
||||||
end
|
# Returns emails of all the speaker belongs to a particular event
|
||||||
result.to_a.to_sentence
|
def speaker_emails
|
||||||
|
speakers.map(&:email).join(', ')
|
||||||
end
|
end
|
||||||
|
|
||||||
##
|
##
|
||||||
|
|
|
||||||
|
|
@ -42,7 +42,8 @@ class Program < ActiveRecord::Base
|
||||||
has_many :event_schedules, through: :events
|
has_many :event_schedules, through: :events
|
||||||
|
|
||||||
has_many :event_users, through: :events
|
has_many :event_users, through: :events
|
||||||
has_many :speakers, -> { distinct }, through: :event_users, source: :user do
|
has_many :program_events_speakers, -> {where(event_role: 'speaker')}, through: :events, source: :event_users
|
||||||
|
has_many :speakers, -> { distinct }, through: :program_events_speakers, source: :user do
|
||||||
def confirmed
|
def confirmed
|
||||||
joins(:events).where(events: { state: :confirmed })
|
joins(:events).where(events: { state: :confirmed })
|
||||||
end
|
end
|
||||||
|
|
|
||||||
|
|
@ -55,12 +55,18 @@ class Ticket < ActiveRecord::Base
|
||||||
result ? result : Money.new(0, 'USD')
|
result ? result : Money.new(0, 'USD')
|
||||||
end
|
end
|
||||||
|
|
||||||
def tickets_sold
|
def self.total_price_user(conference, user, paid: false)
|
||||||
ticket_purchases.paid.sum(:quantity)
|
tickets = TicketPurchase.where(conference: conference, user: user, paid: paid)
|
||||||
|
tickets.inject(0){ |sum, ticket| sum + (ticket.amount_paid * ticket.quantity) }
|
||||||
end
|
end
|
||||||
|
|
||||||
def tickets_turnover
|
def tickets_turnover_total(id)
|
||||||
tickets_sold * price
|
tickets = TicketPurchase.where(ticket_id: id)
|
||||||
|
tickets.inject(0){ |sum, ticket| sum + (ticket.amount_paid * ticket.quantity) }
|
||||||
|
end
|
||||||
|
|
||||||
|
def tickets_sold
|
||||||
|
ticket_purchases.paid.sum(:quantity)
|
||||||
end
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
|
||||||
|
|
@ -52,7 +52,8 @@ class TicketPurchase < ActiveRecord::Base
|
||||||
purchase = new(ticket_id: ticket.id,
|
purchase = new(ticket_id: ticket.id,
|
||||||
conference_id: conference.id,
|
conference_id: conference.id,
|
||||||
user_id: user.id,
|
user_id: user.id,
|
||||||
quantity: quantity)
|
quantity: quantity,
|
||||||
|
amount_paid: ticket.price)
|
||||||
purchase.pay(nil) if ticket.price_cents.zero?
|
purchase.pay(nil) if ticket.price_cents.zero?
|
||||||
end
|
end
|
||||||
purchase
|
purchase
|
||||||
|
|
|
||||||
19
app/views/admin/booths/_all_booths.csv.haml
Normal file
19
app/views/admin/booths/_all_booths.csv.haml
Normal file
|
|
@ -0,0 +1,19 @@
|
||||||
|
- headers = ['Booth ID',
|
||||||
|
'Title',
|
||||||
|
'Description',
|
||||||
|
'Reasoning',
|
||||||
|
'Submitter Name',
|
||||||
|
'Submitter Relationship',
|
||||||
|
'Website Url',
|
||||||
|
'State']
|
||||||
|
= CSV.generate_line ['All booths']
|
||||||
|
= CSV.generate_line headers
|
||||||
|
- @booths.each do |booth|
|
||||||
|
= CSV.generate_line([booth.id,
|
||||||
|
booth.title,
|
||||||
|
booth.description,
|
||||||
|
booth.reasoning,
|
||||||
|
booth.submitter.name,
|
||||||
|
booth.submitter_relationship,
|
||||||
|
booth.website_url,
|
||||||
|
booth.state]).html_safe
|
||||||
26
app/views/admin/booths/_all_booths.pdf.prawn
Normal file
26
app/views/admin/booths/_all_booths.pdf.prawn
Normal file
|
|
@ -0,0 +1,26 @@
|
||||||
|
prawn_document(force_download: true, filename: "#{@file_name}.pdf", page_layout: :landscape) do |pdf|
|
||||||
|
booths_array = []
|
||||||
|
header_array = ['Booth ID',
|
||||||
|
'Title',
|
||||||
|
'Description',
|
||||||
|
'Reasoning',
|
||||||
|
'Submitter Name',
|
||||||
|
'Submitter Relationship',
|
||||||
|
'Website Url',
|
||||||
|
'State']
|
||||||
|
booths_array << header_array
|
||||||
|
@booths.each do |booth|
|
||||||
|
row = []
|
||||||
|
row << booth.id
|
||||||
|
row << booth.title
|
||||||
|
row << booth.description
|
||||||
|
row << booth.reasoning
|
||||||
|
row << booth.submitter.name
|
||||||
|
row << booth.submitter_relationship
|
||||||
|
row << booth.website_url
|
||||||
|
row << booth.state
|
||||||
|
booths_array << row
|
||||||
|
end
|
||||||
|
pdf.text "#{@conference.short_title} booths", font_size: 25, align: :center
|
||||||
|
pdf.table booths_array, header: true, cell_style: {size: 8, border_width: 1},column_widths: [45,70,153,152,70,80,105,45]
|
||||||
|
end
|
||||||
27
app/views/admin/booths/_all_booths.xlsx.axlsx
Normal file
27
app/views/admin/booths/_all_booths.xlsx.axlsx
Normal file
|
|
@ -0,0 +1,27 @@
|
||||||
|
wb.add_worksheet(name: 'all booths') do |sheet|
|
||||||
|
bold_style = wb.styles.add_style(b: true)
|
||||||
|
wrap_text = wb.styles.add_style alignment: {wrap_text: true}
|
||||||
|
row = ['Booth ID',
|
||||||
|
'Title',
|
||||||
|
'Description',
|
||||||
|
'Reasoning',
|
||||||
|
'Submitter Name',
|
||||||
|
'Submitter Relationship',
|
||||||
|
'Website Url',
|
||||||
|
'State']
|
||||||
|
|
||||||
|
sheet.add_row row, style: bold_style
|
||||||
|
@booths.each do |booth|
|
||||||
|
row = []
|
||||||
|
row << booth.id
|
||||||
|
row << booth.title
|
||||||
|
row << booth.description
|
||||||
|
row << booth.reasoning
|
||||||
|
row << booth.submitter.name
|
||||||
|
row << booth.submitter_relationship
|
||||||
|
row << booth.website_url
|
||||||
|
row << booth.state
|
||||||
|
sheet.add_row row , style: wrap_text
|
||||||
|
sheet.column_widths 10,20,35,35,20,30,35,10
|
||||||
|
end
|
||||||
|
end
|
||||||
19
app/views/admin/booths/_confirmed_booths.csv.haml
Normal file
19
app/views/admin/booths/_confirmed_booths.csv.haml
Normal file
|
|
@ -0,0 +1,19 @@
|
||||||
|
- headers = ['Booth ID',
|
||||||
|
'Title',
|
||||||
|
'Description',
|
||||||
|
'Reasoning',
|
||||||
|
'Submitter Name',
|
||||||
|
'Submitter Relationship',
|
||||||
|
'Website Url',
|
||||||
|
'State']
|
||||||
|
= CSV.generate_line ['All booths']
|
||||||
|
= CSV.generate_line headers
|
||||||
|
- @booths.confirmed.each do |booth|
|
||||||
|
= CSV.generate_line([booth.id,
|
||||||
|
booth.title,
|
||||||
|
booth.description,
|
||||||
|
booth.reasoning,
|
||||||
|
booth.submitter.name,
|
||||||
|
booth.submitter_relationship,
|
||||||
|
booth.website_url,
|
||||||
|
booth.state]).html_safe
|
||||||
26
app/views/admin/booths/_confirmed_booths.pdf.prawn
Normal file
26
app/views/admin/booths/_confirmed_booths.pdf.prawn
Normal file
|
|
@ -0,0 +1,26 @@
|
||||||
|
prawn_document(force_download: true, filename: "#{@file_name}.pdf", page_layout: :landscape) do |pdf|
|
||||||
|
booths_array = []
|
||||||
|
header_array = ['Booth ID',
|
||||||
|
'Title',
|
||||||
|
'Description',
|
||||||
|
'Reasoning',
|
||||||
|
'Submitter Name',
|
||||||
|
'Submitter Relationship',
|
||||||
|
'Website Url',
|
||||||
|
'State']
|
||||||
|
booths_array << header_array
|
||||||
|
@booths.confirmed.each do |booth|
|
||||||
|
row = []
|
||||||
|
row << booth.id
|
||||||
|
row << booth.title
|
||||||
|
row << booth.description
|
||||||
|
row << booth.reasoning
|
||||||
|
row << booth.submitter.name
|
||||||
|
row << booth.submitter_relationship
|
||||||
|
row << booth.website_url
|
||||||
|
row << booth.state
|
||||||
|
booths_array << row
|
||||||
|
end
|
||||||
|
pdf.text "#{@conference.short_title} booths", font_size: 25, align: :center
|
||||||
|
pdf.table booths_array, header: true, cell_style: {size: 8, border_width: 1},column_widths: [45,70,153,152,70,80,105,45]
|
||||||
|
end
|
||||||
27
app/views/admin/booths/_confirmed_booths.xlsx.axlsx
Normal file
27
app/views/admin/booths/_confirmed_booths.xlsx.axlsx
Normal file
|
|
@ -0,0 +1,27 @@
|
||||||
|
wb.add_worksheet(name: 'all booths') do |sheet|
|
||||||
|
bold_style = wb.styles.add_style(b: true)
|
||||||
|
wrap_text = wb.styles.add_style alignment: {wrap_text: true}
|
||||||
|
row = ['Booth ID',
|
||||||
|
'Title',
|
||||||
|
'Description',
|
||||||
|
'Reasoning',
|
||||||
|
'Submitter Name',
|
||||||
|
'Submitter Relationship',
|
||||||
|
'Website Url',
|
||||||
|
'State']
|
||||||
|
sheet.add_row row, style: bold_style
|
||||||
|
|
||||||
|
@booths.confirmed.each do |booth|
|
||||||
|
row = []
|
||||||
|
row << booth.id
|
||||||
|
row << booth.title
|
||||||
|
row << booth.description
|
||||||
|
row << booth.reasoning
|
||||||
|
row << booth.submitter.name
|
||||||
|
row << booth.submitter_relationship
|
||||||
|
row << booth.website_url
|
||||||
|
row << booth.state
|
||||||
|
sheet.add_row row , style: wrap_text
|
||||||
|
sheet.column_widths 10,20,35,35,20,30,35,10
|
||||||
|
end
|
||||||
|
end
|
||||||
4
app/views/admin/booths/booths.csv.haml
Normal file
4
app/views/admin/booths/booths.csv.haml
Normal file
|
|
@ -0,0 +1,4 @@
|
||||||
|
- if @booth_export_option == 'confirmed'
|
||||||
|
= render 'confirmed_booths'
|
||||||
|
- elsif @booth_export_option == 'all'
|
||||||
|
= render 'all_booths'
|
||||||
5
app/views/admin/booths/booths.pdf.prawn
Normal file
5
app/views/admin/booths/booths.pdf.prawn
Normal file
|
|
@ -0,0 +1,5 @@
|
||||||
|
if @booth_export_option == 'confirmed'
|
||||||
|
render 'confirmed_booths'
|
||||||
|
elsif @booth_export_option == 'all'
|
||||||
|
render 'all_booths'
|
||||||
|
end
|
||||||
7
app/views/admin/booths/booths.xlsx.axlsx
Normal file
7
app/views/admin/booths/booths.xlsx.axlsx
Normal file
|
|
@ -0,0 +1,7 @@
|
||||||
|
wb = xlsx_package.workbook
|
||||||
|
xlsx_package.use_autowidth = true
|
||||||
|
if @booth_export_option == 'confirmed'
|
||||||
|
render partial: 'confirmed_booths', locals: { wb: wb }
|
||||||
|
elsif @booth_export_option == 'all'
|
||||||
|
render partial: 'all_booths', locals: { wb: wb }
|
||||||
|
end
|
||||||
|
|
@ -3,6 +3,30 @@
|
||||||
.page-header
|
.page-header
|
||||||
%h1
|
%h1
|
||||||
Booths
|
Booths
|
||||||
|
.pull-right
|
||||||
|
- if can? :read, Booth
|
||||||
|
.btn-group
|
||||||
|
.btn-group
|
||||||
|
%button.btn.btn-default.dropdown-toggle{ 'data-toggle' => 'dropdown', type: 'button', class: 'btn btn-success' }
|
||||||
|
Export PDF
|
||||||
|
%span.caret
|
||||||
|
%ul.dropdown-menu{ role: 'menu' }
|
||||||
|
%li= link_to 'All Booths', admin_conference_booths_path(@conference.short_title, format: :pdf, booth_export_option: 'all')
|
||||||
|
%li= link_to 'Confirmed Booths', admin_conference_booths_path(@conference.short_title, format: :pdf, booth_export_option: 'confirmed')
|
||||||
|
.btn-group
|
||||||
|
%button.btn.btn-default.dropdown-toggle{ 'data-toggle' => 'dropdown', type: 'button', class: 'btn btn-success' }
|
||||||
|
Export CSV
|
||||||
|
%span.caret
|
||||||
|
%ul.dropdown-menu{ role: 'menu' }
|
||||||
|
%li= link_to 'All', admin_conference_booths_path(@conference.short_title, format: :csv, booth_export_option: 'all')
|
||||||
|
%li= link_to 'Confirmed', admin_conference_booths_path(@conference.short_title, format: :csv, booth_export_option: 'confirmed')
|
||||||
|
.btn-group
|
||||||
|
%button.btn.btn-default.dropdown-toggle{ 'data-toggle' => 'dropdown', type: 'button', class: 'btn btn-success' }
|
||||||
|
Export XLS
|
||||||
|
%span.caret
|
||||||
|
%ul.dropdown-menu{ role: 'menu' }
|
||||||
|
%li= link_to 'All', admin_conference_booths_path(@conference.short_title, format: :xlsx, booth_export_option: 'all')
|
||||||
|
%li= link_to 'Confirmed', admin_conference_booths_path(@conference.short_title, format: :xlsx, booth_export_option: 'confirmed')
|
||||||
= "(#{@booths.length})" if @booths.any?
|
= "(#{@booths.length})" if @booths.any?
|
||||||
%p.text-muted
|
%p.text-muted
|
||||||
All the booth requests
|
All the booth requests
|
||||||
|
|
|
||||||
|
|
@ -11,6 +11,10 @@
|
||||||
%dd
|
%dd
|
||||||
= @cfp.end_date.strftime('%A, %B %e. %Y')
|
= @cfp.end_date.strftime('%A, %B %e. %Y')
|
||||||
%dt
|
%dt
|
||||||
Days Left:
|
Description
|
||||||
|
%dd
|
||||||
|
= markdown(@cfp.description)
|
||||||
|
%dt
|
||||||
|
Days Left
|
||||||
%dd
|
%dd
|
||||||
= pluralize(@cfp.remaining_days, 'day')
|
= pluralize(@cfp.remaining_days, 'day')
|
||||||
|
|
|
||||||
|
|
@ -10,6 +10,10 @@
|
||||||
End Date:
|
End Date:
|
||||||
%dd#end_date
|
%dd#end_date
|
||||||
= @cfp.end_date.strftime('%A, %B %-d. %Y')
|
= @cfp.end_date.strftime('%A, %B %-d. %Y')
|
||||||
|
%dt
|
||||||
|
Description:
|
||||||
|
%dd#description
|
||||||
|
= markdown(@cfp.description)
|
||||||
%dt
|
%dt
|
||||||
Days Left:
|
Days Left:
|
||||||
%dd
|
%dd
|
||||||
|
|
|
||||||
|
|
@ -8,5 +8,6 @@
|
||||||
= 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 :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 :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' }
|
= 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' }
|
||||||
|
= f.input :description, input_html: {rows: 2, data: { provide: 'markdown-editable' } }, hint: markdown_hint
|
||||||
%p.text-right
|
%p.text-right
|
||||||
= f.action :submit, as: :button, button_html: { class: 'btn btn-primary' }
|
= f.action :submit, as: :button, button_html: { class: 'btn btn-primary' }
|
||||||
|
|
|
||||||
|
|
@ -10,6 +10,10 @@
|
||||||
End Date:
|
End Date:
|
||||||
%dd#end_date
|
%dd#end_date
|
||||||
= @cfp.end_date.strftime('%A, %B %-d. %Y')
|
= @cfp.end_date.strftime('%A, %B %-d. %Y')
|
||||||
|
%dt
|
||||||
|
Description:
|
||||||
|
%dd#description
|
||||||
|
= markdown(@cfp.description)
|
||||||
%dt
|
%dt
|
||||||
Days Left:
|
Days Left:
|
||||||
%dd
|
%dd
|
||||||
|
|
|
||||||
|
|
@ -12,6 +12,7 @@
|
||||||
%th Type
|
%th Type
|
||||||
%th Start Date
|
%th Start Date
|
||||||
%th End Date
|
%th End Date
|
||||||
|
%th Description
|
||||||
%th Days Left
|
%th Days Left
|
||||||
%th Actions
|
%th Actions
|
||||||
%tbody
|
%tbody
|
||||||
|
|
@ -24,6 +25,9 @@
|
||||||
= cfp.start_date.strftime('%A, %B %-d. %Y')
|
= cfp.start_date.strftime('%A, %B %-d. %Y')
|
||||||
%td
|
%td
|
||||||
= cfp.end_date.strftime('%A, %B %-d. %Y')
|
= cfp.end_date.strftime('%A, %B %-d. %Y')
|
||||||
|
%td
|
||||||
|
%p
|
||||||
|
= markdown(truncate(cfp.description))
|
||||||
%td
|
%td
|
||||||
= pluralize(cfp.remaining_days, 'day')
|
= pluralize(cfp.remaining_days, 'day')
|
||||||
%td
|
%td
|
||||||
|
|
|
||||||
|
|
@ -22,11 +22,11 @@
|
||||||
= f.input :timezone, as: :time_zone, hint: 'The conference time zone'
|
= 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' }
|
= f.input :start_date, as: :string, input_html: { id: 'conference-start-datepicker', readonly: 'readonly' }
|
||||||
= f.input :end_date, as: :string, input_html: { id: 'conference-end-datepicker', readonly: 'readonly' }
|
= f.input :end_date, as: :string, input_html: { id: 'conference-end-datepicker', readonly: 'readonly' }
|
||||||
= f.input :start_hour, input_html: {size: 2, type: 'number', min: 0, max: 23}
|
= f.input :start_hour, input_html: {size: 2, type: 'number', min: 0, max: 23}, hint: rescheduling_hint(@affected_event_count)
|
||||||
= f.input :end_hour, input_html: {size: 2, type: 'number', min: 1, max: 24}
|
= f.input :end_hour, input_html: {size: 2, type: 'number', min: 1, max: 24}, hint: rescheduling_hint(@affected_event_count)
|
||||||
= f.inputs name: 'Registrations' do
|
= 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). 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.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.inputs name: 'Booths' do
|
= f.inputs name: 'Booths' do
|
||||||
= f.input :booth_limit, as: :number, in: 0..9999,
|
= f.input :booth_limit, as: :number, in: 0..9999,
|
||||||
hint: 'Booth limit is the maximum number of booths that you can accept for this conference. By setting this number (0 no limit) you can be sure that you are not going to accept more booths than the conference can accommodate. You currently have ' + pluralize(@conference.booths.accepted.count, 'accepted booth') +'.'
|
hint: 'Booth limit is the maximum number of booths that you can accept for this conference. By setting this number (0 no limit) you can be sure that you are not going to accept more booths than the conference can accommodate. You currently have ' + pluralize(@conference.booths.accepted.count, 'accepted booth') +'.'
|
||||||
= f.action :submit, as: :button, button_html: {class: 'btn btn-primary'}
|
= f.action :submit, as: :button, button_html: { class: 'btn btn-primary', data: { confirm: 'Are you sure you want to proceed?' } }
|
||||||
|
|
|
||||||
|
|
@ -4,6 +4,7 @@
|
||||||
'Start time',
|
'Start time',
|
||||||
'Submitter',
|
'Submitter',
|
||||||
'Speaker',
|
'Speaker',
|
||||||
|
'Speaker Email',
|
||||||
'Event Type',
|
'Event Type',
|
||||||
'Track',
|
'Track',
|
||||||
'Difficulty Level',
|
'Difficulty Level',
|
||||||
|
|
@ -12,8 +13,15 @@
|
||||||
= CSV.generate_line ['All Events']
|
= CSV.generate_line ['All Events']
|
||||||
= CSV.generate_line headers
|
= CSV.generate_line headers
|
||||||
- @events.each do |event|
|
- @events.each do |event|
|
||||||
= CSV.generate_line([event.id, event.title, event.abstract, (event.time.present? ? "#{event.time.strftime("%Y-%m-%d")} #{event.time.strftime("%I:%M%p")} " : ''),
|
= CSV.generate_line([event.id,
|
||||||
event.submitter.name, event.speaker_names, event.event_type.title,
|
event.title,
|
||||||
|
event.abstract,
|
||||||
|
(event.time.present? ? "#{event.time.strftime("%Y-%m-%d")}#{event.time.strftime("%I:%M%p")} " : ''),
|
||||||
|
event.submitter.name,
|
||||||
|
event.speaker_names,
|
||||||
|
event.speaker_emails,
|
||||||
|
event.event_type.title,
|
||||||
(event.track.present? ? event.track.name : ''),
|
(event.track.present? ? event.track.name : ''),
|
||||||
(event.difficulty_level.present? ? event.difficulty_level.title : ''),
|
(event.difficulty_level.present? ? event.difficulty_level.title : ''),
|
||||||
(event.room.present? ? event.room.name : ''), event.state]).html_safe
|
(event.room.present? ? event.room.name : ''),
|
||||||
|
event.state]).html_safe
|
||||||
|
|
|
||||||
|
|
@ -6,6 +6,7 @@ prawn_document(force_download: true, filename: "#{@file_name}.pdf", page_layout:
|
||||||
'Start time',
|
'Start time',
|
||||||
'Submitter',
|
'Submitter',
|
||||||
'Speaker',
|
'Speaker',
|
||||||
|
'Speaker Email',
|
||||||
'Event Type',
|
'Event Type',
|
||||||
'Track',
|
'Track',
|
||||||
'Difficulty Level',
|
'Difficulty Level',
|
||||||
|
|
@ -21,6 +22,7 @@ prawn_document(force_download: true, filename: "#{@file_name}.pdf", page_layout:
|
||||||
row << (event.time.present? ? "#{event.time.strftime("%Y-%m-%d")} #{event.time.strftime("%I:%M%p")} " : '')
|
row << (event.time.present? ? "#{event.time.strftime("%Y-%m-%d")} #{event.time.strftime("%I:%M%p")} " : '')
|
||||||
row << event.submitter.name
|
row << event.submitter.name
|
||||||
row << event.speaker_names
|
row << event.speaker_names
|
||||||
|
row << event.speaker_emails
|
||||||
row << event.event_type.title
|
row << event.event_type.title
|
||||||
row << (event.track.present? ? event.track.name : '')
|
row << (event.track.present? ? event.track.name : '')
|
||||||
row << (event.difficulty_level.present? ? event.difficulty_level.title : '')
|
row << (event.difficulty_level.present? ? event.difficulty_level.title : '')
|
||||||
|
|
@ -30,5 +32,5 @@ prawn_document(force_download: true, filename: "#{@file_name}.pdf", page_layout:
|
||||||
end
|
end
|
||||||
|
|
||||||
pdf.text "#{@conference.short_title} Events", font_size: 25, align: :center
|
pdf.text "#{@conference.short_title} Events", font_size: 25, align: :center
|
||||||
pdf.table events_array, header: true, cell_style: {size: 8, border_width: 1}
|
pdf.table events_array, header: true, cell_style: {size: 8, border_width: 1},column_widths: [40,60,90,50,70,65,85,50,55,50,60,45]
|
||||||
end
|
end
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,18 @@
|
||||||
wb.add_worksheet(name: 'all events') do |sheet|
|
wb.add_worksheet(name: 'all events') do |sheet|
|
||||||
bold_style = wb.styles.add_style(b: true)
|
bold_style = wb.styles.add_style(b: true)
|
||||||
row = ['Event ID', 'Title', 'Abstract', 'Start time', 'Submitter', 'Speaker', 'Event Type', 'Track', 'Difficulty Level', 'Room', 'State']
|
wrap_text = wb.styles.add_style alignment: {wrap_text: true}
|
||||||
|
row = ['Event ID',
|
||||||
|
'Title',
|
||||||
|
'Abstract',
|
||||||
|
'Start time',
|
||||||
|
'Submitter',
|
||||||
|
'Speaker',
|
||||||
|
'Speaker Email',
|
||||||
|
'Event Type',
|
||||||
|
'Track',
|
||||||
|
'Difficulty Level',
|
||||||
|
'Room',
|
||||||
|
'State']
|
||||||
sheet.add_row row, style: bold_style
|
sheet.add_row row, style: bold_style
|
||||||
|
|
||||||
@events.each do |event|
|
@events.each do |event|
|
||||||
|
|
@ -11,11 +23,13 @@ wb.add_worksheet(name: 'all events') do |sheet|
|
||||||
row << (event.time.present? ? "#{event.time.strftime("%Y-%m-%d")} #{event.time.strftime("%I:%M%p")} " : '')
|
row << (event.time.present? ? "#{event.time.strftime("%Y-%m-%d")} #{event.time.strftime("%I:%M%p")} " : '')
|
||||||
row << event.submitter.name
|
row << event.submitter.name
|
||||||
row << event.speaker_names
|
row << event.speaker_names
|
||||||
|
row << event.speaker_emails
|
||||||
row << event.event_type.title
|
row << event.event_type.title
|
||||||
row << (event.track.present? ? event.track.name : '')
|
row << (event.track.present? ? event.track.name : '')
|
||||||
row << (event.difficulty_level.present? ? event.difficulty_level.title : '')
|
row << (event.difficulty_level.present? ? event.difficulty_level.title : '')
|
||||||
row << (event.room.present? ? event.room.name : '')
|
row << (event.room.present? ? event.room.name : '')
|
||||||
row << event.state
|
row << event.state
|
||||||
sheet.add_row row
|
sheet.add_row row , style: wrap_text
|
||||||
|
sheet.column_widths 10,15,35,13,18,18,28,12,15,15,15,10
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
||||||
|
|
@ -4,6 +4,7 @@
|
||||||
'Start time',
|
'Start time',
|
||||||
'Submitter',
|
'Submitter',
|
||||||
'Speaker',
|
'Speaker',
|
||||||
|
'Speaker Email',
|
||||||
'Event Type',
|
'Event Type',
|
||||||
'Track',
|
'Track',
|
||||||
'Difficulty Level',
|
'Difficulty Level',
|
||||||
|
|
@ -16,8 +17,17 @@
|
||||||
- all_comments = ''
|
- all_comments = ''
|
||||||
- event.root_comments.each do |comment|
|
- event.root_comments.each do |comment|
|
||||||
- all_comments << "#{comment.created_at.strftime("%Y-%m-%d")} #{comment.created_at.strftime("%I:%M%p")} #{comment.user.name}: #{comment.body}\n"
|
- all_comments << "#{comment.created_at.strftime("%Y-%m-%d")} #{comment.created_at.strftime("%I:%M%p")} #{comment.user.name}: #{comment.body}\n"
|
||||||
= CSV.generate_line([event.id, event.title, event.abstract, (event.time.present? ? "#{event.time.strftime("%Y-%m-%d")} #{event.time.strftime("%I:%M%p")} " : ''),
|
= CSV.generate_line([event.id,
|
||||||
event.submitter.name, event.speaker_names, event.event_type.title,
|
event.title,
|
||||||
|
event.abstract,
|
||||||
|
(event.time.present? ? "#{event.time.strftime("%Y-%m-%d")}#{event.time.strftime("%I:%M%p")} " : ''),
|
||||||
|
event.submitter.name,
|
||||||
|
event.speaker_names,
|
||||||
|
event.speaker_emails,
|
||||||
|
event.event_type.title,
|
||||||
(event.track.present? ? event.track.name : ''),
|
(event.track.present? ? event.track.name : ''),
|
||||||
(event.difficulty_level.present? ? event.difficulty_level.title : ''),
|
(event.difficulty_level.present? ? event.difficulty_level.title : ''),
|
||||||
(event.room.present? ? event.room.name : ''), event.state, all_comments]).html_safe
|
(event.room.present? ? event.room.name : ''),
|
||||||
|
event.state,
|
||||||
|
all_comments]).html_safe
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -6,6 +6,7 @@ prawn_document(force_download: true, filename: "#{@file_name}.pdf", page_layout:
|
||||||
'Start time',
|
'Start time',
|
||||||
'Submitter',
|
'Submitter',
|
||||||
'Speaker',
|
'Speaker',
|
||||||
|
'Speaker Email',
|
||||||
'Event Type',
|
'Event Type',
|
||||||
'Track',
|
'Track',
|
||||||
'Difficulty Level',
|
'Difficulty Level',
|
||||||
|
|
@ -21,6 +22,7 @@ prawn_document(force_download: true, filename: "#{@file_name}.pdf", page_layout:
|
||||||
row << (event.time.present? ? "#{event.time.strftime("%Y-%m-%d")} #{event.time.strftime("%I:%M%p")} " : '')
|
row << (event.time.present? ? "#{event.time.strftime("%Y-%m-%d")} #{event.time.strftime("%I:%M%p")} " : '')
|
||||||
row << event.submitter.name
|
row << event.submitter.name
|
||||||
row << event.speaker_names
|
row << event.speaker_names
|
||||||
|
row << event.speaker_emails
|
||||||
row << event.event_type.title
|
row << event.event_type.title
|
||||||
row << (event.track.present? ? event.track.name : '')
|
row << (event.track.present? ? event.track.name : '')
|
||||||
row << (event.difficulty_level.present? ? event.difficulty_level.title : '')
|
row << (event.difficulty_level.present? ? event.difficulty_level.title : '')
|
||||||
|
|
@ -31,7 +33,7 @@ prawn_document(force_download: true, filename: "#{@file_name}.pdf", page_layout:
|
||||||
|
|
||||||
pdf.text "#{@conference.short_title} Events", font_size: 25, align: :center
|
pdf.text "#{@conference.short_title} Events", font_size: 25, align: :center
|
||||||
pdf.move_down 10
|
pdf.move_down 10
|
||||||
pdf.table events_array, header: true, cell_style: {size: 8, border_width: 1, position: :center}
|
pdf.table events_array, header: true, cell_style: {size: 8, border_width: 1, position: :center},column_widths: [40,60,90,50,70,65,85,50,55,50,60,45]
|
||||||
pdf.start_new_page
|
pdf.start_new_page
|
||||||
pdf.text "#{@conference.short_title} Comments", font_size: 25, align: :center
|
pdf.text "#{@conference.short_title} Comments", font_size: 25, align: :center
|
||||||
pdf.move_down 20
|
pdf.move_down 20
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,20 @@
|
||||||
wb.use_shared_strings = true
|
wb.use_shared_strings = true
|
||||||
wb.add_worksheet(name: 'events with comments') do |sheet|
|
wb.add_worksheet(name: 'events with comments') do |sheet|
|
||||||
bold_style = wb.styles.add_style(b: true )
|
bold_style = wb.styles.add_style(b: true)
|
||||||
cell_style = wb.styles.add_style(alignment: { wrap_text: true, vertical: :top })
|
cell_style = wb.styles.add_style(alignment: { wrap_text: true, vertical: :top })
|
||||||
row = ['Event ID', 'Title', 'Abstract', 'Start time', 'Submitter', 'Speaker', 'Event Type', 'Track', 'Difficulty Level', 'Room', 'State', 'Comments']
|
row = ['Event ID',
|
||||||
|
'Title',
|
||||||
|
'Abstract',
|
||||||
|
'Start time',
|
||||||
|
'Submitter',
|
||||||
|
'Speaker',
|
||||||
|
'Speaker Email',
|
||||||
|
'Event Type',
|
||||||
|
'Track',
|
||||||
|
'Difficulty Level',
|
||||||
|
'Room',
|
||||||
|
'State',
|
||||||
|
'Comments']
|
||||||
sheet.add_row row, style: bold_style
|
sheet.add_row row, style: bold_style
|
||||||
|
|
||||||
@events.each do |event|
|
@events.each do |event|
|
||||||
|
|
@ -17,6 +29,7 @@ row = ['Event ID', 'Title', 'Abstract', 'Start time', 'Submitter', 'Speaker', 'E
|
||||||
row << (event.time.present? ? "#{event.time.strftime("%Y-%m-%d")} #{event.time.strftime("%I:%M%p")} " : '')
|
row << (event.time.present? ? "#{event.time.strftime("%Y-%m-%d")} #{event.time.strftime("%I:%M%p")} " : '')
|
||||||
row << event.submitter.name
|
row << event.submitter.name
|
||||||
row << event.speaker_names
|
row << event.speaker_names
|
||||||
|
row << event.speaker_emails
|
||||||
row << event.event_type.title
|
row << event.event_type.title
|
||||||
row << (event.track.present? ? event.track.name : '')
|
row << (event.track.present? ? event.track.name : '')
|
||||||
row << (event.difficulty_level.present? ? event.difficulty_level.title : '')
|
row << (event.difficulty_level.present? ? event.difficulty_level.title : '')
|
||||||
|
|
@ -24,5 +37,6 @@ row = ['Event ID', 'Title', 'Abstract', 'Start time', 'Submitter', 'Speaker', 'E
|
||||||
row << event.state
|
row << event.state
|
||||||
row << all_comments.strip
|
row << all_comments.strip
|
||||||
sheet.add_row row, style: cell_style
|
sheet.add_row row, style: cell_style
|
||||||
|
sheet.column_widths 10,15,35,13,18,18,28,12,15,15,15,10
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
||||||
|
|
@ -4,6 +4,7 @@
|
||||||
'Start time',
|
'Start time',
|
||||||
'Submitter',
|
'Submitter',
|
||||||
'Speaker',
|
'Speaker',
|
||||||
|
'Speaker Email',
|
||||||
'Event Type',
|
'Event Type',
|
||||||
'Track',
|
'Track',
|
||||||
'Difficulty Level',
|
'Difficulty Level',
|
||||||
|
|
@ -12,8 +13,15 @@
|
||||||
= CSV.generate_line ["Confirmed Events"]
|
= CSV.generate_line ["Confirmed Events"]
|
||||||
= CSV.generate_line headers
|
= CSV.generate_line headers
|
||||||
- @events.confirmed.each do |event|
|
- @events.confirmed.each do |event|
|
||||||
= CSV.generate_line([event.id, event.title, event.abstract, (event.time.present? ? "#{event.time.strftime("%Y-%m-%d")} #{event.time.strftime("%I:%M%p")} " : ''),
|
= CSV.generate_line([event.id,
|
||||||
event.submitter.name, event.speaker_names, event.event_type.title,
|
event.title,
|
||||||
|
event.abstract,
|
||||||
|
(event.time.present? ? "#{event.time.strftime("%Y-%m-%d")} #{event.time.strftime("%I:%M%p")} " : ''),
|
||||||
|
event.submitter.name,
|
||||||
|
event.speaker_names,
|
||||||
|
event.speaker_emails,
|
||||||
|
event.event_type.title,
|
||||||
(event.track.present? ? event.track.name : ''),
|
(event.track.present? ? event.track.name : ''),
|
||||||
(event.difficulty_level.present? ? event.difficulty_level.title : ''),
|
(event.difficulty_level.present? ? event.difficulty_level.title : ''),
|
||||||
(event.room.present? ? event.room.name : ''), event.state]).html_safe
|
(event.room.present? ? event.room.name : ''),
|
||||||
|
event.state]).html_safe
|
||||||
|
|
|
||||||
|
|
@ -6,6 +6,7 @@ prawn_document(force_download: true, filename: "#{@file_name}.pdf", page_layout:
|
||||||
'Start time',
|
'Start time',
|
||||||
'Submitter',
|
'Submitter',
|
||||||
'Speaker',
|
'Speaker',
|
||||||
|
'Speaker Email',
|
||||||
'Event Type',
|
'Event Type',
|
||||||
'Track',
|
'Track',
|
||||||
'Difficulty Level',
|
'Difficulty Level',
|
||||||
|
|
@ -21,6 +22,7 @@ prawn_document(force_download: true, filename: "#{@file_name}.pdf", page_layout:
|
||||||
row << (event.time.present? ? "#{event.time.strftime("%Y-%m-%d")} #{event.time.strftime("%I:%M%p")} " : '')
|
row << (event.time.present? ? "#{event.time.strftime("%Y-%m-%d")} #{event.time.strftime("%I:%M%p")} " : '')
|
||||||
row << event.submitter.name
|
row << event.submitter.name
|
||||||
row << event.speaker_names
|
row << event.speaker_names
|
||||||
|
row << event.speaker_emails
|
||||||
row << event.event_type.title
|
row << event.event_type.title
|
||||||
row << (event.track.present? ? event.track.name : '')
|
row << (event.track.present? ? event.track.name : '')
|
||||||
row << (event.difficulty_level.present? ? event.difficulty_level.title : '')
|
row << (event.difficulty_level.present? ? event.difficulty_level.title : '')
|
||||||
|
|
@ -30,6 +32,6 @@ prawn_document(force_download: true, filename: "#{@file_name}.pdf", page_layout:
|
||||||
end
|
end
|
||||||
|
|
||||||
pdf.text "#{@conference.short_title} Confirmed Events", font_size: 25, align: :center
|
pdf.text "#{@conference.short_title} Confirmed Events", font_size: 25, align: :center
|
||||||
pdf.table events_array, header: true, cell_style: {size: 8, border_width: 1}
|
pdf.table events_array, header: true, cell_style: {size: 8, border_width: 1},column_widths: [40,60,90,50,70,65,85,50,55,50,60,45]
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,18 @@
|
||||||
wb.add_worksheet(name: 'confirmed events') do |sheet|
|
wb.add_worksheet(name: 'confirmed events') do |sheet|
|
||||||
bold_style = wb.styles.add_style(b: true)
|
bold_style = wb.styles.add_style(b: true)
|
||||||
row = ['Event ID', 'Title', 'Abstract', 'Start time', 'Submitter', 'Speaker', 'Event Type', 'Track', 'Difficulty Level', 'Room', 'State']
|
wrap_text = wb.styles.add_style alignment: {wrap_text: true}
|
||||||
|
row = ['Event ID',
|
||||||
|
'Title',
|
||||||
|
'Abstract',
|
||||||
|
'Start time',
|
||||||
|
'Submitter',
|
||||||
|
'Speaker',
|
||||||
|
'Speaker Email',
|
||||||
|
'Event Type',
|
||||||
|
'Track',
|
||||||
|
'Difficulty Level',
|
||||||
|
'Room',
|
||||||
|
'State']
|
||||||
sheet.add_row row, style: bold_style
|
sheet.add_row row, style: bold_style
|
||||||
|
|
||||||
@events.confirmed.each do |event|
|
@events.confirmed.each do |event|
|
||||||
|
|
@ -11,11 +23,13 @@ wb.add_worksheet(name: 'confirmed events') do |sheet|
|
||||||
row << (event.time.present? ? "#{event.time.strftime("%Y-%m-%d")} #{event.time.strftime("%I:%M%p")} " : '')
|
row << (event.time.present? ? "#{event.time.strftime("%Y-%m-%d")} #{event.time.strftime("%I:%M%p")} " : '')
|
||||||
row << event.submitter.name
|
row << event.submitter.name
|
||||||
row << event.speaker_names
|
row << event.speaker_names
|
||||||
|
row << event.speaker_emails
|
||||||
row << event.event_type.title
|
row << event.event_type.title
|
||||||
row << (event.track.present? ? event.track.name : '')
|
row << (event.track.present? ? event.track.name : '')
|
||||||
row << (event.difficulty_level.present? ? event.difficulty_level.title : '')
|
row << (event.difficulty_level.present? ? event.difficulty_level.title : '')
|
||||||
row << (event.room.present? ? event.room.name : '')
|
row << (event.room.present? ? event.room.name : '')
|
||||||
row << event.state
|
row << event.state
|
||||||
sheet.add_row row
|
sheet.add_row row , style: wrap_text
|
||||||
|
sheet.column_widths 10,15,35,13,18,18,28,12,15,15,15,10
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
||||||
16
app/views/admin/physical_tickets/_physical_ticket.html.haml
Normal file
16
app/views/admin/physical_tickets/_physical_ticket.html.haml
Normal file
|
|
@ -0,0 +1,16 @@
|
||||||
|
%tr
|
||||||
|
%td= physical_ticket.id
|
||||||
|
%td= physical_ticket.ticket.title
|
||||||
|
%td= physical_ticket.user.email
|
||||||
|
%td= humanized_money_with_symbol physical_ticket.ticket_purchase.amount_paid
|
||||||
|
%td
|
||||||
|
.btn-group
|
||||||
|
= link_to 'Show',
|
||||||
|
conference_physical_ticket_path(conference.short_title,
|
||||||
|
physical_ticket.token),
|
||||||
|
class: 'btn btn-primary'
|
||||||
|
= link_to 'Generate PDF',
|
||||||
|
conference_physical_ticket_path(conference.short_title,
|
||||||
|
physical_ticket.token,
|
||||||
|
format: :pdf),
|
||||||
|
class: 'button btn btn-default btn-info'
|
||||||
|
|
@ -21,23 +21,11 @@
|
||||||
%th ID
|
%th ID
|
||||||
%th Type
|
%th Type
|
||||||
%th User
|
%th User
|
||||||
|
%th Paid
|
||||||
%th Actions
|
%th Actions
|
||||||
%tbody
|
%tbody
|
||||||
- @physical_tickets.each do |physical_ticket|
|
- @physical_tickets.each do |physical_ticket|
|
||||||
%tr
|
= render "physical_ticket", physical_ticket: physical_ticket,
|
||||||
%td= physical_ticket.id
|
conference: @conference
|
||||||
%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.token),
|
|
||||||
class: 'btn btn-primary'
|
|
||||||
= link_to 'Generate PDF',
|
|
||||||
conference_physical_ticket_path(@conference.short_title,
|
|
||||||
physical_ticket.token,
|
|
||||||
format: :pdf),
|
|
||||||
class: 'button btn btn-default btn-info'
|
|
||||||
- else
|
- else
|
||||||
%h5 No Tickets sold!
|
%h5 No Tickets sold!
|
||||||
|
|
|
||||||
|
|
@ -27,7 +27,7 @@
|
||||||
%td
|
%td
|
||||||
= ticket.tickets_sold
|
= ticket.tickets_sold
|
||||||
%td
|
%td
|
||||||
= humanized_money_with_symbol ticket.tickets_turnover
|
= humanized_money_with_symbol ticket.tickets_turnover_total(ticket.id)
|
||||||
%td
|
%td
|
||||||
= ticket.registration_ticket? ? 'Yes' : 'No'
|
= ticket.registration_ticket? ? 'Yes' : 'No'
|
||||||
%td
|
%td
|
||||||
|
|
|
||||||
21
app/views/admin/tracks/_all_tracks.csv.haml
Normal file
21
app/views/admin/tracks/_all_tracks.csv.haml
Normal file
|
|
@ -0,0 +1,21 @@
|
||||||
|
- headers = ['Track ID',
|
||||||
|
'Name',
|
||||||
|
'Description',
|
||||||
|
'Room',
|
||||||
|
'Start Date',
|
||||||
|
'Start Date',
|
||||||
|
'Submitter Name',
|
||||||
|
'Included in Cfp',
|
||||||
|
'State']
|
||||||
|
= CSV.generate_line ['All Tracks']
|
||||||
|
= CSV.generate_line headers
|
||||||
|
- @tracks.each do |track|
|
||||||
|
= CSV.generate_line([track.id,
|
||||||
|
track.name,
|
||||||
|
track.description,
|
||||||
|
track.try(:room).try(:name),
|
||||||
|
track.start_date,
|
||||||
|
track.end_date,
|
||||||
|
track.try(:submitter).try(:name),
|
||||||
|
track.cfp_active? ? 'Yes' : 'No',
|
||||||
|
track.state]).html_safe
|
||||||
28
app/views/admin/tracks/_all_tracks.pdf.prawn
Normal file
28
app/views/admin/tracks/_all_tracks.pdf.prawn
Normal file
|
|
@ -0,0 +1,28 @@
|
||||||
|
prawn_document(force_download: true, filename: "#{@file_name}.pdf", page_layout: :landscape) do |pdf|
|
||||||
|
tracks_array = []
|
||||||
|
header_array = ['Track ID',
|
||||||
|
'Name',
|
||||||
|
'Description',
|
||||||
|
'Room',
|
||||||
|
'Start Date',
|
||||||
|
'End Date',
|
||||||
|
'Submitter Name',
|
||||||
|
'Included in Cfp',
|
||||||
|
'State']
|
||||||
|
tracks_array << header_array
|
||||||
|
@tracks.each do |track|
|
||||||
|
row = []
|
||||||
|
row << track.id
|
||||||
|
row << track.name.to_s
|
||||||
|
row << track.description.to_s
|
||||||
|
row << track.try(:room).try(:name)
|
||||||
|
row << track.start_date.to_s
|
||||||
|
row << track.end_date.to_s
|
||||||
|
row << track.try(:submitter).try(:name)
|
||||||
|
row << (track.cfp_active? ? 'Yes' : 'No')
|
||||||
|
row << track.state
|
||||||
|
tracks_array << row
|
||||||
|
end
|
||||||
|
pdf.text "#{@conference.short_title} tracks", font_size: 25, align: :center
|
||||||
|
pdf.table tracks_array, header: true, cell_style: {size: 8, border_width: 1},column_widths: [40,70,230,65,55,55,90,65,50]
|
||||||
|
end
|
||||||
29
app/views/admin/tracks/_all_tracks.xlsx.axlsx
Normal file
29
app/views/admin/tracks/_all_tracks.xlsx.axlsx
Normal file
|
|
@ -0,0 +1,29 @@
|
||||||
|
wb.add_worksheet(name: 'all tracks') do |sheet|
|
||||||
|
bold_style = wb.styles.add_style(b: true)
|
||||||
|
wrap_text = wb.styles.add_style alignment: {wrap_text: true}
|
||||||
|
row = ['Track ID',
|
||||||
|
'Name',
|
||||||
|
'Description',
|
||||||
|
'Room',
|
||||||
|
'Start Date',
|
||||||
|
'End Date',
|
||||||
|
'Submitter Name',
|
||||||
|
'Included in Cfp',
|
||||||
|
'State']
|
||||||
|
sheet.add_row row, style: bold_style
|
||||||
|
|
||||||
|
@tracks.each do |track|
|
||||||
|
row = []
|
||||||
|
row << track.id
|
||||||
|
row << track.name.to_s
|
||||||
|
row << track.description.to_s
|
||||||
|
row << track.try(:room).try(:name)
|
||||||
|
row << track.start_date.to_s
|
||||||
|
row << track.end_date.to_s
|
||||||
|
row << track.try(:submitter).try(:name)
|
||||||
|
row << (track.cfp_active? ? 'Yes' : 'No')
|
||||||
|
row << track.state
|
||||||
|
sheet.add_row row , style: wrap_text
|
||||||
|
sheet.column_widths 10,20,50,20,12,12,20,15,10
|
||||||
|
end
|
||||||
|
end
|
||||||
21
app/views/admin/tracks/_confirmed_tracks.csv.haml
Normal file
21
app/views/admin/tracks/_confirmed_tracks.csv.haml
Normal file
|
|
@ -0,0 +1,21 @@
|
||||||
|
- headers = ['Track ID',
|
||||||
|
'Name',
|
||||||
|
'Description',
|
||||||
|
'Room',
|
||||||
|
'Start Date',
|
||||||
|
'Start Date',
|
||||||
|
'Submitter Name',
|
||||||
|
'Included in Cfp',
|
||||||
|
'State']
|
||||||
|
= CSV.generate_line ['Confirmed Tracks']
|
||||||
|
= CSV.generate_line headers
|
||||||
|
- @tracks.confirmed.each do |track|
|
||||||
|
= CSV.generate_line([track.id,
|
||||||
|
track.name,
|
||||||
|
track.description,
|
||||||
|
track.try(:room).try(:name),
|
||||||
|
track.start_date,
|
||||||
|
track.end_date,
|
||||||
|
track.try(:submitter).try(:name),
|
||||||
|
track.cfp_active? ? 'Yes' : 'No',
|
||||||
|
track.state]).html_safe
|
||||||
28
app/views/admin/tracks/_confirmed_tracks.pdf.prawn
Normal file
28
app/views/admin/tracks/_confirmed_tracks.pdf.prawn
Normal file
|
|
@ -0,0 +1,28 @@
|
||||||
|
prawn_document(force_download: true, filename: "#{@file_name}.pdf", page_layout: :landscape) do |pdf|
|
||||||
|
tracks_array = []
|
||||||
|
header_array = ['Track ID',
|
||||||
|
'Name',
|
||||||
|
'Description',
|
||||||
|
'Room',
|
||||||
|
'Start Date',
|
||||||
|
'End Date',
|
||||||
|
'Submitter Name',
|
||||||
|
'Included in Cfp',
|
||||||
|
'State']
|
||||||
|
tracks_array << header_array
|
||||||
|
@tracks.confirmed.each do |track|
|
||||||
|
row = []
|
||||||
|
row << track.id
|
||||||
|
row << track.name.to_s
|
||||||
|
row << track.description.to_s
|
||||||
|
row << track.try(:room).try(:name)
|
||||||
|
row << track.start_date.to_s
|
||||||
|
row << track.end_date.to_s
|
||||||
|
row << track.try(:submitter).try(:name)
|
||||||
|
row << (track.cfp_active? ? 'Yes' : 'No')
|
||||||
|
row << track.state
|
||||||
|
tracks_array << row
|
||||||
|
end
|
||||||
|
pdf.text "#{@conference.short_title} tracks", font_size: 25, align: :center
|
||||||
|
pdf.table tracks_array, header: true, cell_style: {size: 8, border_width: 1},column_widths: [40,70,230,65,55,55,90,65,50]
|
||||||
|
end
|
||||||
29
app/views/admin/tracks/_confirmed_tracks.xlsx.axlsx
Normal file
29
app/views/admin/tracks/_confirmed_tracks.xlsx.axlsx
Normal file
|
|
@ -0,0 +1,29 @@
|
||||||
|
wb.add_worksheet(name: 'all tracks') do |sheet|
|
||||||
|
bold_style = wb.styles.add_style(b: true)
|
||||||
|
wrap_text = wb.styles.add_style alignment: {wrap_text: true}
|
||||||
|
row = ['Track ID',
|
||||||
|
'Name',
|
||||||
|
'Description',
|
||||||
|
'Room',
|
||||||
|
'Start Date',
|
||||||
|
'End Date',
|
||||||
|
'Submitter Name',
|
||||||
|
'Included in Cfp',
|
||||||
|
'State']
|
||||||
|
sheet.add_row row, style: bold_style
|
||||||
|
|
||||||
|
@tracks.confirmed.each do |track|
|
||||||
|
row = []
|
||||||
|
row << track.id
|
||||||
|
row << track.name.to_s
|
||||||
|
row << track.description.to_s
|
||||||
|
row << track.try(:room).try(:name)
|
||||||
|
row << track.start_date.to_s
|
||||||
|
row << track.end_date.to_s
|
||||||
|
row << track.try(:submitter).try(:name)
|
||||||
|
row << (track.cfp_active? ? 'Yes' : 'No')
|
||||||
|
row << track.state
|
||||||
|
sheet.add_row row , style: wrap_text
|
||||||
|
sheet.column_widths 10,20,50,20,12,12,20,15,10
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
@ -2,7 +2,32 @@
|
||||||
.row
|
.row
|
||||||
.col-md-12
|
.col-md-12
|
||||||
.page-header
|
.page-header
|
||||||
%h1 Tracks
|
%h1
|
||||||
|
Tracks
|
||||||
|
.pull-right
|
||||||
|
- if can? :read, Track
|
||||||
|
.btn-group
|
||||||
|
.btn-group
|
||||||
|
%button.btn.btn-default.dropdown-toggle{ 'data-toggle' => 'dropdown', type: 'button', class: 'btn btn-success' }
|
||||||
|
Export PDF
|
||||||
|
%span.caret
|
||||||
|
%ul.dropdown-menu{ role: 'menu' }
|
||||||
|
%li= link_to 'All Tracks', admin_conference_program_tracks_path(@conference.short_title, format: :pdf, track_export_option: 'all')
|
||||||
|
%li= link_to 'Confirmed Tracks', admin_conference_program_tracks_path(@conference.short_title, format: :pdf, track_export_option: 'confirmed')
|
||||||
|
.btn-group
|
||||||
|
%button.btn.btn-default.dropdown-toggle{ 'data-toggle' => 'dropdown', type: 'button', class: 'btn btn-success' }
|
||||||
|
Export CSV
|
||||||
|
%span.caret
|
||||||
|
%ul.dropdown-menu{ role: 'menu' }
|
||||||
|
%li= link_to 'All', admin_conference_program_tracks_path(@conference.short_title, format: :csv, track_export_option: 'all')
|
||||||
|
%li= link_to 'Confirmed', admin_conference_program_tracks_path(@conference.short_title, format: :csv, track_export_option: 'confirmed')
|
||||||
|
.btn-group
|
||||||
|
%button.btn.btn-default.dropdown-toggle{ 'data-toggle' => 'dropdown', type: 'button', class: 'btn btn-success' }
|
||||||
|
Export XLS
|
||||||
|
%span.caret
|
||||||
|
%ul.dropdown-menu{ role: 'menu' }
|
||||||
|
%li= link_to 'All', admin_conference_program_tracks_path(@conference.short_title, format: :xlsx, track_export_option: 'all')
|
||||||
|
%li= link_to 'Confirmed', admin_conference_program_tracks_path(@conference.short_title, format: :xlsx, track_export_option: 'confirmed')
|
||||||
%p.text-muted
|
%p.text-muted
|
||||||
Categorize events in your conference
|
Categorize events in your conference
|
||||||
.row
|
.row
|
||||||
|
|
|
||||||
4
app/views/admin/tracks/tracks.csv.haml
Normal file
4
app/views/admin/tracks/tracks.csv.haml
Normal file
|
|
@ -0,0 +1,4 @@
|
||||||
|
- if @track_export_option == 'confirmed'
|
||||||
|
= render 'confirmed_tracks'
|
||||||
|
- elsif @track_export_option == 'all'
|
||||||
|
= render 'all_tracks'
|
||||||
5
app/views/admin/tracks/tracks.pdf.prawn
Normal file
5
app/views/admin/tracks/tracks.pdf.prawn
Normal file
|
|
@ -0,0 +1,5 @@
|
||||||
|
if @track_export_option == 'confirmed'
|
||||||
|
render 'confirmed_tracks'
|
||||||
|
elsif @track_export_option == 'all'
|
||||||
|
render 'all_tracks'
|
||||||
|
end
|
||||||
6
app/views/admin/tracks/tracks.xlsx.axlsx
Normal file
6
app/views/admin/tracks/tracks.xlsx.axlsx
Normal file
|
|
@ -0,0 +1,6 @@
|
||||||
|
wb = xlsx_package.workbook
|
||||||
|
if @track_export_option == 'confirmed'
|
||||||
|
render partial: 'confirmed_tracks', locals: { wb: wb }
|
||||||
|
elsif @track_export_option == 'all'
|
||||||
|
render partial: 'all_tracks', locals: { wb: wb }
|
||||||
|
end
|
||||||
|
|
@ -208,9 +208,7 @@
|
||||||
- when 'DifficultyLevel'
|
- when 'DifficultyLevel'
|
||||||
difficulty level
|
difficulty level
|
||||||
- difficulty_level = current_or_last_object_state(version.item_type, version.item_id)
|
- difficulty_level = current_or_last_object_state(version.item_type, version.item_id)
|
||||||
= link_if_alive version, difficulty_level.title,
|
= link_if_alive version, difficulty_level.title,admin_conference_program_difficulty_levels_path(conference_short_title), conference
|
||||||
admin_conference_program_difficulty_level_path(conference_short_title, version.item_id),
|
|
||||||
conference
|
|
||||||
|
|
||||||
- when 'Splashpage'
|
- when 'Splashpage'
|
||||||
= link_if_alive version, 'splashpage',
|
= link_if_alive version, 'splashpage',
|
||||||
|
|
|
||||||
|
|
@ -101,7 +101,7 @@
|
||||||
= word_pluralize(@total_quantity[ticket_id], 'Ticket')
|
= word_pluralize(@total_quantity[ticket_id], 'Ticket')
|
||||||
for
|
for
|
||||||
= tickets.first.price.symbol
|
= tickets.first.price.symbol
|
||||||
= humanized_money tickets.first.price
|
= humanized_money @total_price_per_ticket[ticket_id]
|
||||||
%br
|
%br
|
||||||
- if @tickets.any?
|
- if @tickets.any?
|
||||||
= link_to 'Get more tickets', conference_tickets_path(@conference.short_title), class: "btn btn-default"
|
= link_to 'Get more tickets', conference_tickets_path(@conference.short_title), class: "btn btn-default"
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,7 @@
|
||||||
.page-header
|
.page-header
|
||||||
%h2 Upcoming Conferences
|
%h2 Upcoming Conferences
|
||||||
- @current.each do |conference|
|
- @current.each do |conference|
|
||||||
= render partial: 'conference_details', locals: { conference: conference }
|
= render '/conferences/conference_details', conference: conference
|
||||||
-if @antiquated and @antiquated.any?
|
-if @antiquated and @antiquated.any?
|
||||||
.row
|
.row
|
||||||
.col-md-12
|
.col-md-12
|
||||||
|
|
@ -17,7 +17,7 @@
|
||||||
%i.fa.fa-chevron-down{ style: 'display: none' }
|
%i.fa.fa-chevron-down{ style: 'display: none' }
|
||||||
#antiquated.collapse
|
#antiquated.collapse
|
||||||
- @antiquated.each do |conference|
|
- @antiquated.each do |conference|
|
||||||
= render partial: 'conference_details', locals: { conference: conference}
|
= render '/conferences/conference_details', conference: conference
|
||||||
|
|
||||||
-content_for :script_body do
|
-content_for :script_body do
|
||||||
:javascript
|
:javascript
|
||||||
|
|
|
||||||
|
|
@ -13,10 +13,8 @@
|
||||||
%span.icon-bar
|
%span.icon-bar
|
||||||
%span.icon-bar
|
%span.icon-bar
|
||||||
%span.icon-bar
|
%span.icon-bar
|
||||||
- if conference.nil? || conference.new_record?
|
= nav_root_link_for conference
|
||||||
= link_to (ENV['OSEM_NAME'] || 'OSEM'), root_path, class: 'navbar-brand', title: 'Open Source Event Manager'
|
|
||||||
- else
|
|
||||||
= link_to conference.organization.name, organizations_path, class: 'navbar-brand', title: 'Open Source Event Manager'
|
|
||||||
.collapse.navbar-collapse#main-nav
|
.collapse.navbar-collapse#main-nav
|
||||||
- if content_for :splash_nav
|
- if content_for :splash_nav
|
||||||
%ul.nav.navbar-nav#splash-nav
|
%ul.nav.navbar-nav#splash-nav
|
||||||
|
|
|
||||||
|
|
@ -9,15 +9,16 @@
|
||||||
= javascript_include_tag "application"
|
= javascript_include_tag "application"
|
||||||
|
|
||||||
= csrf_meta_tags
|
= csrf_meta_tags
|
||||||
:javascript
|
|
||||||
window.liveSettings = {
|
|
||||||
api_key: "#{ENV['OSEM_TRANSIFEX_APIKEY']}",
|
|
||||||
picker: "bottom-right",
|
|
||||||
detectlang: true,
|
|
||||||
autocollect: true
|
|
||||||
};
|
|
||||||
= content_for(:script_head)
|
= content_for(:script_head)
|
||||||
= javascript_include_tag "//cdn.transifex.com/live.js"
|
- if ENV['OSEM_TRANSIFEX_APIKEY']
|
||||||
|
:javascript
|
||||||
|
window.liveSettings = {
|
||||||
|
api_key: "#{ENV['OSEM_TRANSIFEX_APIKEY']}",
|
||||||
|
picker: "bottom-right",
|
||||||
|
detectlang: true,
|
||||||
|
autocollect: true
|
||||||
|
};
|
||||||
|
= javascript_include_tag "//cdn.transifex.com/live.js"
|
||||||
|
|
||||||
= yield(:head)
|
= yield(:head)
|
||||||
%body
|
%body
|
||||||
|
|
|
||||||
|
|
@ -12,5 +12,7 @@
|
||||||
.caption
|
.caption
|
||||||
%h4
|
%h4
|
||||||
= organization.name
|
= organization.name
|
||||||
%button.btn.btn-success Conferences
|
= link_to 'Conferences',
|
||||||
|
conferences_organization_path(organization),
|
||||||
|
class: 'btn btn-success'
|
||||||
/ = link_to 'Edit', edit_organization_path(organization), class: 'btn btn-mini btn-default'
|
/ = link_to 'Edit', edit_organization_path(organization), class: 'btn btn-mini btn-default'
|
||||||
|
|
|
||||||
|
|
@ -1,11 +1,12 @@
|
||||||
- progress_status = event.progress_status
|
- progress_status = event.progress_status
|
||||||
%ul.list-unstyled
|
%ul.list-unstyled
|
||||||
%li{'class'=>class_for_todo(progress_status['registered'])}
|
- if can? :create, @conference.registrations.new
|
||||||
%span{'class'=>icon_for_todo(progress_status['registered'])}
|
%li{'class'=>class_for_todo(progress_status['registered'])}
|
||||||
- if progress_status['registered']
|
%span{'class'=>icon_for_todo(progress_status['registered'])}
|
||||||
Speaker(s) registered to the conference
|
- if progress_status['registered']
|
||||||
- else
|
Speaker(s) registered to the conference
|
||||||
= link_to 'Speaker(s) not registered to the conference', new_conference_conference_registration_path(event.program.conference.short_title)
|
- else
|
||||||
|
= 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'])}
|
%li{'class'=>class_for_todo(progress_status['biographies'])}
|
||||||
%span{'class'=>icon_for_todo(progress_status['biographies'])}
|
%span{'class'=>icon_for_todo(progress_status['biographies'])}
|
||||||
- if progress_status['biographies']
|
- if progress_status['biographies']
|
||||||
|
|
|
||||||
|
|
@ -6,6 +6,14 @@
|
||||||
%span.notranslate
|
%span.notranslate
|
||||||
= @conference.title
|
= @conference.title
|
||||||
|
|
||||||
|
|
||||||
|
- if @program.cfp_open?
|
||||||
|
- if @program.cfp.description.present?
|
||||||
|
.row
|
||||||
|
.col-md-12
|
||||||
|
= markdown(@program.cfp.description)
|
||||||
|
|
||||||
|
|
||||||
.row
|
.row
|
||||||
.col-md-12
|
.col-md-12
|
||||||
= render partial: 'encouragement_text'
|
= render partial: 'encouragement_text'
|
||||||
|
|
@ -48,12 +56,12 @@
|
||||||
The more information you add to your proposal, the more likely it is that the conference organizers accept your proposal.
|
The more information you add to your proposal, the more likely it is that the conference organizers accept your proposal.
|
||||||
%br
|
%br
|
||||||
It will also be more likely that visitors find your proposal interesting enough to attend.
|
It will also be more likely that visitors find your proposal interesting enough to attend.
|
||||||
|
- if can? :create, @conference.registrations.new
|
||||||
%p
|
%p
|
||||||
%strong
|
%strong
|
||||||
Why do I need to register to the conference?
|
Why do I need to register to the conference?
|
||||||
%p
|
%p
|
||||||
Knowing the number of visitors for the conference helps the organizers plan better.
|
Knowing the number of visitors for the conference helps the organizers plan better.
|
||||||
|
|
||||||
%table.table.table-striped#events
|
%table.table.table-striped#events
|
||||||
- @events.each do |event|
|
- @events.each do |event|
|
||||||
|
|
@ -74,13 +82,20 @@
|
||||||
|
|
||||||
%td.col-md-2{style: "padding:20px 8px 20px 8px;"}
|
%td.col-md-2{style: "padding:20px 8px 20px 8px;"}
|
||||||
= link_to 'Complete your proposal', 'javascript: void(0)', "type"=>"button", "data-trigger"=>"focus", "data-toggle"=>"popover", "title"=>"Your todo list", "data-content"=>"#{render partial: 'tooltip', locals: { event: event} }"
|
= link_to 'Complete your proposal', 'javascript: void(0)', "type"=>"button", "data-trigger"=>"focus", "data-toggle"=>"popover", "title"=>"Your todo list", "data-content"=>"#{render partial: 'tooltip', locals: { event: event} }"
|
||||||
|
- if can? :create, @conference.registrations.new
|
||||||
- progress_percentage = event.calculate_progress
|
- progress_percentage = event.calculate_progress
|
||||||
.progress
|
.progress
|
||||||
%div{class: "progress-bar #{event_progress_color(progress_percentage)}", style: "width:#{progress_percentage}%;"}
|
%div{class: "progress-bar #{event_progress_color(progress_percentage)}", style: "width:#{progress_percentage}%;"}
|
||||||
= event.progress_status.reject{ |_key, value| value || value.nil? }.length
|
= event.progress_status.reject{ |_key, value| value || value.nil? }.length
|
||||||
left
|
left
|
||||||
|
- else
|
||||||
|
:ruby
|
||||||
|
progress_list = event.progress_status
|
||||||
|
progress_percentage = (100 * progress_list.values.count(true) / (progress_list.values.compact.count-1)).to_s
|
||||||
|
.progress
|
||||||
|
%div{class: "progress-bar #{event_progress_color(progress_percentage)}", style: "width:#{progress_percentage}%;"}
|
||||||
|
= event.progress_status.reject{ |_key, value| value || value.nil? }.length-1
|
||||||
|
left
|
||||||
%td.col-md-3{style: "padding:20px 0px 20px 0px;"}
|
%td.col-md-3{style: "padding:20px 0px 20px 0px;"}
|
||||||
.pull-right
|
.pull-right
|
||||||
- if event.transition_possible? :confirm
|
- if event.transition_possible? :confirm
|
||||||
|
|
|
||||||
|
|
@ -3,6 +3,11 @@
|
||||||
.col-md-12
|
.col-md-12
|
||||||
.page-header
|
.page-header
|
||||||
%h1 New Proposal
|
%h1 New Proposal
|
||||||
|
- if @program.cfp_open?
|
||||||
|
- if @program.cfp.description.present?
|
||||||
|
.row
|
||||||
|
.col-md-12
|
||||||
|
= markdown(@program.cfp.description)
|
||||||
.row
|
.row
|
||||||
.col-md-12
|
.col-md-12
|
||||||
= render partial: 'encouragement_text'
|
= render partial: 'encouragement_text'
|
||||||
|
|
|
||||||
|
|
@ -36,7 +36,8 @@
|
||||||
.col-md-8
|
.col-md-8
|
||||||
%h4
|
%h4
|
||||||
= link_to speaker.name, user_path(speaker.id)
|
= link_to speaker.name, user_path(speaker.id)
|
||||||
= "(#{speaker.email})"
|
- if speaker.email_public?
|
||||||
|
= "(#{speaker.email})"
|
||||||
- if speaker.affiliation?
|
- if speaker.affiliation?
|
||||||
.text-muted
|
.text-muted
|
||||||
from
|
from
|
||||||
|
|
|
||||||
42
bootstrap.sh
42
bootstrap.sh
|
|
@ -1,4 +1,10 @@
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
|
# set env os release variables
|
||||||
|
. /etc/os-release
|
||||||
|
|
||||||
|
if [[ "$ID" == "opensuse" ]]; then
|
||||||
|
|
||||||
pushd /vagrant
|
pushd /vagrant
|
||||||
|
|
||||||
echo -e "\ninstalling required software packages...\n"
|
echo -e "\ninstalling required software packages...\n"
|
||||||
|
|
@ -14,6 +20,42 @@ echo 'install: --no-format-executable' >> /etc/gemrc
|
||||||
echo -e "\ninstalling bundler...\n"
|
echo -e "\ninstalling bundler...\n"
|
||||||
gem.ruby2.4 install bundler
|
gem.ruby2.4 install bundler
|
||||||
|
|
||||||
|
elif [[ "$ID" == "centos" || "$VERSION" == "7" ]]; then
|
||||||
|
_YELLOW='\033[1;33m' # yellow color
|
||||||
|
_LRED='\033[1;31m' # Light red color
|
||||||
|
_NO_COLOUR='\033[0m' # no color
|
||||||
|
|
||||||
|
printf "${_YELLOW}CEntOS-7 Setup${_NO_COLOUR}\n"
|
||||||
|
|
||||||
|
printf "${_YELLOW}installing ruby-2.4${_NO_COLOUR}\n"
|
||||||
|
yum install -q -y https://github.com/feedforce/ruby-rpm/releases/download/2.4.2/ruby-2.4.2-1.el7.centos.x86_64.rpm
|
||||||
|
if [[ ! "$?" -eq 0 ]]; then
|
||||||
|
printf "${_LRED}Error trying to install ruby-2.4${_NO_COLOUR}\n"
|
||||||
|
fi
|
||||||
|
|
||||||
|
printf "${_YELLOW}installing ruby-2.4 gems dependencies${_NO_COLOUR}\n"
|
||||||
|
gem install bundler
|
||||||
|
if [[ ! "$?" -eq 0 ]]; then
|
||||||
|
printf "${_LRED}Error trying to install ruby-2.4 bundler${_NO_COLOUR}\n"
|
||||||
|
fi
|
||||||
|
|
||||||
|
printf "${_YELLOW}installing nodejs repo${_NO_COLOUR}\n"
|
||||||
|
curl -sL https://rpm.nodesource.com/setup_9.x | bash - > /dev/null
|
||||||
|
|
||||||
|
printf "${_YELLOW}installing nodejs and devel tools${_NO_COLOUR}\n"
|
||||||
|
yum install -q -y git make gcc gcc-c++ libxml2-devel libxslt-devel nodejs screen mariadb mariadb-devel sqlite-devel ImageMagick bzip2
|
||||||
|
|
||||||
|
# for production: bundle install --without test development
|
||||||
|
printf "${_YELLOW}Opening firewall port: 3000${_NO_COLOUR}\n"
|
||||||
|
iptables -I INPUT -p tcp --dport 3000 -j ACCEPT
|
||||||
|
|
||||||
|
printf "${_YELLOW}installing phantomjs${_NO_COLOUR}\n"
|
||||||
|
curl -L --silent https://bitbucket.org/ariya/phantomjs/downloads/phantomjs-2.1.1-linux-x86_64.tar.bz2 -o /tmp/phantomjs-2.1.1-linux-x86_64.tar.bz2
|
||||||
|
tar jxvf /tmp/phantomjs-2.1.1-linux-x86_64.tar.bz2 -C /tmp/ phantomjs-2.1.1-linux-x86_64/bin/phantomjs
|
||||||
|
mv /tmp/phantomjs-2.1.1-linux-x86_64/bin/phantomjs /usr/local/bin
|
||||||
|
|
||||||
|
fi
|
||||||
|
|
||||||
echo -e "\ninstalling your bundle...\n"
|
echo -e "\ninstalling your bundle...\n"
|
||||||
su - vagrant -c "cd /vagrant/; bundle install --quiet"
|
su - vagrant -c "cd /vagrant/; bundle install --quiet"
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@ require 'mina/rails'
|
||||||
require 'mina/git'
|
require 'mina/git'
|
||||||
|
|
||||||
set :domain, 'proxy-opensuse.suse.de'
|
set :domain, 'proxy-opensuse.suse.de'
|
||||||
set :port, 2214
|
set :port, 2252
|
||||||
set :user, 'osem'
|
set :user, 'osem'
|
||||||
set :deploy_to, '/srv/www/vhosts/opensuse.org/events'
|
set :deploy_to, '/srv/www/vhosts/opensuse.org/events'
|
||||||
set :repository, 'https://github.com/openSUSE/osem.git'
|
set :repository, 'https://github.com/openSUSE/osem.git'
|
||||||
|
|
@ -42,7 +42,7 @@ task deploy: :environment do
|
||||||
#invoke :notify_errbit
|
#invoke :notify_errbit
|
||||||
|
|
||||||
to :launch do
|
to :launch do
|
||||||
queue "sudo /etc/init.d/apache2 restart"
|
queue "sudo /usr/bin/systemctl restart apache2"
|
||||||
queue "cd #{deploy_to}/current && RAILS_ENV=production bin/delayed_job start"
|
queue "cd #{deploy_to}/current && RAILS_ENV=production bin/delayed_job start"
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -149,7 +149,11 @@ Osem::Application.routes.draw do
|
||||||
get '/revision_history/:id/revert_object' => 'versions#revert_object', as: 'revision_history_revert_object'
|
get '/revision_history/:id/revert_object' => 'versions#revert_object', as: 'revision_history_revert_object'
|
||||||
get '/revision_history/:id/revert_attribute' => 'versions#revert_attribute', as: 'revision_history_revert_attribute'
|
get '/revision_history/:id/revert_attribute' => 'versions#revert_attribute', as: 'revision_history_revert_attribute'
|
||||||
end
|
end
|
||||||
resources :organizations, only: [:index]
|
resources :organizations, only: [:index] do
|
||||||
|
member do
|
||||||
|
get :conferences
|
||||||
|
end
|
||||||
|
end
|
||||||
resources :conferences, only: [:index, :show] do
|
resources :conferences, only: [:index, :show] do
|
||||||
resources :booths do
|
resources :booths do
|
||||||
member do
|
member do
|
||||||
|
|
|
||||||
5
db/migrate/20170905110034_add_description_to_cfps.rb
Normal file
5
db/migrate/20170905110034_add_description_to_cfps.rb
Normal file
|
|
@ -0,0 +1,5 @@
|
||||||
|
class AddDescriptionToCfps < ActiveRecord::Migration
|
||||||
|
def change
|
||||||
|
add_column :cfps, :description, :text
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
@ -0,0 +1,5 @@
|
||||||
|
class AddAmountPaidToTicketPurchases < ActiveRecord::Migration
|
||||||
|
def change
|
||||||
|
add_column :ticket_purchases, :amount_paid, :float, default: 0
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
@ -11,7 +11,7 @@
|
||||||
#
|
#
|
||||||
# It's strongly recommended that you check this file into your version control system.
|
# It's strongly recommended that you check this file into your version control system.
|
||||||
|
|
||||||
ActiveRecord::Schema.define(version: 20170816203325) do
|
ActiveRecord::Schema.define(version: 20170924190528) do
|
||||||
|
|
||||||
create_table "ahoy_events", force: :cascade do |t|
|
create_table "ahoy_events", force: :cascade do |t|
|
||||||
t.uuid "visit_id", limit: 16
|
t.uuid "visit_id", limit: 16
|
||||||
|
|
@ -68,12 +68,13 @@ ActiveRecord::Schema.define(version: 20170816203325) do
|
||||||
end
|
end
|
||||||
|
|
||||||
create_table "cfps", force: :cascade do |t|
|
create_table "cfps", force: :cascade do |t|
|
||||||
t.date "start_date", null: false
|
t.date "start_date", null: false
|
||||||
t.date "end_date", null: false
|
t.date "end_date", null: false
|
||||||
t.datetime "created_at"
|
t.datetime "created_at"
|
||||||
t.datetime "updated_at"
|
t.datetime "updated_at"
|
||||||
t.integer "program_id"
|
t.integer "program_id"
|
||||||
t.string "cfp_type"
|
t.string "cfp_type"
|
||||||
|
t.text "description"
|
||||||
end
|
end
|
||||||
|
|
||||||
create_table "comments", force: :cascade do |t|
|
create_table "comments", force: :cascade do |t|
|
||||||
|
|
@ -504,6 +505,7 @@ ActiveRecord::Schema.define(version: 20170816203325) do
|
||||||
t.integer "user_id"
|
t.integer "user_id"
|
||||||
t.integer "payment_id"
|
t.integer "payment_id"
|
||||||
t.integer "week"
|
t.integer "week"
|
||||||
|
t.float "amount_paid"
|
||||||
end
|
end
|
||||||
|
|
||||||
create_table "ticket_scannings", force: :cascade do |t|
|
create_table "ticket_scannings", force: :cascade do |t|
|
||||||
|
|
|
||||||
|
|
@ -252,7 +252,7 @@ describe ConferenceRegistrationsController, type: :controller do
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'does not assign price of purchased tickets to total_price and purchased tickets to tickets without payment' do
|
it 'does not assign price of purchased tickets to total_price and purchased tickets to tickets without payment' do
|
||||||
expect(assigns(:total_price)).to eq Money.new(0, 'USD')
|
expect(assigns(:total_price)).to eq 0
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
@ -262,7 +262,7 @@ describe ConferenceRegistrationsController, type: :controller do
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'assigns 0 dollars to total_price and empty array to tickets variables' do
|
it 'assigns 0 dollars to total_price and empty array to tickets variables' do
|
||||||
expect(assigns(:total_price)).to eq Money.new(0, 'USD')
|
expect(assigns(:total_price)).to eq 0
|
||||||
expect(assigns(:tickets)).to match_array []
|
expect(assigns(:tickets)).to match_array []
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
||||||
|
|
@ -2,6 +2,26 @@ require 'spec_helper'
|
||||||
|
|
||||||
describe OrganizationsController do
|
describe OrganizationsController do
|
||||||
let!(:organization) { create(:organization) }
|
let!(:organization) { create(:organization) }
|
||||||
|
let!(:conference) do
|
||||||
|
create(
|
||||||
|
:conference,
|
||||||
|
splashpage: create(:splashpage, public: true),
|
||||||
|
venue: create(:venue),
|
||||||
|
organization: organization
|
||||||
|
)
|
||||||
|
end
|
||||||
|
let!(:antiquated_conference) do
|
||||||
|
create(
|
||||||
|
:conference,
|
||||||
|
splashpage: create(:splashpage, public: true),
|
||||||
|
venue: create(:venue),
|
||||||
|
organization: organization,
|
||||||
|
start_date: 2.weeks.ago,
|
||||||
|
end_date: 1.week.ago
|
||||||
|
)
|
||||||
|
end
|
||||||
|
|
||||||
|
let!(:other_conference) { create(:conference) }
|
||||||
let!(:user) { create(:user) }
|
let!(:user) { create(:user) }
|
||||||
|
|
||||||
describe 'GET #index' do
|
describe 'GET #index' do
|
||||||
|
|
@ -12,4 +32,27 @@ describe OrganizationsController do
|
||||||
|
|
||||||
it { expect(response).to render_template('index') }
|
it { expect(response).to render_template('index') }
|
||||||
end
|
end
|
||||||
|
|
||||||
|
describe 'GET #conferences' do
|
||||||
|
before :each do
|
||||||
|
get :conferences, id: organization.id
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'loads the organization' do
|
||||||
|
expect(assigns(:organization)).to eq organization
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'includes organization conferences' do
|
||||||
|
expect(assigns(:current)).to include conference
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'does not include conferences outside organization' do
|
||||||
|
expect(assigns(:current)).not_to include other_conference
|
||||||
|
expect(assigns(:antiquated)).not_to include other_conference
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'includes antiquated organization conferences' do
|
||||||
|
expect(assigns(:antiquated)).to include antiquated_conference
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,7 @@ FactoryGirl.define do
|
||||||
start_date { 1.day.ago }
|
start_date { 1.day.ago }
|
||||||
end_date { 2.days.from_now }
|
end_date { 2.days.from_now }
|
||||||
cfp_type 'events'
|
cfp_type 'events'
|
||||||
|
description 'This is a test description'
|
||||||
program
|
program
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
||||||
|
|
@ -48,4 +48,12 @@ feature Organization do
|
||||||
|
|
||||||
it_behaves_like 'successfully updates an organization'
|
it_behaves_like 'successfully updates an organization'
|
||||||
end
|
end
|
||||||
|
|
||||||
|
context 'anonymously' do
|
||||||
|
scenario 'index should link to conferences list' do
|
||||||
|
visit organizations_path
|
||||||
|
|
||||||
|
expect(page).to have_link('Conferences', href: "/organizations/#{organization.id}/conferences")
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
|
||||||
|
|
@ -62,14 +62,18 @@ feature Splashpage do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'public splashpage already created' do
|
context 'navigation' do
|
||||||
let!(:splashpage) { create(:splashpage, conference: conference, public: true)}
|
let!(:splashpage) { create(:splashpage, conference: conference, public: true)}
|
||||||
|
|
||||||
scenario 'should have organization name', feature: true, js: true do
|
context 'multiple organizations' do
|
||||||
sign_in participant
|
let!(:additional_organization) { create(:organization) }
|
||||||
visit conference_path(conference.short_title)
|
|
||||||
|
|
||||||
expect(page).to have_text(conference.organization.name)
|
scenario 'should have organization name', feature: true, js: true do
|
||||||
|
sign_in participant
|
||||||
|
visit conference_path(conference.short_title)
|
||||||
|
|
||||||
|
expect(page).to have_text(conference.organization.name)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
||||||
|
|
@ -58,5 +58,21 @@ describe ApplicationHelper, type: :helper do
|
||||||
expect(concurrent_events(event).present?).to eq false
|
expect(concurrent_events(event).present?).to eq false
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
describe 'navigation title link' do
|
||||||
|
it 'should default to OSEM' do
|
||||||
|
ENV.delete('OSEM_NAME')
|
||||||
|
expect(nav_root_link_for(nil)).to match 'OSEM'
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'should use the environment variable' do
|
||||||
|
ENV['OSEM_NAME'] = Faker::Company.name
|
||||||
|
expect(nav_root_link_for(nil)).to match ENV['OSEM_NAME']
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'should use the conference organization name' do
|
||||||
|
expect(nav_root_link_for(conference)).to match conference.organization.name
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
||||||
|
|
@ -362,7 +362,7 @@ describe Event do
|
||||||
new_event.submitter = submitter
|
new_event.submitter = submitter
|
||||||
new_event.speakers = [speaker1, speaker2]
|
new_event.speakers = [speaker1, speaker2]
|
||||||
|
|
||||||
expect(new_event.speaker_names).to eq 'user speaker 1 and user speaker 2'
|
expect(new_event.speaker_names).to eq 'user speaker 1, user speaker 2'
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
||||||
|
|
@ -15,8 +15,8 @@ describe Program do
|
||||||
it { is_expected.to have_many(:events).dependent(:destroy) }
|
it { is_expected.to have_many(:events).dependent(:destroy) }
|
||||||
it { is_expected.to have_many(:event_schedules).through(:events) }
|
it { is_expected.to have_many(:event_schedules).through(:events) }
|
||||||
it { is_expected.to have_many(:event_users).through(:events) }
|
it { is_expected.to have_many(:event_users).through(:events) }
|
||||||
it { is_expected.to have_many(:speakers).through(:event_users).source(:user) }
|
it { is_expected.to have_many(:program_events_speakers).through(:events).source(:event_users) }
|
||||||
|
it { is_expected.to have_many(:speakers).through(:program_events_speakers).source(:user) }
|
||||||
it { is_expected.to accept_nested_attributes_for(:event_types) }
|
it { is_expected.to accept_nested_attributes_for(:event_types) }
|
||||||
it { is_expected.to accept_nested_attributes_for(:tracks) }
|
it { is_expected.to accept_nested_attributes_for(:tracks) }
|
||||||
it { is_expected.to accept_nested_attributes_for(:difficulty_levels) }
|
it { is_expected.to accept_nested_attributes_for(:difficulty_levels) }
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue