From 79eb9d7086890a8b993ce246410a2a93fd084d60 Mon Sep 17 00:00:00 2001 From: Arpit Jalan Date: Tue, 16 Jan 2018 15:59:22 +0530 Subject: [PATCH] FEATURE: show header search results on search log term details page --- .../routes/admin-search-logs-term.js.es6 | 4 ++ .../admin/templates/search-logs-term.hbs | 49 +++++++++++++++++++ .../stylesheets/common/admin/admin_base.scss | 6 ++- .../admin/search_logs_controller.rb | 2 + config/locales/client.en.yml | 1 + lib/search.rb | 2 +- spec/components/search_spec.rb | 6 +++ spec/requests/admin/search_logs_spec.rb | 1 + .../admin-search-log-term-test.js.es6 | 1 + 9 files changed, 70 insertions(+), 2 deletions(-) diff --git a/app/assets/javascripts/admin/routes/admin-search-logs-term.js.es6 b/app/assets/javascripts/admin/routes/admin-search-logs-term.js.es6 index 65c5c92eeb8..30d6882786b 100644 --- a/app/assets/javascripts/admin/routes/admin-search-logs-term.js.es6 +++ b/app/assets/javascripts/admin/routes/admin-search-logs-term.js.es6 @@ -1,5 +1,6 @@ import { ajax } from 'discourse/lib/ajax'; import { fillMissingDates } from 'discourse/lib/utilities'; +import { translateResults } from "discourse/lib/search"; export default Discourse.Route.extend({ queryParams: { @@ -22,6 +23,9 @@ export default Discourse.Route.extend({ const endDate = moment(json.term.end_date).format('YYYY-MM-DD'); json.term.data = fillMissingDates(json.term.data, startDate, endDate); } + if (json.term.search_result) { + json.term.search_result = translateResults(json.term.search_result) + } const model = Ember.Object.create({ type: "search_log_term" }); model.setProperties(json.term); diff --git a/app/assets/javascripts/admin/templates/search-logs-term.hbs b/app/assets/javascripts/admin/templates/search-logs-term.hbs index c405a86d358..5e640039c34 100644 --- a/app/assets/javascripts/admin/templates/search-logs-term.hbs +++ b/app/assets/javascripts/admin/templates/search-logs-term.hbs @@ -10,4 +10,53 @@ {{#conditional-loading-spinner condition=refreshing}} {{admin-graph model=model}} + +

+

{{i18n "admin.logs.search_logs.header_search_results"}}

+
+ +
+ {{#each model.search_result.posts as |result|}} +
+ + +
+
+ + {{topic-status topic=result.topic disableActions=true}}{{#highlight-text highlight=term}}{{{unbound result.topic.fancyTitle}}}{{/highlight-text}} + + +
+ {{#if result.topic.category.parentCategory}} + {{category-link result.topic.category.parentCategory}} + {{/if}} + {{category-link result.topic.category hideParent=true}} + {{#each result.topic.tags as |tag|}} + {{discourse-tag tag}} + {{/each}} +
+
+ +
+ + {{format-age result.created_at}} + {{#if result.blurb}} + - + {{/if}} + + + {{#if result.blurb}} + {{#highlight-text highlight=term}} + {{{unbound result.blurb}}} + {{/highlight-text}} + {{/if}} +
+
+
+ {{/each}} +
{{/conditional-loading-spinner}} diff --git a/app/assets/stylesheets/common/admin/admin_base.scss b/app/assets/stylesheets/common/admin/admin_base.scss index 2054ba8037a..d4fd7e823c0 100644 --- a/app/assets/stylesheets/common/admin/admin_base.scss +++ b/app/assets/stylesheets/common/admin/admin_base.scss @@ -237,6 +237,10 @@ $mobile-breakpoint: 700px; width: 200px; float: right; } + .header-search-results { + clear: both; + padding: 4px; + } } .admin-container .controls { @@ -368,7 +372,7 @@ $mobile-breakpoint: 700px; } .d-editor-textarea-wrapper { - max-width: 60%; + max-width: 60%; .d-editor-button-bar { overflow: hidden; } diff --git a/app/controllers/admin/search_logs_controller.rb b/app/controllers/admin/search_logs_controller.rb index 4008ba85a7a..bdbfc8f54ec 100644 --- a/app/controllers/admin/search_logs_controller.rb +++ b/app/controllers/admin/search_logs_controller.rb @@ -16,6 +16,8 @@ class Admin::SearchLogsController < Admin::AdminController details = SearchLog.term_details(term, period&.to_sym, search_type&.to_sym) raise Discourse::NotFound if details.blank? + result = Search.execute(params[:term], { guardian: guardian }) + details[:search_result] = serialize_data(result, GroupedSearchResultSerializer, result: result) render_json_dump(term: details) end diff --git a/config/locales/client.en.yml b/config/locales/client.en.yml index f56b2d06330..ff150f7fb31 100644 --- a/config/locales/client.en.yml +++ b/config/locales/client.en.yml @@ -3258,6 +3258,7 @@ en: header: "Header" full_page: "Full Page" click_through_only: "All (click through only)" + header_search_results: "Header Search Results" logster: title: "Error Logs" diff --git a/lib/search.rb b/lib/search.rb index 6f553a49457..30c5b00b996 100644 --- a/lib/search.rb +++ b/lib/search.rb @@ -180,7 +180,7 @@ class Search # Query a term def execute - if SiteSetting.log_search_queries? + if SiteSetting.log_search_queries? && @opts[:search_type].present? status, search_log_id = SearchLog.log( term: @term, search_type: @opts[:search_type], diff --git a/spec/components/search_spec.rb b/spec/components/search_spec.rb index 16cdae30a24..436fabbc238 100644 --- a/spec/components/search_spec.rb +++ b/spec/components/search_spec.rb @@ -915,6 +915,12 @@ describe Search do results = s.execute expect(results.search_log_id).to be_present end + + it "does not log search if search_type is not present" do + s = Search.new('foo bar',ip_address: '127.0.0.1') + results = s.execute + expect(results.search_log_id).not_to be_present + end end context 'pagination' do diff --git a/spec/requests/admin/search_logs_spec.rb b/spec/requests/admin/search_logs_spec.rb index 3a4e2784e95..c6e058a8c88 100644 --- a/spec/requests/admin/search_logs_spec.rb +++ b/spec/requests/admin/search_logs_spec.rb @@ -52,6 +52,7 @@ RSpec.describe Admin::SearchLogsController do json = ::JSON.parse(response.body) expect(json['term']['type']).to eq('search_log_term') + expect(json['term']['search_result']).to be_present end end end diff --git a/test/javascripts/acceptance/admin-search-log-term-test.js.es6 b/test/javascripts/acceptance/admin-search-log-term-test.js.es6 index ed4a1423d07..9d3fbd6b439 100644 --- a/test/javascripts/acceptance/admin-search-log-term-test.js.es6 +++ b/test/javascripts/acceptance/admin-search-log-term-test.js.es6 @@ -6,5 +6,6 @@ QUnit.test("show search log term details", assert => { andThen(() => { assert.ok($('div.search-logs-filter').length, "has the search type filter"); assert.ok(exists('canvas.chartjs-render-monitor'), "has graph canvas"); + assert.ok(exists('div.header-search-results'), "has header search results"); }); });