post votes: let gold users use upvote:self, downvote:self metatags.

* Let gold users use upvote:self, downvote:self metatags to search for
  their own votes.
* Don't let mods use upvote:<user>, downvote:<user> metatags to see
  votes by other users. Only let admins see other users' votes.
* Add vote count to profile page.
This commit is contained in:
evazion
2019-10-28 03:28:47 -05:00
parent f4376fc7a3
commit 93b03c04ad
3 changed files with 19 additions and 8 deletions

View File

@@ -473,14 +473,12 @@ class PostQueryBuilder
end
if q[:upvote].present?
user_id = q[:upvote]
post_ids = PostVote.where(:user_id => user_id).where("score > 0").limit(400).pluck(:post_id)
post_ids = PostVote.where(user: q[:upvote]).where("score > 0").select(:post_id)
relation = relation.where("posts.id": post_ids)
end
if q[:downvote].present?
user_id = q[:downvote]
post_ids = PostVote.where(:user_id => user_id).where("score < 0").limit(400).pluck(:post_id)
post_ids = PostVote.where(user: q[:downvote]).where("score < 0").select(:post_id)
relation = relation.where("posts.id": post_ids)
end

View File

@@ -774,13 +774,17 @@ class Tag < ApplicationRecord
end
when "upvote"
if CurrentUser.user.is_moderator?
q[:upvote] = User.name_to_id(g2)
if CurrentUser.user.is_admin?
q[:upvote] = User.find_by_name(g2)
elsif CurrentUser.user.is_voter?
q[:upvote] = CurrentUser.user
end
when "downvote"
if CurrentUser.user.is_moderator?
q[:downvote] = User.name_to_id(g2)
if CurrentUser.user.is_admin?
q[:downvote] = User.find_by_name(g2)
elsif CurrentUser.user.is_voter?
q[:downvote] = CurrentUser.user
end
when *COUNT_METATAGS

View File

@@ -85,6 +85,15 @@
</td>
</tr>
<% if CurrentUser.user == user || CurrentUser.user.is_admin? %>
<tr>
<th>Post Votes</th>
<td>
<%= link_to user.post_votes.count, post_votes_path(search: { user_name: user.name }) %>
</td>
</tr>
<% end %>
<tr>
<th>Favorite Groups</th>
<td><%= presenter.favorite_group_count(self) %></td>