Index: assignment-api/api/src/java/org/sakaiproject/assignment/api/AssignmentSubmission.java =================================================================== --- assignment-api/api/src/java/org/sakaiproject/assignment/api/AssignmentSubmission.java (revision 312009) +++ 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 312009) +++ assignment-bundles/resources/assignment.properties (working copy) @@ -581,6 +581,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 312009) +++ 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,9 +5387,18 @@ } 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()}; + 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) { @@ -5392,6 +5405,11 @@ submittersName = submittersName.concat(StringUtils.trimToNull(submittersString)); submittedText = s.getSubmittedText(); + if (assignmentUsesAnonymousGrading(s)) { + submittersName = root + s.getAnonymousSubmissionId(); + submittersString = s.getAnonymousSubmissionId(); + } + if (!withoutFolders) { submittersName = submittersName.concat("/"); @@ -5563,8 +5581,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 +9950,8 @@ protected boolean m_gradeReleased; protected boolean m_honorPledgeFlag; + + protected String m_anonymousSubmissionId; protected boolean m_hideDueDate; @@ -10261,6 +10298,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 +10631,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 +10802,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 +10934,7 @@ m_honorPledgeFlag = submission.getHonorPledgeFlag(); m_properties = new BaseResourcePropertiesEdit(); m_properties.addAll(submission.getProperties()); + m_anonymousSubmissionId = submission.getAnonymousSubmissionId(); } /** @@ -11707,6 +11748,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 312009) +++ 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"; @@ -871,6 +877,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){ this.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)); @@ -2796,6 +2807,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)); @@ -2914,6 +2926,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) @@ -2999,6 +3012,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)) @@ -3321,6 +3335,9 @@ context.put("feedback_comment", state.getAttribute(GRADE_SUBMISSION_FEEDBACK_COMMENT)); context.put("feedback_text", feedbackText); context.put("feedback_attachment", state.getAttribute(GRADE_SUBMISSION_FEEDBACK_ATTACHMENT)); + + // SAK-17606 + context.put("value_CheckAnonymousGrading", state.getAttribute(NEW_ASSIGNMENT_CHECK_ANONYMOUS_GRADING)); // format to show one decimal place String grade = (String) state.getAttribute(GRADE_SUBMISSION_GRADE); @@ -3405,6 +3422,8 @@ } 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()); @@ -3425,6 +3444,7 @@ } } + context.put("value_CheckAnonymousGrading", state.getAttribute(NEW_ASSIGNMENT_CHECK_ANONYMOUS_GRADING)); List userSubmissions = prepPage(state); state.setAttribute(USER_SUBMISSIONS, userSubmissions); context.put("userSubmissions", state.getAttribute(USER_SUBMISSIONS)); @@ -5690,7 +5710,18 @@ sPropertiesEdit.removeProperty(AssignmentSubmission.SUBMITTER_USER_ID); } - sEdit.addSubmissionLogEntry(new java.util.Date() + " " + u.getDisplayName() + " (" + u.getEid() + ") " + (post ? "submitted" : "saved draft")); + StringBuilder log = new StringBuilder(); + log.append(new java.util.Date()); + log.append(" "); + boolean anonymousGrading = Boolean.parseBoolean(a.getProperties().getProperty(NEW_ASSIGNMENT_CHECK_ANONYMOUS_GRADING)); + if(!anonymousGrading){ + log.append(u.getDisplayName()); + log.append(" ("); + log.append(u.getEid()); + log.append(") "); + } + log.append(post ? "submitted" : "saved draft"); + sEdit.addSubmissionLogEntry(log.toString()); AssignmentService.commitEdit(sEdit); } @@ -5739,7 +5770,18 @@ sPropertiesEdit.removeProperty(AssignmentSubmission.SUBMITTER_USER_ID); } - edit.addSubmissionLogEntry(new java.util.Date() + " " + u.getDisplayName() + " (" + u.getEid() + ") " + (post ? "submitted" : "saved draft")); + StringBuilder log = new StringBuilder(); + log.append(new java.util.Date()); + log.append(" "); + boolean anonymousGrading = Boolean.parseBoolean(a.getProperties().getProperty(NEW_ASSIGNMENT_CHECK_ANONYMOUS_GRADING)); + if(!anonymousGrading){ + log.append(u.getDisplayName()); + log.append(" ("); + log.append(u.getEid()); + log.append(") "); + } + log.append(post ? "submitted" : "saved draft"); + edit.addSubmissionLogEntry(log.toString()); AssignmentService.commitEdit(edit); } @@ -6212,6 +6254,8 @@ String grading = params.getString(NEW_ASSIGNMENT_ADD_TO_GRADEBOOK); state.setAttribute(NEW_ASSIGNMENT_ADD_TO_GRADEBOOK, grading); + + state.setAttribute(NEW_ASSIGNMENT_CHECK_ANONYMOUS_GRADING, params.getString(NEW_ASSIGNMENT_CHECK_ANONYMOUS_GRADING)); // only when choose to associate with assignment in Gradebook String associateAssignment = params.getString(AssignmentService.PROP_ASSIGNMENT_ASSOCIATE_GRADEBOOK_ASSIGNMENT); @@ -7003,6 +7047,7 @@ String associateGradebookAssignment = (String) state.getAttribute(AssignmentService.PROP_ASSIGNMENT_ASSOCIATE_GRADEBOOK_ASSIGNMENT); String allowResubmitNumber = state.getAttribute(AssignmentSubmission.ALLOW_RESUBMIT_NUMBER) != null?(String) state.getAttribute(AssignmentSubmission.ALLOW_RESUBMIT_NUMBER):null; + String checkAnonymousGrading = state.getAttribute(NEW_ASSIGNMENT_CHECK_ANONYMOUS_GRADING) != null? (String) state.getAttribute(NEW_ASSIGNMENT_CHECK_ANONYMOUS_GRADING):""; if (ac != null && ac.getTypeOfSubmission() == Assignment.NON_ELECTRONIC_ASSIGNMENT_SUBMISSION) { // resubmit option is not allowed for non-electronic type @@ -7116,7 +7161,7 @@ ResourcePropertiesEdit aPropertiesEdit = a.getPropertiesEdit(); oAssociateGradebookAssignment = aPropertiesEdit.getProperty(AssignmentService.PROP_ASSIGNMENT_ASSOCIATE_GRADEBOOK_ASSIGNMENT); Time resubmitCloseTime = getTimeFromState(state, ALLOW_RESUBMIT_CLOSEMONTH, ALLOW_RESUBMIT_CLOSEDAY, ALLOW_RESUBMIT_CLOSEYEAR, ALLOW_RESUBMIT_CLOSEHOUR, ALLOW_RESUBMIT_CLOSEMIN, ALLOW_RESUBMIT_CLOSEAMPM); - editAssignmentProperties(a, checkAddDueTime, checkAutoAnnounce, addtoGradebook, associateGradebookAssignment, allowResubmitNumber, aPropertiesEdit, post, resubmitCloseTime); + editAssignmentProperties(a, checkAddDueTime, checkAutoAnnounce, addtoGradebook, associateGradebookAssignment, allowResubmitNumber, aPropertiesEdit, post, resubmitCloseTime, checkAnonymousGrading); //TODO: ADD_DUE_DATE // the notification option if (state.getAttribute(Assignment.ASSIGNMENT_INSTRUCTOR_NOTIFICATIONS_VALUE) != null) @@ -8100,7 +8145,7 @@ } } - private void editAssignmentProperties(AssignmentEdit a, String checkAddDueTime, String checkAutoAnnounce, String addtoGradebook, String associateGradebookAssignment, String allowResubmitNumber, ResourcePropertiesEdit aPropertiesEdit, boolean post, Time closeTime) + private void editAssignmentProperties(AssignmentEdit a, String checkAddDueTime, String checkAutoAnnounce, String addtoGradebook, String associateGradebookAssignment, String allowResubmitNumber, ResourcePropertiesEdit aPropertiesEdit, boolean post, Time closeTime, String checkAnonymousGrading) { if (aPropertiesEdit.getProperty("newAssignment") != null) { @@ -8126,6 +8171,7 @@ aPropertiesEdit.addProperty(ResourceProperties.NEW_ASSIGNMENT_CHECK_AUTO_ANNOUNCE, checkAutoAnnounce); aPropertiesEdit.addProperty(NEW_ASSIGNMENT_ADD_TO_GRADEBOOK, addtoGradebook); aPropertiesEdit.addProperty(AssignmentService.PROP_ASSIGNMENT_ASSOCIATE_GRADEBOOK_ASSIGNMENT, associateGradebookAssignment); + aPropertiesEdit.addProperty(NEW_ASSIGNMENT_CHECK_ANONYMOUS_GRADING, checkAnonymousGrading); if (post && addtoGradebook.equals(AssignmentService.GRADEBOOK_INTEGRATION_ADD)) { @@ -8701,6 +8747,7 @@ { state.setAttribute(NEW_ASSIGNMENT_RANGE, "groups"); } + state.setAttribute(NEW_ASSIGNMENT_CHECK_ANONYMOUS_GRADING, properties.getProperty(NEW_ASSIGNMENT_CHECK_ANONYMOUS_GRADING)); // put the resubmission option into state assignment_resubmission_option_into_state(a, null, state); @@ -11159,6 +11206,9 @@ state.removeAttribute(AssignmentService.PROP_ASSIGNMENT_ASSOCIATE_GRADEBOOK_ASSIGNMENT); + // bjones86 - SAK-17606 + state.removeAttribute(NEW_ASSIGNMENT_CHECK_ANONYMOUS_GRADING); + } // resetNewAssignment @@ -12001,11 +12051,39 @@ } else { + boolean anonymousGrading = false; + try { + // if anonymous grading is set we sort this differently + Assignment assignment = AssignmentService.getAssignment(u1.getSubmission().getAssignmentId()); + ResourceProperties properties = assignment.getProperties(); + anonymousGrading = properties.getBooleanProperty(NEW_ASSIGNMENT_CHECK_ANONYMOUS_GRADING); + } + catch (IdUnusedException e) { + M_log.warn(this + ":comparator " + e.getMessage()); + } + catch (PermissionException e) { + M_log.warn(this + ":comparator " + e.getMessage()); + } + catch (EntityPropertyNotDefinedException e) { + anonymousGrading = false; + M_log.warn("Entity Property " + NEW_ASSIGNMENT_CHECK_ANONYMOUS_GRADING + " not defined " + e.getMessage()); + } + catch (EntityPropertyTypeException e) { + anonymousGrading = false; + M_log.warn("Entity Property " + NEW_ASSIGNMENT_CHECK_ANONYMOUS_GRADING + " type not defined " + e.getMessage()); + } + if (anonymousGrading) { + String anon1 = u1.getSubmission().getAnonymousSubmissionId(); + String anon2 = u2.getSubmission().getAnonymousSubmissionId(); + result = compareString(anon1, anon2); + } + else{ String lName1 = u1.getUser() == null ? u1.getGroup().getTitle(): u1.getUser().getSortName(); String lName2 = u2.getUser() == null ? u2.getGroup().getTitle(): u2.getUser().getSortName(); result = compareString(lName1, lName2); } } + } else if (m_criteria.equals(SORTED_GRADE_SUBMISSION_BY_SUBMIT_TIME)) { // sorted by submission time @@ -14084,6 +14162,7 @@ // constructor the hashmap for all submission objects HashMap submissionTable = new HashMap(); + HashMap anonymousSubmissionAndEidTable = new HashMap(); List submissions = null; Assignment assignment = getAssignment(aReference, "doUpload_all", state); if (assignment != null) @@ -14099,6 +14178,7 @@ AssignmentSubmission s = (AssignmentSubmission) sIterator.next(); String _eid = s.getSubmitterId(); submissionTable.put(_eid, new UploadGradeWrapper(s.getGrade(), s.getSubmittedText(), s.getFeedbackComment(), hasSubmissionAttachment?new ArrayList():s.getSubmittedAttachments(), hasFeedbackAttachment?new ArrayList():s.getFeedbackAttachments(), (s.getSubmitted() && s.getTimeSubmitted() != null)?s.getTimeSubmitted().toString():"", s.getFeedbackText())); + anonymousSubmissionAndEidTable.put(s.getAnonymousSubmissionId(), _eid); } catch (Throwable _eidprob) {} } } @@ -14111,7 +14191,7 @@ hasSubmissionText, hasSubmissionAttachment, hasGradeFile, hasFeedbackText, hasComment, hasFeedbackAttachment, submissionTable, - assignment, fileContentStream); + assignment, fileContentStream, anonymousSubmissionAndEidTable); } if (state.getAttribute(STATE_MESSAGE) == null) @@ -14158,7 +14238,7 @@ boolean hasSubmissionText, boolean hasSubmissionAttachment, boolean hasGradeFile, boolean hasFeedbackText, boolean hasComment, boolean hasFeedbackAttachment, HashMap submissionTable, - Assignment assignment, InputStream fileContentStream) { + Assignment assignment, InputStream fileContentStream, HashMap anonymousSubmissionAndEidTable) { // a flag value for checking whether the zip file is of proper format: // should have a grades.csv file if there is no user folders boolean zipHasGradeFile = false; @@ -14192,6 +14272,7 @@ String entryName = entry.getName(); if (!entry.isDirectory() && entryName.indexOf("/.") == -1) { + String anonTitle = rb.getString("grading.anonymous.title"); if (entryName.endsWith("grades.csv")) { // at least the zip file has a grade.csv @@ -14217,7 +14298,16 @@ String _the_eid = items[1]; if (!assignment.isGroup()) { - User u = UserDirectoryService.getUserByEid(items[1]/*user eid*/); + User u = null; + // check for anonymous grading + if (!items[IDX_GRADES_CSV_EID].contains(anonTitle)) { + u = UserDirectoryService.getUserByEid(items[IDX_GRADES_CSV_EID]); + } + else { // anonymous so pull the real eid out of our hash table + String anonId = items[IDX_GRADES_CSV_EID]; + String eid = (String) anonymousSubmissionAndEidTable.get(anonId); + u = UserDirectoryService.getUserByEid(eid); + } if (u == null) throw new Exception("User not found!"); _the_eid = u.getId(); } @@ -14281,10 +14371,14 @@ userEid = userEid.substring(0, userEid.indexOf("/")); } // get the eid part - if (userEid.indexOf("(") != -1) + if ((userEid.indexOf("(") != -1) && !userEid.contains(anonTitle)) { userEid = userEid.substring(userEid.indexOf("(")+1, userEid.indexOf(")")); } + if (userEid.contains(anonTitle)) { // anonymous grading so we have to figure out the eid + //get eid out of this slick table we made earlier + userEid = (String) anonymousSubmissionAndEidTable.get(userEid); + } userEid=StringUtils.trimToNull(userEid); if (!assignment.isGroup()) { try { Index: assignment-tool/tool/src/webapp/vm/assignment/chef_assignments_instructor_grading_submission.vm =================================================================== --- assignment-tool/tool/src/webapp/vm/assignment/chef_assignments_instructor_grading_submission.vm (revision 312009) +++ assignment-tool/tool/src/webapp/vm/assignment/chef_assignments_instructor_grading_submission.vm (working copy) @@ -166,7 +166,11 @@ #end #set ($count = $count + 1) #end + #if ($value_CheckAnonymousGrading.equals("true")) + $validator.escapeHtml($submission.anonymousSubmissionId) + #else $validator.escapeHtml($!submitterNames) + #end #if ($!submissionType != 4) Index: assignment-tool/tool/src/webapp/vm/assignment/chef_assignments_instructor_list_submissions.vm =================================================================== --- assignment-tool/tool/src/webapp/vm/assignment/chef_assignments_instructor_list_submissions.vm (revision 312009) +++ assignment-tool/tool/src/webapp/vm/assignment/chef_assignments_instructor_list_submissions.vm (working copy) @@ -141,6 +141,9 @@ #end + + ## SAK-17606 + #if (!$value_CheckAnonymousGrading.equals("true"))

@@ -152,6 +155,7 @@ #end

#end + #end #set($disableGrade=false) #if($assignment.getAllowPeerAssessment() == true && $assignment.isPeerAssessmentClosed() == false) #set($disableGrade=true) @@ -603,6 +607,7 @@ #if ($!submission)## && $submission.submitted) #set($returnedTime = $submission.getTimeReturned()) #set($submitTime = $submission.getTimeSubmitted()) + #set($anonymousSubmissionId = $submission.getAnonymousSubmissionId()) #set($userId = $!siteUser) @@ -631,7 +636,11 @@ $tlang.getString("gen.dra2") #end #end + #if ($value_CheckAnonymousGrading.equals("true")) + $anonymousSubmissionId + #else $validator.escapeHtml($submitterName) + #end #if ($gusers)
#foreach ($user in $gusers) @@ -674,12 +683,20 @@ $tlang.getString("gen.dra2") #end #end + #if ($value_CheckAnonymousGrading.equals("true")) + $anonymousSubmissionId + #else $validator.escapeHtml($submitterName) + #end #else + #if ($value_CheckAnonymousGrading.equals("true")) + $anonymousSubmissionId + #else $validator.escapeHtml($submitterName) #end #end + #end #if ($!submission) 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 312009) +++ assignment-tool/tool/src/webapp/vm/assignment/chef_assignments_instructor_new_edit_assignment.vm (working copy) @@ -772,6 +772,7 @@
#end +

$!tlang.getString('grading')

#if ($!withGrade && $!withGradebook) ## show the "Add to Gradebook" choices or not #if(!$!allowGroupAssignmentsInGradebook) @@ -779,9 +780,6 @@ #else #set ($addToGBDisplay="block") #end -

- $!tlang.getString('grading') -

## hide the assignment list from Gradebook when clicked @@ -909,6 +907,21 @@

#end #end + ## Show the anonymous grading checkbox + #if ($withGrade && $withGradebook) +
+ #end +

+ #if ($value_CheckAnonymousGrading.equals("true")) + + #else + + #end + +

+ ## end anonymous check ## Peer Assessment #if ($allowPeerAssessment)
Index: assignment-tool/tool/src/webapp/vm/assignment/chef_assignments_instructor_preview_grading_submission.vm =================================================================== --- assignment-tool/tool/src/webapp/vm/assignment/chef_assignments_instructor_preview_grading_submission.vm (revision 312009) +++ assignment-tool/tool/src/webapp/vm/assignment/chef_assignments_instructor_preview_grading_submission.vm (working copy) @@ -69,7 +69,14 @@ #end #set ($count = $count + 1) #end - $!submitterNames + + ## SAK-17606 + #set($anonymousSubmissionId = $submission.getAnonymousSubmissionId()) + #if ($value_CheckAnonymousGrading.equals("true")) + $anonymousSubmissionId + #else + $validator.escapeHtml($!submitterNames) + #end #if ($!submissionType != 4)