railstaichung/rails-taichung

View on GitHub
app/controllers/events_controller.rb

Summary

Maintainability
A
45 mins
Test Coverage
class EventsController < ApplicationController
  before_action :authenticate_user!, only: [:crop, :to_active, :to_close, :join, :quit, :new, :edit, :create, :update, :destroy]

  def crop
    @event = current_user.events.find(params[:id])
  end

  def to_active
    @event = current_user.events.find(params[:id])
    @event.to_active
    flash[:notice] = "活動激活!"
    redirect_to account_my_event_path
  end

  def to_close
    @event = current_user.events.find(params[:id])
    @event.to_close
    flash[:notice] = "活動關閉!"
    redirect_to account_my_event_path
  end

  def active
    @events = Event.where(is_active: true).all.order("created_at DESC")
  end

  def inactive
    @events = Event.where(is_active: false).all.order("created_at DESC")
  end

  def join
    @event = Event.find(params[:id])
      if !current_user.is_member_of?(@event)
        current_user.join!(@event)
        flash[:notice] = "活動報名成功!"
      else
        flash[:warning] = "你無法重複報名本活動了!"
      end
    redirect_to event_path(@event)
  end

  def quit
    @event = Event.find(params[:id])
      if current_user.is_member_of?(@event)
        current_user.quit!(@event)
        flash[:alert] = "你已取消報名本活動!"
      else
        flash[:warning] = "你沒有報名本活動,怎麼取消 XD"
      end
    redirect_to event_path(@event)
  end


  def index
    @events = Event.all.order("created_at DESC")
  end

  def new
    @event = Event.new
  end

  def create
    @event = current_user.events.new(event_params)
    if @event.start_time > @event.end_time
      flash[:warning] = "開始時間錯誤"
      render :new
    else
      if @event.save
        current_user.join!(@event)
        redirect_to crop_event_path(@event), notice: "建立活動成功"
      else
        render :new
      end
    end
  end

  def show
    @event = Event.find(params[:id])
    @members = @event.members
    @hash = Gmaps4rails.build_markers(@event) do |event, marker|
      marker.lat event.latitude
      marker.lng event.longitude
      marker.infowindow event.topic
    end
    @members = @event.members
    @docs = @event.beefs.order('created_at DESC').page params[:page]
  end

  def edit
    @event = current_user.events.find(params[:id])
  end

  def update
    @event = current_user.events.find(params[:id])
    if @event.start_time > @event.end_time
      flash[:warning] = "時間錯誤"
      render :edit
    else
      if @event.update_attributes(event_params)
        if params[:event][:photo].present?
          redirect_to crop_event_path(@event)
        else
          @event.save
          redirect_to account_my_events_path, notice: "活動修改成功"
        end
      else
        render :edit
      end
    end
  end

  def destroy
    @event = current_user.events.find(params[:id])
    @event.destroy
    redirect_to account_my_events_path, alert: "活動已刪除"
  end

  private

  def event_params
    params.require(:event).permit(:topic, :start_time, :end_time, :location, :content, :is_active, :photo, :crop_x, :crop_y, :crop_w, :crop_h, :crop_photo)
  end
end