Merge pull request #11 from discourse/split_out_archived_assigned_topics

FEATURE: Add `archive` tab for assigned topics.
This commit is contained in:
Guo Xiang Tan 2017-12-01 11:29:55 +08:00 committed by GitHub
commit b92988a586
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
8 changed files with 140 additions and 5 deletions

View File

@ -1,6 +1,7 @@
export default {
resource: 'user.userPrivateMessages',
map() {
this.route('assigned');
this.route('assigned');
this.route('assignedArchived');
}
};

View File

@ -0,0 +1,3 @@
{{#link-to 'userPrivateMessages.assignedArchived' model}}
{{i18n 'user.messages.archive'}}
{{/link-to}}

View File

@ -0,0 +1,11 @@
import { shouldShowAssigned } from "discourse/plugins/discourse-assign/discourse-assign/connectors/user-messages-nav/assigned-messages";
export default {
setupComponent() {
this.set('classNames', ['archive']);
},
shouldRender(args, component) {
return shouldShowAssigned(args, component);
}
};

View File

@ -1,3 +1,4 @@
{{#link-to 'userPrivateMessages.assigned' model}}
{{d-icon "user-plus" class="glyph"}}
{{i18n 'discourse_assign.assigned'}}
{{/link-to}}

View File

@ -1,6 +1,10 @@
export function shouldShowAssigned(args, component) {
const needsButton = component.currentUser && component.currentUser.get('staff');
return needsButton && (!component.get('site.mobileView') || args.model.get('isPrivateMessage'));
}
export default {
shouldRender(args, component) {
const needsButton = component.currentUser && component.currentUser.get('staff');
return needsButton && (!component.get('site.mobileView') || args.model.get('isPrivateMessage'));
return shouldShowAssigned(args, component);
}
};

View File

@ -0,0 +1,10 @@
import createPMRoute from "discourse/routes/build-private-messages-route";
export default createPMRoute('assignedArchived', 'private-messages-assigned').extend({
model() {
return this.store.findFiltered("topicList", {
filter: `topics/private-messages-assigned/${this.modelFor("user").get("username_lower")}`,
params: { status: "archived" }
});
}
});

View File

@ -115,9 +115,24 @@ after_initialize do
add_to_class(:topic_query, :list_private_messages_assigned) do |user|
list = private_messages_for(user, :all)
list = list.where("topics.id IN (
user_id = user.id.to_s
list = list
.joins("LEFT JOIN group_archived_messages gm ON gm.topic_id = topics.id")
.joins("
LEFT JOIN user_archived_messages um ON um.topic_id = topics.id AND um.user_id = #{user_id}
")
.where("topics.id IN (
SELECT topic_id FROM topic_custom_fields WHERE name = 'assigned_to_id' AND value = ?
)", user.id.to_s)
)", user_id)
list =
if @options[:status] == "archived"
list.where("gm.topic_id IS NOT NULL OR um.topic_id IS NOT NULL")
else
list.where("gm.topic_id IS NULL AND um.topic_id IS NULL")
end
create_list(:private_messages, {}, list)
end

View File

@ -0,0 +1,90 @@
require 'rails_helper'
describe TopicQuery do
describe '#list_private_messages_assigned' do
let(:user) { Fabricate(:user) }
let(:user2) { Fabricate(:user) }
let(:user_topic) do
Fabricate(:private_message_topic,
topic_allowed_users: [
Fabricate.build(:topic_allowed_user, user: user),
Fabricate.build(:topic_allowed_user, user: user2)
],
posts: [Fabricate(:post)]
)
end
let(:assigned_topic) do
topic = Fabricate(:private_message_topic,
topic_allowed_users: [
Fabricate.build(:topic_allowed_user, user: user),
Fabricate.build(:topic_allowed_user, user: user2)
],
posts: [Fabricate(:post)]
)
TopicAssigner.new(topic, user).assign(user)
topic
end
let(:group) { Fabricate(:group).add(user) }
let(:group_assigned_topic) do
topic = Fabricate(:private_message_topic,
topic_allowed_users: [],
topic_allowed_groups: [
Fabricate.build(:topic_allowed_group, group: group)
],
posts: [Fabricate(:post)]
)
TopicAssigner.new(topic, user).assign(user)
topic
end
let(:options) { { status: 'archived' } }
before do
SiteSetting.assign_enabled = true
user_topic
assigned_topic
group_assigned_topic
end
it 'should return the right topics' do
expect(TopicQuery.new(user).list_private_messages_assigned(user).topics)
.to contain_exactly(assigned_topic, group_assigned_topic)
UserArchivedMessage.archive!(user2.id, assigned_topic.id)
expect(
TopicQuery.new(user).list_private_messages_assigned(user).topics
).to contain_exactly(assigned_topic, group_assigned_topic)
expect(
TopicQuery.new(user, options).list_private_messages_assigned(user).topics
).to eq([])
UserArchivedMessage.archive!(user.id, assigned_topic.id)
expect(
TopicQuery.new(user).list_private_messages_assigned(user).topics
).to contain_exactly(group_assigned_topic)
expect(
TopicQuery.new(user, options).list_private_messages_assigned(user).topics
).to contain_exactly(assigned_topic)
GroupArchivedMessage.archive!(group.id, group_assigned_topic.id)
expect(
TopicQuery.new(user).list_private_messages_assigned(user).topics
).to eq([])
expect(
TopicQuery.new(user, options).list_private_messages_assigned(user).topics
).to contain_exactly(assigned_topic, group_assigned_topic)
end
end
end