ソースを参照

Refresh members and invites in client when status changes

Shane Kilkelly 10 年 前
親
コミット
eafd61a90e

+ 1 - 0
services/web/app/coffee/Features/Collaborators/CollaboratorsController.coffee

@@ -37,6 +37,7 @@ module.exports = CollaboratorsController =
 		user_id    = req.params.user_id
 		user_id    = req.params.user_id
 		CollaboratorsController._removeUserIdFromProject project_id, user_id, (error) ->
 		CollaboratorsController._removeUserIdFromProject project_id, user_id, (error) ->
 			return next(error) if error?
 			return next(error) if error?
+			EditorRealTimeController.emitToRoom project_id, 'project:membership:changed', {members: true}
 			res.sendStatus 204
 			res.sendStatus 204
 
 
 	removeSelfFromProject: (req, res, next = (error) ->) ->
 	removeSelfFromProject: (req, res, next = (error) ->) ->

+ 4 - 0
services/web/app/coffee/Features/Collaborators/CollaboratorsInviteController.coffee

@@ -5,6 +5,7 @@ CollaboratorsHandler = require('./CollaboratorsHandler')
 CollaboratorsInviteHandler = require('./CollaboratorsInviteHandler')
 CollaboratorsInviteHandler = require('./CollaboratorsInviteHandler')
 logger = require('logger-sharelatex')
 logger = require('logger-sharelatex')
 EmailHelper = require "../Helpers/EmailHelper"
 EmailHelper = require "../Helpers/EmailHelper"
+EditorRealTimeController = require("../Editor/EditorRealTimeController")
 
 
 
 
 module.exports = CollaboratorsInviteController =
 module.exports = CollaboratorsInviteController =
@@ -38,6 +39,7 @@ module.exports = CollaboratorsInviteController =
 					logger.err {projectId, email, sendingUserId}, "error creating project invite"
 					logger.err {projectId, email, sendingUserId}, "error creating project invite"
 					return next(err)
 					return next(err)
 				logger.log {projectId, email, sendingUserId}, "invite created"
 				logger.log {projectId, email, sendingUserId}, "invite created"
+				EditorRealTimeController.emitToRoom projectId, 'project:membership:changed', {invites: true}
 				return res.json {invite: invite}
 				return res.json {invite: invite}
 
 
 	revokeInvite: (req, res, next) ->
 	revokeInvite: (req, res, next) ->
@@ -48,6 +50,7 @@ module.exports = CollaboratorsInviteController =
 			if err?
 			if err?
 				logger.err {projectId, inviteId}, "error revoking invite"
 				logger.err {projectId, inviteId}, "error revoking invite"
 				return next(err)
 				return next(err)
+			EditorRealTimeController.emitToRoom projectId, 'project:membership:changed', {invites: true}
 			res.sendStatus(201)
 			res.sendStatus(201)
 
 
 	resendInvite: (req, res, next) ->
 	resendInvite: (req, res, next) ->
@@ -113,4 +116,5 @@ module.exports = CollaboratorsInviteController =
 			if err?
 			if err?
 				logger.err {projectId, inviteId}, "error accepting invite by token"
 				logger.err {projectId, inviteId}, "error accepting invite by token"
 				return next(err)
 				return next(err)
+			EditorRealTimeController.emitToRoom projectId, 'project:membership:changed', {invites: true, members: true}
 			res.redirect "/project/#{projectId}"
 			res.redirect "/project/#{projectId}"

+ 19 - 8
services/web/public/coffee/ide/share/controllers/ShareController.coffee

@@ -1,13 +1,24 @@
 define [
 define [
 	"base"
 	"base"
 ], (App) ->
 ], (App) ->
-	App.controller "ShareController", ["$scope", "$modal", "event_tracking", ($scope, $modal, event_tracking) ->
-		$scope.openShareProjectModal = () ->
-			event_tracking.sendCountlyOnce "ide-open-share-modal-once"
+	App.controller "ShareController", ["$scope", "$modal", "ide", "projectInvites", "projectMembers", "event_tracking",
+	($scope, $modal, ide, projectInvites, projectMembers, event_tracking) ->
+			$scope.openShareProjectModal = () ->
+				event_tracking.sendCountlyOnce "ide-open-share-modal-once"
 
 
-			$modal.open(
-				templateUrl: "shareProjectModalTemplate"
-				controller:  "ShareProjectModalController"
-				scope: $scope
-			)
+				$modal.open(
+					templateUrl: "shareProjectModalTemplate"
+					controller:  "ShareProjectModalController"
+					scope: $scope
+				)
+
+			ide.socket.on 'project:membership:changed', (data) =>
+				if data.members
+					projectMembers.getMembers().success (responseData) =>
+						if responseData.members
+							$scope.project.members = responseData.members
+				if data.invites
+					projectInvites.getInvites().success (responseData) =>
+						if responseData.invites
+							$scope.project.invites = responseData.invites
 	]
 	]

+ 2 - 0
services/web/public/coffee/ide/share/controllers/ShareProjectModalController.coffee

@@ -23,6 +23,8 @@ define [
 			allowedNoOfMembers = $scope.project.features.collaborators
 			allowedNoOfMembers = $scope.project.features.collaborators
 			$scope.canAddCollaborators = noOfMembers < allowedNoOfMembers or allowedNoOfMembers == INFINITE_COLLABORATORS
 			$scope.canAddCollaborators = noOfMembers < allowedNoOfMembers or allowedNoOfMembers == INFINITE_COLLABORATORS
 
 
+		window._m = projectMembers
+
 		$scope.autocompleteContacts = []
 		$scope.autocompleteContacts = []
 		do loadAutocompleteUsers = () ->
 		do loadAutocompleteUsers = () ->
 			$http.get "/user/contacts"
 			$http.get "/user/contacts"

+ 3 - 0
services/web/test/UnitTests/coffee/Collaborators/CollaboratorsControllerTests.coffee

@@ -128,6 +128,9 @@ describe "CollaboratorsController", ->
 		it "should send the back a success response", ->
 		it "should send the back a success response", ->
 			@res.sendStatus.calledWith(204).should.equal true
 			@res.sendStatus.calledWith(204).should.equal true
 
 
+		it 'should have called emitToRoom', ->
+			@EditorRealTimeController.emitToRoom.calledWith(@project_id, 'project:membership:changed').should.equal true
+
 	describe "removeSelfFromProject", ->
 	describe "removeSelfFromProject", ->
 		beforeEach ->
 		beforeEach ->
 			@req.session =
 			@req.session =

+ 13 - 0
services/web/test/UnitTests/coffee/Collaborators/CollaboratorsInviteControllerTests.coffee

@@ -22,6 +22,7 @@ describe "CollaboratorsInviteController", ->
 			"./CollaboratorsHandler": @CollaboratorsHandler = {}
 			"./CollaboratorsHandler": @CollaboratorsHandler = {}
 			"./CollaboratorsInviteHandler": @CollaboratorsInviteHandler = {}
 			"./CollaboratorsInviteHandler": @CollaboratorsInviteHandler = {}
 			'logger-sharelatex': @logger = {err: sinon.stub(), error: sinon.stub(), log: sinon.stub()}
 			'logger-sharelatex': @logger = {err: sinon.stub(), error: sinon.stub(), log: sinon.stub()}
+			"../Editor/EditorRealTimeController": @EditorRealTimeController = {emitToRoom: sinon.stub()}
 		@res = new MockResponse()
 		@res = new MockResponse()
 		@req = new MockRequest()
 		@req = new MockRequest()
 
 
@@ -112,6 +113,10 @@ describe "CollaboratorsInviteController", ->
 				@CollaboratorsInviteHandler.inviteToProject.callCount.should.equal 1
 				@CollaboratorsInviteHandler.inviteToProject.callCount.should.equal 1
 				@CollaboratorsInviteHandler.inviteToProject.calledWith(@project_id,@current_user_id,@targetEmail,@privileges).should.equal true
 				@CollaboratorsInviteHandler.inviteToProject.calledWith(@project_id,@current_user_id,@targetEmail,@privileges).should.equal true
 
 
+			it 'should have called emitToRoom', ->
+				@EditorRealTimeController.emitToRoom.callCount.should.equal 1
+				@EditorRealTimeController.emitToRoom.calledWith(@project_id, 'project:membership:changed').should.equal true
+
 		describe 'when the user is not allowed to add more collaborators', ->
 		describe 'when the user is not allowed to add more collaborators', ->
 
 
 			beforeEach ->
 			beforeEach ->
@@ -499,6 +504,10 @@ describe "CollaboratorsInviteController", ->
 			it 'should have called revokeInvite', ->
 			it 'should have called revokeInvite', ->
 				@CollaboratorsInviteHandler.revokeInvite.callCount.should.equal 1
 				@CollaboratorsInviteHandler.revokeInvite.callCount.should.equal 1
 
 
+			it 'should have called emitToRoom', ->
+				@EditorRealTimeController.emitToRoom.callCount.should.equal 1
+				@EditorRealTimeController.emitToRoom.calledWith(@project_id, 'project:membership:changed').should.equal true
+
 		describe 'when revokeInvite produces an error', ->
 		describe 'when revokeInvite produces an error', ->
 
 
 			beforeEach ->
 			beforeEach ->
@@ -544,6 +553,10 @@ describe "CollaboratorsInviteController", ->
 			it 'should have called acceptInvite', ->
 			it 'should have called acceptInvite', ->
 				@CollaboratorsInviteHandler.acceptInvite.callCount.should.equal 1
 				@CollaboratorsInviteHandler.acceptInvite.callCount.should.equal 1
 
 
+			it 'should have called emitToRoom', ->
+				@EditorRealTimeController.emitToRoom.callCount.should.equal 1
+				@EditorRealTimeController.emitToRoom.calledWith(@project_id, 'project:membership:changed').should.equal true
+
 		describe 'when revokeInvite produces an error', ->
 		describe 'when revokeInvite produces an error', ->
 
 
 			beforeEach ->
 			beforeEach ->