Index: lams_learning/src/java/org/lamsfoundation/lams/learning/service/ICoreLearnerService.java
===================================================================
RCS file: /usr/local/cvsroot/lams_learning/src/java/org/lamsfoundation/lams/learning/service/ICoreLearnerService.java,v
diff -u -r1.18.10.1 -r1.18.10.2
--- lams_learning/src/java/org/lamsfoundation/lams/learning/service/ICoreLearnerService.java 16 Oct 2015 17:33:20 -0000 1.18.10.1
+++ lams_learning/src/java/org/lamsfoundation/lams/learning/service/ICoreLearnerService.java 2 Nov 2015 13:22:10 -0000 1.18.10.2
@@ -243,12 +243,6 @@
public List getActiveLearnersByLesson(long lessonId);
/**
- * Returns a count of all the active learners by lesson id. More efficient than calling
- * getActiveLearnersByLesson(lessonId).size()
- */
- public Integer getCountActiveLearnersByLesson(long lessonId);
-
- /**
* Perform grouping for the learners who have started the lesson, based on the grouping activity.
*
* @param lessonId
Index: lams_learning/src/java/org/lamsfoundation/lams/learning/service/LearnerService.java
===================================================================
RCS file: /usr/local/cvsroot/lams_learning/src/java/org/lamsfoundation/lams/learning/service/LearnerService.java,v
diff -u -r1.112.2.3 -r1.112.2.4
--- lams_learning/src/java/org/lamsfoundation/lams/learning/service/LearnerService.java 16 Oct 2015 17:33:20 -0000 1.112.2.3
+++ lams_learning/src/java/org/lamsfoundation/lams/learning/service/LearnerService.java 2 Nov 2015 13:22:10 -0000 1.112.2.4
@@ -997,14 +997,6 @@
}
/**
- * @see org.lamsfoundation.lams.learning.service.ICoreLearnerService#getCountActiveLessonLearners(long)
- */
- @Override
- public Integer getCountActiveLearnersByLesson(long lessonId) {
- return lessonService.getCountActiveLessonLearners(lessonId);
- }
-
- /**
* Get the lesson for this activity. If the activity is not part of a lesson (ie is from an authoring design then it
* will return null.
*/
Index: lams_monitoring/web/includes/javascript/monitorLesson.js
===================================================================
RCS file: /usr/local/cvsroot/lams_monitoring/web/includes/javascript/monitorLesson.js,v
diff -u -r1.44.2.16 -r1.44.2.17
--- lams_monitoring/web/includes/javascript/monitorLesson.js 25 Sep 2015 13:22:48 -0000 1.44.2.16
+++ lams_monitoring/web/includes/javascript/monitorLesson.js 2 Nov 2015 13:22:09 -0000 1.44.2.17
@@ -2,6 +2,8 @@
// copy of lesson/branching SVG so it does no need to be fetched every time
// HTML with SVG of the lesson
var originalSequenceCanvas = null,
+// is the LD SVG in Flashless format or the old, Flash format
+ flaFormat = false,
// DIV container for lesson/branching SVG
// it gets accessed so many times it's worth to cache it here
sequenceCanvas = null,
@@ -826,6 +828,9 @@
},
success : function(response) {
if (sequenceCanvasFirstFetch) {
+ // once Flashless SVG format is detected, it applies for all activities
+ flaFormat = response.flaFormat;
+
// FLA activities have uiids but no ids, set it here
$.each(response.activities, function(activityIndex, activity){
$('g[uiid="' + activity.uiid + '"]', sequenceCanvas).attr('id', activity.id);
@@ -856,7 +861,7 @@
reloadSVG = false;
$.each(response.activities, function(index, activity){
// are there any learners in this or any activity?
- learnerCount += activity.learners ? activity.learners.length : 0;
+ learnerCount += activity.learnerCount;
if (response.contributeActivities) {
$.each(response.contributeActivities, function(){
if (activity.id == this.activityID) {
@@ -876,16 +881,15 @@
sequenceCanvas.html(sequenceCanvas.html());
}
- var completedLearners = response.completedLearners,
- learnerTotalCount = learnerCount + (completedLearners ? completedLearners.length : 0 );
+ var learnerTotalCount = learnerCount + response.completedLearnerCount;
$('#learnersStartedPossibleCell').text(learnerTotalCount + ' / ' + response.numberPossibleLearners);
- addCompletedLearnerIcons(completedLearners, learnerTotalCount);
+ addCompletedLearnerIcons(response.completedLearners, response.completedLearnerCount, learnerTotalCount);
$.each(response.activities, function(activityIndex, activity){
addActivityIconsHandlers(activity);
var isBranching = [10,11,12,13].indexOf(activity.type) > -1;
- if (activity.url || (isBranching && !activity.flaFormat)) {
+ if (activity.url || (isBranching && !flaFormat)) {
var activityGroup = $('g[id="' + activity.id + '"]'),
dblClickFunction =
// different behaviour for regular/branching activities
@@ -1048,7 +1052,7 @@
* Draw user and attention icons on top of activities.
*/
function addActivityIcons(activity) {
- if (!activity.learners && !activity.requiresAttention) {
+ if (activity.learnerCount == 0 && !activity.requiresAttention) {
return;
}
@@ -1061,12 +1065,11 @@
// add group of users icon
var appendTarget = $('svg', sequenceCanvas)[0],
// branching and gates require extra adjustments
- isNewBranching = [10,11,12,13].indexOf(activity.type) > -1 && activity.flaFormat,
+ isNewBranching = [10,11,12,13].indexOf(activity.type) > -1 && flaFormat,
isGate = [3,4,5,14].indexOf(activity.type) > -1;
- if (activity.learners){
- var groupTitle = activity.learners.length + ' ' + LABELS.LEARNER_GROUP_COUNT + ' ' + LABELS.LEARNER_GROUP_SHOW,
- // if icons do not fit in shape anymore, show a group icon
+ if (activity.learnerCount > 0){
+ var groupTitle = activity.learnerCount + ' ' + LABELS.LEARNER_GROUP_COUNT + ' ' + LABELS.LEARNER_GROUP_SHOW,
element = appendXMLElement('image', {
'id' : 'act' + activity.id + 'learnerGroup',
'x' : isNewBranching ? coord.x + 2 : (isGate ? coord.x + 10 : coord.x2 - 18),
@@ -1086,18 +1089,15 @@
'font-family': 'Verdana',
'font-size' : 8,
'style' : 'cursor : pointer'
- }, activity.learners.length, appendTarget);
+ }, activity.learnerCount, appendTarget);
appendXMLElement('title', null, groupTitle, element);
- var actTooltip = LABELS.LEARNER_GROUP_LIST_TITLE;
+ if (activity.learners) {
// draw single icons for the first few learners;
// don't do it for gate and optional activities, and new branching/optional sequences format
- if ([3,4,5,7,13,14].indexOf(activity.type) == -1 && !activity.flaFormat) {
+ if ([3,4,5,7,13,14].indexOf(activity.type) == -1 && !flaFormat) {
$.each(activity.learners, function(learnerIndex, learner){
var learnerDisplayName = getLearnerDisplayName(learner);
- actTooltip += '\n' + learnerDisplayName;
-
- if (learnerIndex < 7) {
element = appendXMLElement('image', {
'id' : 'act' + activity.id + 'learner' + learner.id,
'x' : coord.x + learnerIndex*15 + 1,
@@ -1109,11 +1109,9 @@
'style' : 'cursor : pointer'
}, null, appendTarget);
appendXMLElement('title', null, learnerDisplayName, element);
- }
- });
+ });
+ }
}
-
- appendXMLElement('title', null, actTooltip, appendTarget);
}
if (activity.requiresAttention) {
@@ -1135,7 +1133,7 @@
* After SVG refresh, add click/dblclick/drag handlers to icons.
*/
function addActivityIconsHandlers(activity) {
- if (!activity.learners && !activity.requiresAttention) {
+ if (activity.learnerCount == 0 && !activity.requiresAttention) {
return;
}
@@ -1177,12 +1175,14 @@
});
}
});
+ }
+ if (activity.learnerCount > 0){
var learnerGroup = $('*[id^="act' + activity.id + 'learnerGroup"]', sequenceCanvas);
dblTap(learnerGroup, function(event){
// double click on learner group icon to see list of learners
event.stopPropagation();
- showLearnerGroupDialog(activity.id, activity.title, activity.learners, true, usersViewable);
+ showLearnerGroupDialog(activity.id, activity.title, null, true, usersViewable, false);
});
}
@@ -1199,21 +1199,17 @@
/**
* Add learner icons in "finished lesson" bar.
*/
-function addCompletedLearnerIcons(learners, learnerTotalCount) {
+function addCompletedLearnerIcons(learners, learnerCount, learnerTotalCount) {
var iconsContainer = $('#completedLearnersContainer');
- var completedLearnerCount = (learners ? learners.length : 0 );
// show (current/total) label
$('').attr({
- 'title' : LABELS.LEARNER_FINISHED_COUNT
- .replace('[0]', completedLearnerCount).replace('[1]', learnerTotalCount)
- }).text('(' + completedLearnerCount + '/' + learnerTotalCount + ')')
+ 'title' : LABELS.LEARNER_FINISHED_COUNT.replace('[0]', learnerCount).replace('[1]', learnerTotalCount)
+ }).text('(' + learnerCount + '/' + learnerTotalCount + ')')
.appendTo(iconsContainer);
if (learners) {
// create learner icons, along with handlers
$.each(learners, function(learnerIndex, learner){
- // maximum 55 icons in the bar
- if (learnerIndex < 55) {
// make an icon for each learner
$('
').attr({
'src' : LAMS_URL + 'images/icons/user.png',
@@ -1240,7 +1236,6 @@
}
})
.appendTo(iconsContainer);
- }
});
// show a group icon
@@ -1250,7 +1245,7 @@
}).css('cursor', 'pointer').appendTo(iconsContainer);
dblTap(groupIcon, function(){
- showLearnerGroupDialog(null, LABELS.LEARNER_FINISHED_DIALOG_TITLE, learners, true, false);
+ showLearnerGroupDialog(null, LABELS.LEARNER_FINISHED_DIALOG_TITLE, null, true, false, false);
});
}
}
@@ -1279,7 +1274,7 @@
}
// special processing for new format of branching and optional sequences
- if ([10,11,12,13].indexOf(activity.type) > -1 && activity.flaFormat) {
+ if ([10,11,12,13].indexOf(activity.type) > -1 && flaFormat) {
return {
'x' : activity.x,
'y' : activity.y
@@ -1448,7 +1443,8 @@
if (response) {
alert(response);
} else {
- window.parent.showFlashlessAuthoringDialog(ldId, 'editonfly');
+ openPopUp(LAMS_URL + 'home.do?method=author&layout=editonfly&learningDesignID=' + ldId,
+ 'LiveEdit', 600, 800, false);
closeMonitorLessonDialog();
}
}
@@ -1778,10 +1774,28 @@
* Show a dialog with user list and optional Force Complete and View Learner buttons.
*/
function showLearnerGroupDialog(activityId, dialogTitle, learners, allowForceComplete, allowView, allowEmail) {
- var learnerGroupList = $('#learnerGroupList').empty();
- var learnerGroupDialog = $('#learnerGroupDialog');
+ var learnerGroupList = $('#learnerGroupList').empty(),
+ learnerGroupDialog = $('#learnerGroupDialog');
- if (learners) {
+ if (!learners) {
+ $.ajax({
+ dataType : 'json',
+ url : LAMS_URL + 'monitoring/monitoring.do',
+ cache : false,
+ async : false,
+ data : {
+ 'method' : 'getCurrentLearners',
+ 'lessonID' : lessonId,
+ // activity ID can be null; if it is not, lesson ID is ignored
+ 'activityID' : activityId,
+ 'flaFormat' : flaFormat
+ },
+ success : function(response) {
+ learners = response;
+ }
+ });
+ }
+
$.each(learners, function(learnerIndex, learner) {
var viewUrl = LAMS_URL + 'monitoring/monitoring.do?method=getLearnerActivityURL&userID='
+ learner.id + '&activityID=' + activityId + '&lessonID=' + lessonId,
@@ -1811,7 +1825,6 @@
}
}
});
- }
// show buttons depending on parameters
$('button#learnerGroupDialogForceCompleteButton')