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