favorites: remove is_favorited attribute from post API.

* Remove the data-is-favorited attribute from post thumbnails.
* Remove the is_favorited attribute from the /posts.json API.
* Remove the fav_string attribute from the /posts.json API (only visible
  to moderators).
* Change `Post#favorited_by?` to not use the fav_string.

Further addresses #4652 by eliminating the last places where fav_string
was used.
This commit is contained in:
evazion
2021-01-03 19:53:11 -06:00
parent 98ee6c31c1
commit de16d31135
7 changed files with 9 additions and 16 deletions

View File

@@ -762,12 +762,11 @@ class Post < ApplicationRecord
update_column(:fav_count, fav_count)
end
def favorited_by?(user_id = CurrentUser.id)
fav_string.match?(/(?:\A| )fav:#{user_id}(?:\Z| )/)
def favorited_by?(user)
return false if user.is_anonymous?
Favorite.exists?(post: self, user: user)
end
alias is_favorited? favorited_by?
def append_user_to_fav_string(user_id)
update_column(:fav_string, (fav_string + " fav:#{user_id}").strip)
clean_fav_string! if clean_fav_string?

View File

@@ -88,11 +88,11 @@ class PostPolicy < ApplicationPolicy
def api_attributes
attributes = super
attributes += [:has_large, :has_visible_children, :is_favorited?]
attributes += [:has_large, :has_visible_children]
attributes += TagCategory.categories.map {|x| "tag_string_#{x}".to_sym}
attributes += [:file_url, :large_file_url, :preview_file_url] if visible?
attributes -= [:id, :md5, :file_ext] if !visible?
attributes -= [:fav_string] if !user.is_moderator?
attributes -= [:fav_string]
attributes
end

View File

@@ -131,7 +131,6 @@ class PostPresenter
"data-source" => post.source,
"data-uploader-id" => post.uploader_id,
"data-normalized-source" => post.normalized_source,
"data-is-favorited" => post.favorited_by?(CurrentUser.user.id)
}
if post.visible?

View File

@@ -38,11 +38,7 @@
<%= link_to recommended_posts_path(search: { post_id: post.id }), class: "more-recommended-posts", "data-post-id": post.id do %>
<%= post.fav_count %>
<% if post.favorited_by?(CurrentUser.id) %>
<i class="fas fa-heart fa-xs"></i>
<% else %>
<i class="far fa-heart fa-xs"></i>
<% end %>
<i class="far fa-heart fa-xs"></i>
<br>more »
<% end %>

View File

@@ -23,10 +23,10 @@
<% if policy(Favorite).create? %>
<li id="post-option-add-to-favorites">
<%= link_to "Favorite", favorites_path(post_id: post.id), remote: true, method: :post, id: "add-to-favorites", "data-shortcut": "f", style: ("display: none;" if @post.is_favorited?) %>
<%= link_to "Favorite", favorites_path(post_id: post.id), remote: true, method: :post, id: "add-to-favorites", "data-shortcut": "f", style: ("display: none;" if @post.favorited_by?(CurrentUser.user)) %>
</li>
<li id="post-option-remove-from-favorites">
<%= link_to "Unfavorite", favorite_path(post), remote: true, method: :delete, id: "remove-from-favorites", "data-shortcut": "shift+f", "data-shortcut-when": ":visible", style: ("display: none;" if !@post.is_favorited?) %>
<%= link_to "Unfavorite", favorite_path(post), remote: true, method: :delete, id: "remove-from-favorites", "data-shortcut": "shift+f", "data-shortcut-when": ":visible", style: ("display: none;" if !@post.favorited_by?(CurrentUser.user)) %>
</li>
<% end %>
<% if policy(post).update? %>

View File

@@ -50,7 +50,7 @@
<% end -%>
<% if policy(Favorite).create? %>
<%= content_tag(:div, class: "fav-buttons fav-buttons-#{@post.is_favorited?}") do %>
<%= content_tag(:div, class: "fav-buttons fav-buttons-#{@post.favorited_by?(CurrentUser.user)}") do %>
<%= form_tag(favorites_path(post_id: @post.id), method: "post", id: "add-fav-button", "data-remote": true) do %>
<%= button_tag tag.i(class: "far fa-heart"), class: "ui-button ui-widget ui-corner-all", "data-disable-with": tag.i(class: "fas fa-spinner fa-spin") %>
<% end %>

View File

@@ -633,7 +633,6 @@ class PostsControllerTest < ActionDispatch::IntegrationTest
assert_response :success
assert_nil(response.parsed_body["md5"])
assert_nil(response.parsed_body["file_url"])
assert_nil(response.parsed_body["fav_string"])
end
end
end