Просмотр исходного кода

Load invites on project load, rather than asynchronously.

Shane Kilkelly 10 лет назад
Родитель
Сommit
dca1c9be5d

+ 1 - 1
services/web/app/coffee/Features/Collaborators/CollaboratorsInviteController.coffee

@@ -95,7 +95,7 @@ module.exports = CollaboratorsInviteController =
 		inviteId = req.params.invite_id
 		{token} = req.body
 		currentUser = req.session.user
-		logger.log {projectId, inviteId}, "accepting invite"
+		logger.log {projectId, inviteId, userId: currentUser._id}, "accepting invite"
 		CollaboratorsInviteHandler.acceptInvite projectId, inviteId, token, currentUser, (err) ->
 			if err?
 				logger.err {projectId, inviteId}, "error accepting invite by token"

+ 1 - 1
services/web/app/coffee/Features/Collaborators/CollaboratorsInviteHandler.coffee

@@ -54,7 +54,7 @@ module.exports = CollaboratorsInviteHandler =
 			if err?
 				logger.err {err, projectId}, "error fetching invite"
 				return callback(err)
-			if !invite
+			if !invite?
 				logger.err {err, projectId, token: tokenString}, "no invite found"
 				return callback(null, null)
 			callback(null, invite)

+ 10 - 9
services/web/app/coffee/Features/Editor/EditorHttpController.coffee

@@ -9,6 +9,7 @@ AuthorizationManager = require("../Authorization/AuthorizationManager")
 ProjectEditorHandler = require('../Project/ProjectEditorHandler')
 Metrics = require('../../infrastructure/Metrics')
 CollaboratorsHandler = require("../Collaborators/CollaboratorsHandler")
+CollaboratorsInviteHandler = require("../Collaborators/CollaboratorsInviteHandler")
 PrivilegeLevels = require "../Authorization/PrivilegeLevels"
 
 module.exports = EditorHttpController =
@@ -39,13 +40,15 @@ module.exports = EditorHttpController =
 					return callback(error) if error?
 					AuthorizationManager.getPrivilegeLevelForProject user_id, project_id, (error, privilegeLevel) ->
 						return callback(error) if error?
-						if !privilegeLevel? or privilegeLevel == PrivilegeLevels.NONE
-							callback null, null, false
-						else
-							callback(null,
-								ProjectEditorHandler.buildProjectModelView(project, members),
-								privilegeLevel
-							)
+						CollaboratorsInviteHandler.getAllInvites project_id, (error, invites) ->
+							return callback(error) if error?
+							if !privilegeLevel? or privilegeLevel == PrivilegeLevels.NONE
+								callback null, null, false
+							else
+								callback(null,
+									ProjectEditorHandler.buildProjectModelView(project, members, invites),
+									privilegeLevel
+								)
 
 	restoreDoc: (req, res, next) ->
 		project_id = req.params.Project_id
@@ -135,5 +138,3 @@ module.exports = EditorHttpController =
 		EditorController.deleteEntity project_id, entity_id, entity_type, "editor", (error) ->
 			return next(error) if error?
 			res.sendStatus 204
-
-

+ 3 - 2
services/web/app/coffee/Features/Project/ProjectEditorHandler.coffee

@@ -1,7 +1,7 @@
 _ = require("underscore")
 
 module.exports = ProjectEditorHandler =
-	buildProjectModelView: (project, members) ->
+	buildProjectModelView: (project, members, invites) ->
 		result =
 			_id        : project._id
 			name       : project.name
@@ -15,7 +15,8 @@ module.exports = ProjectEditorHandler =
 			deletedByExternalDataSource : project.deletedByExternalDataSource || false
 			deletedDocs: project.deletedDocs
 			members:     []
-		
+			invites:     invites || []
+
 		owner = null
 		for member in members
 			if member.privilegeLevel == "owner"

+ 1 - 1
services/web/app/views/project/editor/share.jade

@@ -43,7 +43,7 @@ script(type='text/ng-template', id='shareProjectModalTemplate')
 						ng-click="removeMember(member)"
 					)
 						i.fa.fa-times
-			.row.project-invite(ng-repeat="invite in state.invites")
+			.row.project-invite(ng-repeat="invite in project.invites")
 				.col-xs-8 {{ invite.email }} 
 					span.label.label-primary #{translate("pending")}
 				.col-xs-3.text-left

+ 3 - 12
services/web/public/coffee/ide/share/controllers/ShareProjectModalController.coffee

@@ -14,7 +14,6 @@ define [
 		}
 
 		$modalInstance.opened.then () ->
-			getOutstandingInvites()
 			$timeout () ->
 				$scope.$broadcast "open"
 			, 200
@@ -44,14 +43,6 @@ define [
 		getCurrentMemberEmails = () ->
 			$scope.project.members.map (u) -> u.email
 
-		getOutstandingInvites = (callback) ->
-			projectInvites.getInvites().then(
-				(response) ->
-					$scope.state.invites = response?.data?.invites
-				, (response) ->
-					console.error response
-			)
-
 		$scope.filterAutocompleteUsers = ($query) ->
 			currentMemberEmails = getCurrentMemberEmails()
 			return $scope.autocompleteContacts.filter (contact) ->
@@ -95,7 +86,7 @@ define [
 						.success (data) ->
 							if data.invite
 								invite = data.invite
-								$scope.state.invites.push invite
+								$scope.project.invites.push invite
 							else
 								if data.users?
 									users = data.users
@@ -137,9 +128,9 @@ define [
 				.revokeInvite(invite._id)
 				.success () ->
 					$scope.state.inflight = false
-					index = $scope.state.invites.indexOf(invite)
+					index = $scope.project.invites.indexOf(invite)
 					return if index == -1
-					$scope.state.invites.splice(index, 1)
+					$scope.project.invites.splice(index, 1)
 				.error () ->
 					$scope.state.inflight = false
 					$scope.state.error = "Sorry, something went wrong :("

+ 0 - 7
services/web/public/coffee/ide/share/services/projectMembers.coffee

@@ -11,13 +11,6 @@ define [
 						"X-Csrf-Token": window.csrfToken
 				})
 
-			addMember: (email, privileges) ->
-				$http.post("/project/#{ide.project_id}/users", {
-					email: email
-					privileges: privileges
-					_csrf: window.csrfToken
-				})
-
 			addGroup: (group_id, privileges) ->
 				$http.post("/project/#{ide.project_id}/group", {
 					group_id: group_id

+ 12 - 1
services/web/test/UnitTests/coffee/Editor/EditorHttpControllerTests.coffee

@@ -17,7 +17,8 @@ describe "EditorHttpController", ->
 			"./EditorController": @EditorController = {}
 			'../../infrastructure/Metrics': @Metrics = {inc: sinon.stub()}
 			"../Collaborators/CollaboratorsHandler": @CollaboratorsHandler = {}
-			
+			"../Collaborators/CollaboratorsInviteHandler": @CollaboratorsInviteHandler = {}
+
 		@project_id = "mock-project-id"
 		@doc_id = "mock-doc-id"
 		@user_id = "mock-user-id"
@@ -102,9 +103,14 @@ describe "EditorHttpController", ->
 				_id: @project_id
 				owner:{_id:"something"}
 				view: true
+			@invites = [
+				{_id: "invite_one", email: "user-one@example.com", privileges: "readOnly", projectId: @project._id}
+				{_id: "invite_two", email: "user-two@example.com", privileges: "readOnly", projectId: @project._id}
+			]
 			@ProjectEditorHandler.buildProjectModelView = sinon.stub().returns(@projectModelView)
 			@ProjectGetter.getProjectWithoutDocLines = sinon.stub().callsArgWith(1, null, @project)
 			@CollaboratorsHandler.getMembersWithPrivilegeLevels = sinon.stub().callsArgWith(1, null, @members)
+			@CollaboratorsInviteHandler.getAllInvites = sinon.stub().callsArgWith(1, null, @invites)
 			@UserGetter.getUser = sinon.stub().callsArgWith(2, null, @user)
 				
 		describe "when authorized", ->
@@ -133,6 +139,11 @@ describe "EditorHttpController", ->
 					.calledWith(@user_id, @project_id)
 					.should.equal true
 
+			it 'should include the invites', ->
+				@CollaboratorsInviteHandler.getAllInvites
+					.calledWith(@project._id)
+					.should.equal true
+
 			it "should return the project model view, privilege level and protocol version", ->
 				@callback.calledWith(null, @projectModelView, "owner").should.equal true
 				

+ 9 - 1
services/web/test/UnitTests/coffee/Project/ProjectEditorHandlerTests.coffee

@@ -67,12 +67,16 @@ describe "ProjectEditorHandler", ->
 			},
 			privilegeLevel: "readAndWrite"
 		}]
+		@invites = [
+			{_id: "invite_one", email: "user-one@example.com", privileges: "readOnly", projectId: @project._id}
+			{_id: "invite_two", email: "user-two@example.com", privileges: "readOnly", projectId: @project._id}
+		]
 		@handler = SandboxedModule.require modulePath
 
 	describe "buildProjectModelView", ->
 		describe "with owner and members included", ->
 			beforeEach ->
-				@result = @handler.buildProjectModelView @project, @members
+				@result = @handler.buildProjectModelView @project, @members, @invites
 
 			it "should include the id", ->
 				should.exist @result._id
@@ -144,6 +148,10 @@ describe "ProjectEditorHandler", ->
 				@result.rootFolder[0].folders[0].docs[0].name.should.equal "main.tex"
 				should.not.exist @result.rootFolder[0].folders[0].docs[0].lines
 
+			it 'should include invites', ->
+				should.exist @result.invites
+				@result.invites.should.deep.equal @invites
+
 		describe "deletedByExternalDataSource", ->
 
 			it "should set the deletedByExternalDataSource flag to false when it is not there", ->