Andrew Kane 8 роки тому
батько
коміт
e6ed47c593

+ 24 - 15
app/controllers/blazer/queries_controller.rb

@@ -5,11 +5,13 @@ module Blazer
     def home
       set_queries(1000)
 
-      @dashboards = Blazer::Dashboard.order(:name)
-      @dashboards = @dashboards.includes(:creator) if Blazer.user_class
-      if params[:filter] == "mine"
+      if params[:filter]
         @dashboards = [] # TODO show my dashboards
+      else
+        @dashboards = Blazer::Dashboard.order(:name)
+        @dashboards = @dashboards.includes(:creator) if Blazer.user_class
       end
+
       @dashboards =
         @dashboards.map do |d|
           {
@@ -241,23 +243,23 @@ module Blazer
     def set_queries(limit = nil)
       @my_queries =
         if limit && blazer_user && !params[:filter]
-          favorite_query_ids = Blazer::Audit.where(user_id: blazer_user.id).where("created_at > ?", 30.days.ago).where("query_id IS NOT NULL").group(:query_id).order("count_all desc").count.keys
-          queries = Blazer::Query.named.where(id: favorite_query_ids)
-          queries = queries.includes(:creator) if Blazer.user_class
-          queries = queries.index_by(&:id)
-          favorite_query_ids.map { |query_id| queries[query_id] }.compact
+          queries_by_ids(Blazer::Audit.where(user_id: blazer_user.id).where("created_at > ?", 30.days.ago).where("query_id IS NOT NULL").group(:query_id).order("count_all desc").count.keys)
         else
           []
         end
 
-      @queries = Blazer::Query.named.order(:name)
-      if params[:filter] == "mine"
-        @queries = @queries.where(creator_id: blazer_user.try(:id)).reorder(updated_at: :desc)
-        limit = nil
+      @queries = Blazer::Query.named
+
+      if blazer_user && params[:filter] == "mine"
+        @queries = @queries.where(creator_id: blazer_user.id).reorder(updated_at: :desc)
+        @queries = @queries.includes(:creator) if Blazer.user_class
+      elsif blazer_user && params[:filter] == "viewed"
+        @queries = queries_by_ids(Blazer::Audit.where(user_id: blazer_user.id).order(created_at: :desc).limit(500).pluck(:query_id).uniq)
+      else
+        @queries = @queries.where("id NOT IN (?)", @my_queries.map(&:id)) if @my_queries.any?
+        @queries = @queries.limit(limit) if limit
+        @queries = @queries.order(:name)
       end
-      @queries = @queries.where("id NOT IN (?)", @my_queries.map(&:id)) if @my_queries.any?
-      @queries = @queries.includes(:creator) if Blazer.user_class
-      @queries = @queries.limit(limit) if limit
       @queries = @queries.to_a
 
       @more = limit && @queries.size >= limit
@@ -276,6 +278,13 @@ module Blazer
         end
     end
 
+    def queries_by_ids(favorite_query_ids)
+      queries = Blazer::Query.named.where(id: favorite_query_ids)
+      queries = queries.includes(:creator) if Blazer.user_class
+      queries = queries.index_by(&:id)
+      favorite_query_ids.map { |query_id| queries[query_id] }.compact
+    end
+
     def set_query
       @query = Blazer::Query.find(params[:id].to_s.split("-").first)
     end

+ 9 - 2
app/views/blazer/queries/home.html.erb

@@ -1,8 +1,15 @@
 <div id="queries">
   <div id="header" style="margin-bottom: 20px;">
     <div class="pull-right">
-      <%= link_to "All", root_path, class: params[:filter] != "mine" ? "active" : nil, style: "margin-right: 40px;" %>
-      <%= link_to "Mine", root_path(filter: "mine"), class: params[:filter] == "mine" ? "active" : nil, style: "margin-right: 40px;" %>
+      <% if blazer_user %>
+        <%= link_to "All", root_path, class: !params[:filter] ? "active" : nil, style: "margin-right: 40px;" %>
+
+        <% if Blazer.audit %>
+          <%= link_to "Viewed", root_path(filter: "viewed"), class: params[:filter] == "viewed" ? "active" : nil, style: "margin-right: 40px;" %>
+        <% end %>
+
+        <%= link_to "Mine", root_path(filter: "mine"), class: params[:filter] == "mine" ? "active" : nil, style: "margin-right: 40px;" %>
+      <% end %>
       <div class="btn-group">
         <%= link_to "New Query", new_query_path, class: "btn btn-info" %>
         <button type="button" class="btn btn-info dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">