Index: lams_gradebook/src/java/org/lamsfoundation/lams/gradebook/web/action/GradebookAction.java =================================================================== diff -u -r59f1a5c76599f3ba7ba88462fff9d03a878d7c22 -r1987f0f443399796f1ab8800d2baed906258ee74 --- lams_gradebook/src/java/org/lamsfoundation/lams/gradebook/web/action/GradebookAction.java (.../GradebookAction.java) (revision 59f1a5c76599f3ba7ba88462fff9d03a878d7c22) +++ lams_gradebook/src/java/org/lamsfoundation/lams/gradebook/web/action/GradebookAction.java (.../GradebookAction.java) (revision 1987f0f443399796f1ab8800d2baed906258ee74) @@ -44,6 +44,8 @@ import org.lamsfoundation.lams.gradebook.util.GBGridView; import org.lamsfoundation.lams.gradebook.util.GradebookConstants; import org.lamsfoundation.lams.gradebook.util.GradebookUtil; +import org.lamsfoundation.lams.learning.service.ICoreLearnerService; +import org.lamsfoundation.lams.learning.web.bean.ActivityURL; import org.lamsfoundation.lams.learningdesign.Activity; import org.lamsfoundation.lams.learningdesign.Group; import org.lamsfoundation.lams.learningdesign.ToolActivity; @@ -55,6 +57,8 @@ import org.lamsfoundation.lams.usermanagement.User; import org.lamsfoundation.lams.usermanagement.dto.UserDTO; import org.lamsfoundation.lams.usermanagement.service.IUserManagementService; +import org.lamsfoundation.lams.util.Configuration; +import org.lamsfoundation.lams.util.ConfigurationKeys; import org.lamsfoundation.lams.util.WebUtil; import org.lamsfoundation.lams.web.action.LamsDispatchAction; import org.lamsfoundation.lams.web.session.SessionManager; @@ -75,6 +79,7 @@ private static IUserManagementService userService; private static ILessonService lessonService; private static ISecurityService securityService; + private static ICoreLearnerService learnerService; @Override public ActionForward unspecified(ActionMapping mapping, ActionForm form, HttpServletRequest request, @@ -153,6 +158,7 @@ return null; } + @SuppressWarnings("unchecked") public ActionForward getLessonCompleteGridData(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { // Getting the params passed in from the jqGrid @@ -187,6 +193,25 @@ } resultJSON.put(GradebookConstants.ELEMENT_ROWS, rowsJSON); + // make a mapping of activity ID -> URL, same as in progress bar + JSONObject activityURLJSON = new JSONObject(); + Object[] ret = getLearnerService().getStructuredActivityURLs(userId, lessonId); + for (ActivityURL activity : (List) ret[0]) { + String url = activity.getUrl(); + if (url != null) { + if (url.startsWith("learner.do")) { + url = "learning/" + url; + } + String serverUrl = Configuration.get(ConfigurationKeys.SERVER_URL); + if (!url.startsWith(serverUrl)) { + // monitor mode URLs should be prepended with server URL + url = serverUrl + url; + } + activityURLJSON.put(activity.getActivityId().toString(), activity.getUrl()); + } + } + resultJSON.put("urls", activityURLJSON); + boolean isWeighted = getGradebookService().isWeightedMarks(lessonId); GradebookUserLesson gradebookUserLesson = getGradebookService().getGradebookUserLesson(lessonId, userId); resultJSON.put("learnerLessonMark", @@ -622,4 +647,13 @@ return GradebookAction.securityService; } + + private ICoreLearnerService getLearnerService() { + if (GradebookAction.learnerService == null) { + WebApplicationContext ctx = WebApplicationContextUtils + .getRequiredWebApplicationContext(getServlet().getServletContext()); + GradebookAction.learnerService = (ICoreLearnerService) ctx.getBean("learnerService"); + } + return GradebookAction.learnerService; + } } \ No newline at end of file Index: lams_learning/web/lessonComplete.jsp =================================================================== diff -u -rf5c030a4d14cabcb06aa62390e7389f33d4678b1 -r1987f0f443399796f1ab8800d2baed906258ee74 --- lams_learning/web/lessonComplete.jsp (.../lessonComplete.jsp) (revision f5c030a4d14cabcb06aa62390e7389f33d4678b1) +++ lams_learning/web/lessonComplete.jsp (.../lessonComplete.jsp) (revision 1987f0f443399796f1ab8800d2baed906258ee74) @@ -121,7 +121,17 @@ 'title' : false } ], + beforeProcessing : function(data) { + // Wrap each activity name in a link to show same pop up + // as if the user clicked the activity in progress bar. + // The code depends on progressBar.js import in Page.tag + $.each(data.rows, function() { + this.cell[0] = '' + this.cell[0] + ''; + }); + }, loadComplete : function(data) { + // display non-grid data $('#learnerLessonMark').text(data.learnerLessonMark); $('#averageLessonMark').text(data.averageLessonMark); },