Index: assignment/assignment-impl/impl/src/java/org/sakaiproject/assignment/impl/BaseAssignmentService.java =================================================================== --- assignment/assignment-impl/impl/src/java/org/sakaiproject/assignment/impl/BaseAssignmentService.java (revision 122816) +++ assignment/assignment-impl/impl/src/java/org/sakaiproject/assignment/impl/BaseAssignmentService.java (working copy) @@ -113,6 +113,14 @@ import org.sakaiproject.entity.api.ResourceProperties; import org.sakaiproject.entity.api.ResourcePropertiesEdit; import org.sakaiproject.event.api.Event; +import org.sakaiproject.event.api.LearningResourceStoreService; +import org.sakaiproject.event.api.LearningResourceStoreService.LRS_Actor; +import org.sakaiproject.event.api.LearningResourceStoreService.LRS_Context; +import org.sakaiproject.event.api.LearningResourceStoreService.LRS_Object; +import org.sakaiproject.event.api.LearningResourceStoreService.LRS_Result; +import org.sakaiproject.event.api.LearningResourceStoreService.LRS_Statement; +import org.sakaiproject.event.api.LearningResourceStoreService.LRS_Verb; +import org.sakaiproject.event.api.LearningResourceStoreService.LRS_Verb.SAKAI_VERB; import org.sakaiproject.event.cover.EventTrackingService; import org.sakaiproject.event.cover.NotificationService; import org.sakaiproject.exception.IdInvalidException; @@ -2627,7 +2635,15 @@ else { // graded and saved before releasing it - EventTrackingService.post(EventTrackingService.newEvent(AssignmentConstants.EVENT_GRADE_ASSIGNMENT_SUBMISSION, submissionRef, true)); + Event event = EventTrackingService.newEvent(AssignmentConstants.EVENT_GRADE_ASSIGNMENT_SUBMISSION, submissionRef, true); + EventTrackingService.post(event); + LearningResourceStoreService lrss = (LearningResourceStoreService) ComponentManager + .get("org.sakaiproject.event.api.LearningResourceStoreService"); + if (null != lrss && StringUtils.isNotEmpty(s.getGrade())) { + for (User user : s.getSubmitters()) { + lrss.registerStatement(getStatementForAssignmentGraded(lrss.getEventActor(event), event, a, s, user), "assignment"); + } + } } } else if (returnedTime != null && s.getGraded() && (submittedTime == null/*returning non-submissions*/ @@ -2635,7 +2651,15 @@ || (submittedTime != null && submittedTime.after(returnedTime) && s.getTimeLastModified().after(submittedTime))/*grading the resubmitted assignment*/)) { // releasing a submitted assignment or releasing grade to an unsubmitted assignment - EventTrackingService.post(EventTrackingService.newEvent(AssignmentConstants.EVENT_GRADE_ASSIGNMENT_SUBMISSION, submissionRef, true)); + Event event = EventTrackingService.newEvent(AssignmentConstants.EVENT_GRADE_ASSIGNMENT_SUBMISSION, submissionRef, true); + EventTrackingService.post(event); + LearningResourceStoreService lrss = (LearningResourceStoreService) ComponentManager + .get("org.sakaiproject.event.api.LearningResourceStoreService"); + if (null != lrss && StringUtils.isNotEmpty(s.getGrade())) { + for (User user : s.getSubmitters()) { + lrss.registerStatement(getStatementForAssignmentGraded(lrss.getEventActor(event), event, a, s, user), "assignment"); + } + } // if this is releasing grade, depending on the release grade notification setting, send email notification to student sendGradeReleaseNotification(s.getGradeReleased(), a.getProperties().getProperty(Assignment.ASSIGNMENT_RELEASEGRADE_NOTIFICATION_VALUE), s.getSubmitters(), s); @@ -2645,7 +2669,16 @@ else if (submittedTime == null) /*grading non-submission*/ { // releasing a submitted assignment or releasing grade to an unsubmitted assignment - EventTrackingService.post(EventTrackingService.newEvent(AssignmentConstants.EVENT_GRADE_ASSIGNMENT_SUBMISSION, submissionRef, true)); + Event event = EventTrackingService.newEvent(AssignmentConstants.EVENT_GRADE_ASSIGNMENT_SUBMISSION, submissionRef, true); + EventTrackingService.post(event); + LearningResourceStoreService lrss = (LearningResourceStoreService) ComponentManager + .get("org.sakaiproject.event.api.LearningResourceStoreService"); + if (null != lrss) { + for (User user : s.getSubmitters()) { + lrss.registerStatement(getStatementForUnsubmittedAssignmentGraded(lrss.getEventActor(event), event, a, s, user), + "sakai.assignment"); + } + } } else { @@ -13608,5 +13641,54 @@ } } + private LRS_Statement getStatementForAssignmentGraded(LRS_Actor instructor, Event event, Assignment a, AssignmentSubmission s, + User studentUser) { + LRS_Verb verb = new LRS_Verb(SAKAI_VERB.scored); + LRS_Object lrsObject = new LRS_Object(m_serverConfigurationService.getPortalUrl() + event.getResource(), + "received-grade-assignment"); + HashMap nameMap = new HashMap(); + nameMap.put("en-US", "User received a grade"); + lrsObject.setActivityName(nameMap); + HashMap descMap = new HashMap(); + descMap.put("en-US", "User received a grade for their assginment: " + a.getTitle() + "; Submission #: " + s.getResubmissionNum()); + lrsObject.setDescription(descMap); + LRS_Actor student = new LRS_Actor(studentUser.getEmail()); + student.setName(studentUser.getDisplayName()); + LRS_Context context = new LRS_Context(instructor); + context.setActivity("other", "assignment"); + LRS_Statement statement = new LRS_Statement(student, verb, lrsObject, getLRS_Result(a, s, true), context); + return statement; + } + + private LRS_Result getLRS_Result(Assignment a, AssignmentSubmission s, boolean completed) { + LRS_Result result = null; + AssignmentContent content = a.getContent(); + if (3 == content.getTypeOfGrade() && NumberUtils.isNumber(s.getGradeDisplay())) { // Points + result = new LRS_Result(new Float(s.getGradeDisplay()), new Float(0.0), new Float(content.getMaxGradePointDisplay()), null); + result.setCompletion(completed); + } else { + result = new LRS_Result(completed); + result.setGrade(s.getGradeDisplay()); + } + return result; + } + + private LRS_Statement getStatementForUnsubmittedAssignmentGraded(LRS_Actor instructor, Event event, Assignment a, + AssignmentSubmission s, User studentUser) { + LRS_Verb verb = new LRS_Verb(SAKAI_VERB.scored); + LRS_Object lrsObject = new LRS_Object(m_serverConfigurationService.getAccessUrl() + event.getResource(), "received-grade-unsubmitted-assignment"); + HashMap nameMap = new HashMap(); + nameMap.put("en-US", "User received a grade"); + lrsObject.setActivityName(nameMap); + HashMap descMap = new HashMap(); + descMap.put("en-US", "User received a grade for an unsubmitted assginment: " + a.getTitle()); + lrsObject.setDescription(descMap); + LRS_Actor student = new LRS_Actor(studentUser.getEmail()); + student.setName(studentUser.getDisplayName()); + LRS_Context context = new LRS_Context(instructor); + context.setActivity("other", "assignment"); + LRS_Statement statement = new LRS_Statement(student, verb, lrsObject, getLRS_Result(a, s, false), context); + return statement; + } } // BaseAssignmentService Index: assignment/assignment-tool/tool/src/java/org/sakaiproject/assignment/tool/AssignmentAction.java =================================================================== --- assignment/assignment-tool/tool/src/java/org/sakaiproject/assignment/tool/AssignmentAction.java (revision 122358) +++ assignment/assignment-tool/tool/src/java/org/sakaiproject/assignment/tool/AssignmentAction.java (working copy) @@ -113,7 +113,14 @@ import org.sakaiproject.entity.api.ResourceProperties; import org.sakaiproject.entity.api.ResourcePropertiesEdit; import org.sakaiproject.entity.cover.EntityManager; +import org.sakaiproject.event.api.Event; import org.sakaiproject.event.api.EventTrackingService; +import org.sakaiproject.event.api.LearningResourceStoreService; +import org.sakaiproject.event.api.LearningResourceStoreService.LRS_Actor; +import org.sakaiproject.event.api.LearningResourceStoreService.LRS_Object; +import org.sakaiproject.event.api.LearningResourceStoreService.LRS_Statement; +import org.sakaiproject.event.api.LearningResourceStoreService.LRS_Verb; +import org.sakaiproject.event.api.LearningResourceStoreService.LRS_Verb.SAKAI_VERB; import org.sakaiproject.event.api.NotificationService; import org.sakaiproject.event.api.SessionState; import org.sakaiproject.exception.IdInvalidException; @@ -4052,13 +4059,26 @@ if (submission != null) { - // submission read event - m_eventTrackingService.post(m_eventTrackingService.newEvent(AssignmentConstants.EVENT_ACCESS_ASSIGNMENT_SUBMISSION, submission.getId(), false)); + // submission read event + Event event = m_eventTrackingService.newEvent(AssignmentConstants.EVENT_ACCESS_ASSIGNMENT_SUBMISSION, submission.getId(), + false); + m_eventTrackingService.post(event); + LearningResourceStoreService lrss = (LearningResourceStoreService) ComponentManager + .get("org.sakaiproject.event.api.LearningResourceStoreService"); + if (null != lrss) { + lrss.registerStatement(getStatementForViewSubmittedAssignment(lrss.getEventActor(event), event, a.getTitle()), "assignment"); + } } else { - // otherwise, the student just read assignment description and prepare for submission - m_eventTrackingService.post(m_eventTrackingService.newEvent(AssignmentConstants.EVENT_ACCESS_ASSIGNMENT, a.getId(), false)); + // otherwise, the student just read assignment description and prepare for submission + Event event = m_eventTrackingService.newEvent(AssignmentConstants.EVENT_ACCESS_ASSIGNMENT, a.getId(), false); + m_eventTrackingService.post(event); + LearningResourceStoreService lrss = (LearningResourceStoreService) ComponentManager + .get("org.sakaiproject.event.api.LearningResourceStoreService"); + if (null != lrss) { + lrss.registerStatement(getStatementForViewAssignment(lrss.getEventActor(event), event, a.getTitle()), "assignment"); + } } } @@ -5055,7 +5075,14 @@ { state.setAttribute(STATE_MODE, MODE_STUDENT_VIEW_SUBMISSION_CONFIRMATION); } - + LearningResourceStoreService lrss = (LearningResourceStoreService) ComponentManager + .get("org.sakaiproject.event.api.LearningResourceStoreService"); + if (null != lrss) { + Event event = m_eventTrackingService.newEvent(AssignmentConstants.EVENT_SUBMIT_ASSIGNMENT_SUBMISSION, assignmentId, false); + lrss.registerStatement( + getStatementForSubmitAssignment(lrss.getEventActor(event), event, ServerConfigurationService.getAccessUrl(), + a.getTitle()), "sakai.assignment"); + } } // if } // post_save_submission @@ -14354,4 +14381,44 @@ String lOptions = ServerConfigurationService.getString("assignment.letterGradeOptions", "A+,A,A-,B+,B,B-,C+,C,C-,D+,D,D-,E,F"); context.put("letterGradeOptions", StringUtils.split(lOptions, ",")); } + + private LRS_Statement getStatementForViewSubmittedAssignment(LRS_Actor actor, Event event, String assignmentName) { + String url = ServerConfigurationService.getPortalUrl(); + LRS_Verb verb = new LRS_Verb(SAKAI_VERB.interacted); + LRS_Object lrsObject = new LRS_Object(url + event.getResource(), "view-submitted-assignment"); + HashMap nameMap = new HashMap(); + nameMap.put("en-US", "User reviewed a submitted assignment"); + lrsObject.setActivityName(nameMap); + // Add description + HashMap descMap = new HashMap(); + descMap.put("en-US", "User reviewed a submitted assignment: " + assignmentName); + lrsObject.setDescription(descMap); + return new LRS_Statement(actor, verb, lrsObject); + } + + private LRS_Statement getStatementForViewAssignment(LRS_Actor actor, Event event, String assignmentName) { + String url = ServerConfigurationService.getPortalUrl(); + LRS_Verb verb = new LRS_Verb(SAKAI_VERB.interacted); + LRS_Object lrsObject = new LRS_Object(url + event.getResource(), "view-assignment"); + HashMap nameMap = new HashMap(); + nameMap.put("en-US", "User viewed an assignment"); + lrsObject.setActivityName(nameMap); + HashMap descMap = new HashMap(); + descMap.put("en-US", "User viewed assignment: " + assignmentName); + lrsObject.setDescription(descMap); + return new LRS_Statement(actor, verb, lrsObject); + } + + private LRS_Statement getStatementForSubmitAssignment(LRS_Actor actor, Event event, String accessUrl, String assignmentName) { + LRS_Verb verb = new LRS_Verb(SAKAI_VERB.attempted); + LRS_Object lrsObject = new LRS_Object(accessUrl + event.getResource(), "submit-assignment"); + HashMap nameMap = new HashMap(); + nameMap.put("en-US", "User submitted an assignment"); + lrsObject.setActivityName(nameMap); + // Add description + HashMap descMap = new HashMap(); + descMap.put("en-US", "User submitted an assignment: " + assignmentName); + lrsObject.setDescription(descMap); + return new LRS_Statement(actor, verb, lrsObject); + } }