${config['name']}
-${_("Loading")}
-${_("Experiment Group Configurations")}
- % if experiment_group_configurations is None: -- ${_("This module is disabled at the moment.")} -
-${_("Loading")}
-diff --git a/cms/djangoapps/contentstore/rest_api/v1/serializers/course_waffle_flags.py b/cms/djangoapps/contentstore/rest_api/v1/serializers/course_waffle_flags.py index 46f8cebd140d..6320a75fa8c1 100644 --- a/cms/djangoapps/contentstore/rest_api/v1/serializers/course_waffle_flags.py +++ b/cms/djangoapps/contentstore/rest_api/v1/serializers/course_waffle_flags.py @@ -186,8 +186,7 @@ def get_use_new_group_configurations_page(self, obj): """ Method to get the use_new_group_configurations_page switch """ - course_key = self.get_course_key() - return toggles.use_new_group_configurations_page(course_key) + return True def get_enable_course_optimizer(self, obj): """ diff --git a/cms/djangoapps/contentstore/toggles.py b/cms/djangoapps/contentstore/toggles.py index 30a030f966a9..bd6e7b13d74f 100644 --- a/cms/djangoapps/contentstore/toggles.py +++ b/cms/djangoapps/contentstore/toggles.py @@ -365,24 +365,6 @@ def use_new_certificates_page(course_key): return not LEGACY_STUDIO_CERTIFICATES.is_enabled(course_key) -# .. toggle_name: legacy_studio.configurations -# .. toggle_implementation: WaffleFlag -# .. toggle_default: False -# .. toggle_description: Temporarily fall back to the old Studio Configurations page. -# .. toggle_use_cases: temporary -# .. toggle_creation_date: 2025-03-14 -# .. toggle_target_removal_date: 2025-09-14 -# .. toggle_tickets: https://github.com/openedx/edx-platform/issues/36275 -# .. toggle_warning: In Ulmo, this toggle will be removed. Only the new (React-based) experience will be available. -LEGACY_STUDIO_CONFIGURATIONS = CourseWaffleFlag('legacy_studio.configurations', __name__) - - -def use_new_group_configurations_page(course_key): - """ - Returns a boolean if new studio group configurations mfe is enabled - """ - return not LEGACY_STUDIO_CONFIGURATIONS.is_enabled(course_key) - # .. toggle_name: contentstore.mock_video_uploads # .. toggle_implementation: WaffleFlag diff --git a/cms/djangoapps/contentstore/utils.py b/cms/djangoapps/contentstore/utils.py index 35818125efab..6d77b163241e 100644 --- a/cms/djangoapps/contentstore/utils.py +++ b/cms/djangoapps/contentstore/utils.py @@ -46,7 +46,6 @@ use_new_course_team_page, use_new_export_page, use_new_grading_page, - use_new_group_configurations_page, use_new_import_page, use_new_schedule_details_page, use_new_unit_page, @@ -495,13 +494,10 @@ def get_group_configurations_url(course_locator) -> str: """ Gets course authoring microfrontend URL for group configurations page view. """ - group_configurations_url = None - if use_new_group_configurations_page(course_locator): - mfe_base_url = get_course_authoring_url(course_locator) - course_mfe_url = f'{mfe_base_url}/course/{course_locator}/group_configurations' - if mfe_base_url: - group_configurations_url = course_mfe_url - return group_configurations_url + mfe_base_url = get_course_authoring_url(course_locator) + if mfe_base_url: + return f'{mfe_base_url}/course/{course_locator}/group_configurations' + return '' def get_custom_pages_url(course_locator) -> str: diff --git a/cms/djangoapps/contentstore/views/course.py b/cms/djangoapps/contentstore/views/course.py index 3d248944bdd5..71ed24a7759c 100644 --- a/cms/djangoapps/contentstore/views/course.py +++ b/cms/djangoapps/contentstore/views/course.py @@ -101,7 +101,6 @@ default_enable_flexible_peer_openassessments, use_new_advanced_settings_page, use_new_grading_page, - use_new_group_configurations_page, use_new_schedule_details_page, ) from ..utils import ( @@ -112,7 +111,6 @@ get_course_rerun_context, get_course_settings, get_grading_url, - get_group_configurations_context, get_group_configurations_url, get_lms_link_for_item, get_proctored_exam_settings_url, @@ -1873,10 +1871,7 @@ def group_configurations_list_handler(request, course_key_string): course = get_course_and_check_manage_group_configurations_access(course_key, request.user) if 'text/html' in request.META.get('HTTP_ACCEPT', 'text/html'): - if use_new_group_configurations_page(course_key): - return redirect(get_group_configurations_url(course_key)) - group_configurations_context = get_group_configurations_context(course, store) - return render_to_response('group_configurations.html', group_configurations_context) + return redirect(get_group_configurations_url(course_key)) elif "application/json" in request.META.get('HTTP_ACCEPT'): if request.method == 'POST': # create a new group configuration for the course diff --git a/cms/djangoapps/contentstore/views/tests/test_exam_settings_view.py b/cms/djangoapps/contentstore/views/tests/test_exam_settings_view.py index ef1d7f945dd7..c974fdf17484 100644 --- a/cms/djangoapps/contentstore/views/tests/test_exam_settings_view.py +++ b/cms/djangoapps/contentstore/views/tests/test_exam_settings_view.py @@ -26,7 +26,6 @@ ) @override_waffle_flag(toggles.LEGACY_STUDIO_CERTIFICATES, True) @override_waffle_flag(toggles.LEGACY_STUDIO_SCHEDULE_DETAILS, True) -@override_waffle_flag(toggles.LEGACY_STUDIO_CONFIGURATIONS, True) @override_waffle_flag(toggles.LEGACY_STUDIO_GRADING, True) @override_waffle_flag(toggles.LEGACY_STUDIO_ADVANCED_SETTINGS, True) class TestExamSettingsView(CourseTestCase, UrlResetMixin): @@ -53,7 +52,6 @@ def _get_exam_settings_alert_text(raw_html_content): @ddt.data( "certificates_list_handler", "settings_handler", - "group_configurations_list_handler", "grading_handler", "advanced_settings_handler" ) @@ -70,7 +68,6 @@ def test_view_without_exam_settings_enabled(self, handler): @ddt.data( "certificates_list_handler", "settings_handler", - "group_configurations_list_handler", "grading_handler", "advanced_settings_handler" ) diff --git a/cms/djangoapps/contentstore/views/tests/test_group_configurations.py b/cms/djangoapps/contentstore/views/tests/test_group_configurations.py index 83c20f3c4fbb..274a43084c38 100644 --- a/cms/djangoapps/contentstore/views/tests/test_group_configurations.py +++ b/cms/djangoapps/contentstore/views/tests/test_group_configurations.py @@ -9,14 +9,11 @@ import ddt from django.test import Client -from edx_toggles.toggles.testutils import override_waffle_flag from openedx_authz.constants.roles import COURSE_DATA_RESEARCHER, COURSE_STAFF from rest_framework import status -from cms.djangoapps.contentstore import toggles from cms.djangoapps.contentstore.api.tests.base import BaseCourseViewTest from cms.djangoapps.contentstore.course_group_config import ( - CONTENT_GROUP_CONFIGURATION_NAME, ENROLLMENT_SCHEME, GroupConfiguration, ) @@ -274,27 +271,12 @@ def _url(self): """ return reverse_course_url('group_configurations_list_handler', self.course.id) - @override_waffle_flag(toggles.LEGACY_STUDIO_CONFIGURATIONS, True) def test_view_index_ok(self): """ - Basic check that the groups configuration page responds correctly. + Basic check that the groups configuration page redirects to the MFE. """ - - # This creates a random UserPartition. - self.course.user_partitions = [ - UserPartition(0, 'First name', 'First description', [Group(0, 'Group A'), Group(1, 'Group B'), Group(2, 'Group C')]), # lint-amnesty, pylint: disable=line-too-long - ] - self.save_course() - - if 'split_test' not in self.course.advanced_modules: - self.course.advanced_modules.append('split_test') - self.store.update_item(self.course, self.user.id) - response = self.client.get(self._url()) - self.assertEqual(response.status_code, 200) # noqa: PT009 - self.assertContains(response, 'First name', count=1) - self.assertContains(response, 'Group C') - self.assertContains(response, CONTENT_GROUP_CONFIGURATION_NAME) + self.assertEqual(response.status_code, 302) # noqa: PT009 def test_unsupported_http_accept_header(self): """ diff --git a/cms/static/cms/js/build.js b/cms/static/cms/js/build.js index 73089ed04a76..697cab297619 100644 --- a/cms/static/cms/js/build.js +++ b/cms/static/cms/js/build.js @@ -21,7 +21,6 @@ 'js/factories/base', 'js/factories/course_create_rerun', 'js/factories/export', - 'js/factories/group_configurations', 'js/certificates/factories/certificates_page_factory', 'js/factories/index', 'js/factories/manage_users', diff --git a/cms/static/js/factories/group_configurations.js b/cms/static/js/factories/group_configurations.js deleted file mode 100644 index 648ad78f0be5..000000000000 --- a/cms/static/js/factories/group_configurations.js +++ /dev/null @@ -1,35 +0,0 @@ -define([ - 'js/collections/group_configuration', 'js/models/group_configuration', 'js/views/pages/group_configurations' -], function(GroupConfigurationCollection, GroupConfigurationModel, GroupConfigurationsPage) { - 'use strict'; - - return function(experimentsEnabled, - experimentGroupConfigurationsJson, - allGroupConfigurationJson, - groupConfigurationUrl, - courseOutlineUrl) { - var experimentGroupConfigurations = new GroupConfigurationCollection( - experimentGroupConfigurationsJson, {parse: true} - ), - allGroupConfigurations = [], - newGroupConfig, - i; - - for (i = 0; i < allGroupConfigurationJson.length; i++) { - newGroupConfig = new GroupConfigurationModel(allGroupConfigurationJson[i], - {parse: true, canBeEmpty: true}); - newGroupConfig.urlRoot = groupConfigurationUrl; - newGroupConfig.outlineUrl = courseOutlineUrl; - allGroupConfigurations.push(newGroupConfig); - } - - experimentGroupConfigurations.url = groupConfigurationUrl; - experimentGroupConfigurations.outlineUrl = courseOutlineUrl; - new GroupConfigurationsPage({ - el: $('#content'), - experimentsEnabled: experimentsEnabled, - experimentGroupConfigurations: experimentGroupConfigurations, - allGroupConfigurations: allGroupConfigurations - }).render(); - }; -}); diff --git a/cms/templates/group_configurations.html b/cms/templates/group_configurations.html deleted file mode 100644 index 607cbc965321..000000000000 --- a/cms/templates/group_configurations.html +++ /dev/null @@ -1,140 +0,0 @@ -<%page expression_filter="h"/> -<%inherit file="base.html" /> -<%def name="content_groups_help_token()"><% return "content_groups" %>%def> -<%def name="enrollment_track_help_token()"><% return "enrollment_tracks" %>%def> -<%def name="experiment_group_configurations_help_token()"><% return "group_configurations" %>%def> -<%namespace name='static' file='static_content.html'/> -<%! -from cms.djangoapps.contentstore import utils -from django.utils.translation import gettext as _ -from openedx.core.djangolib.js_utils import ( - dump_js_escaped_json, js_escaped_string -) -from openedx.core.djangolib.markup import HTML, Text -from six.moves.urllib.parse import quote -%> - -<%block name="title">${_("Group Configurations")}%block> -<%block name="bodyclass">is-signedin course view-group-configurations%block> - -<%block name="header_extras"> -% for template_name in ["group-configuration-details", "group-configuration-editor", "group-edit", "content-group-editor", "partition-group-details", "basic-modal", "modal-button", "list"]: - -% endfor -%block> - -<%block name="requirejs"> - require(["js/factories/group_configurations"], function(GroupConfigurationsFactory) { - GroupConfigurationsFactory( - ${should_show_experiment_groups | n, dump_js_escaped_json}, - ${experiment_group_configurations | n, dump_js_escaped_json}, - ${all_group_configurations | n, dump_js_escaped_json}, - "${group_configuration_url | n, js_escaped_string}", - "${course_outline_url | n, js_escaped_string}", - ${should_show_enrollment_track | n, dump_js_escaped_json} - ); - }); -%block> - -<%block name="content"> -
${_("Loading")}
-- ${_("This module is disabled at the moment.")} -
-${_("Loading")}
-