Index: lams_learning/src/java/org/lamsfoundation/lams/learning/learningApplicationContext.xml =================================================================== diff -u -r959094c1e3f58345e88113046f165ff586fddcf7 -rf0bf73ab180670fb0051e6550d604e99ddab7520 --- lams_learning/src/java/org/lamsfoundation/lams/learning/learningApplicationContext.xml (.../learningApplicationContext.xml) (revision 959094c1e3f58345e88113046f165ff586fddcf7) +++ lams_learning/src/java/org/lamsfoundation/lams/learning/learningApplicationContext.xml (.../learningApplicationContext.xml) (revision f0bf73ab180670fb0051e6550d604e99ddab7520) @@ -44,6 +44,7 @@ PROPAGATION_REQUIRED PROPAGATION_REQUIRED PROPAGATION_REQUIRED + PROPAGATION_REQUIRED PROPAGATION_REQUIRED PROPAGATION_REQUIRED PROPAGATION_REQUIRED Index: lams_learning/src/java/org/lamsfoundation/lams/learning/service/ICoreLearnerService.java =================================================================== diff -u -r04802eaaf2249d4faf8784f702664d28f46fdebc -rf0bf73ab180670fb0051e6550d604e99ddab7520 --- lams_learning/src/java/org/lamsfoundation/lams/learning/service/ICoreLearnerService.java (.../ICoreLearnerService.java) (revision 04802eaaf2249d4faf8784f702664d28f46fdebc) +++ lams_learning/src/java/org/lamsfoundation/lams/learning/service/ICoreLearnerService.java (.../ICoreLearnerService.java) (revision f0bf73ab180670fb0051e6550d604e99ddab7520) @@ -242,4 +242,13 @@ */ public Lesson getLessonByActivity(Activity activity); + /** + * + * @param learnerId the learner who triggers the move + * @param lessonId lesson id + * @param fromActivity Activity moving from + * @param toActivity Activity moving to (being run) + * @return updated Learner Progress + */ + public LearnerProgress moveToActivity(Integer learnerId, Long lessonId, Activity fromActivity, Activity toActivity); } Index: lams_learning/src/java/org/lamsfoundation/lams/learning/service/LearnerService.java =================================================================== diff -u -r04802eaaf2249d4faf8784f702664d28f46fdebc -rf0bf73ab180670fb0051e6550d604e99ddab7520 --- lams_learning/src/java/org/lamsfoundation/lams/learning/service/LearnerService.java (.../LearnerService.java) (revision 04802eaaf2249d4faf8784f702664d28f46fdebc) +++ lams_learning/src/java/org/lamsfoundation/lams/learning/service/LearnerService.java (.../LearnerService.java) (revision f0bf73ab180670fb0051e6550d604e99ddab7520) @@ -30,13 +30,16 @@ import java.util.Date; import java.util.Iterator; import java.util.List; +import java.util.Set; import org.apache.log4j.Logger; import org.lamsfoundation.lams.learning.progress.ProgressEngine; import org.lamsfoundation.lams.learning.progress.ProgressException; import org.lamsfoundation.lams.learning.web.util.ActivityMapping; import org.lamsfoundation.lams.learningdesign.Activity; +import org.lamsfoundation.lams.learningdesign.ComplexActivity; import org.lamsfoundation.lams.learningdesign.GateActivity; +import org.lamsfoundation.lams.learningdesign.Group; import org.lamsfoundation.lams.learningdesign.Grouping; import org.lamsfoundation.lams.learningdesign.GroupingActivity; import org.lamsfoundation.lams.learningdesign.ToolActivity; @@ -50,6 +53,7 @@ import org.lamsfoundation.lams.lesson.dto.LessonDTO; import org.lamsfoundation.lams.lesson.service.ILessonService; import org.lamsfoundation.lams.lesson.service.LessonServiceException; +import org.lamsfoundation.lams.monitoring.service.MonitoringServiceException; import org.lamsfoundation.lams.tool.ToolSession; import org.lamsfoundation.lams.tool.dao.IToolSessionDAO; import org.lamsfoundation.lams.tool.exception.LamsToolServiceException; @@ -333,6 +337,24 @@ return progress; } + /** + * @see org.lamsfoundation.lams.learning.service.ICoreLearnerService#moveToActivity(java.lang.Integer, java.lang.Long, org.lamsfoundation.lams.learningdesign.Activity, org.lamsfoundation.lams.learningdesign.Activity) + */ + public LearnerProgress moveToActivity(Integer learnerId, Long lessonId, Activity fromActivity, Activity toActivity){ + LearnerProgress progress = learnerProgressDAO.getLearnerProgressByLearner(learnerId, lessonId); + + if(fromActivity != null) + progress.setProgressState(fromActivity, LearnerProgress.ACTIVITY_ATTEMPTED); + + if(toActivity != null) { + progress.setProgressState(toActivity, LearnerProgress.ACTIVITY_ATTEMPTED); + progress.setCurrentActivity(toActivity); + progress.setNextActivity(toActivity); + } + + learnerProgressDAO.updateLearnerProgress(progress); + return progress; + } /** * Calculates learner progress and returns the data required to be displayed @@ -556,6 +578,7 @@ } return lesson; } + //--------------------------------------------------------------------- // Helper Methods //--------------------------------------------------------------------- Index: lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/LearnerAction.java =================================================================== diff -u -rb883de594943eb26d71846e2259212980b524a32 -rf0bf73ab180670fb0051e6550d604e99ddab7520 --- lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/LearnerAction.java (.../LearnerAction.java) (revision b883de594943eb26d71846e2259212980b524a32) +++ lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/LearnerAction.java (.../LearnerAction.java) (revision f0bf73ab180670fb0051e6550d604e99ddab7520) @@ -25,6 +25,7 @@ package org.lamsfoundation.lams.learning.web.action; import java.io.IOException; +import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; @@ -44,6 +45,9 @@ import org.lamsfoundation.lams.lesson.Lesson; import org.lamsfoundation.lams.lesson.dto.LearnerProgressDTO; import org.lamsfoundation.lams.lesson.dto.LessonDTO; +import org.lamsfoundation.lams.monitoring.MonitoringConstants; +import org.lamsfoundation.lams.monitoring.service.IMonitoringService; +import org.lamsfoundation.lams.monitoring.service.MonitoringServiceProxy; import org.lamsfoundation.lams.usermanagement.User; import org.lamsfoundation.lams.util.WebUtil; import org.lamsfoundation.lams.util.audit.IAuditService; @@ -445,6 +449,85 @@ return redirectToURL(mapping, response, url); } + /** + * Forces a move to a destination Activity in the learning sequence. + * + * @param mapping An ActionMapping class that will be used by the Action class to tell + * the ActionServlet where to send the end-user. + * @param form The ActionForm class that will contain any data submitted + * by the end-user via a form. + * @param request A standard Servlet HttpServletRequest class. + * @param response A standard Servlet HttpServletResponse class. + * @return An ActionForward class that will be returned to the ActionServlet indicating where + * the user is to go next. + * @throws IOException + * @throws ServletException + */ + public ActionForward forceMove(ActionMapping mapping, + ActionForm form, + HttpServletRequest request, + HttpServletResponse response) throws IOException, + ServletException { + FlashMessage flashMessage = null; + + //initialize service object + ActivityMapping activityMapping = LearnerServiceProxy.getActivityMapping(this.getServlet().getServletContext()); + ICoreLearnerService learnerService = LearnerServiceProxy.getLearnerService(getServlet().getServletContext()); + + //getting requested object according to coming parameters + Integer learnerId = LearningWebUtil.getUserId(); + User learner = (User)LearnerServiceProxy.getUserManagementService(getServlet().getServletContext()).findById(User.class,learnerId); + + //get parameters + Long fromActivityId = null; + Long toActivityId = null; + + String fromActId = request.getParameter(AttributeNames.PARAM_CURRENT_ACTIVITY_ID); + String toActId = request.getParameter(AttributeNames.PARAM_DEST_ACTIVITY_ID); + if(fromActId != null) + try{ + fromActivityId = new Long(Long.parseLong(fromActId)); + }catch(Exception e){ + fromActivityId = null; + } + + if(toActId != null) + try{ + toActivityId = new Long(Long.parseLong(toActId)); + }catch(Exception e){ + toActivityId = null; + } + + //force complete + try { + long lessonId = WebUtil.readLongParam(request,AttributeNames.PARAM_LESSON_ID); + + Activity fromActivity = null; + Activity toActivity = null; + + if(fromActivityId != null) + fromActivity = learnerService.getActivity(fromActivityId); + + if(toActivityId != null) + toActivity = learnerService.getActivity(toActivityId); + + learnerService.moveToActivity(learnerId, new Long(lessonId), fromActivity, toActivity); + + if ( log.isDebugEnabled() ) { + log.debug("Force move for learner "+learnerId+" lesson "+lessonId+". "); + } + flashMessage = new FlashMessage("forceMove", mapping.findForward(DISPLAY_ACTIVITY).getPath()); + } catch (Exception e) { + flashMessage = handleException(e, "forceMove", learnerService); + } + String message = flashMessage.serializeMessage(); + + PrintWriter writer = response.getWriter(); + writer.println(message); + return null; + + } + /** * Get AuditService bean. * @return