144 lines
5 KiB
Ruby
144 lines
5 KiB
Ruby
|
|
class PseudsController < ApplicationController
|
||
|
|
cache_sweeper :pseud_sweeper
|
||
|
|
|
||
|
|
before_action :load_user
|
||
|
|
before_action :check_ownership, only: [:create, :destroy, :new]
|
||
|
|
before_action :check_ownership_or_admin, only: [:edit, :update]
|
||
|
|
before_action :check_user_status, only: [:new, :create, :edit, :update]
|
||
|
|
|
||
|
|
def load_user
|
||
|
|
@user = User.find_by!(login: params[:user_id])
|
||
|
|
@check_ownership_of = @user
|
||
|
|
end
|
||
|
|
|
||
|
|
# GET /pseuds
|
||
|
|
# GET /pseuds.xml
|
||
|
|
def index
|
||
|
|
@pseuds = @user.pseuds.with_attached_icon.alphabetical.paginate(page: params[:page])
|
||
|
|
@rec_counts = Pseud.rec_counts_for_pseuds(@pseuds)
|
||
|
|
@work_counts = Pseud.work_counts_for_pseuds(@pseuds)
|
||
|
|
@page_subtitle = @user.login
|
||
|
|
end
|
||
|
|
|
||
|
|
# GET /users/:user_id/pseuds/:id
|
||
|
|
def show
|
||
|
|
@pseud = @user.pseuds.find_by!(name: params[:id])
|
||
|
|
@page_subtitle = @pseud.name
|
||
|
|
|
||
|
|
# very similar to show under users - if you change something here, change it there too
|
||
|
|
if logged_in? || logged_in_as_admin?
|
||
|
|
visible_works = @pseud.works.visible_to_registered_user
|
||
|
|
visible_series = @pseud.series.visible_to_registered_user
|
||
|
|
visible_bookmarks = @pseud.bookmarks.visible_to_registered_user
|
||
|
|
else
|
||
|
|
visible_works = @pseud.works.visible_to_all
|
||
|
|
visible_series = @pseud.series.visible_to_all
|
||
|
|
visible_bookmarks = @pseud.bookmarks.visible_to_all
|
||
|
|
end
|
||
|
|
|
||
|
|
visible_works = visible_works.revealed.non_anon
|
||
|
|
visible_series = visible_series.exclude_anonymous
|
||
|
|
|
||
|
|
@fandoms = \
|
||
|
|
Fandom.select("tags.*, count(DISTINCT works.id) as work_count")
|
||
|
|
.joins(:filtered_works).group("tags.id").merge(visible_works)
|
||
|
|
.where(filter_taggings: { inherited: false })
|
||
|
|
.order("work_count DESC").load
|
||
|
|
|
||
|
|
@works = visible_works.order("revised_at DESC").limit(ArchiveConfig.NUMBER_OF_ITEMS_VISIBLE_IN_DASHBOARD)
|
||
|
|
@series = visible_series.order("updated_at DESC").limit(ArchiveConfig.NUMBER_OF_ITEMS_VISIBLE_IN_DASHBOARD)
|
||
|
|
@bookmarks = visible_bookmarks.order("updated_at DESC").limit(ArchiveConfig.NUMBER_OF_ITEMS_VISIBLE_IN_DASHBOARD)
|
||
|
|
|
||
|
|
return unless current_user.respond_to?(:subscriptions)
|
||
|
|
|
||
|
|
@subscription = current_user.subscriptions.where(subscribable_id: @user.id,
|
||
|
|
subscribable_type: "User").first ||
|
||
|
|
current_user.subscriptions.build(subscribable: @user)
|
||
|
|
end
|
||
|
|
|
||
|
|
# GET /pseuds/new
|
||
|
|
# GET /pseuds/new.xml
|
||
|
|
def new
|
||
|
|
@pseud = @user.pseuds.build
|
||
|
|
end
|
||
|
|
|
||
|
|
# GET /pseuds/1/edit
|
||
|
|
def edit
|
||
|
|
@pseud = @user.pseuds.find_by!(name: params[:id])
|
||
|
|
authorize @pseud if logged_in_as_admin?
|
||
|
|
end
|
||
|
|
|
||
|
|
# POST /pseuds
|
||
|
|
# POST /pseuds.xml
|
||
|
|
def create
|
||
|
|
@pseud = Pseud.new(permitted_attributes(Pseud))
|
||
|
|
if @user.pseuds.where(name: @pseud.name).blank?
|
||
|
|
@pseud.user_id = @user.id
|
||
|
|
old_default = @user.default_pseud
|
||
|
|
if @pseud.save
|
||
|
|
flash[:notice] = t(".successfully_created")
|
||
|
|
if @pseud.is_default
|
||
|
|
# if setting this one as default, unset the attribute of the current default pseud
|
||
|
|
old_default.update_attribute(:is_default, false)
|
||
|
|
end
|
||
|
|
redirect_to polymorphic_path([@user, @pseud])
|
||
|
|
else
|
||
|
|
render action: "new"
|
||
|
|
end
|
||
|
|
else
|
||
|
|
# user tried to add pseud they already have
|
||
|
|
flash[:error] = t(".already_have_pseud_with_name")
|
||
|
|
render action: "new"
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
# PUT /pseuds/1
|
||
|
|
# PUT /pseuds/1.xml
|
||
|
|
def update
|
||
|
|
@pseud = @user.pseuds.find_by(name: params[:id])
|
||
|
|
authorize @pseud if logged_in_as_admin?
|
||
|
|
default = @user.default_pseud
|
||
|
|
if @pseud.update(permitted_attributes(@pseud))
|
||
|
|
if logged_in_as_admin? && @pseud.ticket_url.present?
|
||
|
|
link = view_context.link_to("Ticket ##{@pseud.ticket_number}", @pseud.ticket_url)
|
||
|
|
summary = "#{link} for User ##{@pseud.user_id}"
|
||
|
|
AdminActivity.log_action(current_admin, @pseud, action: "edit pseud", summary: summary)
|
||
|
|
end
|
||
|
|
# if setting this one as default, unset the attribute of the current default pseud
|
||
|
|
default.update_attribute(:is_default, false) if @pseud.is_default && default != @pseud
|
||
|
|
flash[:notice] = t(".successfully_updated")
|
||
|
|
redirect_to([@user, @pseud])
|
||
|
|
else
|
||
|
|
render action: "edit"
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
# DELETE /pseuds/1
|
||
|
|
# DELETE /pseuds/1.xml
|
||
|
|
def destroy
|
||
|
|
@hide_dashboard = true
|
||
|
|
if params[:cancel_button]
|
||
|
|
flash[:notice] = t(".not_deleted")
|
||
|
|
redirect_to(user_pseuds_path(@user)) && return
|
||
|
|
end
|
||
|
|
|
||
|
|
@pseud = @user.pseuds.find_by(name: params[:id])
|
||
|
|
if @pseud.is_default
|
||
|
|
flash[:error] = t(".cannot_delete_default")
|
||
|
|
elsif @pseud.name == @user.login
|
||
|
|
flash[:error] = t(".cannot_delete_matching_username")
|
||
|
|
elsif params[:bookmarks_action] == "transfer_bookmarks"
|
||
|
|
@pseud.change_bookmarks_ownership
|
||
|
|
@pseud.replace_me_with_default
|
||
|
|
flash[:notice] = t(".successfully_deleted")
|
||
|
|
elsif params[:bookmarks_action] == "delete_bookmarks" || @pseud.bookmarks.empty?
|
||
|
|
@pseud.replace_me_with_default
|
||
|
|
flash[:notice] = t(".successfully_deleted")
|
||
|
|
else
|
||
|
|
render "delete_preview" and return
|
||
|
|
end
|
||
|
|
|
||
|
|
redirect_to(user_pseuds_path(@user))
|
||
|
|
end
|
||
|
|
end
|