Index: lams_central/conf/language/lams/ApplicationResources.properties =================================================================== diff -u -rf5a9424d0eebdb6b092b3edf02d9977a0e8a7f47 -rc46a8e8187c1ca4e546ed2952192e63606d95c68 --- lams_central/conf/language/lams/ApplicationResources.properties (.../ApplicationResources.properties) (revision f5a9424d0eebdb6b092b3edf02d9977a0e8a7f47) +++ lams_central/conf/language/lams/ApplicationResources.properties (.../ApplicationResources.properties) (revision c46a8e8187c1ca4e546ed2952192e63606d95c68) @@ -604,6 +604,7 @@ authoring.fla.page.prop.groups.equal =Equal group sizes? authoring.fla.page.prop.groups.view.learners =View learners before selection? authoring.fla.page.prop.groups.name =Name Groups +authoring.fla.page.prop.gradebook =Gradebook output: authoring.fla.page.prop.description =Description: authoring.fla.page.prop.gate.type =Type: authoring.fla.page.prop.gate.type.condition =Condition Index: lams_central/src/java/org/lamsfoundation/lams/authoring/service/AuthoringService.java =================================================================== diff -u -r3c92e96dc7aea4200c6fd6c6b0b1a9e2ccfb2961 -rc46a8e8187c1ca4e546ed2952192e63606d95c68 --- lams_central/src/java/org/lamsfoundation/lams/authoring/service/AuthoringService.java (.../AuthoringService.java) (revision 3c92e96dc7aea4200c6fd6c6b0b1a9e2ccfb2961) +++ lams_central/src/java/org/lamsfoundation/lams/authoring/service/AuthoringService.java (.../AuthoringService.java) (revision c46a8e8187c1ca4e546ed2952192e63606d95c68) @@ -601,7 +601,7 @@ lesson.setLockedForEdit(false); // LDEV-1899 only mark learners uncompleted if a change was saved and an activity added - if (!cancelled && firstAddedActivityId != null) { + if (!cancelled && (firstAddedActivityId != null)) { // the lesson may now have additional activities on the end, // so clear any completed flags lessonService.performMarkLessonUncompleted(lesson.getLessonId(), firstAddedActivityId); @@ -1987,6 +1987,24 @@ activity.setYcoord(300); activityDAO.insert(activity); + // make Gradebook aware of the activity + List defnDTOList = getToolOutputDefinitions(toolContentID, + ToolOutputDefinition.DATA_OUTPUT_DEFINITION_TYPE_CONDITION); + String gradebookToolOutputDefinitionName = null; + for (ToolOutputDefinitionDTO definition : defnDTOList) { + // find the default output + if (definition.getIsDefaultGradebookMark()) { + gradebookToolOutputDefinitionName = definition.getName(); + break; + } + } + if (gradebookToolOutputDefinitionName != null) { + ActivityEvaluation evaluation = new ActivityEvaluation(); + evaluation.setActivity(activity); + evaluation.setToolOutputDefinition(gradebookToolOutputDefinitionName); + baseDAO.insert(evaluation); + } + learningDesign.getActivities().add(activity); learningDesign.setFirstActivity(activity); learningDesign.setValidDesign(true); Index: lams_central/web/authoring/authoring.jsp =================================================================== diff -u -rf5a9424d0eebdb6b092b3edf02d9977a0e8a7f47 -rc46a8e8187c1ca4e546ed2952192e63606d95c68 --- lams_central/web/authoring/authoring.jsp (.../authoring.jsp) (revision f5a9424d0eebdb6b092b3edf02d9977a0e8a7f47) +++ lams_central/web/authoring/authoring.jsp (.../authoring.jsp) (revision c46a8e8187c1ca4e546ed2952192e63606d95c68) @@ -386,6 +386,7 @@ Id="tool${tool.toolDisplayName}" toolId="${tool.toolId}" learningLibraryId="${tool.learningLibraryId}" + defaultToolContentId="${tool.defaultToolContentId}" supportsOutputs="${tool.supportsOutputs}" activityCategoryId="${tool.activityCategoryID}" childToolIds=" @@ -548,6 +549,14 @@ + + + + + + + + Index: lams_central/web/css/authoring.css =================================================================== diff -u -rac8fb651dd7ba8d8986c4d65523121d7fd690141 -rc46a8e8187c1ca4e546ed2952192e63606d95c68 --- lams_central/web/css/authoring.css (.../authoring.css) (revision ac8fb651dd7ba8d8986c4d65523121d7fd690141) +++ lams_central/web/css/authoring.css (.../authoring.css) (revision c46a8e8187c1ca4e546ed2952192e63606d95c68) @@ -62,8 +62,9 @@ width: 30px; } -input.propertiesContentFieldTitle, textarea.propertiesContentFieldDescription { - width: 98%; +input.propertiesContentFieldTitle, textarea.propertiesContentFieldDescription, +select.propertiesContentFieldGradebook { + width: 99%; } input.groupName { Index: lams_central/web/includes/javascript/authoring/authoringActivity.js =================================================================== diff -u -rf5a9424d0eebdb6b092b3edf02d9977a0e8a7f47 -rc46a8e8187c1ca4e546ed2952192e63606d95c68 --- lams_central/web/includes/javascript/authoring/authoringActivity.js (.../authoringActivity.js) (revision f5a9424d0eebdb6b092b3edf02d9977a0e8a7f47) +++ lams_central/web/includes/javascript/authoring/authoringActivity.js (.../authoringActivity.js) (revision c46a8e8187c1ca4e546ed2952192e63606d95c68) @@ -219,6 +219,9 @@ 'to' : [] }; + // set Gradebook output name right now + ActivityLib.getOutputDefinitions(this); + if (!isReadOnlyMode){ this.loadPropertiesDialogContent = PropertyDefs.toolProperties; } @@ -1045,6 +1048,73 @@ }, + /** + * Drop the dragged activity on the canvas. + */ + dropActivity : function(activity, x, y) { + if (!(activity instanceof ActivityDefs.OptionalActivity || activity instanceof ActivityDefs.FloatingActivity)) { + // check if it was removed from an Optional or Floating Activity + if (activity.parentActivity && activity.parentActivity instanceof DecorationDefs.Container) { + var childActivities = DecorationLib.getChildActivities(activity.parentActivity.items.shape); + if ($.inArray(activity, childActivities) == -1) { + activity.parentActivity.draw(); + ActivityLib.redrawTransitions(activity.parentActivity); + activity.parentActivity = null; + } + } + + // check if it was added to an Optional or Floating Activity + var container = layout.floatingActivity + && Snap.path.isPointInsideBBox(layout.floatingActivity.items.getBBox(),x,y) + ? layout.floatingActivity : null; + if (!container) { + $.each(layout.activities, function(){ + if (this instanceof ActivityDefs.OptionalActivity + && Snap.path.isPointInsideBBox(this.items.getBBox(),x,y)) { + container = this; + return false; + } + }); + } + if (container) { + // system activities can not be added to optional and support activities + if (activity instanceof ActivityDefs.GateActivity + || activity instanceof ActivityDefs.GroupingActivity + || activity instanceof ActivityDefs.BranchingEdgeActivity){ + alert(LABELS.ACTIVITY_IN_CONTAINER_ERROR); + return false; + } + + if ($.inArray(activity, container.childActivities) == -1) { + $.each(activity.transitions.from, function(){ + ActivityLib.removeTransition(this); + }); + $.each(activity.transitions.to, function(){ + ActivityLib.removeTransition(this); + }); + + // for properties dialog to reload + ActivityLib.removeSelectEffect(container); + + container.childActivities.push(activity); + container.draw(null, null, null, null, childActivities); + ActivityLib.redrawTransitions(container); + } + } + } + + ActivityLib.redrawTransitions(activity); + + $.each(layout.regions, function(){ + // redraw all annotation regions so they are pushed to back + this.draw(); + }); + + GeneralLib.setModified(true); + return true; + }, + + findNestedBranching : function(branchingActivity) { var nestedBranching = []; $.each(branchingActivity.branches, function(){ @@ -1113,72 +1183,36 @@ /** - * Drop the dragged activity on the canvas. + * Get output definitions from Tool activity */ - dropActivity : function(activity, x, y) { - if (!(activity instanceof ActivityDefs.OptionalActivity || activity instanceof ActivityDefs.FloatingActivity)) { - // check if it was removed from an Optional or Floating Activity - if (activity.parentActivity && activity.parentActivity instanceof DecorationDefs.Container) { - var childActivities = DecorationLib.getChildActivities(activity.parentActivity.items.shape); - if ($.inArray(activity, childActivities) == -1) { - activity.parentActivity.draw(); - ActivityLib.redrawTransitions(activity.parentActivity); - activity.parentActivity = null; - } - } - - // check if it was added to an Optional or Floating Activity - var container = layout.floatingActivity - && Snap.path.isPointInsideBBox(layout.floatingActivity.items.getBBox(),x,y) - ? layout.floatingActivity : null; - if (!container) { - $.each(layout.activities, function(){ - if (this instanceof ActivityDefs.OptionalActivity - && Snap.path.isPointInsideBBox(this.items.getBBox(),x,y)) { - container = this; + getOutputDefinitions : function(activity){ + if (!activity.toolID) { + return; + } + + $.ajax({ + url : LAMS_URL + 'authoring/author.do', + data : { + 'method' : 'getToolOutputDefinitionsJSON', + 'toolContentID' : activity.toolContentID + || layout.toolMetadata[activity.learningLibraryID].defaultToolContentID + }, + cache : false, + async: false, + dataType : 'json', + success : function(response) { + activity.outputDefinitions = response; + $.each(activity.outputDefinitions, function() { + if (this.isDefaultGradebookMark){ + activity.gradebookToolOutputDefinitionName = this.name; return false; } }); } - if (container) { - // system activities can not be added to optional and support activities - if (activity instanceof ActivityDefs.GateActivity - || activity instanceof ActivityDefs.GroupingActivity - || activity instanceof ActivityDefs.BranchingEdgeActivity){ - alert(LABELS.ACTIVITY_IN_CONTAINER_ERROR); - return false; - } - - if ($.inArray(activity, container.childActivities) == -1) { - $.each(activity.transitions.from, function(){ - ActivityLib.removeTransition(this); - }); - $.each(activity.transitions.to, function(){ - ActivityLib.removeTransition(this); - }); - - // for properties dialog to reload - ActivityLib.removeSelectEffect(container); - - container.childActivities.push(activity); - container.draw(null, null, null, null, childActivities); - ActivityLib.redrawTransitions(container); - } - } - } - - ActivityLib.redrawTransitions(activity); - - $.each(layout.regions, function(){ - // redraw all annotation regions so they are pushed to back - this.draw(); }); - - GeneralLib.setModified(true); - return true; }, - + /** * Open separate window with activity authoring on double click. */ Index: lams_central/web/includes/javascript/authoring/authoringGeneral.js =================================================================== diff -u -re1a18b4e000fe475d25e77d53b0560c1872a472b -rc46a8e8187c1ca4e546ed2952192e63606d95c68 --- lams_central/web/includes/javascript/authoring/authoringGeneral.js (.../authoringGeneral.js) (revision e1a18b4e000fe475d25e77d53b0560c1872a472b) +++ lams_central/web/includes/javascript/authoring/authoringGeneral.js (.../authoringGeneral.js) (revision c46a8e8187c1ca4e546ed2952192e63606d95c68) @@ -156,6 +156,7 @@ // register tool properties so they are later easily accessible layout.toolMetadata[learningLibraryID] = { 'iconPath' : iconPath, + 'defaultToolContentID' : $(this).attr('defaultToolContentId'), 'supportsOutputs' : $(this).attr('supportsOutputs'), 'activityCategoryID' : activityCategoryID, 'parallelChildActivityDefs' : parallelChildActivityDefs @@ -2359,9 +2360,7 @@ 'maxOptions' : activity.maxOptions || null, 'stopAfterActivity' : activity.stopAfterActivity ? true : false, 'toolActivityUIID' : activity.input ? activity.input.uiid : null, - - 'gradebookToolOutputDefinitionName' : null, - 'helpText' : null + 'gradebookToolOutputDefinitionName' : activity.gradebookToolOutputDefinitionName }); var activityTransitions = activity instanceof ActivityDefs.BranchingActivity ? Index: lams_central/web/includes/javascript/authoring/authoringProperty.js =================================================================== diff -u -r4a9ece264f4461b3e9ec160f8f7e97d8e186fdb0 -rc46a8e8187c1ca4e546ed2952192e63606d95c68 --- lams_central/web/includes/javascript/authoring/authoringProperty.js (.../authoringProperty.js) (revision 4a9ece264f4461b3e9ec160f8f7e97d8e186fdb0) +++ lams_central/web/includes/javascript/authoring/authoringProperty.js (.../authoringProperty.js) (revision c46a8e8187c1ca4e546ed2952192e63606d95c68) @@ -605,6 +605,10 @@ // parts of Parallel Activity can not be grouped $('.propertiesContentFieldGrouping', content).closest('tr').remove(); } + + if (activity.outputDefinitions) { + PropertyLib.fillOutputDefinitionsDropdown(activity); + } $('input, select', content).change(function(){ // extract changed properties and redraw the activity @@ -625,14 +629,18 @@ var selectedGrouping = $('.propertiesContentFieldGrouping option:selected', content); if (selectedGrouping.length > 0){ - var newGroupingValue = $('.propertiesContentFieldGrouping option:selected', content) - .data('grouping'); + var newGroupingValue = selectedGrouping.data('grouping'); if (newGroupingValue != activity.grouping) { activity.grouping = newGroupingValue; redrawNeeded = true; } } + var selectedGradebookToolOutputDefinition = $('.propertiesContentFieldGradebook option:selected', content); + if (selectedGradebookToolOutputDefinition.length > 0){ + activity.gradebookToolOutputDefinitionName = selectedGradebookToolOutputDefinition.val(); + } + if (redrawNeeded) { activity.draw(); ActivityLib.addSelectEffect(activity, true); @@ -1022,25 +1030,13 @@ outputConditionsDialog.dialog('option', { /** - * Get output definitions from Tool activity + * Get output definitions from a Tool activity */ 'refreshDefinitions' : function(){ var dialog = layout.outputConditionsDialog, activity = dialog.dialog('option', 'parentObject'); - - $.ajax({ - url : LAMS_URL + 'authoring/author.do', - data : { - 'method' : 'getToolOutputDefinitionsJSON', - 'toolContentID' : activity.input.toolContentID || activity.input.toolID - }, - cache : false, - async: false, - dataType : 'json', - success : function(response) { - activity.input.outputDefinitions = response; - } - }); + // sets the output definitions and their default value + ActivityLib.getOutputDefinitions(activity.input); }, @@ -1574,7 +1570,41 @@ option.attr('selected', 'selected'); } }); + }, + + + /** + * Fill outpu definitions of given activity for Gradebook. + */ + fillOutputDefinitionsDropdown : function(activity) { + // find all tools that support input and fill dropdown menu with their titles + var emptyOption = $('