Index: lams_build/lib/lams/lams.jar
===================================================================
diff -u -re10cc5cece2f9f7a5044b274914c0517a064699a -r73e57b8ca1a3ddd6cd15b00240d90b79c5de063a
Binary files differ
Index: lams_central/src/java/org/lamsfoundation/lams/authoring/authoringApplicationContext.xml
===================================================================
diff -u -ra949c337adc53b2df9207aa1de6e500281de7c20 -r73e57b8ca1a3ddd6cd15b00240d90b79c5de063a
--- lams_central/src/java/org/lamsfoundation/lams/authoring/authoringApplicationContext.xml (.../authoringApplicationContext.xml) (revision a949c337adc53b2df9207aa1de6e500281de7c20)
+++ lams_central/src/java/org/lamsfoundation/lams/authoring/authoringApplicationContext.xml (.../authoringApplicationContext.xml) (revision 73e57b8ca1a3ddd6cd15b00240d90b79c5de063a)
@@ -64,6 +64,7 @@
+
Index: lams_central/src/java/org/lamsfoundation/lams/authoring/service/AuthoringService.java
===================================================================
diff -u -r4b865d9e5cdcaa1a21b113764194305d9a7480dd -r73e57b8ca1a3ddd6cd15b00240d90b79c5de063a
--- lams_central/src/java/org/lamsfoundation/lams/authoring/service/AuthoringService.java (.../AuthoringService.java) (revision 4b865d9e5cdcaa1a21b113764194305d9a7480dd)
+++ lams_central/src/java/org/lamsfoundation/lams/authoring/service/AuthoringService.java (.../AuthoringService.java) (revision 73e57b8ca1a3ddd6cd15b00240d90b79c5de063a)
@@ -89,6 +89,7 @@
import org.lamsfoundation.lams.logevent.service.ILogEventService;
import org.lamsfoundation.lams.monitoring.service.IMonitoringService;
import org.lamsfoundation.lams.monitoring.service.MonitoringServiceException;
+import org.lamsfoundation.lams.outcome.service.IOutcomeService;
import org.lamsfoundation.lams.planner.dao.PedagogicalPlannerDAO;
import org.lamsfoundation.lams.tool.SystemTool;
import org.lamsfoundation.lams.tool.Tool;
@@ -167,6 +168,8 @@
protected IGradebookService gradebookService;
+ protected IOutcomeService outcomeService;
+
protected ToolContentIDGenerator contentIDGenerator;
/** The bean factory is used to create ObjectExtractor objects */
@@ -353,6 +356,10 @@
this.logEventService = logEventService;
}
+ public void setOutcomeService(IOutcomeService outcomeService) {
+ this.outcomeService = outcomeService;
+ }
+
/**
* @param contentIDGenerator
* The contentIDGenerator to set.
@@ -449,16 +456,17 @@
for (Lesson lesson : (Set) design.getLessons()) {
lesson.setLockedForEdit(true);
- if ( design.getEditOverrideUser() == null || design.getEditOverrideLock() == null || !design.getEditOverrideLock() ) {
+ if (design.getEditOverrideUser() == null || design.getEditOverrideLock() == null
+ || !design.getEditOverrideLock()) {
// create audit log entry only the first time - do not redo one if the monitor has restarted editing.
- String message = messageService.getMessage("audit.live.edit.start", new Object[] { design.getTitle(),
- design.getLearningDesignId(), lesson.getLessonId(), user.getLogin(), user.getUserId() });
- logEventService.logEvent(LogEvent.TYPE_LIVE_EDIT, user.getUserId(), null, lesson.getLessonId(), null,
- message);
+ String message = messageService.getMessage("audit.live.edit.start",
+ new Object[] { design.getTitle(), design.getLearningDesignId(), lesson.getLessonId(),
+ user.getLogin(), user.getUserId() });
+ logEventService.logEvent(LogEvent.TYPE_LIVE_EDIT, user.getUserId(), null, lesson.getLessonId(),
+ null, message);
}
}
-
// lock Learning Design
design.setEditOverrideLock(true);
design.setEditOverrideUser(user);
@@ -1004,11 +1012,11 @@
ToolActivity toolActivity = (ToolActivity) activity;
// copy the content
Long newContentId = lamsCoreToolService.notifyToolToCopyContent(toolActivity, customCSV);
+ outcomeService.copyOutcomeMappings(null, toolActivity.getToolContentId(), null, null, newContentId, null);
toolActivity.setToolContentId(newContentId);
// clear read only field
toolActivity.setReadOnly(false);
-
} catch (DataMissingException e) {
String error = "Unable to copy a design / initialise the lesson. Data is missing for activity "
+ activity.getActivityUIID() + " in learning design " + originalLearningDesignId
@@ -1598,7 +1606,9 @@
@Override
public Long copyToolContent(Long toolContentID, String customCSV) throws IOException {
- return lamsCoreToolService.notifyToolToCopyContent(toolContentID, customCSV);
+ Long newToolContentID = lamsCoreToolService.notifyToolToCopyContent(toolContentID, customCSV);
+ outcomeService.copyOutcomeMappings(null, toolContentID, null, null, newToolContentID, null);
+ return newToolContentID;
}
/**
Index: lams_central/src/java/org/lamsfoundation/lams/web/outcome/OutcomeAction.java
===================================================================
diff -u -ra1bfe9d7972867fa2a0bcacc2bf263a9e34c856b -r73e57b8ca1a3ddd6cd15b00240d90b79c5de063a
--- lams_central/src/java/org/lamsfoundation/lams/web/outcome/OutcomeAction.java (.../OutcomeAction.java) (revision a1bfe9d7972867fa2a0bcacc2bf263a9e34c856b)
+++ lams_central/src/java/org/lamsfoundation/lams/web/outcome/OutcomeAction.java (.../OutcomeAction.java) (revision 73e57b8ca1a3ddd6cd15b00240d90b79c5de063a)
@@ -43,8 +43,11 @@
import org.apache.struts.actions.DispatchAction;
import org.apache.tomcat.util.json.JSONArray;
import org.apache.tomcat.util.json.JSONObject;
+import org.lamsfoundation.lams.learningdesign.ToolActivity;
+import org.lamsfoundation.lams.lesson.Lesson;
import org.lamsfoundation.lams.outcome.Outcome;
import org.lamsfoundation.lams.outcome.OutcomeMapping;
+import org.lamsfoundation.lams.outcome.OutcomeResult;
import org.lamsfoundation.lams.outcome.OutcomeScale;
import org.lamsfoundation.lams.outcome.OutcomeScaleItem;
import org.lamsfoundation.lams.outcome.service.IOutcomeService;
@@ -190,6 +193,10 @@
outcome.setScale(scale);
}
getUserManagementService().save(outcome);
+
+ if (log.isDebugEnabled()) {
+ log.debug("Saved outcome " + outcome.getOutcomeId());
+ }
request.setAttribute("saved", true);
} catch (Exception e) {
log.error("Exception while saving an outcome", e);
@@ -227,6 +234,9 @@
}
}
getUserManagementService().delete(outcome);
+ if (log.isDebugEnabled()) {
+ log.debug("Deleted outcome " + outcomeId);
+ }
return outcomeManage(mapping, form, request, response);
}
@@ -310,6 +320,11 @@
outcomeMapping.setItemId(itemId);
getUserManagementService().save(outcomeMapping);
+ if (log.isDebugEnabled()) {
+ log.debug("Mapped outcome " + outcome.getOutcomeId() + " to lesson ID " + lessonId + " and tool content ID "
+ + toolContentId + " and item ID " + itemId);
+ }
+
response.setContentType("text/plain;charset=utf-8");
response.getWriter().print(outcomeMapping.getMappingId());
return null;
@@ -367,9 +382,75 @@
"remove outcome mapping", true);
}
getUserManagementService().delete(outcomeMapping);
+ if (log.isDebugEnabled()) {
+ log.debug("Deleted outcome mapping " + outcomeMapping);
+ }
return null;
}
+ @SuppressWarnings("unchecked")
+ public ActionForward outcomeSetResult(ActionMapping mapping, ActionForm form, HttpServletRequest request,
+ HttpServletResponse response) throws Exception {
+ Long mappingId = WebUtil.readLongParam(request, "pk");
+ Integer value = WebUtil.readIntParam(request, "value");
+ Integer targetUserId = WebUtil.readIntParam(request, "name");
+ OutcomeMapping outcomeMapping = (OutcomeMapping) getUserManagementService().findById(OutcomeMapping.class,
+ mappingId);
+ Long lessonId = outcomeMapping.getLessonId();
+ if (lessonId == null) {
+ ToolActivity toolActivity = ((List) getUserManagementService()
+ .findByProperty(ToolActivity.class, "toolContentId", outcomeMapping.getToolContentId())).get(0);
+ lessonId = ((Lesson) toolActivity.getLearningDesign().getLessons().iterator().next()).getLessonId();
+ }
+ Integer userId = getUserDTO().getUserID();
+ getSecurityService().isLessonMonitor(lessonId, userId, "set outcome result", true);
+
+ OutcomeResult result = getOutcomeService().getOutcomeResult(userId, mappingId);
+ if (result == null) {
+ // result does not exist; if value == -1, it means it is not meant to exist, otherwise create
+ if (value > -1) {
+ result = new OutcomeResult();
+ User user = (User) getUserManagementService().findById(User.class, userId);
+ result.setCreateBy(user);
+ result.setCreateDateTime(new Date());
+ result.setMapping(outcomeMapping);
+ User targetUser = (User) getUserManagementService().findById(User.class, targetUserId);
+ result.setUser(targetUser);
+ result.setValue(value);
+ getUserManagementService().save(result);
+ if (log.isDebugEnabled()) {
+ log.debug("Added outcome result " + result.getResultId());
+ }
+ }
+ // modify only if value is different
+ } else if (!result.getValue().equals(value)) {
+ // if value is -1, remove the result
+ if (value == -1) {
+ Long resultId = result.getResultId();
+ getUserManagementService().delete(result);
+ if (log.isDebugEnabled()) {
+ log.debug("Deleted outcome result " + resultId);
+ }
+ } else {
+ // update existing result
+ result.setValue(value);
+ User user = (User) getUserManagementService().findById(User.class, userId);
+ result.setCreateBy(user);
+ result.setCreateBy(user);
+ result.setValue(value);
+ getUserManagementService().save(result);
+ if (log.isDebugEnabled()) {
+ log.debug("Edited outcome result " + result.getResultId());
+ }
+ }
+ }
+
+ // if something else than OK is sent, x-editable will print ERROR!
+ response.setContentType("text/plain;charset=utf-8");
+ response.getWriter().print("OK");
+ return null;
+ }
+
public ActionForward scaleManage(ActionMapping mapping, ActionForm form, HttpServletRequest request,
HttpServletResponse response) throws Exception {
Integer userId = getUserDTO().getUserID();
@@ -419,6 +500,9 @@
}
}
getUserManagementService().delete(scale);
+ if (log.isDebugEnabled()) {
+ log.debug("Deleted outcome scale " + scaleId);
+ }
return scaleManage(mapping, form, request, response);
}
@@ -542,6 +626,10 @@
scale.getItems().addAll(newItems);
getUserManagementService().save(scale);
+ if (log.isDebugEnabled()) {
+ log.debug("Saved outcome scale " + scale.getScaleId());
+ }
+
request.setAttribute("saved", true);
}
} catch (Exception e) {
Index: lams_central/web/css/x-editable-lams.css
===================================================================
diff -u
--- lams_central/web/css/x-editable-lams.css (revision 0)
+++ lams_central/web/css/x-editable-lams.css (revision 73e57b8ca1a3ddd6cd15b00240d90b79c5de063a)
@@ -0,0 +1,19 @@
+/* Overwrite gliphicon class used by x-editable.js*/
+.glyphicon{
+ display: inline-block;
+ font: normal normal normal 14px/1 FontAwesome;
+ font-size: inherit;
+ text-rendering: auto;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+}
+.glyphicon-ok:before {
+ content: "\f00c";
+}
+.glyphicon-remove:before {
+ content: "\f00d";
+}
+/* Overwrite properties set in x-editable.css*/
+.editable-click, a.editable-click, a.editable-click:hover {
+ border-bottom: none;
+}
\ No newline at end of file
Index: lams_common/conf/hibernate/mappings/org/lamsfoundation/lams/outcome/OutcomeResult.hbm.xml
===================================================================
diff -u -ra1bfe9d7972867fa2a0bcacc2bf263a9e34c856b -r73e57b8ca1a3ddd6cd15b00240d90b79c5de063a
--- lams_common/conf/hibernate/mappings/org/lamsfoundation/lams/outcome/OutcomeResult.hbm.xml (.../OutcomeResult.hbm.xml) (revision a1bfe9d7972867fa2a0bcacc2bf263a9e34c856b)
+++ lams_common/conf/hibernate/mappings/org/lamsfoundation/lams/outcome/OutcomeResult.hbm.xml (.../OutcomeResult.hbm.xml) (revision 73e57b8ca1a3ddd6cd15b00240d90b79c5de063a)
@@ -21,7 +21,7 @@
-
+
getScalesSortedByName(Integer organisationId);
List getAuthorOrganisations(Integer userId);
+
+ List getOutcomeResults(Integer userId, Long lessonId, Long toolContentId, Long itemId);
+
+ OutcomeResult getOutcomeResult(Integer userId, Long mappingId);
}
\ No newline at end of file
Index: lams_common/src/java/org/lamsfoundation/lams/outcome/dao/hibernate/OutcomeDAO.java
===================================================================
diff -u -ra1bfe9d7972867fa2a0bcacc2bf263a9e34c856b -r73e57b8ca1a3ddd6cd15b00240d90b79c5de063a
--- lams_common/src/java/org/lamsfoundation/lams/outcome/dao/hibernate/OutcomeDAO.java (.../OutcomeDAO.java) (revision a1bfe9d7972867fa2a0bcacc2bf263a9e34c856b)
+++ lams_common/src/java/org/lamsfoundation/lams/outcome/dao/hibernate/OutcomeDAO.java (.../OutcomeDAO.java) (revision 73e57b8ca1a3ddd6cd15b00240d90b79c5de063a)
@@ -32,6 +32,7 @@
import org.lamsfoundation.lams.dao.hibernate.LAMSBaseDAO;
import org.lamsfoundation.lams.outcome.Outcome;
import org.lamsfoundation.lams.outcome.OutcomeMapping;
+import org.lamsfoundation.lams.outcome.OutcomeResult;
import org.lamsfoundation.lams.outcome.OutcomeScale;
import org.lamsfoundation.lams.outcome.dao.IOutcomeDAO;
import org.lamsfoundation.lams.usermanagement.Role;
@@ -121,4 +122,31 @@
public List getAuthorOrganisations(Integer userId) {
return find(FIND_AUTHOR_ORGANISATIONS, new Object[] { userId });
}
+
+ @SuppressWarnings("unchecked")
+ public List getOutcomeResults(Integer userId, Long lessonId, Long toolContentId, Long itemId) {
+ Map properties = new HashMap();
+ if (lessonId != null) {
+ properties.put("mapping.outcome.lessonId", lessonId);
+ }
+ if (toolContentId != null) {
+ properties.put("mapping.outcome.toolContentId", toolContentId);
+ }
+ if (itemId != null) {
+ properties.put("mapping.outcome.itemId", itemId);
+ }
+ if (userId != null) {
+ properties.put("user.userId", userId);
+ }
+ return findByProperties(OutcomeResult.class, properties);
+ }
+
+ @SuppressWarnings("unchecked")
+ public OutcomeResult getOutcomeResult(Integer userId, Long mappingId) {
+ Map properties = new HashMap();
+ properties.put("user.userId", userId);
+ properties.put("mapping.mappingId", mappingId);
+ List result = findByProperties(OutcomeResult.class, properties);
+ return result.isEmpty() ? null : result.get(0);
+ }
}
Index: lams_common/src/java/org/lamsfoundation/lams/outcome/service/IOutcomeService.java
===================================================================
diff -u -ra1bfe9d7972867fa2a0bcacc2bf263a9e34c856b -r73e57b8ca1a3ddd6cd15b00240d90b79c5de063a
--- lams_common/src/java/org/lamsfoundation/lams/outcome/service/IOutcomeService.java (.../IOutcomeService.java) (revision a1bfe9d7972867fa2a0bcacc2bf263a9e34c856b)
+++ lams_common/src/java/org/lamsfoundation/lams/outcome/service/IOutcomeService.java (.../IOutcomeService.java) (revision 73e57b8ca1a3ddd6cd15b00240d90b79c5de063a)
@@ -5,6 +5,7 @@
import org.lamsfoundation.lams.outcome.Outcome;
import org.lamsfoundation.lams.outcome.OutcomeMapping;
+import org.lamsfoundation.lams.outcome.OutcomeResult;
import org.lamsfoundation.lams.outcome.OutcomeScale;
public interface IOutcomeService {
@@ -17,4 +18,11 @@
List getOutcomeMappings(Long lessonId, Long toolContentId, Long itemId);
List getScales(Integer organisationId);
+
+ List getOutcomeResults(Integer userId, Long lessonId, Long toolContentId, Long itemId);
+
+ OutcomeResult getOutcomeResult(Integer userId, Long mappingId);
+
+ void copyOutcomeMappings(Long sourceLessonId, Long sourceToolContentId, Long sourceItemId, Long targetLessonId,
+ Long targetToolContentId, Long targetItemId);
}
Index: lams_common/src/java/org/lamsfoundation/lams/outcome/service/OutcomeService.java
===================================================================
diff -u -ra1bfe9d7972867fa2a0bcacc2bf263a9e34c856b -r73e57b8ca1a3ddd6cd15b00240d90b79c5de063a
--- lams_common/src/java/org/lamsfoundation/lams/outcome/service/OutcomeService.java (.../OutcomeService.java) (revision a1bfe9d7972867fa2a0bcacc2bf263a9e34c856b)
+++ lams_common/src/java/org/lamsfoundation/lams/outcome/service/OutcomeService.java (.../OutcomeService.java) (revision 73e57b8ca1a3ddd6cd15b00240d90b79c5de063a)
@@ -8,6 +8,7 @@
import org.lamsfoundation.lams.outcome.Outcome;
import org.lamsfoundation.lams.outcome.OutcomeMapping;
+import org.lamsfoundation.lams.outcome.OutcomeResult;
import org.lamsfoundation.lams.outcome.OutcomeScale;
import org.lamsfoundation.lams.outcome.dao.IOutcomeDAO;
import org.lamsfoundation.lams.usermanagement.dto.UserDTO;
@@ -43,6 +44,27 @@
return outcomeDAO.getOutcomeMappings(lessonId, toolContentId, itemId);
}
+ public List getOutcomeResults(Integer userId, Long lessonId, Long toolContentId, Long itemId) {
+ return outcomeDAO.getOutcomeResults(userId, lessonId, toolContentId, itemId);
+ }
+
+ public OutcomeResult getOutcomeResult(Integer userId, Long mappingId) {
+ return outcomeDAO.getOutcomeResult(userId, mappingId);
+ }
+
+ public void copyOutcomeMappings(Long sourceLessonId, Long sourceToolContentId, Long sourceItemId,
+ Long targetLessonId, Long targetToolContentId, Long targetItemId) {
+ List sourceMappings = getOutcomeMappings(sourceLessonId, sourceToolContentId, sourceItemId);
+ for (OutcomeMapping sourceMapping : sourceMappings) {
+ OutcomeMapping targetMapping = new OutcomeMapping();
+ targetMapping.setOutcome(sourceMapping.getOutcome());
+ targetMapping.setLessonId(targetLessonId);
+ targetMapping.setToolContentId(targetToolContentId);
+ targetMapping.setItemId(targetItemId);
+ outcomeDAO.insert(targetMapping);
+ }
+ }
+
public void setOutcomeDAO(IOutcomeDAO outcomeDAO) {
this.outcomeDAO = outcomeDAO;
}
Index: lams_gradebook/conf/language/lams/ApplicationResources.properties
===================================================================
diff -u -rb67bc25f161fa3bf350e4c89696c24620674c8ef -r73e57b8ca1a3ddd6cd15b00240d90b79c5de063a
--- lams_gradebook/conf/language/lams/ApplicationResources.properties (.../ApplicationResources.properties) (revision b67bc25f161fa3bf350e4c89696c24620674c8ef)
+++ lams_gradebook/conf/language/lams/ApplicationResources.properties (.../ApplicationResources.properties) (revision 73e57b8ca1a3ddd6cd15b00240d90b79c5de063a)
@@ -38,6 +38,7 @@
gradebook.columntitle.attempt =Attempt #
gradebook.columntitle.restart =Restart date
gradebook.columntitle.lesson.mark =Lesson mark
+gradebook.columntitle.outcome =Learning outcomes
gradebook.function.window.showColumns =Show/Hide columns
gradebook.function.error.enterNumber =Please enter a number value
gradebook.function.search.title =Search grid
@@ -125,4 +126,6 @@
outcome.authoring.input =Search and select by outcome name or code
outcome.authoring.existing =Added outcomes
outcome.authoring.existing.none =none
+outcome.result.not.set =not set
+outcome.result.error =Error!
#======= End labels: Exported 112 labels for en AU =====
Index: lams_gradebook/src/java/org/lamsfoundation/lams/gradebook/dto/GBActivityGridRowDTO.java
===================================================================
diff -u -r352e16d0ad309caa12c5422fddebfc221c83714b -r73e57b8ca1a3ddd6cd15b00240d90b79c5de063a
--- lams_gradebook/src/java/org/lamsfoundation/lams/gradebook/dto/GBActivityGridRowDTO.java (.../GBActivityGridRowDTO.java) (revision 352e16d0ad309caa12c5422fddebfc221c83714b)
+++ lams_gradebook/src/java/org/lamsfoundation/lams/gradebook/dto/GBActivityGridRowDTO.java (.../GBActivityGridRowDTO.java) (revision 73e57b8ca1a3ddd6cd15b00240d90b79c5de063a)
@@ -20,7 +20,6 @@
* ****************************************************************
*/
-
package org.lamsfoundation.lams.gradebook.dto;
import java.util.ArrayList;
@@ -56,57 +55,58 @@
this.groupId = groupId;
}
- /** The Spring htmlEscape method escapes Greek letters (https://jira.spring.io/browse/SPR-9293)
- * so when the escaping is done for the Excel Exports, any Greek activity names are escaped.
+ /**
+ * The Spring htmlEscape method escapes Greek letters (https://jira.spring.io/browse/SPR-9293)
+ * so when the escaping is done for the Excel Exports, any Greek activity names are escaped.
* So we default to escaping (works fine sent to the browser) and then we have XSS protection for the
* web pages. But do not escape when it will be saved in an Excel file. This issue will be resolved
* when we upgrade Spring to v4.1.2 and then we can go back to one single creator method.
*/
- public GBActivityGridRowDTO(Activity activity, String groupName, Long groupId) {
+ public GBActivityGridRowDTO(Activity activity, String groupName, Long groupId) {
this(activity, groupName, groupId, true);
}
- public GBActivityGridRowDTO(Activity activity, String groupName, Long groupId, boolean escapeTitles) {
-
+ public GBActivityGridRowDTO(Activity activity, String groupName, Long groupId, boolean escapeTitles) {
+
if (groupName != null && groupId != null) {
// Need to make the id unique, so appending the group id for this row
this.id = activity.getActivityId().toString() + "_" + groupId.toString();
this.groupId = groupId;
// If grouped acitivty, append group name
- if ( escapeTitles ) {
+ if (escapeTitles) {
this.rowName = HtmlUtils.htmlEscape(activity.getTitle()) + " (" + groupName + ")";
} else {
- this.rowName = activity.getTitle() + " (" + groupName + ")";
+ this.rowName = activity.getTitle() + " (" + groupName + ")";
}
} else {
this.id = activity.getActivityId().toString();
- if ( escapeTitles ) {
+ if (escapeTitles) {
this.rowName = HtmlUtils.htmlEscape(activity.getTitle());
} else {
this.rowName = activity.getTitle();
}
}
String competenceMappingsStr = "";
- if ( activity.isToolActivity() ) {
+ if (activity.isToolActivity()) {
ToolActivity toolActivity = (ToolActivity) activity;
- //Constructs the competences for this activity.
- Set competenceMappings = toolActivity.getCompetenceMappings();
-
- if (competenceMappings != null) {
- for (CompetenceMapping mapping : competenceMappings) {
- competenceMappingsStr += mapping.getCompetence().getTitle() + ", ";
- }
-
- // trim the last comma off
- if (competenceMappingsStr.length() > 0) {
- competenceMappingsStr = competenceMappingsStr.substring(0, competenceMappingsStr.lastIndexOf(","));
- }
- }
-
- }
+ //Constructs the competences for this activity.
+ Set competenceMappings = toolActivity.getCompetenceMappings();
+
+ if (competenceMappings != null) {
+ for (CompetenceMapping mapping : competenceMappings) {
+ competenceMappingsStr += mapping.getCompetence().getTitle() + ", ";
+ }
+
+ // trim the last comma off
+ if (competenceMappingsStr.length() > 0) {
+ competenceMappingsStr = competenceMappingsStr.substring(0, competenceMappingsStr.lastIndexOf(","));
+ }
+ }
+
+ }
this.competences = competenceMappingsStr;
}
@@ -131,6 +131,7 @@
ret.add(finishDate != null ? convertDateToString(finishDate, null) : CELL_EMPTY);
ret.add(feedback);
ret.add(mark != null ? GradebookUtil.niceFormatting(mark) : CELL_EMPTY);
+ ret.add(outcomes != null ? outcomes : CELL_EMPTY);
} else if (view == GBGridView.MON_ACTIVITY) {
Index: lams_gradebook/src/java/org/lamsfoundation/lams/gradebook/dto/GradebookGridRowDTO.java
===================================================================
diff -u -r87806866f673458de317c4d1c6656b3bf5a81039 -r73e57b8ca1a3ddd6cd15b00240d90b79c5de063a
--- lams_gradebook/src/java/org/lamsfoundation/lams/gradebook/dto/GradebookGridRowDTO.java (.../GradebookGridRowDTO.java) (revision 87806866f673458de317c4d1c6656b3bf5a81039)
+++ lams_gradebook/src/java/org/lamsfoundation/lams/gradebook/dto/GradebookGridRowDTO.java (.../GradebookGridRowDTO.java) (revision 73e57b8ca1a3ddd6cd15b00240d90b79c5de063a)
@@ -55,10 +55,10 @@
// Another unit of time that represents average time taken for a corresponding task
protected Long medianTimeTaken;
-
+
// Another unit of time that represents minimum time taken for a corresponding task
protected Long minTimeTaken;
-
+
// Another unit of time that represents maximum time taken for a corresponding task
protected Long maxTimeTaken;
@@ -74,6 +74,8 @@
protected String status;
protected String feedback;
+ protected String outcomes;
+
protected boolean displayMarkAsPercent = false;
/**
@@ -189,12 +191,11 @@
public void setMedianTimeTaken(Long medianTimeTaken) {
this.medianTimeTaken = medianTimeTaken;
}
-
-
+
public Long getMinTimeTaken() {
- return minTimeTaken;
+ return minTimeTaken;
}
-
+
public Long getMinTimeTakenSeconds() {
if (minTimeTaken != null) {
return minTimeTaken / 1000;
@@ -204,13 +205,13 @@
}
public void setMinTimeTaken(Long minTimeTaken) {
- this.minTimeTaken = minTimeTaken;
+ this.minTimeTaken = minTimeTaken;
}
public Long getMaxTimeTaken() {
- return maxTimeTaken;
+ return maxTimeTaken;
}
-
+
public Long getMaxTimeTakenSeconds() {
if (maxTimeTaken != null) {
return maxTimeTaken / 1000;
@@ -220,7 +221,7 @@
}
public void setMaxTimeTaken(Long maxTimeTaken) {
- this.maxTimeTaken = maxTimeTaken;
+ this.maxTimeTaken = maxTimeTaken;
}
public Double getAverageMark() {
@@ -271,12 +272,19 @@
this.finishDate = finishDate;
}
+ public String getOutcomes() {
+ return outcomes;
+ }
+
+ public void setOutcomes(String outcomes) {
+ this.outcomes = outcomes;
+ }
+
public boolean getDisplayMarkAsPercent() {
return displayMarkAsPercent;
}
public void setDisplayMarkAsPercent(boolean displayMarkAsPercent) {
this.displayMarkAsPercent = displayMarkAsPercent;
}
-
-}
+}
\ No newline at end of file
Index: lams_gradebook/src/java/org/lamsfoundation/lams/gradebook/gradebookApplicationContext.xml
===================================================================
diff -u -rfcc5eca8a605afdc9e927366827553a7862000cd -r73e57b8ca1a3ddd6cd15b00240d90b79c5de063a
--- lams_gradebook/src/java/org/lamsfoundation/lams/gradebook/gradebookApplicationContext.xml (.../gradebookApplicationContext.xml) (revision fcc5eca8a605afdc9e927366827553a7862000cd)
+++ lams_gradebook/src/java/org/lamsfoundation/lams/gradebook/gradebookApplicationContext.xml (.../gradebookApplicationContext.xml) (revision 73e57b8ca1a3ddd6cd15b00240d90b79c5de063a)
@@ -24,6 +24,7 @@
+
Index: lams_gradebook/src/java/org/lamsfoundation/lams/gradebook/service/GradebookService.java
===================================================================
diff -u -r3cff6b5be84fc9d559306f2d434ffaf92bdc8c7c -r73e57b8ca1a3ddd6cd15b00240d90b79c5de063a
--- lams_gradebook/src/java/org/lamsfoundation/lams/gradebook/service/GradebookService.java (.../GradebookService.java) (revision 3cff6b5be84fc9d559306f2d434ffaf92bdc8c7c)
+++ lams_gradebook/src/java/org/lamsfoundation/lams/gradebook/service/GradebookService.java (.../GradebookService.java) (revision 73e57b8ca1a3ddd6cd15b00240d90b79c5de063a)
@@ -37,6 +37,9 @@
import java.util.TreeSet;
import org.apache.log4j.Logger;
+import org.apache.tomcat.util.json.JSONArray;
+import org.apache.tomcat.util.json.JSONException;
+import org.apache.tomcat.util.json.JSONObject;
import org.lamsfoundation.lams.dao.IBaseDAO;
import org.lamsfoundation.lams.gradebook.GradebookUserActivity;
import org.lamsfoundation.lams.gradebook.GradebookUserActivityArchive;
@@ -76,6 +79,11 @@
import org.lamsfoundation.lams.lesson.service.ILessonService;
import org.lamsfoundation.lams.logevent.LogEvent;
import org.lamsfoundation.lams.logevent.service.ILogEventService;
+import org.lamsfoundation.lams.outcome.Outcome;
+import org.lamsfoundation.lams.outcome.OutcomeMapping;
+import org.lamsfoundation.lams.outcome.OutcomeResult;
+import org.lamsfoundation.lams.outcome.OutcomeScaleItem;
+import org.lamsfoundation.lams.outcome.service.IOutcomeService;
import org.lamsfoundation.lams.tool.ToolOutput;
import org.lamsfoundation.lams.tool.ToolOutputValue;
import org.lamsfoundation.lams.tool.ToolSession;
@@ -107,7 +115,6 @@
*
*/
public class GradebookService implements IGradebookService {
-
private static Logger logger = Logger.getLogger(GradebookService.class);
private static final ExcelCell[] EMPTY_ROW = new ExcelCell[4];
@@ -128,9 +135,11 @@
private MessageService messageService;
private ILogEventService logEventService;
private static ICoreLearnerService learnerService;
+ private IOutcomeService outcomeService;
@Override
- public List getGBActivityRowsForLearner(Long lessonId, Integer userId, TimeZone userTimezone) {
+ public List getGBActivityRowsForLearner(Long lessonId, Integer userId, TimeZone userTimezone)
+ throws JSONException {
GradebookService.logger.debug("Getting gradebook user data for lesson: " + lessonId + ". For user: " + userId);
Lesson lesson = lessonService.getLesson(lessonId);
@@ -189,6 +198,30 @@
}
}
+ List outcomeMappings = outcomeService.getOutcomeMappings(null, activity.getToolContentId(),
+ null);
+ if (!outcomeMappings.isEmpty()) {
+ JSONArray outcomeMappingsJSON = new JSONArray();
+ for (OutcomeMapping outcomeMapping : outcomeMappings) {
+ JSONObject outcomeMappingJSON = new JSONObject();
+ Outcome outcome = outcomeMapping.getOutcome();
+ outcomeMappingJSON.put("mappingId", outcomeMapping.getMappingId());
+ outcomeMappingJSON.put("name", outcome.getName());
+ outcomeMappingJSON.put("code", outcome.getCode());
+ JSONArray possibleValues = new JSONArray();
+ for (OutcomeScaleItem possibleValue : outcome.getScale().getItems()) {
+ possibleValues.put(possibleValue.getName());
+ }
+ outcomeMappingJSON.put("possibleValues", possibleValues);
+ OutcomeResult result = outcomeService.getOutcomeResult(userId, outcomeMapping.getMappingId());
+ if (result != null) {
+ outcomeMappingJSON.put("value", result.getValue());
+ }
+ outcomeMappingsJSON.put(outcomeMappingJSON);
+ }
+ activityDTO.setOutcomes(outcomeMappingsJSON.toString());
+ }
+
gradebookActivityDTOs.add(activityDTO);
}
@@ -2486,5 +2519,9 @@
public void setMessageService(MessageService messageService) {
this.messageService = messageService;
}
+
+ public void setOutcomeService(IOutcomeService outcomeService) {
+ this.outcomeService = outcomeService;
+ }
// -------------------------------------------------------------------------
}
\ No newline at end of file
Index: lams_gradebook/src/java/org/lamsfoundation/lams/gradebook/service/IGradebookService.java
===================================================================
diff -u -r0ed9749f00a1e1f92b989b270857d7f3c3f237cb -r73e57b8ca1a3ddd6cd15b00240d90b79c5de063a
--- lams_gradebook/src/java/org/lamsfoundation/lams/gradebook/service/IGradebookService.java (.../IGradebookService.java) (revision 0ed9749f00a1e1f92b989b270857d7f3c3f237cb)
+++ lams_gradebook/src/java/org/lamsfoundation/lams/gradebook/service/IGradebookService.java (.../IGradebookService.java) (revision 73e57b8ca1a3ddd6cd15b00240d90b79c5de063a)
@@ -28,6 +28,7 @@
import java.util.List;
import java.util.TimeZone;
+import org.apache.tomcat.util.json.JSONException;
import org.lamsfoundation.lams.gradebook.GradebookUserActivity;
import org.lamsfoundation.lams.gradebook.GradebookUserLesson;
import org.lamsfoundation.lams.gradebook.dto.GBLessonGridRowDTO;
@@ -63,8 +64,10 @@
* @param
* @param learner
* @return
+ * @throws JSONException
*/
- List getGBActivityRowsForLearner(Long lessonId, Integer userId, TimeZone userTimezone);
+ List getGBActivityRowsForLearner(Long lessonId, Integer userId, TimeZone userTimezone)
+ throws JSONException;
/**
* Gets the GBActivityDTO list for an activity, which provides the marks for all users in an activity
Index: lams_gradebook/web/gradebookMonitor.jsp
===================================================================
diff -u -r294a26345c2dec685d6a5fe5aa37ab9ce1433dab -r73e57b8ca1a3ddd6cd15b00240d90b79c5de063a
--- lams_gradebook/web/gradebookMonitor.jsp (.../gradebookMonitor.jsp) (revision 294a26345c2dec685d6a5fe5aa37ab9ce1433dab)
+++ lams_gradebook/web/gradebookMonitor.jsp (.../gradebookMonitor.jsp) (revision 73e57b8ca1a3ddd6cd15b00240d90b79c5de063a)
@@ -14,6 +14,8 @@
+
+
@@ -23,6 +25,7 @@
+