Files
danbooru/app/models/forum_post_vote.rb
evazion ee638f976f Add /user_actions page.
Add a /user_actions page. This page shows you a global timeline of
(almost) all activity on the site, including uploads, comments, votes,
edits, forum posts, and so on.

The main things it doesn't include are post edits, pool edits, and
favorites (posts and pools live in a separate database, and favorites
don't have the timestamps we need for ordering).

This page is useful for moderation purposes because it lets you see a
history of almost all of a user's activity on a single page.

Currently this page is mod-only. In the future it will be open to all
users, so you can view the history of your own site activity, or the
activity of others.
2022-09-16 05:39:25 -05:00

58 lines
1.3 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)
where(forum_post: ForumPost.visible(user))
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