From fe8087e5233172e4a53063a492d185fd4d8e5179 Mon Sep 17 00:00:00 2001 From: Krzysztof Kotlarek Date: Mon, 8 Nov 2021 08:24:44 +1100 Subject: [PATCH] FEATURE: small action post accepts href (#14816) Optionally add href to small action. It can be used by discourse-assign to link to correct post from translation --- .../javascripts/discourse/app/lib/transform-post.js | 4 ++++ .../discourse/app/widgets/post-small-action.js | 7 ++++--- app/models/user_action.rb | 3 +++ app/serializers/post_serializer.rb | 9 +++++++++ app/serializers/user_action_serializer.rb | 9 +++++++++ app/views/topics/show.html.erb | 3 ++- lib/topic_view.rb | 2 +- 7 files changed, 32 insertions(+), 5 deletions(-) diff --git a/app/assets/javascripts/discourse/app/lib/transform-post.js b/app/assets/javascripts/discourse/app/lib/transform-post.js index d1463a9635d..6424749cc3f 100644 --- a/app/assets/javascripts/discourse/app/lib/transform-post.js +++ b/app/assets/javascripts/discourse/app/lib/transform-post.js @@ -1,6 +1,7 @@ import I18n from "I18n"; import { isEmpty } from "@ember/utils"; import { userPath } from "discourse/lib/url"; +import { getAbsoluteURL } from "discourse-common/lib/get-url"; const _additionalAttributes = []; @@ -147,6 +148,9 @@ export default function transformPost( postAtts.linkCounts = post.link_counts; postAtts.actionCode = post.action_code; postAtts.actionCodeWho = post.action_code_who; + postAtts.actionCodeHref = getAbsoluteURL( + post.action_code_href || `/t/${topic.id}` + ); postAtts.topicUrl = topic.get("url"); postAtts.isSaving = post.isSaving; postAtts.staged = post.staged; diff --git a/app/assets/javascripts/discourse/app/widgets/post-small-action.js b/app/assets/javascripts/discourse/app/widgets/post-small-action.js index 76f1b950654..d5fdba6fc29 100644 --- a/app/assets/javascripts/discourse/app/widgets/post-small-action.js +++ b/app/assets/javascripts/discourse/app/widgets/post-small-action.js @@ -8,7 +8,7 @@ import { h } from "virtual-dom"; import { iconNode } from "discourse-common/lib/icon-library"; import { userPath } from "discourse/lib/url"; -export function actionDescriptionHtml(actionCode, createdAt, username) { +export function actionDescriptionHtml(actionCode, createdAt, username, href) { const dt = new Date(createdAt); const when = autoUpdatingRelativeAge(dt, { format: "medium-with-ago-and-on", @@ -22,7 +22,7 @@ export function actionDescriptionHtml(actionCode, createdAt, username) { who = `@${username}`; } } - return I18n.t(`action_codes.${actionCode}`, { who, when }).htmlSafe(); + return I18n.t(`action_codes.${actionCode}`, { who, when, href }).htmlSafe(); } export function actionDescription(actionCode, createdAt, username) { @@ -131,7 +131,8 @@ export default createWidget("post-small-action", { const description = actionDescriptionHtml( attrs.actionCode, new Date(attrs.created_at), - attrs.actionCodeWho + attrs.actionCodeWho, + attrs.actionCodeHref ); contents.push(new RawHtml({ html: `

${description}

` })); diff --git a/app/models/user_action.rb b/app/models/user_action.rb index c512c1cef3b..2e8d564c5f5 100644 --- a/app/models/user_action.rb +++ b/app/models/user_action.rb @@ -170,6 +170,7 @@ class UserAction < ActiveRecord::Base action_type action_code action_code_who + action_code_href topic_closed topic_id topic_archived @@ -218,6 +219,7 @@ class UserAction < ActiveRecord::Base p.post_type, p.action_code, pc.value AS action_code_who, + pc2.value AS action_code_href, p.edit_reason, t.category_id FROM user_actions as a @@ -229,6 +231,7 @@ class UserAction < ActiveRecord::Base JOIN users au on au.id = a.user_id LEFT JOIN categories c on c.id = t.category_id LEFT JOIN post_custom_fields pc ON pc.post_id = a.target_post_id AND pc.name = 'action_code_who' + LEFT JOIN post_custom_fields pc2 ON pc2.post_id = a.target_post_id AND pc.name = 'action_code_href' /*where*/ /*order_by*/ /*offset*/ diff --git a/app/serializers/post_serializer.rb b/app/serializers/post_serializer.rb index ec1f656a778..a397aa6a9ff 100644 --- a/app/serializers/post_serializer.rb +++ b/app/serializers/post_serializer.rb @@ -79,6 +79,7 @@ class PostSerializer < BasicPostSerializer :is_auto_generated, :action_code, :action_code_who, + :action_code_href, :notice, :last_wiki_edit, :locked, @@ -443,6 +444,14 @@ class PostSerializer < BasicPostSerializer include_action_code? && action_code_who.present? end + def action_code_href + post_custom_fields["action_code_href"] + end + + def include_action_code_href? + include_action_code? && action_code_href.present? + end + def notice post_custom_fields[Post::NOTICE] end diff --git a/app/serializers/user_action_serializer.rb b/app/serializers/user_action_serializer.rb index a218ae83660..25bbcac8c9b 100644 --- a/app/serializers/user_action_serializer.rb +++ b/app/serializers/user_action_serializer.rb @@ -29,6 +29,7 @@ class UserActionSerializer < ApplicationSerializer :post_type, :action_code, :action_code_who, + :action_code_href, :edit_reason, :category_id, :closed, @@ -90,4 +91,12 @@ class UserActionSerializer < ApplicationSerializer object.action_code_who end + def include_action_code_href? + action_code_href.present? + end + + def action_code_href + object.action_code_href + end + end diff --git a/app/views/topics/show.html.erb b/app/views/topics/show.html.erb index c1957ea31f6..5ea3117d653 100644 --- a/app/views/topics/show.html.erb +++ b/app/views/topics/show.html.erb @@ -53,9 +53,10 @@ <% post_custom_fields = @topic_view.post_custom_fields[post.id] || {} who_username = post_custom_fields["action_code_who"] || "" + small_action_href = post_custom_fields["action_code_href"] || "" if post.action_code %> - <%= t("js.action_codes.#{post.action_code}", when: "", who: who_username).html_safe %> + <%= t("js.action_codes.#{post.action_code}", when: "", who: who_username, href: small_action_href).html_safe %> <% end %> diff --git a/lib/topic_view.rb b/lib/topic_view.rb index 7892c2db580..57ef0b2d63a 100644 --- a/lib/topic_view.rb +++ b/lib/topic_view.rb @@ -54,7 +54,7 @@ class TopicView end def self.default_post_custom_fields - @default_post_custom_fields ||= [Post::NOTICE, "action_code_who"] + @default_post_custom_fields ||= [Post::NOTICE, "action_code_who", "action_code_href"] end def self.post_custom_fields_allowlisters