Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class EventsController < ApplicationController
- before_action :authenticate_user!, except: [:settings, :index, :show, :new, :create]
- before_action :set_event, only: [:show, :edit, :update, :destroy]
- before_action :set_vars, :set_search
- respond_to :html, :json
- def index
- @events = Event.joins(:days, :types).where(@search_params).uniq.order('updated_at DESC')
- end
- def new
- end
- def show
- end
- def edit
- redirect_to root_path, error: "Нельзя редактировать чужие события!" unless can?(:manage, @event)
- end
- def update
- if can?(:manage, @event)
- @event.assign_price!(params[:event][:price])
- @event.assign_types!(params[:event][:types_ids])
- @event.assign_days!(params[:event][:days])
- if @event.update(event_params)
- redirect_to root_path, flash: { success: "Событие успешно отредактировано" }
- else
- errors = @event.errors.full_messages.join("<br/>")
- redirect_to :back, flash: { error: errors }
- end
- else
- redirect_to root_path, flash: { error: "Нельзя редактировать чужие события!" }
- end
- end
- def destroy
- if can?(:manage, @event)
- @event.destroy
- redirect_to :back
- else
- redirect_to root_path, flash: { error: "Нельзя удалять чужие события!" }
- end
- end
- def create
- success_message = "Событие успешно создано."
- if @user
- @event = @user.events.new(event_params)
- elsif params[:email].present?
- pass = SecureRandom.hex[0..10]
- unless @user = User.create(email: params[:email], password: pass, password_confirmation: pass)
- redirect_to new_event_path, flash: { error: @user.errors.full_messages.join("<br/>") }
- end
- sign_in(:user, @user)
- @user.send_temp_password(pass)
- @event = @user.events.new(event_params)
- success_message += " Вам на почту отправлено письмо с паролем. Ваш временный пароль: #{pass}. Сейчас Вы авторизованы в системе. Спасибо за участие в проекте!"
- else
- redirect_to new_event_path, flash: { error: errors }
- end
- @event.visible = true
- if @event.save
- @event.assign_price!(params[:event][:price])
- @event.assign_types!(params[:event][:types_ids])
- @event.assign_days!(params[:event][:days])
- redirect_to edit_user_path(current_user), flash: { success: success_message }
- else
- @event.event_dates.destroy_all
- errors = @event.errors.full_messages.join("<br/>")
- redirect_to new_event_path, flash: { error: errors }
- end
- end
- private
- def event_params
- params.require(:event).permit(:type_id,
- :city_id,
- :city,
- :type,
- :date,
- :image,
- :name,
- :description,
- :price,
- :address,
- :time)
- end
- def set_event
- @event = Event.find_by_permalink(params[:id])
- end
- def update_permalink!
- update(permalink: Russian.translit(name).parameterize)
- end
- def set_search
- @search_params = Search.new({ city: @city, type: @type, date: @date}).build
- end
- def set_vars
- @city ||= City.where(subdomain: params[:city]).first
- @type ||= Type.where(permalink: params[:type]).first
- @date ||= params[:date]
- @user ||= current_user
- end
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement