mirror of
https://github.com/openSUSE/osem.git
synced 2026-01-27 15:33:22 -05:00
153 lines
5.2 KiB
Ruby
153 lines
5.2 KiB
Ruby
class Admin::EventsController < ApplicationController
|
|
before_filter :verify_organizer
|
|
|
|
# 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)
|
|
Time.use_zone(@conference.timezone, &block)
|
|
end
|
|
|
|
def index
|
|
@events = @conference.events
|
|
@tracks = @conference.tracks
|
|
@machine_states = @events.state_machine.states.map
|
|
@event_types = @conference.event_types
|
|
|
|
@mystates = []
|
|
@mytypes = []
|
|
@eventstats = Hash.new
|
|
statelength = 0
|
|
@totallength = 0
|
|
|
|
@machine_states.each do |mystate|
|
|
length = 0
|
|
events_mystate= @events.where("state" => mystate.name)
|
|
if events_mystate.count > 0
|
|
@mystates << mystate
|
|
events_mystate.each do |myevent|
|
|
length += myevent.event_type.length
|
|
end
|
|
@eventstats["#{mystate.name}"] = {"count" => events_mystate.count, "length" => length}
|
|
end
|
|
end
|
|
|
|
@event_types.each do |mytype|
|
|
events_mytype = @events.where("event_type_id" => mytype.id)
|
|
if events_mytype.count > 0
|
|
@mytypes << mytype
|
|
end
|
|
end
|
|
@mytypes.each do |mytype|
|
|
@mystates.each do |mystate|
|
|
events_mytype = @events.where("event_type_id" => mytype.id)
|
|
events_mytype_mystate= events_mytype.where("state" => mystate.name)
|
|
typelength = 0
|
|
if events_mytype_mystate.count > 0
|
|
events_mytype_mystate.each do |myevent|
|
|
typelength += myevent.event_type.length
|
|
@totallength += myevent.event_type.length
|
|
end
|
|
@eventstats[mytype.title] = {"count" => events_mytype.count, "length" => events_mytype.count * mytype.length} if @eventstats[mytype.title] == nil
|
|
tmp = {"#{mystate.name}" => {"type_state_count" => events_mytype_mystate.count, "type_state_length" => typelength}}
|
|
@eventstats[mytype.title].merge!(tmp)
|
|
end
|
|
end
|
|
end
|
|
@eventstats["totallength"] = @totallength
|
|
|
|
respond_to do |format|
|
|
format.html
|
|
# Explicity call #to_json to avoid the use of EventSerializer
|
|
format.json { render :json => Event.where(:state => :confirmed).to_json }
|
|
end
|
|
end
|
|
|
|
def show
|
|
@event = @conference.events.find(params[:id])
|
|
@tracks = @conference.tracks
|
|
@event_types = @conference.event_types
|
|
@comments = @event.root_comments
|
|
@comment_count = @event.comment_threads.count
|
|
@ratings = @event.votes.includes(:person)
|
|
@difficulty_levels = @conference.difficulty_levels
|
|
end
|
|
|
|
def edit
|
|
@event = @conference.events.find(params[:id])
|
|
@event_types = @conference.event_types
|
|
@tracks = Track.all
|
|
@comments = @event.root_comments
|
|
@comment_count = @event.comment_threads.count
|
|
@person = @event.submitter
|
|
@url = admin_conference_event_path(@conference.short_title, @event)
|
|
end
|
|
|
|
def comment
|
|
event = @conference.events.find_by_id(params[:id])
|
|
comment = Comment.build_from(event, current_user.id, params[:comment])
|
|
comment.save!
|
|
if !params[:parent].nil?
|
|
comment.move_to_child_of(params[:parent])
|
|
end
|
|
|
|
redirect_to admin_conference_event_path(:conference_id => @conference.short_title)
|
|
end
|
|
|
|
def update
|
|
@event = Event.find(params[:id])
|
|
if params.has_key? :track_id
|
|
@event.update_attribute(:track_id, params[:track_id])
|
|
end
|
|
if params.has_key? :event_type_id
|
|
@event.update_attribute(:event_type_id, params[:event_type_id])
|
|
end
|
|
if params.has_key? :difficulty_level_id
|
|
@event.update_attribute(:difficulty_level_id, params[:difficulty_level_id])
|
|
end
|
|
|
|
if @event.submitter.update_attributes!(params[:person]) && @event.update_attributes!(params[:event])
|
|
flash[:notice] = "Successfully updated #{@event.title}."
|
|
else
|
|
flash[:notice] = "Update not successful."
|
|
end
|
|
|
|
expire_page :controller => '/schedule', :action => :index
|
|
redirect_back_or_to(admin_conference_event_path(@conference.short_title, @event))
|
|
end
|
|
|
|
def create
|
|
expire_page :controller => '/schedule', :action => :index
|
|
end
|
|
|
|
def update_state
|
|
event = Event.find(params[:id])
|
|
if params[:send_mail] == "true" and (event.conference.email_settings.accepted_email_template.nil? or event.conference.email_settings.rejected_email_template.nil?)
|
|
redirect_to(admin_conference_events_path(:conference_id => @conference.short_title), :notice => "Update Email Template before Sending Mails") and return
|
|
end
|
|
event.send(:"#{params[:transition]}!", :send_mail => params[:send_mail])
|
|
expire_page :controller => '/schedule', :action => :index
|
|
redirect_to(admin_conference_events_path(:conference_id => @conference.short_title), :notice => "Updated state")
|
|
end
|
|
|
|
def vote
|
|
@event = Event.find(params[:id])
|
|
@ratings = @event.votes.includes(:person)
|
|
|
|
if votes = current_user.person.votes.find_by_event_id(params[:id])
|
|
votes.update_attributes(:rating => params[:rating])
|
|
else
|
|
@myvote = @event.votes.build
|
|
@myvote.person = current_user.person
|
|
@myvote.rating = params[:rating]
|
|
@myvote.save
|
|
end
|
|
|
|
respond_to do |format|
|
|
format.html { redirect_to admin_conference_event_path(@conference.short_title, @event)}
|
|
format.js
|
|
end
|
|
end
|
|
end
|