Index: lams_gradebook/conf/language/lams/ApplicationResources_en_AU.properties =================================================================== diff -u -r29ddab74c6c71e3bda66063da609ae75c08135d7 -r5a1e50380808e44d7228d9f3e05ab0915e0a4474 --- lams_gradebook/conf/language/lams/ApplicationResources_en_AU.properties (.../ApplicationResources_en_AU.properties) (revision 29ddab74c6c71e3bda66063da609ae75c08135d7) +++ lams_gradebook/conf/language/lams/ApplicationResources_en_AU.properties (.../ApplicationResources_en_AU.properties) (revision 5a1e50380808e44d7228d9f3e05ab0915e0a4474) @@ -102,5 +102,7 @@ audit.marks.released.on =Marks have been released for lessonId {0}. audit.marks.released.off =Marks have been hidden for lessonId {0}. +gradebook.export.login =Login + #======= End labels: Exported 95 labels for en AU ===== Index: lams_gradebook/src/java/org/lamsfoundation/lams/gradebook/dto/GBUserGridRowDTO.java =================================================================== diff -u -rb298c498f26d7e881bc2a2064d62988c51be3b1a -r5a1e50380808e44d7228d9f3e05ab0915e0a4474 --- lams_gradebook/src/java/org/lamsfoundation/lams/gradebook/dto/GBUserGridRowDTO.java (.../GBUserGridRowDTO.java) (revision b298c498f26d7e881bc2a2064d62988c51be3b1a) +++ lams_gradebook/src/java/org/lamsfoundation/lams/gradebook/dto/GBUserGridRowDTO.java (.../GBUserGridRowDTO.java) (revision 5a1e50380808e44d7228d9f3e05ab0915e0a4474) @@ -38,8 +38,10 @@ private String activityUrl; // For excel export + private Date finishDate; private String firstName; private String lastName; + private String login; private String currentActivity; public GBUserGridRowDTO() { @@ -50,6 +52,7 @@ this.rowName = StringEscapeUtils.escapeHtml(user.getLastName() + " " + user.getFirstName()); this.firstName = user.getFirstName(); this.lastName = user.getLastName(); + this.login = user.getLogin(); } @Override @@ -118,6 +121,14 @@ this.lastName = lastName; } + public String getLogin() { + return login; + } + + public void setLogin(String login) { + this.login = login; + } + public String getCurrentActivity() { return currentActivity; } @@ -133,5 +144,13 @@ public void setStartDate(Date startTime) { this.startDate = startTime; } + + public Date getFinishDate() { + return finishDate; + } + public void setFinishDate(Date finishDate) { + this.finishDate = finishDate; + } + } Index: lams_gradebook/src/java/org/lamsfoundation/lams/gradebook/service/GradebookService.java =================================================================== diff -u -r93b927e0f6ae45cb6ae27563c108f74da560f5c4 -r5a1e50380808e44d7228d9f3e05ab0915e0a4474 --- lams_gradebook/src/java/org/lamsfoundation/lams/gradebook/service/GradebookService.java (.../GradebookService.java) (revision 93b927e0f6ae45cb6ae27563c108f74da560f5c4) +++ lams_gradebook/src/java/org/lamsfoundation/lams/gradebook/service/GradebookService.java (.../GradebookService.java) (revision 5a1e50380808e44d7228d9f3e05ab0915e0a4474) @@ -24,6 +24,7 @@ package org.lamsfoundation.lams.gradebook.service; import java.text.DateFormat; +import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; @@ -81,6 +82,7 @@ import org.lamsfoundation.lams.util.ConfigurationKeys; import org.lamsfoundation.lams.util.DateUtil; import org.lamsfoundation.lams.util.ExcelCell; +import org.lamsfoundation.lams.util.FileUtil; import org.lamsfoundation.lams.util.MessageService; import org.lamsfoundation.lams.util.audit.IAuditService; import org.lamsfoundation.lams.web.session.SessionManager; @@ -678,6 +680,8 @@ // Set the progress LearnerProgress learnerProgress = userToLearnerProgressMap.get(learner.getUserId()); userDTO.setTimeTaken(getActivityDuration(learnerProgress, activity)); + userDTO.setStartDate(getActivityStartDate(learnerProgress, activity, null)); + userDTO.setFinishDate(getActivityFinishDate(learnerProgress, activity, null)); // Add marks and feedback GradebookUserActivity gradebookUserActivity = userToGradebookUserActivityMap.get(learner.getUserId()); @@ -695,8 +699,6 @@ @Override @SuppressWarnings("unchecked") public LinkedHashMap exportLessonGradebook(Lesson lesson) { - - Date date1 = new Date(); LinkedHashMap dataToExport = new LinkedHashMap(); @@ -754,22 +756,24 @@ ArrayList userRows = getGBUserRowsForLesson(lesson); // Setting up the user marks table - ExcelCell[] userTitleRow = new ExcelCell[5]; + ExcelCell[] userTitleRow = new ExcelCell[6]; userTitleRow[0] = new ExcelCell(getMessage("gradebook.export.last.name"), true); userTitleRow[1] = new ExcelCell(getMessage("gradebook.export.first.name"), true); - userTitleRow[2] = new ExcelCell(getMessage("gradebook.exportcourse.progress"), true); - userTitleRow[3] = new ExcelCell(getMessage("gradebook.export.time.taken.seconds"), true); - userTitleRow[4] = new ExcelCell(getMessage("gradebook.export.total.mark"), true); + userTitleRow[2] = new ExcelCell(getMessage("gradebook.export.login"), true); + userTitleRow[3] = new ExcelCell(getMessage("gradebook.exportcourse.progress"), true); + userTitleRow[4] = new ExcelCell(getMessage("gradebook.export.time.taken.seconds"), true); + userTitleRow[5] = new ExcelCell(getMessage("gradebook.export.total.mark"), true); rowList.add(userTitleRow); for (GBUserGridRowDTO userRow : userRows) { // Adding the user data for the lesson - ExcelCell[] userDataRow = new ExcelCell[5]; + ExcelCell[] userDataRow = new ExcelCell[6]; userDataRow[0] = new ExcelCell(userRow.getLastName(), false); userDataRow[1] = new ExcelCell(userRow.getFirstName(), false); - userDataRow[2] = new ExcelCell(getProgressMessage(userRow), false); - userDataRow[3] = new ExcelCell(userRow.getTimeTakenSeconds(), false); - userDataRow[4] = new ExcelCell(userRow.getMark(), false); + userDataRow[2] = new ExcelCell(userRow.getLogin(), false); + userDataRow[3] = new ExcelCell(getProgressMessage(userRow), false); + userDataRow[4] = new ExcelCell(userRow.getTimeTakenSeconds(), false); + userDataRow[5] = new ExcelCell(userRow.getMark(), false); rowList.add(userDataRow); } @@ -783,25 +787,27 @@ for (Activity activity : activityToUserDTOMap.keySet()) { - ExcelCell[] activityTitleRow = new ExcelCell[4]; + ExcelCell[] activityTitleRow = new ExcelCell[5]; activityTitleRow[0] = new ExcelCell(activity.getTitle(), true); rowList1.add(activityTitleRow); - ExcelCell[] titleRow = new ExcelCell[4]; + ExcelCell[] titleRow = new ExcelCell[5]; titleRow[0] = new ExcelCell(getMessage("gradebook.export.last.name"), true); titleRow[1] = new ExcelCell(getMessage("gradebook.export.first.name"), true); - titleRow[2] = new ExcelCell(getMessage("gradebook.export.time.taken.seconds"), true); - titleRow[3] = new ExcelCell(getMessage("gradebook.columntitle.mark"), true); + titleRow[2] = new ExcelCell(getMessage("gradebook.export.login"), true); + titleRow[3] = new ExcelCell(getMessage("gradebook.export.time.taken.seconds"), true); + titleRow[4] = new ExcelCell(getMessage("gradebook.columntitle.mark"), true); rowList1.add(titleRow); // Get the rest of the data List userDtos = activityToUserDTOMap.get(activity); for (GBUserGridRowDTO userDto : userDtos) { - ExcelCell[] userDataRow = new ExcelCell[4]; + ExcelCell[] userDataRow = new ExcelCell[5]; userDataRow[0] = new ExcelCell(userDto.getLastName(), false); userDataRow[1] = new ExcelCell(userDto.getFirstName(), false); - userDataRow[2] = new ExcelCell(userDto.getTimeTakenSeconds(), false); - userDataRow[3] = new ExcelCell(userDto.getMark(), false); + userDataRow[2] = new ExcelCell(userDto.getLogin(), false); + userDataRow[3] = new ExcelCell(userDto.getTimeTakenSeconds(), false); + userDataRow[4] = new ExcelCell(userDto.getMark(), false); rowList1.add(userDataRow); } @@ -817,18 +823,22 @@ if (lesson.getAllLearners() != null) { learners.addAll(lesson.getAllLearners()); } + + SimpleDateFormat cellDateFormat = new SimpleDateFormat(FileUtil.EXPORT_TO_SPREADSHEET_TITLE_DATE_FORMAT); rowList = new LinkedList(); for (User learner : learners) { userTitleRow = new ExcelCell[4]; - userTitleRow[0] = new ExcelCell(learner.getFullName(), true); + userTitleRow[0] = new ExcelCell(learner.getFullName() + " (" + learner.getLogin() + ")", true); rowList.add(userTitleRow); - ExcelCell[] titleRow = new ExcelCell[3]; + ExcelCell[] titleRow = new ExcelCell[5]; titleRow[0] = new ExcelCell(getMessage("gradebook.export.activity"), true); - titleRow[1] = new ExcelCell(getMessage("gradebook.export.time.taken.seconds"), true); - titleRow[2] = new ExcelCell(getMessage("gradebook.columntitle.mark"), true); + titleRow[1] = new ExcelCell(getMessage("gradebook.columntitle.startDate"), true); + titleRow[2] = new ExcelCell(getMessage("gradebook.columntitle.completeDate"), true); + titleRow[3] = new ExcelCell(getMessage("gradebook.export.time.taken.seconds"), true); + titleRow[4] = new ExcelCell(getMessage("gradebook.columntitle.mark"), true); rowList.add(titleRow); for (ToolActivity activity : activityToUserDTOMap.keySet()) { @@ -855,10 +865,15 @@ String activityRowName = (groupName != null && groupId != null) ? StringEscapeUtils.escapeHtml(activity .getTitle()) + " (" + groupName + ")" : StringEscapeUtils.escapeHtml(activity.getTitle()); - ExcelCell[] activityDataRow = new ExcelCell[3]; + String startDate = (userDto.getStartDate() == null) ? "" : cellDateFormat.format(userDto.getStartDate()); + String finishDate = (userDto.getFinishDate() == null) ? "" : cellDateFormat.format(userDto.getFinishDate()); + + ExcelCell[] activityDataRow = new ExcelCell[5]; activityDataRow[0] = new ExcelCell(activityRowName, false); - activityDataRow[1] = new ExcelCell(userDto.getTimeTakenSeconds(), false); - activityDataRow[2] = new ExcelCell(userDto.getMark(), false); + activityDataRow[1] = new ExcelCell(startDate, false); + activityDataRow[2] = new ExcelCell(finishDate, false); + activityDataRow[3] = new ExcelCell(userDto.getTimeTakenSeconds(), false); + activityDataRow[4] = new ExcelCell(userDto.getMark(), false); rowList.add(activityDataRow); } @@ -867,10 +882,6 @@ ExcelCell[][] userData = rowList.toArray(new ExcelCell[][] {}); dataToExport.put(getMessage("gradebook.export.learner.view"), userData); - - Date date2 = new Date(); - - System.out.println("AAA" + (date2.getTime() - date1.getTime())/1000); return dataToExport; } @@ -888,13 +899,14 @@ if ((lessons != null) && (lessons.size() > 0)) { - int numberOfCellsInARow = 2 + (lessons.size() * 4); + int numberOfCellsInARow = 3 + (lessons.size() * 4); // Adding the user lesson marks to the summary---------------------- ExcelCell[] lessonsNames = new ExcelCell[numberOfCellsInARow]; int i = 0; lessonsNames[i++] = new ExcelCell("", false); lessonsNames[i++] = new ExcelCell("", false); + lessonsNames[i++] = new ExcelCell("", false); for (Lesson lesson : lessons) { lessonsNames[i++] = new ExcelCell(messageService.getMessage("gradebook.exportcourse.lesson", new Object[] { lesson.getLessonName() }), true); @@ -909,6 +921,7 @@ i = 0; headerRow[i++] = new ExcelCell(getMessage("gradebook.export.last.name"), true); headerRow[i++] = new ExcelCell(getMessage("gradebook.export.first.name"), true); + headerRow[i++] = new ExcelCell(getMessage("gradebook.export.login"), true); for (Lesson lesson : lessons) { headerRow[i++] = new ExcelCell(getMessage("gradebook.exportcourse.progress"), true); headerRow[i++] = new ExcelCell(getMessage("gradebook.export.time.taken.seconds"), true); @@ -947,6 +960,7 @@ ExcelCell[] userDataRow = new ExcelCell[numberOfCellsInARow]; userDataRow[i++] = new ExcelCell(learner.getLastName(), false); userDataRow[i++] = new ExcelCell(learner.getFirstName(), false); + userDataRow[i++] = new ExcelCell(learner.getLogin(), false); for (Lesson lesson : lessons) { GBUserGridRowDTO userDto = new GBUserGridRowDTO(learner); @@ -1063,7 +1077,7 @@ activityTouserToGradebookUserActivityMap.put(activity.getActivityId(), userToGradebookUserActivityMap); } - int numberCellsPerRow = (selectedLessons.size() * 6) + (allActivities.size() * 2) + 5; + int numberCellsPerRow = (selectedLessons.size() * 7) + (allActivities.size() * 2) + 5; // Lesson names row---------------------- ExcelCell[] lessonsNames = new ExcelCell[numberCellsPerRow]; @@ -1088,6 +1102,7 @@ for (Lesson lesson : selectedLessons) { headerRow[i++] = new ExcelCell(getMessage("gradebook.export.last.name"), false); headerRow[i++] = new ExcelCell(getMessage("gradebook.export.first.name"), false); + headerRow[i++] = new ExcelCell(getMessage("gradebook.export.login"), false); headerRow[i++] = new ExcelCell(getMessage("label.group"), false); Set activities = lessonActivitiesMap.get(lesson.getLessonId()); @@ -1121,11 +1136,11 @@ Double lessonMaxMark = 0d; Set activities = lessonActivitiesMap.get(lesson.getLessonId()); - String lastName = (learner.getLastName() == null) ? learner.getLogin().toUpperCase() : learner - .getLastName().toUpperCase(); + String lastName = (learner.getLastName() == null) ? "" : learner.getLastName().toUpperCase(); userRow[i++] = new ExcelCell(lastName, false); String firstName = (learner.getFirstName() == null) ? "" : learner.getFirstName().toUpperCase(); userRow[i++] = new ExcelCell(firstName, false); + userRow[i++] = new ExcelCell(learner.getLogin(), false); // check if learner is participating in this lesson if (!lesson.getAllLearners().contains(learner)) { @@ -1364,7 +1379,38 @@ } return startDate; } + + /** + * Gets completed activity finish time ajusted to monitor time zone. + * + * @param learnerProgress + * @param activity + * @param timeZone + * @return + */ + private Date getActivityFinishDate(LearnerProgress learnerProgress, Activity activity, String timeZone) { + Date finishDate = null; + if (learnerProgress != null) { + CompletedActivityProgress compProg = learnerProgress.getCompletedActivities().get(activity); + if (compProg != null) { + finishDate = compProg.getFinishDate(); + } + } + if (finishDate != null) { + if (StringUtils.isBlank(timeZone)) { + GradebookService.logger.warn("No user time zone provided, leaving server default"); + } else { + if (GradebookService.logger.isTraceEnabled()) { + GradebookService.logger.trace("Adjusting time according to zone \"" + timeZone + "\""); + } + TimeZone userTimeZone = TimeZone.getTimeZone(timeZone); + finishDate = DateUtil.convertToTimeZoneFromDefault(userTimeZone, finishDate); + } + } + return finishDate; + } + private Long getActivityDuration(LearnerProgress learnerProgress, Activity activity) { if (learnerProgress != null) { if (learnerProgress.getCompletedActivities().get(activity) != null) {