Added paper_trail, also starting work on the scheduler
This commit is contained in:
parent
90b30db9e8
commit
f86232bedf
35 changed files with 523 additions and 32137 deletions
2
Gemfile
2
Gemfile
|
|
@ -30,8 +30,10 @@ gem "haml"
|
||||||
gem 'bcrypt-ruby', '~> 3.0.0'
|
gem 'bcrypt-ruby', '~> 3.0.0'
|
||||||
gem 'node'
|
gem 'node'
|
||||||
gem 'twitter-bootstrap-rails'
|
gem 'twitter-bootstrap-rails'
|
||||||
|
gem 'paper_trail'
|
||||||
gem 'formtastic-bootstrap'
|
gem 'formtastic-bootstrap'
|
||||||
gem 'cocoon'
|
gem 'cocoon'
|
||||||
|
gem 'therubyracer'
|
||||||
gem 'transitions', :require => ["transitions", "active_record/transitions"]
|
gem 'transitions', :require => ["transitions", "active_record/transitions"]
|
||||||
gem 'acts_as_commentable_with_threading'
|
gem 'acts_as_commentable_with_threading'
|
||||||
gem 'prawn'
|
gem 'prawn'
|
||||||
|
|
|
||||||
10
Gemfile.lock
10
Gemfile.lock
|
|
@ -75,6 +75,7 @@ GEM
|
||||||
thor (>= 0.14, < 2.0)
|
thor (>= 0.14, < 2.0)
|
||||||
jquery_datepicker (0.4)
|
jquery_datepicker (0.4)
|
||||||
json (1.7.5)
|
json (1.7.5)
|
||||||
|
libv8 (3.11.8.11)
|
||||||
mail (2.4.4)
|
mail (2.4.4)
|
||||||
i18n (>= 0.4.0)
|
i18n (>= 0.4.0)
|
||||||
mime-types (~> 1.16)
|
mime-types (~> 1.16)
|
||||||
|
|
@ -84,6 +85,9 @@ GEM
|
||||||
node (0.0.2)
|
node (0.0.2)
|
||||||
eventmachine
|
eventmachine
|
||||||
orm_adapter (0.4.0)
|
orm_adapter (0.4.0)
|
||||||
|
paper_trail (2.7.0)
|
||||||
|
activerecord (~> 3.0)
|
||||||
|
railties (~> 3.0)
|
||||||
paperclip (3.4.0)
|
paperclip (3.4.0)
|
||||||
activemodel (>= 3.0.0)
|
activemodel (>= 3.0.0)
|
||||||
activerecord (>= 3.0.0)
|
activerecord (>= 3.0.0)
|
||||||
|
|
@ -126,6 +130,7 @@ GEM
|
||||||
rake (10.0.3)
|
rake (10.0.3)
|
||||||
rdoc (3.12)
|
rdoc (3.12)
|
||||||
json (~> 1.4)
|
json (~> 1.4)
|
||||||
|
ref (1.0.2)
|
||||||
ruby-rc4 (0.1.5)
|
ruby-rc4 (0.1.5)
|
||||||
sass (3.2.4)
|
sass (3.2.4)
|
||||||
sass-rails (3.2.5)
|
sass-rails (3.2.5)
|
||||||
|
|
@ -138,6 +143,9 @@ GEM
|
||||||
rack (~> 1.0)
|
rack (~> 1.0)
|
||||||
tilt (~> 1.1, != 1.3.0)
|
tilt (~> 1.1, != 1.3.0)
|
||||||
sqlite3 (1.3.6)
|
sqlite3 (1.3.6)
|
||||||
|
therubyracer (0.11.1)
|
||||||
|
libv8 (~> 3.11.8.7)
|
||||||
|
ref
|
||||||
thor (0.16.0)
|
thor (0.16.0)
|
||||||
tilt (1.3.3)
|
tilt (1.3.3)
|
||||||
transitions (0.1.4)
|
transitions (0.1.4)
|
||||||
|
|
@ -172,12 +180,14 @@ DEPENDENCIES
|
||||||
jquery-rails
|
jquery-rails
|
||||||
jquery_datepicker
|
jquery_datepicker
|
||||||
node
|
node
|
||||||
|
paper_trail
|
||||||
paperclip (~> 3.0)
|
paperclip (~> 3.0)
|
||||||
prawn
|
prawn
|
||||||
prawn_rails
|
prawn_rails
|
||||||
rails (= 3.2.9)
|
rails (= 3.2.9)
|
||||||
sass-rails (~> 3.2.3)
|
sass-rails (~> 3.2.3)
|
||||||
sqlite3
|
sqlite3
|
||||||
|
therubyracer
|
||||||
transitions
|
transitions
|
||||||
twitter-bootstrap-rails
|
twitter-bootstrap-rails
|
||||||
uglifier (>= 1.0.3)
|
uglifier (>= 1.0.3)
|
||||||
|
|
|
||||||
|
|
@ -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-link").click(function(){
|
||||||
$(".comment-reply", $(this).parent()).toggle();
|
$(".comment-reply", $(this).parent()).toggle();
|
||||||
return false;
|
return false;
|
||||||
|
|
|
||||||
|
|
@ -2,6 +2,7 @@
|
||||||
*= require formtastic-bootstrap
|
*= require formtastic-bootstrap
|
||||||
*= require bootstrap_and_overrides
|
*= require bootstrap_and_overrides
|
||||||
*= require osem
|
*= require osem
|
||||||
|
*= require schedule
|
||||||
*= require jquery-ui-1.9.2.custom
|
*= require jquery-ui-1.9.2.custom
|
||||||
*= require jquery.fileupload-ui
|
*= require jquery.fileupload-ui
|
||||||
*/
|
*/
|
||||||
|
|
|
||||||
|
|
@ -100,3 +100,4 @@ textarea {
|
||||||
position:relative;
|
position:relative;
|
||||||
top:1px;
|
top:1px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
45
app/assets/stylesheets/schedule.css
Normal file
45
app/assets/stylesheets/schedule.css
Normal 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;
|
||||||
|
}
|
||||||
13
app/controllers/admin/schedule_controller.rb
Normal file
13
app/controllers/admin/schedule_controller.rb
Normal 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
|
||||||
|
|
@ -71,7 +71,8 @@ class EventAttachmentsController < ApplicationController
|
||||||
end
|
end
|
||||||
|
|
||||||
def update
|
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|
|
respond_to do |format|
|
||||||
if @upload.update_attributes(params[:upload])
|
if @upload.update_attributes(params[:upload])
|
||||||
|
|
|
||||||
|
|
@ -25,7 +25,7 @@ class ProposalController < ApplicationController
|
||||||
@event = @person.events.find_by_id(params[:id])
|
@event = @person.events.find_by_id(params[:id])
|
||||||
@attachments = @event.event_attachments
|
@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.')
|
redirect_to(conference_proposal_index_path(:conference_id => @conference.short_title), :alert => 'Invalid proposal.')
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,9 @@
|
||||||
class Conference < ActiveRecord::Base
|
class Conference < ActiveRecord::Base
|
||||||
attr_accessible :title, :short_title, :social_tag, :contact_email, :timezone, :html_export_path,
|
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,
|
:start_date, :end_date, :rooms_attributes, :tracks_attributes,
|
||||||
:event_types_attributes
|
:event_types_attributes, :registration_start_date, :registration_end_date
|
||||||
|
|
||||||
|
has_paper_trail
|
||||||
|
|
||||||
has_one :call_for_papers, :dependent => :destroy
|
has_one :call_for_papers, :dependent => :destroy
|
||||||
has_many :events, :dependent => :destroy
|
has_many :events, :dependent => :destroy
|
||||||
|
|
@ -61,6 +63,15 @@ class Conference < ActiveRecord::Base
|
||||||
end
|
end
|
||||||
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?
|
def cfp_open?
|
||||||
today = Date.current
|
today = Date.current
|
||||||
cfp = self.call_for_papers
|
cfp = self.call_for_papers
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
class Event < ActiveRecord::Base
|
class Event < ActiveRecord::Base
|
||||||
include ActiveRecord::Transitions
|
include ActiveRecord::Transitions
|
||||||
|
has_paper_trail
|
||||||
attr_accessible :title, :subtitle, :abstract, :description, :event_type_id, :people_attributes, :person,
|
attr_accessible :title, :subtitle, :abstract, :description, :event_type_id, :people_attributes, :person,
|
||||||
:proposal_additional_speakers
|
:proposal_additional_speakers
|
||||||
acts_as_commentable
|
acts_as_commentable
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,6 @@
|
||||||
class EventAttachment < ActiveRecord::Base
|
class EventAttachment < ActiveRecord::Base
|
||||||
|
has_paper_trail
|
||||||
|
|
||||||
belongs_to :event
|
belongs_to :event
|
||||||
scope :public, where(:public => true)
|
scope :public, where(:public => true)
|
||||||
attr_accessible :public, :attachment, :event_id, :title
|
attr_accessible :public, :attachment, :event_id, :title
|
||||||
|
|
|
||||||
|
|
@ -32,8 +32,9 @@ class Person < ActiveRecord::Base
|
||||||
:person_id => self.id).count
|
:person_id => self.id).count
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
def proposals conference
|
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
|
end
|
||||||
|
|
||||||
def proposal_count conference
|
def proposal_count conference
|
||||||
|
|
@ -48,6 +49,10 @@ class Person < ActiveRecord::Base
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def self.find_person_by_user_id user_id
|
||||||
|
Person.where(:user_id => user_id).first
|
||||||
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
def biography_limit
|
def biography_limit
|
||||||
if self.biography.split.size > 150
|
if self.biography.split.size > 150
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,7 @@
|
||||||
= 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 :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 :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"}
|
= f.action :submit, :as => :button, :button_html => {:class => "btn btn-primary"}
|
||||||
112
app/views/admin/events/_proposal.html.haml
Normal file
112
app/views/admin/events/_proposal.html.haml
Normal 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)
|
||||||
|
|
@ -1,112 +1,38 @@
|
||||||
.row-fluid
|
.tabbable
|
||||||
.span10
|
%ul.nav.nav-tabs
|
||||||
%h3
|
%li.active
|
||||||
= @event.title
|
= link_to "Proposal", "#proposal-content", "data-toggle"=>"tab"
|
||||||
%i= @event.subtitle
|
%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)
|
|
||||||
4
app/views/admin/schedule/_day_tab.html.haml
Normal file
4
app/views/admin/schedule/_day_tab.html.haml
Normal file
|
|
@ -0,0 +1,4 @@
|
||||||
|
- @tracks.each do |track|
|
||||||
|
.schedule-track-column-header
|
||||||
|
= track.name
|
||||||
|
.schedule-track-column
|
||||||
43
app/views/admin/schedule/show.html.haml
Normal file
43
app/views/admin/schedule/show.html.haml
Normal 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
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
@ -15,16 +15,19 @@
|
||||||
= conference.venue.address
|
= conference.venue.address
|
||||||
.row-fluid{:style => "padding-top: 30px;"}
|
.row-fluid{:style => "padding-top: 30px;"}
|
||||||
.span4
|
.span4
|
||||||
- if conference.user_registered?(current_user)
|
- if conference.registration_open?
|
||||||
= link_to "Modify Registration", register_conference_path(conference.short_title), :class => "mainbutton center-text"
|
- if conference.user_registered?(current_user)
|
||||||
%br
|
= link_to "Modify Registration", register_conference_path(conference.short_title), :class => "mainbutton center-text"
|
||||||
%i.icon-thumbs-up You're attending!
|
%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
|
- else
|
||||||
= link_to "Register", register_conference_path(conference.short_title), :class => "mainbutton center-text"
|
%b Registration is closed.
|
||||||
%br
|
|
||||||
- if !current_user.nil?
|
|
||||||
%i.icon-thumbs-down
|
|
||||||
You haven't registered yet!
|
|
||||||
.span4.offset4.pull-right
|
.span4.offset4.pull-right
|
||||||
- if !current_user.nil? && current_user.person.proposal_count(conference) > 0
|
- 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"
|
= link_to "View My Proposals", conference_proposal_index_path(conference.short_title), :class => "mainbutton center-text"
|
||||||
|
|
|
||||||
|
|
@ -16,6 +16,12 @@
|
||||||
- else
|
- else
|
||||||
%li
|
%li
|
||||||
= link_to "Events", admin_conference_events_path(@conference.short_title)
|
= 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
|
%ul.nav.secondary-nav.pull-right
|
||||||
- if !@conference.nil?
|
- if !@conference.nil?
|
||||||
%li.dropdown
|
%li.dropdown
|
||||||
|
|
|
||||||
22
app/views/layouts/schedule.html.haml
Normal file
22
app/views/layouts/schedule.html.haml
Normal 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
|
||||||
|
|
@ -6,40 +6,7 @@
|
||||||
= link_to "Attachments", "#attachment-content", "data-toggle"=>"tab"
|
= link_to "Attachments", "#attachment-content", "data-toggle"=>"tab"
|
||||||
.tab-content
|
.tab-content
|
||||||
#proposal-content.tab-pane.active
|
#proposal-content.tab-pane.active
|
||||||
.span12
|
= render 'proposal_form'
|
||||||
= 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"}
|
|
||||||
#attachment-content.tab-pane
|
#attachment-content.tab-pane
|
||||||
.span12
|
.span12
|
||||||
= form_for EventAttachment.new, :url => conference_proposal_event_attachment_index_path(@conference.short_title, @event),
|
= form_for EventAttachment.new, :url => conference_proposal_event_attachment_index_path(@conference.short_title, @event),
|
||||||
|
|
|
||||||
34
app/views/proposal/_proposal_form.html.haml
Normal file
34
app/views/proposal/_proposal_form.html.haml
Normal 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"}
|
||||||
|
|
@ -13,6 +13,7 @@
|
||||||
.span10
|
.span10
|
||||||
= event.title
|
= event.title
|
||||||
.pull-right
|
.pull-right
|
||||||
= link_to "Edit", edit_conference_proposal_path(@conference.short_title, event.id), :class => "btn btn-mini btn-primary"
|
- if @conference.cfp_open?
|
||||||
= link_to "Withdraw", conference_proposal_path(@conference.short_title, event.id), :method => :delete,
|
= link_to "Edit", edit_conference_proposal_path(@conference.short_title, event.id), :class => "btn btn-mini btn-primary"
|
||||||
:confirm => "Are you sure you want to withdraw this proposal?", :class => "btn btn-mini btn-danger"
|
= 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"
|
||||||
|
|
|
||||||
|
|
@ -1,2 +1,2 @@
|
||||||
.container
|
.container
|
||||||
= render 'form'
|
= render 'proposal_form'
|
||||||
|
|
|
||||||
|
|
@ -7,6 +7,8 @@ Osem::Application.routes.draw do
|
||||||
resources :people
|
resources :people
|
||||||
|
|
||||||
resources :conference do
|
resources :conference do
|
||||||
|
get "/schedule" => "schedule#show"
|
||||||
|
put "/schedule" => "schedule#update"
|
||||||
get "/registrations" => "registrations#show"
|
get "/registrations" => "registrations#show"
|
||||||
get "/venue" => "venue#show", :as => "venue_info"
|
get "/venue" => "venue#show", :as => "venue_info"
|
||||||
put "/venue" => "venue#update", :as => "venue_update"
|
put "/venue" => "venue#update", :as => "venue_update"
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
@ -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
|
||||||
19
db/migrate/20130107114930_create_versions.rb
Normal file
19
db/migrate/20130107114930_create_versions.rb
Normal 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
|
||||||
45
db/schema.rb
45
db/schema.rb
|
|
@ -11,7 +11,7 @@
|
||||||
#
|
#
|
||||||
# It's strongly recommended to check this file into your version control system.
|
# 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|
|
create_table "call_for_papers", :force => true do |t|
|
||||||
t.date "start_date", :null => false
|
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"
|
add_index "comments", ["user_id"], :name => "index_comments_on_user_id"
|
||||||
|
|
||||||
create_table "conferences", :force => true do |t|
|
create_table "conferences", :force => true do |t|
|
||||||
t.string "guid", :null => false
|
t.string "guid", :null => false
|
||||||
t.string "title", :null => false
|
t.string "title", :null => false
|
||||||
t.string "short_title", :null => false
|
t.string "short_title", :null => false
|
||||||
t.string "social_tag"
|
t.string "social_tag"
|
||||||
t.string "contact_email", :null => false
|
t.string "contact_email", :null => false
|
||||||
t.string "timezone", :null => false
|
t.string "timezone", :null => false
|
||||||
t.string "html_export_path"
|
t.string "html_export_path"
|
||||||
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.boolean "cfp_open", :default => false
|
|
||||||
t.boolean "registration_open", :default => false
|
|
||||||
t.integer "venue_id"
|
t.integer "venue_id"
|
||||||
t.datetime "created_at", :null => false
|
t.datetime "created_at", :null => false
|
||||||
t.datetime "updated_at", :null => false
|
t.datetime "updated_at", :null => false
|
||||||
|
t.date "registration_start_date"
|
||||||
|
t.date "registration_end_date"
|
||||||
end
|
end
|
||||||
|
|
||||||
create_table "event_attachments", :force => true do |t|
|
create_table "event_attachments", :force => true do |t|
|
||||||
t.integer "event_id"
|
t.integer "event_id"
|
||||||
t.string "title", :null => false
|
t.string "title", :null => false
|
||||||
t.string "attachment_file_name"
|
t.string "attachment_file_name"
|
||||||
t.string "attachment_content_type"
|
t.string "attachment_content_type"
|
||||||
t.integer "attachment_file_size"
|
t.integer "attachment_file_size"
|
||||||
t.datetime "attachment_updated_at"
|
t.datetime "attachment_updated_at"
|
||||||
t.datetime "created_at", :null => false
|
t.boolean "public", :default => true
|
||||||
t.datetime "updated_at", :null => false
|
t.datetime "created_at", :null => false
|
||||||
|
t.datetime "updated_at", :null => false
|
||||||
end
|
end
|
||||||
|
|
||||||
create_table "event_people", :force => true do |t|
|
create_table "event_people", :force => true do |t|
|
||||||
|
|
@ -103,11 +104,11 @@ ActiveRecord::Schema.define(:version => 20130105115603) do
|
||||||
t.string "logo_content_type"
|
t.string "logo_content_type"
|
||||||
t.integer "logo_file_size"
|
t.integer "logo_file_size"
|
||||||
t.datetime "logo_updated_at"
|
t.datetime "logo_updated_at"
|
||||||
|
t.text "proposal_additional_speakers"
|
||||||
t.integer "track_id"
|
t.integer "track_id"
|
||||||
t.integer "room_id"
|
t.integer "room_id"
|
||||||
t.datetime "created_at", :null => false
|
t.datetime "created_at", :null => false
|
||||||
t.datetime "updated_at", :null => false
|
t.datetime "updated_at", :null => false
|
||||||
t.text "proposal_additional_speakers"
|
|
||||||
end
|
end
|
||||||
|
|
||||||
create_table "people", :force => true do |t|
|
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.boolean "using_affiliated_lodging", :default => true
|
||||||
t.date "arrival"
|
t.date "arrival"
|
||||||
t.date "departure"
|
t.date "departure"
|
||||||
t.text "additional_speakers"
|
|
||||||
t.datetime "created_at", :null => false
|
t.datetime "created_at", :null => false
|
||||||
t.datetime "updated_at", :null => false
|
t.datetime "updated_at", :null => false
|
||||||
end
|
end
|
||||||
|
|
@ -205,4 +205,15 @@ ActiveRecord::Schema.define(:version => 20130105115603) do
|
||||||
t.datetime "updated_at", :null => false
|
t.datetime "updated_at", :null => false
|
||||||
end
|
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
|
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.
|
|
@ -1,53 +1,53 @@
|
||||||
---
|
---
|
||||||
rails.png: rails.png
|
rails.png: rails-a3386665c05a2d82f711a4aaa72d247c.png
|
||||||
rails/index.png: rails.png
|
rails/index.png: rails-a3386665c05a2d82f711a4aaa72d247c.png
|
||||||
ui-bg_flat_0_aaaaaa_40x100.png: ui-bg_flat_0_aaaaaa_40x100.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.png
|
ui-icons_217bc0_256x240.png: ui-icons_217bc0_256x240-2f9a30594e6475d5f34e3e43d6447b41.png
|
||||||
ui-icons_217bc0_256x240/index.png: ui-icons_217bc0_256x240.png
|
ui-icons_217bc0_256x240/index.png: ui-icons_217bc0_256x240-2f9a30594e6475d5f34e3e43d6447b41.png
|
||||||
ui-icons_2e83ff_256x240.png: ui-icons_2e83ff_256x240.png
|
ui-icons_2e83ff_256x240.png: ui-icons_2e83ff_256x240-2ea4c160a75c1992daa2eeac86255b99.png
|
||||||
ui-icons_2e83ff_256x240/index.png: ui-icons_2e83ff_256x240.png
|
ui-icons_2e83ff_256x240/index.png: ui-icons_2e83ff_256x240-2ea4c160a75c1992daa2eeac86255b99.png
|
||||||
ui-icons_469bdd_256x240.png: ui-icons_469bdd_256x240.png
|
ui-icons_469bdd_256x240.png: ui-icons_469bdd_256x240-232cd1e8416c1a5e7bbc316084708d2c.png
|
||||||
ui-icons_469bdd_256x240/index.png: ui-icons_469bdd_256x240.png
|
ui-icons_469bdd_256x240/index.png: ui-icons_469bdd_256x240-232cd1e8416c1a5e7bbc316084708d2c.png
|
||||||
ui-icons_6da8d5_256x240.png: ui-icons_6da8d5_256x240.png
|
ui-icons_6da8d5_256x240.png: ui-icons_6da8d5_256x240-d155be4d851213e810cb13fc5e009fbf.png
|
||||||
ui-icons_6da8d5_256x240/index.png: ui-icons_6da8d5_256x240.png
|
ui-icons_6da8d5_256x240/index.png: ui-icons_6da8d5_256x240-d155be4d851213e810cb13fc5e009fbf.png
|
||||||
ui-icons_cd0a0a_256x240.png: ui-icons_cd0a0a_256x240.png
|
ui-icons_cd0a0a_256x240.png: ui-icons_cd0a0a_256x240-c0c1ec6a8bcf48fec40303e975a4dfa6.png
|
||||||
ui-icons_cd0a0a_256x240/index.png: ui-icons_cd0a0a_256x240.png
|
ui-icons_cd0a0a_256x240/index.png: ui-icons_cd0a0a_256x240-c0c1ec6a8bcf48fec40303e975a4dfa6.png
|
||||||
ui-icons_d8e7f3_256x240.png: ui-icons_d8e7f3_256x240.png
|
ui-icons_d8e7f3_256x240.png: ui-icons_d8e7f3_256x240-e5dd5fb46ca349d167fbabdcb57e8f7c.png
|
||||||
ui-icons_d8e7f3_256x240/index.png: ui-icons_d8e7f3_256x240.png
|
ui-icons_d8e7f3_256x240/index.png: ui-icons_d8e7f3_256x240-e5dd5fb46ca349d167fbabdcb57e8f7c.png
|
||||||
ui-icons_f9bd01_256x240.png: ui-icons_f9bd01_256x240.png
|
ui-icons_f9bd01_256x240.png: ui-icons_f9bd01_256x240-08305efda447dd00f0eaf5e34994bc92.png
|
||||||
ui-icons_f9bd01_256x240/index.png: ui-icons_f9bd01_256x240.png
|
ui-icons_f9bd01_256x240/index.png: ui-icons_f9bd01_256x240-08305efda447dd00f0eaf5e34994bc92.png
|
||||||
application.js: application.js
|
application.js: application-9016673953cb4aa8c7ea06dc4da2482a.js
|
||||||
application/index.js: application.js
|
application/index.js: application-9016673953cb4aa8c7ea06dc4da2482a.js
|
||||||
application.css: application.css
|
application.css: application-35f07b325acce0c59f42ac76f4921a19.css
|
||||||
application/index.css: application.css
|
application/index.css: application-35f07b325acce0c59f42ac76f4921a19.css
|
||||||
fontawesome-webfont.eot: fontawesome-webfont.eot
|
fontawesome-webfont.eot: fontawesome-webfont-86a6da438b901860c3a54e21f9098bf8.eot
|
||||||
fontawesome-webfont/index.eot: fontawesome-webfont.eot
|
fontawesome-webfont/index.eot: fontawesome-webfont-86a6da438b901860c3a54e21f9098bf8.eot
|
||||||
fontawesome-webfont.svg: fontawesome-webfont.svg
|
fontawesome-webfont.svg: fontawesome-webfont-c3f3594758768fbb43eae746d18b3b50.svg
|
||||||
fontawesome-webfont/index.svg: fontawesome-webfont.svg
|
fontawesome-webfont/index.svg: fontawesome-webfont-c3f3594758768fbb43eae746d18b3b50.svg
|
||||||
fontawesome-webfont.ttf: fontawesome-webfont.ttf
|
fontawesome-webfont.ttf: fontawesome-webfont-89ca9bd89cea7c74302ae94f18d4ec3e.ttf
|
||||||
fontawesome-webfont/index.ttf: fontawesome-webfont.ttf
|
fontawesome-webfont/index.ttf: fontawesome-webfont-89ca9bd89cea7c74302ae94f18d4ec3e.ttf
|
||||||
fontawesome-webfont.woff: fontawesome-webfont.woff
|
fontawesome-webfont.woff: fontawesome-webfont-8255009c90d86ee3458a13f5db9a6ed0.woff
|
||||||
fontawesome-webfont/index.woff: fontawesome-webfont.woff
|
fontawesome-webfont/index.woff: fontawesome-webfont-8255009c90d86ee3458a13f5db9a6ed0.woff
|
||||||
twitter/bootstrap/glyphicons-halflings-white.png: twitter/bootstrap/glyphicons-halflings-white.png
|
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.png
|
twitter/bootstrap/glyphicons-halflings-white/index.png: twitter/bootstrap/glyphicons-halflings-white-6cccd17a7aed91dbc0157d343c68c0d9.png
|
||||||
twitter/bootstrap/glyphicons-halflings.png: twitter/bootstrap/glyphicons-halflings.png
|
twitter/bootstrap/glyphicons-halflings.png: twitter/bootstrap/glyphicons-halflings-2851b489e8c39f8fad44fc10efb99c3e.png
|
||||||
twitter/bootstrap/glyphicons-halflings/index.png: twitter/bootstrap/glyphicons-halflings.png
|
twitter/bootstrap/glyphicons-halflings/index.png: twitter/bootstrap/glyphicons-halflings-2851b489e8c39f8fad44fc10efb99c3e.png
|
||||||
loading.gif: loading.gif
|
loading.gif: loading-b7ff30d20adcf2b850f420d17048930c.gif
|
||||||
loading/index.gif: loading.gif
|
loading/index.gif: loading-b7ff30d20adcf2b850f420d17048930c.gif
|
||||||
progressbar.gif: progressbar.gif
|
progressbar.gif: progressbar-bc538af0ba6ff3d792217a96651cd58a.gif
|
||||||
progressbar/index.gif: progressbar.gif
|
progressbar/index.gif: progressbar-bc538af0ba6ff3d792217a96651cd58a.gif
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue