Index: lams_central/conf/language/lams/ApplicationResources.properties =================================================================== diff -u -r4c51f9c8b6fab7efa4d5296f1ee60c1c3bd207e5 -rdae7eeb158338a956aaec37705b0c1efb18be6f6 --- lams_central/conf/language/lams/ApplicationResources.properties (.../ApplicationResources.properties) (revision 4c51f9c8b6fab7efa4d5296f1ee60c1c3bd207e5) +++ lams_central/conf/language/lams/ApplicationResources.properties (.../ApplicationResources.properties) (revision dae7eeb158338a956aaec37705b0c1efb18be6f6) @@ -761,7 +761,7 @@ authoring.label.peerrevice.min.words.in.comments =Minimum number of words in a comment authoring.create.criteria =Create Criteria audit.design.created =Learning design "{0}" ({1}) created by {2} ({3}) -authoring.fla.save.successful.check.grouping =Your design is valid and has been saved.\\nYou may want to make all activities grouped, please verify. +authoring.fla.save.successful.check.grouping =Your design is valid and has been saved.\\nIf this is a TBL sequence, you may want to make following activities grouped: authoring.fla.weights.none =No activities with weightable gradebook output #====== Templates Index: lams_central/web/includes/javascript/authoring/authoringGeneral.js =================================================================== diff -u -r51c6e431368c11396aafddf0e3b37c92da2f5edc -rdae7eeb158338a956aaec37705b0c1efb18be6f6 --- lams_central/web/includes/javascript/authoring/authoringGeneral.js (.../authoringGeneral.js) (revision 51c6e431368c11396aafddf0e3b37c92da2f5edc) +++ lams_central/web/includes/javascript/authoring/authoringGeneral.js (.../authoringGeneral.js) (revision dae7eeb158338a956aaec37705b0c1efb18be6f6) @@ -1530,45 +1530,75 @@ * there is a good chance this is a TBL sequence and all activities must be grouped. */ checkTBLGrouping : function(){ - var firstGroupingActivity = null; + var firstActivity = null, + activities = []; + // find first activity in the sequence + // it can be wrong if not all activities are connected $.each(layout.activities, function(){ - if (this instanceof ActivityDefs.GroupingActivity && this.transitions - && this.transitions.to.length === 0 && this.transitions.from.length > 0){ - firstGroupingActivity = this; + if (this.transitions && this.transitions.to.length === 0 && this.transitions.from.length > 0){ + firstActivity = this; return false; } }); + if (!firstActivity) { + return null; + } + // the first activity can be grouping or the second one + var firstGroupingActivity = firstActivity instanceof ActivityDefs.GroupingActivity ? firstActivity : null; if (!firstGroupingActivity) { - return true; + firstGroupingActivity = firstActivity.transitions.from[0].toActivity; + if (!(firstGroupingActivity instanceof ActivityDefs.GroupingActivity)){ + return null; + } } - var secondActivity = firstGroupingActivity.transitions.from.length > 0 ? firstGroupingActivity.transitions.from[0].toActivity : null; - var templateContainer = $('#templateContainerCell'); - var isTBL = secondActivity instanceof ActivityDefs.ToolActivity + + // then it is Assessment or MCQ + var secondActivity = firstGroupingActivity.transitions.from.length > 0 ? firstGroupingActivity.transitions.from[0].toActivity : null, + templateContainer = $('#templateContainerCell'), + isTBL = secondActivity instanceof ActivityDefs.ToolActivity && (secondActivity.learningLibraryID == $('.template[learningLibraryTitle="Assessment"]', templateContainer).attr('learningLibraryId') || secondActivity.learningLibraryID == $('.template[learningLibraryTitle="MCQ"]', templateContainer).attr('learningLibraryId')); if (!isTBL){ - return true; + return null; } + activities.push(secondActivity); + // then leader selection var thirdActivity = secondActivity.transitions.from.length > 0 ? secondActivity.transitions.from[0].toActivity : null; isTBL = thirdActivity instanceof ActivityDefs.ToolActivity && thirdActivity.learningLibraryID == $('.template[learningLibraryTitle="Leaderselection"]', templateContainer).attr('learningLibraryId'); if (!isTBL){ - return true; + return null; } + activities.push(thirdActivity); + // then scratchie var fourthActivity = thirdActivity.transitions.from.length > 0 ? thirdActivity.transitions.from[0].toActivity : null; isTBL = fourthActivity instanceof ActivityDefs.ToolActivity && fourthActivity.learningLibraryID == $('.template[learningLibraryTitle="Scratchie"]', templateContainer).attr('learningLibraryId'); if (!isTBL){ - return true; + return null; } - var result = true; - $.each(layout.activities, function(){ - if (this != firstGroupingActivity && this instanceof ActivityDefs.ToolActivity && !this.grouping){ - result = false; - return false; + activities.push(fourthActivity); + + // then optional assessments + var nextActivity = fourthActivity; + do { + nextActivity = nextActivity.transitions.from.length > 0 ? nextActivity.transitions.from[0].toActivity : null; + if (nextActivity instanceof ActivityDefs.ToolActivity + && nextActivity.learningLibraryID == $('.template[learningLibraryTitle="Assessment"]', templateContainer).attr('learningLibraryId')) { + activities.push(nextActivity); + } else { + nextActivity = null; } - }); - return result; + } while (nextActivity); + + // check which ones are not grouped + var activitiesToGroup = []; + for (var activity of activities) { + if (!activity.grouping){ + activitiesToGroup.push(activity); + } + } + return activitiesToGroup.length === 0 ? null : activitiesToGroup; }, /** @@ -2783,13 +2813,19 @@ GeneralLib.setModified(false); // close the Live Edit dialog - if (GeneralLib.checkTBLGrouping()) { + var missingGroupingOnActivities = GeneralLib.checkTBLGrouping(); + if (missingGroupingOnActivities) { + var info = LABELS.SAVE_SUCCESSFUL_CHECK_GROUPING; + for (var activity of missingGroupingOnActivities){ + info += '
* ' + activity.title; + } + layout.infoDialog.data('show')(info); + + } else { layout.infoDialog.data('show')(LABELS.LIVEEDIT_SAVE_SUCCESSFUL, true); setTimeout(function(){ window.parent.closeDialog('dialogAuthoring'); }, 5000); - } else { - layout.infoDialog.data('show')(LABELS.SAVE_SUCCESSFUL_CHECK_GROUPING); } } }); @@ -2804,10 +2840,16 @@ } if (!layout.ld.invalid) { - if (GeneralLib.checkTBLGrouping()) { - layout.infoDialog.data('show')(LABELS.SAVE_SUCCESSFUL, true); + var missingGroupingOnActivities = GeneralLib.checkTBLGrouping(); + if (missingGroupingOnActivities) { + var info = LABELS.SAVE_SUCCESSFUL_CHECK_GROUPING; + for (var activity of missingGroupingOnActivities){ + info += '
* ' + activity.title; + } + layout.infoDialog.data('show')(info); + } else { - layout.infoDialog.data('show')(LABELS.SAVE_SUCCESSFUL_CHECK_GROUPING); + layout.infoDialog.data('show')(LABELS.SAVE_SUCCESSFUL, true); } }