diff --git a/services/web/app/coffee/Features/Publishers/PublishersGetter.coffee b/services/web/app/coffee/Features/Publishers/PublishersGetter.coffee new file mode 100644 index 0000000000..3120df14db --- /dev/null +++ b/services/web/app/coffee/Features/Publishers/PublishersGetter.coffee @@ -0,0 +1,9 @@ +UserMembershipHandler = require "../UserMembership/UserMembershipHandler" +UserMembershipEntityConfigs = require "../UserMembership/UserMembershipEntityConfigs" +logger = require 'logger-sharelatex' +_ = require 'underscore' + +module.exports = PublishersGetter = + getManagedPublishers: (user_id, callback = (error, managedPublishers) ->) -> + UserMembershipHandler.getEntitiesByUser UserMembershipEntityConfigs.publisher, user_id, (error, managedPublishers) -> + callback(error, managedPublishers) diff --git a/services/web/app/coffee/Features/Subscription/SubscriptionController.coffee b/services/web/app/coffee/Features/Subscription/SubscriptionController.coffee index bea41ecb6e..c16d8028ec 100644 --- a/services/web/app/coffee/Features/Subscription/SubscriptionController.coffee +++ b/services/web/app/coffee/Features/Subscription/SubscriptionController.coffee @@ -98,6 +98,7 @@ module.exports = SubscriptionController = managedGroupSubscriptions, confirmedMemberInstitutions, managedInstitutions, + managedPublishers, v1Subscriptions, v1SubscriptionStatus } = results @@ -108,6 +109,7 @@ module.exports = SubscriptionController = managedGroupSubscriptions, confirmedMemberInstitutions, managedInstitutions, + managedPublishers, v1Subscriptions, v1SubscriptionStatus }, "showing subscription dashboard" @@ -121,6 +123,7 @@ module.exports = SubscriptionController = managedGroupSubscriptions, confirmedMemberInstitutions, managedInstitutions, + managedPublishers, v1Subscriptions, v1SubscriptionStatus } @@ -260,4 +263,4 @@ module.exports = SubscriptionController = {user_id} = req.params FeaturesUpdater.refreshFeatures user_id, (error) -> return next(error) if error? - res.sendStatus 200 \ No newline at end of file + res.sendStatus 200 diff --git a/services/web/app/coffee/Features/Subscription/SubscriptionViewModelBuilder.coffee b/services/web/app/coffee/Features/Subscription/SubscriptionViewModelBuilder.coffee index 3f65cc5cf5..cd5ef9295f 100644 --- a/services/web/app/coffee/Features/Subscription/SubscriptionViewModelBuilder.coffee +++ b/services/web/app/coffee/Features/Subscription/SubscriptionViewModelBuilder.coffee @@ -6,6 +6,7 @@ LimitationsManager = require("./LimitationsManager") SubscriptionLocator = require("./SubscriptionLocator") V1SubscriptionManager = require("./V1SubscriptionManager") InstitutionsGetter = require("../Institutions/InstitutionsGetter") +PublishersGetter = require("../Publishers/PublishersGetter") logger = require('logger-sharelatex') _ = require("underscore") async = require('async') @@ -46,6 +47,8 @@ module.exports = InstitutionsGetter.getConfirmedInstitutions user._id, cb managedInstitutions: (cb) -> InstitutionsGetter.getManagedInstitutions user._id, cb + managedPublishers: (cb) -> + PublishersGetter.getManagedPublishers user._id, cb v1Subscriptions: (cb) -> V1SubscriptionManager.getSubscriptionsFromV1 user._id, (error, subscriptions, v1Id) -> return cb(error) if error? @@ -63,6 +66,7 @@ module.exports = managedGroupSubscriptions, confirmedMemberInstitutions, managedInstitutions, + managedPublishers, v1Subscriptions, v1SubscriptionStatus, recurlySubscription, @@ -103,6 +107,7 @@ module.exports = memberGroupSubscriptions, confirmedMemberInstitutions, managedInstitutions, + managedPublishers, v1Subscriptions, v1SubscriptionStatus } diff --git a/services/web/app/views/subscriptions/dashboard.pug b/services/web/app/views/subscriptions/dashboard.pug index 17e8114036..84e36b274a 100644 --- a/services/web/app/views/subscriptions/dashboard.pug +++ b/services/web/app/views/subscriptions/dashboard.pug @@ -24,6 +24,10 @@ block content -hasAnySubscription = true include ./dashboard/_managed_institutions + -if (managedPublishers && managedPublishers.length > 0) + -hasAnySubscription = true + include ./dashboard/_managed_publishers + -if (memberGroupSubscriptions && memberGroupSubscriptions.length > 0) -hasAnySubscription = true include ./dashboard/_group_memberships diff --git a/services/web/app/views/subscriptions/dashboard/_managed_publishers.pug b/services/web/app/views/subscriptions/dashboard/_managed_publishers.pug new file mode 100644 index 0000000000..a149a18891 --- /dev/null +++ b/services/web/app/views/subscriptions/dashboard/_managed_publishers.pug @@ -0,0 +1,16 @@ +each publisher in managedPublishers + p + | You are a manager of + | + strong= publisher.name + p + a(href="/publishers/" + publisher.slug + "/hub") + i.fa.fa-fw.fa-user-circle + |   + | View hub + p + a(href="/manage/publishers/" + publisher.slug + "/managers") + i.fa.fa-fw.fa-users + |   + | Manage publisher managers + hr diff --git a/services/web/test/unit/coffee/Publishers/PublishersGetterTests.coffee b/services/web/test/unit/coffee/Publishers/PublishersGetterTests.coffee new file mode 100644 index 0000000000..3b1befab24 --- /dev/null +++ b/services/web/test/unit/coffee/Publishers/PublishersGetterTests.coffee @@ -0,0 +1,36 @@ +SandboxedModule = require('sandboxed-module') +require('chai').should() +expect = require('chai').expect +sinon = require('sinon') +modulePath = require('path').join __dirname, '../../../../app/js/Features/Publishers/PublishersGetter.js' + +describe 'PublishersGetter', -> + beforeEach -> + @publisher = + _id: 'mock-publsiher-id' + slug: 'ieee' + fetchV1Data: sinon.stub() + + @PublishersGetter = SandboxedModule.require modulePath, requires: + '../User/UserGetter': @UserGetter + "../UserMembership/UserMembershipHandler": @UserMembershipHandler = { + getEntitiesByUser: sinon.stub().callsArgWith(2, null, [@publisher]) + } + "../UserMembership/UserMembershipEntityConfigs": @UserMembershipEntityConfigs = { + publisher: + modelName: 'Publisher' + canCreate: true + fields: + primaryKey: 'slug' + } + 'logger-sharelatex': + log:-> console.log(arguments) + err:-> + + @userId = '12345abcde' + + describe "getManagedPublishers", -> + it 'fetches v1 data before returning publisher list', (done) -> + @PublishersGetter.getManagedPublishers @userId, (error, publishers) -> + publishers.length.should.equal 1 + done()