96 lines
3.5 KiB
Ruby
96 lines
3.5 KiB
Ruby
class RelatedWorksController < ApplicationController
|
|
|
|
before_action :load_user, only: [:index]
|
|
before_action :users_only, except: [:index]
|
|
before_action :get_instance_variables, except: [:index]
|
|
|
|
def index
|
|
@page_subtitle = t(".page_title", login: @user.login)
|
|
@translations_of_user = @user.related_works.posted.where(translation: true)
|
|
@remixes_of_user = @user.related_works.posted.where(translation: false)
|
|
@translations_by_user = @user.parent_work_relationships.posted.where(translation: true)
|
|
@remixes_by_user = @user.parent_work_relationships.posted.where(translation: false)
|
|
|
|
return if @user == current_user
|
|
|
|
# Extra constraints on what we display if someone else is viewing @user's
|
|
# related works page:
|
|
@translations_of_user = @translations_of_user.merge(Work.revealed.non_anon)
|
|
@remixes_of_user = @remixes_of_user.merge(Work.revealed.non_anon)
|
|
@translations_by_user = @translations_by_user.merge(Work.revealed.non_anon)
|
|
@remixes_by_user = @remixes_by_user.merge(Work.revealed.non_anon)
|
|
end
|
|
|
|
# GET /related_works/1
|
|
# GET /related_works/1.xml
|
|
def show
|
|
end
|
|
|
|
def update
|
|
# updates are done by the owner of the parent, to aprove or remove links on the parent work.
|
|
unless @user
|
|
if current_user_owns?(@child)
|
|
flash[:error] = ts("Sorry, but you don't have permission to do that. Try removing the link from your own work.")
|
|
redirect_back_or_default(user_related_works_path(current_user))
|
|
return
|
|
else
|
|
flash[:error] = ts("Sorry, but you don't have permission to do that.")
|
|
redirect_back_or_default(root_path)
|
|
return
|
|
end
|
|
end
|
|
# the assumption here is that any update is a toggle from what was before
|
|
@related_work.reciprocal = !@related_work.reciprocal?
|
|
if @related_work.update_attribute(:reciprocal, @related_work.reciprocal)
|
|
notice = @related_work.reciprocal? ? ts("Link was successfully approved") :
|
|
ts("Link was successfully removed")
|
|
flash[:notice] = notice
|
|
redirect_to(@related_work.parent)
|
|
else
|
|
flash[:error] = ts('Sorry, something went wrong.')
|
|
redirect_to(@related_work)
|
|
end
|
|
end
|
|
|
|
def destroy
|
|
# destroys are done by the owner of the child, to remove links to the parent work which also removes the link back if it exists.
|
|
unless current_user_owns?(@child)
|
|
if @user
|
|
flash[:error] = ts("Sorry, but you don't have permission to do that. You can only approve or remove the link from your own work.")
|
|
redirect_back_or_default(user_related_works_path(current_user))
|
|
return
|
|
else
|
|
flash[:error] = ts("Sorry, but you don't have permission to do that.")
|
|
redirect_back_or_default(root_path)
|
|
return
|
|
end
|
|
end
|
|
@related_work.destroy
|
|
redirect_back(fallback_location: user_related_works_path(current_user))
|
|
end
|
|
|
|
private
|
|
|
|
def load_user
|
|
if params[:user_id].blank?
|
|
flash[:error] = ts("Whose related works were you looking for?")
|
|
redirect_back_or_default(search_people_path)
|
|
else
|
|
@user = User.find_by(login: params[:user_id])
|
|
if @user.blank?
|
|
flash[:error] = ts("Sorry, we couldn't find that user")
|
|
redirect_back_or_default(root_path)
|
|
end
|
|
end
|
|
end
|
|
|
|
def get_instance_variables
|
|
@related_work = RelatedWork.find(params[:id])
|
|
@child = @related_work.work
|
|
if @related_work.parent.is_a? (Work)
|
|
@owners = @related_work.parent.pseuds.map(&:user)
|
|
@user = current_user if @owners.include?(current_user)
|
|
end
|
|
end
|
|
|
|
end
|