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
This commit is contained in:
Krzysztof Kotlarek 2021-11-08 08:24:44 +11:00 committed by GitHub
parent 53abcd825d
commit fe8087e523
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 32 additions and 5 deletions

View File

@ -1,6 +1,7 @@
import I18n from "I18n"; import I18n from "I18n";
import { isEmpty } from "@ember/utils"; import { isEmpty } from "@ember/utils";
import { userPath } from "discourse/lib/url"; import { userPath } from "discourse/lib/url";
import { getAbsoluteURL } from "discourse-common/lib/get-url";
const _additionalAttributes = []; const _additionalAttributes = [];
@ -147,6 +148,9 @@ export default function transformPost(
postAtts.linkCounts = post.link_counts; postAtts.linkCounts = post.link_counts;
postAtts.actionCode = post.action_code; postAtts.actionCode = post.action_code;
postAtts.actionCodeWho = post.action_code_who; postAtts.actionCodeWho = post.action_code_who;
postAtts.actionCodeHref = getAbsoluteURL(
post.action_code_href || `/t/${topic.id}`
);
postAtts.topicUrl = topic.get("url"); postAtts.topicUrl = topic.get("url");
postAtts.isSaving = post.isSaving; postAtts.isSaving = post.isSaving;
postAtts.staged = post.staged; postAtts.staged = post.staged;

View File

@ -8,7 +8,7 @@ import { h } from "virtual-dom";
import { iconNode } from "discourse-common/lib/icon-library"; import { iconNode } from "discourse-common/lib/icon-library";
import { userPath } from "discourse/lib/url"; 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 dt = new Date(createdAt);
const when = autoUpdatingRelativeAge(dt, { const when = autoUpdatingRelativeAge(dt, {
format: "medium-with-ago-and-on", format: "medium-with-ago-and-on",
@ -22,7 +22,7 @@ export function actionDescriptionHtml(actionCode, createdAt, username) {
who = `<a class="mention" href="${userPath(username)}">@${username}</a>`; who = `<a class="mention" href="${userPath(username)}">@${username}</a>`;
} }
} }
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) { export function actionDescription(actionCode, createdAt, username) {
@ -131,7 +131,8 @@ export default createWidget("post-small-action", {
const description = actionDescriptionHtml( const description = actionDescriptionHtml(
attrs.actionCode, attrs.actionCode,
new Date(attrs.created_at), new Date(attrs.created_at),
attrs.actionCodeWho attrs.actionCodeWho,
attrs.actionCodeHref
); );
contents.push(new RawHtml({ html: `<p>${description}</p>` })); contents.push(new RawHtml({ html: `<p>${description}</p>` }));

View File

@ -170,6 +170,7 @@ class UserAction < ActiveRecord::Base
action_type action_type
action_code action_code
action_code_who action_code_who
action_code_href
topic_closed topic_closed
topic_id topic_id
topic_archived topic_archived
@ -218,6 +219,7 @@ class UserAction < ActiveRecord::Base
p.post_type, p.post_type,
p.action_code, p.action_code,
pc.value AS action_code_who, pc.value AS action_code_who,
pc2.value AS action_code_href,
p.edit_reason, p.edit_reason,
t.category_id t.category_id
FROM user_actions as a FROM user_actions as a
@ -229,6 +231,7 @@ class UserAction < ActiveRecord::Base
JOIN users au on au.id = a.user_id JOIN users au on au.id = a.user_id
LEFT JOIN categories c on c.id = t.category_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 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*/ /*where*/
/*order_by*/ /*order_by*/
/*offset*/ /*offset*/

View File

@ -79,6 +79,7 @@ class PostSerializer < BasicPostSerializer
:is_auto_generated, :is_auto_generated,
:action_code, :action_code,
:action_code_who, :action_code_who,
:action_code_href,
:notice, :notice,
:last_wiki_edit, :last_wiki_edit,
:locked, :locked,
@ -443,6 +444,14 @@ class PostSerializer < BasicPostSerializer
include_action_code? && action_code_who.present? include_action_code? && action_code_who.present?
end 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 def notice
post_custom_fields[Post::NOTICE] post_custom_fields[Post::NOTICE]
end end

View File

@ -29,6 +29,7 @@ class UserActionSerializer < ApplicationSerializer
:post_type, :post_type,
:action_code, :action_code,
:action_code_who, :action_code_who,
:action_code_href,
:edit_reason, :edit_reason,
:category_id, :category_id,
:closed, :closed,
@ -90,4 +91,12 @@ class UserActionSerializer < ApplicationSerializer
object.action_code_who object.action_code_who
end end
def include_action_code_href?
action_code_href.present?
end
def action_code_href
object.action_code_href
end
end end

View File

@ -53,9 +53,10 @@
<% <%
post_custom_fields = @topic_view.post_custom_fields[post.id] || {} post_custom_fields = @topic_view.post_custom_fields[post.id] || {}
who_username = post_custom_fields["action_code_who"] || "" who_username = post_custom_fields["action_code_who"] || ""
small_action_href = post_custom_fields["action_code_href"] || ""
if post.action_code 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 %> <% end %>
</span> </span>

View File

@ -54,7 +54,7 @@ class TopicView
end end
def self.default_post_custom_fields 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 end
def self.post_custom_fields_allowlisters def self.post_custom_fields_allowlisters