From 5e1e1b2c13247703df1fdcbd321ba7b0e70a4c3f Mon Sep 17 00:00:00 2001 From: Blade Barringer Date: Thu, 4 Dec 2014 21:42:41 -0600 Subject: [PATCH 01/81] Flag icon opens blank modal --- public/js/controllers/groupsCtrl.js | 5 +++++ views/options/social/chat-message.jade | 2 ++ views/shared/modals/members.jade | 7 ++++++- 3 files changed, 13 insertions(+), 1 deletion(-) diff --git a/public/js/controllers/groupsCtrl.js b/public/js/controllers/groupsCtrl.js index a9f744839c..b823f0cb84 100644 --- a/public/js/controllers/groupsCtrl.js +++ b/public/js/controllers/groupsCtrl.js @@ -105,6 +105,11 @@ habitrpg.controller("GroupsCtrl", ['$scope', '$rootScope', 'Shared', 'Groups', ' $rootScope.openModal('private-message',{controller:'MemberModalCtrl'}); }); } + $scope.flagChat = function(uid) { + Members.selectMember(uid, function(){ + $rootScope.openModal('flag',{controller:'MemberModalCtrl'}); + }); + } } ]) diff --git a/views/options/social/chat-message.jade b/views/options/social/chat-message.jade index 120dc2de42..7cbeb87ed0 100644 --- a/views/options/social/chat-message.jade +++ b/views/options/social/chat-message.jade @@ -25,6 +25,8 @@ mixin chatMessages(inbox) |         a(ng-click='#{inbox? "user.ops.deletePM({params:{id:message.$key}})" : "deleteChatMessage(group, message)"}', ng-if='#{inbox ? "true" : ":: user.contributor.admin || message.uuid == user.id"}') span.glyphicon.glyphicon-trash(tooltip=env.t('delete')) + a(ng-click="flagChat(message.uuid)", ng-if='#{inbox ? "true" : ":: message.uuid != user.id"}') + span.glyphicon.glyphicon-flag(tooltip=env.t('flag')) span.float-label a.label.label-default.chat-message(ng-if=':: message.user', ng-class='::userLevelStyleFromLevel(message.contributor.level, message.backer.npc, style)', ng-click='clickMember(message.uuid, true)') span.glyphicon.glyphicon-arrow-right(ng-if='::message.sent') diff --git a/views/shared/modals/members.jade b/views/shared/modals/members.jade index 595929c819..f2ab1607e7 100644 --- a/views/shared/modals/members.jade +++ b/views/shared/modals/members.jade @@ -88,4 +88,9 @@ script(type='text/ng-template', id='modals/send-gift.html') button.btn.btn-primary(ng-show=fromBal, ng-click='sendGift(profile._id, gift)')=env.t("send") a.btn.btn-primary(ng-hide=fromBal, ng-click='Payments.showStripe({gift:gift, uuid:profile._id})')=env.t('card') a.btn.btn-warning(ng-hide=fromBal, href='/paypal/checkout?_id={{::user._id}}&apiToken={{::user.apiToken}}&gift={{Payments.encodeGift(profile._id, gift)}}') PayPal - button.btn.btn-default(ng-click='$close()')=env.t('cancel') \ No newline at end of file + button.btn.btn-default(ng-click='$close()')=env.t('cancel') + +script(type='text/ng-template', id='modals/flag.html') + .modal-header + .modal-body + .modal-footer From 00abb168a122cbc594ee4592907eb48ff0109938 Mon Sep 17 00:00:00 2001 From: Blade Barringer Date: Thu, 4 Dec 2014 21:57:32 -0600 Subject: [PATCH 02/81] Added heading and body of flag modal --- views/shared/modals/members.jade | 2 ++ 1 file changed, 2 insertions(+) diff --git a/views/shared/modals/members.jade b/views/shared/modals/members.jade index f2ab1607e7..afcdd250cb 100644 --- a/views/shared/modals/members.jade +++ b/views/shared/modals/members.jade @@ -92,5 +92,7 @@ script(type='text/ng-template', id='modals/send-gift.html') script(type='text/ng-template', id='modals/flag.html') .modal-header + h4=env.t('flagModalHeading', {name: "{{profile.profile.name}}"}) .modal-body + h4!=env.t('flagModalBody', {firstLinkStart: "", secondLinkStart: "", linkEnd: ""}) .modal-footer From 6fcf1846b3d42c59f5c376af0dab13cbfd1c6520 Mon Sep 17 00:00:00 2001 From: Blade Barringer Date: Thu, 4 Dec 2014 22:00:48 -0600 Subject: [PATCH 03/81] Renamed everything from flag to abuseFlag --- public/js/controllers/groupsCtrl.js | 2 +- views/shared/modals/members.jade | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/public/js/controllers/groupsCtrl.js b/public/js/controllers/groupsCtrl.js index b823f0cb84..ec1897451e 100644 --- a/public/js/controllers/groupsCtrl.js +++ b/public/js/controllers/groupsCtrl.js @@ -107,7 +107,7 @@ habitrpg.controller("GroupsCtrl", ['$scope', '$rootScope', 'Shared', 'Groups', ' } $scope.flagChat = function(uid) { Members.selectMember(uid, function(){ - $rootScope.openModal('flag',{controller:'MemberModalCtrl'}); + $rootScope.openModal('abuse-flag',{controller:'MemberModalCtrl'}); }); } } diff --git a/views/shared/modals/members.jade b/views/shared/modals/members.jade index afcdd250cb..c08064cbf4 100644 --- a/views/shared/modals/members.jade +++ b/views/shared/modals/members.jade @@ -90,9 +90,9 @@ script(type='text/ng-template', id='modals/send-gift.html') a.btn.btn-warning(ng-hide=fromBal, href='/paypal/checkout?_id={{::user._id}}&apiToken={{::user.apiToken}}&gift={{Payments.encodeGift(profile._id, gift)}}') PayPal button.btn.btn-default(ng-click='$close()')=env.t('cancel') -script(type='text/ng-template', id='modals/flag.html') +script(type='text/ng-template', id='modals/abuse-flag.html') .modal-header - h4=env.t('flagModalHeading', {name: "{{profile.profile.name}}"}) + h4=env.t('abuseFlagModalHeading', {name: "{{profile.profile.name}}"}) .modal-body - h4!=env.t('flagModalBody', {firstLinkStart: "", secondLinkStart: "", linkEnd: ""}) + h4!=env.t('abuseFlagModalBody', {firstLinkStart: "", secondLinkStart: "", linkEnd: ""}) .modal-footer From 01c0ce172257d36e19f9dc2108887f3d25fcc1c0 Mon Sep 17 00:00:00 2001 From: Blade Barringer Date: Thu, 4 Dec 2014 22:02:34 -0600 Subject: [PATCH 04/81] Added text-danger span on username --- views/shared/modals/members.jade | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/views/shared/modals/members.jade b/views/shared/modals/members.jade index c08064cbf4..0b72234771 100644 --- a/views/shared/modals/members.jade +++ b/views/shared/modals/members.jade @@ -92,7 +92,7 @@ script(type='text/ng-template', id='modals/send-gift.html') script(type='text/ng-template', id='modals/abuse-flag.html') .modal-header - h4=env.t('abuseFlagModalHeading', {name: "{{profile.profile.name}}"}) + h4!=env.t('abuseFlagModalHeading', {name: "{{profile.profile.name}}"}) .modal-body h4!=env.t('abuseFlagModalBody', {firstLinkStart: "", secondLinkStart: "", linkEnd: ""}) .modal-footer From c90ea166d45548dd695de7bb3732418e03cc2788 Mon Sep 17 00:00:00 2001 From: Blade Barringer Date: Thu, 4 Dec 2014 22:03:35 -0600 Subject: [PATCH 05/81] Corrected tooltip name --- views/options/social/chat-message.jade | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/views/options/social/chat-message.jade b/views/options/social/chat-message.jade index 7cbeb87ed0..077bec02fc 100644 --- a/views/options/social/chat-message.jade +++ b/views/options/social/chat-message.jade @@ -26,7 +26,7 @@ mixin chatMessages(inbox) a(ng-click='#{inbox? "user.ops.deletePM({params:{id:message.$key}})" : "deleteChatMessage(group, message)"}', ng-if='#{inbox ? "true" : ":: user.contributor.admin || message.uuid == user.id"}') span.glyphicon.glyphicon-trash(tooltip=env.t('delete')) a(ng-click="flagChat(message.uuid)", ng-if='#{inbox ? "true" : ":: message.uuid != user.id"}') - span.glyphicon.glyphicon-flag(tooltip=env.t('flag')) + span.glyphicon.glyphicon-flag(tooltip=env.t('abuseFlag')) span.float-label a.label.label-default.chat-message(ng-if=':: message.user', ng-class='::userLevelStyleFromLevel(message.contributor.level, message.backer.npc, style)', ng-click='clickMember(message.uuid, true)') span.glyphicon.glyphicon-arrow-right(ng-if='::message.sent') From 62d92db33264abae175d4abdcbf59ffdab647b0e Mon Sep 17 00:00:00 2001 From: Blade Barringer Date: Fri, 5 Dec 2014 06:41:40 -0600 Subject: [PATCH 06/81] Added buttons to footer, cleaned up functions --- public/js/controllers/groupsCtrl.js | 14 +++++++++++--- views/options/social/chat-message.jade | 2 +- views/shared/modals/members.jade | 2 ++ 3 files changed, 14 insertions(+), 4 deletions(-) diff --git a/public/js/controllers/groupsCtrl.js b/public/js/controllers/groupsCtrl.js index ec1897451e..63933e4fe7 100644 --- a/public/js/controllers/groupsCtrl.js +++ b/public/js/controllers/groupsCtrl.js @@ -105,9 +105,12 @@ habitrpg.controller("GroupsCtrl", ['$scope', '$rootScope', 'Shared', 'Groups', ' $rootScope.openModal('private-message',{controller:'MemberModalCtrl'}); }); } - $scope.flagChat = function(uid) { - Members.selectMember(uid, function(){ - $rootScope.openModal('abuse-flag',{controller:'MemberModalCtrl'}); + $scope.flagChat = function(message) { + $scope.abuseObject = message; + Members.selectMember(message.uuid, function(){ + $rootScope.openModal('abuse-flag',{controller:'MemberModalCtrl', + scope: $scope + }); }); } } @@ -144,6 +147,11 @@ habitrpg.controller("GroupsCtrl", ['$scope', '$rootScope', 'Shared', 'Groups', ' $scope.$close(); }) } + $scope.reportAbuse = function(reporter, message) { + Notification.text(window.env.t('abuseReported')); + $rootScope.User.sync(); + $scope.$close(); + } } ]) diff --git a/views/options/social/chat-message.jade b/views/options/social/chat-message.jade index 077bec02fc..9c5545523f 100644 --- a/views/options/social/chat-message.jade +++ b/views/options/social/chat-message.jade @@ -25,7 +25,7 @@ mixin chatMessages(inbox) |         a(ng-click='#{inbox? "user.ops.deletePM({params:{id:message.$key}})" : "deleteChatMessage(group, message)"}', ng-if='#{inbox ? "true" : ":: user.contributor.admin || message.uuid == user.id"}') span.glyphicon.glyphicon-trash(tooltip=env.t('delete')) - a(ng-click="flagChat(message.uuid)", ng-if='#{inbox ? "true" : ":: message.uuid != user.id"}') + a(ng-click="flagChat(message)", ng-if='#{inbox ? "true" : ":: message.uuid != user.id"}') span.glyphicon.glyphicon-flag(tooltip=env.t('abuseFlag')) span.float-label a.label.label-default.chat-message(ng-if=':: message.user', ng-class='::userLevelStyleFromLevel(message.contributor.level, message.backer.npc, style)', ng-click='clickMember(message.uuid, true)') diff --git a/views/shared/modals/members.jade b/views/shared/modals/members.jade index 0b72234771..6c2958ec63 100644 --- a/views/shared/modals/members.jade +++ b/views/shared/modals/members.jade @@ -96,3 +96,5 @@ script(type='text/ng-template', id='modals/abuse-flag.html') .modal-body h4!=env.t('abuseFlagModalBody', {firstLinkStart: "", secondLinkStart: "", linkEnd: ""}) .modal-footer + button.btn.btn-primary(ng-click='$close()')=env.t('cancel') + button.btn.btn-default(ng-click='reportAbuse(user, abuseObject)')=env.t("abuseFlagModalButton") From a2cf14324cd3284504dfe5220eb858e073247032 Mon Sep 17 00:00:00 2001 From: Blade Barringer Date: Fri, 5 Dec 2014 06:47:04 -0600 Subject: [PATCH 07/81] Added a flags key to message object --- src/models/group.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/models/group.js b/src/models/group.js index 1bc275afe4..649d8d571b 100644 --- a/src/models/group.js +++ b/src/models/group.js @@ -98,7 +98,8 @@ var chatDefaults = module.exports.chatDefaults = function(msg,user){ id: shared.uuid(), text: msg, timestamp: +new Date, - likes: {} + likes: {}, + flags: {} }; if (user) { _.defaults(message, { @@ -330,4 +331,4 @@ Group.count({_id:'habitrpg'},function(err,ct){ type: 'guild', privacy:'public' }).save(); -}) \ No newline at end of file +}) From c44c607ae70124129ee9176b57c98cf01513d3ac Mon Sep 17 00:00:00 2001 From: Blade Barringer Date: Fri, 5 Dec 2014 06:50:41 -0600 Subject: [PATCH 08/81] Renamed flagChat to flagChatMessage --- public/js/controllers/groupsCtrl.js | 2 +- views/options/social/chat-message.jade | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/public/js/controllers/groupsCtrl.js b/public/js/controllers/groupsCtrl.js index 63933e4fe7..523b9abff7 100644 --- a/public/js/controllers/groupsCtrl.js +++ b/public/js/controllers/groupsCtrl.js @@ -105,7 +105,7 @@ habitrpg.controller("GroupsCtrl", ['$scope', '$rootScope', 'Shared', 'Groups', ' $rootScope.openModal('private-message',{controller:'MemberModalCtrl'}); }); } - $scope.flagChat = function(message) { + $scope.flagChatMessage = function(message) { $scope.abuseObject = message; Members.selectMember(message.uuid, function(){ $rootScope.openModal('abuse-flag',{controller:'MemberModalCtrl', diff --git a/views/options/social/chat-message.jade b/views/options/social/chat-message.jade index 9c5545523f..4878e2e6aa 100644 --- a/views/options/social/chat-message.jade +++ b/views/options/social/chat-message.jade @@ -25,7 +25,7 @@ mixin chatMessages(inbox) |         a(ng-click='#{inbox? "user.ops.deletePM({params:{id:message.$key}})" : "deleteChatMessage(group, message)"}', ng-if='#{inbox ? "true" : ":: user.contributor.admin || message.uuid == user.id"}') span.glyphicon.glyphicon-trash(tooltip=env.t('delete')) - a(ng-click="flagChat(message)", ng-if='#{inbox ? "true" : ":: message.uuid != user.id"}') + a(ng-click="flagChatMessage(message)", ng-if='#{inbox ? "true" : ":: message.uuid != user.id"}') span.glyphicon.glyphicon-flag(tooltip=env.t('abuseFlag')) span.float-label a.label.label-default.chat-message(ng-if=':: message.user', ng-class='::userLevelStyleFromLevel(message.contributor.level, message.backer.npc, style)', ng-click='clickMember(message.uuid, true)') From 74b94e676427ddc580e4009cb2cfee17f074f896 Mon Sep 17 00:00:00 2001 From: Blade Barringer Date: Fri, 5 Dec 2014 06:52:49 -0600 Subject: [PATCH 09/81] Removed flag from system notifications --- views/options/social/chat-message.jade | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/views/options/social/chat-message.jade b/views/options/social/chat-message.jade index 4878e2e6aa..07de522d21 100644 --- a/views/options/social/chat-message.jade +++ b/views/options/social/chat-message.jade @@ -25,7 +25,7 @@ mixin chatMessages(inbox) |         a(ng-click='#{inbox? "user.ops.deletePM({params:{id:message.$key}})" : "deleteChatMessage(group, message)"}', ng-if='#{inbox ? "true" : ":: user.contributor.admin || message.uuid == user.id"}') span.glyphicon.glyphicon-trash(tooltip=env.t('delete')) - a(ng-click="flagChatMessage(message)", ng-if='#{inbox ? "true" : ":: message.uuid != user.id"}') + a(ng-click="flagChatMessage(message)", ng-if='#{inbox ? "true" : ":: message.uuid != user.id && message.uuid != \'system\'"}') span.glyphicon.glyphicon-flag(tooltip=env.t('abuseFlag')) span.float-label a.label.label-default.chat-message(ng-if=':: message.user', ng-class='::userLevelStyleFromLevel(message.contributor.level, message.backer.npc, style)', ng-click='clickMember(message.uuid, true)') From 5a6c9fbf8437b752f7fa6099302a1a9b83781f0e Mon Sep 17 00:00:00 2001 From: Blade Barringer Date: Fri, 5 Dec 2014 07:03:33 -0600 Subject: [PATCH 10/81] Added some logic for adding flags --- public/js/controllers/groupsCtrl.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/public/js/controllers/groupsCtrl.js b/public/js/controllers/groupsCtrl.js index 523b9abff7..637361bda4 100644 --- a/public/js/controllers/groupsCtrl.js +++ b/public/js/controllers/groupsCtrl.js @@ -148,6 +148,10 @@ habitrpg.controller("GroupsCtrl", ['$scope', '$rootScope', 'Shared', 'Groups', ' }) } $scope.reportAbuse = function(reporter, message) { + if(!message.flags) message.flags = {}; + message.flags[User.user._id] = true; + // Post to API should look something like this + //$http.post(ApiUrlService.get() + '/api/v2/groups/' + group._id + '/chat/' + message.id + '/flag'); Notification.text(window.env.t('abuseReported')); $rootScope.User.sync(); $scope.$close(); From e9cffe620615f4c68375a8202639c87025a612ec Mon Sep 17 00:00:00 2001 From: Blade Barringer Date: Fri, 5 Dec 2014 07:42:52 -0600 Subject: [PATCH 11/81] Error handling for if message already flagged --- public/js/controllers/groupsCtrl.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/public/js/controllers/groupsCtrl.js b/public/js/controllers/groupsCtrl.js index 637361bda4..7d01db4554 100644 --- a/public/js/controllers/groupsCtrl.js +++ b/public/js/controllers/groupsCtrl.js @@ -106,6 +106,9 @@ habitrpg.controller("GroupsCtrl", ['$scope', '$rootScope', 'Shared', 'Groups', ' }); } $scope.flagChatMessage = function(message) { + if(!message.flags) message.flags = {}; + if(message.flags[User.user._id]) + Notification.text(window.env.t('abuseAlreadyReported')); $scope.abuseObject = message; Members.selectMember(message.uuid, function(){ $rootScope.openModal('abuse-flag',{controller:'MemberModalCtrl', @@ -148,8 +151,7 @@ habitrpg.controller("GroupsCtrl", ['$scope', '$rootScope', 'Shared', 'Groups', ' }) } $scope.reportAbuse = function(reporter, message) { - if(!message.flags) message.flags = {}; - message.flags[User.user._id] = true; + message.flags[reporter._id] = true; // Post to API should look something like this //$http.post(ApiUrlService.get() + '/api/v2/groups/' + group._id + '/chat/' + message.id + '/flag'); Notification.text(window.env.t('abuseReported')); From 2f506ce0e07610fd09d04cdfc7b4066b4587ccb1 Mon Sep 17 00:00:00 2001 From: Blade Barringer Date: Fri, 5 Dec 2014 07:43:20 -0600 Subject: [PATCH 12/81] Give flag text danger class and already reported message if already reproted --- public/css/index.styl | 3 +++ views/options/social/chat-message.jade | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/public/css/index.styl b/public/css/index.styl index 07e2829d0b..381ab03082 100644 --- a/public/css/index.styl +++ b/public/css/index.styl @@ -135,6 +135,9 @@ a a span.glyphicon color: #333 // Takes base color from bootstrap + &.text-danger + color: #a94442 // Allows glyphicon to use text-danger class + a.label color: #fff diff --git a/views/options/social/chat-message.jade b/views/options/social/chat-message.jade index 07de522d21..19938dcbe1 100644 --- a/views/options/social/chat-message.jade +++ b/views/options/social/chat-message.jade @@ -26,7 +26,7 @@ mixin chatMessages(inbox) a(ng-click='#{inbox? "user.ops.deletePM({params:{id:message.$key}})" : "deleteChatMessage(group, message)"}', ng-if='#{inbox ? "true" : ":: user.contributor.admin || message.uuid == user.id"}') span.glyphicon.glyphicon-trash(tooltip=env.t('delete')) a(ng-click="flagChatMessage(message)", ng-if='#{inbox ? "true" : ":: message.uuid != user.id && message.uuid != \'system\'"}') - span.glyphicon.glyphicon-flag(tooltip=env.t('abuseFlag')) + span.glyphicon.glyphicon-flag(tooltip="{{message.flags[user._id] ? env.t('abuseAlreadyReported') : env.t('abuseFlag')}}" ng-class='message.flags[user._id] ? "text-danger" : ""') span.float-label a.label.label-default.chat-message(ng-if=':: message.user', ng-class='::userLevelStyleFromLevel(message.contributor.level, message.backer.npc, style)', ng-click='clickMember(message.uuid, true)') span.glyphicon.glyphicon-arrow-right(ng-if='::message.sent') From 7a7c13ff6d4da96de6f3cd72d547c6d35923421c Mon Sep 17 00:00:00 2001 From: Blade Barringer Date: Fri, 5 Dec 2014 07:43:38 -0600 Subject: [PATCH 13/81] Prevent modal from popping up if already reported --- public/js/controllers/groupsCtrl.js | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/public/js/controllers/groupsCtrl.js b/public/js/controllers/groupsCtrl.js index 7d01db4554..809b7f1687 100644 --- a/public/js/controllers/groupsCtrl.js +++ b/public/js/controllers/groupsCtrl.js @@ -109,12 +109,14 @@ habitrpg.controller("GroupsCtrl", ['$scope', '$rootScope', 'Shared', 'Groups', ' if(!message.flags) message.flags = {}; if(message.flags[User.user._id]) Notification.text(window.env.t('abuseAlreadyReported')); - $scope.abuseObject = message; - Members.selectMember(message.uuid, function(){ - $rootScope.openModal('abuse-flag',{controller:'MemberModalCtrl', - scope: $scope + else { + $scope.abuseObject = message; + Members.selectMember(message.uuid, function(){ + $rootScope.openModal('abuse-flag',{controller:'MemberModalCtrl', + scope: $scope + }); }); - }); + } } } ]) From 8537c96eb6725ead654f6c1a31f7294502924061 Mon Sep 17 00:00:00 2001 From: Blade Barringer Date: Fri, 5 Dec 2014 22:09:56 -0600 Subject: [PATCH 14/81] Converted heading to paragraph --- views/shared/modals/members.jade | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/views/shared/modals/members.jade b/views/shared/modals/members.jade index 6c2958ec63..a2cc76b95a 100644 --- a/views/shared/modals/members.jade +++ b/views/shared/modals/members.jade @@ -94,7 +94,7 @@ script(type='text/ng-template', id='modals/abuse-flag.html') .modal-header h4!=env.t('abuseFlagModalHeading', {name: "{{profile.profile.name}}"}) .modal-body - h4!=env.t('abuseFlagModalBody', {firstLinkStart: "", secondLinkStart: "", linkEnd: ""}) + p!=env.t('abuseFlagModalBody', {firstLinkStart: "", secondLinkStart: "", linkEnd: ""}) .modal-footer button.btn.btn-primary(ng-click='$close()')=env.t('cancel') button.btn.btn-default(ng-click='reportAbuse(user, abuseObject)')=env.t("abuseFlagModalButton") From aafda2dad1a1d74547166904660efb476fcda51e Mon Sep 17 00:00:00 2001 From: Blade Barringer Date: Fri, 5 Dec 2014 22:14:48 -0600 Subject: [PATCH 15/81] Added text of message to make sure user clicked the right flag --- views/shared/modals/members.jade | 2 ++ 1 file changed, 2 insertions(+) diff --git a/views/shared/modals/members.jade b/views/shared/modals/members.jade index a2cc76b95a..3513b8b433 100644 --- a/views/shared/modals/members.jade +++ b/views/shared/modals/members.jade @@ -94,6 +94,8 @@ script(type='text/ng-template', id='modals/abuse-flag.html') .modal-header h4!=env.t('abuseFlagModalHeading', {name: "{{profile.profile.name}}"}) .modal-body + blockquote + | {{abuseObject.text}} p!=env.t('abuseFlagModalBody', {firstLinkStart: "", secondLinkStart: "", linkEnd: ""}) .modal-footer button.btn.btn-primary(ng-click='$close()')=env.t('cancel') From 5acde1e609002c3554723dec4199eb3ea5aa7fe2 Mon Sep 17 00:00:00 2001 From: Blade Barringer Date: Fri, 5 Dec 2014 22:15:03 -0600 Subject: [PATCH 16/81] Added todo for paglias --- public/js/controllers/groupsCtrl.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/public/js/controllers/groupsCtrl.js b/public/js/controllers/groupsCtrl.js index 809b7f1687..a8f21adbbd 100644 --- a/public/js/controllers/groupsCtrl.js +++ b/public/js/controllers/groupsCtrl.js @@ -154,8 +154,7 @@ habitrpg.controller("GroupsCtrl", ['$scope', '$rootScope', 'Shared', 'Groups', ' } $scope.reportAbuse = function(reporter, message) { message.flags[reporter._id] = true; - // Post to API should look something like this - //$http.post(ApiUrlService.get() + '/api/v2/groups/' + group._id + '/chat/' + message.id + '/flag'); + // @TODO @paglias API Call goes here Notification.text(window.env.t('abuseReported')); $rootScope.User.sync(); $scope.$close(); From e49e8f57659bbff6cf59e355c0c9eebe2c5f4290 Mon Sep 17 00:00:00 2001 From: Blade Barringer Date: Fri, 5 Dec 2014 22:20:14 -0600 Subject: [PATCH 17/81] Added note for paglias --- src/models/group.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/models/group.js b/src/models/group.js index 649d8d571b..af5e22dab2 100644 --- a/src/models/group.js +++ b/src/models/group.js @@ -99,7 +99,7 @@ var chatDefaults = module.exports.chatDefaults = function(msg,user){ text: msg, timestamp: +new Date, likes: {}, - flags: {} + flags: {} // for @paglias, @crookedneighbor added this. }; if (user) { _.defaults(message, { From ae6e0255c69b4ecb60b0c3502840e875a9ff1085 Mon Sep 17 00:00:00 2001 From: Matteo Pagliazzi Date: Sun, 7 Dec 2014 14:35:09 +0100 Subject: [PATCH 18/81] feat(flag-message): add server methods --- public/js/controllers/groupsCtrl.js | 45 ++++++++++++++------------ public/js/services/groupServices.js | 1 + src/controllers/groups.js | 16 +++++++++ src/models/group.js | 14 +++++++- src/routes/apiv2.coffee | 11 +++++++ views/options/social/chat-message.jade | 2 +- views/shared/modals/members.jade | 2 +- 7 files changed, 67 insertions(+), 24 deletions(-) diff --git a/public/js/controllers/groupsCtrl.js b/public/js/controllers/groupsCtrl.js index a8f21adbbd..dfd5718247 100644 --- a/public/js/controllers/groupsCtrl.js +++ b/public/js/controllers/groupsCtrl.js @@ -105,24 +105,11 @@ habitrpg.controller("GroupsCtrl", ['$scope', '$rootScope', 'Shared', 'Groups', ' $rootScope.openModal('private-message',{controller:'MemberModalCtrl'}); }); } - $scope.flagChatMessage = function(message) { - if(!message.flags) message.flags = {}; - if(message.flags[User.user._id]) - Notification.text(window.env.t('abuseAlreadyReported')); - else { - $scope.abuseObject = message; - Members.selectMember(message.uuid, function(){ - $rootScope.openModal('abuse-flag',{controller:'MemberModalCtrl', - scope: $scope - }); - }); - } - } } ]) - .controller("MemberModalCtrl", ['$scope', '$rootScope', 'Members', 'Shared', '$http', 'Notification', - function($scope, $rootScope, Members, Shared, $http, Notification) { + .controller("MemberModalCtrl", ['$scope', '$rootScope', 'Members', 'Shared', '$http', 'Notification', 'Groups', + function($scope, $rootScope, Members, Shared, $http, Notification, Groups) { $scope.timestamp = function(timestamp){ return moment(timestamp).format('MM/DD/YYYY'); } @@ -152,12 +139,12 @@ habitrpg.controller("GroupsCtrl", ['$scope', '$rootScope', 'Shared', 'Groups', ' $scope.$close(); }) } - $scope.reportAbuse = function(reporter, message) { + $scope.reportAbuse = function(reporter, message, groupId) { message.flags[reporter._id] = true; - // @TODO @paglias API Call goes here - Notification.text(window.env.t('abuseReported')); - $rootScope.User.sync(); - $scope.$close(); + Groups.Group.flagChatMessage({gid: groupId, messageId: message.id}, undefined, function(data){ + Notification.text(window.env.t('abuseReported')); + $scope.$close(); + }); } } ]) @@ -217,7 +204,7 @@ habitrpg.controller("GroupsCtrl", ['$scope', '$rootScope', 'Shared', 'Groups', ' }); }]) - .controller('ChatCtrl', ['$scope', 'Groups', 'User', '$http', 'ApiUrlService', 'Notification', function($scope, Groups, User, $http, ApiUrlService, Notification){ + .controller('ChatCtrl', ['$scope', 'Groups', 'User', '$http', 'ApiUrlService', 'Notification', 'Members', '$rootScope', function($scope, Groups, User, $http, ApiUrlService, Notification, Members, $rootScope){ $scope.message = {content:''}; $scope._sending = false; @@ -282,6 +269,22 @@ habitrpg.controller("GroupsCtrl", ['$scope', '$rootScope', 'Shared', 'Groups', ' $http.post(ApiUrlService.get() + '/api/v2/groups/' + group._id + '/chat/' + message.id + '/like'); } + $scope.flagChatMessage = function(groupId,message) { + if(!message.flags) message.flags = {}; + if(message.flags[User.user._id]) + Notification.text(window.env.t('abuseAlreadyReported')); + else { + $scope.abuseObject = message; + $scope.groupId = groupId; + Members.selectMember(message.uuid, function(){ + $rootScope.openModal('abuse-flag',{ + controller:'MemberModalCtrl', + scope: $scope + }); + }); + } + } + $scope.sync = function(group){ group.$get(); } diff --git a/public/js/services/groupServices.js b/public/js/services/groupServices.js index 42dd787846..45ecc8b971 100644 --- a/public/js/services/groupServices.js +++ b/public/js/services/groupServices.js @@ -13,6 +13,7 @@ angular.module('groupServices', ['ngResource']). //query: {method: "GET", isArray:false}, postChat: {method: "POST", url: ApiUrlService.get() + '/api/v2/groups/:gid/chat'}, deleteChatMessage: {method: "DELETE", url: ApiUrlService.get() + '/api/v2/groups/:gid/chat/:messageId'}, + flagChatMessage: {method: "POST", url: ApiUrlService.get() + '/api/v2/groups/:gid/chat/:messageId/flag'}, join: {method: "POST", url: ApiUrlService.get() + '/api/v2/groups/:gid/join'}, leave: {method: "POST", url: ApiUrlService.get() + '/api/v2/groups/:gid/leave'}, invite: {method: "POST", url: ApiUrlService.get() + '/api/v2/groups/:gid/invite'}, diff --git a/src/controllers/groups.js b/src/controllers/groups.js index 50272cdab2..0be99d8fae 100644 --- a/src/controllers/groups.js +++ b/src/controllers/groups.js @@ -256,6 +256,22 @@ api.deleteChatMessage = function(req, res, next){ }); } +api.flagChatMessage = function(req, res, next){ + var user = res.locals.user + var group = res.locals.group; + var message = _.find(group.chat, {id: req.params.mid}); + + if(!message) return res.json(404, {err: "Message not found!"}); + if(message.uuid == user._id) return res.json(401, {err: "Can't report your own message."}); + + message.flags[user._id] = true; + group.markModified('chat'); + group.save(function(err,_saved){ + if(err) return next(err); + return res.send(204); + }); +} + api.seenMessage = function(req,res,next){ // Skip the auth step, we want this to be fast. If !found with uuid/token, then it just doesn't save // Check for req.params.gid to exist diff --git a/src/models/group.js b/src/models/group.js index af5e22dab2..3e00370b67 100644 --- a/src/models/group.js +++ b/src/models/group.js @@ -99,7 +99,7 @@ var chatDefaults = module.exports.chatDefaults = function(msg,user){ text: msg, timestamp: +new Date, likes: {}, - flags: {} // for @paglias, @crookedneighbor added this. + flags: {} }; if (user) { _.defaults(message, { @@ -317,6 +317,18 @@ GroupSchema.statics.bossQuest = function(user, progress, cb) { }) } +GroupSchema.methods.toJSON = function() { + var doc = this.toObject(); + if(doc.chat){ + doc.chat.forEach(function(msg){ + msg.flags = {}; + }); + } + + return doc; +}; + + module.exports.schema = GroupSchema; var Group = module.exports.model = mongoose.model("Group", GroupSchema); diff --git a/src/routes/apiv2.coffee b/src/routes/apiv2.coffee index 415577d565..5708bfac51 100644 --- a/src/routes/apiv2.coffee +++ b/src/routes/apiv2.coffee @@ -577,6 +577,17 @@ module.exports = (swagger, v2) -> middleware: [auth.auth, i18n.getUserLanguage, groups.attachGroup] action: groups.likeChatMessage + "/groups/{gid}/chat/{mid}/flag": + spec: + method: 'POST' + description: "Flag a chat message" + parameters: [ + path 'gid','Group id','string' + path 'mid','Message id','string' + ] + middleware: [auth.auth, i18n.getUserLanguage, groups.attachGroup] + action: groups.flagChatMessage + # --------------------------------- # Members # --------------------------------- diff --git a/views/options/social/chat-message.jade b/views/options/social/chat-message.jade index 19938dcbe1..5a4ba2e1a7 100644 --- a/views/options/social/chat-message.jade +++ b/views/options/social/chat-message.jade @@ -25,7 +25,7 @@ mixin chatMessages(inbox) |         a(ng-click='#{inbox? "user.ops.deletePM({params:{id:message.$key}})" : "deleteChatMessage(group, message)"}', ng-if='#{inbox ? "true" : ":: user.contributor.admin || message.uuid == user.id"}') span.glyphicon.glyphicon-trash(tooltip=env.t('delete')) - a(ng-click="flagChatMessage(message)", ng-if='#{inbox ? "true" : ":: message.uuid != user.id && message.uuid != \'system\'"}') + a(ng-click="flagChatMessage(group._id, message)", ng-if='#{inbox ? "true" : ":: message.uuid != user.id && message.uuid != \'system\'"}') span.glyphicon.glyphicon-flag(tooltip="{{message.flags[user._id] ? env.t('abuseAlreadyReported') : env.t('abuseFlag')}}" ng-class='message.flags[user._id] ? "text-danger" : ""') span.float-label a.label.label-default.chat-message(ng-if=':: message.user', ng-class='::userLevelStyleFromLevel(message.contributor.level, message.backer.npc, style)', ng-click='clickMember(message.uuid, true)') diff --git a/views/shared/modals/members.jade b/views/shared/modals/members.jade index 3513b8b433..3dc12dfe1a 100644 --- a/views/shared/modals/members.jade +++ b/views/shared/modals/members.jade @@ -99,4 +99,4 @@ script(type='text/ng-template', id='modals/abuse-flag.html') p!=env.t('abuseFlagModalBody', {firstLinkStart: "", secondLinkStart: "", linkEnd: ""}) .modal-footer button.btn.btn-primary(ng-click='$close()')=env.t('cancel') - button.btn.btn-default(ng-click='reportAbuse(user, abuseObject)')=env.t("abuseFlagModalButton") + button.btn.btn-default(ng-click='reportAbuse(user, abuseObject, groupId)')=env.t("abuseFlagModalButton") From 9bd03042230f8190a7b3c2fc3978815c350d9a02 Mon Sep 17 00:00:00 2001 From: Blade Barringer Date: Thu, 11 Dec 2014 10:23:29 -0600 Subject: [PATCH 19/81] Updated message preview on flag abuse modal to use markdown interpretation --- views/shared/modals/members.jade | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/views/shared/modals/members.jade b/views/shared/modals/members.jade index 3dc12dfe1a..d457213d34 100644 --- a/views/shared/modals/members.jade +++ b/views/shared/modals/members.jade @@ -95,7 +95,7 @@ script(type='text/ng-template', id='modals/abuse-flag.html') h4!=env.t('abuseFlagModalHeading', {name: "{{profile.profile.name}}"}) .modal-body blockquote - | {{abuseObject.text}} + markdown(ng-model="abuseObject.text") p!=env.t('abuseFlagModalBody', {firstLinkStart: "", secondLinkStart: "", linkEnd: ""}) .modal-footer button.btn.btn-primary(ng-click='$close()')=env.t('cancel') From 564677340caa75db2020bb40acbfdcbc2af6696d Mon Sep 17 00:00:00 2001 From: Blade Barringer Date: Thu, 11 Dec 2014 10:29:12 -0600 Subject: [PATCH 20/81] User can only flag message after accepting community guidelines --- views/options/social/chat-message.jade | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/views/options/social/chat-message.jade b/views/options/social/chat-message.jade index bbc4fed1db..a5b18f2b79 100644 --- a/views/options/social/chat-message.jade +++ b/views/options/social/chat-message.jade @@ -26,7 +26,7 @@ mixin chatMessages(inbox) |         a(ng-click='#{inbox? "user.ops.deletePM({params:{id:message.$key}})" : "deleteChatMessage(group, message)"}', ng-if='#{inbox ? "true" : ":: user.contributor.admin || message.uuid == user.id"}') span.glyphicon.glyphicon-trash(tooltip=env.t('delete')) - a(ng-click="flagChatMessage(group._id, message)", ng-if='#{inbox ? "true" : ":: message.uuid != user.id && message.uuid != \'system\'"}') + a(ng-click="flagChatMessage(group._id, message)", ng-if='#{inbox ? "true" : ":: user.flags.communityGuidelinesAccepted && message.uuid != user.id && message.uuid != \'system\'"}') span.glyphicon.glyphicon-flag(tooltip="{{message.flags[user._id] ? env.t('abuseAlreadyReported') : env.t('abuseFlag')}}" ng-class='message.flags[user._id] ? "text-danger" : ""') span.float-label a.label.label-default.chat-message(ng-if=':: message.user', ng-class='::userLevelStyleFromLevel(message.contributor.level, message.backer.npc, style)', ng-click='clickMember(message.uuid, true)') From d8515fc8ded7fe0d770e535c273668fe9d63d1d8 Mon Sep 17 00:00:00 2001 From: Blade Barringer Date: Thu, 11 Dec 2014 12:16:57 -0600 Subject: [PATCH 21/81] Added fallback for is message does not contain flags key. Added error for if message was already flagged by user --- src/controllers/groups.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/controllers/groups.js b/src/controllers/groups.js index 0be99d8fae..93a39a26f3 100644 --- a/src/controllers/groups.js +++ b/src/controllers/groups.js @@ -264,6 +264,9 @@ api.flagChatMessage = function(req, res, next){ if(!message) return res.json(404, {err: "Message not found!"}); if(message.uuid == user._id) return res.json(401, {err: "Can't report your own message."}); + if(!message.flags) message.flags = {}; + if(message.flags[user._id]) return res.json(401, {err: "You have already reported this message"}); + message.flags[user._id] = true; group.markModified('chat'); group.save(function(err,_saved){ From d24f6ad1acdfdbef00444322d4a088a01224e535 Mon Sep 17 00:00:00 2001 From: Blade Barringer Date: Thu, 11 Dec 2014 12:45:25 -0600 Subject: [PATCH 22/81] Converted sent transparency to ng-class instead of style --- views/options/social/chat-message.jade | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/views/options/social/chat-message.jade b/views/options/social/chat-message.jade index a5b18f2b79..c5fbe9e2e6 100644 --- a/views/options/social/chat-message.jade +++ b/views/options/social/chat-message.jade @@ -1,7 +1,7 @@ mixin chatMessages(inbox) ul.list-unstyled.tavern-chat - var ngRepeat = inbox ? 'message in user.inbox.messages | toArray:true | orderBy:"sort":true' : 'message in group.chat track by message.id' - li.chat-message(ng-repeat=ngRepeat, ng-class=':: {highlight: isUserMentioned(user,message) || message.uuid=="system", "own-message": user._id == message.uuid}', style='{{::message.sent ? "opacity:0.5" : ""}}') + li.chat-message(ng-repeat=ngRepeat, ng-class=':: {highlight: isUserMentioned(user,message) || message.uuid=="system", "own-message": user._id == message.uuid, "transparent": message.sent}') .scrollable-message span(ng-if='::message.user') a.label.label-default.chat-message.hidden-label From 6fb531234d566048ee3d74f4f1ede2fcdff287c2 Mon Sep 17 00:00:00 2001 From: Blade Barringer Date: Thu, 11 Dec 2014 13:00:25 -0600 Subject: [PATCH 23/81] Added flagCount variable --- src/controllers/groups.js | 7 ++++++- src/models/group.js | 3 ++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/src/controllers/groups.js b/src/controllers/groups.js index 93a39a26f3..289e950bdd 100644 --- a/src/controllers/groups.js +++ b/src/controllers/groups.js @@ -264,10 +264,15 @@ api.flagChatMessage = function(req, res, next){ if(!message) return res.json(404, {err: "Message not found!"}); if(message.uuid == user._id) return res.json(401, {err: "Can't report your own message."}); + // Log user ids that have flagged the message if(!message.flags) message.flags = {}; if(message.flags[user._id]) return res.json(401, {err: "You have already reported this message"}); - message.flags[user._id] = true; + + // Log total number of flags (publicly viewable) + if(!message.flagCount) message.flagCount = 0; + message.flagCount++ + group.markModified('chat'); group.save(function(err,_saved){ if(err) return next(err); diff --git a/src/models/group.js b/src/models/group.js index 3e00370b67..be66b59fa7 100644 --- a/src/models/group.js +++ b/src/models/group.js @@ -99,7 +99,8 @@ var chatDefaults = module.exports.chatDefaults = function(msg,user){ text: msg, timestamp: +new Date, likes: {}, - flags: {} + flags: {}, + flagCount: 0 }; if (user) { _.defaults(message, { From 4718641d3eaf9ca3a3ea5861efbc98af8c359f24 Mon Sep 17 00:00:00 2001 From: Blade Barringer Date: Thu, 11 Dec 2014 13:01:50 -0600 Subject: [PATCH 24/81] Hide message if flag count is 2 or higher --- views/options/social/chat-message.jade | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/views/options/social/chat-message.jade b/views/options/social/chat-message.jade index c5fbe9e2e6..b559793012 100644 --- a/views/options/social/chat-message.jade +++ b/views/options/social/chat-message.jade @@ -1,7 +1,7 @@ mixin chatMessages(inbox) ul.list-unstyled.tavern-chat - var ngRepeat = inbox ? 'message in user.inbox.messages | toArray:true | orderBy:"sort":true' : 'message in group.chat track by message.id' - li.chat-message(ng-repeat=ngRepeat, ng-class=':: {highlight: isUserMentioned(user,message) || message.uuid=="system", "own-message": user._id == message.uuid, "transparent": message.sent}') + li.chat-message(ng-repeat=ngRepeat, ng-class=':: {highlight: isUserMentioned(user,message) || message.uuid=="system", "own-message": user._id == message.uuid, "transparent": message.sent || message.flags[user._id]}', ng-if="!message.flagCount || message.flagCount < 2") .scrollable-message span(ng-if='::message.user') a.label.label-default.chat-message.hidden-label From 1fb73b35ab0527a603ec800bedc981dcd99cea17 Mon Sep 17 00:00:00 2001 From: Blade Barringer Date: Thu, 11 Dec 2014 13:05:48 -0600 Subject: [PATCH 25/81] Always show message if admin --- views/options/social/chat-message.jade | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/views/options/social/chat-message.jade b/views/options/social/chat-message.jade index b559793012..5490cc6793 100644 --- a/views/options/social/chat-message.jade +++ b/views/options/social/chat-message.jade @@ -1,7 +1,7 @@ mixin chatMessages(inbox) ul.list-unstyled.tavern-chat - var ngRepeat = inbox ? 'message in user.inbox.messages | toArray:true | orderBy:"sort":true' : 'message in group.chat track by message.id' - li.chat-message(ng-repeat=ngRepeat, ng-class=':: {highlight: isUserMentioned(user,message) || message.uuid=="system", "own-message": user._id == message.uuid, "transparent": message.sent || message.flags[user._id]}', ng-if="!message.flagCount || message.flagCount < 2") + li.chat-message(ng-repeat=ngRepeat, ng-class=':: {highlight: isUserMentioned(user,message) || message.uuid=="system", "own-message": user._id == message.uuid, "transparent": message.sent || message.flags[user._id]}', ng-if="!message.flagCount || message.flagCount < 2 || user.contributor.admin") .scrollable-message span(ng-if='::message.user') a.label.label-default.chat-message.hidden-label From c8c64a1b81ffdc1a976e50ec1256bc24488e5671 Mon Sep 17 00:00:00 2001 From: Blade Barringer Date: Thu, 11 Dec 2014 13:09:00 -0600 Subject: [PATCH 26/81] Allow admin to see messages that have been flagged more than twice, but make them semi-transparent --- views/options/social/chat-message.jade | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/views/options/social/chat-message.jade b/views/options/social/chat-message.jade index 5490cc6793..fa2ab1743d 100644 --- a/views/options/social/chat-message.jade +++ b/views/options/social/chat-message.jade @@ -1,7 +1,7 @@ mixin chatMessages(inbox) ul.list-unstyled.tavern-chat - var ngRepeat = inbox ? 'message in user.inbox.messages | toArray:true | orderBy:"sort":true' : 'message in group.chat track by message.id' - li.chat-message(ng-repeat=ngRepeat, ng-class=':: {highlight: isUserMentioned(user,message) || message.uuid=="system", "own-message": user._id == message.uuid, "transparent": message.sent || message.flags[user._id]}', ng-if="!message.flagCount || message.flagCount < 2 || user.contributor.admin") + li.chat-message(ng-repeat=ngRepeat, ng-class=':: {highlight: isUserMentioned(user,message) || message.uuid=="system", "own-message": user._id == message.uuid, "transparent": message.sent || message.flags[user._id] || (user.contributor.admin && message.flagCount >= 1)}', ng-if="!message.flagCount || message.flagCount < 2 || user.contributor.admin") .scrollable-message span(ng-if='::message.user') a.label.label-default.chat-message.hidden-label From db1f24e7b44ede01dbf3efeed1ef3bcceb856288 Mon Sep 17 00:00:00 2001 From: Blade Barringer Date: Thu, 11 Dec 2014 13:12:50 -0600 Subject: [PATCH 27/81] Added note about how many flags a message has --- views/options/social/chat-message.jade | 2 ++ 1 file changed, 2 insertions(+) diff --git a/views/options/social/chat-message.jade b/views/options/social/chat-message.jade index fa2ab1743d..3aa4aa3b7d 100644 --- a/views/options/social/chat-message.jade +++ b/views/options/social/chat-message.jade @@ -2,6 +2,8 @@ mixin chatMessages(inbox) ul.list-unstyled.tavern-chat - var ngRepeat = inbox ? 'message in user.inbox.messages | toArray:true | orderBy:"sort":true' : 'message in group.chat track by message.id' li.chat-message(ng-repeat=ngRepeat, ng-class=':: {highlight: isUserMentioned(user,message) || message.uuid=="system", "own-message": user._id == message.uuid, "transparent": message.sent || message.flags[user._id] || (user.contributor.admin && message.flagCount >= 1)}', ng-if="!message.flagCount || message.flagCount < 2 || user.contributor.admin") + span.pull-right.text-danger(ng-if="user.contributor.admin && message.flagCount > 0") + | {{message.flagCount}} flag{{message.flagCount != 1 ? 's' : ''}} .scrollable-message span(ng-if='::message.user') a.label.label-default.chat-message.hidden-label From 8ac3e312ed29388d153921b15f934723fc3b81db Mon Sep 17 00:00:00 2001 From: Blade Barringer Date: Thu, 11 Dec 2014 13:34:43 -0600 Subject: [PATCH 28/81] Admin flagging counts for more, automatically hides message --- src/controllers/groups.js | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/controllers/groups.js b/src/controllers/groups.js index 289e950bdd..1f40fb7684 100644 --- a/src/controllers/groups.js +++ b/src/controllers/groups.js @@ -271,7 +271,12 @@ api.flagChatMessage = function(req, res, next){ // Log total number of flags (publicly viewable) if(!message.flagCount) message.flagCount = 0; - message.flagCount++ + if(user.contributor.admin){ + // Arbitraty amount, higher than 2 + message.flagCount = 5; + } else { + message.flagCount++ + } group.markModified('chat'); group.save(function(err,_saved){ From f9c00003f3526ea0bf7f0816243815df618c83f9 Mon Sep 17 00:00:00 2001 From: Blade Barringer Date: Thu, 11 Dec 2014 13:38:57 -0600 Subject: [PATCH 29/81] Moved ng-class so it would update transparent class in real time after flaggging --- views/options/social/chat-message.jade | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/views/options/social/chat-message.jade b/views/options/social/chat-message.jade index 3aa4aa3b7d..c5ffe81e1b 100644 --- a/views/options/social/chat-message.jade +++ b/views/options/social/chat-message.jade @@ -1,10 +1,10 @@ mixin chatMessages(inbox) ul.list-unstyled.tavern-chat - var ngRepeat = inbox ? 'message in user.inbox.messages | toArray:true | orderBy:"sort":true' : 'message in group.chat track by message.id' - li.chat-message(ng-repeat=ngRepeat, ng-class=':: {highlight: isUserMentioned(user,message) || message.uuid=="system", "own-message": user._id == message.uuid, "transparent": message.sent || message.flags[user._id] || (user.contributor.admin && message.flagCount >= 1)}', ng-if="!message.flagCount || message.flagCount < 2 || user.contributor.admin") + li.chat-message(ng-repeat=ngRepeat, ng-class=':: {highlight: isUserMentioned(user,message) || message.uuid=="system", "own-message": user._id == message.uuid}', ng-if="!message.flagCount || message.flagCount < 2 || user.contributor.admin") span.pull-right.text-danger(ng-if="user.contributor.admin && message.flagCount > 0") | {{message.flagCount}} flag{{message.flagCount != 1 ? 's' : ''}} - .scrollable-message + .scrollable-message(ng-class='{"transparent": message.sent || message.flags[user._id] || (user.contributor.admin && message.flagCount >= 1)}') span(ng-if='::message.user') a.label.label-default.chat-message.hidden-label span.glyphicon.glyphicon-arrow-right(ng-if='::message.sent') From 38cd0e8de1d99dfcc8b7ef9c84e351cc3409bb78 Mon Sep 17 00:00:00 2001 From: Blade Barringer Date: Thu, 11 Dec 2014 17:29:01 -0600 Subject: [PATCH 30/81] Added method for letting an admin unhide a flagged message --- public/js/controllers/groupsCtrl.js | 8 ++++++++ public/js/services/groupServices.js | 1 + src/controllers/groups.js | 17 +++++++++++++++++ src/routes/apiv2.coffee | 11 +++++++++++ views/shared/modals/members.jade | 2 ++ 5 files changed, 39 insertions(+) diff --git a/public/js/controllers/groupsCtrl.js b/public/js/controllers/groupsCtrl.js index dfd5718247..f99a79ec76 100644 --- a/public/js/controllers/groupsCtrl.js +++ b/public/js/controllers/groupsCtrl.js @@ -146,6 +146,14 @@ habitrpg.controller("GroupsCtrl", ['$scope', '$rootScope', 'Shared', 'Groups', ' $scope.$close(); }); } + $scope.clearFlagCount = function(message, groupId) { + console.log("Heeey"); + Groups.Group.clearFlagCount({gid: groupId, messageId: message.id}, undefined, function(data){ + message.flagCount = 0; + Notification.text("Flags cleared"); + $scope.$close(); + }); + } } ]) diff --git a/public/js/services/groupServices.js b/public/js/services/groupServices.js index 45ecc8b971..e07f21b15c 100644 --- a/public/js/services/groupServices.js +++ b/public/js/services/groupServices.js @@ -14,6 +14,7 @@ angular.module('groupServices', ['ngResource']). postChat: {method: "POST", url: ApiUrlService.get() + '/api/v2/groups/:gid/chat'}, deleteChatMessage: {method: "DELETE", url: ApiUrlService.get() + '/api/v2/groups/:gid/chat/:messageId'}, flagChatMessage: {method: "POST", url: ApiUrlService.get() + '/api/v2/groups/:gid/chat/:messageId/flag'}, + clearFlagCount: {method: "POST", url: ApiUrlService.get() + '/api/v2/groups/:gid/chat/:messageId/clearflags'}, join: {method: "POST", url: ApiUrlService.get() + '/api/v2/groups/:gid/join'}, leave: {method: "POST", url: ApiUrlService.get() + '/api/v2/groups/:gid/leave'}, invite: {method: "POST", url: ApiUrlService.get() + '/api/v2/groups/:gid/invite'}, diff --git a/src/controllers/groups.js b/src/controllers/groups.js index 1f40fb7684..dbeaefbd0d 100644 --- a/src/controllers/groups.js +++ b/src/controllers/groups.js @@ -285,6 +285,23 @@ api.flagChatMessage = function(req, res, next){ }); } +api.clearFlagCount = function(req, res, next){ + var user = res.locals.user + var group = res.locals.group; + var message = _.find(group.chat, {id: req.params.mid}); + + if(!message) return res.json(404, {err: "Message not found!"}); + + if(user.contributor.admin) + message.flagCount = 0; + + group.markModified('chat'); + group.save(function(err,_saved){ + if(err) return next(err); + return res.send(204); + }); +} + api.seenMessage = function(req,res,next){ // Skip the auth step, we want this to be fast. If !found with uuid/token, then it just doesn't save // Check for req.params.gid to exist diff --git a/src/routes/apiv2.coffee b/src/routes/apiv2.coffee index 5708bfac51..0f8d272c69 100644 --- a/src/routes/apiv2.coffee +++ b/src/routes/apiv2.coffee @@ -588,6 +588,17 @@ module.exports = (swagger, v2) -> middleware: [auth.auth, i18n.getUserLanguage, groups.attachGroup] action: groups.flagChatMessage + "/groups/{gid}/chat/{mid}/clearflags": + spec: + method: 'POST' + description: "Clear flag count from message and unhide it" + parameters: [ + path 'gid','Group id','string' + path 'mid','Message id','string' + ] + middleware: [auth.auth, i18n.getUserLanguage, groups.attachGroup] + action: groups.clearFlagCount + # --------------------------------- # Members # --------------------------------- diff --git a/views/shared/modals/members.jade b/views/shared/modals/members.jade index d457213d34..27d42d4623 100644 --- a/views/shared/modals/members.jade +++ b/views/shared/modals/members.jade @@ -98,5 +98,7 @@ script(type='text/ng-template', id='modals/abuse-flag.html') markdown(ng-model="abuseObject.text") p!=env.t('abuseFlagModalBody', {firstLinkStart: "", secondLinkStart: "", linkEnd: ""}) .modal-footer + button.pull-left.btn.btn-primary(ng-click='clearFlagCount(abuseObject, groupId)', ng-if='user.contributor.admin && abuseObject.flagCount >= 2') + | Reset Flag Count button.btn.btn-primary(ng-click='$close()')=env.t('cancel') button.btn.btn-default(ng-click='reportAbuse(user, abuseObject, groupId)')=env.t("abuseFlagModalButton") From 6b8280ccbb6d72e575439590b2a1984c41634557 Mon Sep 17 00:00:00 2001 From: Blade Barringer Date: Thu, 11 Dec 2014 17:41:54 -0600 Subject: [PATCH 31/81] Adjusted spacing of chat buttons --- views/options/social/chat-message.jade | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/views/options/social/chat-message.jade b/views/options/social/chat-message.jade index c5ffe81e1b..b9be7a2349 100644 --- a/views/options/social/chat-message.jade +++ b/views/options/social/chat-message.jade @@ -25,9 +25,10 @@ mixin chatMessages(inbox) if inbox a(ng-click="quickReply(message.uuid)") span.glyphicon.glyphicon-share-alt(tooltip=env.t('pm-reply')) - |         + |     a(ng-click='#{inbox? "user.ops.deletePM({params:{id:message.$key}})" : "deleteChatMessage(group, message)"}', ng-if='#{inbox ? "true" : ":: user.contributor.admin || message.uuid == user.id"}') span.glyphicon.glyphicon-trash(tooltip=env.t('delete')) + |     a(ng-click="flagChatMessage(group._id, message)", ng-if='#{inbox ? "true" : ":: user.flags.communityGuidelinesAccepted && message.uuid != user.id && message.uuid != \'system\'"}') span.glyphicon.glyphicon-flag(tooltip="{{message.flags[user._id] ? env.t('abuseAlreadyReported') : env.t('abuseFlag')}}" ng-class='message.flags[user._id] ? "text-danger" : ""') span.float-label From c67da1804af7843c99d0a000119eb0b94b21c504 Mon Sep 17 00:00:00 2001 From: Blade Barringer Date: Thu, 11 Dec 2014 21:40:25 -0600 Subject: [PATCH 32/81] Changed transparent class for admin to only appear if it is hidden --- views/options/social/chat-message.jade | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/views/options/social/chat-message.jade b/views/options/social/chat-message.jade index b9be7a2349..c7a7dc6619 100644 --- a/views/options/social/chat-message.jade +++ b/views/options/social/chat-message.jade @@ -4,7 +4,7 @@ mixin chatMessages(inbox) li.chat-message(ng-repeat=ngRepeat, ng-class=':: {highlight: isUserMentioned(user,message) || message.uuid=="system", "own-message": user._id == message.uuid}', ng-if="!message.flagCount || message.flagCount < 2 || user.contributor.admin") span.pull-right.text-danger(ng-if="user.contributor.admin && message.flagCount > 0") | {{message.flagCount}} flag{{message.flagCount != 1 ? 's' : ''}} - .scrollable-message(ng-class='{"transparent": message.sent || message.flags[user._id] || (user.contributor.admin && message.flagCount >= 1)}') + .scrollable-message(ng-class='{"transparent": message.sent || message.flags[user._id] || (user.contributor.admin && message.flagCount > 1)}') span(ng-if='::message.user') a.label.label-default.chat-message.hidden-label span.glyphicon.glyphicon-arrow-right(ng-if='::message.sent') From 3c2319b63cc3bb544ecd0c531d36fa9b06a3e45f Mon Sep 17 00:00:00 2001 From: Blade Barringer Date: Thu, 11 Dec 2014 21:42:39 -0600 Subject: [PATCH 33/81] Made it impossible to flag own message in inbox --- views/options/social/chat-message.jade | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/views/options/social/chat-message.jade b/views/options/social/chat-message.jade index c7a7dc6619..e763a202ee 100644 --- a/views/options/social/chat-message.jade +++ b/views/options/social/chat-message.jade @@ -29,7 +29,7 @@ mixin chatMessages(inbox) a(ng-click='#{inbox? "user.ops.deletePM({params:{id:message.$key}})" : "deleteChatMessage(group, message)"}', ng-if='#{inbox ? "true" : ":: user.contributor.admin || message.uuid == user.id"}') span.glyphicon.glyphicon-trash(tooltip=env.t('delete')) |     - a(ng-click="flagChatMessage(group._id, message)", ng-if='#{inbox ? "true" : ":: user.flags.communityGuidelinesAccepted && message.uuid != user.id && message.uuid != \'system\'"}') + a(ng-click="flagChatMessage(group._id, message)", ng-if=':: !message.sent && user.flags.communityGuidelinesAccepted && message.uuid != user.id && message.uuid != "system"') span.glyphicon.glyphicon-flag(tooltip="{{message.flags[user._id] ? env.t('abuseAlreadyReported') : env.t('abuseFlag')}}" ng-class='message.flags[user._id] ? "text-danger" : ""') span.float-label a.label.label-default.chat-message(ng-if=':: message.user', ng-class='::userLevelStyleFromLevel(message.contributor.level, message.backer.npc, style)', ng-click='clickMember(message.uuid, true)') From a021ab289659bda4067b7256636e6315625abf76 Mon Sep 17 00:00:00 2001 From: Blade Barringer Date: Thu, 11 Dec 2014 21:43:01 -0600 Subject: [PATCH 34/81] Allow admin to reflag a message they've flagged and unflagged previously --- src/controllers/groups.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/controllers/groups.js b/src/controllers/groups.js index dbeaefbd0d..caa36809cc 100644 --- a/src/controllers/groups.js +++ b/src/controllers/groups.js @@ -266,7 +266,7 @@ api.flagChatMessage = function(req, res, next){ // Log user ids that have flagged the message if(!message.flags) message.flags = {}; - if(message.flags[user._id]) return res.json(401, {err: "You have already reported this message"}); + if(message.flags[user._id] && !user.contributor.admin) return res.json(401, {err: "You have already reported this message"}); message.flags[user._id] = true; // Log total number of flags (publicly viewable) From a0a43784651d2ca31ff96ac8822cff3e2b9bbe7c Mon Sep 17 00:00:00 2001 From: Blade Barringer Date: Thu, 11 Dec 2014 21:44:58 -0600 Subject: [PATCH 35/81] Admin can see flag on own message --- views/options/social/chat-message.jade | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/views/options/social/chat-message.jade b/views/options/social/chat-message.jade index e763a202ee..4945b44628 100644 --- a/views/options/social/chat-message.jade +++ b/views/options/social/chat-message.jade @@ -29,7 +29,7 @@ mixin chatMessages(inbox) a(ng-click='#{inbox? "user.ops.deletePM({params:{id:message.$key}})" : "deleteChatMessage(group, message)"}', ng-if='#{inbox ? "true" : ":: user.contributor.admin || message.uuid == user.id"}') span.glyphicon.glyphicon-trash(tooltip=env.t('delete')) |     - a(ng-click="flagChatMessage(group._id, message)", ng-if=':: !message.sent && user.flags.communityGuidelinesAccepted && message.uuid != user.id && message.uuid != "system"') + a(ng-click="flagChatMessage(group._id, message)", ng-if=':: user.contributor.admin || (!message.sent && user.flags.communityGuidelinesAccepted && message.uuid != user.id && message.uuid != "system")') span.glyphicon.glyphicon-flag(tooltip="{{message.flags[user._id] ? env.t('abuseAlreadyReported') : env.t('abuseFlag')}}" ng-class='message.flags[user._id] ? "text-danger" : ""') span.float-label a.label.label-default.chat-message(ng-if=':: message.user', ng-class='::userLevelStyleFromLevel(message.contributor.level, message.backer.npc, style)', ng-click='clickMember(message.uuid, true)') From dff7a741355bb0f8a3d6ee650c4236fc8a9ac017 Mon Sep 17 00:00:00 2001 From: Blade Barringer Date: Thu, 11 Dec 2014 21:47:06 -0600 Subject: [PATCH 36/81] Made flag number more helpful --- views/options/social/chat-message.jade | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/views/options/social/chat-message.jade b/views/options/social/chat-message.jade index 4945b44628..afe4d2e1b3 100644 --- a/views/options/social/chat-message.jade +++ b/views/options/social/chat-message.jade @@ -3,7 +3,7 @@ mixin chatMessages(inbox) - var ngRepeat = inbox ? 'message in user.inbox.messages | toArray:true | orderBy:"sort":true' : 'message in group.chat track by message.id' li.chat-message(ng-repeat=ngRepeat, ng-class=':: {highlight: isUserMentioned(user,message) || message.uuid=="system", "own-message": user._id == message.uuid}', ng-if="!message.flagCount || message.flagCount < 2 || user.contributor.admin") span.pull-right.text-danger(ng-if="user.contributor.admin && message.flagCount > 0") - | {{message.flagCount}} flag{{message.flagCount != 1 ? 's' : ''}} + | {{message.flagCount > 1 ? "Message Hidden" : "1 flag"}} .scrollable-message(ng-class='{"transparent": message.sent || message.flags[user._id] || (user.contributor.admin && message.flagCount > 1)}') span(ng-if='::message.user') a.label.label-default.chat-message.hidden-label From a95947b2dcb7f30fb9681944f4372ed012f7e9c8 Mon Sep 17 00:00:00 2001 From: Blade Barringer Date: Thu, 11 Dec 2014 21:49:42 -0600 Subject: [PATCH 37/81] Made reset flag count button red --- views/shared/modals/members.jade | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/views/shared/modals/members.jade b/views/shared/modals/members.jade index 27d42d4623..0255ab8e6d 100644 --- a/views/shared/modals/members.jade +++ b/views/shared/modals/members.jade @@ -98,7 +98,7 @@ script(type='text/ng-template', id='modals/abuse-flag.html') markdown(ng-model="abuseObject.text") p!=env.t('abuseFlagModalBody', {firstLinkStart: "", secondLinkStart: "", linkEnd: ""}) .modal-footer - button.pull-left.btn.btn-primary(ng-click='clearFlagCount(abuseObject, groupId)', ng-if='user.contributor.admin && abuseObject.flagCount >= 2') + button.pull-left.btn.btn-danger(ng-click='clearFlagCount(abuseObject, groupId)', ng-if='user.contributor.admin && abuseObject.flagCount >= 2') | Reset Flag Count button.btn.btn-primary(ng-click='$close()')=env.t('cancel') button.btn.btn-default(ng-click='reportAbuse(user, abuseObject, groupId)')=env.t("abuseFlagModalButton") From 1e3a07b8b52fb6a20a5c431e18e3d55b45732881 Mon Sep 17 00:00:00 2001 From: Blade Barringer Date: Thu, 4 Dec 2014 21:42:41 -0600 Subject: [PATCH 38/81] Flag icon opens blank modal --- public/js/controllers/groupsCtrl.js | 5 +++++ views/options/social/chat-message.jade | 2 ++ views/shared/modals/members.jade | 7 ++++++- 3 files changed, 13 insertions(+), 1 deletion(-) diff --git a/public/js/controllers/groupsCtrl.js b/public/js/controllers/groupsCtrl.js index a9f744839c..b823f0cb84 100644 --- a/public/js/controllers/groupsCtrl.js +++ b/public/js/controllers/groupsCtrl.js @@ -105,6 +105,11 @@ habitrpg.controller("GroupsCtrl", ['$scope', '$rootScope', 'Shared', 'Groups', ' $rootScope.openModal('private-message',{controller:'MemberModalCtrl'}); }); } + $scope.flagChat = function(uid) { + Members.selectMember(uid, function(){ + $rootScope.openModal('flag',{controller:'MemberModalCtrl'}); + }); + } } ]) diff --git a/views/options/social/chat-message.jade b/views/options/social/chat-message.jade index dc332452ed..bcd0016188 100644 --- a/views/options/social/chat-message.jade +++ b/views/options/social/chat-message.jade @@ -26,6 +26,8 @@ mixin chatMessages(inbox) |         a(ng-click='#{inbox? "user.ops.deletePM({params:{id:message.$key}})" : "deleteChatMessage(group, message)"}', ng-if='#{inbox ? "true" : ":: user.contributor.admin || message.uuid == user.id"}') span.glyphicon.glyphicon-trash(tooltip=env.t('delete')) + a(ng-click="flagChat(message.uuid)", ng-if='#{inbox ? "true" : ":: message.uuid != user.id"}') + span.glyphicon.glyphicon-flag(tooltip=env.t('flag')) span.float-label a.label.label-default.chat-message(ng-if=':: message.user', ng-class='::userLevelStyleFromLevel(message.contributor.level, message.backer.npc, style)', ng-click='clickMember(message.uuid, true)') span.glyphicon.glyphicon-arrow-right(ng-if='::message.sent') diff --git a/views/shared/modals/members.jade b/views/shared/modals/members.jade index 595929c819..f2ab1607e7 100644 --- a/views/shared/modals/members.jade +++ b/views/shared/modals/members.jade @@ -88,4 +88,9 @@ script(type='text/ng-template', id='modals/send-gift.html') button.btn.btn-primary(ng-show=fromBal, ng-click='sendGift(profile._id, gift)')=env.t("send") a.btn.btn-primary(ng-hide=fromBal, ng-click='Payments.showStripe({gift:gift, uuid:profile._id})')=env.t('card') a.btn.btn-warning(ng-hide=fromBal, href='/paypal/checkout?_id={{::user._id}}&apiToken={{::user.apiToken}}&gift={{Payments.encodeGift(profile._id, gift)}}') PayPal - button.btn.btn-default(ng-click='$close()')=env.t('cancel') \ No newline at end of file + button.btn.btn-default(ng-click='$close()')=env.t('cancel') + +script(type='text/ng-template', id='modals/flag.html') + .modal-header + .modal-body + .modal-footer From b3a56b6ded4ef9f6d88177f3169aa77a957f63a8 Mon Sep 17 00:00:00 2001 From: Blade Barringer Date: Thu, 4 Dec 2014 21:57:32 -0600 Subject: [PATCH 39/81] Added heading and body of flag modal --- views/shared/modals/members.jade | 2 ++ 1 file changed, 2 insertions(+) diff --git a/views/shared/modals/members.jade b/views/shared/modals/members.jade index f2ab1607e7..afcdd250cb 100644 --- a/views/shared/modals/members.jade +++ b/views/shared/modals/members.jade @@ -92,5 +92,7 @@ script(type='text/ng-template', id='modals/send-gift.html') script(type='text/ng-template', id='modals/flag.html') .modal-header + h4=env.t('flagModalHeading', {name: "{{profile.profile.name}}"}) .modal-body + h4!=env.t('flagModalBody', {firstLinkStart: "", secondLinkStart: "", linkEnd: ""}) .modal-footer From ee9214396b9d6db9dfa4b25021948f7cd525268a Mon Sep 17 00:00:00 2001 From: Blade Barringer Date: Thu, 4 Dec 2014 22:00:48 -0600 Subject: [PATCH 40/81] Renamed everything from flag to abuseFlag --- public/js/controllers/groupsCtrl.js | 2 +- views/shared/modals/members.jade | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/public/js/controllers/groupsCtrl.js b/public/js/controllers/groupsCtrl.js index b823f0cb84..ec1897451e 100644 --- a/public/js/controllers/groupsCtrl.js +++ b/public/js/controllers/groupsCtrl.js @@ -107,7 +107,7 @@ habitrpg.controller("GroupsCtrl", ['$scope', '$rootScope', 'Shared', 'Groups', ' } $scope.flagChat = function(uid) { Members.selectMember(uid, function(){ - $rootScope.openModal('flag',{controller:'MemberModalCtrl'}); + $rootScope.openModal('abuse-flag',{controller:'MemberModalCtrl'}); }); } } diff --git a/views/shared/modals/members.jade b/views/shared/modals/members.jade index afcdd250cb..c08064cbf4 100644 --- a/views/shared/modals/members.jade +++ b/views/shared/modals/members.jade @@ -90,9 +90,9 @@ script(type='text/ng-template', id='modals/send-gift.html') a.btn.btn-warning(ng-hide=fromBal, href='/paypal/checkout?_id={{::user._id}}&apiToken={{::user.apiToken}}&gift={{Payments.encodeGift(profile._id, gift)}}') PayPal button.btn.btn-default(ng-click='$close()')=env.t('cancel') -script(type='text/ng-template', id='modals/flag.html') +script(type='text/ng-template', id='modals/abuse-flag.html') .modal-header - h4=env.t('flagModalHeading', {name: "{{profile.profile.name}}"}) + h4=env.t('abuseFlagModalHeading', {name: "{{profile.profile.name}}"}) .modal-body - h4!=env.t('flagModalBody', {firstLinkStart: "", secondLinkStart: "", linkEnd: ""}) + h4!=env.t('abuseFlagModalBody', {firstLinkStart: "", secondLinkStart: "", linkEnd: ""}) .modal-footer From f50f40b77dc13527b6db06261b9d33c77cc285a5 Mon Sep 17 00:00:00 2001 From: Blade Barringer Date: Thu, 4 Dec 2014 22:02:34 -0600 Subject: [PATCH 41/81] Added text-danger span on username --- views/shared/modals/members.jade | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/views/shared/modals/members.jade b/views/shared/modals/members.jade index c08064cbf4..0b72234771 100644 --- a/views/shared/modals/members.jade +++ b/views/shared/modals/members.jade @@ -92,7 +92,7 @@ script(type='text/ng-template', id='modals/send-gift.html') script(type='text/ng-template', id='modals/abuse-flag.html') .modal-header - h4=env.t('abuseFlagModalHeading', {name: "{{profile.profile.name}}"}) + h4!=env.t('abuseFlagModalHeading', {name: "{{profile.profile.name}}"}) .modal-body h4!=env.t('abuseFlagModalBody', {firstLinkStart: "", secondLinkStart: "", linkEnd: ""}) .modal-footer From 658046024e9ed00f86d4ad01ac3252f2dbb2d301 Mon Sep 17 00:00:00 2001 From: Blade Barringer Date: Thu, 4 Dec 2014 22:03:35 -0600 Subject: [PATCH 42/81] Corrected tooltip name --- views/options/social/chat-message.jade | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/views/options/social/chat-message.jade b/views/options/social/chat-message.jade index bcd0016188..4315cb0566 100644 --- a/views/options/social/chat-message.jade +++ b/views/options/social/chat-message.jade @@ -27,7 +27,7 @@ mixin chatMessages(inbox) a(ng-click='#{inbox? "user.ops.deletePM({params:{id:message.$key}})" : "deleteChatMessage(group, message)"}', ng-if='#{inbox ? "true" : ":: user.contributor.admin || message.uuid == user.id"}') span.glyphicon.glyphicon-trash(tooltip=env.t('delete')) a(ng-click="flagChat(message.uuid)", ng-if='#{inbox ? "true" : ":: message.uuid != user.id"}') - span.glyphicon.glyphicon-flag(tooltip=env.t('flag')) + span.glyphicon.glyphicon-flag(tooltip=env.t('abuseFlag')) span.float-label a.label.label-default.chat-message(ng-if=':: message.user', ng-class='::userLevelStyleFromLevel(message.contributor.level, message.backer.npc, style)', ng-click='clickMember(message.uuid, true)') span.glyphicon.glyphicon-arrow-right(ng-if='::message.sent') From 9fd4588b7429ff66307235a6ba53ad0d55238938 Mon Sep 17 00:00:00 2001 From: Blade Barringer Date: Fri, 5 Dec 2014 06:41:40 -0600 Subject: [PATCH 43/81] Added buttons to footer, cleaned up functions --- public/js/controllers/groupsCtrl.js | 14 +++++++++++--- views/options/social/chat-message.jade | 2 +- views/shared/modals/members.jade | 2 ++ 3 files changed, 14 insertions(+), 4 deletions(-) diff --git a/public/js/controllers/groupsCtrl.js b/public/js/controllers/groupsCtrl.js index ec1897451e..63933e4fe7 100644 --- a/public/js/controllers/groupsCtrl.js +++ b/public/js/controllers/groupsCtrl.js @@ -105,9 +105,12 @@ habitrpg.controller("GroupsCtrl", ['$scope', '$rootScope', 'Shared', 'Groups', ' $rootScope.openModal('private-message',{controller:'MemberModalCtrl'}); }); } - $scope.flagChat = function(uid) { - Members.selectMember(uid, function(){ - $rootScope.openModal('abuse-flag',{controller:'MemberModalCtrl'}); + $scope.flagChat = function(message) { + $scope.abuseObject = message; + Members.selectMember(message.uuid, function(){ + $rootScope.openModal('abuse-flag',{controller:'MemberModalCtrl', + scope: $scope + }); }); } } @@ -144,6 +147,11 @@ habitrpg.controller("GroupsCtrl", ['$scope', '$rootScope', 'Shared', 'Groups', ' $scope.$close(); }) } + $scope.reportAbuse = function(reporter, message) { + Notification.text(window.env.t('abuseReported')); + $rootScope.User.sync(); + $scope.$close(); + } } ]) diff --git a/views/options/social/chat-message.jade b/views/options/social/chat-message.jade index 4315cb0566..161293e87e 100644 --- a/views/options/social/chat-message.jade +++ b/views/options/social/chat-message.jade @@ -26,7 +26,7 @@ mixin chatMessages(inbox) |         a(ng-click='#{inbox? "user.ops.deletePM({params:{id:message.$key}})" : "deleteChatMessage(group, message)"}', ng-if='#{inbox ? "true" : ":: user.contributor.admin || message.uuid == user.id"}') span.glyphicon.glyphicon-trash(tooltip=env.t('delete')) - a(ng-click="flagChat(message.uuid)", ng-if='#{inbox ? "true" : ":: message.uuid != user.id"}') + a(ng-click="flagChat(message)", ng-if='#{inbox ? "true" : ":: message.uuid != user.id"}') span.glyphicon.glyphicon-flag(tooltip=env.t('abuseFlag')) span.float-label a.label.label-default.chat-message(ng-if=':: message.user', ng-class='::userLevelStyleFromLevel(message.contributor.level, message.backer.npc, style)', ng-click='clickMember(message.uuid, true)') diff --git a/views/shared/modals/members.jade b/views/shared/modals/members.jade index 0b72234771..6c2958ec63 100644 --- a/views/shared/modals/members.jade +++ b/views/shared/modals/members.jade @@ -96,3 +96,5 @@ script(type='text/ng-template', id='modals/abuse-flag.html') .modal-body h4!=env.t('abuseFlagModalBody', {firstLinkStart: "", secondLinkStart: "", linkEnd: ""}) .modal-footer + button.btn.btn-primary(ng-click='$close()')=env.t('cancel') + button.btn.btn-default(ng-click='reportAbuse(user, abuseObject)')=env.t("abuseFlagModalButton") From e2c0a41f8845d9f62eb8d047a276db0f3b818604 Mon Sep 17 00:00:00 2001 From: Blade Barringer Date: Fri, 5 Dec 2014 06:47:04 -0600 Subject: [PATCH 44/81] Added a flags key to message object --- src/models/group.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/models/group.js b/src/models/group.js index 1bc275afe4..649d8d571b 100644 --- a/src/models/group.js +++ b/src/models/group.js @@ -98,7 +98,8 @@ var chatDefaults = module.exports.chatDefaults = function(msg,user){ id: shared.uuid(), text: msg, timestamp: +new Date, - likes: {} + likes: {}, + flags: {} }; if (user) { _.defaults(message, { @@ -330,4 +331,4 @@ Group.count({_id:'habitrpg'},function(err,ct){ type: 'guild', privacy:'public' }).save(); -}) \ No newline at end of file +}) From d5d83d67e93e3fb6528de624a9a47987417a2c32 Mon Sep 17 00:00:00 2001 From: Blade Barringer Date: Fri, 5 Dec 2014 06:50:41 -0600 Subject: [PATCH 45/81] Renamed flagChat to flagChatMessage --- public/js/controllers/groupsCtrl.js | 2 +- views/options/social/chat-message.jade | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/public/js/controllers/groupsCtrl.js b/public/js/controllers/groupsCtrl.js index 63933e4fe7..523b9abff7 100644 --- a/public/js/controllers/groupsCtrl.js +++ b/public/js/controllers/groupsCtrl.js @@ -105,7 +105,7 @@ habitrpg.controller("GroupsCtrl", ['$scope', '$rootScope', 'Shared', 'Groups', ' $rootScope.openModal('private-message',{controller:'MemberModalCtrl'}); }); } - $scope.flagChat = function(message) { + $scope.flagChatMessage = function(message) { $scope.abuseObject = message; Members.selectMember(message.uuid, function(){ $rootScope.openModal('abuse-flag',{controller:'MemberModalCtrl', diff --git a/views/options/social/chat-message.jade b/views/options/social/chat-message.jade index 161293e87e..a143f13b44 100644 --- a/views/options/social/chat-message.jade +++ b/views/options/social/chat-message.jade @@ -26,7 +26,7 @@ mixin chatMessages(inbox) |         a(ng-click='#{inbox? "user.ops.deletePM({params:{id:message.$key}})" : "deleteChatMessage(group, message)"}', ng-if='#{inbox ? "true" : ":: user.contributor.admin || message.uuid == user.id"}') span.glyphicon.glyphicon-trash(tooltip=env.t('delete')) - a(ng-click="flagChat(message)", ng-if='#{inbox ? "true" : ":: message.uuid != user.id"}') + a(ng-click="flagChatMessage(message)", ng-if='#{inbox ? "true" : ":: message.uuid != user.id"}') span.glyphicon.glyphicon-flag(tooltip=env.t('abuseFlag')) span.float-label a.label.label-default.chat-message(ng-if=':: message.user', ng-class='::userLevelStyleFromLevel(message.contributor.level, message.backer.npc, style)', ng-click='clickMember(message.uuid, true)') From 50e823600814dcd9553e62bcfba32d3c1ac92eb2 Mon Sep 17 00:00:00 2001 From: Blade Barringer Date: Fri, 5 Dec 2014 06:52:49 -0600 Subject: [PATCH 46/81] Removed flag from system notifications --- views/options/social/chat-message.jade | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/views/options/social/chat-message.jade b/views/options/social/chat-message.jade index a143f13b44..3dbd70ef6a 100644 --- a/views/options/social/chat-message.jade +++ b/views/options/social/chat-message.jade @@ -26,7 +26,7 @@ mixin chatMessages(inbox) |         a(ng-click='#{inbox? "user.ops.deletePM({params:{id:message.$key}})" : "deleteChatMessage(group, message)"}', ng-if='#{inbox ? "true" : ":: user.contributor.admin || message.uuid == user.id"}') span.glyphicon.glyphicon-trash(tooltip=env.t('delete')) - a(ng-click="flagChatMessage(message)", ng-if='#{inbox ? "true" : ":: message.uuid != user.id"}') + a(ng-click="flagChatMessage(message)", ng-if='#{inbox ? "true" : ":: message.uuid != user.id && message.uuid != \'system\'"}') span.glyphicon.glyphicon-flag(tooltip=env.t('abuseFlag')) span.float-label a.label.label-default.chat-message(ng-if=':: message.user', ng-class='::userLevelStyleFromLevel(message.contributor.level, message.backer.npc, style)', ng-click='clickMember(message.uuid, true)') From 3c62e0b8629f17705b41db87ed4b14067785b4a9 Mon Sep 17 00:00:00 2001 From: Blade Barringer Date: Fri, 5 Dec 2014 07:03:33 -0600 Subject: [PATCH 47/81] Added some logic for adding flags --- public/js/controllers/groupsCtrl.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/public/js/controllers/groupsCtrl.js b/public/js/controllers/groupsCtrl.js index 523b9abff7..637361bda4 100644 --- a/public/js/controllers/groupsCtrl.js +++ b/public/js/controllers/groupsCtrl.js @@ -148,6 +148,10 @@ habitrpg.controller("GroupsCtrl", ['$scope', '$rootScope', 'Shared', 'Groups', ' }) } $scope.reportAbuse = function(reporter, message) { + if(!message.flags) message.flags = {}; + message.flags[User.user._id] = true; + // Post to API should look something like this + //$http.post(ApiUrlService.get() + '/api/v2/groups/' + group._id + '/chat/' + message.id + '/flag'); Notification.text(window.env.t('abuseReported')); $rootScope.User.sync(); $scope.$close(); From a22c3c59683163003a19b175b560712f2e0993a3 Mon Sep 17 00:00:00 2001 From: Blade Barringer Date: Fri, 5 Dec 2014 07:42:52 -0600 Subject: [PATCH 48/81] Error handling for if message already flagged --- public/js/controllers/groupsCtrl.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/public/js/controllers/groupsCtrl.js b/public/js/controllers/groupsCtrl.js index 637361bda4..7d01db4554 100644 --- a/public/js/controllers/groupsCtrl.js +++ b/public/js/controllers/groupsCtrl.js @@ -106,6 +106,9 @@ habitrpg.controller("GroupsCtrl", ['$scope', '$rootScope', 'Shared', 'Groups', ' }); } $scope.flagChatMessage = function(message) { + if(!message.flags) message.flags = {}; + if(message.flags[User.user._id]) + Notification.text(window.env.t('abuseAlreadyReported')); $scope.abuseObject = message; Members.selectMember(message.uuid, function(){ $rootScope.openModal('abuse-flag',{controller:'MemberModalCtrl', @@ -148,8 +151,7 @@ habitrpg.controller("GroupsCtrl", ['$scope', '$rootScope', 'Shared', 'Groups', ' }) } $scope.reportAbuse = function(reporter, message) { - if(!message.flags) message.flags = {}; - message.flags[User.user._id] = true; + message.flags[reporter._id] = true; // Post to API should look something like this //$http.post(ApiUrlService.get() + '/api/v2/groups/' + group._id + '/chat/' + message.id + '/flag'); Notification.text(window.env.t('abuseReported')); From 6d656d3713946b50057b5c33550fea80232b34b7 Mon Sep 17 00:00:00 2001 From: Blade Barringer Date: Fri, 5 Dec 2014 07:43:20 -0600 Subject: [PATCH 49/81] Give flag text danger class and already reported message if already reproted --- public/css/index.styl | 3 +++ views/options/social/chat-message.jade | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/public/css/index.styl b/public/css/index.styl index 07e2829d0b..381ab03082 100644 --- a/public/css/index.styl +++ b/public/css/index.styl @@ -135,6 +135,9 @@ a a span.glyphicon color: #333 // Takes base color from bootstrap + &.text-danger + color: #a94442 // Allows glyphicon to use text-danger class + a.label color: #fff diff --git a/views/options/social/chat-message.jade b/views/options/social/chat-message.jade index 3dbd70ef6a..ab0dc37e0d 100644 --- a/views/options/social/chat-message.jade +++ b/views/options/social/chat-message.jade @@ -27,7 +27,7 @@ mixin chatMessages(inbox) a(ng-click='#{inbox? "user.ops.deletePM({params:{id:message.$key}})" : "deleteChatMessage(group, message)"}', ng-if='#{inbox ? "true" : ":: user.contributor.admin || message.uuid == user.id"}') span.glyphicon.glyphicon-trash(tooltip=env.t('delete')) a(ng-click="flagChatMessage(message)", ng-if='#{inbox ? "true" : ":: message.uuid != user.id && message.uuid != \'system\'"}') - span.glyphicon.glyphicon-flag(tooltip=env.t('abuseFlag')) + span.glyphicon.glyphicon-flag(tooltip="{{message.flags[user._id] ? env.t('abuseAlreadyReported') : env.t('abuseFlag')}}" ng-class='message.flags[user._id] ? "text-danger" : ""') span.float-label a.label.label-default.chat-message(ng-if=':: message.user', ng-class='::userLevelStyleFromLevel(message.contributor.level, message.backer.npc, style)', ng-click='clickMember(message.uuid, true)') span.glyphicon.glyphicon-arrow-right(ng-if='::message.sent') From 057a8b1a06828c58c0734c2ff208bf4d2b1b3335 Mon Sep 17 00:00:00 2001 From: Blade Barringer Date: Fri, 5 Dec 2014 07:43:38 -0600 Subject: [PATCH 50/81] Prevent modal from popping up if already reported --- public/js/controllers/groupsCtrl.js | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/public/js/controllers/groupsCtrl.js b/public/js/controllers/groupsCtrl.js index 7d01db4554..809b7f1687 100644 --- a/public/js/controllers/groupsCtrl.js +++ b/public/js/controllers/groupsCtrl.js @@ -109,12 +109,14 @@ habitrpg.controller("GroupsCtrl", ['$scope', '$rootScope', 'Shared', 'Groups', ' if(!message.flags) message.flags = {}; if(message.flags[User.user._id]) Notification.text(window.env.t('abuseAlreadyReported')); - $scope.abuseObject = message; - Members.selectMember(message.uuid, function(){ - $rootScope.openModal('abuse-flag',{controller:'MemberModalCtrl', - scope: $scope + else { + $scope.abuseObject = message; + Members.selectMember(message.uuid, function(){ + $rootScope.openModal('abuse-flag',{controller:'MemberModalCtrl', + scope: $scope + }); }); - }); + } } } ]) From dd68e6a29ddbf9d78b7c8639f182be17df0042dd Mon Sep 17 00:00:00 2001 From: Blade Barringer Date: Fri, 5 Dec 2014 22:09:56 -0600 Subject: [PATCH 51/81] Converted heading to paragraph --- views/shared/modals/members.jade | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/views/shared/modals/members.jade b/views/shared/modals/members.jade index 6c2958ec63..a2cc76b95a 100644 --- a/views/shared/modals/members.jade +++ b/views/shared/modals/members.jade @@ -94,7 +94,7 @@ script(type='text/ng-template', id='modals/abuse-flag.html') .modal-header h4!=env.t('abuseFlagModalHeading', {name: "{{profile.profile.name}}"}) .modal-body - h4!=env.t('abuseFlagModalBody', {firstLinkStart: "", secondLinkStart: "", linkEnd: ""}) + p!=env.t('abuseFlagModalBody', {firstLinkStart: "", secondLinkStart: "", linkEnd: ""}) .modal-footer button.btn.btn-primary(ng-click='$close()')=env.t('cancel') button.btn.btn-default(ng-click='reportAbuse(user, abuseObject)')=env.t("abuseFlagModalButton") From bbf94aac647fe972ce68668b3ebcf21e7ed9db83 Mon Sep 17 00:00:00 2001 From: Blade Barringer Date: Fri, 5 Dec 2014 22:14:48 -0600 Subject: [PATCH 52/81] Added text of message to make sure user clicked the right flag --- views/shared/modals/members.jade | 2 ++ 1 file changed, 2 insertions(+) diff --git a/views/shared/modals/members.jade b/views/shared/modals/members.jade index a2cc76b95a..3513b8b433 100644 --- a/views/shared/modals/members.jade +++ b/views/shared/modals/members.jade @@ -94,6 +94,8 @@ script(type='text/ng-template', id='modals/abuse-flag.html') .modal-header h4!=env.t('abuseFlagModalHeading', {name: "{{profile.profile.name}}"}) .modal-body + blockquote + | {{abuseObject.text}} p!=env.t('abuseFlagModalBody', {firstLinkStart: "", secondLinkStart: "", linkEnd: ""}) .modal-footer button.btn.btn-primary(ng-click='$close()')=env.t('cancel') From 1a59815cc8ba1b1a2a01c98f2cffaca66c9a5d80 Mon Sep 17 00:00:00 2001 From: Blade Barringer Date: Fri, 5 Dec 2014 22:15:03 -0600 Subject: [PATCH 53/81] Added todo for paglias --- public/js/controllers/groupsCtrl.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/public/js/controllers/groupsCtrl.js b/public/js/controllers/groupsCtrl.js index 809b7f1687..a8f21adbbd 100644 --- a/public/js/controllers/groupsCtrl.js +++ b/public/js/controllers/groupsCtrl.js @@ -154,8 +154,7 @@ habitrpg.controller("GroupsCtrl", ['$scope', '$rootScope', 'Shared', 'Groups', ' } $scope.reportAbuse = function(reporter, message) { message.flags[reporter._id] = true; - // Post to API should look something like this - //$http.post(ApiUrlService.get() + '/api/v2/groups/' + group._id + '/chat/' + message.id + '/flag'); + // @TODO @paglias API Call goes here Notification.text(window.env.t('abuseReported')); $rootScope.User.sync(); $scope.$close(); From 6749109423717c9a246d0b5334fb359b5d9db8b0 Mon Sep 17 00:00:00 2001 From: Blade Barringer Date: Fri, 5 Dec 2014 22:20:14 -0600 Subject: [PATCH 54/81] Added note for paglias --- src/models/group.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/models/group.js b/src/models/group.js index 649d8d571b..af5e22dab2 100644 --- a/src/models/group.js +++ b/src/models/group.js @@ -99,7 +99,7 @@ var chatDefaults = module.exports.chatDefaults = function(msg,user){ text: msg, timestamp: +new Date, likes: {}, - flags: {} + flags: {} // for @paglias, @crookedneighbor added this. }; if (user) { _.defaults(message, { From e84880d3e872e85af3e29e0a0381a6a4ad8b4551 Mon Sep 17 00:00:00 2001 From: Matteo Pagliazzi Date: Sun, 7 Dec 2014 14:35:09 +0100 Subject: [PATCH 55/81] feat(flag-message): add server methods --- public/js/controllers/groupsCtrl.js | 45 ++++++++++++++------------ public/js/services/groupServices.js | 1 + src/controllers/groups.js | 16 +++++++++ src/models/group.js | 14 +++++++- src/routes/apiv2.coffee | 11 +++++++ views/options/social/chat-message.jade | 2 +- views/shared/modals/members.jade | 2 +- 7 files changed, 67 insertions(+), 24 deletions(-) diff --git a/public/js/controllers/groupsCtrl.js b/public/js/controllers/groupsCtrl.js index a8f21adbbd..dfd5718247 100644 --- a/public/js/controllers/groupsCtrl.js +++ b/public/js/controllers/groupsCtrl.js @@ -105,24 +105,11 @@ habitrpg.controller("GroupsCtrl", ['$scope', '$rootScope', 'Shared', 'Groups', ' $rootScope.openModal('private-message',{controller:'MemberModalCtrl'}); }); } - $scope.flagChatMessage = function(message) { - if(!message.flags) message.flags = {}; - if(message.flags[User.user._id]) - Notification.text(window.env.t('abuseAlreadyReported')); - else { - $scope.abuseObject = message; - Members.selectMember(message.uuid, function(){ - $rootScope.openModal('abuse-flag',{controller:'MemberModalCtrl', - scope: $scope - }); - }); - } - } } ]) - .controller("MemberModalCtrl", ['$scope', '$rootScope', 'Members', 'Shared', '$http', 'Notification', - function($scope, $rootScope, Members, Shared, $http, Notification) { + .controller("MemberModalCtrl", ['$scope', '$rootScope', 'Members', 'Shared', '$http', 'Notification', 'Groups', + function($scope, $rootScope, Members, Shared, $http, Notification, Groups) { $scope.timestamp = function(timestamp){ return moment(timestamp).format('MM/DD/YYYY'); } @@ -152,12 +139,12 @@ habitrpg.controller("GroupsCtrl", ['$scope', '$rootScope', 'Shared', 'Groups', ' $scope.$close(); }) } - $scope.reportAbuse = function(reporter, message) { + $scope.reportAbuse = function(reporter, message, groupId) { message.flags[reporter._id] = true; - // @TODO @paglias API Call goes here - Notification.text(window.env.t('abuseReported')); - $rootScope.User.sync(); - $scope.$close(); + Groups.Group.flagChatMessage({gid: groupId, messageId: message.id}, undefined, function(data){ + Notification.text(window.env.t('abuseReported')); + $scope.$close(); + }); } } ]) @@ -217,7 +204,7 @@ habitrpg.controller("GroupsCtrl", ['$scope', '$rootScope', 'Shared', 'Groups', ' }); }]) - .controller('ChatCtrl', ['$scope', 'Groups', 'User', '$http', 'ApiUrlService', 'Notification', function($scope, Groups, User, $http, ApiUrlService, Notification){ + .controller('ChatCtrl', ['$scope', 'Groups', 'User', '$http', 'ApiUrlService', 'Notification', 'Members', '$rootScope', function($scope, Groups, User, $http, ApiUrlService, Notification, Members, $rootScope){ $scope.message = {content:''}; $scope._sending = false; @@ -282,6 +269,22 @@ habitrpg.controller("GroupsCtrl", ['$scope', '$rootScope', 'Shared', 'Groups', ' $http.post(ApiUrlService.get() + '/api/v2/groups/' + group._id + '/chat/' + message.id + '/like'); } + $scope.flagChatMessage = function(groupId,message) { + if(!message.flags) message.flags = {}; + if(message.flags[User.user._id]) + Notification.text(window.env.t('abuseAlreadyReported')); + else { + $scope.abuseObject = message; + $scope.groupId = groupId; + Members.selectMember(message.uuid, function(){ + $rootScope.openModal('abuse-flag',{ + controller:'MemberModalCtrl', + scope: $scope + }); + }); + } + } + $scope.sync = function(group){ group.$get(); } diff --git a/public/js/services/groupServices.js b/public/js/services/groupServices.js index 42dd787846..45ecc8b971 100644 --- a/public/js/services/groupServices.js +++ b/public/js/services/groupServices.js @@ -13,6 +13,7 @@ angular.module('groupServices', ['ngResource']). //query: {method: "GET", isArray:false}, postChat: {method: "POST", url: ApiUrlService.get() + '/api/v2/groups/:gid/chat'}, deleteChatMessage: {method: "DELETE", url: ApiUrlService.get() + '/api/v2/groups/:gid/chat/:messageId'}, + flagChatMessage: {method: "POST", url: ApiUrlService.get() + '/api/v2/groups/:gid/chat/:messageId/flag'}, join: {method: "POST", url: ApiUrlService.get() + '/api/v2/groups/:gid/join'}, leave: {method: "POST", url: ApiUrlService.get() + '/api/v2/groups/:gid/leave'}, invite: {method: "POST", url: ApiUrlService.get() + '/api/v2/groups/:gid/invite'}, diff --git a/src/controllers/groups.js b/src/controllers/groups.js index 50272cdab2..0be99d8fae 100644 --- a/src/controllers/groups.js +++ b/src/controllers/groups.js @@ -256,6 +256,22 @@ api.deleteChatMessage = function(req, res, next){ }); } +api.flagChatMessage = function(req, res, next){ + var user = res.locals.user + var group = res.locals.group; + var message = _.find(group.chat, {id: req.params.mid}); + + if(!message) return res.json(404, {err: "Message not found!"}); + if(message.uuid == user._id) return res.json(401, {err: "Can't report your own message."}); + + message.flags[user._id] = true; + group.markModified('chat'); + group.save(function(err,_saved){ + if(err) return next(err); + return res.send(204); + }); +} + api.seenMessage = function(req,res,next){ // Skip the auth step, we want this to be fast. If !found with uuid/token, then it just doesn't save // Check for req.params.gid to exist diff --git a/src/models/group.js b/src/models/group.js index af5e22dab2..3e00370b67 100644 --- a/src/models/group.js +++ b/src/models/group.js @@ -99,7 +99,7 @@ var chatDefaults = module.exports.chatDefaults = function(msg,user){ text: msg, timestamp: +new Date, likes: {}, - flags: {} // for @paglias, @crookedneighbor added this. + flags: {} }; if (user) { _.defaults(message, { @@ -317,6 +317,18 @@ GroupSchema.statics.bossQuest = function(user, progress, cb) { }) } +GroupSchema.methods.toJSON = function() { + var doc = this.toObject(); + if(doc.chat){ + doc.chat.forEach(function(msg){ + msg.flags = {}; + }); + } + + return doc; +}; + + module.exports.schema = GroupSchema; var Group = module.exports.model = mongoose.model("Group", GroupSchema); diff --git a/src/routes/apiv2.coffee b/src/routes/apiv2.coffee index 415577d565..5708bfac51 100644 --- a/src/routes/apiv2.coffee +++ b/src/routes/apiv2.coffee @@ -577,6 +577,17 @@ module.exports = (swagger, v2) -> middleware: [auth.auth, i18n.getUserLanguage, groups.attachGroup] action: groups.likeChatMessage + "/groups/{gid}/chat/{mid}/flag": + spec: + method: 'POST' + description: "Flag a chat message" + parameters: [ + path 'gid','Group id','string' + path 'mid','Message id','string' + ] + middleware: [auth.auth, i18n.getUserLanguage, groups.attachGroup] + action: groups.flagChatMessage + # --------------------------------- # Members # --------------------------------- diff --git a/views/options/social/chat-message.jade b/views/options/social/chat-message.jade index ab0dc37e0d..bbc4fed1db 100644 --- a/views/options/social/chat-message.jade +++ b/views/options/social/chat-message.jade @@ -26,7 +26,7 @@ mixin chatMessages(inbox) |         a(ng-click='#{inbox? "user.ops.deletePM({params:{id:message.$key}})" : "deleteChatMessage(group, message)"}', ng-if='#{inbox ? "true" : ":: user.contributor.admin || message.uuid == user.id"}') span.glyphicon.glyphicon-trash(tooltip=env.t('delete')) - a(ng-click="flagChatMessage(message)", ng-if='#{inbox ? "true" : ":: message.uuid != user.id && message.uuid != \'system\'"}') + a(ng-click="flagChatMessage(group._id, message)", ng-if='#{inbox ? "true" : ":: message.uuid != user.id && message.uuid != \'system\'"}') span.glyphicon.glyphicon-flag(tooltip="{{message.flags[user._id] ? env.t('abuseAlreadyReported') : env.t('abuseFlag')}}" ng-class='message.flags[user._id] ? "text-danger" : ""') span.float-label a.label.label-default.chat-message(ng-if=':: message.user', ng-class='::userLevelStyleFromLevel(message.contributor.level, message.backer.npc, style)', ng-click='clickMember(message.uuid, true)') diff --git a/views/shared/modals/members.jade b/views/shared/modals/members.jade index 3513b8b433..3dc12dfe1a 100644 --- a/views/shared/modals/members.jade +++ b/views/shared/modals/members.jade @@ -99,4 +99,4 @@ script(type='text/ng-template', id='modals/abuse-flag.html') p!=env.t('abuseFlagModalBody', {firstLinkStart: "", secondLinkStart: "", linkEnd: ""}) .modal-footer button.btn.btn-primary(ng-click='$close()')=env.t('cancel') - button.btn.btn-default(ng-click='reportAbuse(user, abuseObject)')=env.t("abuseFlagModalButton") + button.btn.btn-default(ng-click='reportAbuse(user, abuseObject, groupId)')=env.t("abuseFlagModalButton") From 739106f13e59a0b260be5c94a9f1400b374d2adc Mon Sep 17 00:00:00 2001 From: Blade Barringer Date: Thu, 11 Dec 2014 10:23:29 -0600 Subject: [PATCH 56/81] Updated message preview on flag abuse modal to use markdown interpretation --- views/shared/modals/members.jade | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/views/shared/modals/members.jade b/views/shared/modals/members.jade index 3dc12dfe1a..d457213d34 100644 --- a/views/shared/modals/members.jade +++ b/views/shared/modals/members.jade @@ -95,7 +95,7 @@ script(type='text/ng-template', id='modals/abuse-flag.html') h4!=env.t('abuseFlagModalHeading', {name: "{{profile.profile.name}}"}) .modal-body blockquote - | {{abuseObject.text}} + markdown(ng-model="abuseObject.text") p!=env.t('abuseFlagModalBody', {firstLinkStart: "", secondLinkStart: "", linkEnd: ""}) .modal-footer button.btn.btn-primary(ng-click='$close()')=env.t('cancel') From b6ae2302e8d50f75d102bda0e9a4f76ccd7d3ed2 Mon Sep 17 00:00:00 2001 From: Blade Barringer Date: Thu, 11 Dec 2014 10:29:12 -0600 Subject: [PATCH 57/81] User can only flag message after accepting community guidelines --- views/options/social/chat-message.jade | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/views/options/social/chat-message.jade b/views/options/social/chat-message.jade index bbc4fed1db..a5b18f2b79 100644 --- a/views/options/social/chat-message.jade +++ b/views/options/social/chat-message.jade @@ -26,7 +26,7 @@ mixin chatMessages(inbox) |         a(ng-click='#{inbox? "user.ops.deletePM({params:{id:message.$key}})" : "deleteChatMessage(group, message)"}', ng-if='#{inbox ? "true" : ":: user.contributor.admin || message.uuid == user.id"}') span.glyphicon.glyphicon-trash(tooltip=env.t('delete')) - a(ng-click="flagChatMessage(group._id, message)", ng-if='#{inbox ? "true" : ":: message.uuid != user.id && message.uuid != \'system\'"}') + a(ng-click="flagChatMessage(group._id, message)", ng-if='#{inbox ? "true" : ":: user.flags.communityGuidelinesAccepted && message.uuid != user.id && message.uuid != \'system\'"}') span.glyphicon.glyphicon-flag(tooltip="{{message.flags[user._id] ? env.t('abuseAlreadyReported') : env.t('abuseFlag')}}" ng-class='message.flags[user._id] ? "text-danger" : ""') span.float-label a.label.label-default.chat-message(ng-if=':: message.user', ng-class='::userLevelStyleFromLevel(message.contributor.level, message.backer.npc, style)', ng-click='clickMember(message.uuid, true)') From 3771d38d4867e0e1ba0ff8c67fb954172779f432 Mon Sep 17 00:00:00 2001 From: Blade Barringer Date: Thu, 11 Dec 2014 12:16:57 -0600 Subject: [PATCH 58/81] Added fallback for is message does not contain flags key. Added error for if message was already flagged by user --- src/controllers/groups.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/controllers/groups.js b/src/controllers/groups.js index 0be99d8fae..93a39a26f3 100644 --- a/src/controllers/groups.js +++ b/src/controllers/groups.js @@ -264,6 +264,9 @@ api.flagChatMessage = function(req, res, next){ if(!message) return res.json(404, {err: "Message not found!"}); if(message.uuid == user._id) return res.json(401, {err: "Can't report your own message."}); + if(!message.flags) message.flags = {}; + if(message.flags[user._id]) return res.json(401, {err: "You have already reported this message"}); + message.flags[user._id] = true; group.markModified('chat'); group.save(function(err,_saved){ From 27ebe1a0fe249bd5406a7196a25d6313a662a4f1 Mon Sep 17 00:00:00 2001 From: Blade Barringer Date: Thu, 11 Dec 2014 12:45:25 -0600 Subject: [PATCH 59/81] Converted sent transparency to ng-class instead of style --- views/options/social/chat-message.jade | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/views/options/social/chat-message.jade b/views/options/social/chat-message.jade index a5b18f2b79..c5fbe9e2e6 100644 --- a/views/options/social/chat-message.jade +++ b/views/options/social/chat-message.jade @@ -1,7 +1,7 @@ mixin chatMessages(inbox) ul.list-unstyled.tavern-chat - var ngRepeat = inbox ? 'message in user.inbox.messages | toArray:true | orderBy:"sort":true' : 'message in group.chat track by message.id' - li.chat-message(ng-repeat=ngRepeat, ng-class=':: {highlight: isUserMentioned(user,message) || message.uuid=="system", "own-message": user._id == message.uuid}', style='{{::message.sent ? "opacity:0.5" : ""}}') + li.chat-message(ng-repeat=ngRepeat, ng-class=':: {highlight: isUserMentioned(user,message) || message.uuid=="system", "own-message": user._id == message.uuid, "transparent": message.sent}') .scrollable-message span(ng-if='::message.user') a.label.label-default.chat-message.hidden-label From 45b91b1251c8fa2fbd3acde894aea71a91ad7156 Mon Sep 17 00:00:00 2001 From: Blade Barringer Date: Thu, 11 Dec 2014 13:00:25 -0600 Subject: [PATCH 60/81] Added flagCount variable --- src/controllers/groups.js | 7 ++++++- src/models/group.js | 3 ++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/src/controllers/groups.js b/src/controllers/groups.js index 93a39a26f3..289e950bdd 100644 --- a/src/controllers/groups.js +++ b/src/controllers/groups.js @@ -264,10 +264,15 @@ api.flagChatMessage = function(req, res, next){ if(!message) return res.json(404, {err: "Message not found!"}); if(message.uuid == user._id) return res.json(401, {err: "Can't report your own message."}); + // Log user ids that have flagged the message if(!message.flags) message.flags = {}; if(message.flags[user._id]) return res.json(401, {err: "You have already reported this message"}); - message.flags[user._id] = true; + + // Log total number of flags (publicly viewable) + if(!message.flagCount) message.flagCount = 0; + message.flagCount++ + group.markModified('chat'); group.save(function(err,_saved){ if(err) return next(err); diff --git a/src/models/group.js b/src/models/group.js index 3e00370b67..be66b59fa7 100644 --- a/src/models/group.js +++ b/src/models/group.js @@ -99,7 +99,8 @@ var chatDefaults = module.exports.chatDefaults = function(msg,user){ text: msg, timestamp: +new Date, likes: {}, - flags: {} + flags: {}, + flagCount: 0 }; if (user) { _.defaults(message, { From b056faeb34704ecd36d642211a608eb38db34e68 Mon Sep 17 00:00:00 2001 From: Blade Barringer Date: Thu, 11 Dec 2014 13:01:50 -0600 Subject: [PATCH 61/81] Hide message if flag count is 2 or higher --- views/options/social/chat-message.jade | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/views/options/social/chat-message.jade b/views/options/social/chat-message.jade index c5fbe9e2e6..b559793012 100644 --- a/views/options/social/chat-message.jade +++ b/views/options/social/chat-message.jade @@ -1,7 +1,7 @@ mixin chatMessages(inbox) ul.list-unstyled.tavern-chat - var ngRepeat = inbox ? 'message in user.inbox.messages | toArray:true | orderBy:"sort":true' : 'message in group.chat track by message.id' - li.chat-message(ng-repeat=ngRepeat, ng-class=':: {highlight: isUserMentioned(user,message) || message.uuid=="system", "own-message": user._id == message.uuid, "transparent": message.sent}') + li.chat-message(ng-repeat=ngRepeat, ng-class=':: {highlight: isUserMentioned(user,message) || message.uuid=="system", "own-message": user._id == message.uuid, "transparent": message.sent || message.flags[user._id]}', ng-if="!message.flagCount || message.flagCount < 2") .scrollable-message span(ng-if='::message.user') a.label.label-default.chat-message.hidden-label From d3d5430bf25001a3026c5bdca2767023baab833f Mon Sep 17 00:00:00 2001 From: Blade Barringer Date: Thu, 11 Dec 2014 13:05:48 -0600 Subject: [PATCH 62/81] Always show message if admin --- views/options/social/chat-message.jade | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/views/options/social/chat-message.jade b/views/options/social/chat-message.jade index b559793012..5490cc6793 100644 --- a/views/options/social/chat-message.jade +++ b/views/options/social/chat-message.jade @@ -1,7 +1,7 @@ mixin chatMessages(inbox) ul.list-unstyled.tavern-chat - var ngRepeat = inbox ? 'message in user.inbox.messages | toArray:true | orderBy:"sort":true' : 'message in group.chat track by message.id' - li.chat-message(ng-repeat=ngRepeat, ng-class=':: {highlight: isUserMentioned(user,message) || message.uuid=="system", "own-message": user._id == message.uuid, "transparent": message.sent || message.flags[user._id]}', ng-if="!message.flagCount || message.flagCount < 2") + li.chat-message(ng-repeat=ngRepeat, ng-class=':: {highlight: isUserMentioned(user,message) || message.uuid=="system", "own-message": user._id == message.uuid, "transparent": message.sent || message.flags[user._id]}', ng-if="!message.flagCount || message.flagCount < 2 || user.contributor.admin") .scrollable-message span(ng-if='::message.user') a.label.label-default.chat-message.hidden-label From dfd982cb045548c3c4d092b12c3a1beedad8929a Mon Sep 17 00:00:00 2001 From: Blade Barringer Date: Thu, 11 Dec 2014 13:09:00 -0600 Subject: [PATCH 63/81] Allow admin to see messages that have been flagged more than twice, but make them semi-transparent --- views/options/social/chat-message.jade | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/views/options/social/chat-message.jade b/views/options/social/chat-message.jade index 5490cc6793..fa2ab1743d 100644 --- a/views/options/social/chat-message.jade +++ b/views/options/social/chat-message.jade @@ -1,7 +1,7 @@ mixin chatMessages(inbox) ul.list-unstyled.tavern-chat - var ngRepeat = inbox ? 'message in user.inbox.messages | toArray:true | orderBy:"sort":true' : 'message in group.chat track by message.id' - li.chat-message(ng-repeat=ngRepeat, ng-class=':: {highlight: isUserMentioned(user,message) || message.uuid=="system", "own-message": user._id == message.uuid, "transparent": message.sent || message.flags[user._id]}', ng-if="!message.flagCount || message.flagCount < 2 || user.contributor.admin") + li.chat-message(ng-repeat=ngRepeat, ng-class=':: {highlight: isUserMentioned(user,message) || message.uuid=="system", "own-message": user._id == message.uuid, "transparent": message.sent || message.flags[user._id] || (user.contributor.admin && message.flagCount >= 1)}', ng-if="!message.flagCount || message.flagCount < 2 || user.contributor.admin") .scrollable-message span(ng-if='::message.user') a.label.label-default.chat-message.hidden-label From d6262efd3f9d4423338efd6b689b5570f4574ed1 Mon Sep 17 00:00:00 2001 From: Blade Barringer Date: Thu, 11 Dec 2014 13:12:50 -0600 Subject: [PATCH 64/81] Added note about how many flags a message has --- views/options/social/chat-message.jade | 2 ++ 1 file changed, 2 insertions(+) diff --git a/views/options/social/chat-message.jade b/views/options/social/chat-message.jade index fa2ab1743d..3aa4aa3b7d 100644 --- a/views/options/social/chat-message.jade +++ b/views/options/social/chat-message.jade @@ -2,6 +2,8 @@ mixin chatMessages(inbox) ul.list-unstyled.tavern-chat - var ngRepeat = inbox ? 'message in user.inbox.messages | toArray:true | orderBy:"sort":true' : 'message in group.chat track by message.id' li.chat-message(ng-repeat=ngRepeat, ng-class=':: {highlight: isUserMentioned(user,message) || message.uuid=="system", "own-message": user._id == message.uuid, "transparent": message.sent || message.flags[user._id] || (user.contributor.admin && message.flagCount >= 1)}', ng-if="!message.flagCount || message.flagCount < 2 || user.contributor.admin") + span.pull-right.text-danger(ng-if="user.contributor.admin && message.flagCount > 0") + | {{message.flagCount}} flag{{message.flagCount != 1 ? 's' : ''}} .scrollable-message span(ng-if='::message.user') a.label.label-default.chat-message.hidden-label From 6bb51c36e2b228c18fbbebb47f9540d43443a8d7 Mon Sep 17 00:00:00 2001 From: Blade Barringer Date: Thu, 11 Dec 2014 13:34:43 -0600 Subject: [PATCH 65/81] Admin flagging counts for more, automatically hides message --- src/controllers/groups.js | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/controllers/groups.js b/src/controllers/groups.js index 289e950bdd..1f40fb7684 100644 --- a/src/controllers/groups.js +++ b/src/controllers/groups.js @@ -271,7 +271,12 @@ api.flagChatMessage = function(req, res, next){ // Log total number of flags (publicly viewable) if(!message.flagCount) message.flagCount = 0; - message.flagCount++ + if(user.contributor.admin){ + // Arbitraty amount, higher than 2 + message.flagCount = 5; + } else { + message.flagCount++ + } group.markModified('chat'); group.save(function(err,_saved){ From eb36a53f6e2144db50a414afa843981772fe55ad Mon Sep 17 00:00:00 2001 From: Blade Barringer Date: Thu, 11 Dec 2014 13:38:57 -0600 Subject: [PATCH 66/81] Moved ng-class so it would update transparent class in real time after flaggging --- views/options/social/chat-message.jade | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/views/options/social/chat-message.jade b/views/options/social/chat-message.jade index 3aa4aa3b7d..c5ffe81e1b 100644 --- a/views/options/social/chat-message.jade +++ b/views/options/social/chat-message.jade @@ -1,10 +1,10 @@ mixin chatMessages(inbox) ul.list-unstyled.tavern-chat - var ngRepeat = inbox ? 'message in user.inbox.messages | toArray:true | orderBy:"sort":true' : 'message in group.chat track by message.id' - li.chat-message(ng-repeat=ngRepeat, ng-class=':: {highlight: isUserMentioned(user,message) || message.uuid=="system", "own-message": user._id == message.uuid, "transparent": message.sent || message.flags[user._id] || (user.contributor.admin && message.flagCount >= 1)}', ng-if="!message.flagCount || message.flagCount < 2 || user.contributor.admin") + li.chat-message(ng-repeat=ngRepeat, ng-class=':: {highlight: isUserMentioned(user,message) || message.uuid=="system", "own-message": user._id == message.uuid}', ng-if="!message.flagCount || message.flagCount < 2 || user.contributor.admin") span.pull-right.text-danger(ng-if="user.contributor.admin && message.flagCount > 0") | {{message.flagCount}} flag{{message.flagCount != 1 ? 's' : ''}} - .scrollable-message + .scrollable-message(ng-class='{"transparent": message.sent || message.flags[user._id] || (user.contributor.admin && message.flagCount >= 1)}') span(ng-if='::message.user') a.label.label-default.chat-message.hidden-label span.glyphicon.glyphicon-arrow-right(ng-if='::message.sent') From b1600198be2ad999b182537f3b01341fafc98251 Mon Sep 17 00:00:00 2001 From: Blade Barringer Date: Thu, 11 Dec 2014 17:29:01 -0600 Subject: [PATCH 67/81] Added method for letting an admin unhide a flagged message --- public/js/controllers/groupsCtrl.js | 8 ++++++++ public/js/services/groupServices.js | 1 + src/controllers/groups.js | 17 +++++++++++++++++ src/routes/apiv2.coffee | 11 +++++++++++ views/shared/modals/members.jade | 2 ++ 5 files changed, 39 insertions(+) diff --git a/public/js/controllers/groupsCtrl.js b/public/js/controllers/groupsCtrl.js index dfd5718247..f99a79ec76 100644 --- a/public/js/controllers/groupsCtrl.js +++ b/public/js/controllers/groupsCtrl.js @@ -146,6 +146,14 @@ habitrpg.controller("GroupsCtrl", ['$scope', '$rootScope', 'Shared', 'Groups', ' $scope.$close(); }); } + $scope.clearFlagCount = function(message, groupId) { + console.log("Heeey"); + Groups.Group.clearFlagCount({gid: groupId, messageId: message.id}, undefined, function(data){ + message.flagCount = 0; + Notification.text("Flags cleared"); + $scope.$close(); + }); + } } ]) diff --git a/public/js/services/groupServices.js b/public/js/services/groupServices.js index 45ecc8b971..e07f21b15c 100644 --- a/public/js/services/groupServices.js +++ b/public/js/services/groupServices.js @@ -14,6 +14,7 @@ angular.module('groupServices', ['ngResource']). postChat: {method: "POST", url: ApiUrlService.get() + '/api/v2/groups/:gid/chat'}, deleteChatMessage: {method: "DELETE", url: ApiUrlService.get() + '/api/v2/groups/:gid/chat/:messageId'}, flagChatMessage: {method: "POST", url: ApiUrlService.get() + '/api/v2/groups/:gid/chat/:messageId/flag'}, + clearFlagCount: {method: "POST", url: ApiUrlService.get() + '/api/v2/groups/:gid/chat/:messageId/clearflags'}, join: {method: "POST", url: ApiUrlService.get() + '/api/v2/groups/:gid/join'}, leave: {method: "POST", url: ApiUrlService.get() + '/api/v2/groups/:gid/leave'}, invite: {method: "POST", url: ApiUrlService.get() + '/api/v2/groups/:gid/invite'}, diff --git a/src/controllers/groups.js b/src/controllers/groups.js index 1f40fb7684..dbeaefbd0d 100644 --- a/src/controllers/groups.js +++ b/src/controllers/groups.js @@ -285,6 +285,23 @@ api.flagChatMessage = function(req, res, next){ }); } +api.clearFlagCount = function(req, res, next){ + var user = res.locals.user + var group = res.locals.group; + var message = _.find(group.chat, {id: req.params.mid}); + + if(!message) return res.json(404, {err: "Message not found!"}); + + if(user.contributor.admin) + message.flagCount = 0; + + group.markModified('chat'); + group.save(function(err,_saved){ + if(err) return next(err); + return res.send(204); + }); +} + api.seenMessage = function(req,res,next){ // Skip the auth step, we want this to be fast. If !found with uuid/token, then it just doesn't save // Check for req.params.gid to exist diff --git a/src/routes/apiv2.coffee b/src/routes/apiv2.coffee index 5708bfac51..0f8d272c69 100644 --- a/src/routes/apiv2.coffee +++ b/src/routes/apiv2.coffee @@ -588,6 +588,17 @@ module.exports = (swagger, v2) -> middleware: [auth.auth, i18n.getUserLanguage, groups.attachGroup] action: groups.flagChatMessage + "/groups/{gid}/chat/{mid}/clearflags": + spec: + method: 'POST' + description: "Clear flag count from message and unhide it" + parameters: [ + path 'gid','Group id','string' + path 'mid','Message id','string' + ] + middleware: [auth.auth, i18n.getUserLanguage, groups.attachGroup] + action: groups.clearFlagCount + # --------------------------------- # Members # --------------------------------- diff --git a/views/shared/modals/members.jade b/views/shared/modals/members.jade index d457213d34..27d42d4623 100644 --- a/views/shared/modals/members.jade +++ b/views/shared/modals/members.jade @@ -98,5 +98,7 @@ script(type='text/ng-template', id='modals/abuse-flag.html') markdown(ng-model="abuseObject.text") p!=env.t('abuseFlagModalBody', {firstLinkStart: "", secondLinkStart: "", linkEnd: ""}) .modal-footer + button.pull-left.btn.btn-primary(ng-click='clearFlagCount(abuseObject, groupId)', ng-if='user.contributor.admin && abuseObject.flagCount >= 2') + | Reset Flag Count button.btn.btn-primary(ng-click='$close()')=env.t('cancel') button.btn.btn-default(ng-click='reportAbuse(user, abuseObject, groupId)')=env.t("abuseFlagModalButton") From 5f49031c5e70cb1a990895049aa623843d26e5e7 Mon Sep 17 00:00:00 2001 From: Blade Barringer Date: Thu, 11 Dec 2014 17:41:54 -0600 Subject: [PATCH 68/81] Adjusted spacing of chat buttons --- views/options/social/chat-message.jade | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/views/options/social/chat-message.jade b/views/options/social/chat-message.jade index c5ffe81e1b..b9be7a2349 100644 --- a/views/options/social/chat-message.jade +++ b/views/options/social/chat-message.jade @@ -25,9 +25,10 @@ mixin chatMessages(inbox) if inbox a(ng-click="quickReply(message.uuid)") span.glyphicon.glyphicon-share-alt(tooltip=env.t('pm-reply')) - |         + |     a(ng-click='#{inbox? "user.ops.deletePM({params:{id:message.$key}})" : "deleteChatMessage(group, message)"}', ng-if='#{inbox ? "true" : ":: user.contributor.admin || message.uuid == user.id"}') span.glyphicon.glyphicon-trash(tooltip=env.t('delete')) + |     a(ng-click="flagChatMessage(group._id, message)", ng-if='#{inbox ? "true" : ":: user.flags.communityGuidelinesAccepted && message.uuid != user.id && message.uuid != \'system\'"}') span.glyphicon.glyphicon-flag(tooltip="{{message.flags[user._id] ? env.t('abuseAlreadyReported') : env.t('abuseFlag')}}" ng-class='message.flags[user._id] ? "text-danger" : ""') span.float-label From c737729470ac55debde583c20d8a6406befba14b Mon Sep 17 00:00:00 2001 From: Blade Barringer Date: Thu, 11 Dec 2014 21:40:25 -0600 Subject: [PATCH 69/81] Changed transparent class for admin to only appear if it is hidden --- views/options/social/chat-message.jade | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/views/options/social/chat-message.jade b/views/options/social/chat-message.jade index b9be7a2349..c7a7dc6619 100644 --- a/views/options/social/chat-message.jade +++ b/views/options/social/chat-message.jade @@ -4,7 +4,7 @@ mixin chatMessages(inbox) li.chat-message(ng-repeat=ngRepeat, ng-class=':: {highlight: isUserMentioned(user,message) || message.uuid=="system", "own-message": user._id == message.uuid}', ng-if="!message.flagCount || message.flagCount < 2 || user.contributor.admin") span.pull-right.text-danger(ng-if="user.contributor.admin && message.flagCount > 0") | {{message.flagCount}} flag{{message.flagCount != 1 ? 's' : ''}} - .scrollable-message(ng-class='{"transparent": message.sent || message.flags[user._id] || (user.contributor.admin && message.flagCount >= 1)}') + .scrollable-message(ng-class='{"transparent": message.sent || message.flags[user._id] || (user.contributor.admin && message.flagCount > 1)}') span(ng-if='::message.user') a.label.label-default.chat-message.hidden-label span.glyphicon.glyphicon-arrow-right(ng-if='::message.sent') From 595ac1c03e49256cd0c95d14386ae16b992b6f2f Mon Sep 17 00:00:00 2001 From: Blade Barringer Date: Thu, 11 Dec 2014 21:42:39 -0600 Subject: [PATCH 70/81] Made it impossible to flag own message in inbox --- views/options/social/chat-message.jade | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/views/options/social/chat-message.jade b/views/options/social/chat-message.jade index c7a7dc6619..e763a202ee 100644 --- a/views/options/social/chat-message.jade +++ b/views/options/social/chat-message.jade @@ -29,7 +29,7 @@ mixin chatMessages(inbox) a(ng-click='#{inbox? "user.ops.deletePM({params:{id:message.$key}})" : "deleteChatMessage(group, message)"}', ng-if='#{inbox ? "true" : ":: user.contributor.admin || message.uuid == user.id"}') span.glyphicon.glyphicon-trash(tooltip=env.t('delete')) |     - a(ng-click="flagChatMessage(group._id, message)", ng-if='#{inbox ? "true" : ":: user.flags.communityGuidelinesAccepted && message.uuid != user.id && message.uuid != \'system\'"}') + a(ng-click="flagChatMessage(group._id, message)", ng-if=':: !message.sent && user.flags.communityGuidelinesAccepted && message.uuid != user.id && message.uuid != "system"') span.glyphicon.glyphicon-flag(tooltip="{{message.flags[user._id] ? env.t('abuseAlreadyReported') : env.t('abuseFlag')}}" ng-class='message.flags[user._id] ? "text-danger" : ""') span.float-label a.label.label-default.chat-message(ng-if=':: message.user', ng-class='::userLevelStyleFromLevel(message.contributor.level, message.backer.npc, style)', ng-click='clickMember(message.uuid, true)') From 7d38eb3b591e90babff9f094eedd0808ddba2256 Mon Sep 17 00:00:00 2001 From: Blade Barringer Date: Thu, 11 Dec 2014 21:43:01 -0600 Subject: [PATCH 71/81] Allow admin to reflag a message they've flagged and unflagged previously --- src/controllers/groups.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/controllers/groups.js b/src/controllers/groups.js index dbeaefbd0d..caa36809cc 100644 --- a/src/controllers/groups.js +++ b/src/controllers/groups.js @@ -266,7 +266,7 @@ api.flagChatMessage = function(req, res, next){ // Log user ids that have flagged the message if(!message.flags) message.flags = {}; - if(message.flags[user._id]) return res.json(401, {err: "You have already reported this message"}); + if(message.flags[user._id] && !user.contributor.admin) return res.json(401, {err: "You have already reported this message"}); message.flags[user._id] = true; // Log total number of flags (publicly viewable) From 35675e3f28032424b4d4ff2009809c9c9524765d Mon Sep 17 00:00:00 2001 From: Blade Barringer Date: Thu, 11 Dec 2014 21:44:58 -0600 Subject: [PATCH 72/81] Admin can see flag on own message --- views/options/social/chat-message.jade | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/views/options/social/chat-message.jade b/views/options/social/chat-message.jade index e763a202ee..4945b44628 100644 --- a/views/options/social/chat-message.jade +++ b/views/options/social/chat-message.jade @@ -29,7 +29,7 @@ mixin chatMessages(inbox) a(ng-click='#{inbox? "user.ops.deletePM({params:{id:message.$key}})" : "deleteChatMessage(group, message)"}', ng-if='#{inbox ? "true" : ":: user.contributor.admin || message.uuid == user.id"}') span.glyphicon.glyphicon-trash(tooltip=env.t('delete')) |     - a(ng-click="flagChatMessage(group._id, message)", ng-if=':: !message.sent && user.flags.communityGuidelinesAccepted && message.uuid != user.id && message.uuid != "system"') + a(ng-click="flagChatMessage(group._id, message)", ng-if=':: user.contributor.admin || (!message.sent && user.flags.communityGuidelinesAccepted && message.uuid != user.id && message.uuid != "system")') span.glyphicon.glyphicon-flag(tooltip="{{message.flags[user._id] ? env.t('abuseAlreadyReported') : env.t('abuseFlag')}}" ng-class='message.flags[user._id] ? "text-danger" : ""') span.float-label a.label.label-default.chat-message(ng-if=':: message.user', ng-class='::userLevelStyleFromLevel(message.contributor.level, message.backer.npc, style)', ng-click='clickMember(message.uuid, true)') From 5b17b8b38222a73c57382586fb7f40127d449cce Mon Sep 17 00:00:00 2001 From: Blade Barringer Date: Thu, 11 Dec 2014 21:47:06 -0600 Subject: [PATCH 73/81] Made flag number more helpful --- views/options/social/chat-message.jade | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/views/options/social/chat-message.jade b/views/options/social/chat-message.jade index 4945b44628..afe4d2e1b3 100644 --- a/views/options/social/chat-message.jade +++ b/views/options/social/chat-message.jade @@ -3,7 +3,7 @@ mixin chatMessages(inbox) - var ngRepeat = inbox ? 'message in user.inbox.messages | toArray:true | orderBy:"sort":true' : 'message in group.chat track by message.id' li.chat-message(ng-repeat=ngRepeat, ng-class=':: {highlight: isUserMentioned(user,message) || message.uuid=="system", "own-message": user._id == message.uuid}', ng-if="!message.flagCount || message.flagCount < 2 || user.contributor.admin") span.pull-right.text-danger(ng-if="user.contributor.admin && message.flagCount > 0") - | {{message.flagCount}} flag{{message.flagCount != 1 ? 's' : ''}} + | {{message.flagCount > 1 ? "Message Hidden" : "1 flag"}} .scrollable-message(ng-class='{"transparent": message.sent || message.flags[user._id] || (user.contributor.admin && message.flagCount > 1)}') span(ng-if='::message.user') a.label.label-default.chat-message.hidden-label From ac34332582eb2cf113ced78b2f804bbf9ff4af83 Mon Sep 17 00:00:00 2001 From: Blade Barringer Date: Thu, 11 Dec 2014 21:49:42 -0600 Subject: [PATCH 74/81] Made reset flag count button red --- views/shared/modals/members.jade | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/views/shared/modals/members.jade b/views/shared/modals/members.jade index 27d42d4623..0255ab8e6d 100644 --- a/views/shared/modals/members.jade +++ b/views/shared/modals/members.jade @@ -98,7 +98,7 @@ script(type='text/ng-template', id='modals/abuse-flag.html') markdown(ng-model="abuseObject.text") p!=env.t('abuseFlagModalBody', {firstLinkStart: "", secondLinkStart: "", linkEnd: ""}) .modal-footer - button.pull-left.btn.btn-primary(ng-click='clearFlagCount(abuseObject, groupId)', ng-if='user.contributor.admin && abuseObject.flagCount >= 2') + button.pull-left.btn.btn-danger(ng-click='clearFlagCount(abuseObject, groupId)', ng-if='user.contributor.admin && abuseObject.flagCount >= 2') | Reset Flag Count button.btn.btn-primary(ng-click='$close()')=env.t('cancel') button.btn.btn-default(ng-click='reportAbuse(user, abuseObject, groupId)')=env.t("abuseFlagModalButton") From 948d5762cd2c73179a77835bd22bb7fae76458d6 Mon Sep 17 00:00:00 2001 From: Matteo Pagliazzi Date: Fri, 12 Dec 2014 11:39:22 +0100 Subject: [PATCH 75/81] fix(flag-message): small refactor --- src/controllers/groups.js | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/src/controllers/groups.js b/src/controllers/groups.js index caa36809cc..06f87e82a5 100644 --- a/src/controllers/groups.js +++ b/src/controllers/groups.js @@ -292,14 +292,18 @@ api.clearFlagCount = function(req, res, next){ if(!message) return res.json(404, {err: "Message not found!"}); - if(user.contributor.admin) + if(user.contributor.admin){ message.flagCount = 0; + + group.markModified('chat'); + group.save(function(err,_saved){ + if(err) return next(err); + return res.send(204); + }); + }else{ + return res.json(401, {err: "Only an admin can clear the flag count!"}) + } - group.markModified('chat'); - group.save(function(err,_saved){ - if(err) return next(err); - return res.send(204); - }); } api.seenMessage = function(req,res,next){ From 9406b3cf7003a52c8e157dc2a0a52f76cfd0a506 Mon Sep 17 00:00:00 2001 From: Blade Barringer Date: Thu, 18 Dec 2014 22:36:52 -0600 Subject: [PATCH 76/81] Removed unnecessary console.log --- public/js/controllers/groupsCtrl.js | 1 - 1 file changed, 1 deletion(-) diff --git a/public/js/controllers/groupsCtrl.js b/public/js/controllers/groupsCtrl.js index f99a79ec76..8e4b8695dd 100644 --- a/public/js/controllers/groupsCtrl.js +++ b/public/js/controllers/groupsCtrl.js @@ -147,7 +147,6 @@ habitrpg.controller("GroupsCtrl", ['$scope', '$rootScope', 'Shared', 'Groups', ' }); } $scope.clearFlagCount = function(message, groupId) { - console.log("Heeey"); Groups.Group.clearFlagCount({gid: groupId, messageId: message.id}, undefined, function(data){ message.flagCount = 0; Notification.text("Flags cleared"); From 652ce10e2246a7b7a9e699f9aa005999b40f69b4 Mon Sep 17 00:00:00 2001 From: Matteo Pagliazzi Date: Mon, 22 Dec 2014 19:48:03 +0100 Subject: [PATCH 77/81] feat(flag-chat): start implemnting email --- config.json.example | 1 + src/controllers/groups.js | 23 +++++++++++++++++++++++ 2 files changed, 24 insertions(+) diff --git a/config.json.example b/config.json.example index 74e2f0822c..e34d187838 100644 --- a/config.json.example +++ b/config.json.example @@ -21,6 +21,7 @@ "NEW_RELIC_APPLICATION_ID":"NEW_RELIC_APPLICATION_ID", "NEW_RELIC_API_KEY":"NEW_RELIC_API_KEY", "GA_ID": "GA_ID", + "FLAG_REPORT_EMAIL": "email@mod.com", "EMAIL_SERVER": { "url": "http://example.com", "authUser": "user", diff --git a/src/controllers/groups.js b/src/controllers/groups.js index 49ef84771f..9cc4d7119d 100644 --- a/src/controllers/groups.js +++ b/src/controllers/groups.js @@ -7,10 +7,12 @@ function clone(a) { var _ = require('lodash'); var nconf = require('nconf'); var async = require('async'); +var utils = require('./../utils'); var shared = require('habitrpg-shared'); var User = require('./../models/user').model; var Group = require('./../models/group').model; var Challenge = require('./../models/challenge').model; +var isProd = nconf.get('NODE_ENV') === 'production'; var api = module.exports; /* @@ -281,6 +283,27 @@ api.flagChatMessage = function(req, res, next){ group.markModified('chat'); group.save(function(err,_saved){ if(err) return next(err); + if (isProd){ + utils.txnEmail({email: nconf.get('FLAG_REPORT_EMAIL')}, 'flag-report-to-mods', [ + {name: "MESSAGE_TIME", content: message.timestamp}, + {name: "MESSAGE_TEXT", content: message.text}, + + {name: "REPORTER_USERNAME", content: null}, + {name: "REPORTER_UUID", content: null}, + {name: "REPORTER_EMAIL", content: null}, + {name: "REPORTER_MODAL_URL", content: null}, + + {name: "AUTHOR_USERNAME", content: null}, + {name: "AUTHOR_UUID", content: null}, + {name: "AUTHOR_EMAIL", content: null}, + {name: "AUTHOR_MODAL_URL", content: null}, + + {name: "GROUP_NAME", content: null}, + {name: "GROUP_TYPE", content: null}, + {name: "GROUP_ID", content: null}, + {name: "GROUP_URL", content: null}, + ]); + } return res.send(204); }); } From 7aff280a71b85d81daf47491cb4466e0f7c68879 Mon Sep 17 00:00:00 2001 From: Matteo Pagliazzi Date: Mon, 22 Dec 2014 19:56:11 +0100 Subject: [PATCH 78/81] feat(flag-chat): add some variables --- src/controllers/groups.js | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/controllers/groups.js b/src/controllers/groups.js index 9cc4d7119d..2db1b447b0 100644 --- a/src/controllers/groups.js +++ b/src/controllers/groups.js @@ -288,19 +288,19 @@ api.flagChatMessage = function(req, res, next){ {name: "MESSAGE_TIME", content: message.timestamp}, {name: "MESSAGE_TEXT", content: message.text}, - {name: "REPORTER_USERNAME", content: null}, - {name: "REPORTER_UUID", content: null}, - {name: "REPORTER_EMAIL", content: null}, + {name: "REPORTER_USERNAME", content: user.profile.name}, + {name: "REPORTER_UUID", content: user._id}, + {name: "REPORTER_EMAIL", content: user.auth.local ? user.auth.local.email : ((user.auth.facebook && user.auth.facebook.emails && user.auth.facebook.emails[0]) ? user.auth.facebook.emails[0].value : null)}, {name: "REPORTER_MODAL_URL", content: null}, - {name: "AUTHOR_USERNAME", content: null}, - {name: "AUTHOR_UUID", content: null}, + {name: "AUTHOR_USERNAME", content: message.user}, + {name: "AUTHOR_UUID", content: message.uuid}, {name: "AUTHOR_EMAIL", content: null}, {name: "AUTHOR_MODAL_URL", content: null}, - - {name: "GROUP_NAME", content: null}, - {name: "GROUP_TYPE", content: null}, - {name: "GROUP_ID", content: null}, + + {name: "GROUP_NAME", content: group.name}, + {name: "GROUP_TYPE", content: group.type}, + {name: "GROUP_ID", content: group._id}, {name: "GROUP_URL", content: null}, ]); } From 2d4c5e7b98152b215ac875acef919bc3ae3896de Mon Sep 17 00:00:00 2001 From: Matteo Pagliazzi Date: Mon, 22 Dec 2014 20:02:22 +0100 Subject: [PATCH 79/81] feat(flag-chat): fetch author and add some group variables --- src/controllers/groups.js | 75 +++++++++++++++++++++------------------ 1 file changed, 40 insertions(+), 35 deletions(-) diff --git a/src/controllers/groups.js b/src/controllers/groups.js index 2db1b447b0..dd7530623b 100644 --- a/src/controllers/groups.js +++ b/src/controllers/groups.js @@ -266,46 +266,51 @@ api.flagChatMessage = function(req, res, next){ if(!message) return res.json(404, {err: "Message not found!"}); if(message.uuid == user._id) return res.json(401, {err: "Can't report your own message."}); - // Log user ids that have flagged the message - if(!message.flags) message.flags = {}; - if(message.flags[user._id] && !user.contributor.admin) return res.json(401, {err: "You have already reported this message"}); - message.flags[user._id] = true; - - // Log total number of flags (publicly viewable) - if(!message.flagCount) message.flagCount = 0; - if(user.contributor.admin){ - // Arbitraty amount, higher than 2 - message.flagCount = 5; - } else { - message.flagCount++ - } - - group.markModified('chat'); - group.save(function(err,_saved){ + User.findOne({_id: message.uuid}, {auth: 1}, function(err, author){ if(err) return next(err); - if (isProd){ - utils.txnEmail({email: nconf.get('FLAG_REPORT_EMAIL')}, 'flag-report-to-mods', [ - {name: "MESSAGE_TIME", content: message.timestamp}, - {name: "MESSAGE_TEXT", content: message.text}, - {name: "REPORTER_USERNAME", content: user.profile.name}, - {name: "REPORTER_UUID", content: user._id}, - {name: "REPORTER_EMAIL", content: user.auth.local ? user.auth.local.email : ((user.auth.facebook && user.auth.facebook.emails && user.auth.facebook.emails[0]) ? user.auth.facebook.emails[0].value : null)}, - {name: "REPORTER_MODAL_URL", content: null}, + // Log user ids that have flagged the message + if(!message.flags) message.flags = {}; + if(message.flags[user._id] && !user.contributor.admin) return res.json(401, {err: "You have already reported this message"}); + message.flags[user._id] = true; - {name: "AUTHOR_USERNAME", content: message.user}, - {name: "AUTHOR_UUID", content: message.uuid}, - {name: "AUTHOR_EMAIL", content: null}, - {name: "AUTHOR_MODAL_URL", content: null}, - - {name: "GROUP_NAME", content: group.name}, - {name: "GROUP_TYPE", content: group.type}, - {name: "GROUP_ID", content: group._id}, - {name: "GROUP_URL", content: null}, - ]); + // Log total number of flags (publicly viewable) + if(!message.flagCount) message.flagCount = 0; + if(user.contributor.admin){ + // Arbitraty amount, higher than 2 + message.flagCount = 5; + } else { + message.flagCount++ } - return res.send(204); + + group.markModified('chat'); + group.save(function(err,_saved){ + if(err) return next(err); + if (isProd){ + utils.txnEmail({email: nconf.get('FLAG_REPORT_EMAIL')}, 'flag-report-to-mods', [ + {name: "MESSAGE_TIME", content: message.timestamp}, + {name: "MESSAGE_TEXT", content: message.text}, + + {name: "REPORTER_USERNAME", content: user.profile.name}, + {name: "REPORTER_UUID", content: user._id}, + {name: "REPORTER_EMAIL", content: user.auth.local ? user.auth.local.email : ((user.auth.facebook && user.auth.facebook.emails && user.auth.facebook.emails[0]) ? user.auth.facebook.emails[0].value : null)}, + {name: "REPORTER_MODAL_URL", content: null}, + + {name: "AUTHOR_USERNAME", content: message.user}, + {name: "AUTHOR_UUID", content: message.uuid}, + {name: "AUTHOR_EMAIL", content: author.auth.local ? author.auth.local.email : ((author.auth.facebook && author.auth.facebook.emails && author.auth.facebook.emails[0]) ? author.auth.facebook.emails[0].value : null)}, + {name: "AUTHOR_MODAL_URL", content: null}, + + {name: "GROUP_NAME", content: group.name}, + {name: "GROUP_TYPE", content: group.type}, + {name: "GROUP_ID", content: group._id}, + {name: "GROUP_URL", content: group.type === 'guild' ? (nconf.get('BASE_URL')+ '/#/options/groups/guilds/' + group._id) : 'party'}, + ]); + } + return res.send(204); + }); }); + } api.clearFlagCount = function(req, res, next){ From 37b9e5012a663c674d4c3bb58bfca0ebdbd976ba Mon Sep 17 00:00:00 2001 From: Blade Barringer Date: Mon, 22 Dec 2014 13:22:42 -0600 Subject: [PATCH 80/81] Added links to user modals --- src/controllers/groups.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/controllers/groups.js b/src/controllers/groups.js index dd7530623b..82b9b58b0b 100644 --- a/src/controllers/groups.js +++ b/src/controllers/groups.js @@ -294,12 +294,12 @@ api.flagChatMessage = function(req, res, next){ {name: "REPORTER_USERNAME", content: user.profile.name}, {name: "REPORTER_UUID", content: user._id}, {name: "REPORTER_EMAIL", content: user.auth.local ? user.auth.local.email : ((user.auth.facebook && user.auth.facebook.emails && user.auth.facebook.emails[0]) ? user.auth.facebook.emails[0].value : null)}, - {name: "REPORTER_MODAL_URL", content: null}, + {name: "REPORTER_MODAL_URL", content: "https://habitrpg.com/static/front/#?memberId=" + user._id}, {name: "AUTHOR_USERNAME", content: message.user}, {name: "AUTHOR_UUID", content: message.uuid}, {name: "AUTHOR_EMAIL", content: author.auth.local ? author.auth.local.email : ((author.auth.facebook && author.auth.facebook.emails && author.auth.facebook.emails[0]) ? author.auth.facebook.emails[0].value : null)}, - {name: "AUTHOR_MODAL_URL", content: null}, + {name: "AUTHOR_MODAL_URL", content: "https://habitrpg.com/static/front/#?memberId=" + message.uuid}, {name: "GROUP_NAME", content: group.name}, {name: "GROUP_TYPE", content: group.type}, From 4c785e84590c2fa6d69e697e6240020152599346 Mon Sep 17 00:00:00 2001 From: Matteo Pagliazzi Date: Mon, 22 Dec 2014 21:09:27 +0100 Subject: [PATCH 81/81] fix(flag-chat): correct url for tavern flags --- src/controllers/groups.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/controllers/groups.js b/src/controllers/groups.js index 82b9b58b0b..05cc7f1c7a 100644 --- a/src/controllers/groups.js +++ b/src/controllers/groups.js @@ -304,7 +304,7 @@ api.flagChatMessage = function(req, res, next){ {name: "GROUP_NAME", content: group.name}, {name: "GROUP_TYPE", content: group.type}, {name: "GROUP_ID", content: group._id}, - {name: "GROUP_URL", content: group.type === 'guild' ? (nconf.get('BASE_URL')+ '/#/options/groups/guilds/' + group._id) : 'party'}, + {name: "GROUP_URL", content: group._id == 'habitrpg' ? (nconf.get('BASE_URL') + '/#/options/groups/tavern') : (group.type === 'guild' ? (nconf.get('BASE_URL')+ '/#/options/groups/guilds/' + group._id) : 'party')}, ]); } return res.send(204);