Added paper_trail, also starting work on the scheduler

This commit is contained in:
Matt Barringer 2013-01-07 16:45:48 +01:00
parent 90b30db9e8
commit f86232bedf
35 changed files with 523 additions and 32137 deletions

View file

@ -30,8 +30,10 @@ gem "haml"
gem 'bcrypt-ruby', '~> 3.0.0'
gem 'node'
gem 'twitter-bootstrap-rails'
gem 'paper_trail'
gem 'formtastic-bootstrap'
gem 'cocoon'
gem 'therubyracer'
gem 'transitions', :require => ["transitions", "active_record/transitions"]
gem 'acts_as_commentable_with_threading'
gem 'prawn'

View file

@ -75,6 +75,7 @@ GEM
thor (>= 0.14, < 2.0)
jquery_datepicker (0.4)
json (1.7.5)
libv8 (3.11.8.11)
mail (2.4.4)
i18n (>= 0.4.0)
mime-types (~> 1.16)
@ -84,6 +85,9 @@ GEM
node (0.0.2)
eventmachine
orm_adapter (0.4.0)
paper_trail (2.7.0)
activerecord (~> 3.0)
railties (~> 3.0)
paperclip (3.4.0)
activemodel (>= 3.0.0)
activerecord (>= 3.0.0)
@ -126,6 +130,7 @@ GEM
rake (10.0.3)
rdoc (3.12)
json (~> 1.4)
ref (1.0.2)
ruby-rc4 (0.1.5)
sass (3.2.4)
sass-rails (3.2.5)
@ -138,6 +143,9 @@ GEM
rack (~> 1.0)
tilt (~> 1.1, != 1.3.0)
sqlite3 (1.3.6)
therubyracer (0.11.1)
libv8 (~> 3.11.8.7)
ref
thor (0.16.0)
tilt (1.3.3)
transitions (0.1.4)
@ -172,12 +180,14 @@ DEPENDENCIES
jquery-rails
jquery_datepicker
node
paper_trail
paperclip (~> 3.0)
prawn
prawn_rails
rails (= 3.2.9)
sass-rails (~> 3.2.3)
sqlite3
therubyracer
transitions
twitter-bootstrap-rails
uglifier (>= 1.0.3)

View file

@ -47,6 +47,21 @@ $(function() {
}
});
$("#conference-reg-start-datepicker").datepicker({
dateFormat: 'yy/mm/dd',
numberOfMonths: 2,
onSelect: function(selected) {
$("#conference-reg-end-datepicker").datepicker("option","minDate", selected)
}
});
$("#conference-reg-end-datepicker").datepicker({
dateFormat: 'yy/mm/dd',
numberOfMonths: 2,
onSelect: function(selected) {
$("#conference-reg-start-datepicker").datepicker("option","maxDate", selected)
}
});
$(".comment-reply-link").click(function(){
$(".comment-reply", $(this).parent()).toggle();
return false;

View file

@ -2,6 +2,7 @@
*= require formtastic-bootstrap
*= require bootstrap_and_overrides
*= require osem
*= require schedule
*= require jquery-ui-1.9.2.custom
*= require jquery.fileupload-ui
*/

View file

@ -100,3 +100,4 @@ textarea {
position:relative;
top:1px;
}

View file

@ -0,0 +1,45 @@
.schedule-content {
overflow: hidden;
width: 100%;
}
.unscheduled {
float:left;
border:1px solid #bbb;
padding-left:10px;
padding-right: 10px;
margin-right:20px;
margin-left:20px;
width:149px;
height:100%;
position:relative;
}
.schedule {
overflow: hidden;
}
.schedule-track-column-header {
position: absolute;
width: 149px;
}
.schedule-track-column {
float:left;
border-right:1px solid #bbb;
width:149px;
height:400px;
position:relative;
}
.schedule-event {
position:absolute;
cursor:move;
width:141px;
height:32px;
background: #6af;
color:#fff;
padding:4px;
font-weight:bold;
z-index:1;
}

View file

@ -0,0 +1,13 @@
class Admin::ScheduleController < ApplicationController
before_filter :verify_organizer
layout "schedule"
def show
@dates = @conference.start_date..@conference.end_date
@tracks = @conference.tracks
end
def update
end
end

View file

@ -71,7 +71,8 @@ class EventAttachmentsController < ApplicationController
end
def update
@upload = EventAttachment.find(params[:proposal_id])
@proposal = current_user.person.events.find(params[:proposal_id])
@upload = @proposal.event_attachments.find(params[:proposal_id])
respond_to do |format|
if @upload.update_attributes(params[:upload])

View file

@ -25,7 +25,7 @@ class ProposalController < ApplicationController
@event = @person.events.find_by_id(params[:id])
@attachments = @event.event_attachments
if @event.nil?
if @event.nil? || !@conference.cfp_open?
redirect_to(conference_proposal_index_path(:conference_id => @conference.short_title), :alert => 'Invalid proposal.')
end
end

View file

@ -1,7 +1,9 @@
class Conference < ActiveRecord::Base
attr_accessible :title, :short_title, :social_tag, :contact_email, :timezone, :html_export_path,
:start_date, :end_date, :rooms_attributes, :tracks_attributes, :cfp_open, :registration_open,
:event_types_attributes
:start_date, :end_date, :rooms_attributes, :tracks_attributes,
:event_types_attributes, :registration_start_date, :registration_end_date
has_paper_trail
has_one :call_for_papers, :dependent => :destroy
has_many :events, :dependent => :destroy
@ -61,6 +63,15 @@ class Conference < ActiveRecord::Base
end
end
def registration_open?
today = Date.current
if self.registration_start_date.nil? || self.registration_end_date.nil?
false
end
(registration_start_date..registration_end_date).cover?(today)
end
def cfp_open?
today = Date.current
cfp = self.call_for_papers

View file

@ -1,6 +1,6 @@
class Event < ActiveRecord::Base
include ActiveRecord::Transitions
has_paper_trail
attr_accessible :title, :subtitle, :abstract, :description, :event_type_id, :people_attributes, :person,
:proposal_additional_speakers
acts_as_commentable

View file

@ -1,4 +1,6 @@
class EventAttachment < ActiveRecord::Base
has_paper_trail
belongs_to :event
scope :public, where(:public => true)
attr_accessible :public, :attachment, :event_id, :title

View file

@ -32,8 +32,9 @@ class Person < ActiveRecord::Base
:person_id => self.id).count
end
def proposals conference
self.events.where("conference_id = ? AND state != ? AND state != ?", conference.id, "withdrawn", "rejected")
self.events.where("conference_id = ? AND state != ? AND state != ? AND event_people.event_role=?", conference.id, "withdrawn", "rejected", "submitter")
end
def proposal_count conference
@ -48,6 +49,10 @@ class Person < ActiveRecord::Base
end
end
def self.find_person_by_user_id user_id
Person.where(:user_id => user_id).first
end
private
def biography_limit
if self.biography.split.size > 150

View file

@ -11,7 +11,7 @@
= 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 :end_date, :as => :string, :input_html => { :id => "conference-end-datepicker", :readonly => "readonly" }
= f.input :registration_start_date, :as => :string, :input_html => { :id => "conference-reg-start-datepicker", :readonly => "readonly" }
= f.input :registration_end_date, :as => :string, :input_html => { :id => "conference-reg-end-datepicker", :readonly => "readonly" }
= f.input :html_export_path, :hint => "The path for static HTML exports"
= f.input :cfp_open, :label => false, :hint => "Allow people to submit papers?"
= f.input :registration_open, :label => false, :hint => "Allow people to register as attendees?"
= f.action :submit, :as => :button, :button_html => {:class => "btn btn-primary"}

View file

@ -0,0 +1,112 @@
.row-fluid
.span10
%h3
= @event.title
%i= @event.subtitle
.span2
= link_to "Edit Submission", edit_admin_conference_event_path(@conference.short_title, @event),
:class => "btn btn-mini btn-primary pull-right", :style => "margin-top:20px;"
.row-fluid
.span12
%table.table
%tr
%td
%b State
%td
.dropdown
= link_to "#", :class => "dropdown-toggle" do
= @event.state.humanize
<b class="caret"></b>
%ul.dropdown-menu
- if @event.transition_possible? :accept
%li= link_to "Accept event (no email)", update_state_admin_conference_event_path(@conference.short_title, @event, :transition => :accept, :send_mail => false),
:method => :put, :hint => "Accept this event without sending an automated email."
- if @event.transition_possible? :reject
%li= link_to "Reject event (no email)", update_state_admin_conference_event_path(@conference.short_title, @event, :transition => :reject, :send_mail => false),
:method => :put, :confirm => "Are you sure?",
:hint => "Reject this event without sending an automated email."
- if @event.transition_possible? :start_review
%li= link_to "Start review", update_state_admin_conference_event_path(@conference.short_title, @event, :transition => :start_review),
:method => :put
- if @event.transition_possible? :confirm
%li= link_to "Confirm event", update_state_admin_conference_event_path(@conference.short_title, @event, :transition => :confirm),
:method => :put, :hint => "Confirm that the speaker(s) will be present and that the event will actually take place."
- if @event.transition_possible? :cancel
%li= link_to "Cancel event", update_state_admin_conference_event_path(@conference.short_title, @event, :transition => :cancel),
:method => :put, :hint => "Mark this event as cancelled. Usually this means that the speakers had to cancel their appearance."
%tr
%td
%b Submitter
%td
= link_to @event.submitter.public_name, admin_person_path(@conference.short_title, @event.submitter)
(
= link_to @event.submitter.email, "mailto: #{@event.submitter.email}"
)
%tr
%td
%b Biography
%td
= simple_format(@event.submitter.biography)
%tr
%td
%b Submitted on
%td= @event.created_at
%tr
%td
%b Last updated on
%td= @event.updated_at
%tr
%td
%b Abstract
%td= simple_format(@event.abstract)
%tr
%td
%b Description
%td= simple_format(@event.description)
- if @event.event_attachments.size > 0
%table.table
%thead
%th
%b Filename
%th
%b Title
%th
%b Size
%th
%b Public?
%th
%tbody
- @event.event_attachments.each do |a|
%tr
%td
= link_to a.attachment_file_name, conference_proposal_event_attachment_path(@conference.short_title, @event.id, a.id)
%td
= a.title
%td
= number_to_human_size a.attachment_file_size
%td
- if a.public?
Public
- else
Not Public
%td
= link_to "Delete", conference_proposal_event_attachment_path(@conference.short_title, @event.id, a.id),
:method => :delete, :confirm => "Are you sure you want to delete this attachment? It's permanant!"
.row-fluid
= link_to "Comments (#{@comment_count})", "#", :id => "event-comment-link"
#comments-div
%hr
%ul.media
%div
.row-fluid
= form_tag(comment_admin_conference_event_path(@conference.short_title, @event.id), :method => :post) do
= text_area_tag(:comment, "")
= submit_tag "Add Comment", :class => "btn btn-primary pull-right"
%br
- @comments.each do |comment|
%div
= raw format_comments(comment)

View file

@ -1,112 +1,38 @@
.row-fluid
.span10
%h3
= @event.title
%i= @event.subtitle
.tabbable
%ul.nav.nav-tabs
%li.active
= link_to "Proposal", "#proposal-content", "data-toggle"=>"tab"
%li
= link_to "History", "#history-content", "data-toggle"=>"tab"
.tab-content
#proposal-content.tab-pane.active
= render 'proposal'
#history-content.tab-pane
.span12
%table.table
%thead
%th
%b Who
%th
%b Timestamp
%th
%b Modification Type
%th
%b Changes
%tbody
- @event.versions.each do |version|
%tr
%td
- if !version.whodunnit.nil?
= Person.find_person_by_user_id(version.whodunnit).public_name
- else
No user (probably via the console)
%td
= version.created_at
%td
= version.event
%td
- version.changeset.each_key do |key|
= "#{key}: #{version.changeset[key][0]} -> #{version.changeset[key][1]}"
%br
.span2
= link_to "Edit Submission", edit_admin_conference_event_path(@conference.short_title, @event),
:class => "btn btn-mini btn-primary pull-right", :style => "margin-top:20px;"
.row-fluid
.span12
%table.table
%tr
%td
%b State
%td
.dropdown
= link_to "#", :class => "dropdown-toggle" do
= @event.state.humanize
<b class="caret"></b>
%ul.dropdown-menu
- if @event.transition_possible? :accept
%li= link_to "Accept event (no email)", update_state_admin_conference_event_path(@conference.short_title, @event, :transition => :accept, :send_mail => false),
:method => :put, :hint => "Accept this event without sending an automated email."
- if @event.transition_possible? :reject
%li= link_to "Reject event (no email)", update_state_admin_conference_event_path(@conference.short_title, @event, :transition => :reject, :send_mail => false),
:method => :put, :confirm => "Are you sure?",
:hint => "Reject this event without sending an automated email."
- if @event.transition_possible? :start_review
%li= link_to "Start review", update_state_admin_conference_event_path(@conference.short_title, @event, :transition => :start_review),
:method => :put
- if @event.transition_possible? :confirm
%li= link_to "Confirm event", update_state_admin_conference_event_path(@conference.short_title, @event, :transition => :confirm),
:method => :put, :hint => "Confirm that the speaker(s) will be present and that the event will actually take place."
- if @event.transition_possible? :cancel
%li= link_to "Cancel event", update_state_admin_conference_event_path(@conference.short_title, @event, :transition => :cancel),
:method => :put, :hint => "Mark this event as cancelled. Usually this means that the speakers had to cancel their appearance."
%tr
%td
%b Submitter
%td
= link_to @event.submitter.public_name, admin_person_path(@conference.short_title, @event.submitter)
(
= link_to @event.submitter.email, "mailto: #{@event.submitter.email}"
)
%tr
%td
%b Biography
%td
= simple_format(@event.submitter.biography)
%tr
%td
%b Submitted on
%td= @event.created_at
%tr
%td
%b Last updated on
%td= @event.updated_at
%tr
%td
%b Abstract
%td= simple_format(@event.abstract)
%tr
%td
%b Description
%td= simple_format(@event.description)
- if @event.event_attachments.size > 0
%table.table
%thead
%th
%b Filename
%th
%b Title
%th
%b Size
%th
%b Public?
%th
%tbody
- @event.event_attachments.each do |a|
%tr
%td
= link_to a.attachment_file_name, conference_proposal_event_attachment_path(@conference.short_title, @event.id, a.id)
%td
= a.title
%td
= number_to_human_size a.attachment_file_size
%td
- if a.public?
Public
- else
Not Public
%td
= link_to "Delete", conference_proposal_event_attachment_path(@conference.short_title, @event.id, a.id),
:method => :delete, :confirm => "Are you sure you want to delete this attachment? It's permanant!"
.row-fluid
= link_to "Comments (#{@comment_count})", "#", :id => "event-comment-link"
#comments-div
%hr
%ul.media
%div
.row-fluid
= form_tag(comment_admin_conference_event_path(@conference.short_title, @event.id), :method => :post) do
= text_area_tag(:comment, "")
= submit_tag "Add Comment", :class => "btn btn-primary pull-right"
%br
- @comments.each do |comment|
%div
= raw format_comments(comment)

View file

@ -0,0 +1,4 @@
- @tracks.each do |track|
.schedule-track-column-header
= track.name
.schedule-track-column

View file

@ -0,0 +1,43 @@
.schedule-content
.unscheduled
Unscheduled Events
#test1.schedule-event
Test
#test2.schedule-event
Test2
.schedule
.tabbable
%ul.nav.nav-tabs
- @dates.each do |date|
-if date == @dates.first
%li.active
= link_to "#{date}", "##{date}-content", "data-toggle"=>"tab"
- else
%li
= link_to "#{date}", "##{date}-content", "data-toggle"=>"tab"
.tab-content
- @dates.each do |date|
- if date == @dates.first
.tab-pane.active{:id => "#{date}-content"}
= render 'day_tab'
- else
.tab-pane{:id => "#{date}-content"}
= render 'day_tab'
:javascript
$(document).ready( function() {
$('.schedule-track-column').droppable({
accept: '.schedule-event',
drop: function(event, ui) {
var evtName = ui.draggable.text();
var evtDay = $(this).attr('title');
alert('Moved \'' + evtName + '\' to ' + evtDay);
}
});
$('.schedule-event').draggable({
grid: [150,20],
containment: '.schedule-content',
opacity: 0.7,
zIndex: 2
});
});

View file

@ -15,16 +15,19 @@
= conference.venue.address
.row-fluid{:style => "padding-top: 30px;"}
.span4
- if conference.user_registered?(current_user)
= link_to "Modify Registration", register_conference_path(conference.short_title), :class => "mainbutton center-text"
%br
%i.icon-thumbs-up You're attending!
- if conference.registration_open?
- if conference.user_registered?(current_user)
= link_to "Modify Registration", register_conference_path(conference.short_title), :class => "mainbutton center-text"
%br
%i.icon-thumbs-up You're attending!
- else
= link_to "Register", register_conference_path(conference.short_title), :class => "mainbutton center-text"
%br
- if !current_user.nil?
%i.icon-thumbs-down
You haven't registered yet!
- else
= link_to "Register", register_conference_path(conference.short_title), :class => "mainbutton center-text"
%br
- if !current_user.nil?
%i.icon-thumbs-down
You haven't registered yet!
%b Registration is closed.
.span4.offset4.pull-right
- if !current_user.nil? && current_user.person.proposal_count(conference) > 0
= link_to "View My Proposals", conference_proposal_index_path(conference.short_title), :class => "mainbutton center-text"

View file

@ -16,6 +16,12 @@
- else
%li
= link_to "Events", admin_conference_events_path(@conference.short_title)
- if current_page?(admin_conference_schedule_path(@conference.short_title))
%li.active
= link_to "Schedule", "#"
-else
%li
= link_to "Schedule ", admin_conference_schedule_path(@conference.short_title)
%ul.nav.secondary-nav.pull-right
- if !@conference.nil?
%li.dropdown

View file

@ -0,0 +1,22 @@
!!!
%html
%head
%meta{:charset => "utf-8"}
%meta{:name => "viewport", :content => "width=device-width, initial-scale=1, maximum-scale=1"}
%title= content_for?(:title) ? yield(:title) : "OSEM"
%meta{:content => "", :name => "description"}
%meta{:content => "", :name => "author"}
= stylesheet_link_tag "application", :media => "all"
= javascript_include_tag "application"
= csrf_meta_tags
= yield(:head)
%body
.navbar.navbar-fixed-top
.navbar-inner
.container-fluid
= render 'layouts/admin_navigation'
= render 'layouts/messages'
.content
#wrap
#inner-content
= yield

View file

@ -6,40 +6,7 @@
= link_to "Attachments", "#attachment-content", "data-toggle"=>"tab"
.tab-content
#proposal-content.tab-pane.active
.span12
= semantic_form_for(@event, :url => @url) do |f|
%section#basic
= f.inputs :name => "Basic Information" do
= f.input :title, :required => true
= f.input :subtitle
= f.input :abstract, :input_html => {:rows => 5, "onkeyup" => "word_count(this, 'abstract-count')"}, :required => true
You have used
%span#abstract-count #{@event.abstract_word_count}
words. Abstracts are limited to 250 words.
%br
%br
= f.input :description, :input_html => {:rows => 5}, :hint => "This will only be shown to organizers, not to attendees."
%section#details
= f.inputs :name => "Event Details" do
= f.input :event_type_id,:as => :select, :collection => @event_types, :include_blank => false
%section#information
= f.inputs :name => "Your Information" do
= semantic_fields_for @person do |p|
= p.input :public_name, :required => true
= p.input :company, :label => "Affiliation", :hint => "This could be a company, a user group, or nothing at all."
= p.input :biography, :required => true, :input_html => {:rows => 5, "onkeyup" => "word_count(this, 'biography-count')"}
You have used
%span#biography-count #{@person.biography_word_count}
words. Biographies are limited to 150 words.
%br
%br
%section#speakers
= f.inputs :name => "Additional Speakers" do
Will there be any additional speakers? If so, please enter their full names, email address, and a short
biography for each.
= f.input :proposal_additional_speakers, :input_html => {:rows => 5}, :label => false
= f.action :submit, :as => :button, :button_html => {:class => "btn btn-primary"}
= render 'proposal_form'
#attachment-content.tab-pane
.span12
= form_for EventAttachment.new, :url => conference_proposal_event_attachment_index_path(@conference.short_title, @event),

View file

@ -0,0 +1,34 @@
.span12
= semantic_form_for(@event, :url => @url) do |f|
%section#basic
= f.inputs :name => "Basic Information" do
= f.input :title, :required => true
= f.input :subtitle
= f.input :abstract, :input_html => {:rows => 5, "onkeyup" => "word_count(this, 'abstract-count')"}, :required => true
You have used
%span#abstract-count #{@event.abstract_word_count}
words. Abstracts are limited to 250 words.
%br
%br
= f.input :description, :input_html => {:rows => 5}, :hint => "This will only be shown to organizers, not to attendees."
%section#details
= f.inputs :name => "Event Details" do
= f.input :event_type_id,:as => :select, :collection => @event_types, :include_blank => false
%section#information
= f.inputs :name => "Your Information" do
= semantic_fields_for @person do |p|
= p.input :public_name, :required => true
= p.input :company, :label => "Affiliation", :hint => "This could be a company, a user group, or nothing at all."
= p.input :biography, :required => true, :input_html => {:rows => 5, "onkeyup" => "word_count(this, 'biography-count')"}
You have used
%span#biography-count #{@person.biography_word_count}
words. Biographies are limited to 150 words.
%br
%br
%section#speakers
= f.inputs :name => "Additional Speakers" do
Will there be any additional speakers? If so, please enter their full names, email address, and a short
biography for each.
= f.input :proposal_additional_speakers, :input_html => {:rows => 5}, :label => false
= f.action :submit, :as => :button, :button_html => {:class => "btn btn-primary"}

View file

@ -13,6 +13,7 @@
.span10
= event.title
.pull-right
= link_to "Edit", edit_conference_proposal_path(@conference.short_title, event.id), :class => "btn btn-mini btn-primary"
= link_to "Withdraw", conference_proposal_path(@conference.short_title, event.id), :method => :delete,
:confirm => "Are you sure you want to withdraw this proposal?", :class => "btn btn-mini btn-danger"
- if @conference.cfp_open?
= link_to "Edit", edit_conference_proposal_path(@conference.short_title, event.id), :class => "btn btn-mini btn-primary"
= link_to "Withdraw", conference_proposal_path(@conference.short_title, event.id), :method => :delete,
:confirm => "Are you sure you want to withdraw this proposal?", :class => "btn btn-mini btn-danger"

View file

@ -1,2 +1,2 @@
.container
= render 'form'
= render 'proposal_form'

View file

@ -7,6 +7,8 @@ Osem::Application.routes.draw do
resources :people
resources :conference do
get "/schedule" => "schedule#show"
put "/schedule" => "schedule#update"
get "/registrations" => "registrations#show"
get "/venue" => "venue#show", :as => "venue_info"
put "/venue" => "venue#update", :as => "venue_update"

View file

@ -0,0 +1,6 @@
class AddRegistrationDatesToConferencesTable < ActiveRecord::Migration
def change
add_column :conferences, :registration_start_date, :date
add_column :conferences, :registration_end_date, :date
end
end

View file

@ -0,0 +1,11 @@
class RemoveCfpAndRegBooleansFromConferences < ActiveRecord::Migration
def up
remove_column :conferences, :cfp_open
remove_column :conferences, :registration_open
end
def down
add_column :conferences, :cfp_open, :default => false
add_column :registration_open, :default => false
end
end

View file

@ -0,0 +1,19 @@
class CreateVersions < ActiveRecord::Migration
def self.up
create_table :versions do |t|
t.string :item_type, :null => false
t.integer :item_id, :null => false
t.string :event, :null => false
t.string :whodunnit
t.text :object
t.text :object_changes
t.datetime :created_at
end
add_index :versions, [:item_type, :item_id]
end
def self.down
remove_index :versions, [:item_type, :item_id]
drop_table :versions
end
end

View file

@ -11,7 +11,7 @@
#
# It's strongly recommended to check this file into your version control system.
ActiveRecord::Schema.define(:version => 20130105115603) do
ActiveRecord::Schema.define(:version => 20130107114930) do
create_table "call_for_papers", :force => true do |t|
t.date "start_date", :null => false
@ -42,31 +42,32 @@ ActiveRecord::Schema.define(:version => 20130105115603) do
add_index "comments", ["user_id"], :name => "index_comments_on_user_id"
create_table "conferences", :force => true do |t|
t.string "guid", :null => false
t.string "title", :null => false
t.string "short_title", :null => false
t.string "guid", :null => false
t.string "title", :null => false
t.string "short_title", :null => false
t.string "social_tag"
t.string "contact_email", :null => false
t.string "timezone", :null => false
t.string "contact_email", :null => false
t.string "timezone", :null => false
t.string "html_export_path"
t.date "start_date", :null => false
t.date "end_date", :null => false
t.boolean "cfp_open", :default => false
t.boolean "registration_open", :default => false
t.date "start_date", :null => false
t.date "end_date", :null => false
t.integer "venue_id"
t.datetime "created_at", :null => false
t.datetime "updated_at", :null => false
t.datetime "created_at", :null => false
t.datetime "updated_at", :null => false
t.date "registration_start_date"
t.date "registration_end_date"
end
create_table "event_attachments", :force => true do |t|
t.integer "event_id"
t.string "title", :null => false
t.string "title", :null => false
t.string "attachment_file_name"
t.string "attachment_content_type"
t.integer "attachment_file_size"
t.datetime "attachment_updated_at"
t.datetime "created_at", :null => false
t.datetime "updated_at", :null => false
t.boolean "public", :default => true
t.datetime "created_at", :null => false
t.datetime "updated_at", :null => false
end
create_table "event_people", :force => true do |t|
@ -103,11 +104,11 @@ ActiveRecord::Schema.define(:version => 20130105115603) do
t.string "logo_content_type"
t.integer "logo_file_size"
t.datetime "logo_updated_at"
t.text "proposal_additional_speakers"
t.integer "track_id"
t.integer "room_id"
t.datetime "created_at", :null => false
t.datetime "updated_at", :null => false
t.text "proposal_additional_speakers"
end
create_table "people", :force => true do |t|
@ -136,7 +137,6 @@ ActiveRecord::Schema.define(:version => 20130105115603) do
t.boolean "using_affiliated_lodging", :default => true
t.date "arrival"
t.date "departure"
t.text "additional_speakers"
t.datetime "created_at", :null => false
t.datetime "updated_at", :null => false
end
@ -205,4 +205,15 @@ ActiveRecord::Schema.define(:version => 20130105115603) do
t.datetime "updated_at", :null => false
end
create_table "versions", :force => true do |t|
t.string "item_type", :null => false
t.integer "item_id", :null => false
t.string "event", :null => false
t.string "whodunnit"
t.text "object"
t.datetime "created_at"
end
add_index "versions", ["item_type", "item_id"], :name => "index_versions_on_item_type_and_item_id"
end

File diff suppressed because one or more lines are too long

Binary file not shown.

File diff suppressed because one or more lines are too long

Binary file not shown.

View file

@ -1,53 +1,53 @@
---
rails.png: rails.png
rails/index.png: rails.png
ui-bg_flat_0_aaaaaa_40x100.png: ui-bg_flat_0_aaaaaa_40x100.png
ui-bg_flat_0_aaaaaa_40x100/index.png: ui-bg_flat_0_aaaaaa_40x100.png
ui-bg_flat_55_fbec88_40x100.png: ui-bg_flat_55_fbec88_40x100.png
ui-bg_flat_55_fbec88_40x100/index.png: ui-bg_flat_55_fbec88_40x100.png
ui-bg_glass_75_d0e5f5_1x400.png: ui-bg_glass_75_d0e5f5_1x400.png
ui-bg_glass_75_d0e5f5_1x400/index.png: ui-bg_glass_75_d0e5f5_1x400.png
ui-bg_glass_85_dfeffc_1x400.png: ui-bg_glass_85_dfeffc_1x400.png
ui-bg_glass_85_dfeffc_1x400/index.png: ui-bg_glass_85_dfeffc_1x400.png
ui-bg_glass_95_fef1ec_1x400.png: ui-bg_glass_95_fef1ec_1x400.png
ui-bg_glass_95_fef1ec_1x400/index.png: ui-bg_glass_95_fef1ec_1x400.png
ui-bg_gloss-wave_55_5c9ccc_500x100.png: ui-bg_gloss-wave_55_5c9ccc_500x100.png
ui-bg_gloss-wave_55_5c9ccc_500x100/index.png: ui-bg_gloss-wave_55_5c9ccc_500x100.png
ui-bg_inset-hard_100_f5f8f9_1x100.png: ui-bg_inset-hard_100_f5f8f9_1x100.png
ui-bg_inset-hard_100_f5f8f9_1x100/index.png: ui-bg_inset-hard_100_f5f8f9_1x100.png
ui-bg_inset-hard_100_fcfdfd_1x100.png: ui-bg_inset-hard_100_fcfdfd_1x100.png
ui-bg_inset-hard_100_fcfdfd_1x100/index.png: ui-bg_inset-hard_100_fcfdfd_1x100.png
ui-icons_217bc0_256x240.png: ui-icons_217bc0_256x240.png
ui-icons_217bc0_256x240/index.png: ui-icons_217bc0_256x240.png
ui-icons_2e83ff_256x240.png: ui-icons_2e83ff_256x240.png
ui-icons_2e83ff_256x240/index.png: ui-icons_2e83ff_256x240.png
ui-icons_469bdd_256x240.png: ui-icons_469bdd_256x240.png
ui-icons_469bdd_256x240/index.png: ui-icons_469bdd_256x240.png
ui-icons_6da8d5_256x240.png: ui-icons_6da8d5_256x240.png
ui-icons_6da8d5_256x240/index.png: ui-icons_6da8d5_256x240.png
ui-icons_cd0a0a_256x240.png: ui-icons_cd0a0a_256x240.png
ui-icons_cd0a0a_256x240/index.png: ui-icons_cd0a0a_256x240.png
ui-icons_d8e7f3_256x240.png: ui-icons_d8e7f3_256x240.png
ui-icons_d8e7f3_256x240/index.png: ui-icons_d8e7f3_256x240.png
ui-icons_f9bd01_256x240.png: ui-icons_f9bd01_256x240.png
ui-icons_f9bd01_256x240/index.png: ui-icons_f9bd01_256x240.png
application.js: application.js
application/index.js: application.js
application.css: application.css
application/index.css: application.css
fontawesome-webfont.eot: fontawesome-webfont.eot
fontawesome-webfont/index.eot: fontawesome-webfont.eot
fontawesome-webfont.svg: fontawesome-webfont.svg
fontawesome-webfont/index.svg: fontawesome-webfont.svg
fontawesome-webfont.ttf: fontawesome-webfont.ttf
fontawesome-webfont/index.ttf: fontawesome-webfont.ttf
fontawesome-webfont.woff: fontawesome-webfont.woff
fontawesome-webfont/index.woff: fontawesome-webfont.woff
twitter/bootstrap/glyphicons-halflings-white.png: twitter/bootstrap/glyphicons-halflings-white.png
twitter/bootstrap/glyphicons-halflings-white/index.png: twitter/bootstrap/glyphicons-halflings-white.png
twitter/bootstrap/glyphicons-halflings.png: twitter/bootstrap/glyphicons-halflings.png
twitter/bootstrap/glyphicons-halflings/index.png: twitter/bootstrap/glyphicons-halflings.png
loading.gif: loading.gif
loading/index.gif: loading.gif
progressbar.gif: progressbar.gif
progressbar/index.gif: progressbar.gif
rails.png: rails-a3386665c05a2d82f711a4aaa72d247c.png
rails/index.png: rails-a3386665c05a2d82f711a4aaa72d247c.png
ui-bg_flat_0_aaaaaa_40x100.png: ui-bg_flat_0_aaaaaa_40x100-7d1197a52442bc56fcad60d0390f4b32.png
ui-bg_flat_0_aaaaaa_40x100/index.png: ui-bg_flat_0_aaaaaa_40x100-7d1197a52442bc56fcad60d0390f4b32.png
ui-bg_flat_55_fbec88_40x100.png: ui-bg_flat_55_fbec88_40x100-6bd1905222cab173dc4996f12b7a07cb.png
ui-bg_flat_55_fbec88_40x100/index.png: ui-bg_flat_55_fbec88_40x100-6bd1905222cab173dc4996f12b7a07cb.png
ui-bg_glass_75_d0e5f5_1x400.png: ui-bg_glass_75_d0e5f5_1x400-d4e12d9ce6e2b20ae0aadf27c8dcd12c.png
ui-bg_glass_75_d0e5f5_1x400/index.png: ui-bg_glass_75_d0e5f5_1x400-d4e12d9ce6e2b20ae0aadf27c8dcd12c.png
ui-bg_glass_85_dfeffc_1x400.png: ui-bg_glass_85_dfeffc_1x400-d1dabcb9501a4ed8c9bfc1b19c966022.png
ui-bg_glass_85_dfeffc_1x400/index.png: ui-bg_glass_85_dfeffc_1x400-d1dabcb9501a4ed8c9bfc1b19c966022.png
ui-bg_glass_95_fef1ec_1x400.png: ui-bg_glass_95_fef1ec_1x400-ab58fbcd66af992f067fcbc7c6488996.png
ui-bg_glass_95_fef1ec_1x400/index.png: ui-bg_glass_95_fef1ec_1x400-ab58fbcd66af992f067fcbc7c6488996.png
ui-bg_gloss-wave_55_5c9ccc_500x100.png: ui-bg_gloss-wave_55_5c9ccc_500x100-b9ac529234515ff4971dee7e7281c14b.png
ui-bg_gloss-wave_55_5c9ccc_500x100/index.png: ui-bg_gloss-wave_55_5c9ccc_500x100-b9ac529234515ff4971dee7e7281c14b.png
ui-bg_inset-hard_100_f5f8f9_1x100.png: ui-bg_inset-hard_100_f5f8f9_1x100-ad5cffb7206618b1667599d7c6c24e00.png
ui-bg_inset-hard_100_f5f8f9_1x100/index.png: ui-bg_inset-hard_100_f5f8f9_1x100-ad5cffb7206618b1667599d7c6c24e00.png
ui-bg_inset-hard_100_fcfdfd_1x100.png: ui-bg_inset-hard_100_fcfdfd_1x100-9f0c2e70b06a9eaec77d569b25b04d7e.png
ui-bg_inset-hard_100_fcfdfd_1x100/index.png: ui-bg_inset-hard_100_fcfdfd_1x100-9f0c2e70b06a9eaec77d569b25b04d7e.png
ui-icons_217bc0_256x240.png: ui-icons_217bc0_256x240-2f9a30594e6475d5f34e3e43d6447b41.png
ui-icons_217bc0_256x240/index.png: ui-icons_217bc0_256x240-2f9a30594e6475d5f34e3e43d6447b41.png
ui-icons_2e83ff_256x240.png: ui-icons_2e83ff_256x240-2ea4c160a75c1992daa2eeac86255b99.png
ui-icons_2e83ff_256x240/index.png: ui-icons_2e83ff_256x240-2ea4c160a75c1992daa2eeac86255b99.png
ui-icons_469bdd_256x240.png: ui-icons_469bdd_256x240-232cd1e8416c1a5e7bbc316084708d2c.png
ui-icons_469bdd_256x240/index.png: ui-icons_469bdd_256x240-232cd1e8416c1a5e7bbc316084708d2c.png
ui-icons_6da8d5_256x240.png: ui-icons_6da8d5_256x240-d155be4d851213e810cb13fc5e009fbf.png
ui-icons_6da8d5_256x240/index.png: ui-icons_6da8d5_256x240-d155be4d851213e810cb13fc5e009fbf.png
ui-icons_cd0a0a_256x240.png: ui-icons_cd0a0a_256x240-c0c1ec6a8bcf48fec40303e975a4dfa6.png
ui-icons_cd0a0a_256x240/index.png: ui-icons_cd0a0a_256x240-c0c1ec6a8bcf48fec40303e975a4dfa6.png
ui-icons_d8e7f3_256x240.png: ui-icons_d8e7f3_256x240-e5dd5fb46ca349d167fbabdcb57e8f7c.png
ui-icons_d8e7f3_256x240/index.png: ui-icons_d8e7f3_256x240-e5dd5fb46ca349d167fbabdcb57e8f7c.png
ui-icons_f9bd01_256x240.png: ui-icons_f9bd01_256x240-08305efda447dd00f0eaf5e34994bc92.png
ui-icons_f9bd01_256x240/index.png: ui-icons_f9bd01_256x240-08305efda447dd00f0eaf5e34994bc92.png
application.js: application-9016673953cb4aa8c7ea06dc4da2482a.js
application/index.js: application-9016673953cb4aa8c7ea06dc4da2482a.js
application.css: application-35f07b325acce0c59f42ac76f4921a19.css
application/index.css: application-35f07b325acce0c59f42ac76f4921a19.css
fontawesome-webfont.eot: fontawesome-webfont-86a6da438b901860c3a54e21f9098bf8.eot
fontawesome-webfont/index.eot: fontawesome-webfont-86a6da438b901860c3a54e21f9098bf8.eot
fontawesome-webfont.svg: fontawesome-webfont-c3f3594758768fbb43eae746d18b3b50.svg
fontawesome-webfont/index.svg: fontawesome-webfont-c3f3594758768fbb43eae746d18b3b50.svg
fontawesome-webfont.ttf: fontawesome-webfont-89ca9bd89cea7c74302ae94f18d4ec3e.ttf
fontawesome-webfont/index.ttf: fontawesome-webfont-89ca9bd89cea7c74302ae94f18d4ec3e.ttf
fontawesome-webfont.woff: fontawesome-webfont-8255009c90d86ee3458a13f5db9a6ed0.woff
fontawesome-webfont/index.woff: fontawesome-webfont-8255009c90d86ee3458a13f5db9a6ed0.woff
twitter/bootstrap/glyphicons-halflings-white.png: twitter/bootstrap/glyphicons-halflings-white-6cccd17a7aed91dbc0157d343c68c0d9.png
twitter/bootstrap/glyphicons-halflings-white/index.png: twitter/bootstrap/glyphicons-halflings-white-6cccd17a7aed91dbc0157d343c68c0d9.png
twitter/bootstrap/glyphicons-halflings.png: twitter/bootstrap/glyphicons-halflings-2851b489e8c39f8fad44fc10efb99c3e.png
twitter/bootstrap/glyphicons-halflings/index.png: twitter/bootstrap/glyphicons-halflings-2851b489e8c39f8fad44fc10efb99c3e.png
loading.gif: loading-b7ff30d20adcf2b850f420d17048930c.gif
loading/index.gif: loading-b7ff30d20adcf2b850f420d17048930c.gif
progressbar.gif: progressbar-bc538af0ba6ff3d792217a96651cd58a.gif
progressbar/index.gif: progressbar-bc538af0ba6ff3d792217a96651cd58a.gif