diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index c7123ba8e0c..0b3d31fc1d9 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -2832,9 +2832,9 @@ class ApplicationController < ActionController::Base can_disable && @current_user.elementary_dashboard_disabled? end - def k5_user? + def k5_user?(check_disabled = true) if @current_user - return false if k5_disabled? + return false if check_disabled && k5_disabled? # This key is also invalidated when the k5 setting is toggled at the account level or when enrollments change Rails.cache.fetch_with_batched_keys(["k5_user", Shard.current].cache_key, batch_object: @current_user, batched_keys: [:k5_user], expires_in: 1.hour) do uncached_k5_user? diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index 5e65c8c4236..0ac4c7e663e 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -484,15 +484,16 @@ class UsersController < ApplicationController # Reload user settings so we don't get a stale value for K5_USER when switching dashboards @current_user.reload - js_env({K5_USER: k5_user?}, true) + k5_disabled = k5_disabled? + k5_user = k5_user?(false) + js_env({K5_USER: k5_user && !k5_disabled}, true) js_env({ :DASHBOARD_SIDEBAR_URL => dashboard_sidebar_url, :PREFERENCES => { :dashboard_view => @current_user.dashboard_view(@domain_root_account), :hide_dashcard_color_overlays => @current_user.preferences[:hide_dashcard_color_overlays], - :custom_colors => @current_user.custom_colors, - :elementary_dashboard_disabled => k5_disabled? + :custom_colors => @current_user.custom_colors }, :STUDENT_PLANNER_ENABLED => planner_enabled?, :STUDENT_PLANNER_COURSES => planner_enabled? && map_courses_for_menu(@current_user.courses_with_primary_enrollment), @@ -502,6 +503,7 @@ class UsersController < ApplicationController :create_courses_as_admin => @current_user.roles(@domain_root_account).include?('admin'), :create_courses_as_teacher => @domain_root_account.grants_right?(@current_user, session, :create_courses) }, + :CAN_ENABLE_K5_DASHBOARD => k5_disabled && k5_user }) @announcements = AccountNotification.for_user_and_account(@current_user, @domain_root_account) diff --git a/spec/controllers/application_controller_spec.rb b/spec/controllers/application_controller_spec.rb index ca3e170691b..c34fc647792 100644 --- a/spec/controllers/application_controller_spec.rb +++ b/spec/controllers/application_controller_spec.rb @@ -2087,6 +2087,14 @@ describe ApplicationController do expect(@controller.send(:k5_user?)).to be_falsey end + it "ignores the disabled preference if check_disabled = false" do + @teacher.preferences[:elementary_dashboard_disabled] = true + @teacher.save! + user_session(@teacher) + @controller.instance_variable_set(:@current_user, @teacher) + expect(@controller.send(:k5_user?, false)).to be_truthy + end + it "returns true even if a student has opted-out of the k5 dashboard" do @student.preferences[:elementary_dashboard_disabled] = true @student.save! diff --git a/spec/javascripts/jsx/dashboard/DashboardHeaderSpec.js b/spec/javascripts/jsx/dashboard/DashboardHeaderSpec.js index 719fbebf333..a953597b8c8 100644 --- a/spec/javascripts/jsx/dashboard/DashboardHeaderSpec.js +++ b/spec/javascripts/jsx/dashboard/DashboardHeaderSpec.js @@ -24,7 +24,7 @@ import moxios from 'moxios' import {moxiosWait} from 'jest-moxios-utils' import sinon from 'sinon' import $ from 'jquery' -import {DashboardHeader} from 'ui/features/dashboard/react/DashboardHeader.js' +import {DashboardHeader} from 'ui/features/dashboard/react/DashboardHeader' import {resetPlanner} from '@instructure/canvas-planner' const container = document.getElementById('fixtures') @@ -309,7 +309,7 @@ test('it should allow switching back to the Elementary dashboard if it was disab dashboardHeader = c }} dashboard_view="activity" - elementaryDashboardDisabled + canEnableElementaryDashboard />, container ) diff --git a/spec/javascripts/jsx/dashboard_card/DashboardOptionsMenuSpec.js b/spec/javascripts/jsx/dashboard_card/DashboardOptionsMenuSpec.js index c4ef1fc3949..c1be5826360 100644 --- a/spec/javascripts/jsx/dashboard_card/DashboardOptionsMenuSpec.js +++ b/spec/javascripts/jsx/dashboard_card/DashboardOptionsMenuSpec.js @@ -21,7 +21,7 @@ import PropTypes from 'prop-types' import ReactDOM from 'react-dom' import TestUtils from 'react-dom/test-utils' import {shallow, mount} from 'enzyme' -import DashboardOptionsMenu from 'ui/features/dashboard/react/DashboardOptionsMenu.js' +import DashboardOptionsMenu from 'ui/features/dashboard/react/DashboardOptionsMenu' import sinon from 'sinon' const container = document.getElementById('fixtures') @@ -122,7 +122,7 @@ test('it should include a List View menu item when Student Planner is enabled', test('it should include an Elementary View option when the Elementary dashboard is disabled', () => { const wrapper = mount( - {}} /> + {}} /> ) wrapper.find('button').simulate('click') const menuItems = Array.from(document.querySelectorAll('[role="menuitemradio"]')) diff --git a/spec/selenium/dashboard/elementary/k5_dashboard_admin_spec.rb b/spec/selenium/dashboard/elementary/k5_dashboard_admin_spec.rb index c1fc0427ebb..d9c07f9509f 100644 --- a/spec/selenium/dashboard/elementary/k5_dashboard_admin_spec.rb +++ b/spec/selenium/dashboard/elementary/k5_dashboard_admin_spec.rb @@ -52,10 +52,10 @@ describe "admin k5 dashboard" do options = dashboard_options expect(options.length).to be 2 - expect(options[0].text).to eq('Elementary View') - expect(options[1].text).to eq('Classic View') + expect(options[0].text).to eq('Classic View') + expect(options[1].text).to eq('Elementary View') - options[1].click + options[0].click wait_for_ajaximations expect(classic_dashboard_header).to be_displayed diff --git a/ui/features/dashboard/index.js b/ui/features/dashboard/index.js index adcee72ebf9..9e9ebfa17ac 100644 --- a/ui/features/dashboard/index.js +++ b/ui/features/dashboard/index.js @@ -32,7 +32,8 @@ ready(() => { ReactDOM.render( { this.menuButtonFocusable = ref }} - elementaryDashboardDisabled={this.props.elementaryDashboardDisabled} + canEnableElementaryDashboard={this.props.canEnableElementaryDashboard} /> {this.props.planner_enabled &&
} diff --git a/ui/features/dashboard/react/DashboardOptionsMenu.js b/ui/features/dashboard/react/DashboardOptionsMenu.js index 49a573cb701..d1bfbc098a3 100644 --- a/ui/features/dashboard/react/DashboardOptionsMenu.js +++ b/ui/features/dashboard/react/DashboardOptionsMenu.js @@ -32,14 +32,14 @@ export default class DashboardOptionsMenu extends React.Component { planner_enabled: PropTypes.bool, onDashboardChange: PropTypes.func.isRequired, menuButtonRef: PropTypes.func, - elementaryDashboardDisabled: PropTypes.bool + canEnableElementaryDashboard: PropTypes.bool } static defaultProps = { planner_enabled: false, view: 'cards', menuButtonRef: () => {}, - elementaryDashboardDisabled: false + canEnableElementaryDashboard: false } state = { @@ -99,7 +99,7 @@ export default class DashboardOptionsMenu extends React.Component { {I18n.t('List View')} )} {I18n.t('Recent Activity')} - {this.props.elementaryDashboardDisabled && ( + {this.props.canEnableElementaryDashboard && ( {I18n.t('Elementary View')} )} diff --git a/ui/features/k5_dashboard/react/K5Dashboard.js b/ui/features/k5_dashboard/react/K5Dashboard.js index 41896ddc65f..ffd2dbdb35a 100644 --- a/ui/features/k5_dashboard/react/K5Dashboard.js +++ b/ui/features/k5_dashboard/react/K5Dashboard.js @@ -99,8 +99,8 @@ const K5DashboardOptionsMenu = ({onDisableK5Dashboard}) => { onSelect={onDisableK5Dashboard} selected={['elementary']} > - {I18n.t('Elementary View')} {I18n.t('Classic View')} + {I18n.t('Elementary View')} )