Fix #4027: Search for posts favorited by the fav group order.

This commit is contained in:
evazion
2020-04-27 13:11:07 -05:00
parent eda2c519c9
commit e425870c17
3 changed files with 32 additions and 1 deletions

View File

@@ -143,6 +143,7 @@ Autocomplete.initialize_tag_autocomplete = function() {
results = await Autocomplete.pool_source(term, metatag + ":");
break;
case "favgroup":
case "ordfavgroup":
results = await Autocomplete.favorite_group_source(term, metatag + ":", CurrentUser.data("id"));
break;
case "search":

View File

@@ -32,7 +32,7 @@ class PostQueryBuilder
-downvote downvote
-fav fav
-ordfav ordfav
-favgroup favgroup
-favgroup favgroup ordfavgroup
-pool pool ordpool
-commentary commentary
-id id
@@ -207,6 +207,8 @@ class PostQueryBuilder
favgroup_matches(value)
when "-favgroup"
favgroup_matches(value).negate
when "ordfavgroup"
ordfavgroup_matches(value)
when "fav"
favorites_include(value)
when "-fav"
@@ -429,6 +431,13 @@ class PostQueryBuilder
Post.joins("JOIN (#{pool_posts.to_sql}) pool_posts ON pool_posts.post_id = posts.id").order("pool_posts.pool_index ASC")
end
def ordfavgroup_matches(query)
# XXX unify with FavoriteGroup#posts
favgroup = FavoriteGroup.visible(CurrentUser.user).name_or_id_matches(query, CurrentUser.user)
favgroup_posts = favgroup.joins("CROSS JOIN unnest(favorite_groups.post_ids) WITH ORDINALITY AS row(post_id, favgroup_index)").select(:post_id, :favgroup_index)
Post.joins("JOIN (#{favgroup_posts.to_sql}) favgroup_posts ON favgroup_posts.post_id = posts.id").order("favgroup_posts.favgroup_index ASC")
end
def favgroup_matches(query)
favgroup = FavoriteGroup.visible(CurrentUser.user).name_or_id_matches(query, CurrentUser.user)
Post.where(id: favgroup.select("unnest(post_ids)"))