Index: lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/monitoringApplicationContext.xml
===================================================================
diff -u -r7697bd6b1da52d525246c6b28a2508d167b32a47 -rcc025cd2b501eb8acd8f17b3246660f8f53d493a
--- lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/monitoringApplicationContext.xml (.../monitoringApplicationContext.xml) (revision 7697bd6b1da52d525246c6b28a2508d167b32a47)
+++ lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/monitoringApplicationContext.xml (.../monitoringApplicationContext.xml) (revision cc025cd2b501eb8acd8f17b3246660f8f53d493a)
@@ -41,7 +41,7 @@
-
+
@@ -68,6 +68,7 @@
PROPAGATION_REQUIRED
PROPAGATION_REQUIRES_NEW
PROPAGATION_REQUIRED
+ PROPAGATION_REQUIRED
Index: lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/service/IMonitoringService.java
===================================================================
diff -u -rf43da266c31a898f0fddc628bdeab7ebbdbef2dd -rcc025cd2b501eb8acd8f17b3246660f8f53d493a
--- lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/service/IMonitoringService.java (.../IMonitoringService.java) (revision f43da266c31a898f0fddc628bdeab7ebbdbef2dd)
+++ lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/service/IMonitoringService.java (.../IMonitoringService.java) (revision cc025cd2b501eb8acd8f17b3246660f8f53d493a)
@@ -30,7 +30,6 @@
import java.util.SortedSet;
import org.lamsfoundation.lams.learningdesign.Activity;
-import org.lamsfoundation.lams.learningdesign.ChosenGrouping;
import org.lamsfoundation.lams.learningdesign.GateActivity;
import org.lamsfoundation.lams.learningdesign.GroupingActivity;
import org.lamsfoundation.lams.learningdesign.exception.LearningDesignProcessorException;
@@ -61,12 +60,13 @@
*
* @param lessonName the name of the lesson
* @param lessonDescription the description of the lesson.
+ * @param learnerExportAvailable should the export portfolio option be made available to the learner?
* @param learningDesignId the selected learning design
* @param organisationId the copied sequence will be put in the default runtime sequence folder for this org, if such a folder exists.
* @param userId the user who want to create this lesson.
* @return the lesson initialized.
*/
- public Lesson initializeLesson(String lessonName, String lessonDescription,long learningDesignId,Integer organisationId,Integer userID);
+ public Lesson initializeLesson(String lessonName, String lessonDescription,Boolean learnerExportAvailable,long learningDesignId,Integer organisationId,Integer userID);
/**
* Create new lesson according to the learning design specified by the
* user, but for a preview session rather than a normal learning session.
@@ -146,6 +146,19 @@
*/
public void finishLesson(long lessonId, Integer userId) throws UserAccessDeniedException;
+ /**
+ * Set whether or not the export portfolio button is available in learner. Sets it to FALSE if
+ * learnerExportAvailable is null. Checks that the user is a staff member of this lesson before
+ * updating.
+ *
+ * @param lessonId
+ * @param userId
+ * @param learnerExportAvailable
+ * @return new value for learnerExportAvailable. Normally will be same as input parameter, will only
+ * be different if the value cannot be updated for some reason.
+ */
+ public Boolean setLearnerPortfolioAvailable(long lessonId, Integer userId, Boolean learnerExportAvailable);
+
/**
* Force Complete works on an individual user. The teacher may complete it up to a particular activity,
* or till the end of the sequence which activity id is null indicating complete to end. Note, the give
Index: lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/service/MonitoringService.java
===================================================================
diff -u -re0385d4c168977f3bbc8065abd1e7775eed9666a -rcc025cd2b501eb8acd8f17b3246660f8f53d493a
--- lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/service/MonitoringService.java (.../MonitoringService.java) (revision e0385d4c168977f3bbc8065abd1e7775eed9666a)
+++ lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/service/MonitoringService.java (.../MonitoringService.java) (revision cc025cd2b501eb8acd8f17b3246660f8f53d493a)
@@ -25,46 +25,43 @@
package org.lamsfoundation.lams.monitoring.service;
import java.io.IOException;
+import java.text.DateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Comparator;
import java.util.Date;
-import java.text.DateFormat;
import java.util.HashSet;
import java.util.Hashtable;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
+import java.util.Locale;
import java.util.Map;
import java.util.Set;
import java.util.SortedSet;
import java.util.TreeMap;
import java.util.TreeSet;
import java.util.Vector;
-import java.util.Locale;
import org.apache.commons.lang.StringUtils;
import org.apache.log4j.Logger;
import org.lamsfoundation.lams.authoring.service.IAuthoringService;
+import org.lamsfoundation.lams.dao.IBaseDAO;
import org.lamsfoundation.lams.learning.service.ICoreLearnerService;
import org.lamsfoundation.lams.learningdesign.Activity;
-import org.lamsfoundation.lams.learningdesign.ChosenGrouping;
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.LearningDesign;
-import org.lamsfoundation.lams.learningdesign.NullGroup;
import org.lamsfoundation.lams.learningdesign.ScheduleGateActivity;
import org.lamsfoundation.lams.learningdesign.ToolActivity;
import org.lamsfoundation.lams.learningdesign.dao.IActivityDAO;
import org.lamsfoundation.lams.learningdesign.dao.IGroupingDAO;
import org.lamsfoundation.lams.learningdesign.dao.ILearningDesignDAO;
import org.lamsfoundation.lams.learningdesign.dao.ITransitionDAO;
-import org.lamsfoundation.lams.learningdesign.dto.ProgressActivityDTO;
import org.lamsfoundation.lams.learningdesign.exception.LearningDesignProcessorException;
-import org.lamsfoundation.lams.learningdesign.service.ILearningDesignService;
import org.lamsfoundation.lams.lesson.LearnerProgress;
import org.lamsfoundation.lams.lesson.Lesson;
import org.lamsfoundation.lams.lesson.LessonClass;
@@ -75,21 +72,20 @@
import org.lamsfoundation.lams.lesson.service.LessonServiceException;
import org.lamsfoundation.lams.monitoring.MonitoringConstants;
import org.lamsfoundation.lams.tool.ToolSession;
-import org.lamsfoundation.lams.tool.exception.DataMissingException;
import org.lamsfoundation.lams.tool.exception.LamsToolServiceException;
import org.lamsfoundation.lams.tool.exception.ToolException;
import org.lamsfoundation.lams.tool.service.ILamsCoreToolService;
import org.lamsfoundation.lams.usermanagement.Organisation;
import org.lamsfoundation.lams.usermanagement.User;
import org.lamsfoundation.lams.usermanagement.Workspace;
import org.lamsfoundation.lams.usermanagement.WorkspaceFolder;
-import org.lamsfoundation.lams.dao.IBaseDAO;
import org.lamsfoundation.lams.usermanagement.exception.UserAccessDeniedException;
import org.lamsfoundation.lams.usermanagement.service.IUserManagementService;
import org.lamsfoundation.lams.usermanagement.util.LastNameAlphabeticComparator;
import org.lamsfoundation.lams.util.Configuration;
import org.lamsfoundation.lams.util.ConfigurationKeys;
import org.lamsfoundation.lams.util.MessageService;
+import org.lamsfoundation.lams.util.audit.AuditService;
import org.lamsfoundation.lams.util.wddx.FlashMessage;
import org.lamsfoundation.lams.util.wddx.WDDXProcessor;
import org.lamsfoundation.lams.util.wddx.WDDXProcessorConversionException;
@@ -126,6 +122,8 @@
//---------------------------------------------------------------------
private static Logger log = Logger.getLogger(MonitoringService.class);
private static final long numMilliSecondsInADay = 24 * 60 * 60 * 1000;
+ private static final String AUDIT_LEARNER_PORTFOLIO_SET = "audit.learner.portfolio.set";
+ private static final String AUDIT_LESSON_CREATED_KEY = "audit.lesson.created";
private ILessonDAO lessonDAO;
private ILessonClassDAO lessonClassDAO;
@@ -142,7 +140,7 @@
private Scheduler scheduler;
private ApplicationContext applicationContext;
private MessageService messageService;
- private ILearningDesignService learningDesignService;
+ private AuditService auditService;
/** Message keys */
@@ -268,14 +266,19 @@
this.scheduler = scheduler;
}
- public void setLearningDesignService(ILearningDesignService learningDesignService) {
- this.learningDesignService = learningDesignService;
+ public void setAuditService(AuditService auditService) {
+ this.auditService = auditService;
}
//---------------------------------------------------------------------
// Service Methods
//---------------------------------------------------------------------
+ private void auditAction(String messageKey, Object[] args) {
+ String message = messageService.getMessage(messageKey, args);
+ auditService.log("Monitoring", message);
+ }
+
/** Checks whether the user is a staff member for the lesson or the creator of the lesson.
* If not, throws a UserAccessDeniedException exception */
private void checkOwnerOrStaffMember(Integer userId, Lesson lesson, String actionDescription) {
@@ -303,6 +306,7 @@
*/
public Lesson initializeLesson(String lessonName,
String lessonDescription,
+ Boolean learnerExportAvailable,
long learningDesignId,
Integer organisationId,
Integer userID)
@@ -335,7 +339,8 @@
}
User user = (userID != null ? (User)baseDAO.find(User.class,userID) : null);
- return initializeLesson(lessonName, lessonDescription, originalLearningDesign, user, runSeqFolder, LearningDesign.COPY_TYPE_LESSON);
+ return initializeLesson(lessonName, lessonDescription, learnerExportAvailable,
+ originalLearningDesign, user, runSeqFolder, LearningDesign.COPY_TYPE_LESSON);
}
@@ -355,11 +360,12 @@
}
User user = (userID != null ? (User)baseDAO.find(User.class,userID) : null);
- return initializeLesson(lessonName, lessonDescription, originalLearningDesign, user, null, LearningDesign.COPY_TYPE_PREVIEW);
+ return initializeLesson(lessonName, lessonDescription, Boolean.TRUE, originalLearningDesign, user, null, LearningDesign.COPY_TYPE_PREVIEW);
}
public Lesson initializeLesson(String lessonName,
String lessonDescription,
+ Boolean learnerExportAvailable,
LearningDesign originalLearningDesign,
User user,
WorkspaceFolder workspaceFolder,
@@ -410,8 +416,9 @@
authoringService.saveLearningDesign(copiedLearningDesign);
- return createNewLesson(lessonName,lessonDescription,user,copiedLearningDesign);
-
+ Lesson lesson = createNewLesson(lessonName,lessonDescription,user,learnerExportAvailable,copiedLearningDesign);
+ auditAction(AUDIT_LESSON_CREATED_KEY, new Object[] {lessonName, copiedLearningDesign.getTitle(), learnerExportAvailable});
+ return lesson;
}
/**
@@ -826,8 +833,21 @@
checkOwnerOrStaffMember(userId, requestedLesson, "remove lesson");
setLessonState(requestedLesson,Lesson.REMOVED_STATE);
}
-
/**
+ * @see org.lamsfoundation.lams.monitoring.service.IMonitoringService#setLearnerPortfolioAvailable(long, java.lang.Integer, boolean)
+ */
+ public Boolean setLearnerPortfolioAvailable(long lessonId, Integer userId, Boolean learnerExportAvailable) {
+ Lesson requestedLesson = lessonDAO.getLesson(new Long(lessonId));
+ if ( requestedLesson == null ) {
+ throw new MonitoringServiceException("Lesson for id="+lessonId+" is missing. Unable to set learner portfolio available to "+learnerExportAvailable);
+ }
+ checkOwnerOrStaffMember(userId, requestedLesson, "set learner portfolio available");
+ requestedLesson.setLearnerExportAvailable(learnerExportAvailable != null ? learnerExportAvailable : Boolean.FALSE);
+ auditAction(AUDIT_LEARNER_PORTFOLIO_SET, new Object[]{requestedLesson.getLessonName(), requestedLesson.getLearnerExportAvailable()});
+ lessonDAO.updateLesson(requestedLesson);
+ return requestedLesson.getLearnerExportAvailable();
+ }
+ /**
* @see org.lamsfoundation.lams.monitoring.service.IMonitoringService#openGate(org.lamsfoundation.lams.learningdesign.GateActivity)
*/
public GateActivity openGate(Long gateId)
@@ -1409,15 +1429,19 @@
* @param lessonName the name of the lesson
* @param lessonDescription the description of the lesson.
* @param user user the user who want to create this lesson.
+ * @param learnerExportAvailable should the export portfolio option be made available to the learner?
* @param copiedLearningDesign the copied learning design
* @return the lesson object without class.
*
*/
- private Lesson createNewLesson(String lessonName, String lessonDescription, User user, LearningDesign copiedLearningDesign)
+ private Lesson createNewLesson(String lessonName, String lessonDescription, User user,
+ Boolean learnerExportAvailable,
+ LearningDesign copiedLearningDesign)
{
Lesson newLesson = Lesson.createNewLessonWithoutClass(lessonName,
lessonDescription,
user,
+ learnerExportAvailable,
copiedLearningDesign);
lessonDAO.saveLesson(newLesson);
return newLesson;
Index: lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/web/MonitoringAction.java
===================================================================
diff -u -rc2d16fd7c49411c4c2c6da861cb880772eb45271 -rcc025cd2b501eb8acd8f17b3246660f8f53d493a
--- lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/web/MonitoringAction.java (.../MonitoringAction.java) (revision c2d16fd7c49411c4c2c6da861cb880772eb45271)
+++ lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/web/MonitoringAction.java (.../MonitoringAction.java) (revision cc025cd2b501eb8acd8f17b3246660f8f53d493a)
@@ -173,7 +173,8 @@
if ( desc == null ) desc = "description";
Integer organisationId = WebUtil.readIntParam(request,"organisationID",true);
long ldId = WebUtil.readLongParam(request, AttributeNames.PARAM_LEARNINGDESIGN_ID);
- Lesson newLesson = monitoringService.initializeLesson(title,desc,ldId,organisationId,getUserId());
+ Boolean learnerExportAvailable = WebUtil.readBooleanParam(request, "learnerExportPortfolio", false);
+ Lesson newLesson = monitoringService.initializeLesson(title,desc,learnerExportAvailable,ldId,organisationId,getUserId());
flashMessage = new FlashMessage("initializeLesson",newLesson.getLessonId());
} catch (Exception e) {
@@ -849,4 +850,32 @@
return auditService;
}
+ /**
+ * Set whether or not the export portfolio button is available in learner. Expects parameters lessonID
+ * and learnerExportPortfolio.
+ */
+ public ActionForward learnerExportPortfolioAvailable(ActionMapping mapping,
+ ActionForm form,
+ HttpServletRequest request,
+ HttpServletResponse response) throws IOException,
+ ServletException
+ {
+
+ IMonitoringService monitoringService = MonitoringServiceProxy.getMonitoringService(getServlet().getServletContext());
+ FlashMessage flashMessage = null;
+ try {
+ Long lessonID = new Long(WebUtil.readLongParam(request,"lessonID"));
+ Integer userID = getUserId();
+ Boolean learnerExportPortfolioAvailable = WebUtil.readBooleanParam(request,"learnerExportPortfolio",false);
+ monitoringService.setLearnerPortfolioAvailable(lessonID, userID, learnerExportPortfolioAvailable);
+
+ flashMessage = new FlashMessage("learnerExportPortfolioAvailable",Boolean.TRUE);
+ } catch (Exception e) {
+ flashMessage = handleException(e, "renameLesson", monitoringService);
+ }
+ String wddxPacket = flashMessage.serializeMessage();
+ PrintWriter writer = response.getWriter();
+ writer.println(wddxPacket);
+ return null;
+ }
}