From 95f9788a7722b53164375d0907eaa6dc8cae9132 Mon Sep 17 00:00:00 2001 From: Sam <sam.saffron@gmail.com> Date: Wed, 7 Jan 2015 13:58:34 +1100 Subject: [PATCH] FEATURE: add ?bookmarked=true for topic lists --- app/controllers/list_controller.rb | 1 + lib/topic_query.rb | 13 +++++++++++++ 2 files changed, 14 insertions(+) diff --git a/app/controllers/list_controller.rb b/app/controllers/list_controller.rb index 7d66e4d11..890e2871d 100644 --- a/app/controllers/list_controller.rb +++ b/app/controllers/list_controller.rb @@ -260,6 +260,7 @@ class ListController < ApplicationController min_posts: params[:min_posts], max_posts: params[:max_posts], status: params[:status], + bookmarked: params[:bookmarked].present?, state: params[:state], search: params[:search] } diff --git a/lib/topic_query.rb b/lib/topic_query.rb index 68c109cb2..ccb876927 100644 --- a/lib/topic_query.rb +++ b/lib/topic_query.rb @@ -26,6 +26,7 @@ class TopicQuery state search slow_platform + bookmarked ).map(&:to_sym) # Maps `order` to a columns in `topics` @@ -310,6 +311,18 @@ class TopicQuery end end + if options[:bookmarked] && @user + result = result.where('topics.id IN (SELECT pp.topic_id + FROM post_actions pa + JOIN posts pp ON pp.id = pa.post_id + WHERE pa.user_id = :user_id AND + pa.post_action_type_id = :bookmarked AND + pa.deleted_at IS NULL + )', user_id: @user.id, + bookmarked: PostActionType.types[:bookmark] + ) + end + result = result.where('topics.deleted_at IS NULL') if require_deleted_clause result = result.where('topics.posts_count <= ?', options[:max_posts]) if options[:max_posts].present? result = result.where('topics.posts_count >= ?', options[:min_posts]) if options[:min_posts].present?