diff --git a/services/web/app/coffee/Features/Announcements/AnnouncementsController.coffee b/services/web/app/coffee/Features/Announcements/AnnouncementsController.coffee index 65013eae46..aeda79b003 100644 --- a/services/web/app/coffee/Features/Announcements/AnnouncementsController.coffee +++ b/services/web/app/coffee/Features/Announcements/AnnouncementsController.coffee @@ -9,9 +9,9 @@ module.exports = if !settings?.apis?.analytics?.url? or !settings.apis.blog.url? return res.json [] - user_id = AuthenticationController.getLoggedInUserId(req) - logger.log {user_id}, "getting unread announcements" - AnnouncementsHandler.getUnreadAnnouncements user_id, (err, announcements)-> + user = AuthenticationController.getSessionUser(req) + logger.log {user_id:user?._id}, "getting unread announcements" + AnnouncementsHandler.getUnreadAnnouncements user, (err, announcements)-> if err? logger.err {err, user_id}, "unable to get unread announcements" next(err) diff --git a/services/web/app/coffee/Features/Announcements/AnnouncementsHandler.coffee b/services/web/app/coffee/Features/Announcements/AnnouncementsHandler.coffee index ce41e3b96c..1ea675fbf3 100644 --- a/services/web/app/coffee/Features/Announcements/AnnouncementsHandler.coffee +++ b/services/web/app/coffee/Features/Announcements/AnnouncementsHandler.coffee @@ -5,20 +5,44 @@ _ = require("lodash") logger = require("logger-sharelatex") settings = require("settings-sharelatex") -module.exports = - getUnreadAnnouncements : (user_id, callback = (err, announcements)->)-> + + +module.exports = AnnouncementsHandler = + + + + _domainSpecificAnnouncements : (email)-> + domainSpecific = _.filter settings?.domainAnnouncmentsToShow, (domainAnnouncment)-> + matches = _.filter domainAnnouncment.domains, (domain)-> + return email.indexOf(domain) != -1 + return matches.length > 0 + return domainSpecific or [] + + + getUnreadAnnouncements : (user, callback = (err, announcements)->)-> async.parallel { lastEvent: (cb)-> - AnalyticsManager.getLastOccurance user_id, "announcement-alert-dismissed", cb + AnalyticsManager.getLastOccurance user?._id, "announcement-alert-dismissed", cb announcements: (cb)-> BlogHandler.getLatestAnnouncements cb }, (err, results)-> if err? - logger.err err:err, user_id:user_id, "error getting unread announcements" + logger.err err:err, user_id:user?._id, "error getting unread announcements" return callback(err) - announcements = _.sortBy(results.announcements, "date").reverse() + domainSpecific = AnnouncementsHandler._domainSpecificAnnouncements(user?.email) + + domainSpecific = _.map domainSpecific, (domainAnnouncment)-> + try + domainAnnouncment.date = new Date(domainAnnouncment.date) + return domainAnnouncment + catch e + return callback(e) + + announcements = results.announcements + announcements = _.union announcements, domainSpecific + announcements = _.sortBy(announcements, "date").reverse() lastSeenBlogId = results?.lastEvent?.segmentation?.blogPostId @@ -35,6 +59,6 @@ module.exports = announcement.read = read return announcement - logger.log announcementsLength:announcements?.length, user_id:user_id, "returning announcements" + logger.log announcementsLength:announcements?.length, user_id:user?._id, "returning announcements" callback null, announcements diff --git a/services/web/app/coffee/infrastructure/ExpressLocals.coffee b/services/web/app/coffee/infrastructure/ExpressLocals.coffee index c0b4412d19..8124d13d93 100644 --- a/services/web/app/coffee/infrastructure/ExpressLocals.coffee +++ b/services/web/app/coffee/infrastructure/ExpressLocals.coffee @@ -190,24 +190,6 @@ module.exports = (app, webRouter, apiRouter)-> res.locals.getSessionUser = -> return AuthenticationController.getSessionUser(req) - res.locals.caseStudyToShow = -> - Settings.caseStudysToShow = [ - { - url:"http://www.sharelatex.com/i/university/indiana", - domains: ["sharelatex.com", 'chicargo.edu'], - title: "Indiana University Case Study", - logo:"/img/crests/logo/iu.png" - } - - ] - - caseStudy = _.filter Settings.caseStudysToShow, (caseStudy)-> - matches = _.filter caseStudy.domains, (domain)-> - email = AuthenticationController.getSessionUser(req)?.email - return email.indexOf(domain) != -1 - return matches.length > 0 - - return caseStudy?[0] or {} next() webRouter.use (req, res, next) -> diff --git a/services/web/app/views/project/list.jade b/services/web/app/views/project/list.jade index 5d5729ad08..44fa99a5e3 100644 --- a/services/web/app/views/project/list.jade +++ b/services/web/app/views/project/list.jade @@ -11,7 +11,6 @@ block content projects: !{JSON.stringify(projects).replace(/\//g, '\\/')}, tags: !{JSON.stringify(tags).replace(/\//g, '\\/')}, notifications: !{JSON.stringify(notifications).replace(/\//g, '\\/')}, - caseStudy: !{JSON.stringify(caseStudyToShow())} }; window.algolia = { institutions: { diff --git a/services/web/app/views/project/list/side-bar.jade b/services/web/app/views/project/list/side-bar.jade index d3eaeaaba7..1fb0e2bda9 100644 --- a/services/web/app/views/project/list/side-bar.jade +++ b/services/web/app/views/project/list/side-bar.jade @@ -94,7 +94,7 @@ - if (showUserDetailsArea) span(ng-controller="LeftHandMenuPromoController", ng-cloak) - .row-spaced#userProfileInformation(ng-if="hasProjects && !showCaseStudy") + .row-spaced#userProfileInformation(ng-if="hasProjects") div(ng-controller="UserProfileController") hr(ng-show="percentComplete < 100") .text-centered.user-profile(ng-show="percentComplete < 100") @@ -108,13 +108,6 @@ ng-click="openUserProfileModal()" ) #{translate("complete")} - .row-spaced(ng-if="hasProjects && showCaseStudy", ng-cloak).text-centered - hr - a(href="{{caseStudy.url}}") - p.small read about: - p - img(src="{{caseStudy.logo}}") - a(href="{{caseStudy.url}}") {{caseStudy.title}} .row-spaced(ng-if="hasProjects && userHasNoSubscription", ng-cloak).text-centered hr diff --git a/services/web/public/coffee/main/project-list/left-hand-menu-promo-controller.coffee b/services/web/public/coffee/main/project-list/left-hand-menu-promo-controller.coffee index d5d1a2b110..9fdb3e9ca2 100644 --- a/services/web/public/coffee/main/project-list/left-hand-menu-promo-controller.coffee +++ b/services/web/public/coffee/main/project-list/left-hand-menu-promo-controller.coffee @@ -7,6 +7,3 @@ define [ $scope.hasProjects = window.data.projects.length > 0 $scope.userHasNoSubscription = window.userHasNoSubscription - $scope.showCaseStudy = window.data.caseStudy?.url? - $scope.caseStudy = window.data.caseStudy - diff --git a/services/web/test/UnitTests/coffee/Announcement/AnnouncementsHandlerTests.coffee b/services/web/test/UnitTests/coffee/Announcement/AnnouncementsHandlerTests.coffee index 49e8292f97..e1d9fcc7f6 100644 --- a/services/web/test/UnitTests/coffee/Announcement/AnnouncementsHandlerTests.coffee +++ b/services/web/test/UnitTests/coffee/Announcement/AnnouncementsHandlerTests.coffee @@ -10,7 +10,9 @@ expect = require("chai").expect describe 'AnnouncementsHandler', -> beforeEach -> - @user_id = "some_id" + @user = + _id:"some_id" + email: "someone@gmail.com" @AnalyticsManager = getLastOccurance: sinon.stub() @BlogHandler = @@ -44,7 +46,7 @@ describe 'AnnouncementsHandler', -> it "should mark all announcements as read is false", (done)-> @AnalyticsManager.getLastOccurance.callsArgWith(2, null, []) - @handler.getUnreadAnnouncements @user_id, (err, announcements)=> + @handler.getUnreadAnnouncements @user, (err, announcements)=> announcements[0].read.should.equal false announcements[1].read.should.equal false announcements[2].read.should.equal false @@ -53,7 +55,7 @@ describe 'AnnouncementsHandler', -> it "should should be sorted again to ensure correct order", (done)-> @AnalyticsManager.getLastOccurance.callsArgWith(2, null, []) - @handler.getUnreadAnnouncements @user_id, (err, announcements)=> + @handler.getUnreadAnnouncements @user, (err, announcements)=> announcements[3].should.equal @stubbedAnnouncements[2] announcements[2].should.equal @stubbedAnnouncements[3] announcements[1].should.equal @stubbedAnnouncements[1] @@ -62,7 +64,7 @@ describe 'AnnouncementsHandler', -> it "should return older ones marked as read as well", (done)-> @AnalyticsManager.getLastOccurance.callsArgWith(2, null, {segmentation:{blogPostId:"/2014/04/12/title-date-irrelivant"}}) - @handler.getUnreadAnnouncements @user_id, (err, announcements)=> + @handler.getUnreadAnnouncements @user, (err, announcements)=> announcements[0].id.should.equal @stubbedAnnouncements[0].id announcements[0].read.should.equal false @@ -79,7 +81,7 @@ describe 'AnnouncementsHandler', -> it "should return all of them marked as read", (done)-> @AnalyticsManager.getLastOccurance.callsArgWith(2, null, {segmentation:{blogPostId:"/2016/11/01/introducting-latex-code-checker"}}) - @handler.getUnreadAnnouncements @user_id, (err, announcements)=> + @handler.getUnreadAnnouncements @user, (err, announcements)=> announcements[0].read.should.equal true announcements[1].read.should.equal true announcements[2].read.should.equal true @@ -87,3 +89,27 @@ describe 'AnnouncementsHandler', -> done() + describe "with custom domain announcements", -> + beforeEach -> + @stubbedDomainSpecificAnn = [ + { + domains: ["gmail.com", 'yahoo.edu'] + title: "some message" + excerpt: "read this" + url:"http://www.sharelatex.com/i/somewhere" + id:"iaaa" + date: new Date(1308369600000).toString() + } + ] + + @handler._domainSpecificAnnouncements = sinon.stub().returns(@stubbedDomainSpecificAnn) + + it "should insert the domain specific in the correct place", (done)-> + @AnalyticsManager.getLastOccurance.callsArgWith(2, null, []) + @handler.getUnreadAnnouncements @user, (err, announcements)=> + announcements[4].should.equal @stubbedAnnouncements[2] + announcements[3].should.equal @stubbedAnnouncements[3] + announcements[2].should.equal @stubbedAnnouncements[1] + announcements[1].should.equal @stubbedDomainSpecificAnn[0] + announcements[0].should.equal @stubbedAnnouncements[0] + done()