package org.sakaiproject.tool.gradebook.ui.helpers.producers; import java.util.ArrayList; import java.util.List; import javax.servlet.http.HttpServletResponse; import org.sakaiproject.service.gradebook.shared.Assignment; import org.sakaiproject.service.gradebook.shared.GradeDefinition; import org.sakaiproject.service.gradebook.shared.GradebookService; import org.sakaiproject.tool.gradebook.Gradebook; import org.sakaiproject.tool.gradebook.ui.helpers.params.GradeGradebookItemViewParams; import org.sakaiproject.user.api.User; import org.sakaiproject.user.api.UserDirectoryService; import org.sakaiproject.user.api.UserNotDefinedException; import uk.org.ponder.messageutil.MessageLocator; import uk.org.ponder.rsf.components.UICommand; import uk.org.ponder.rsf.components.UIContainer; import uk.org.ponder.rsf.components.UIELBinding; import uk.org.ponder.rsf.components.UIForm; import uk.org.ponder.rsf.components.UIInput; import uk.org.ponder.rsf.components.UIMessage; import uk.org.ponder.rsf.components.UIVerbatim; import uk.org.ponder.rsf.flow.jsfnav.NavigationCase; import uk.org.ponder.rsf.flow.jsfnav.NavigationCaseReporter; import uk.org.ponder.rsf.view.ComponentChecker; import uk.org.ponder.rsf.view.ViewComponentProducer; import uk.org.ponder.rsf.viewstate.SimpleViewParameters; import uk.org.ponder.rsf.viewstate.ViewParameters; import uk.org.ponder.rsf.viewstate.ViewParamsReporter; public class GradeGradebookItemProducer extends HelperAwareProducer implements ViewComponentProducer, ViewParamsReporter, NavigationCaseReporter { public static final String VIEW_ID = "gradeGradebookItem"; public String getViewID() { return VIEW_ID; } private String reqStar = "<span class=\"reqStar\">*</span>"; private MessageLocator messageLocator; public void setMessageLocator(MessageLocator messageLocator) { this.messageLocator = messageLocator; } private UserDirectoryService userDirectoryService; public void setUserDirectoryService(UserDirectoryService userDirectoryService){ this.userDirectoryService = userDirectoryService; } private GradebookService gradebookService; public void setGradebookService(GradebookService gradebookService) { this.gradebookService = gradebookService; } private HttpServletResponse httpServletResponse; public void setHttpServletResponse(HttpServletResponse httpServletResponse) { this.httpServletResponse = httpServletResponse; } public void fillComponents(UIContainer tofill, ViewParameters viewparams, ComponentChecker checker) { GradeGradebookItemViewParams params = (GradeGradebookItemViewParams) viewparams; if (params.contextId == null || params.assignmentId == null || params.userId == null){ //DO something return; } // Firefox absolutely completely refuses to not cache this page for some reason. // Even with the meta's in the HTML. -SWG ASNN-293 httpServletResponse.setHeader("Pragma", "no-cache"); httpServletResponse.setHeader("Cache-Control", "no-cache"); httpServletResponse.setDateHeader("Expires", 0 ); if (!gradebookService.isUserAbleToGradeItemForStudent(params.contextId, params.assignmentId, params.userId)) { UIMessage.make(tofill, "permissions_error", "gradebook.authorizationFailed.permissions_error"); return; } //get Options GradeDefinition gradeDef = gradebookService.getGradeDefinitionForStudentForItem(params.contextId, params.assignmentId, params.userId); Assignment assignment = gradebookService.getAssignment(params.contextId, params.assignmentId); Long gradebookId = ((Gradebook) gradebookService.getGradebook(params.contextId)).getId(); String grade = ""; String comment = ""; int gradeEntryType; if (gradeDef != null) { grade = gradeDef.getGrade(); comment = gradeDef.getGradeComment(); gradeEntryType = gradeDef.getGradeEntryType(); } else { gradeEntryType = gradebookService.getGradeEntryType(params.contextId); } String student_name = ""; try{ User user = userDirectoryService.getUser(params.userId); student_name = user.getDisplayName(); } catch(UserNotDefinedException ex) { return; } UIMessage.make(tofill, "heading", "gradebook.grade-gradebook-item.heading", new Object[]{ assignment.getName(), student_name } ); //Start Form UIForm form = UIForm.make(tofill, "form"); if (gradeEntryType == GradebookService.GRADE_TYPE_POINTS){ UIVerbatim.make(form, "points_label", messageLocator.getMessage("gradebook.grade-gradebook-item.points_label", new Object[]{ reqStar })); UIMessage.make(form, "points_out_of", "gradebook.grade-gradebook-item.points_out_of", new Object[]{ assignment.getPoints()}); } else if (gradeEntryType == GradebookService.GRADE_TYPE_PERCENTAGE){ UIVerbatim.make(form, "points_label", messageLocator.getMessage("gradebook.grade-gradebook-item.percentage_label", new Object[]{ reqStar })); //show percent sign UIMessage.make(form, "percent_sign", "gradebook.grade-gradebook-item.percent_sign"); } else if (gradeEntryType == GradebookService.GRADE_TYPE_LETTER){ UIVerbatim.make(form, "points_label", messageLocator.getMessage("gradebook.grade-gradebook-item.letter_label", new Object[]{ reqStar })); } // add the grade info now. the UIInputs only pass along the parameter info // if there is a change to the value. this gets the old values in there // and then they will be overwritten if there is an input value set form.parameters.add( new UIELBinding("#{AssignmentGradeRecordBean.enteredGrade}", grade)); form.parameters.add( new UIELBinding("#{AssignmentGradeRecordBean.commentText}", comment)); UIInput.make(form, "score", "#{AssignmentGradeRecordBean.enteredGrade}", grade); UIInput.make(form, "commentText", "#{AssignmentGradeRecordBean.commentText}", comment); form.parameters.add( new UIELBinding("#{AssignmentGradeRecordBean.gradebookId}", gradebookId)); form.parameters.add( new UIELBinding("#{AssignmentGradeRecordBean.studentId}", params.userId)); form.parameters.add( new UIELBinding("#{AssignmentGradeRecordBean.assignmentId}", params.assignmentId)); //Action Buttons UICommand.make(form, "submit", UIMessage.make("gradebook.grade-gradebook-item.submit"), "#{AssignmentGradeRecordBean.processActionSubmitGrade}"); UICommand.make(form, "cancel", UIMessage.make("gradebook.grade-gradebook-item.cancel"), "#{AssignmentGradeRecordBean.processActionCancel}"); } public ViewParameters getViewParameters() { return new GradeGradebookItemViewParams(); } public List<NavigationCase> reportNavigationCases() { List<NavigationCase> nav= new ArrayList<NavigationCase>(); nav.add(new NavigationCase("submit", new SimpleViewParameters( FinishedHelperProducer.VIEW_ID))); nav.add(new NavigationCase("cancel", new SimpleViewParameters( FinishedHelperProducer.VIEW_ID))); return nav; } }