From b9ee475db5e79ff9e32c69cca5970591e944d248 Mon Sep 17 00:00:00 2001 From: Seth Call Date: Mon, 10 Mar 2014 06:31:20 +0000 Subject: [PATCH] * working on event page --- admin/app/admin/event_session.rb | 3 + db/up/events.sql | 19 +++- ruby/lib/jam_ruby.rb | 1 + ruby/lib/jam_ruby/models/band.rb | 3 + ruby/lib/jam_ruby/models/event.rb | 8 +- ruby/lib/jam_ruby/models/event_session.rb | 29 ++++++ ruby/lib/jam_ruby/models/user.rb | 3 + ruby/spec/factories.rb | 6 +- .../jam_ruby/models/event_session_spec.rb | 26 +++++ ruby/spec/jam_ruby/models/event_spec.rb | 11 ++- .../images/content/logo_centurylink.png | Bin 0 -> 6116 bytes .../stylesheets/client/jamkazam.css.scss | 7 ++ web/app/controllers/events_controller.rb | 2 +- web/app/helpers/avatar_helper.rb | 8 +- web/app/helpers/event_session_helper.rb | 91 ++++++++++++++++++ web/app/views/events/_event_session.html.haml | 19 ++++ .../{show.html.haml => event.html.haml} | 7 +- 17 files changed, 226 insertions(+), 17 deletions(-) create mode 100644 admin/app/admin/event_session.rb create mode 100644 ruby/lib/jam_ruby/models/event_session.rb create mode 100644 ruby/spec/jam_ruby/models/event_session_spec.rb create mode 100644 web/app/assets/images/content/logo_centurylink.png create mode 100644 web/app/helpers/event_session_helper.rb create mode 100644 web/app/views/events/_event_session.html.haml rename web/app/views/events/{show.html.haml => event.html.haml} (84%) diff --git a/admin/app/admin/event_session.rb b/admin/app/admin/event_session.rb new file mode 100644 index 000000000..df540716d --- /dev/null +++ b/admin/app/admin/event_session.rb @@ -0,0 +1,3 @@ +ActiveAdmin.register JamRuby::EventSession, :as => 'Event Session' do + menu :parent => 'Events' +end diff --git a/db/up/events.sql b/db/up/events.sql index 6c0feb664..b0f2d2458 100644 --- a/db/up/events.sql +++ b/db/up/events.sql @@ -1,10 +1,25 @@ CREATE TABLE events ( id VARCHAR(64) PRIMARY KEY DEFAULT uuid_generate_v4(), slug VARCHAR(512) NOT NULL UNIQUE, - starts_at TIMESTAMP, - ends_at TIMESTAMP, + event_day date, title TEXT, description TEXT, + show_sponser BOOLEAN NOT NULL DEFAULT false, + created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, + updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP +); + +CREATE TABLE event_sessions ( + id VARCHAR(64) PRIMARY KEY DEFAULT uuid_generate_v4(), + starts_at TIMESTAMP, + ends_at TIMESTAMP, + pinned_state VARCHAR(255), + img_url VARCHAR(1024), + img_width INTEGER, + img_height INTEGER, + event_id VARCHAR(64) REFERENCES events(id) ON DELETE CASCADE, + user_id VARCHAR(64) REFERENCES users(id) ON DELETE SET NULL, + band_id VARCHAR(64) REFERENCES bands(id) ON DELETE SET NULL, created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ); \ No newline at end of file diff --git a/ruby/lib/jam_ruby.rb b/ruby/lib/jam_ruby.rb index 6c65f40d5..0353c58a0 100755 --- a/ruby/lib/jam_ruby.rb +++ b/ruby/lib/jam_ruby.rb @@ -100,6 +100,7 @@ require "jam_ruby/models/crash_dump" require "jam_ruby/models/isp_score_batch" require "jam_ruby/models/promotional" require "jam_ruby/models/event" +require "jam_ruby/models/event_session" require "jam_ruby/models/icecast_admin_authentication" require "jam_ruby/models/icecast_directory" require "jam_ruby/models/icecast_limit" diff --git a/ruby/lib/jam_ruby/models/band.rb b/ruby/lib/jam_ruby/models/band.rb index 3115e8e23..bce468fd9 100644 --- a/ruby/lib/jam_ruby/models/band.rb +++ b/ruby/lib/jam_ruby/models/band.rb @@ -47,6 +47,9 @@ module JamRuby has_many :music_sessions, :class_name => "JamRuby::MusicSession", :foreign_key => "band_id" has_many :music_session_history, :class_name => "JamRuby::MusicSessionHistory", :foreign_key => "band_id", :inverse_of => :band + # events + has_many :event_sessions, :class_name => "JamRuby::EventSession" + include Geokit::ActsAsMappable::Glue unless defined?(acts_as_mappable) acts_as_mappable diff --git a/ruby/lib/jam_ruby/models/event.rb b/ruby/lib/jam_ruby/models/event.rb index 998e1d42d..a5f3e1f02 100644 --- a/ruby/lib/jam_ruby/models/event.rb +++ b/ruby/lib/jam_ruby/models/event.rb @@ -1,11 +1,9 @@ class JamRuby::Event < ActiveRecord::Base - attr_accessible :slug, :starts_at, :ends_at, - :'starts_at(1i)', :'starts_at(2i)', :'starts_at(3i)', :'starts_at(4i)', :'starts_at(5i)', - :'ends_at(1i)', :'ends_at(2i)', :'ends_at(3i)', :'ends_at(4i)', :'ends_at(5i)', - :title, - :description, as: :admin + attr_accessible :slug, :event_day, :title, :description, :show_sponser, as: :admin validates :slug, uniqueness: true, presence: true + validates :show_sponser, :inclusion => {:in => [true, false]} + has_many :event_sessions, class_name: 'JamRuby::EventSession' end diff --git a/ruby/lib/jam_ruby/models/event_session.rb b/ruby/lib/jam_ruby/models/event_session.rb new file mode 100644 index 000000000..21a093c17 --- /dev/null +++ b/ruby/lib/jam_ruby/models/event_session.rb @@ -0,0 +1,29 @@ +class JamRuby::EventSession < ActiveRecord::Base + + attr_accessible :event_id, :user_id, :band_id, :starts_at, :ends_at, :pinned_state, :position, :img_url, :img_width, :img_height, as: :admin + + belongs_to :user, class_name: 'JamRuby::User' + belongs_to :band, class_name: 'JamRuby::Band' + belongs_to :event + + + validates :event, presence: true + validates :pinned_state, :inclusion => {:in => [nil, :not_started, :over]} + validate :one_of_user_band + + before_validation :sanitize_active_admin + + def sanitize_active_admin + puts self.inspect + self.img_url = nil if self.img_url == '' + self.user_id = nil if self.user_id == '' + self.band_id = nil if self.band_id == '' + self.pinned_state = nil if self.pinned_state == '' + end + + def one_of_user_band + if band && user + errors.add(:user, 'specify band, or user. not both') + end + end +end diff --git a/ruby/lib/jam_ruby/models/user.rb b/ruby/lib/jam_ruby/models/user.rb index a619f864a..17e4ed46b 100644 --- a/ruby/lib/jam_ruby/models/user.rb +++ b/ruby/lib/jam_ruby/models/user.rb @@ -94,6 +94,9 @@ module JamRuby # crash dumps has_many :crash_dumps, :foreign_key => "user_id", :class_name => "JamRuby::CrashDump" + # events + has_many :event_sessions, :class_name => "JamRuby::EventSession" + # This causes the authenticate method to be generated (among other stuff) #has_secure_password diff --git a/ruby/spec/factories.rb b/ruby/spec/factories.rb index 24866a617..0db11878c 100644 --- a/ruby/spec/factories.rb +++ b/ruby/spec/factories.rb @@ -420,6 +420,8 @@ FactoryGirl.define do sequence(:slug) { |n| "slug-#{n}" } title 'event title' description 'event description' - end - end + + factory :event_session, :class => JamRuby::EventSession do + end +end diff --git a/ruby/spec/jam_ruby/models/event_session_spec.rb b/ruby/spec/jam_ruby/models/event_session_spec.rb new file mode 100644 index 000000000..947370e86 --- /dev/null +++ b/ruby/spec/jam_ruby/models/event_session_spec.rb @@ -0,0 +1,26 @@ +require 'spec_helper' + +describe EventSession do + + it "should be creatable" do + event = FactoryGirl.create(:event) + event_session = FactoryGirl.create(:event_session, event: event) + end + + it "requires a parent event" do + event_session = FactoryGirl.build(:event_session) + event_session.save.should be_false + event_session.errors[:event].should == ["can't be blank"] + end + + it "can't specify both band and user" do + user = FactoryGirl.create(:user) + band = FactoryGirl.create(:band) + event = FactoryGirl.create(:event) + event_session = FactoryGirl.build(:event_session, event: event, user: user, band:band) + event_session.save.should be_false + event_session.errors[:user].should == ["specify band, or user. not both"] + end + +end + diff --git a/ruby/spec/jam_ruby/models/event_spec.rb b/ruby/spec/jam_ruby/models/event_spec.rb index b888ab7e0..93a8629a2 100644 --- a/ruby/spec/jam_ruby/models/event_spec.rb +++ b/ruby/spec/jam_ruby/models/event_spec.rb @@ -1,8 +1,6 @@ require 'spec_helper' describe Event do - before do - end it "should be creatable" do FactoryGirl.create(:event) @@ -15,4 +13,13 @@ describe Event do dup.errors[:slug].should == ["has already been taken"] end + it "can have associated event session, then destroy it by destroying event" do + event = FactoryGirl.create(:event) + event_session = FactoryGirl.create(:event_session, event: event) + event.reload + event.event_sessions.length.should == 1 + event_session.event.should == event + event.destroy + EventSession.find_by_id(event_session.id).should be_nil + end end diff --git a/web/app/assets/images/content/logo_centurylink.png b/web/app/assets/images/content/logo_centurylink.png new file mode 100644 index 0000000000000000000000000000000000000000..57f2deb031a16d2841d595faa24dc9905e1e53dd GIT binary patch literal 6116 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 "web" + render 'event', :layout => "web" end end \ No newline at end of file diff --git a/web/app/helpers/avatar_helper.rb b/web/app/helpers/avatar_helper.rb index 13107ca17..ce7a7632b 100644 --- a/web/app/helpers/avatar_helper.rb +++ b/web/app/helpers/avatar_helper.rb @@ -22,11 +22,15 @@ module AvatarHelper end end - def resolve_avatarables(*avatarables) + def resolve_avatarables(*avatarables, allow_none: false) avatarables.each do |avatarable| return resolve_avatarable(avatarable) if avatarable end - raise "at least one avatarable must be specified" + if allow_none + nil + else + raise "at least one avatarable must be specified" + end end end \ No newline at end of file diff --git a/web/app/helpers/event_session_helper.rb b/web/app/helpers/event_session_helper.rb new file mode 100644 index 000000000..89402bd2c --- /dev/null +++ b/web/app/helpers/event_session_helper.rb @@ -0,0 +1,91 @@ +module EventSessionHelper + + def event_session_img(event_session) + + # need to figure out img, width, height + + # prefer the session URL if specified; otherwise use the band/user + url = nil + width = nil + height = nil + + if event_session.img_url + url = image_path(event_session.img_url) + else + url = resolve_avatarables(event_session.band, event_session.user, allow_none: true) + end + + if url + width = event_session.img_width + height = event_session.img_height + else + url = image_path('web/logo-256.png') + width = 115 + end + + content_tag(:img, nil, src: url, width: width, height: height) + end + + def event_session_title(event_session) + return event_session.band.name if event_session.band + return event_session.user.name if event_session.user + 'TBD' + end + + def event_session_start_hour(event_session) + timezone = ActiveSupport::TimeZone.new('Central Time (US & Canada)') + timezone.at(event_session.starts_at.to_i).strftime('%l:%M %P') + end + + def event_session_button(event_session) + + state = nil # can be :not_started, :over, :playing + state = event_session.pinned_state if event_session.pinned_state + if !state && (event_session.user_id || event_session.band_id) + # if no pinned state, then we try to find if there is a session currently on going during the specified time range + # if so, then we are playing. + # if there has been none, we say it's still coming, + # if there has been at least one, and it's over, we say session over + query = MusicSessionHistory.where(created_at: event_session.event.event_day..(event_session.event.event_day + 1.day)) + if event_session.user_id + query = query.where(user_id: event_session.user_id) + elsif event_session.band_id + query = query.where(band_id: event_session.band_id) + else + raise 'invalid state in event_session_button' + end + + music_session_history = query.order('created_at DESC').first + + if music_session_history + if music_session_history.session_removed_at + state = 'over' + else + state = 'playing' + end + else + state = 'not_started' + end + end + + if state == 'over' + content_tag(:a, 'SESSION ENDED', href: music_session_detail_path(music_session_history.id), class: 'button-grey') + elsif state == 'playing' + content_tag(:a, '', href: music_session_detail_path(music_session_history.id), class: 'button-orange') do + image_tag 'content/icon_playbutton.png', :width => 20, height: 20, align: 'absmiddle' + content_tag(:span, 'LISTEN NOW') + end + elsif state == 'not_started' + nil + else + nil + end + + end + + def event_session_description(event_session) + event_session.band.biography if event_session.band + event_session.user.biography if event_session.user + '' + end +end diff --git a/web/app/views/events/_event_session.html.haml b/web/app/views/events/_event_session.html.haml new file mode 100644 index 000000000..3c912dedf --- /dev/null +++ b/web/app/views/events/_event_session.html.haml @@ -0,0 +1,19 @@ +%hr{ class:'w60' } +.landing-band + = event_session_img(event_session) + %br + %br + %span= event_session_title(event_session) + +.landing-details + .left.f20.teal + %strong + = event_session_start_hour(event_session) + .right + = event_session_button(event_session) + %br{ clear:'all' } + %br + .left + = event_session_description(event_session) + %br + %br \ No newline at end of file diff --git a/web/app/views/events/show.html.haml b/web/app/views/events/event.html.haml similarity index 84% rename from web/app/views/events/show.html.haml rename to web/app/views/events/event.html.haml index a6c62ed38..2a2f57655 100644 --- a/web/app/views/events/show.html.haml +++ b/web/app/views/events/event.html.haml @@ -1,14 +1,15 @@ - provide(:title, @event.title) .landing-content - %h1 Virtual Jam Fest 2014 - %p.w60 - = @event.description + %h1= @event.title + %p.w60= @event.description %br %br %h2 ARTIST LINEUP %br + = render :partial => "event_session", :collection => @event.event_sessions + %br{clear:'all'} .landing-sidebar