Index: assignment-api/api/src/java/org/sakaiproject/assignment/api/AssignmentSubmission.java =================================================================== --- assignment-api/api/src/java/org/sakaiproject/assignment/api/AssignmentSubmission.java (revision 310503) +++ assignment-api/api/src/java/org/sakaiproject/assignment/api/AssignmentSubmission.java (working copy) @@ -273,4 +273,10 @@ * @return error string, if any, returned from review service */ public String getReviewError(); + + /** + * Method to return a specialized string for anonymous grading. + * @return + */ + public String getAnonymousSubmissionId(); } Index: assignment-bundles/resources/assignment.properties =================================================================== --- assignment-bundles/resources/assignment.properties (revision 310503) +++ assignment-bundles/resources/assignment.properties (working copy) @@ -580,6 +580,8 @@ grading.unassigned=Unassigned grading.ofcategory=of Category grading.categorylist=(Optional) Choose a gradebook category +grading.anonymous=Anonymous grading +grading.anonymous.title=anonymous access=Access grading.alert.multiTab=Your grade, comments and feedback have not been saved. You will need to enter them again. You can only open one student submission at a time. If you open a second student's work before leaving the first student's submission, the first submission cannot be graded until you close all the submissions, and then open it. To avoid this problem, please do not open multiple browser-windows or tabs while you are grading. We recommend that you close and restart your browser, and then log back into the system, before continuing with your grading. grading.reminder=Important Reminder: Index: assignment-impl/impl/src/java/org/sakaiproject/assignment/impl/BaseAssignmentService.java =================================================================== --- assignment-impl/impl/src/java/org/sakaiproject/assignment/impl/BaseAssignmentService.java (revision 310503) +++ assignment-impl/impl/src/java/org/sakaiproject/assignment/impl/BaseAssignmentService.java (working copy) @@ -138,6 +138,9 @@ // the file types for zip download protected static final String ZIP_COMMENT_FILE_TYPE = ".txt"; protected static final String ZIP_SUBMITTED_TEXT_FILE_TYPE = ".html"; + + /** Property for whether an assignment user anonymous grading (user settable). */ + protected static final String NEW_ASSIGNMENT_CHECK_ANONYMOUS_GRADING = "new_assignment_check_anonymous_grading"; // spring service injection @@ -5351,6 +5354,7 @@ String userId = s.getSubmitterId(); try { + //patch here for missed id's??? User u = UserDirectoryService.getUser(userId); if (allowAddSubmissionUsers.contains(u)) { @@ -5383,8 +5387,17 @@ } submittersString = escapeInvalidCharsEntry(submittersString); // in grades file, Eid is used - values = new String [] {submitters[i].getDisplayId(), submitters[i].getEid(), submitters[i].getLastName(), submitters[i].getFirstName(), s.getGradeDisplay()}; - gradesBuffer.writeNext(values); + if (!assignmentUsesAnonymousGrading(s)) { + values = new String [] {submitters[i].getDisplayId(), submitters[i].getEid(), submitters[i].getLastName(), submitters[i].getFirstName(), s.getStatus(), s.getGradeDisplay()}; + gradesBuffer.writeNext(values); + } + else { // anonymous grading is true so we need to print different stuff in the csv + String fullAnonId = s.getAnonymousSubmissionId(); + //String anonId = fullAnonId.substring(0, fullAnonId.indexOf(" ")); + String anonTitle = rb.getString("grading.anonymous.title"); + values = new String[] {fullAnonId, fullAnonId, anonTitle, anonTitle, s.getStatus(), s.getGradeDisplay()}; + gradesBuffer.writeNext(values); + } } if (StringUtils.trimToNull(submittersString) != null) @@ -5391,7 +5404,11 @@ { submittersName = submittersName.concat(StringUtils.trimToNull(submittersString)); submittedText = s.getSubmittedText(); - + + if (assignmentUsesAnonymousGrading(s)) { + submittersName = root + s.getAnonymousSubmissionId(); + } + if (!withoutFolders) { submittersName = submittersName.concat("/"); @@ -5563,8 +5580,25 @@ } } + /* + * If the assignment uses anonymous grading returns true, else false + * + * Params: AssignmentSubmission s + */ + private boolean assignmentUsesAnonymousGrading(AssignmentSubmission s) { + ResourceProperties properties = s.getAssignment().getProperties(); + try { + return properties.getBooleanProperty(NEW_ASSIGNMENT_CHECK_ANONYMOUS_GRADING); + } + catch (EntityPropertyNotDefinedException e) { + M_log.warn("Entity Property " + NEW_ASSIGNMENT_CHECK_ANONYMOUS_GRADING + " not defined " + e.getMessage()); + } + catch (EntityPropertyTypeException e) { + M_log.warn("Entity Property " + NEW_ASSIGNMENT_CHECK_ANONYMOUS_GRADING + " type not defined " + e.getMessage()); + } + return false; + } - private void zipAttachments(ZipOutputStream out, String submittersName, String sSubAttachmentFolder, List attachments) { int attachedUrlCount = 0; InputStream content = null; @@ -9915,6 +9949,8 @@ protected boolean m_gradeReleased; protected boolean m_honorPledgeFlag; + + protected String m_anonymousSubmissionId; protected boolean m_hideDueDate; @@ -10261,6 +10297,7 @@ m_submittedText = FormattedText.decodeFormattedTextAttribute(el, "submittedtext"); m_feedbackComment = FormattedText.decodeFormattedTextAttribute(el, "feedbackcomment"); m_feedbackText = FormattedText.decodeFormattedTextAttribute(el, "feedbacktext"); + m_anonymousSubmissionId = el.getAttribute("anonymousSubmissionId"); m_submitterId = el.getAttribute("submitterid"); m_submissionLog = new ArrayList(); @@ -10593,6 +10630,7 @@ m_submittedText = formattedTextDecodeFormattedTextAttribute(attributes, "submittedtext"); m_feedbackComment = formattedTextDecodeFormattedTextAttribute(attributes, "feedbackcomment"); m_feedbackText = formattedTextDecodeFormattedTextAttribute(attributes, "feedbacktext"); + m_anonymousSubmissionId = m_id.substring(27)+" (" + rb.getString("grading.anonymous.title") + ")"; m_submitterId = attributes.getValue("submitterid"); @@ -10763,6 +10801,7 @@ submission.setAttribute("gradedBy", m_gradedBy == null ? "" : m_gradedBy); submission.setAttribute("gradereleased", getBoolString(m_gradeReleased)); submission.setAttribute("pledgeflag", getBoolString(m_honorPledgeFlag)); + submission.setAttribute("anonymousSubmissionId", m_anonymousSubmissionId); submission.setAttribute("hideduedate", getBoolString(m_hideDueDate)); if (M_log.isDebugEnabled()) M_log.debug(this + " BaseAssignmentSubmission: SAVED REGULAR PROPERTIES"); @@ -10894,6 +10933,7 @@ m_honorPledgeFlag = submission.getHonorPledgeFlag(); m_properties = new BaseResourcePropertiesEdit(); m_properties.addAll(submission.getProperties()); + m_anonymousSubmissionId = submission.getAnonymousSubmissionId(); } /** @@ -11707,6 +11747,15 @@ } } + /** + * Method to return a speacialized string for anonymous grading. + * @return + */ + public String getAnonymousSubmissionId() { + String anonTitle = rb.getString("grading.anonymous.title") ; + return this.getId().substring(27) + " (" + anonTitle + ")"; + } + } // AssignmentSubmission /*************************************************************************** Index: assignment-tool/tool/src/java/org/sakaiproject/assignment/tool/AssignmentAction.java =================================================================== --- assignment-tool/tool/src/java/org/sakaiproject/assignment/tool/AssignmentAction.java (revision 310503) +++ assignment-tool/tool/src/java/org/sakaiproject/assignment/tool/AssignmentAction.java (working copy) @@ -166,6 +166,8 @@ import org.sakaiproject.util.Validator; import au.com.bytecode.opencsv.CSVReader; +import org.sakaiproject.entity.api.EntityPropertyNotDefinedException; +import org.sakaiproject.entity.api.EntityPropertyTypeException; /** *
* AssignmentAction is the action class for the assignment tool.
@@ -800,6 +802,10 @@
// view all or grouped submission list
private static final String VIEW_SUBMISSION_LIST_OPTION = "view_submission_list_option";
+ /************************* Upload all grades.csv columns ********************/
+ private static final int IDX_GRADES_CSV_EID = 1;
+ private static final int IDX_GRADES_CSV_GRADE = 5;
+
// search string for submission list
private static final String VIEW_SUBMISSION_SEARCH = "view_submission_search";
@@ -870,6 +876,9 @@
/** To know if grade_submission go from view_students_assignment view or not **/
private static final String FROM_VIEW = "from_view";
+
+ /** Property for whether an assignment user anonymous grading (user settable). */
+ private static final String NEW_ASSIGNMENT_CHECK_ANONYMOUS_GRADING = "new_assignment_check_anonymous_grading";
private AssignmentPeerAssessmentService assignmentPeerAssessmentService;
public void setAssignmentPeerAssessmentService(AssignmentPeerAssessmentService assignmentPeerAssessmentService){
@@ -2262,6 +2271,7 @@
if (state.getAttribute(ANNOUNCEMENT_CHANNEL) != null)
context.put("name_CheckAutoAnnounce", ResourceProperties.NEW_ASSIGNMENT_CHECK_AUTO_ANNOUNCE);
context.put("name_CheckAddHonorPledge", NEW_ASSIGNMENT_CHECK_ADD_HONOR_PLEDGE);
+ context.put("name_CheckAnonymousGrading", NEW_ASSIGNMENT_CHECK_ANONYMOUS_GRADING);
context.put("name_CheckIsGroupSubmission", NEW_ASSIGNMENT_GROUP_SUBMIT);
String gs = (String) state.getAttribute(NEW_ASSIGNMENT_GROUP_SUBMIT);
@@ -2298,6 +2308,7 @@
String maxGrade = (String) state.getAttribute(NEW_ASSIGNMENT_GRADE_POINTS);
context.put("value_GradePoints", displayGrade(state, maxGrade));
context.put("value_Description", state.getAttribute(NEW_ASSIGNMENT_DESCRIPTION));
+ context.put("value_CheckAnonymousGrading", state.getAttribute(NEW_ASSIGNMENT_CHECK_ANONYMOUS_GRADING));
//Peer Assessment
context.put("value_UsePeerAssessment", state.getAttribute(NEW_ASSIGNMENT_USE_PEER_ASSESSMENT));
@@ -2789,6 +2800,7 @@
String maxGrade = (String) state.getAttribute(NEW_ASSIGNMENT_GRADE_POINTS);
context.put("value_GradePoints", displayGrade(state, maxGrade));
context.put("value_Description", state.getAttribute(NEW_ASSIGNMENT_DESCRIPTION));
+ context.put("value_CheckAnonymousGrading", state.getAttribute(NEW_ASSIGNMENT_CHECK_ANONYMOUS_GRADING));
context.put("value_CheckAddDueDate", state.getAttribute(ResourceProperties.NEW_ASSIGNMENT_CHECK_ADD_DUE_DATE));
context.put("value_CheckHideDueDate", state.getAttribute(NEW_ASSIGNMENT_CHECK_HIDE_DUE_DATE));
context.put("value_CheckAutoAnnounce", state.getAttribute(ResourceProperties.NEW_ASSIGNMENT_CHECK_AUTO_ANNOUNCE));
@@ -2907,6 +2919,7 @@
{
gradeType = a.getContent().getTypeOfGrade();
}
+ state.setAttribute(NEW_ASSIGNMENT_CHECK_ANONYMOUS_GRADING, a.getProperties().getProperty(NEW_ASSIGNMENT_CHECK_ANONYMOUS_GRADING));
boolean allowToGrade=true;
String associateGradebookAssignment = StringUtils.trimToNull(a.getProperties().getProperty(AssignmentService.PROP_ASSIGNMENT_ASSOCIATE_GRADEBOOK_ASSIGNMENT));
if (associateGradebookAssignment != null)
@@ -2992,6 +3005,7 @@
context.put("value_feedback_comment", state.getAttribute(GRADE_SUBMISSION_FEEDBACK_COMMENT));
context.put("value_feedback_text", state.getAttribute(GRADE_SUBMISSION_FEEDBACK_TEXT));
context.put("value_feedback_attachment", state.getAttribute(ATTACHMENTS));
+ context.put("value_CheckAnonymousGrading", state.getAttribute(NEW_ASSIGNMENT_CHECK_ANONYMOUS_GRADING));
// format to show one decimal place in grade
context.put("value_grade", (gradeType == 3) ? displayGrade(state, (String) state.getAttribute(GRADE_SUBMISSION_GRADE))
@@ -3397,7 +3411,9 @@
accessPointUrl = accessPointUrl.concat(view);
}
context.put("accessPointUrl", accessPointUrl);
-
+
+ state.setAttribute(NEW_ASSIGNMENT_CHECK_ANONYMOUS_GRADING, assignment.getProperties().getProperty(NEW_ASSIGNMENT_CHECK_ANONYMOUS_GRADING));
+
if (AssignmentService.getAllowGroupAssignments())
{
Collection groupsAllowGradeAssignment = AssignmentService.getGroupsAllowGradeAssignment((String) state.getAttribute(STATE_CONTEXT_STRING), assignment.getReference());
@@ -3418,6 +3434,7 @@
}
}
+ context.put("value_CheckAnonymousGrading", state.getAttribute(NEW_ASSIGNMENT_CHECK_ANONYMOUS_GRADING));
List
+ #if ($value_CheckAnonymousGrading.equals("true"))
+
+ #else
+
+ #end
+
+
#set($userId = $!siteUser)
@@ -631,7 +632,11 @@
$tlang.getString("gen.dra2")
#end
#end
- $validator.escapeHtml($submitterName)
+ #if ($value_CheckAnonymousGrading.equals("true"))
+ $anonymousSubmissionId
+ #else
+ $validator.escapeHtml($submitterName)
+ #end
#if ($gusers)
Index: assignment-tool/tool/src/webapp/vm/assignment/chef_assignments_instructor_new_edit_assignment.vm
===================================================================
--- assignment-tool/tool/src/webapp/vm/assignment/chef_assignments_instructor_new_edit_assignment.vm (revision 310503)
+++ assignment-tool/tool/src/webapp/vm/assignment/chef_assignments_instructor_new_edit_assignment.vm (working copy)
@@ -447,6 +447,18 @@
#end
+ ## Show the anonymous grading checkbox
+