* Add ID and track to the event overview

* Get rid of the timezones in the schedule, need to deal with that on output
* Skip auth token verfiy on schedule updates
* Make it possible to withdraw confirmed submissions
* Show if people are not registerd
This commit is contained in:
Henne Vogelsang 2013-06-14 13:17:40 +02:00 committed by Henne Vogelsang
parent 2b5e40bc96
commit 73013bd3e6
14 changed files with 96 additions and 48 deletions

View file

@ -1,7 +1,9 @@
class Admin::EventsController < ApplicationController class Admin::EventsController < ApplicationController
before_filter :verify_organizer before_filter :verify_organizer
layout "admin" layout "admin"
around_filter :set_timezone_for_this_request # FIXME: The timezome should only be applied on output, otherwise
# you get lost in timezone conversions...
# around_filter :set_timezone_for_this_request
def set_timezone_for_this_request(&block) def set_timezone_for_this_request(&block)
Time.use_zone(@conference.timezone, &block) Time.use_zone(@conference.timezone, &block)
@ -9,6 +11,7 @@ class Admin::EventsController < ApplicationController
def index def index
@events = @conference.events @events = @conference.events
@tracks = @conference.tracks
respond_to do |format| respond_to do |format|
format.html format.html
format.json { render :json => Event.where(:state => :confirmed) } format.json { render :json => Event.where(:state => :confirmed) }
@ -50,7 +53,7 @@ class Admin::EventsController < ApplicationController
if params.has_key? :track_id if params.has_key? :track_id
@event.update_attribute(:track_id, params[:track_id]) @event.update_attribute(:track_id, params[:track_id])
end end
redirect_to(admin_conference_event_path(@conference.short_title, @event), :notice => "Updated") redirect_back_or_to(admin_conference_event_path(@conference.short_title, @event), :notice => "Updated")
end end
def create def create

View file

@ -4,6 +4,16 @@ class Admin::PeopleController < ApplicationController
def index def index
@people = Person.all @people = Person.all
mails = []
@people.each do |p|
if p.registrations.count < 1 and p.confirmed?
mails << p.email
end
end
respond_to do |format|
format.html
format.text { render :text => mails }
end
end end
def create def create

View file

@ -1,5 +1,6 @@
class Admin::ScheduleController < ApplicationController class Admin::ScheduleController < ApplicationController
before_filter :verify_organizer before_filter :verify_organizer
skip_before_filter :verify_authenticity_token, :only => [:update]
layout "schedule" layout "schedule"
def show def show
@ -39,8 +40,11 @@ class Admin::ScheduleController < ApplicationController
time = "#{params[:date]} #{params[:time]}" time = "#{params[:date]} #{params[:time]}"
Rails.logger.debug("Loading #{time}") Rails.logger.debug("Loading #{time}")
zone = ActiveSupport::TimeZone::new(@conference.timezone) # FIXME: Same here as in events_controller.rb. Event timezone should be applied
startTime = DateTime.strptime(time + zone.formatted_offset, "%Y-%m-%d %k:%M %Z") # only on output
# zone = ActiveSupport::TimeZone::new(@conference.timezone)
# startTime = DateTime.strptime(time + zone.formatted_offset, "%Y-%m-%d %k:%M %Z")
startTime = DateTime.strptime(time, "%Y-%m-%d %k:%M")
event.start_time = startTime event.start_time = startTime
event.save! event.save!
render :json => {"status" => "ok"} render :json => {"status" => "ok"}

View file

@ -20,6 +20,15 @@ module ApplicationHelper
return !!current_user.role?(role.to_s.camelize) return !!current_user.role?(role.to_s.camelize)
end end
# Same as redirect_to(:back) if there is a valid HTTP referer, otherwise redirect_to()
def redirect_back_or_to(options = {}, response_status = {})
if request.env["HTTP_REFERER"]
redirect_to(:back)
else
redirect_to(options, response_status)
end
end
# TODO Output better html # TODO Output better html
def format_comments(comment, padding = 0) def format_comments(comment, padding = 0)
result = "" result = ""

View file

@ -38,7 +38,7 @@ class Event < ActiveRecord::Base
transitions :to => :review, :from => [:new, :rejected, :canceled] transitions :to => :review, :from => [:new, :rejected, :canceled]
end end
event :withdraw do event :withdraw do
transitions :to => :withdrawn, :from => [:new, :review, :unconfirmed] transitions :to => :withdrawn, :from => [:new, :review, :unconfirmed, :confirmed]
end end
event :accept do event :accept do
transitions :to => :unconfirmed, :from => [:new, :review], :on_transition => :process_acceptance transitions :to => :unconfirmed, :from => [:new, :review], :on_transition => :process_acceptance

View file

@ -79,4 +79,17 @@ class Person < ActiveRecord::Base
self.guid = guid self.guid = guid
end end
end def confirmed?
if User.exists?(self.user_id)
user = User.find(self.user_id)
if user.confirmed?
true
else
false
end
else
false
end
end
end

View file

@ -7,25 +7,49 @@
.well .well
%table.table.table-striped.table-bordered.table-hover#events %table.table.table-striped.table-bordered.table-hover#events
%thead %thead
%th
%b ID
%th %th
%b Title %b Title
%th %th
%b Submitter %b Submitter
%th %th
%b Type %b Type
%th
%b Track
%th %th
%b State %b State
- @events.each do |event| - @events.each do |event|
%tr %tr
%td %td
=link_to event.title, admin_conference_event_path(@conference.short_title, event) = event.id
%td %td
=link_to event.title, admin_conference_event_path(@conference.short_title, event)
- if event.submitter.registrations.count < 1
- bgcolor="#F7819F"
- else
- bgcolor=""
%td{:style=>"background-color: #{bgcolor}"}
- if !event.submitter.nil? - if !event.submitter.nil?
=link_to event.submitter.public_name, admin_person_path(event.submitter) =link_to event.submitter.public_name, admin_person_path(event.submitter)
- if event.submitter.registrations.count < 1
(Unregistered!)
- else - else
Unknown submitter Unknown submitter
%td %td
= event.event_type.title = event.event_type.title
%td
.dropdown
= link_to "#", :class => "dropdown-toggle", :id => "track-dropdown" do
- if event.track.nil?
Track
- else
= event.track.name
<b class="caret"></b>
%ul.dropdown-menu
- @tracks.each do |track|
%li= link_to track.name, admin_conference_event_path(@conference.short_title, event, :track_id => track.id) ,
:method => :put, :track_id => track.id
%td %td
- if event.state == "withdrawn" - if event.state == "withdrawn"
Withdrawn Withdrawn

View file

@ -28,8 +28,7 @@
:javascript :javascript
$(document).ready(function() { $(document).ready(function() {
$('#people').dataTable( { $('#people').dataTable( {
"bScrollInfinite": true, "bPaginate": false,
"bScrollCollapse": true, "bLengthChange": false
"sScrollY": "200px"
} ); } );
} ); } );

View file

@ -1,7 +1,7 @@
.schedule-time-column .schedule-time-column
.schedule-time-column-header .schedule-time-column-header
= Time = Time
- (7..23).each do |hour| - (9..18).each do |hour|
.schedule-time-slot .schedule-time-slot
= "#{hour}:00" = "#{hour}:00"
.schedule-time-slot .schedule-time-slot
@ -15,8 +15,9 @@
.schedule-room-column{:id => "schedule-room-#{room.guid}", "room-guid" => room.guid} .schedule-room-column{:id => "schedule-room-#{room.guid}", "room-guid" => room.guid}
.schedule-room-column-header .schedule-room-column-header
= room.name = room.name
- (7..23).each do |hour| = "(#{room.size} people)"
- (9..18).each do |hour|
.schedule-room-slot{:id => "schedule-room-#{room.guid}-#{hour}-0", "room-guid" => room.guid, "hour" => "#{hour}:00"} .schedule-room-slot{:id => "schedule-room-#{room.guid}-#{hour}-0", "room-guid" => room.guid, "hour" => "#{hour}:00"}
.schedule-room-slot{:id => "schedule-room-#{room.guid}-#{hour}-15", "room-guid" => room.guid, "hour" => "#{hour}:15"} .schedule-room-slot{:id => "schedule-room-#{room.guid}-#{hour}-15", "room-guid" => room.guid, "hour" => "#{hour}:15"}
.schedule-room-slot{:id => "schedule-room-#{room.guid}-#{hour}-30", "room-guid" => room.guid, "hour" => "#{hour}:30"} .schedule-room-slot{:id => "schedule-room-#{room.guid}-#{hour}-30", "room-guid" => room.guid, "hour" => "#{hour}:30"}
.schedule-room-slot{:id => "schedule-room-#{room.guid}-#{hour}-45", "room-guid" => room.guid, "hour" => "#{hour}:45"} .schedule-room-slot{:id => "schedule-room-#{room.guid}-#{hour}-45", "room-guid" => room.guid, "hour" => "#{hour}:45"}

View file

@ -8,6 +8,10 @@
.well .well
%table.table.table-striped.table-bordered.table-hover#users %table.table.table-striped.table-bordered.table-hover#users
%thead %thead
%th
%b ID
%th
%b State
%th %th
%b Email %b Email
%th %th
@ -21,7 +25,15 @@
%th %th
%th %th
- @users.each do |user| - @users.each do |user|
- person = Person.find_person_by_user_id(user.id)
%tr %tr
%td
= user.id
%td
- if user.confirmed?
confirmed
- else
unconfirmed
%td %td
= user.email = user.email
%td %td
@ -63,8 +75,7 @@
:javascript :javascript
$(document).ready(function() { $(document).ready(function() {
$('#users').dataTable( { $('#users').dataTable( {
"bScrollInfinite": true, "bPaginate": false,
"bScrollCollapse": true, "bLengthChange": false
"sScrollY": "200px"
} ); } );
} ); } );

File diff suppressed because one or more lines are too long

View file

@ -30,7 +30,7 @@ var scheduleDayEvents = {};
var Schedule = { var Schedule = {
loadEvents: function(conference_id, start_date) { loadEvents: function(conference_id, start_date) {
var eventDates = {}; var eventDates = {};
var url = '/admin/conference/' + conference_id + '/events'; var url = '/osem/admin/conference/' + conference_id + '/events';
var params = { start: $('#start').text(), end: $('#end').text()}; var params = { start: $('#start').text(), end: $('#end').text()};
var callback = function(data) { var callback = function(data) {
$.each(data, function(key, val) { $.each(data, function(key, val) {
@ -45,7 +45,7 @@ var Schedule = {
+ '<div onclick="Schedule.remove(\'event-' + vars["guid"] + '\', \'' + conference_id +'\');" class="schedule-event-delete-button">X</div>' + '<div onclick="Schedule.remove(\'event-' + vars["guid"] + '\', \'' + conference_id +'\');" class="schedule-event-delete-button">X</div>'
+ '<div>' + vars["title"] + '</div></div>'); + '<div>' + vars["title"] + '</div></div>');
var date = "none"; var date = "none";
var hour = "14"; var hour = "12";
var minute = "0"; var minute = "0";
console.log(vars); console.log(vars);
if (vars["start_time"] != null) { if (vars["start_time"] != null) {
@ -55,7 +55,7 @@ var Schedule = {
+ ('0' + d.getUTCDate()).slice(-2); + ('0' + d.getUTCDate()).slice(-2);
hour = d.getUTCHours(); hour = d.getUTCHours();
minute = d.getUTCMinutes(); minute = d.getUTCMinutes();
console.log(d); console.log("date: " + d);
} }
newEvent.addClass("schedule-event"); newEvent.addClass("schedule-event");
newEvent.css('background-color',vars["track_color"]); newEvent.css('background-color',vars["track_color"]);
@ -104,7 +104,7 @@ var Schedule = {
var e = $("#" + element); var e = $("#" + element);
var unscheduled = $("#unscheduled"); var unscheduled = $("#unscheduled");
var url = '/admin/conference/' + conference_id + '/schedule'; var url = '/osem/admin/conference/' + conference_id + '/schedule';
var params = { var params = {
event: e.attr("guid"), event: e.attr("guid"),
room: "none", room: "none",
@ -156,7 +156,7 @@ var Schedule = {
} }
}, },
save: function (conference_id, event_id, room_id, date, time) { save: function (conference_id, event_id, room_id, date, time) {
var url = '/admin/conference/' + conference_id + '/schedule'; var url = '/osem/admin/conference/' + conference_id + '/schedule';
var params = { var params = {
event: event_id, event: event_id,
room: room_id, room: room_id,
@ -175,4 +175,4 @@ var Schedule = {
}); });
}, },
}; };