Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 17 additions & 0 deletions lms/djangoapps/instructor/toggles.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,16 @@
# .. toggle_tickets: PROD-1740
OPTIMISED_IS_SMALL_COURSE = WaffleFlag(f'{WAFFLE_FLAG_NAMESPACE}.optimised_is_small_course', __name__)

# .. toggle_name: instructor.disable_new_instructor_dashboard_mfe
# .. toggle_implementation: WaffleFlag
Comment thread
holaontiveros marked this conversation as resolved.
# .. toggle_default: False
# .. toggle_description: Waffle flag to disable the new instructor dashboard microfrontend and revert back
Comment thread
holaontiveros marked this conversation as resolved.
Outdated
# .. toggle_use_cases: open_edx
Comment thread
holaontiveros marked this conversation as resolved.
Outdated
# .. toggle_creation_date: 2026-04-20
Comment thread
holaontiveros marked this conversation as resolved.
DISABLE_NEW_INSTRUCTOR_DASHBOARD_MFE = WaffleFlag(
Comment thread
holaontiveros marked this conversation as resolved.
Outdated
f'{WAFFLE_FLAG_NAMESPACE}.disable_new_instructor_dashboard_mfe', __name__
)

Comment thread
holaontiveros marked this conversation as resolved.

def data_download_v2_is_enabled():
"""
Expand All @@ -38,3 +48,10 @@ def data_download_v2_is_enabled():

def use_optimised_is_small_course():
return OPTIMISED_IS_SMALL_COURSE.is_enabled()


def disable_new_instructor_dashboard_mfe():
"""
check if new instructor dashboard microfrontend is disabled.
Comment thread
holaontiveros marked this conversation as resolved.
Outdated
"""
return DISABLE_NEW_INSTRUCTOR_DASHBOARD_MFE.is_enabled()
9 changes: 8 additions & 1 deletion lms/djangoapps/instructor/views/instructor_dashboard.py
Original file line number Diff line number Diff line change
@@ -1,65 +1,67 @@
"""
Instructor Dashboard Views
"""
import datetime
import logging
from functools import reduce

import markupsafe
import pytz
from django.conf import settings
from django.contrib.auth.decorators import login_required
from django.http import Http404, HttpResponseRedirect, HttpResponseServerError
from django.urls import reverse
from django.utils.html import escape
from django.utils.translation import gettext as _
from django.utils.translation import gettext_noop
from django.views.decorators.cache import cache_control
from django.views.decorators.csrf import ensure_csrf_cookie
from django.views.decorators.http import require_POST
from django.shortcuts import redirect
from edx_django_utils.plugins import get_plugins_view_context
from edx_proctoring.api import does_backend_support_onboarding
from edx_when.api import is_enabled_for_course
from opaque_keys import InvalidKeyError
from opaque_keys.edx.keys import CourseKey
from openedx_filters.learning.filters import InstructorDashboardRenderStarted

from common.djangoapps.course_modes.models import CourseMode, CourseModesArchive
from common.djangoapps.edxmako.shortcuts import render_to_response, render_to_string
from common.djangoapps.student.models import CourseEnrollment
from common.djangoapps.student.roles import (
CourseFinanceAdminRole,
CourseInstructorRole,
CourseSalesAdminRole,
CourseStaffRole,
)
from common.djangoapps.util.json_request import JsonResponse
from common.djangoapps.util.proctoring import requires_escalation_email
from lms.djangoapps.bulk_email.api import is_bulk_email_feature_enabled
from lms.djangoapps.bulk_email.models_api import is_bulk_email_disabled_for_course
from lms.djangoapps.certificates import api as certs_api
from lms.djangoapps.certificates.data import CertificateStatuses
from lms.djangoapps.courseware.access import has_access
from lms.djangoapps.courseware.block_render import get_block_by_usage_id
from lms.djangoapps.courseware.courses import get_studio_url
from lms.djangoapps.courseware.masquerade import get_masquerade_role
from lms.djangoapps.discussion.django_comment_client.utils import has_forum_access
from lms.djangoapps.grades.api import is_writable_gradebook_enabled
from lms.djangoapps.instructor.constants import INSTRUCTOR_DASHBOARD_PLUGIN_VIEW_NAME
from lms.djangoapps.utils import get_instructor_dashboard_url
from openedx.core.djangoapps.course_groups.cohorts import DEFAULT_COHORT_NAME, get_course_cohorts, is_course_cohorted
from openedx.core.djangoapps.discussions.config.waffle_utils import legacy_discussion_experience_enabled
from openedx.core.djangoapps.discussions.utils import available_division_schemes
from openedx.core.djangoapps.django_comment_common.models import FORUM_ROLE_ADMINISTRATOR, CourseDiscussionSettings
from openedx.core.djangoapps.plugins.constants import ProjectType
from openedx.core.djangoapps.site_configuration import helpers as configuration_helpers
from openedx.core.djangolib.markup import HTML, Text
from openedx.core.lib.courses import get_course_by_id
from xmodule.modulestore.django import modulestore # lint-amnesty, pylint: disable=wrong-import-order
from xmodule.tabs import CourseTab # lint-amnesty, pylint: disable=wrong-import-order

from .. import permissions
from ..toggles import data_download_v2_is_enabled
from ..toggles import data_download_v2_is_enabled, disable_new_instructor_dashboard_mfe
from .tools import get_units_with_due_date, title_or_url

Check failure on line 64 in lms/djangoapps/instructor/views/instructor_dashboard.py

View workflow job for this annotation

GitHub Actions / Quality Others (ubuntu-24.04, 3.12, 20)

ruff (I001)

lms/djangoapps/instructor/views/instructor_dashboard.py:4:1: I001 Import block is un-sorted or un-formatted help: Organize imports

log = logging.getLogger(__name__)

Expand Down Expand Up @@ -144,6 +146,11 @@
if not request.user.has_perm(permissions.VIEW_DASHBOARD, course_key):
raise Http404()

# With new instructor dashboard we need to redirect them to it instead of rendering the old one,
# but we still want to check if they have access to view the dashboard before redirecting.
if not disable_new_instructor_dashboard_mfe():
return redirect(get_instructor_dashboard_url(course_key))

sections = []
if access['staff']:
sections_content = [
Expand Down
9 changes: 9 additions & 0 deletions lms/djangoapps/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -66,3 +66,12 @@ def get_optimizely_client(cls):
cls.optimizely_client = optimizely.Optimizely(config_manager=config_manager)

return cls.optimizely_client


def get_instructor_dashboard_url(course_locator) -> str:
Comment thread
holaontiveros marked this conversation as resolved.
Outdated
"""
Gets instructor microfrontend URL for the current course locator.
"""
mfe_base_url = settings.INSTRUCTOR_MICROFRONTEND_URL
print(f'mfe_base_url: {mfe_base_url}')
Comment thread
holaontiveros marked this conversation as resolved.
Outdated
return f'{mfe_base_url}/{course_locator}/course_info'
Loading