111 lines
2.8 KiB
Ruby
111 lines
2.8 KiB
Ruby
class StatusesController < ApplicationController
|
|
before_action :users_only, except: [:index, :show, :timeline]
|
|
before_action :set_status, only: [:show, :edit, :update, :destroy]
|
|
before_action :set_user, except: [:timeline]
|
|
before_action :check_ownership, only: [:edit, :update, :destroy]
|
|
|
|
|
|
def redirect_to_current_user
|
|
if current_user
|
|
redirect_to user_status_path(current_user)
|
|
else
|
|
redirect_to new_user_session_path, alert: "Please log in to view statuses."
|
|
end
|
|
end
|
|
def check_ownership
|
|
unless @status && @status.user == current_user
|
|
redirect_to user_status_path(@user || current_user), alert: "You don't have permission to do that silly!"
|
|
end
|
|
end
|
|
|
|
def edit
|
|
@user = current_user
|
|
end
|
|
|
|
def update
|
|
@user = current_user
|
|
if @status.update(status_params)
|
|
redirect_to user_status_path(@user, @status), notice: "Status updated!"
|
|
else
|
|
render :edit
|
|
end
|
|
end
|
|
|
|
def show
|
|
end
|
|
def destroy
|
|
@status.destroy
|
|
redirect_to user_statuses_path(@user), notice: "Status deleted."
|
|
end
|
|
|
|
def redirect_to_current_user_new
|
|
if current_user
|
|
redirect_to new_user_status_path(current_user)
|
|
else
|
|
redirect_to new_user_session_path, alert: "Please log in to create a status."
|
|
end
|
|
end
|
|
def index
|
|
if params[:user_id].present?
|
|
@user = User.find_by(id: params[:user_id]) || User.find_by(login: params[:user_id])
|
|
end
|
|
if @user
|
|
@statuses = @user.statuses.order(created_at: :desc)
|
|
else
|
|
@statuses = []
|
|
end
|
|
end
|
|
def new
|
|
if @user != current_user
|
|
redirect_to user_statuses_path(current_user, @status), alert: "You can't do that silly!"
|
|
return
|
|
end
|
|
@status = current_user.statuses.new
|
|
end
|
|
def create
|
|
if @user != current_user
|
|
redirect_to user_status_path(current_user), alert: "You can't do that silly!"
|
|
return
|
|
end
|
|
@status = current_user.statuses.new(status_params)
|
|
if @status.save
|
|
redirect_to user_statuses_path(current_user, @status), notice: "Status created!"
|
|
else
|
|
render :new
|
|
end
|
|
end
|
|
def timeline
|
|
@statuses = Status.includes(:user, :icon_attachment)
|
|
.order(created_at: :desc)
|
|
end
|
|
private
|
|
|
|
def set_status
|
|
return unless params[:id].present?
|
|
|
|
@status = Status.find_by(id: params[:id])
|
|
unless @status
|
|
redirect_to user_statuses_path(current_user), alert: "Status not found."
|
|
return
|
|
end
|
|
|
|
@user = @status.user
|
|
end
|
|
|
|
def set_user
|
|
return if @user.present?
|
|
@user = if params[:user_id].present?
|
|
User.find_by(id: params[:user_id]) || User.find_by(login: params[:user_id])
|
|
else
|
|
current_user
|
|
end
|
|
|
|
unless @user
|
|
redirect_to root_path, alert: "User not found."
|
|
end
|
|
end
|
|
|
|
def status_params
|
|
params.require(:status).permit(:icon, :text, :mood, :music)
|
|
end
|
|
end
|