@@ -245,7 +245,7 @@ async function init (currentUser, challengeId, resource, isCreated) {
245
245
246
246
// get member information using v3 API
247
247
const handle = resource . memberHandle
248
- const memberId = await helper . getMemberIdByHandle ( resource . memberHandle )
248
+ const { memberId, email } = await helper . getMemberDetailsByHandle ( resource . memberHandle )
249
249
250
250
// check if the resource is reviewer role and has already made a submission in the challenge
251
251
if ( resource . roleId === config . REVIEWER_RESOURCE_ROLE_ID || resource . roleId === config . ITERATIVE_REVIEWER_RESOURCE_ROLE_ID ) {
@@ -284,11 +284,11 @@ async function init (currentUser, challengeId, resource, isCreated) {
284
284
}
285
285
// skip phase dependency checks for tasks
286
286
if ( _ . get ( challenge , 'task.isTask' , false ) ) {
287
- return { resources, memberId, handle }
287
+ return { resources, memberId, handle, email , challenge }
288
288
}
289
289
// bypass phase dependency checks if the caller is an m2m/admin
290
290
if ( currentUser . isMachine || helper . hasAdminRole ( currentUser ) ) {
291
- return { resources, memberId, handle }
291
+ return { resources, memberId, handle, email , challenge }
292
292
}
293
293
// check phases dependencies
294
294
const dependencies = await ResourceRolePhaseDependencyService . getDependencies ( { resourceRoleId : resource . roleId } )
@@ -316,7 +316,7 @@ async function init (currentUser, challengeId, resource, isCreated) {
316
316
} )
317
317
318
318
// return resources and the member id
319
- return { resources, memberId, handle }
319
+ return { resources, memberId, handle, email , challenge }
320
320
}
321
321
322
322
/**
@@ -331,7 +331,7 @@ async function createResource (currentUser, resource) {
331
331
332
332
// handle doesn't change in current version
333
333
// Seems we don't need handle auto-correction(e.g. "THomaskranitsas"->"thomaskranitsas")
334
- const { resources, memberId } = await init ( currentUser , challengeId , resource , true )
334
+ const { resources, memberId, handle , email , challenge } = await init ( currentUser , challengeId , resource , true )
335
335
336
336
if ( _ . reduce ( resources ,
337
337
( result , r ) => _ . toString ( r . memberId ) === _ . toString ( memberId ) && r . roleId === resource . roleId ? true : result ,
@@ -358,6 +358,30 @@ async function createResource (currentUser, resource) {
358
358
359
359
logger . debug ( `Created resource: ${ JSON . stringify ( _ . pick ( ret , payloadFields ) ) } ` )
360
360
await helper . postEvent ( config . RESOURCE_CREATE_TOPIC , _ . pick ( ret , payloadFields ) )
361
+ if ( ! _ . get ( challenge , 'task.isTask' , false ) && resource . roleId === config . SUBMITTER_RESOURCE_ROLE_ID ) {
362
+ const forumUrl = _ . get ( challenge , 'discussions[0].url' )
363
+ let templateId = config . REGISTRATION_EMAIL . SENDGRID_TEMPLATE_ID
364
+ if ( _ . isUndefined ( forumUrl ) ) {
365
+ templateId = config . REGISTRATION_EMAIL . SENDGRID_TEMPLATE_ID_NO_FORUM
366
+ }
367
+ await helper . postEvent ( config . EMAIL_NOTIFICATIN_TOPIC , {
368
+ from : config . REGISTRATION_EMAIL . EMAIL_FROM ,
369
+ replyTo : config . REGISTRATION_EMAIL . EMAIL_FROM ,
370
+ recipients : [ email ] ,
371
+ data : {
372
+ handle,
373
+ challengeName : challenge . name ,
374
+ forum : forumUrl ,
375
+ submissionEndTime : new Date ( _ . get ( _ . find ( challenge . phases , phase => phase . name === 'Submission' ) , 'scheduledEndDate' ) ) . toUTCString ( ) ,
376
+ submitUrl : _ . replace ( config . REGISTRATION_EMAIL . SUBMIT_URL , ':id' , challengeId ) ,
377
+ reviewAppUrl : config . REGISTRATION_EMAIL . REVIEW_APP_URL + challenge . legacyId ,
378
+ helpUrl : config . REGISTRATION_EMAIL . HELP_URL ,
379
+ support : config . REGISTRATION_EMAIL . SUPPORT_EMAIL
380
+ } ,
381
+ sendgrid_template_id : templateId ,
382
+ version : 'v3'
383
+ } )
384
+ }
361
385
362
386
return ret
363
387
} catch ( err ) {
0 commit comments