@@ -722,13 +722,20 @@ async function validateChallengeData (challenge) {
722
722
* @param {String } timelineTemplateId the timeline template id
723
723
*/
724
724
async function populatePhases ( phases , startDate , timelineTemplateId ) {
725
- if ( ! phases || phases . length === 0 ) {
726
- return
727
- }
728
725
if ( _ . isUndefined ( timelineTemplateId ) ) {
729
726
throw new errors . BadRequestError ( `Invalid timeline template ID: ${ timelineTemplateId } ` )
730
727
}
731
728
const template = await helper . getById ( 'TimelineTemplate' , timelineTemplateId )
729
+ if ( ! phases || phases . length === 0 ) {
730
+ // auto populate phases
731
+ phases = [ ]
732
+ for ( const p in template . phases ) {
733
+ phases . push ( {
734
+ phaseId : p . phaseId ,
735
+ duration : p . defaultDuration
736
+ } )
737
+ }
738
+ }
732
739
const phaseDefinitions = await helper . scan ( 'Phase' )
733
740
// generate phase instance ids
734
741
for ( let i = 0 ; i < phases . length ; i += 1 ) {
@@ -861,7 +868,11 @@ async function createChallenge (currentUser, challenge, userToken) {
861
868
throw new errors . BadRequestError ( `trackId and typeId are required to create a challenge` )
862
869
}
863
870
}
864
- if ( challenge . timelineTemplateId && challenge . phases && challenge . phases . length > 0 ) {
871
+
872
+ if ( challenge . timelineTemplateId ) {
873
+ if ( ! challenge . phases ) {
874
+ challenge . phases = [ ]
875
+ }
865
876
await populatePhases ( challenge . phases , challenge . startDate , challenge . timelineTemplateId )
866
877
}
867
878
@@ -1306,7 +1317,7 @@ async function update (currentUser, challengeId, data, userToken, isFull) {
1306
1317
}
1307
1318
}
1308
1319
}
1309
- const newPhases = challenge . phases
1320
+ const newPhases = challenge . phases || [ ]
1310
1321
const newStartDate = data . startDate || challenge . startDate
1311
1322
1312
1323
await helper . validatePhases ( newPhases )
0 commit comments