--- assignment/assignment-impl/impl/src/java/org/sakaiproject/assignment/impl/BaseAssignmentService.java 2014-12-16 10:23:25.000000000 -0500 +++ assignment/assignment-impl/impl/src/java/org/sakaiproject/assignment/impl/BaseAssignmentService.java 2014-12-08 09:09:38.000000000 -0500 @@ -6940,26 +6911,45 @@ { try { - int allowResubmitNumber = Integer.parseInt(allowResubmitNumString); - String allowResubmitCloseTime = submission != null ? (String) submission.getProperties().getProperty(AssignmentSubmission.ALLOW_RESUBMIT_CLOSETIME):null; - Time resubmitCloseTime = null; - - if (allowResubmitCloseTime != null) - { - // see if a resubmission close time is set on submission level - resubmitCloseTime = TimeService.newTime(Long.parseLong(allowResubmitCloseTime)); - } - else - { - // otherwise, use assignment close time as the resubmission close time - resubmitCloseTime = a.getCloseTime(); - } - return (allowResubmitNumber > 0 /* additional submission number allowed */ || allowResubmitNumber == -1 /* unlimited submission times allowed */) && resubmitCloseTime != null && currentTime.before(resubmitCloseTime); + + + + int allowResubmitNumber = Integer.parseInt(allowResubmitNumString); + String allowResubmitCloseTime = submission != null ? (String) submission.getProperties().getProperty(AssignmentSubmission.ALLOW_RESUBMIT_CLOSETIME) : null; + Time resubmitCloseTime = null; + + if (allowResubmitCloseTime != null) { + // see if a resubmission close time is set on submission level + resubmitCloseTime = TimeService.newTime(Long.parseLong(allowResubmitCloseTime)); + } else { + // otherwise, use assignment close time as the resubmission close time + resubmitCloseTime = a.getCloseTime(); + } + if (allowResubmitNumber == -1 && currentTime.before(resubmitCloseTime)) { + // unlimitted resubmission + return true; + } else if (allowResubmitNumber > 0) { + + return allowResubmitNumber != 0 && resubmitCloseTime != null && currentTime.before(resubmitCloseTime); + } } catch (NumberFormatException e) { M_log.warn(" canSubmit(String, Assignment) " + e.getMessage() + " allowResubmitNumString=" + allowResubmitNumString); } + } else if (allowResubmitNumString != null) { // there are no submissions but time might still allow for them - check + try { + /* + * This line and 6940 - 6953 were added due to the problem that without a submission (saved draft), student would not be able to continue even if the professor + * extended the date. + */ + String latestAcceptanceTime = (String) submission.getProperties().getProperty(AssignmentSubmission.ALLOW_RESUBMIT_CLOSETIME); + int allowResubmitNumber = Integer.parseInt(allowResubmitNumString); + Time acceptance = TimeService.newTime(Long.parseLong(latestAcceptanceTime)); + if(currentTime.before(acceptance) && (allowResubmitNumber == -1 || allowResubmitNumber > 0)) return true; + } catch (Exception e) { + System.out.println("ASSIGNMENT CANSUBMIT ERROR: "+e.getMessage()+ " while evaluating acceptanceUntil time"); + } } if (submission == null || (submission != null && submission.getTimeSubmitted() == null))