From c7253f1d3839ac7b30269787e321afc7f2a04b9a Mon Sep 17 00:00:00 2001 From: Sam Saffron Date: Fri, 10 Feb 2017 17:45:22 -0500 Subject: [PATCH] Add panel that shows who topic is assigned to --- .../assign-button.hbs | 0 .../assign-button.js.es6 | 0 .../controllers/assign-user.js.es6 | 0 .../initializers/extend-for-assigns.js.es6 | 14 ++++++++ config/locales/client.en.yml | 1 + plugin.rb | 32 +++++++++++++++++++ 6 files changed, 47 insertions(+) rename assets/javascripts/{templates => discourse}/connectors/topic-footer-main-buttons-before-create/assign-button.hbs (100%) rename assets/javascripts/{ => discourse}/connectors/topic-footer-main-buttons-before-create/assign-button.js.es6 (100%) rename assets/javascripts/{ => discourse}/controllers/assign-user.js.es6 (100%) diff --git a/assets/javascripts/templates/connectors/topic-footer-main-buttons-before-create/assign-button.hbs b/assets/javascripts/discourse/connectors/topic-footer-main-buttons-before-create/assign-button.hbs similarity index 100% rename from assets/javascripts/templates/connectors/topic-footer-main-buttons-before-create/assign-button.hbs rename to assets/javascripts/discourse/connectors/topic-footer-main-buttons-before-create/assign-button.hbs diff --git a/assets/javascripts/connectors/topic-footer-main-buttons-before-create/assign-button.js.es6 b/assets/javascripts/discourse/connectors/topic-footer-main-buttons-before-create/assign-button.js.es6 similarity index 100% rename from assets/javascripts/connectors/topic-footer-main-buttons-before-create/assign-button.js.es6 rename to assets/javascripts/discourse/connectors/topic-footer-main-buttons-before-create/assign-button.js.es6 diff --git a/assets/javascripts/controllers/assign-user.js.es6 b/assets/javascripts/discourse/controllers/assign-user.js.es6 similarity index 100% rename from assets/javascripts/controllers/assign-user.js.es6 rename to assets/javascripts/discourse/controllers/assign-user.js.es6 diff --git a/assets/javascripts/discourse/initializers/extend-for-assigns.js.es6 b/assets/javascripts/discourse/initializers/extend-for-assigns.js.es6 index a18bca1..c4d3ef3 100644 --- a/assets/javascripts/discourse/initializers/extend-for-assigns.js.es6 +++ b/assets/javascripts/discourse/initializers/extend-for-assigns.js.es6 @@ -2,6 +2,20 @@ import { withPluginApi } from 'discourse/lib/plugin-api'; function initialize(api) { api.addPostSmallActionIcon('assigned','user-plus'); + + api.decorateWidget('post-contents:after-cooked', dec => { + if (dec.attrs.post_number === 1) { + const postModel = dec.getModel(); + if (postModel) { + const assignedToUser = postModel.get('topic.assigned_to_user'); + if (assignedToUser) { + const html = I18n.t('discourse_assign.assign_html', assignedToUser); + //const topic = postModel.get('topic'); + return dec.rawHtml(html); + } + } + } + }); }; export default { diff --git a/config/locales/client.en.yml b/config/locales/client.en.yml index a920f8d..bf20203 100644 --- a/config/locales/client.en.yml +++ b/config/locales/client.en.yml @@ -3,6 +3,7 @@ en: action_codes: assigned: "assigned" discourse_assign: + assign_html: "

Assigned to: @{{username}}

" assign_notification: "

{{username}} {{description}}

" assign: title: "Assign" diff --git a/plugin.rb b/plugin.rb index e89fbd6..e0937ed 100644 --- a/plugin.rb +++ b/plugin.rb @@ -66,6 +66,38 @@ after_initialize do render json: success_json end + require_dependency 'topic_view_serializer' + class ::TopicViewSerializer + attributes :assigned_to_user + + def assigned_to_user + if user = User.find_by(id: assigned_to_user_id) + + assigned_at = TopicCustomField.where( + topic_id: object.topic.id, + name: "assigned_to_id" + ).pluck(:created_at).first + + { + username: user.username, + name: user.name, + avatar_template: user.avatar_template, + assigned_at: assigned_at + } + end + end + + def include_assigned_to_user? + assigned_to_user_id + end + + def assigned_to_user_id + id = object.topic.custom_fields["assigned_to_id"] + # a bit messy but race conditions can give us an array here, avoid + id && id.to_i rescue nil + end + end + DiscourseAssign::Engine.routes.draw do put "/assign" => "assign#assign" end