diff --git a/app/assets/javascripts/discourse/controllers/user-private-messages.js.es6 b/app/assets/javascripts/discourse/controllers/user-private-messages.js.es6 new file mode 100644 index 00000000000..7b7664e7574 --- /dev/null +++ b/app/assets/javascripts/discourse/controllers/user-private-messages.js.es6 @@ -0,0 +1,25 @@ +import computed from 'ember-addons/ember-computed-decorators'; + +export default Ember.Controller.extend({ + + pmView: false, + + privateMessagesActive: Em.computed.equal('pmView', 'index'), + privateMessagesMineActive: Em.computed.equal('pmView', 'mine'), + privateMessagesUnreadActive: Em.computed.equal('pmView', 'unread'), + isGroup: Em.computed.equal('pmView', 'groups'), + + + @computed('model.groups', 'groupFilter', 'pmView') + groupPMStats(groups, filter, pmView) { + if (groups) { + return groups.filter(group => group.has_messages) + .map(g => { + return { + name: g.name, + active: (g.name === filter && pmView === "groups") + }; + }); + } + } +}); diff --git a/app/assets/javascripts/discourse/controllers/user.js.es6 b/app/assets/javascripts/discourse/controllers/user.js.es6 index 49889e5c023..2985920618e 100644 --- a/app/assets/javascripts/discourse/controllers/user.js.es6 +++ b/app/assets/javascripts/discourse/controllers/user.js.es6 @@ -6,7 +6,6 @@ import User from 'discourse/models/user'; export default Ember.Controller.extend(CanCheckEmails, { indexStream: false, - pmView: false, userActionType: null, needs: ['user-notifications', 'user-topics-list'], @@ -28,11 +27,14 @@ export default Ember.Controller.extend(CanCheckEmails, { }, @computed('viewingSelf', 'currentUser.admin') - canSeePrivateMessages(viewingSelf, isAdmin) { + showPrivateMessages(viewingSelf, isAdmin) { return this.siteSettings.enable_private_messages && (viewingSelf || isAdmin); }, - canSeeNotificationHistory: Em.computed.alias('canSeePrivateMessages'), + @computed('viewingSelf', 'currentUser.admin') + canSeeNotificationHistory(viewingSelf, isAdmin) { + return viewingSelf || isAdmin; + }, @computed("content.badge_count") showBadges(badgeCount) { @@ -45,6 +47,12 @@ export default Ember.Controller.extend(CanCheckEmails, { (userActionType === UserAction.TYPES.messages_received); }, + @computed("indexStream", "userActionType") + showActionTypeSummary(indexStream,userActionType, showPMs) { + return (indexStream || userActionType) && !showPMs; + }, + + @computed() canInviteToForum() { return User.currentProp('can_invite_to_forum'); @@ -64,23 +72,6 @@ export default Ember.Controller.extend(CanCheckEmails, { } }, - privateMessagesActive: Em.computed.equal('pmView', 'index'), - privateMessagesMineActive: Em.computed.equal('pmView', 'mine'), - privateMessagesUnreadActive: Em.computed.equal('pmView', 'unread'), - - @computed('model.private_messages_stats.groups', 'groupFilter', 'pmView') - groupPMStats(stats,filter,pmView) { - if (stats) { - return stats.map(g => { - return { - name: g.name, - count: g.count, - active: (g.name === filter && pmView === 'groups') - }; - }); - } - }, - actions: { expandProfile() { this.set('forceExpand', true); diff --git a/app/assets/javascripts/discourse/mixins/viewing-action-type.js.es6 b/app/assets/javascripts/discourse/mixins/viewing-action-type.js.es6 index 35084dcf1fa..1da5529cd13 100644 --- a/app/assets/javascripts/discourse/mixins/viewing-action-type.js.es6 +++ b/app/assets/javascripts/discourse/mixins/viewing-action-type.js.es6 @@ -3,4 +3,5 @@ export default { this.controllerFor('user').set('userActionType', userActionType); this.controllerFor('user-activity').set('userActionType', userActionType); } + }; diff --git a/app/assets/javascripts/discourse/models/user.js.es6 b/app/assets/javascripts/discourse/models/user.js.es6 index 97c611ab89e..2dbeea5763c 100644 --- a/app/assets/javascripts/discourse/models/user.js.es6 +++ b/app/assets/javascripts/discourse/models/user.js.es6 @@ -199,6 +199,15 @@ const User = RestModel.extend({ ua.action_type === UserAction.TYPES.topics; }, + @computed("groups.@each") + displayGroups() { + const groups = this.get('groups'); + const filtered = groups.filter(group => { + return !group.automatic || group.name === "moderators"; + }); + return filtered.length === 0 ? null : filtered; + }, + // The user's stat count, excluding PMs. @computed("statsExcludingPms.@each.count") statsCountNonPM() { @@ -233,8 +242,8 @@ const User = RestModel.extend({ })); } - if (!Em.isEmpty(json.user.custom_groups)) { - json.user.custom_groups = json.user.custom_groups.map(g => Group.create(g)); + if (!Em.isEmpty(json.user.groups)) { + json.user.groups = json.user.groups.map(g => Group.create(g)); } if (json.user.invited_by) { diff --git a/app/assets/javascripts/discourse/routes/app-route-map.js.es6 b/app/assets/javascripts/discourse/routes/app-route-map.js.es6 index d67e0a78660..39bee49123f 100644 --- a/app/assets/javascripts/discourse/routes/app-route-map.js.es6 +++ b/app/assets/javascripts/discourse/routes/app-route-map.js.es6 @@ -58,13 +58,20 @@ export default function() { this.resource('users'); this.resource('user', { path: '/users/:username' }, function() { this.resource('userActivity', { path: '/activity' }, function() { - _.map(Discourse.UserAction.TYPES, (id, userAction) => { - this.route(userAction, { path: userAction.replace('_', '-') }); - }); + this.route('topics'); + this.route('replies'); + this.route('likesGiven', {path: 'likes-given'}); + this.route('bookmarks'); + }); + + this.resource('userNotifications', {path: '/notifications'}, function(){ + this.route('responses'); + this.route('likesReceived', { path: 'likes-received'}); + this.route('mentions'); + this.route('edits'); }); this.route('badges'); - this.route('notifications'); this.route('flaggedPosts', { path: '/flagged-posts' }); this.route('deletedPosts', { path: '/deleted-posts' }); @@ -85,6 +92,7 @@ export default function() { this.resource('userInvited', { path: '/invited' }, function() { this.route('show', { path: '/:filter' }); }); + }); this.route('signup', {path: '/signup'}); diff --git a/app/assets/javascripts/discourse/routes/build-user-topic-list-route.js.es6 b/app/assets/javascripts/discourse/routes/build-private-messages-route.js.es6 similarity index 92% rename from app/assets/javascripts/discourse/routes/build-user-topic-list-route.js.es6 rename to app/assets/javascripts/discourse/routes/build-private-messages-route.js.es6 index 5704cd96dbf..cef72ed152d 100644 --- a/app/assets/javascripts/discourse/routes/build-user-topic-list-route.js.es6 +++ b/app/assets/javascripts/discourse/routes/build-private-messages-route.js.es6 @@ -24,7 +24,7 @@ export default (viewName, path) => { showParticipants: true }); - this.controllerFor("user").set("pmView", viewName); + this.controllerFor("userPrivateMessages").set("pmView", viewName); this.searchService.set('contextType', 'private_messages'); }, diff --git a/app/assets/javascripts/discourse/routes/user-activity-replies.js.es6 b/app/assets/javascripts/discourse/routes/user-activity-replies.js.es6 index 28e11587f4b..62607c9a164 100644 --- a/app/assets/javascripts/discourse/routes/user-activity-replies.js.es6 +++ b/app/assets/javascripts/discourse/routes/user-activity-replies.js.es6 @@ -2,5 +2,5 @@ import UserActivityStreamRoute from "discourse/routes/user-activity-stream"; import UserAction from "discourse/models/user-action"; export default UserActivityStreamRoute.extend({ - userActionType: UserAction.TYPES["replies"] + userActionType: UserAction.TYPES["posts"] }); diff --git a/app/assets/javascripts/discourse/routes/user-activity.js.es6 b/app/assets/javascripts/discourse/routes/user-activity.js.es6 index 5f217303260..546e135cbef 100644 --- a/app/assets/javascripts/discourse/routes/user-activity.js.es6 +++ b/app/assets/javascripts/discourse/routes/user-activity.js.es6 @@ -1,5 +1,3 @@ -import Draft from 'discourse/models/draft'; - export default Discourse.Route.extend({ model() { return this.modelFor("user"); @@ -7,21 +5,5 @@ export default Discourse.Route.extend({ setupController(controller, user) { this.controllerFor("user-activity").set("model", user); - - // Bring up a draft - const composerController = this.controllerFor("composer"); - controller.set("model", user); - if (this.currentUser) { - Draft.get("new_private_message").then(function(data) { - if (data.draft) { - composerController.open({ - draft: data.draft, - draftKey: "new_private_message", - ignoreIfChanged: true, - draftSequence: data.draft_sequence - }); - } - }); - } } }); diff --git a/app/assets/javascripts/discourse/routes/user-activity-edits.js.es6 b/app/assets/javascripts/discourse/routes/user-notifications-edits.js.es6 similarity index 100% rename from app/assets/javascripts/discourse/routes/user-activity-edits.js.es6 rename to app/assets/javascripts/discourse/routes/user-notifications-edits.js.es6 diff --git a/app/assets/javascripts/discourse/routes/user-notifications-index.js.es6 b/app/assets/javascripts/discourse/routes/user-notifications-index.js.es6 new file mode 100644 index 00000000000..7fb891d6bb0 --- /dev/null +++ b/app/assets/javascripts/discourse/routes/user-notifications-index.js.es6 @@ -0,0 +1,5 @@ +export default Discourse.Route.extend({ + renderTemplate() { + this.render("user/notifications-index"); + } +}); diff --git a/app/assets/javascripts/discourse/routes/user-activity-likes-received.js.es6 b/app/assets/javascripts/discourse/routes/user-notifications-likes-received.js.es6 similarity index 77% rename from app/assets/javascripts/discourse/routes/user-activity-likes-received.js.es6 rename to app/assets/javascripts/discourse/routes/user-notifications-likes-received.js.es6 index a533005648b..7206e7705d7 100644 --- a/app/assets/javascripts/discourse/routes/user-activity-likes-received.js.es6 +++ b/app/assets/javascripts/discourse/routes/user-notifications-likes-received.js.es6 @@ -2,5 +2,5 @@ import UserActivityStreamRoute from "discourse/routes/user-activity-stream"; import UserAction from "discourse/models/user-action"; export default UserActivityStreamRoute.extend({ - userActionType: UserAction.TYPES["likes_received"] + userActionType: UserAction.TYPES["likes_received"], }); diff --git a/app/assets/javascripts/discourse/routes/user-activity-mentions.js.es6 b/app/assets/javascripts/discourse/routes/user-notifications-mentions.js.es6 similarity index 100% rename from app/assets/javascripts/discourse/routes/user-activity-mentions.js.es6 rename to app/assets/javascripts/discourse/routes/user-notifications-mentions.js.es6 diff --git a/app/assets/javascripts/discourse/routes/user-activity-posts.js.es6 b/app/assets/javascripts/discourse/routes/user-notifications-responses.js.es6 similarity index 80% rename from app/assets/javascripts/discourse/routes/user-activity-posts.js.es6 rename to app/assets/javascripts/discourse/routes/user-notifications-responses.js.es6 index 62607c9a164..28e11587f4b 100644 --- a/app/assets/javascripts/discourse/routes/user-activity-posts.js.es6 +++ b/app/assets/javascripts/discourse/routes/user-notifications-responses.js.es6 @@ -2,5 +2,5 @@ import UserActivityStreamRoute from "discourse/routes/user-activity-stream"; import UserAction from "discourse/models/user-action"; export default UserActivityStreamRoute.extend({ - userActionType: UserAction.TYPES["posts"] + userActionType: UserAction.TYPES["replies"] }); diff --git a/app/assets/javascripts/discourse/routes/user-notifications.js.es6 b/app/assets/javascripts/discourse/routes/user-notifications.js.es6 index 7c2384db01b..cfb91acdb7d 100644 --- a/app/assets/javascripts/discourse/routes/user-notifications.js.es6 +++ b/app/assets/javascripts/discourse/routes/user-notifications.js.es6 @@ -1,6 +1,11 @@ import ViewingActionType from "discourse/mixins/viewing-action-type"; export default Discourse.Route.extend(ViewingActionType, { + + renderTemplate() { + this.render('user/notifications'); + }, + actions: { didTransition() { this.controllerFor("user-notifications")._showFooter(); diff --git a/app/assets/javascripts/discourse/routes/user-private-messages-group.js.es6 b/app/assets/javascripts/discourse/routes/user-private-messages-group.js.es6 index 173641b1db7..7e962ee8646 100644 --- a/app/assets/javascripts/discourse/routes/user-private-messages-group.js.es6 +++ b/app/assets/javascripts/discourse/routes/user-private-messages-group.js.es6 @@ -1,5 +1,5 @@ import Group from 'discourse/models/group'; -import createPMRoute from "discourse/routes/build-user-topic-list-route"; +import createPMRoute from "discourse/routes/build-private-messages-route"; export default createPMRoute('groups', 'private-messages-groups').extend({ model(params) { @@ -13,13 +13,13 @@ export default createPMRoute('groups', 'private-messages-groups').extend({ const groupName = _.last(model.get("filter").split('/')); Group.findAll().then(groups => { const group = _.first(groups.filterBy("name", groupName)); - this.controllerFor("user-topics-list").set("group", group); + this.controllerFor("user-private-messages").set("group", group); }); }, setupController(controller, model) { this._super.apply(this, arguments); const group = _.last(model.get("filter").split('/')); - this.controllerFor("user").set("groupFilter", group); + this.controllerFor("userPrivateMessages").set("groupFilter", group); } }); diff --git a/app/assets/javascripts/discourse/routes/user-private-messages-index.js.es6 b/app/assets/javascripts/discourse/routes/user-private-messages-index.js.es6 index 5265bfb6703..d1e2bf3c275 100644 --- a/app/assets/javascripts/discourse/routes/user-private-messages-index.js.es6 +++ b/app/assets/javascripts/discourse/routes/user-private-messages-index.js.es6 @@ -1,3 +1,3 @@ -import createPMRoute from "discourse/routes/build-user-topic-list-route"; +import createPMRoute from "discourse/routes/build-private-messages-route"; export default createPMRoute('index', 'private-messages'); diff --git a/app/assets/javascripts/discourse/routes/user-private-messages-mine.js.es6 b/app/assets/javascripts/discourse/routes/user-private-messages-mine.js.es6 index 47db6999246..b2cf029e5d4 100644 --- a/app/assets/javascripts/discourse/routes/user-private-messages-mine.js.es6 +++ b/app/assets/javascripts/discourse/routes/user-private-messages-mine.js.es6 @@ -1,3 +1,3 @@ -import createPMRoute from "discourse/routes/build-user-topic-list-route"; +import createPMRoute from "discourse/routes/build-private-messages-route"; export default createPMRoute('mine', 'private-messages-sent'); diff --git a/app/assets/javascripts/discourse/routes/user-private-messages-unread.js.es6 b/app/assets/javascripts/discourse/routes/user-private-messages-unread.js.es6 index 19e2a5167d0..062ef732894 100644 --- a/app/assets/javascripts/discourse/routes/user-private-messages-unread.js.es6 +++ b/app/assets/javascripts/discourse/routes/user-private-messages-unread.js.es6 @@ -1,3 +1,3 @@ -import createPMRoute from "discourse/routes/build-user-topic-list-route"; +import createPMRoute from "discourse/routes/build-private-messages-route"; export default createPMRoute('unread', 'private-messages-unread'); diff --git a/app/assets/javascripts/discourse/routes/user-private-messages.js.es6 b/app/assets/javascripts/discourse/routes/user-private-messages.js.es6 index 328a304ca59..b1074f80ae1 100644 --- a/app/assets/javascripts/discourse/routes/user-private-messages.js.es6 +++ b/app/assets/javascripts/discourse/routes/user-private-messages.js.es6 @@ -1,6 +1,35 @@ -import UserActivityRoute from 'discourse/routes/user-activity'; +import Draft from 'discourse/models/draft'; + +export default Discourse.Route.extend({ + + renderTemplate() { + this.render('user/messages'); + }, + + + model() { + return this.modelFor("user"); + }, + + setupController(controller, user) { + this._super(); + // Bring up a draft + const composerController = this.controllerFor("composer"); + controller.set("model", user); + if (this.currentUser) { + Draft.get("new_private_message").then(function(data) { + if (data.draft) { + composerController.open({ + draft: data.draft, + draftKey: "new_private_message", + ignoreIfChanged: true, + draftSequence: data.draft_sequence + }); + } + }); + } + }, -export default UserActivityRoute.extend({ actions: { willTransition: function() { this._super(); diff --git a/app/assets/javascripts/discourse/routes/user-statistics.js.es6 b/app/assets/javascripts/discourse/routes/user-statistics.js.es6 new file mode 100644 index 00000000000..610a1048990 --- /dev/null +++ b/app/assets/javascripts/discourse/routes/user-statistics.js.es6 @@ -0,0 +1,2 @@ +export default Discourse.Route.extend({ +}); diff --git a/app/assets/javascripts/discourse/templates/user-topics-list.hbs b/app/assets/javascripts/discourse/templates/user-topics-list.hbs index a2aae2de1b3..c9462573047 100644 --- a/app/assets/javascripts/discourse/templates/user-topics-list.hbs +++ b/app/assets/javascripts/discourse/templates/user-topics-list.hbs @@ -1,11 +1,3 @@ -