This repository has been archived on 2020-01-20. You can view files and clone it, but cannot push or open issues or pull requests.
evoresa/app/controllers/events_controller.rb
2010-07-23 17:51:04 +02:00

83 lines
2.1 KiB
Ruby

class EventsController < ApplicationController
# GET /:key/event/:id/edit
def edit
end
# POST /:key/event/add
def create
@item = Item.find_by_key(params[:key])
dates = params[:event].delete(:dates)
event = Event.new(params[:event].merge(:item => @item))
flash[:errors] = ""
flash[:title] = params[:event][:title]
flash[:details] = params[:event][:details]
flash[:dates] = dates
if event.valid?
event.save
parsed_dates = extract_dates(dates)
if parsed_dates.all? {|d| d.first == :success }
bookings = []
parsed_dates.map do |d|
bookings << Booking.new(:start_at => d[1], :end_at => d[2], :event => event)
end
if bookings.all?(&:valid?)
bookings.each do |b|
b.event = event
b.save
end
else
bookings.each do |b|
b.errors.each do |_,msg|
flash[:errors] += "<li>#{msg}</li>"
end
end
end
else
parsed_dates.select {|d| d.first == :error}.each do |err|
flash[:errors] += "<li>La date à la ligne #{err.last+1} est invalide</li>"
end
end
else
e.errors.each do |attr,msg|
flash[:errors] += "<li>#{msg}</li>"
end
end
redirect_to item_path(:key => @item.key)
end
# PUT /:key/event/:id
def update
end
# DELETE /:key/event/:id
def delete
end
private
def extract_dates(text)
results = []
text.each_line.to_a.map(&:chomp).each_with_index do |line,lineno|
if line =~ /^(\d{2})\/(\d{2})\/(\d{4}) (\d{2}):(\d{2}) (\d{2}):(\d{2})/
day = "%s-%s-%s" % [$~[3], $~[2], $~[1]]
begin
start_at = ("#{day} %s:%s:00" % [$~[4], $~[5]]).to_datetime
end_at = ("#{day} %s:%s:00" % [$~[6], $~[7]]).to_datetime
rescue ArgumentError
results << [:error, lineno]
next
end
results << [:success, start_at, end_at]
else
results << [:error, lineno]
end
end
results
end
end