otwarchive-statuses/statuses_controller.rb
2025-11-14 18:17:07 -05:00

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