Skip to content

Commit d929cdb

Browse files
authored
feat!: Drop the legacy studio updates page. (#37544)
Remove the legacy studio updates page and its related artifacts. They have been replaced by API and a new UI in the authoring MFE. This cleanup is a part of #36108 BREAKING CHANGE: The 'legacy_studio.updates' waffle flag will no longer be respected. The system will behave as if the flag is set to false permanently.
1 parent 5d0d60d commit d929cdb

16 files changed

Lines changed: 23 additions & 514 deletions

File tree

cms/djangoapps/contentstore/rest_api/v1/serializers/course_waffle_flags.py

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -80,10 +80,15 @@ def get_use_new_grading_page(self, obj):
8080

8181
def get_use_new_updates_page(self, obj):
8282
"""
83-
Method to get the use_new_updates_page switch
83+
Method to indicate if we should use the new updates_page
84+
85+
This used to be based on a waffle flag but the flag is being removed so we
86+
default it to true for now until we can remove the need for it from the consumers
87+
of this serializer and the related APIs.
88+
89+
See https://github.com/openedx/edx-platform/issues/37497
8490
"""
85-
course_key = self.get_course_key()
86-
return toggles.use_new_updates_page(course_key)
91+
return True
8792

8893
def get_use_new_import_page(self, obj):
8994
"""

cms/djangoapps/contentstore/tests/test_contentstore.py

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1498,8 +1498,6 @@ def test_get_json(handler):
14981498
test_get_html('export_handler')
14991499
with override_waffle_flag(toggles.LEGACY_STUDIO_COURSE_TEAM, True):
15001500
test_get_html('course_team_handler')
1501-
with override_waffle_flag(toggles.LEGACY_STUDIO_UPDATES, True):
1502-
test_get_html('course_info_handler')
15031501
with override_waffle_flag(toggles.LEGACY_STUDIO_CUSTOM_PAGES, True):
15041502
test_get_html('tabs_handler')
15051503
with override_waffle_flag(toggles.LEGACY_STUDIO_SCHEDULE_DETAILS, True):
@@ -1510,6 +1508,16 @@ def test_get_json(handler):
15101508
test_get_html('advanced_settings_handler')
15111509
test_get_json('textbooks_list_handler')
15121510

1511+
# Test that studio updates load
1512+
course_updates_url = reverse(
1513+
'course_info_update_handler',
1514+
kwargs={
1515+
'course_key_string': str(course_key),
1516+
}
1517+
)
1518+
resp = self.client.get(course_updates_url)
1519+
assert resp.status_code == 200
1520+
15131521
# go look at the Edit page
15141522
unit_key = course_key.make_usage_key('vertical', 'test_vertical')
15151523
with override_waffle_flag(toggles.LEGACY_STUDIO_UNIT_EDITOR, True):

cms/djangoapps/contentstore/tests/test_course_settings.py

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -167,7 +167,6 @@ def test_discussion_fields_available(self, is_pages_and_resources_enabled,
167167
@override_waffle_flag(toggles.LEGACY_STUDIO_IMPORT, True)
168168
@override_waffle_flag(toggles.LEGACY_STUDIO_EXPORT, True)
169169
@override_waffle_flag(toggles.LEGACY_STUDIO_COURSE_TEAM, True)
170-
@override_waffle_flag(toggles.LEGACY_STUDIO_UPDATES, True)
171170
@override_waffle_flag(toggles.LEGACY_STUDIO_CUSTOM_PAGES, True)
172171
@override_waffle_flag(toggles.LEGACY_STUDIO_SCHEDULE_DETAILS, True)
173172
@override_waffle_flag(toggles.LEGACY_STUDIO_GRADING, True)
@@ -185,7 +184,6 @@ def test_disable_advanced_settings_feature(self, disable_advanced_settings):
185184
'import_handler',
186185
'export_handler',
187186
'course_team_handler',
188-
'course_info_handler',
189187
'tabs_handler',
190188
'settings_handler',
191189
'grading_handler',

cms/djangoapps/contentstore/toggles.py

Lines changed: 0 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -256,25 +256,6 @@ def use_new_grading_page(course_key):
256256
return not LEGACY_STUDIO_GRADING.is_enabled(course_key)
257257

258258

259-
# .. toggle_name: legacy_studio.updates
260-
# .. toggle_implementation: WaffleFlag
261-
# .. toggle_default: False
262-
# .. toggle_description: Temporarily fall back to the old Studio Course Updates page.
263-
# .. toggle_use_cases: temporary
264-
# .. toggle_creation_date: 2025-03-14
265-
# .. toggle_target_removal_date: 2025-09-14
266-
# .. toggle_tickets: https://github.com/openedx/edx-platform/issues/36275
267-
# .. toggle_warning: In Ulmo, this toggle will be removed. Only the new (React-based) experience will be available.
268-
LEGACY_STUDIO_UPDATES = CourseWaffleFlag('legacy_studio.updates', __name__)
269-
270-
271-
def use_new_updates_page(course_key):
272-
"""
273-
Returns a boolean if new studio updates mfe is enabled
274-
"""
275-
return not LEGACY_STUDIO_UPDATES.is_enabled(course_key)
276-
277-
278259
# .. toggle_name: legacy_studio.import
279260
# .. toggle_implementation: WaffleFlag
280261
# .. toggle_default: False

cms/djangoapps/contentstore/utils.py

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,6 @@
5151
use_new_import_page,
5252
use_new_schedule_details_page,
5353
use_new_unit_page,
54-
use_new_updates_page,
5554
use_new_video_uploads_page,
5655
)
5756
from cms.djangoapps.models.settings.course_grading import CourseGradingModel
@@ -362,11 +361,10 @@ def get_updates_url(course_locator) -> str:
362361
Gets course authoring microfrontend URL for updates page view.
363362
"""
364363
updates_url = None
365-
if use_new_updates_page(course_locator):
366-
mfe_base_url = get_course_authoring_url(course_locator)
367-
course_mfe_url = f'{mfe_base_url}/course/{course_locator}/course_info'
368-
if mfe_base_url:
369-
updates_url = course_mfe_url
364+
mfe_base_url = get_course_authoring_url(course_locator)
365+
course_mfe_url = f'{mfe_base_url}/course/{course_locator}/course_info'
366+
if mfe_base_url:
367+
updates_url = course_mfe_url
370368
return updates_url
371369

372370

cms/djangoapps/contentstore/views/course.py

Lines changed: 1 addition & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,6 @@
7171
from openedx.core.djangolib.js_utils import dump_js_escaped_json
7272
from openedx.core.lib.course_tabs import CourseTabPluginManager
7373
from organizations.models import Organization
74-
from xmodule.contentstore.content import StaticContent # lint-amnesty, pylint: disable=wrong-import-order
7574
from xmodule.course_block import CourseBlock, CourseFields # lint-amnesty, pylint: disable=wrong-import-order
7675
from xmodule.error_block import ErrorBlock # lint-amnesty, pylint: disable=wrong-import-order
7776
from xmodule.modulestore import EdxJSONEncoder # lint-amnesty, pylint: disable=wrong-import-order
@@ -90,7 +89,6 @@
9089
from ..tasks import rerun_course as rerun_course_task
9190
from ..toggles import (
9291
default_enable_flexible_peer_openassessments,
93-
use_new_updates_page,
9492
use_new_advanced_settings_page,
9593
use_new_grading_page,
9694
use_new_group_configurations_page,
@@ -1064,24 +1062,7 @@ def course_info_handler(request, course_key_string):
10641062
except InvalidKeyError:
10651063
raise Http404 # lint-amnesty, pylint: disable=raise-missing-from
10661064

1067-
with modulestore().bulk_operations(course_key):
1068-
course_block = get_course_and_check_access(course_key, request.user)
1069-
if not course_block:
1070-
raise Http404
1071-
if use_new_updates_page(course_key):
1072-
return redirect(get_updates_url(course_key))
1073-
if 'text/html' in request.META.get('HTTP_ACCEPT', 'text/html'):
1074-
return render_to_response(
1075-
'course_info.html',
1076-
{
1077-
'context_course': course_block,
1078-
'updates_url': reverse_course_url('course_info_update_handler', course_key),
1079-
'handouts_locator': course_key.make_usage_key('course_info', 'handouts'),
1080-
'base_asset_url': StaticContent.get_base_url_path_for_course_assets(course_block.id),
1081-
}
1082-
)
1083-
else:
1084-
return HttpResponseBadRequest("Only supports html requests")
1065+
return redirect(get_updates_url(course_key))
10851066

10861067

10871068
@login_required

cms/djangoapps/contentstore/views/tests/test_course_updates.py

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,7 @@
55

66
import json
77
from opaque_keys.edx.keys import UsageKey
8-
from edx_toggles.toggles.testutils import override_waffle_flag
98

10-
from cms.djangoapps.contentstore import toggles
119
from cms.djangoapps.contentstore.tests.test_course_settings import CourseTestCase
1210
from cms.djangoapps.contentstore.utils import reverse_course_url, reverse_usage_url
1311
from openedx.core.lib.xblock_utils import get_course_update_items
@@ -23,7 +21,6 @@ def create_update_url(self, provided_id=None, course_key=None):
2321
return reverse_course_url('course_info_update_handler', course_key, kwargs=kwargs)
2422

2523
# The do all and end all of unit test cases.
26-
@override_waffle_flag(toggles.LEGACY_STUDIO_UPDATES, True)
2724
def test_course_update(self):
2825
"""Go through each interface and ensure it works."""
2926
def get_response(content, date):
@@ -40,11 +37,6 @@ def get_response(content, date):
4037

4138
return json.loads(resp.content.decode('utf-8'))
4239

43-
resp = self.client.get_html(
44-
reverse_course_url('course_info_handler', self.course.id)
45-
)
46-
self.assertContains(resp, 'Course Updates', status_code=200)
47-
4840
init_content = '<iframe width="560" height="315" src="http://www.youtube.com/embed/RocY-Jd93XU" frameborder="0">' # lint-amnesty, pylint: disable=line-too-long
4941
content = init_content + '</iframe>'
5042
payload = get_response(content, 'January 8, 2013')

cms/static/cms/js/build.js

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@
2020
'js/factories/asset_index',
2121
'js/factories/base',
2222
'js/factories/course_create_rerun',
23-
'js/factories/course_info',
2423
'js/factories/export',
2524
'js/factories/group_configurations',
2625
'js/certificates/factories/certificates_page_factory',

cms/static/cms/js/spec/main.js

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -235,7 +235,6 @@
235235
'js/spec/models/settings_course_grader_spec',
236236
'js/spec/models/settings_grading_spec',
237237
'js/spec/models/upload_spec',
238-
'js/spec/views/course_info_spec',
239238
'js/spec/views/metadata_edit_spec',
240239
'js/spec/views/upload_spec',
241240
'js/spec/video/transcripts/message_manager_spec',

cms/static/js/collections/course_update.js

Lines changed: 0 additions & 12 deletions
This file was deleted.

0 commit comments

Comments
 (0)