This commit is contained in:
Ana María Martínez Gómez 2017-03-19 09:56:30 +00:00 committed by GitHub
commit d059b7aed1
15 changed files with 104 additions and 21 deletions

View file

@ -1,3 +1,5 @@
// ADMIN SCHEDULE
var url; // Should be initialize in Schedule.initialize
var schedule_id; // Should be initialize in Schedule.initialize
@ -117,6 +119,31 @@ $(document).ready( function() {
});
});
// PUBLIC SCHEDULE
function starClicked(e){
// stops the click from propagating
if (!e) var e = window.event;
e.preventDefault();
e.cancelBubble = true;
if (e.stopPropagation) e.stopPropagation();
var callback = function(data) {
$(e.target).toggleClass('fa-star fa-star-o');
}
var params = { favourite_user_id: $(e.target).data('user') };
$.ajax({
url: $(e.target).data('url'),
type: 'PATCH',
data: params,
success: callback,
dataType : 'json'
});
}
function eventClicked(e, element){
var url = $(element).data('url');
if(e.ctrlKey)

View file

@ -127,7 +127,7 @@ a.unstyled-link {
.program-dropdown, .schedule-dropdown{
margin-left: 20%;
margin-right: 20%;
margin-top: 40px;
margin-top: 10px;
margin-bottom: 20px;
}
@ -234,20 +234,6 @@ td.no-padding{
cursor: pointer;
}
.program-dropdown{
margin-left: 20%;
margin-right: 20%;
margin-top: 40px;
}
.program-dropdown > button{
width: 100%;
}
.program-dropdown > .dropdown-menu{
width: 100%;
}
.no-events-day{
color: #D8D8D8 !important;
}
@ -263,6 +249,11 @@ td.no-padding{
font-size: 7px;
}
#star-events{
margin-right: 5px;
vertical-align: text-top;
}
/* Small devices (tablets, 768px and up) */
@media (min-width: 768px) {
.room, .event-title{

View file

@ -1,10 +1,11 @@
class ProposalsController < ApplicationController
skip_authorization_check
before_action :authenticate_user!, except: [:show, :new, :create]
load_resource :conference, find_by: :short_title
load_resource :program, through: :conference, singleton: true
load_and_authorize_resource :event, parent: false, through: :program
# We authorize manually in these actions
skip_authorize_resource :event, only: [:confirm, :restart, :withdraw]
skip_authorize_resource :event, only: [:confirm, :restart, :toogle_favorite, :withdraw]
def index
@event = @program.events.new
@ -74,6 +75,17 @@ class ProposalsController < ApplicationController
end
end
def toogle_favorite
user = User.find(params[:favourite_user_id])
users = @event.favourite_users
if users.include? user
@event.favourite_users.delete(user)
else
@event.favourite_users << User.find(params[:favourite_user_id])
end
render json: {}
end
def withdraw
authorize! :update, @event
@url = conference_program_proposal_path(@conference.short_title, params[:id])

View file

@ -1,6 +1,7 @@
class SchedulesController < ApplicationController
protect_from_forgery with: :null_session
before_action :respond_to_options
before_action :favourites
load_and_authorize_resource :conference, find_by: :short_title
load_resource :program, through: :conference, singleton: true, except: :index
@ -29,13 +30,16 @@ class SchedulesController < ApplicationController
@dates = @conference.start_date..@conference.end_date
@events_schedules = @program.selected_event_schedules
@events_schedules = @events_schedules.select{ |e| e.event.favourite_users.exists?(current_user.id) } if @events_schedules && current_user && @favourites
@events_schedules = [] unless @events_schedules
@favourites = params[:favourites] == 'true'
@unscheduled_events = if @program.selected_schedule
@program.events.confirmed - @program.selected_schedule.events
else
@program.events.confirmed
end
@unscheduled_events = @unscheduled_events.select{ |e| e.favourite_users.exists?(current_user.id) } if current_user && @favourites
day = @conference.current_conference_day
@tag = day.strftime('%Y-%m-%d') if day
@ -43,6 +47,10 @@ class SchedulesController < ApplicationController
private
def favourites
@favourites = params[:favourites] == 'true'
end
def respond_to_options
respond_to do |format|
format.html { head :ok }

View file

@ -22,8 +22,11 @@ class Event < ActiveRecord::Base
belongs_to :difficulty_level
belongs_to :program
has_and_belongs_to_many :favourite_users, class_name: 'User'
accepts_nested_attributes_for :event_users, allow_destroy: true
accepts_nested_attributes_for :users
accepts_nested_attributes_for :favourite_users
before_create :generate_guid

View file

@ -49,6 +49,9 @@ class User < ActiveRecord::Base
has_many :votes, dependent: :destroy
has_many :voted_events, through: :votes, source: :events
has_many :subscriptions, dependent: :destroy
has_and_belongs_to_many :favourite_events, class_name: 'Event'
accepts_nested_attributes_for :roles
scope :admin, -> { where(is_admin: true) }

View file

@ -30,6 +30,7 @@
.room.elipsis.break-words{ style: "-webkit-line-clamp: #{ room_lines(@rooms) }; height: #{ room_height(@rooms) }px;" }
= room.name
- event_schedules = room.event_schedules.select{ |e| (e.schedule_id == @conference.program.selected_schedule.id) && (e.end_time > start_time) && (e.start_time <= (start_time + hrs_per_slide.hour)) }
- event_schedules = event_schedules.select{ |e| e.event.favourite_users.exists?(current_user.id) } if current_user && @favourites
- (1..intervals).each do |i|
- if span > 1
- span -= 1

View file

@ -4,11 +4,15 @@
= image_tag speaker.gravatar_url, :class => "img-circle pull-right all-speaker-pic", |
:alt => speaker.name, |
:title => speaker.name |
%p
= canceled_replacement_event_label(event, event_schedule)
= replacement_event_notice(event_schedule)
- if current_user
= link_to('#', onClick: 'starClicked();') do
%span#star-events{ class: "fa fa-lg #{ event.favourite_users.exists?(current_user.id) ? 'fa-star' : 'fa-star-o' }", |
"aria-hidden" => "true", |
"data-url" => toogle_favorite_conference_program_proposal_path(@conference.short_title, event.id), |
"data-user" => current_user.id }
%span.h3
= event.title
%br

View file

@ -1,12 +1,18 @@
%td.event{ width: "#{ width * span }%" , |
colspan: span, |
role: "button" }
%a.unstyled-link{href: url_for(conference_program_proposal_path(@conference.short_title, event.id))}
%div{ onClick: 'eventClicked(event, this);', "data-url" => "#{url_for(conference_program_proposal_path(@conference.short_title, event.id))}" }
%div{ class: "elipsis break-words event-title", |
style: "-webkit-line-clamp: #{ event_lines(@rooms) }; height: #{ event_height(@rooms) }px;"} |
= canceled_replacement_event_label(event, event_schedule, 'schedule-label')
- if current_user
= link_to('#', onClick: 'starClicked();') do
%span#star{ class: "fa fa-lg #{ event.favourite_users.exists?(current_user.id) ? 'fa-star' : 'fa-star-o' }", |
"aria-hidden" =>"true", |
"data-url" => toogle_favorite_conference_program_proposal_path(@conference.short_title, event.id), |
"data-user" => current_user.id }
= event.title
- if speaker = event.speakers.first

View file

@ -2,6 +2,6 @@
/ Nav tabs
%ul.nav.nav-tabs{ role: "tablist" }
%li{ class: "schedule #{ 'active' if active == 'schedule' }", role: "presentation" }
= link_to('Schedule', conference_schedule_path(@conference.short_title))
= link_to('Schedule', conference_schedule_path(@conference.short_title, favourites: @favourites))
%li{ class: "program #{ 'active' if active == 'program' }", role: "presentation" }
= link_to('All events', events_conference_schedule_path(@conference.short_title))
= link_to('All events', events_conference_schedule_path(@conference.short_title, favourites: @favourites))

View file

@ -5,6 +5,13 @@
%h1.text-center
Program for
= @conference.title
- if current_user
.row
.col-md-12.text-center
= button_to (@favourites ? 'All events' : 'Only favourites events'),
events_conference_schedule_path(@conference.short_title),
params: { favourites: !@favourites },
method: :get, class: 'btn btn-success'
.dropdown.program-dropdown
%button{ type: "button", class: "btn btn-default dropdown-toggle", 'data-toggle' => "dropdown" }
Dates

View file

@ -5,6 +5,13 @@
%h1.text-center
Schedule for
= @conference.title
- if current_user
.row
.col-md-12.text-center
= button_to (@favourites ? 'All events' : 'Only favourites events'),
conference_schedule_path(@conference.short_title),
params: { favourites: !@favourites },
method: :get, class: 'btn btn-success'
.dropdown.schedule-dropdown
%button{ type: "button", class: "btn btn-default dropdown-toggle", 'data-toggle' => "dropdown" }
= @day

View file

@ -115,6 +115,7 @@ Osem::Application.routes.draw do
get :registrations
patch '/confirm' => 'proposals#confirm'
patch '/restart' => 'proposals#restart'
patch :toogle_favorite
end
end
end

View file

@ -0,0 +1,8 @@
class CreateEventsUsers < ActiveRecord::Migration
def change
create_table :events_users, id: false do |t|
t.references :event
t.references :user
end
end
end

View file

@ -243,6 +243,11 @@ ActiveRecord::Schema.define(version: 20170213145807) do
t.datetime "created_at"
end
create_table "events_users", id: false, force: :cascade do |t|
t.integer "event_id"
t.integer "user_id"
end
create_table "lodgings", force: :cascade do |t|
t.string "name"
t.text "description"