/** * Updates a mark's comment, position or bonus * * @param newcomment the new comment * @param newposx the new X coordinate in the page * @param newposy the new Y coordinate in the page * @param newbonus the new bonus */ public void update( final String newcomment, int newposx, int newposy, final int newlevel, final float newbonus, final String newregrademarkercomment, final int newregradeaccepted, int widthPage, int heightPage) { final Mark mark = this; int regradeid = 0; if (mark instanceof RubricMark) regradeid = ((RubricMark) mark).getRegradeid(); // This shouldn't happen so log it for debugging if (this.id == 0) { logger.severe("Fatal error! A comment with id 0!"); return; } EMarkingWeb.markingInterface.addLoading(true); this.setLoading(); final String feedbackToAjax; if (feedback.size() > 0) { feedbackToAjax = getFeedbackToAjax(); } else { feedbackToAjax = ""; } // Call the ajax request to update the data AjaxRequest.ajaxRequest( "action=updcomment&cid=" + this.id + "&posx=" + newposx + "&posy=" + newposy + "&bonus=" + newbonus + "&format=" + this.format + "&levelid=" + newlevel + "®radeid=" + regradeid + "®radeaccepted=" + newregradeaccepted + "®rademarkercomment=" + newregrademarkercomment + "&markerid=" + EMarkingConfiguration.getMarkerId() + "&width=" + this.width + "&height=" + this.height + "&comment=" + URL.encode(newcomment) + "&windowswidth=" + widthPage + "&windowsheight=" + heightPage + feedbackToAjax, new AsyncCallback<AjaxData>() { @Override public void onFailure(Throwable caught) { logger.severe("Error updating mark to Moodle!"); logger.severe(caught.getMessage()); Window.alert(caught.getMessage()); EMarkingWeb.markingInterface.finishLoading(); } @Override public void onSuccess(AjaxData result) { Map<String, String> value = AjaxRequest.getValueFromResult(result); if (!result.getError().equals("")) { Window.alert(result.getError()); setMarkHTML(); removeStyleName(Resources.INSTANCE.css().updating()); EMarkingWeb.markingInterface.finishLoading(); return; } // Parse json values from Moodle long timemodified = Long.parseLong(value.get("timemodified")); float newgrade = Float.parseFloat(value.get("newgrade")); mark.setPreviousText(mark.getRawtext()); mark.setRawtext(newcomment); if (mark instanceof RubricMark) { RubricMark rmark = (RubricMark) mark; // Update submission data int previousLevelid = rmark.getLevelId(); float previousBonus = rmark.getBonus(); rmark.setLevelId(newlevel); rmark.setBonus(newbonus); rmark.setRegradeaccepted(newregradeaccepted); rmark.setRegrademarkercomment(newregrademarkercomment); if (rmark.getLevelId() != previousLevelid || rmark.getBonus() != previousBonus) { rmark.setMarkername( MarkingInterface.submissionData.getMarkerfirstname() + " " + MarkingInterface.submissionData.getMarkerlastname()); rmark.setMarkerid(MarkingInterface.submissionData.getMarkerid()); Mark.showIcons(rmark); } EMarkingWeb.markingInterface .getRubricInterface() .getRubricPanel() .addMarkToRubric(rmark); EMarkingWeb.markingInterface .getRubricInterface() .getRubricPanel() .finishloadingRubricCriterion(newlevel); } // Update the marking interface with the final grade and time EMarkingWeb.markingInterface.setFinalgrade(newgrade, timemodified); setMarkHTML(); EMarkingWeb.markingInterface .getRubricInterface() .getToolsPanel() .getPreviousComments() .addMarkAsCommentToInterface(mark, true); removeStyleName(Resources.INSTANCE.css().updating()); EMarkingWeb.markingInterface.finishLoading(); } }); }