diff --git a/.env b/.env index ec26f91..dd8f92b 100644 --- a/.env +++ b/.env @@ -31,3 +31,5 @@ ENTERPRISE_MARKETING_URL=null, ENTERPRISE_MARKETING_UTM_SOURCE=null, ENTERPRISE_MARKETING_UTM_CAMPAIGN=null, ENTERPRISE_MARKETING_FOOTER_UTM_MEDIUM=null, + +BULK_MANAGEMENT_SPECIAL_ACCESS_COURSE_IDS=null, diff --git a/.env.development b/.env.development index 4a862b2..af1c632 100644 --- a/.env.development +++ b/.env.development @@ -38,3 +38,5 @@ ENTERPRISE_MARKETING_URL='http://example.com' ENTERPRISE_MARKETING_UTM_SOURCE='example.com' ENTERPRISE_MARKETING_UTM_CAMPAIGN='example.com Referral' ENTERPRISE_MARKETING_FOOTER_UTM_MEDIUM='Footer' + +BULK_MANAGEMENT_SPECIAL_ACCESS_COURSE_IDS=null diff --git a/src/containers/GradebookPage/index.jsx b/src/containers/GradebookPage/index.jsx index d27510b..c802e76 100644 --- a/src/containers/GradebookPage/index.jsx +++ b/src/containers/GradebookPage/index.jsx @@ -28,6 +28,7 @@ import { formatMaxCourseGrade, } from '../../data/selectors/grades'; import { selectableAssignmentLabels } from '../../data/selectors/filters'; +import { hasSpecialBulkManagementAccess } from '../../data/selectors/special'; import { getCohortNameById } from '../../data/selectors/cohorts'; import { fetchAssignmentTypes } from '../../data/actions/assignmentTypes'; import { getRoles } from '../../data/actions/roles'; @@ -97,7 +98,10 @@ const mapStateToProps = (state, ownProps) => ( selectedCohort: state.filters.cohort, selectedAssignmentType: state.filters.assignmentType, selectedAssignment: (state.filters.assignment || {}).label, - showBulkManagement: stateHasMastersTrack(state) && state.config.bulkManagementAvailable, + showBulkManagement: ( + hasSpecialBulkManagementAccess(ownProps.match.params.courseId) + || (stateHasMastersTrack(state) && state.config.bulkManagementAvailable) + ), showSpinner: shouldShowSpinner(state), showSuccess: state.grades.showSuccess, totalUsersCount: state.grades.totalUsersCount, diff --git a/src/data/selectors/special.js b/src/data/selectors/special.js new file mode 100644 index 0000000..43063cb --- /dev/null +++ b/src/data/selectors/special.js @@ -0,0 +1,12 @@ +// Certain course runs may be expressly allowed to view the +// bulk management tools, bypassing the other checks. +// Note that this does not affect whether or not the backend +// LMS API will permit usage of the tool. + +const hasSpecialBulkManagementAccess = courseId => { + const specialIdList = process.env.BULK_MANAGEMENT_SPECIAL_ACCESS_COURSE_IDS || ''; + return specialIdList.split(',').includes(courseId); +}; + +export { hasSpecialBulkManagementAccess }; +export default hasSpecialBulkManagementAccess;