From aac97ddcbfe0c09a4ad5f8153ba458ea375b5704 Mon Sep 17 00:00:00 2001 From: Steve Swinsburg Date: Tue, 13 Mar 2018 22:16:14 +1100 Subject: [PATCH] SAK-34013 add course grade chart to course grade dropdown (#5396) * SAK-34013 add chart as a modal window to the course grade dropdown --- .../GradebookNgApplication.properties | 2 + .../ViewAssignmentStatisticsAction.java | 6 +- .../ViewCourseGradeStatisticsAction.java | 48 ++++++++++ .../tool/component/GbCourseGradeChart.java | 6 ++ .../tool/component/GbGradeTable.html | 1 + .../gradebookng/tool/pages/GradebookPage.html | 1 + .../gradebookng/tool/pages/GradebookPage.java | 87 +++++++++++-------- .../gradebookng/tool/pages/SettingsPage.java | 4 - ...el.html => AssignmentStatisticsPanel.html} | 0 ...el.java => AssignmentStatisticsPanel.java} | 8 +- .../panels/CourseGradeStatisticsPanel.html | 14 +++ .../panels/CourseGradeStatisticsPanel.java | 63 ++++++++++++++ .../panels/SettingsGradingSchemaPanel.java | 2 +- .../webapp/scripts/gradebook-gbgrade-table.js | 7 ++ 14 files changed, 200 insertions(+), 49 deletions(-) create mode 100644 gradebookng/tool/src/java/org/sakaiproject/gradebookng/tool/actions/ViewCourseGradeStatisticsAction.java rename gradebookng/tool/src/java/org/sakaiproject/gradebookng/tool/panels/{GradeStatisticsPanel.html => AssignmentStatisticsPanel.html} (100%) rename gradebookng/tool/src/java/org/sakaiproject/gradebookng/tool/panels/{GradeStatisticsPanel.java => AssignmentStatisticsPanel.java} (97%) create mode 100644 gradebookng/tool/src/java/org/sakaiproject/gradebookng/tool/panels/CourseGradeStatisticsPanel.html create mode 100644 gradebookng/tool/src/java/org/sakaiproject/gradebookng/tool/panels/CourseGradeStatisticsPanel.java diff --git a/gradebookng/tool/src/java/org/sakaiproject/gradebookng/GradebookNgApplication.properties b/gradebookng/tool/src/java/org/sakaiproject/gradebookng/GradebookNgApplication.properties index 6233540e017b..eca020c4ad70 100644 --- a/gradebookng/tool/src/java/org/sakaiproject/gradebookng/GradebookNgApplication.properties +++ b/gradebookng/tool/src/java/org/sakaiproject/gradebookng/GradebookNgApplication.properties @@ -512,6 +512,7 @@ label.statistics.chart.xaxis = Percentage Scored label.statistics.chart.yaxis = Number of Students label.statistics.chart.tooltip = {2} score(s) in {1} range +label.statistics.coursegrade.title = Course Grade Statistics label.statistics.coursegrade.averagegpa = Course Average GPA label.statistics.coursegrade.average = Average grade label.statistics.coursegrade.graded = Total graded students @@ -523,6 +524,7 @@ label.statistics.coursegrade.deviation = Standard deviation coursegrade.option.override = Course Grade Override coursegrade.option.overridelog = Course Grade Override Log coursegrade.option.setungraded = Set Zero Score For Empty Cells +coursegrade.option.viewcoursegradestatistics = View Course Grade Statistics coursegrade.header.menulabel = Open menu for Course Grade column coursegrade.cell.menulabel = Open menu for Course Grade cell diff --git a/gradebookng/tool/src/java/org/sakaiproject/gradebookng/tool/actions/ViewAssignmentStatisticsAction.java b/gradebookng/tool/src/java/org/sakaiproject/gradebookng/tool/actions/ViewAssignmentStatisticsAction.java index 41473341587d..0dcd8e61ed13 100644 --- a/gradebookng/tool/src/java/org/sakaiproject/gradebookng/tool/actions/ViewAssignmentStatisticsAction.java +++ b/gradebookng/tool/src/java/org/sakaiproject/gradebookng/tool/actions/ViewAssignmentStatisticsAction.java @@ -20,7 +20,7 @@ import org.apache.wicket.model.Model; import org.sakaiproject.gradebookng.tool.model.GbModalWindow; import org.sakaiproject.gradebookng.tool.pages.GradebookPage; -import org.sakaiproject.gradebookng.tool.panels.GradeStatisticsPanel; +import org.sakaiproject.gradebookng.tool.panels.AssignmentStatisticsPanel; import java.io.Serializable; @@ -36,9 +36,9 @@ public ActionResponse handleEvent(final JsonNode params, final AjaxRequestTarget final String assignmentId = params.get("assignmentId").asText(); final GradebookPage gradebookPage = (GradebookPage) target.getPage(); - final GbModalWindow window = gradebookPage.getGradeStatisticsWindow(); + final GbModalWindow window = gradebookPage.getAssignmentStatisticsWindow(); window.setAssignmentToReturnFocusTo(assignmentId); - window.setContent(new GradeStatisticsPanel(window.getContentId(), + window.setContent(new AssignmentStatisticsPanel(window.getContentId(), Model.of(Long.valueOf(assignmentId)), window)); window.show(target); diff --git a/gradebookng/tool/src/java/org/sakaiproject/gradebookng/tool/actions/ViewCourseGradeStatisticsAction.java b/gradebookng/tool/src/java/org/sakaiproject/gradebookng/tool/actions/ViewCourseGradeStatisticsAction.java new file mode 100644 index 000000000000..97f20ff36236 --- /dev/null +++ b/gradebookng/tool/src/java/org/sakaiproject/gradebookng/tool/actions/ViewCourseGradeStatisticsAction.java @@ -0,0 +1,48 @@ +/** + * Copyright (c) 2003-2018 The Apereo Foundation + * + * Licensed under the Educational Community License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://opensource.org/licenses/ecl2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.sakaiproject.gradebookng.tool.actions; + +import java.io.Serializable; + +import org.apache.wicket.ajax.AjaxRequestTarget; +import org.apache.wicket.model.Model; +import org.sakaiproject.gradebookng.tool.model.GbModalWindow; +import org.sakaiproject.gradebookng.tool.pages.GradebookPage; +import org.sakaiproject.gradebookng.tool.panels.CourseGradeStatisticsPanel; + +import com.fasterxml.jackson.databind.JsonNode; + +public class ViewCourseGradeStatisticsAction extends InjectableAction implements Serializable { + + private static final long serialVersionUID = 1L; + + public ViewCourseGradeStatisticsAction() { + } + + @Override + public ActionResponse handleEvent(final JsonNode params, final AjaxRequestTarget target) { + + final String siteId = params.get("siteId").asText(); + + final GradebookPage gradebookPage = (GradebookPage) target.getPage(); + final GbModalWindow window = gradebookPage.getGradeLogWindow(); + + window.setContent(new CourseGradeStatisticsPanel(window.getContentId(), Model.of(siteId), window)); + window.show(target); + + return new EmptyOkResponse(); + } +} diff --git a/gradebookng/tool/src/java/org/sakaiproject/gradebookng/tool/component/GbCourseGradeChart.java b/gradebookng/tool/src/java/org/sakaiproject/gradebookng/tool/component/GbCourseGradeChart.java index 708e06530508..e20601637e67 100644 --- a/gradebookng/tool/src/java/org/sakaiproject/gradebookng/tool/component/GbCourseGradeChart.java +++ b/gradebookng/tool/src/java/org/sakaiproject/gradebookng/tool/component/GbCourseGradeChart.java @@ -54,6 +54,12 @@ private String toJson(final Map schema) { @Override public void renderHead(final IHeaderResponse response) { final String version = ServerConfigurationService.getString("portal.cdn.version", ""); + + // chart requires ChartJS + response.render( + JavaScriptHeaderItem.forUrl(String.format("/gradebookng-tool/webjars/chartjs/2.7.0/Chart.min.js?version=%s", version))); + + // our chart functions response.render( JavaScriptHeaderItem.forUrl(String.format("/gradebookng-tool/scripts/gradebook-coursegrade-chart.js?version=%s", version))); diff --git a/gradebookng/tool/src/java/org/sakaiproject/gradebookng/tool/component/GbGradeTable.html b/gradebookng/tool/src/java/org/sakaiproject/gradebookng/tool/component/GbGradeTable.html index 13af5e2fa6a0..712fd0681194 100644 --- a/gradebookng/tool/src/java/org/sakaiproject/gradebookng/tool/component/GbGradeTable.html +++ b/gradebookng/tool/src/java/org/sakaiproject/gradebookng/tool/component/GbGradeTable.html @@ -54,6 +54,7 @@ {/if} +
  • {/if} diff --git a/gradebookng/tool/src/java/org/sakaiproject/gradebookng/tool/pages/GradebookPage.html b/gradebookng/tool/src/java/org/sakaiproject/gradebookng/tool/pages/GradebookPage.html index 3e54a2ecfb57..17046b4110c6 100644 --- a/gradebookng/tool/src/java/org/sakaiproject/gradebookng/tool/pages/GradebookPage.html +++ b/gradebookng/tool/src/java/org/sakaiproject/gradebookng/tool/pages/GradebookPage.html @@ -49,6 +49,7 @@
    +
      diff --git a/gradebookng/tool/src/java/org/sakaiproject/gradebookng/tool/pages/GradebookPage.java b/gradebookng/tool/src/java/org/sakaiproject/gradebookng/tool/pages/GradebookPage.java index 284c870da819..3986d1f42afd 100644 --- a/gradebookng/tool/src/java/org/sakaiproject/gradebookng/tool/pages/GradebookPage.java +++ b/gradebookng/tool/src/java/org/sakaiproject/gradebookng/tool/pages/GradebookPage.java @@ -20,6 +20,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; + import org.apache.commons.lang.StringUtils; import org.apache.wicket.AttributeModifier; import org.apache.wicket.Component; @@ -59,6 +60,7 @@ import org.sakaiproject.gradebookng.tool.actions.ToggleCourseGradePoints; import org.sakaiproject.gradebookng.tool.actions.ViewAssignmentStatisticsAction; import org.sakaiproject.gradebookng.tool.actions.ViewCourseGradeLogAction; +import org.sakaiproject.gradebookng.tool.actions.ViewCourseGradeStatisticsAction; import org.sakaiproject.gradebookng.tool.actions.ViewGradeLogAction; import org.sakaiproject.gradebookng.tool.actions.ViewGradeSummaryAction; import org.sakaiproject.gradebookng.tool.component.GbAjaxButton; @@ -98,9 +100,10 @@ public class GradebookPage extends BasePage { GbModalWindow gradeLogWindow; GbModalWindow gradeCommentWindow; GbModalWindow deleteItemWindow; - GbModalWindow gradeStatisticsWindow; + GbModalWindow assignmentStatisticsWindow; GbModalWindow updateCourseGradeDisplayWindow; GbModalWindow sortGradeItemsWindow; + GbModalWindow courseGradeStatisticsWindow; Label liveGradingFeedback; boolean hasAssignmentsAndGrades; @@ -147,8 +150,8 @@ public GradebookPage() { this.form = new Form<>("form"); add(this.form); - form.add(new AttributeModifier("data-siteid", businessService.getCurrentSiteId())); - form.add(new AttributeModifier("data-gradestimestamp", new Date().getTime())); + this.form.add(new AttributeModifier("data-siteid", this.businessService.getCurrentSiteId())); + this.form.add(new AttributeModifier("data-gradestimestamp", new Date().getTime())); /** * Note that SEMI_TRANSPARENT has a 100% black background and TRANSPARENT is overridden to 10% opacity @@ -178,13 +181,17 @@ public GradebookPage() { this.deleteItemWindow = new GbModalWindow("deleteItemWindow"); this.form.add(this.deleteItemWindow); - this.gradeStatisticsWindow = new GbModalWindow("gradeStatisticsWindow"); - this.gradeStatisticsWindow.setPositionAtTop(true); - this.form.add(this.gradeStatisticsWindow); + this.assignmentStatisticsWindow = new GbModalWindow("gradeStatisticsWindow"); + this.assignmentStatisticsWindow.setPositionAtTop(true); + this.form.add(this.assignmentStatisticsWindow); this.updateCourseGradeDisplayWindow = new GbModalWindow("updateCourseGradeDisplayWindow"); this.form.add(this.updateCourseGradeDisplayWindow); + this.courseGradeStatisticsWindow = new GbModalWindow("courseGradeStatisticsWindow"); + this.courseGradeStatisticsWindow.setPositionAtTop(true); + this.form.add(this.courseGradeStatisticsWindow); + final GbAjaxButton addGradeItem = new GbAjaxButton("addGradeItem") { @Override public void onSubmit(final AjaxRequestTarget target, final Form form) { @@ -220,7 +227,7 @@ public boolean isVisible() { final List assignments = this.businessService.getGradebookAssignments(sortBy); final List students = this.businessService.getGradeableUsers(); - hasAssignmentsAndGrades = !assignments.isEmpty() && !students.isEmpty(); + this.hasAssignmentsAndGrades = !assignments.isEmpty() && !students.isEmpty(); // categories enabled? final boolean categoriesEnabled = this.businessService.categoriesAreEnabled(); @@ -243,31 +250,33 @@ public boolean isVisible() { final WebMarkupContainer toggleGradeItemsToolbarItem = new WebMarkupContainer("toggleGradeItemsToolbarItem"); toolbar.add(toggleGradeItemsToolbarItem); - gradeTable = new GbGradeTable("gradeTable", + this.gradeTable = new GbGradeTable("gradeTable", new LoadableDetachableModel() { @Override public GbGradeTableData load() { - return new GbGradeTableData(businessService, settings); + return new GbGradeTableData(GradebookPage.this.businessService, settings); } }); - gradeTable.addEventListener("setScore", new GradeUpdateAction()); - gradeTable.addEventListener("viewLog", new ViewGradeLogAction()); - gradeTable.addEventListener("editAssignment", new EditAssignmentAction()); - gradeTable.addEventListener("viewStatistics", new ViewAssignmentStatisticsAction()); - gradeTable.addEventListener("overrideCourseGrade", new OverrideCourseGradeAction()); - gradeTable.addEventListener("editComment", new EditCommentAction()); - gradeTable.addEventListener("viewGradeSummary", new ViewGradeSummaryAction()); - gradeTable.addEventListener("setZeroScore", new SetZeroScoreAction()); - gradeTable.addEventListener("viewCourseGradeLog", new ViewCourseGradeLogAction()); - gradeTable.addEventListener("deleteAssignment", new DeleteAssignmentAction()); - gradeTable.addEventListener("setUngraded", new SetScoreForUngradedAction()); - gradeTable.addEventListener("setStudentNameOrder", new SetStudentNameOrderAction()); - gradeTable.addEventListener("toggleCourseGradePoints", new ToggleCourseGradePoints()); - gradeTable.addEventListener("editSettings", new EditSettingsAction()); - gradeTable.addEventListener("moveAssignmentLeft", new MoveAssignmentLeftAction()); - gradeTable.addEventListener("moveAssignmentRight", new MoveAssignmentRightAction()); - - this.form.add(gradeTable); + this.gradeTable.addEventListener("setScore", new GradeUpdateAction()); + this.gradeTable.addEventListener("viewLog", new ViewGradeLogAction()); + this.gradeTable.addEventListener("editAssignment", new EditAssignmentAction()); + this.gradeTable.addEventListener("viewStatistics", new ViewAssignmentStatisticsAction()); + this.gradeTable.addEventListener("overrideCourseGrade", new OverrideCourseGradeAction()); + this.gradeTable.addEventListener("editComment", new EditCommentAction()); + this.gradeTable.addEventListener("viewGradeSummary", new ViewGradeSummaryAction()); + this.gradeTable.addEventListener("setZeroScore", new SetZeroScoreAction()); + this.gradeTable.addEventListener("viewCourseGradeLog", new ViewCourseGradeLogAction()); + this.gradeTable.addEventListener("deleteAssignment", new DeleteAssignmentAction()); + this.gradeTable.addEventListener("setUngraded", new SetScoreForUngradedAction()); + this.gradeTable.addEventListener("setStudentNameOrder", new SetStudentNameOrderAction()); + this.gradeTable.addEventListener("toggleCourseGradePoints", new ToggleCourseGradePoints()); + this.gradeTable.addEventListener("editSettings", new EditSettingsAction()); + this.gradeTable.addEventListener("moveAssignmentLeft", new MoveAssignmentLeftAction()); + this.gradeTable.addEventListener("moveAssignmentRight", new MoveAssignmentRightAction()); + this.gradeTable.addEventListener("viewCourseGradeStatistics", new ViewCourseGradeStatisticsAction()); + + + this.form.add(this.gradeTable); final Button toggleCategoriesToolbarItem = new Button("toggleCategoriesToolbarItem") { @Override @@ -297,10 +306,10 @@ public boolean isVisible() { final GbAjaxLink sortGradeItemsToolbarItem = new GbAjaxLink("sortGradeItemsToolbarItem") { @Override - public void onClick(AjaxRequestTarget target) { - GbModalWindow window = GradebookPage.this.getSortGradeItemsWindow(); + public void onClick(final AjaxRequestTarget target) { + final GbModalWindow window = GradebookPage.this.getSortGradeItemsWindow(); - Map model = new HashMap<>(); + final Map model = new HashMap<>(); model.put("categoriesEnabled", categoriesEnabled); model.put("settings", settings); @@ -400,7 +409,7 @@ protected void onUpdate(final AjaxRequestTarget target) { groupFilter.setVisible(false); } - WebMarkupContainer studentFilter = new WebMarkupContainer("studentFilter"); + final WebMarkupContainer studentFilter = new WebMarkupContainer("studentFilter"); studentFilter.setVisible(this.hasAssignmentsAndGrades); toolbar.add(studentFilter); @@ -425,7 +434,7 @@ protected void onUpdate(final AjaxRequestTarget target) { toolbar.setVisible(!assignments.isEmpty()); // Show the table if there are grade items - gradeTable.setVisible(!assignments.isEmpty()); + this.gradeTable.setVisible(!assignments.isEmpty()); stopwatch.time("Gradebook page done", stopwatch.getTime()); } @@ -459,8 +468,8 @@ public GbModalWindow getDeleteItemWindow() { return this.deleteItemWindow; } - public GbModalWindow getGradeStatisticsWindow() { - return this.gradeStatisticsWindow; + public GbModalWindow getAssignmentStatisticsWindow() { + return this.assignmentStatisticsWindow; } public GbModalWindow getUpdateCourseGradeDisplayWindow() { @@ -471,6 +480,10 @@ public GbModalWindow getSortGradeItemsWindow() { return this.sortGradeItemsWindow; } + public GbModalWindow getCourseGradeStatisticsWindow() { + return this.courseGradeStatisticsWindow; + } + /** * Getter for the GradebookUiSettings. Used to store a few UI related settings for the current session only. * @@ -553,7 +566,7 @@ public void onBeforeRender() { this.liveGradingFeedback = new Label("liveGradingFeedback", getString("feedback.saved")); this.liveGradingFeedback.setVisible(this.hasAssignmentsAndGrades); this.liveGradingFeedback.setOutputMarkupId(true); - liveGradingFeedback.add(DISPLAY_NONE); + this.liveGradingFeedback.add(DISPLAY_NONE); // add the 'saving...' message to the DOM as the JavaScript will // need to be the one that displays this message (Wicket will handle @@ -564,8 +577,8 @@ public void onBeforeRender() { public Component updateLiveGradingMessage(final String message) { this.liveGradingFeedback.setDefaultModel(Model.of(message)); - if (liveGradingFeedback.getBehaviors().contains(DISPLAY_NONE)) { - liveGradingFeedback.remove(DISPLAY_NONE); + if (this.liveGradingFeedback.getBehaviors().contains(DISPLAY_NONE)) { + this.liveGradingFeedback.remove(DISPLAY_NONE); } return this.liveGradingFeedback; } diff --git a/gradebookng/tool/src/java/org/sakaiproject/gradebookng/tool/pages/SettingsPage.java b/gradebookng/tool/src/java/org/sakaiproject/gradebookng/tool/pages/SettingsPage.java index 82fe2d3359a4..65ed2683ad7f 100644 --- a/gradebookng/tool/src/java/org/sakaiproject/gradebookng/tool/pages/SettingsPage.java +++ b/gradebookng/tool/src/java/org/sakaiproject/gradebookng/tool/pages/SettingsPage.java @@ -272,10 +272,6 @@ public void renderHead(final IHeaderResponse response) { response.render( JavaScriptHeaderItem.forUrl(String.format("/library/webjars/jquery-ui/1.12.1/jquery-ui.min.js?version=%s", version))); - // chart requires ChartJS - response.render( - JavaScriptHeaderItem.forUrl(String.format("/gradebookng-tool/webjars/chartjs/2.7.0/Chart.min.js?version=%s", version))); - response.render(CssHeaderItem.forUrl(String.format("/gradebookng-tool/styles/gradebook-settings.css?version=%s", version))); response.render(JavaScriptHeaderItem.forUrl(String.format("/gradebookng-tool/scripts/gradebook-settings.js?version=%s", version))); diff --git a/gradebookng/tool/src/java/org/sakaiproject/gradebookng/tool/panels/GradeStatisticsPanel.html b/gradebookng/tool/src/java/org/sakaiproject/gradebookng/tool/panels/AssignmentStatisticsPanel.html similarity index 100% rename from gradebookng/tool/src/java/org/sakaiproject/gradebookng/tool/panels/GradeStatisticsPanel.html rename to gradebookng/tool/src/java/org/sakaiproject/gradebookng/tool/panels/AssignmentStatisticsPanel.html diff --git a/gradebookng/tool/src/java/org/sakaiproject/gradebookng/tool/panels/GradeStatisticsPanel.java b/gradebookng/tool/src/java/org/sakaiproject/gradebookng/tool/panels/AssignmentStatisticsPanel.java similarity index 97% rename from gradebookng/tool/src/java/org/sakaiproject/gradebookng/tool/panels/GradeStatisticsPanel.java rename to gradebookng/tool/src/java/org/sakaiproject/gradebookng/tool/panels/AssignmentStatisticsPanel.java index b6740a8a3462..58f75d4180fd 100644 --- a/gradebookng/tool/src/java/org/sakaiproject/gradebookng/tool/panels/GradeStatisticsPanel.java +++ b/gradebookng/tool/src/java/org/sakaiproject/gradebookng/tool/panels/AssignmentStatisticsPanel.java @@ -47,14 +47,14 @@ import org.sakaiproject.service.gradebook.shared.Assignment; import org.sakaiproject.service.gradebook.shared.GradingType; -public class GradeStatisticsPanel extends BasePanel { +public class AssignmentStatisticsPanel extends BasePanel { private static final long serialVersionUID = 1L; private final ModalWindow window; private final GradingType gradingType; - public GradeStatisticsPanel(final String id, final IModel model, final ModalWindow window) { + public AssignmentStatisticsPanel(final String id, final IModel model, final ModalWindow window) { super(id, model); this.window = window; this.gradingType = GradingType.valueOf(this.businessService.getGradebook().getGrade_type()); @@ -68,7 +68,7 @@ public void onInitialize() { final Assignment assignment = this.businessService.getAssignment(assignmentId.longValue()); - GradeStatisticsPanel.this.window.setTitle( + AssignmentStatisticsPanel.this.window.setTitle( (new StringResourceModel("label.statistics.title", null, new Object[] { assignment.getName() }).getString())); @@ -200,7 +200,7 @@ public void onInitialize() { @Override public void onClick(final AjaxRequestTarget target) { - GradeStatisticsPanel.this.window.close(target); + AssignmentStatisticsPanel.this.window.close(target); } }); } diff --git a/gradebookng/tool/src/java/org/sakaiproject/gradebookng/tool/panels/CourseGradeStatisticsPanel.html b/gradebookng/tool/src/java/org/sakaiproject/gradebookng/tool/panels/CourseGradeStatisticsPanel.html new file mode 100644 index 000000000000..a77d662f85cc --- /dev/null +++ b/gradebookng/tool/src/java/org/sakaiproject/gradebookng/tool/panels/CourseGradeStatisticsPanel.html @@ -0,0 +1,14 @@ + + + + + + + + +
      + +
      +
      + + diff --git a/gradebookng/tool/src/java/org/sakaiproject/gradebookng/tool/panels/CourseGradeStatisticsPanel.java b/gradebookng/tool/src/java/org/sakaiproject/gradebookng/tool/panels/CourseGradeStatisticsPanel.java new file mode 100644 index 000000000000..91b95c67237d --- /dev/null +++ b/gradebookng/tool/src/java/org/sakaiproject/gradebookng/tool/panels/CourseGradeStatisticsPanel.java @@ -0,0 +1,63 @@ +/** + * Copyright (c) 2003-2018 The Apereo Foundation + * + * Licensed under the Educational Community License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://opensource.org/licenses/ecl2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.sakaiproject.gradebookng.tool.panels; + +import org.apache.wicket.ajax.AjaxRequestTarget; +import org.apache.wicket.extensions.ajax.markup.html.modal.ModalWindow; +import org.apache.wicket.model.IModel; +import org.apache.wicket.model.Model; +import org.apache.wicket.model.ResourceModel; +import org.sakaiproject.gradebookng.tool.component.GbAjaxLink; +import org.sakaiproject.gradebookng.tool.component.GbCourseGradeChart; + +/** + * Renders the course grade graph in a modal window + */ +public class CourseGradeStatisticsPanel extends BasePanel { + + private static final long serialVersionUID = 1L; + + private final ModalWindow window; + + public CourseGradeStatisticsPanel(final String id, final IModel model, final ModalWindow window) { + super(id, model); + this.window = window; + } + + @SuppressWarnings("unchecked") + @Override + public void onInitialize() { + super.onInitialize(); + + final String siteId = ((Model) getDefaultModel()).getObject(); + + CourseGradeStatisticsPanel.this.window.setTitle(new ResourceModel("label.statistics.coursegrade.title")); + + final GbCourseGradeChart chart = new GbCourseGradeChart("gradingSchemaChart", siteId); + add(chart); + + add(new GbAjaxLink("done") { + private static final long serialVersionUID = 1L; + + @Override + public void onClick(final AjaxRequestTarget target) { + CourseGradeStatisticsPanel.this.window.close(target); + } + }); + } + + +} \ No newline at end of file diff --git a/gradebookng/tool/src/java/org/sakaiproject/gradebookng/tool/panels/SettingsGradingSchemaPanel.java b/gradebookng/tool/src/java/org/sakaiproject/gradebookng/tool/panels/SettingsGradingSchemaPanel.java index 039697c2ad79..5674f60f37c8 100644 --- a/gradebookng/tool/src/java/org/sakaiproject/gradebookng/tool/panels/SettingsGradingSchemaPanel.java +++ b/gradebookng/tool/src/java/org/sakaiproject/gradebookng/tool/panels/SettingsGradingSchemaPanel.java @@ -706,7 +706,7 @@ private void refreshCourseGradeChart(final AjaxRequestTarget target) { this.duplicateEntries.setVisible(SettingsHelper.hasDuplicates(schemaList)); target.add(this.duplicateEntries); - // refresh the cahrt + // refresh the chart Map schemaMap = SettingsHelper.asMap(schemaList); schemaMap = GradeMappingDefinition.sortGradeMapping(schemaMap); this.chart.refresh(target, schemaMap); diff --git a/gradebookng/tool/src/webapp/scripts/gradebook-gbgrade-table.js b/gradebookng/tool/src/webapp/scripts/gradebook-gbgrade-table.js index 4b89ac31948f..be5fa19223ee 100644 --- a/gradebookng/tool/src/webapp/scripts/gradebook-gbgrade-table.js +++ b/gradebookng/tool/src/webapp/scripts/gradebook-gbgrade-table.js @@ -1072,6 +1072,13 @@ GbGradeTable.renderTable = function (elementId, tableData) { var col = GbGradeTable.instance.view.settings.columns[colIndex]._data_; $togglePanel.find('.gb-item-category-score-filter :checkbox[value="'+col.categoryName+'"]').trigger('click'); } + }). + // View Course Grade Statistics + on("click", ".gb-dropdown-menu .gb-view-course-grade-statistics", function() { + GbGradeTable.ajax({ + action: 'viewCourseGradeStatistics', + siteId: GbGradeTable.container.data("siteid") + }); }); GbGradeTable.setupToggleGradeItems();