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

WIP: wire up share-modal frontend to invite system

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

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

@@ -25,7 +25,7 @@ module.exports = CollaboratorsInviteController =
 			return next(error) if error?
 			return next(error) if error?
 			if !allowed
 			if !allowed
 				logger.log {projectId, email, sendingUserId}, "not allowed to invite more users to project"
 				logger.log {projectId, email, sendingUserId}, "not allowed to invite more users to project"
-				return res.json {inviteId: null}
+				return res.json {invite: null}
 			{email, privileges} = req.body
 			{email, privileges} = req.body
 			email = mimelib.parseAddresses(email or "")[0]?.address?.toLowerCase()
 			email = mimelib.parseAddresses(email or "")[0]?.address?.toLowerCase()
 			if !email? or email == ""
 			if !email? or email == ""
@@ -36,7 +36,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"
-				return res.json {inviteId: invite._id}
+				return res.json {invite: invite}
 
 
 	revokeInvite: (req, res, next) ->
 	revokeInvite: (req, res, next) ->
 		projectId = req.params.Project_id
 		projectId = req.params.Project_id

+ 13 - 7
services/web/app/coffee/models/ProjectInvite.coffee

@@ -9,13 +9,19 @@ ObjectId = Schema.ObjectId
 THIRTY_DAYS_IN_SECONDS = 60 * 60 * 24 * 30
 THIRTY_DAYS_IN_SECONDS = 60 * 60 * 24 * 30
 
 
 
 
-ProjectInviteSchema = new Schema
-	email:          String
-	token:          String
-	sendingUserId:  ObjectId
-	projectId:      ObjectId
-	privileges:     String
-	createdAt:      {type: Date, default: Date.now, index: {expiresAfterSeconds: THIRTY_DAYS_IN_SECONDS}}
+ProjectInviteSchema = new Schema(
+	{
+		email:          String
+		token:          String
+		sendingUserId:  ObjectId
+		projectId:      ObjectId
+		privileges:     String
+		createdAt:      {type: Date, default: Date.now, index: {expiresAfterSeconds: THIRTY_DAYS_IN_SECONDS}}
+	},
+	{
+		collection: 'projectInvites'
+	}
+)
 
 
 
 
 conn = mongoose.createConnection(Settings.mongo.url, server: poolSize: Settings.mongo.poolSize || 10)
 conn = mongoose.createConnection(Settings.mongo.url, server: poolSize: Settings.mongo.poolSize || 10)

+ 5 - 10
services/web/public/coffee/ide/share/controllers/ShareProjectModalController.coffee

@@ -48,7 +48,6 @@ define [
 			projectInvites.getInvites().then(
 			projectInvites.getInvites().then(
 				(response) ->
 				(response) ->
 					$scope.state.invites = response?.data?.invites
 					$scope.state.invites = response?.data?.invites
-					$scope.state.invites = [{_id: "wat", email: "user@example.com"}]
 				, (response) ->
 				, (response) ->
 					console.error response
 					console.error response
 			)
 			)
@@ -86,8 +85,9 @@ define [
 						return addNextMember()
 						return addNextMember()
 
 
 					# TODO: double-check if member.type == 'user' needs to be an invite
 					# TODO: double-check if member.type == 'user' needs to be an invite
+					console.log ">> inviting", member
 					if member.type == "user"
 					if member.type == "user"
-						request = projectMembers.addMember(member.email, $scope.inputs.privileges)
+						request = projectInvites.sendInvite(member.email, $scope.inputs.privileges)
 					else if member.type == "group"
 					else if member.type == "group"
 						request = projectMembers.addGroup(member.id, $scope.inputs.privileges)
 						request = projectMembers.addGroup(member.id, $scope.inputs.privileges)
 					else # Not an auto-complete object, so email == display
 					else # Not an auto-complete object, so email == display
@@ -95,14 +95,9 @@ define [
 
 
 					request
 					request
 						.success (data) ->
 						.success (data) ->
-							if data.users?
-								users = data.users
-							else if data.user?
-								users = [data.user]
-							else
-								users = []
-
-							$scope.project.members.push users...
+							if data.invite
+								invite = data.invite
+								$scope.state.invites.push invite
 							setTimeout () ->
 							setTimeout () ->
 								# Give $scope a chance to update $scope.canAddCollaborators
 								# Give $scope a chance to update $scope.canAddCollaborators
 								# with new collaborator information.
 								# with new collaborator information.

+ 2 - 3
services/web/public/coffee/ide/share/services/projectMembers.coffee

@@ -17,13 +17,12 @@ define [
 					privileges: privileges
 					privileges: privileges
 					_csrf: window.csrfToken
 					_csrf: window.csrfToken
 				})
 				})
-			
+
 			addGroup: (group_id, privileges) ->
 			addGroup: (group_id, privileges) ->
 				$http.post("/project/#{ide.project_id}/group", {
 				$http.post("/project/#{ide.project_id}/group", {
 					group_id: group_id
 					group_id: group_id
 					privileges: privileges
 					privileges: privileges
 					_csrf: window.csrfToken
 					_csrf: window.csrfToken
 				})
 				})
-				
 		}
 		}
-	]
+	]

+ 3 - 5
services/web/test/UnitTests/coffee/Collaborators/CollaboratorsInviteControllerTests.coffee

@@ -65,8 +65,6 @@ describe "CollaboratorsInviteController", ->
 				@next.callCount.should.equal 1
 				@next.callCount.should.equal 1
 				@next.firstCall.args[0].should.be.instanceof Error
 				@next.firstCall.args[0].should.be.instanceof Error
 
 
-	# # # #
-
 	describe 'inviteToProject', ->
 	describe 'inviteToProject', ->
 
 
 		beforeEach ->
 		beforeEach ->
@@ -101,7 +99,7 @@ describe "CollaboratorsInviteController", ->
 
 
 			it 'should produce json response', ->
 			it 'should produce json response', ->
 				@res.json.callCount.should.equal 1
 				@res.json.callCount.should.equal 1
-				({inviteId: @invite._id}).should.deep.equal(@res.json.firstCall.args[0])
+				({invite: @invite}).should.deep.equal(@res.json.firstCall.args[0])
 
 
 			it 'should have called canAddXCollaborators', ->
 			it 'should have called canAddXCollaborators', ->
 				@LimitationsManager.canAddXCollaborators.callCount.should.equal 1
 				@LimitationsManager.canAddXCollaborators.callCount.should.equal 1
@@ -117,9 +115,9 @@ describe "CollaboratorsInviteController", ->
 				@LimitationsManager.canAddXCollaborators = sinon.stub().callsArgWith(2, null, false)
 				@LimitationsManager.canAddXCollaborators = sinon.stub().callsArgWith(2, null, false)
 				@CollaboratorsInviteController.inviteToProject @req, @res, @next
 				@CollaboratorsInviteController.inviteToProject @req, @res, @next
 
 
-			it 'should produce json response without inviteId', ->
+			it 'should produce json response without an invite', ->
 				@res.json.callCount.should.equal 1
 				@res.json.callCount.should.equal 1
-				({inviteId: null}).should.deep.equal(@res.json.firstCall.args[0])
+				({invite: null}).should.deep.equal(@res.json.firstCall.args[0])
 
 
 			it 'should not have called inviteToProject', ->
 			it 'should not have called inviteToProject', ->
 				@CollaboratorsInviteHandler.inviteToProject.callCount.should.equal 0
 				@CollaboratorsInviteHandler.inviteToProject.callCount.should.equal 0