From 7c3e0c6547671dfc3a0426cd67762dca2ce29f48 Mon Sep 17 00:00:00 2001 From: Sam Date: Wed, 1 Mar 2017 16:42:01 -0500 Subject: [PATCH] FEATURE: use topic list format for assigned FEATURE: ability to see assigned messages --- .../assigned-messages-route-map.js.es6 | 6 ++++++ ...s.es6 => assigns-activity-route-map.js.es6} | 0 .../user-messages-nav/assigned-messages.hbs | 3 +++ .../user-messages-nav/assigned-messages.js.es6 | 7 +++++++ .../routes/user-activity-assigned.js.es6 | 9 ++++++--- .../user-private-messages-assigned.js.es6 | 3 +++ plugin.rb | 18 ++++++++++++++++++ 7 files changed, 43 insertions(+), 3 deletions(-) create mode 100644 assets/javascripts/discourse/assigned-messages-route-map.js.es6 rename assets/javascripts/discourse/{assigns-route-map.js.es6 => assigns-activity-route-map.js.es6} (100%) create mode 100644 assets/javascripts/discourse/connectors/user-messages-nav/assigned-messages.hbs create mode 100644 assets/javascripts/discourse/connectors/user-messages-nav/assigned-messages.js.es6 create mode 100644 assets/javascripts/discourse/routes/user-private-messages-assigned.js.es6 diff --git a/assets/javascripts/discourse/assigned-messages-route-map.js.es6 b/assets/javascripts/discourse/assigned-messages-route-map.js.es6 new file mode 100644 index 0000000..32ddd98 --- /dev/null +++ b/assets/javascripts/discourse/assigned-messages-route-map.js.es6 @@ -0,0 +1,6 @@ +export default { + resource: 'user.userPrivateMessages', + map() { + this.route('assigned'); + } +}; diff --git a/assets/javascripts/discourse/assigns-route-map.js.es6 b/assets/javascripts/discourse/assigns-activity-route-map.js.es6 similarity index 100% rename from assets/javascripts/discourse/assigns-route-map.js.es6 rename to assets/javascripts/discourse/assigns-activity-route-map.js.es6 diff --git a/assets/javascripts/discourse/connectors/user-messages-nav/assigned-messages.hbs b/assets/javascripts/discourse/connectors/user-messages-nav/assigned-messages.hbs new file mode 100644 index 0000000..5ec9f87 --- /dev/null +++ b/assets/javascripts/discourse/connectors/user-messages-nav/assigned-messages.hbs @@ -0,0 +1,3 @@ +{{#link-to 'userPrivateMessages.assigned' model}} + {{i18n 'discourse_assign.assigned'}} +{{/link-to}} diff --git a/assets/javascripts/discourse/connectors/user-messages-nav/assigned-messages.js.es6 b/assets/javascripts/discourse/connectors/user-messages-nav/assigned-messages.js.es6 new file mode 100644 index 0000000..eb7b5fc --- /dev/null +++ b/assets/javascripts/discourse/connectors/user-messages-nav/assigned-messages.js.es6 @@ -0,0 +1,7 @@ +export default { + shouldRender(args, component) { + const needsButton = component.currentUser && component.currentUser.get('staff'); + return needsButton && (!component.get('site.mobileView') || args.topic.get('isPrivateMessage')); + } +}; + diff --git a/assets/javascripts/discourse/routes/user-activity-assigned.js.es6 b/assets/javascripts/discourse/routes/user-activity-assigned.js.es6 index a0b2a7e..f59c63c 100644 --- a/assets/javascripts/discourse/routes/user-activity-assigned.js.es6 +++ b/assets/javascripts/discourse/routes/user-activity-assigned.js.es6 @@ -1,6 +1,9 @@ -import UserActivityStreamRoute from "discourse/routes/user-activity-stream"; +import UserTopicListRoute from "discourse/routes/user-topic-list"; -export default UserActivityStreamRoute.extend({ +export default UserTopicListRoute.extend({ userActionType: 16, - noContentHelpKey: "discourse_assigns.no_assigns" + noContentHelpKey: "discourse_assigns.no_assigns", + model: function() { + return this.store.findFiltered('topicList', {filter: 'latest', params: {assigned: this.modelFor('user').get('username_lower') }}); + } }); diff --git a/assets/javascripts/discourse/routes/user-private-messages-assigned.js.es6 b/assets/javascripts/discourse/routes/user-private-messages-assigned.js.es6 new file mode 100644 index 0000000..7d03cdf --- /dev/null +++ b/assets/javascripts/discourse/routes/user-private-messages-assigned.js.es6 @@ -0,0 +1,3 @@ +import createPMRoute from "discourse/routes/build-private-messages-route"; + +export default createPMRoute('assigned', 'private-messages-assigned'); diff --git a/plugin.rb b/plugin.rb index 7bddb6c..6040940 100644 --- a/plugin.rb +++ b/plugin.rb @@ -329,6 +329,22 @@ SQL end end + require_dependency 'topic_query' + class ::TopicQuery + def list_private_messages_assigned(user) + list = private_messages_for(user, :user) + list = list.where("topics.id IN ( + SELECT topic_id FROM topic_custom_fields WHERE name = 'assigned_to_id' AND value = ? + )", user.id.to_s) + create_list(:private_messages, {}, list) + end + end + + require_dependency 'list_controller' + class ::ListController + generate_message_route(:private_messages_assigned) + end + DiscourseAssign::Engine.routes.draw do put "/assign" => "assign#assign" put "/unassign" => "assign#unassign" @@ -336,6 +352,8 @@ SQL Discourse::Application.routes.append do mount ::DiscourseAssign::Engine, at: "/assign" + get "topics/private-messages-assigned/:username" => "list#private_messages_assigned", + as: "topics_private_messages_assigned", constraints: {username: /[\w.\-]+?/} end end