Skip to content

Commit 0643fdc

Browse files
authored
SAK-41222: GradebookNG > new sakai.property to disable 'Display Final Grades to Students' (sakaiproject#6485)
1 parent 0f8a5b7 commit 0643fdc

File tree

20 files changed

+103
-44
lines changed

20 files changed

+103
-44
lines changed

config/configuration/bundles/src/bundle/org/sakaiproject/config/bundle/default.sakai.properties

+4
Original file line numberDiff line numberDiff line change
@@ -1843,6 +1843,10 @@
18431843
# DEFAULT: true (visibile)
18441844
# gradebookng.showSetZeroScore=false
18451845

1846+
# SAK-41222: control the ability for users to enable displaying course grades to students.
1847+
# DEFAULT: true
1848+
# gradebookng.showDisplayCourseGradeToStudent=false
1849+
18461850
# ASSIGNMENT 1
18471851
# Allows an instructor or any user with assignments management permissions to submit the assignment on behalf of a student
18481852
# who has no submission yet (via the View Assignment list by student)

edu-services/gradebook-service/impl/src/java/org/sakaiproject/component/gradebook/GradebookServiceHibernateImpl.java

+5-3
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@
4848
import org.hibernate.StaleObjectStateException;
4949
import org.hibernate.criterion.Restrictions;
5050
import org.sakaiproject.authz.cover.SecurityService;
51-
import org.sakaiproject.component.cover.ServerConfigurationService;
51+
import org.sakaiproject.component.api.ServerConfigurationService;
5252
import org.sakaiproject.hibernate.HibernateCriterionUtils;
5353
import org.sakaiproject.rubrics.logic.RubricsService;
5454
import org.sakaiproject.section.api.coursemanagement.CourseSection;
@@ -107,6 +107,9 @@ public class GradebookServiceHibernateImpl extends BaseHibernateManager implemen
107107
private GradebookPermissionService gradebookPermissionService;
108108
protected SiteService siteService;
109109

110+
@Setter
111+
protected ServerConfigurationService serverConfigService;
112+
110113
@Getter @Setter
111114
private RubricsService rubricsService;
112115
@Override
@@ -3274,8 +3277,7 @@ public void updateGradebookSettings(final String gradebookUid, final GradebookIn
32743277
});
32753278

32763279
// set grade type, but only if sakai.property is true OR user is admin
3277-
final boolean gradeTypeAvailForNonAdmins = ServerConfigurationService.getBoolean("gradebook.settings.gradeEntry.showToNonAdmins",
3278-
true);
3280+
final boolean gradeTypeAvailForNonAdmins = serverConfigService.getBoolean("gradebook.settings.gradeEntry.showToNonAdmins", true);
32793281
if (gradeTypeAvailForNonAdmins || SecurityService.isSuperUser()) {
32803282
gradebook.setGrade_type(gbInfo.getGradeType());
32813283
}

edu-services/gradebook-service/sakai-pack/src/webapp/WEB-INF/components.xml

+1
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,7 @@
8787
<property name="siteService">
8888
<ref bean="org.sakaiproject.site.api.SiteService" />
8989
</property>
90+
<property name="serverConfigService" ref="org.sakaiproject.component.api.ServerConfigurationService" />
9091
<property name="rubricsService" ref="org.sakaiproject.rubrics.logic.RubricsService" />
9192
</bean>
9293
<bean id="org_sakaiproject_service_gradebook_GradebookPermissionServiceTarget"

gradebookng/tool/src/java/org/sakaiproject/gradebookng/business/GradebookNgBusinessService.java

+4
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@
4242
import org.sakaiproject.authz.api.SecurityAdvisor;
4343
import org.sakaiproject.authz.api.SecurityAdvisor.SecurityAdvice;
4444
import org.sakaiproject.authz.api.SecurityService;
45+
import org.sakaiproject.component.api.ServerConfigurationService;
4546
import org.sakaiproject.component.cover.ComponentManager;
4647
import org.sakaiproject.section.api.coursemanagement.CourseSection;
4748
import org.sakaiproject.section.api.facade.Role;
@@ -119,6 +120,9 @@ public class GradebookNgBusinessService {
119120
@Setter
120121
private UserDirectoryService userDirectoryService;
121122

123+
@Setter
124+
private ServerConfigurationService serverConfigService;
125+
122126
@Setter
123127
private ToolManager toolManager;
124128

gradebookng/tool/src/java/org/sakaiproject/gradebookng/business/importExport/CommentValidator.java

+6-2
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,9 @@
1818
import java.util.List;
1919

2020
import org.apache.commons.lang.StringUtils;
21+
import org.apache.wicket.spring.injection.annot.SpringBean;
22+
import org.sakaiproject.component.api.ServerConfigurationService;
2123

22-
import org.sakaiproject.component.cover.ServerConfigurationService;
2324
import org.sakaiproject.gradebookng.business.model.ImportedCell;
2425
import org.sakaiproject.gradebookng.business.model.ImportedColumn;
2526
import org.sakaiproject.gradebookng.business.model.ImportedColumn.Type;
@@ -32,11 +33,14 @@
3233
*/
3334
public class CommentValidator
3435
{
36+
@SpringBean(name = "org.sakaiproject.component.api.ServerConfigurationService")
37+
protected static ServerConfigurationService serverConfigService;
38+
3539
private CommentValidationReport report;
3640

3741
private static final String SAK_PROP_MAX_COMMENT_LENGTH = "gradebookng.maxCommentLength";
3842
private static final int SAK_PROP_MAX_COMMENT_LENGTH_DEFAULT = 20000;
39-
public static final int MAX_COMMENT_LENGTH = ServerConfigurationService.getInt(SAK_PROP_MAX_COMMENT_LENGTH, SAK_PROP_MAX_COMMENT_LENGTH_DEFAULT);
43+
public static final int MAX_COMMENT_LENGTH = serverConfigService.getInt(SAK_PROP_MAX_COMMENT_LENGTH, SAK_PROP_MAX_COMMENT_LENGTH_DEFAULT);
4044

4145
/**
4246
* Validate the comments contained within the list of imported rows.

gradebookng/tool/src/java/org/sakaiproject/gradebookng/tool/chart/BaseChart.java

+6-2
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,8 @@
55
import org.apache.wicket.markup.head.OnLoadHeaderItem;
66
import org.apache.wicket.markup.html.WebComponent;
77
import org.apache.wicket.spring.injection.annot.SpringBean;
8-
import org.sakaiproject.component.cover.ServerConfigurationService;
8+
9+
import org.sakaiproject.component.api.ServerConfigurationService;
910
import org.sakaiproject.gradebookng.business.GradebookNgBusinessService;
1011
import org.sakaiproject.gradebookng.tool.model.GbChartData;
1112

@@ -24,6 +25,9 @@ public abstract class BaseChart extends WebComponent {
2425

2526
private static final long serialVersionUID = 1L;
2627

28+
@SpringBean(name = "org.sakaiproject.component.api.ServerConfigurationService")
29+
protected ServerConfigurationService serverConfigService;
30+
2731
@SpringBean(name = "org.sakaiproject.gradebookng.business.GradebookNgBusinessService")
2832
protected transient GradebookNgBusinessService businessService;
2933

@@ -34,7 +38,7 @@ public BaseChart(final String id) {
3438

3539
@Override
3640
public void renderHead(final IHeaderResponse response) {
37-
final String version = ServerConfigurationService.getString("portal.cdn.version", "");
41+
final String version = serverConfigService.getString("portal.cdn.version", "");
3842

3943
// chart requires ChartJS
4044
response.render(

gradebookng/tool/src/java/org/sakaiproject/gradebookng/tool/component/GbGradeTable.java

+14-13
Original file line numberDiff line numberDiff line change
@@ -16,36 +16,37 @@
1616
package org.sakaiproject.gradebookng.tool.component;
1717

1818
import java.io.IOException;
19+
import java.util.HashMap;
20+
import java.util.Map;
21+
22+
import com.fasterxml.jackson.databind.ObjectMapper;
23+
import com.fasterxml.jackson.databind.JsonNode;
1924

20-
import org.apache.wicket.Component;
2125
import org.apache.wicket.ajax.AjaxEventBehavior;
2226
import org.apache.wicket.ajax.AjaxRequestTarget;
2327
import org.apache.wicket.ajax.attributes.AjaxRequestAttributes;
28+
import org.apache.wicket.Component;
2429
import org.apache.wicket.markup.html.IHeaderContributor;
2530
import org.apache.wicket.markup.html.WebMarkupContainer;
2631
import org.apache.wicket.markup.head.CssHeaderItem;
2732
import org.apache.wicket.markup.head.IHeaderResponse;
2833
import org.apache.wicket.markup.head.JavaScriptHeaderItem;
2934
import org.apache.wicket.markup.head.OnDomReadyHeaderItem;
3035
import org.apache.wicket.markup.html.panel.Panel;
31-
3236
import org.apache.wicket.model.IModel;
33-
import org.sakaiproject.gradebookng.tool.model.GbGradeTableData;
34-
import org.sakaiproject.component.cover.ServerConfigurationService;
37+
import org.apache.wicket.spring.injection.annot.SpringBean;
3538

36-
import com.fasterxml.jackson.databind.ObjectMapper;
37-
import com.fasterxml.jackson.databind.JsonNode;
38-
39-
import java.util.Map;
40-
import org.sakaiproject.gradebookng.tool.model.GbGradebookData;
39+
import org.sakaiproject.component.api.ServerConfigurationService;
4140
import org.sakaiproject.gradebookng.tool.actions.Action;
42-
import java.util.HashMap;
4341
import org.sakaiproject.gradebookng.tool.actions.ActionResponse;
44-
import org.sakaiproject.gradebookng.tool.model.GradebookUiSettings;
45-
import org.sakaiproject.gradebookng.tool.pages.GradebookPage;
42+
import org.sakaiproject.gradebookng.tool.model.GbGradeTableData;
43+
import org.sakaiproject.gradebookng.tool.model.GbGradebookData;
4644

4745
public class GbGradeTable extends Panel implements IHeaderContributor {
4846

47+
@SpringBean(name = "org.sakaiproject.component.api.ServerConfigurationService")
48+
protected ServerConfigurationService serverConfigService;
49+
4950
private Component component;
5051

5152
/*
@@ -106,7 +107,7 @@ protected void onEvent(final AjaxRequestTarget target) {
106107
public void renderHead(final IHeaderResponse response) {
107108
final GbGradeTableData gbGradeTableData = (GbGradeTableData) getDefaultModelObject();
108109

109-
final String version = ServerConfigurationService.getString("portal.cdn.version", "");
110+
final String version = serverConfigService.getString("portal.cdn.version", "");
110111

111112
response.render(
112113
JavaScriptHeaderItem.forUrl(String.format("/gradebookng-tool/scripts/gradebook-gbgrade-table.js?version=%s", version)));

gradebookng/tool/src/java/org/sakaiproject/gradebookng/tool/pages/BasePage.java

+5-2
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@
3535
import org.apache.wicket.model.Model;
3636
import org.apache.wicket.request.mapper.parameter.PageParameters;
3737
import org.apache.wicket.spring.injection.annot.SpringBean;
38-
import org.sakaiproject.component.cover.ServerConfigurationService;
38+
import org.sakaiproject.component.api.ServerConfigurationService;
3939
import org.sakaiproject.gradebookng.business.GbRole;
4040
import org.sakaiproject.gradebookng.business.GradebookNgBusinessService;
4141
import org.sakaiproject.gradebookng.business.exception.GbAccessDeniedException;
@@ -61,6 +61,9 @@ public class BasePage extends WebPage {
6161
@SpringBean(name = "org.sakaiproject.rubrics.logic.RubricsService")
6262
protected RubricsService rubricsService;
6363

64+
@SpringBean(name = "org.sakaiproject.component.api.ServerConfigurationService")
65+
protected ServerConfigurationService serverConfigService;
66+
6467
Link<Void> gradebookPageLink;
6568
Link<Void> settingsPageLink;
6669
Link<Void> importExportPageLink;
@@ -199,7 +202,7 @@ public void clearFeedback() {
199202
public void renderHead(final IHeaderResponse response) {
200203
super.renderHead(response);
201204

202-
final String version = ServerConfigurationService.getString("portal.cdn.version", "");
205+
final String version = serverConfigService.getString("portal.cdn.version", "");
203206

204207
// get the Sakai skin header fragment from the request attribute
205208
final HttpServletRequest request = (HttpServletRequest) getRequest().getContainerRequest();

gradebookng/tool/src/java/org/sakaiproject/gradebookng/tool/pages/ErrorPage.java

+1-3
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,6 @@
2222
import org.apache.wicket.markup.html.basic.Label;
2323
import org.apache.wicket.model.StringResourceModel;
2424

25-
import org.sakaiproject.component.cover.ServerConfigurationService;
26-
2725
/**
2826
* Page displayed when an internal error occurred.
2927
*
@@ -55,7 +53,7 @@ public ErrorPage(final Exception e) {
5553
add(error);
5654

5755
// Display the stack trace only if the application is configured to do so
58-
boolean showStackTraces = ServerConfigurationService.getBoolean(SAK_PROP_PORTAL_SHOW_ERROR, SAK_PROP_PORTAL_SHOW_ERROR_DEFAULT);
56+
boolean showStackTraces = serverConfigService.getBoolean(SAK_PROP_PORTAL_SHOW_ERROR, SAK_PROP_PORTAL_SHOW_ERROR_DEFAULT);
5957
Label trace = new Label("stacktrace", stacktrace);
6058
if (!showStackTraces && !businessService.isSuperUser()) {
6159
trace.setVisible(false);

gradebookng/tool/src/java/org/sakaiproject/gradebookng/tool/pages/GradebookPage.java

+1-2
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,6 @@
4343
import org.apache.wicket.model.LoadableDetachableModel;
4444
import org.apache.wicket.model.Model;
4545
import org.apache.wicket.util.string.StringValue;
46-
import org.sakaiproject.component.cover.ServerConfigurationService;
4746
import org.sakaiproject.gradebookng.business.GbRole;
4847
import org.sakaiproject.gradebookng.business.model.GbGroup;
4948
import org.sakaiproject.gradebookng.business.util.GbStopWatch;
@@ -561,7 +560,7 @@ public void setUiSettings(final GradebookUiSettings settings) {
561560
public void renderHead(final IHeaderResponse response) {
562561
super.renderHead(response);
563562

564-
final String version = ServerConfigurationService.getString("portal.cdn.version", "");
563+
final String version = serverConfigService.getString("portal.cdn.version", "");
565564

566565
// Drag and Drop/Date Picker (requires jQueryUI)
567566
response.render(JavaScriptHeaderItem

gradebookng/tool/src/java/org/sakaiproject/gradebookng/tool/pages/ImportExportPage.java

+1-2
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@
2424
import org.apache.wicket.markup.head.JavaScriptHeaderItem;
2525
import org.apache.wicket.markup.html.WebMarkupContainer;
2626

27-
import org.sakaiproject.component.cover.ServerConfigurationService;
2827
import org.sakaiproject.gradebookng.tool.component.GbFeedbackPanel;
2928
import org.sakaiproject.gradebookng.tool.panels.importExport.GradeImportUploadStep;
3029

@@ -73,7 +72,7 @@ public ImportExportPage() {
7372
public void renderHead(final IHeaderResponse response) {
7473
super.renderHead(response);
7574

76-
final String version = ServerConfigurationService.getString("portal.cdn.version", "");
75+
final String version = serverConfigService.getString("portal.cdn.version", "");
7776

7877
// Include Sakai Date Picker
7978
response.render(JavaScriptHeaderItem.forUrl(String.format("/library/webjars/jquery-ui/1.12.1/jquery-ui.min.js?version=%s", version)));

gradebookng/tool/src/java/org/sakaiproject/gradebookng/tool/pages/PermissionsPage.java

+1-2
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,6 @@
4242
import org.apache.wicket.model.ResourceModel;
4343
import org.apache.wicket.model.StringResourceModel;
4444
import org.apache.wicket.request.mapper.parameter.PageParameters;
45-
import org.sakaiproject.component.cover.ServerConfigurationService;
4645
import org.sakaiproject.gradebookng.business.model.GbGroup;
4746
import org.sakaiproject.gradebookng.business.model.GbUser;
4847
import org.sakaiproject.gradebookng.tool.component.GbAjaxButton;
@@ -517,7 +516,7 @@ public PermissionsPageModel() {
517516
public void renderHead(final IHeaderResponse response) {
518517
super.renderHead(response);
519518

520-
final String version = ServerConfigurationService.getString("portal.cdn.version", "");
519+
final String version = serverConfigService.getString("portal.cdn.version", "");
521520

522521
response.render(CssHeaderItem.forUrl(String.format("/gradebookng-tool/styles/gradebook-permissions.css?version=%s", version)));
523522
}

gradebookng/tool/src/java/org/sakaiproject/gradebookng/tool/pages/SettingsPage.java

+2-3
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@
2727
import org.apache.wicket.markup.html.form.Button;
2828
import org.apache.wicket.markup.html.form.Form;
2929
import org.apache.wicket.model.CompoundPropertyModel;
30-
import org.sakaiproject.component.cover.ServerConfigurationService;
3130
import org.sakaiproject.gradebookng.business.GbCategoryType;
3231
import org.sakaiproject.gradebookng.business.util.SettingsHelper;
3332
import org.sakaiproject.gradebookng.tool.component.GbAjaxLink;
@@ -85,7 +84,7 @@ public SettingsPage(final boolean gradeEntryExpanded, final boolean gradeRelease
8584
}
8685

8786
private void setShowGradeEntryToNonAdmins() {
88-
this.showGradeEntryToNonAdmins = ServerConfigurationService.getBoolean(SAK_PROP_SHOW_GRADE_ENTRY_TO_NON_ADMINS, SAK_PROP_SHOW_GRADE_ENTRY_TO_NON_ADMINS_DEFAULT);
87+
this.showGradeEntryToNonAdmins = serverConfigService.getBoolean(SAK_PROP_SHOW_GRADE_ENTRY_TO_NON_ADMINS, SAK_PROP_SHOW_GRADE_ENTRY_TO_NON_ADMINS_DEFAULT);
8988
}
9089

9190
@Override
@@ -272,7 +271,7 @@ public void onClick(final AjaxRequestTarget target) {
272271
public void renderHead(final IHeaderResponse response) {
273272
super.renderHead(response);
274273

275-
final String version = ServerConfigurationService.getString("portal.cdn.version", "");
274+
final String version = serverConfigService.getString("portal.cdn.version", "");
276275

277276
// Drag and Drop (requires jQueryUI)
278277
response.render(

gradebookng/tool/src/java/org/sakaiproject/gradebookng/tool/pages/StudentPage.java

+1-2
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@
2525
import org.apache.wicket.markup.html.form.HiddenField;
2626
import org.apache.wicket.model.Model;
2727
import org.apache.wicket.model.StringResourceModel;
28-
import org.sakaiproject.component.cover.ServerConfigurationService;
2928
import org.sakaiproject.gradebookng.business.GbRole;
3029
import org.sakaiproject.gradebookng.business.util.EventHelper;
3130
import org.sakaiproject.gradebookng.tool.panels.StudentGradeSummaryGradesPanel;
@@ -68,7 +67,7 @@ public StudentPage() {
6867
public void renderHead(final IHeaderResponse response) {
6968
super.renderHead(response);
7069

71-
final String version = ServerConfigurationService.getString("portal.cdn.version", "");
70+
final String version = serverConfigService.getString("portal.cdn.version", "");
7271

7372
// tablesorted used by student grade summary
7473
response.render(JavaScriptHeaderItem.forScript("includeWebjarLibrary('jquery.tablesorter')", null));

gradebookng/tool/src/java/org/sakaiproject/gradebookng/tool/panels/BasePanel.java

+7
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
import org.apache.wicket.request.cycle.RequestCycle;
2525
import org.apache.wicket.request.mapper.parameter.PageParameters;
2626
import org.apache.wicket.spring.injection.annot.SpringBean;
27+
import org.sakaiproject.component.api.ServerConfigurationService;
2728

2829
import org.sakaiproject.gradebookng.business.GbRole;
2930
import org.sakaiproject.gradebookng.business.GradebookNgBusinessService;
@@ -48,6 +49,12 @@ public abstract class BasePanel extends Panel {
4849
@SpringBean(name = "org.sakaiproject.rubrics.logic.RubricsService")
4950
protected RubricsService rubricsService;
5051

52+
@SpringBean(name = "org.sakaiproject.component.api.ServerConfigurationService")
53+
protected ServerConfigurationService serverConfigService;
54+
55+
protected static final String SAK_PROP_SHOW_COURSE_GRADE_STUDENT = "gradebookng.showDisplayCourseGradeToStudent";
56+
protected static final Boolean SAK_PROP_SHOW_COURSE_GRADE_STUDENT_DEFAULT = Boolean.TRUE;
57+
5158
public BasePanel(final String id) {
5259
super(id);
5360
}

gradebookng/tool/src/java/org/sakaiproject/gradebookng/tool/panels/InstructorGradeSummaryGradesPanel.java

+15-4
Original file line numberDiff line numberDiff line change
@@ -155,22 +155,33 @@ public Map<String, Object> load() {
155155
addOrReplace(new Label("courseGradeNotReleasedFlag", getString("label.studentsummary.coursegradenotreleasedflag")) {
156156
@Override
157157
public boolean isVisible() {
158-
return !gradebook.isCourseGradeDisplayed()
159-
&& (GbRole.INSTRUCTOR.equals(userRole) || GbRole.TA.equals(userRole) && isCourseGradeVisible);
158+
return showDisplayCourseGradeToStudent(gradebook, userRole, isCourseGradeVisible);
160159
}
161160
});
162161

163162
addOrReplace(new Label("courseGradeNotReleasedMessage", getString("label.studentsummary.coursegradenotreleasedmessage")) {
164163
@Override
165164
public boolean isVisible() {
166-
return !gradebook.isCourseGradeDisplayed()
167-
&& (GbRole.INSTRUCTOR.equals(userRole) || GbRole.TA.equals(userRole) && isCourseGradeVisible);
165+
return showDisplayCourseGradeToStudent(gradebook, userRole, isCourseGradeVisible);
168166
}
169167
});
170168

171169
add(new AttributeModifier("data-studentid", userId));
172170
}
173171

172+
/**
173+
* Determine if the 'Display Course Grade to Student' setting should be visible for the user.
174+
* @param gradebook
175+
* @param userRole
176+
* @param isCourseGradeVisible
177+
* @return
178+
*/
179+
private boolean showDisplayCourseGradeToStudent(Gradebook gradebook,GbRole userRole, boolean isCourseGradeVisible) {
180+
return !gradebook.isCourseGradeDisplayed()
181+
&& (GbRole.INSTRUCTOR.equals(userRole) || GbRole.TA.equals(userRole) && isCourseGradeVisible)
182+
&& serverConfigService.getBoolean(SAK_PROP_SHOW_COURSE_GRADE_STUDENT, SAK_PROP_SHOW_COURSE_GRADE_STUDENT_DEFAULT);
183+
}
184+
174185
/**
175186
* Helper to get the category name. Looks at settings as well.
176187
*

gradebookng/tool/src/java/org/sakaiproject/gradebookng/tool/panels/SettingsGradeReleasePanel.html

+1-1
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ <h3 class="panel-title">
2222
</div>
2323
<p class="instruction"><wicket:message key="settingspage.graderelease.instructions" /></p>
2424

25-
<div class="checkbox">
25+
<div class="checkbox" wicket:id="displayCourseGradeContainer">
2626
<label>
2727
<input wicket:id="displayCourseGrade" type="checkbox" />
2828
<wicket:message key="settingspage.displaycoursegrade.label" />

0 commit comments

Comments
 (0)