From 54dc2b06ca3b5590d10e70ca665a36ad14da4e73 Mon Sep 17 00:00:00 2001 From: Sam Date: Fri, 2 Nov 2018 10:15:05 +1100 Subject: [PATCH] clean up previous commit that adds answer metadata --- plugin.rb | 67 ++++++++++++++++++++++++++----------------------------- 1 file changed, 32 insertions(+), 35 deletions(-) diff --git a/plugin.rb b/plugin.rb index 5db34d0..0c8fc79 100644 --- a/plugin.rb +++ b/plugin.rb @@ -213,22 +213,32 @@ SQL end def before_head_close_meta(controller) - return "" if not controller.instance_of? TopicsController - topic = Topic.with_deleted.where(id: controller.params[:topic_id]).first - return "" if not controller.guardian.allow_accepted_answers_on_category?(topic.category_id) - first_post = topic.first_post - question_json = { - '@type' => 'Question', - 'name' => topic&.title, - 'text' => first_post&.raw, - 'upvoteCount' => first_post&.like_count, - 'answerCount' => topic&.reply_count, - 'dateCreated' => first_post&.created_at, - 'author' => { - '@type' => 'Person', - 'name' => first_post&.user&.username + return "" if !controller.instance_of? TopicsController + + topic_view = controller.instance_variable_get(:@topic_view) + topic = topic_view&.topic + return "" if !topic + # note, we have canonicals so we only do this for page 1 at the moment + # it can get confusing to have this on every page and it should make page 1 + # a bit more prominent + cut down on pointless work + return "" if topic_view.post_number != 1 + return "" if !controller.guardian.allow_accepted_answers_on_category?(topic.category_id) + + if first_post = topic_view.posts&.first + question_json = { + '@type' => 'Question', + 'name' => topic.title, + 'text' => first_post.excerpt, + 'upvoteCount' => first_post.like_count, + 'answerCount' => topic.reply_count, + 'dateCreated' => topic.created_at, + 'author' => { + '@type' => 'Person', + 'name' => topic.user&.name + } } - } + end + page_json = { '@type' => 'QAPage', 'name' => topic&.title, @@ -236,37 +246,24 @@ SQL if accepted_answer = Post.find_by(id: topic.custom_fields["accepted_answer_post_id"]) question_json[:acceptedAnswer] = { '@type' => 'Answer', - 'text' => accepted_answer&.raw, - 'upvoteCount' => accepted_answer&.like_count, - 'dateCreated' => accepted_answer&.created_at, - 'url' => accepted_answer&.full_url, + 'text' => accepted_answer.excerpt, + 'upvoteCount' => accepted_answer.like_count, + 'dateCreated' => accepted_answer.created_at, + 'url' => accepted_answer.full_url, 'author' => { '@type' => 'Person', - 'name' => accepted_answer&.user&.username - } - } - end - suggested_answer = Post.find_by(topic_id: topic.id, post_number: controller.params[:post_number]) - if suggested_answer && suggested_answer.post_number != 1 - question_json[:suggestedAnswer] = { - '@type' => 'Answer', - 'text' => suggested_answer&.raw, - 'upvoteCount' => suggested_answer&.like_count, - 'dateCreated' => suggested_answer&.created_at, - 'url' => suggested_answer&.full_url, - 'author' => { - '@type' => 'Person', - 'name' => suggested_answer&.user&.username + 'name' => accepted_answer.user&.username } } end + [''].join("") + ).gsub("'].join("") end register_html_builder('server:before-head-close-crawler') do |controller|