Files
danbooru/app/models/forum_post_vote.rb
evazion a62e844a1a forum: fix visibility of forum post votes.
Make all forum post votes visible to everyone.

When forum votes were first introduced, it was technically possible to
vote on any forum post, including on posts in mod-only threads.
Accordingly, forum post votes were only visible if the forum post itself
was visible. However, there doesn't actually exist any votes on private
forum posts, and trying to filter them out makes the /user_actions page
much slower, so just make them visible to everyone.
2022-09-16 06:01:44 -05:00

58 lines
1.2 KiB
Ruby

# frozen_string_literal: true
class ForumPostVote < ApplicationRecord
belongs_to :creator, class_name: "User"
belongs_to :forum_post
belongs_to :bulk_update_request, primary_key: :forum_post_id, foreign_key: :forum_post_id, optional: true
validates :creator_id, uniqueness: {scope: :forum_post_id}
validates :score, inclusion: {in: [-1, 0, 1]}
scope :up, -> {where(score: 1)}
scope :down, -> {where(score: -1)}
scope :by, ->(user_id) {where(creator_id: user_id)}
scope :excluding_user, ->(user_id) { where.not(creator_id: user_id) }
def self.visible(user)
all
end
def self.forum_post_matches(params)
return all if params.blank?
where(forum_post_id: ForumPost.search(params).reorder(nil).select(:id))
end
def self.search(params)
q = search_attributes(params, :id, :created_at, :updated_at, :score, :creator, :forum_post)
q = q.forum_post_matches(params[:forum_post])
q.apply_default_order(params)
end
def up?
score == 1
end
def down?
score == -1
end
def meh?
score == 0
end
def vote_type
case score
when 1
"up"
when -1
"down"
when 0
"meh"
end
end
def self.available_includes
[:creator, :forum_post]
end
end