From ce4fa2c9d4106aff04d8317771aea14261b24440 Mon Sep 17 00:00:00 2001 From: Muhammad Anas Date: Fri, 25 Apr 2025 14:51:23 +0500 Subject: [PATCH 1/3] feat: enable authoring MFE markdown editor waffle flag for everyone by default --- ..._enable_markdown_editor_flag_by_default.py | 25 +++++++++++++++++++ cms/djangoapps/contentstore/toggles.py | 1 + 2 files changed, 26 insertions(+) create mode 100644 cms/djangoapps/contentstore/migrations/0011_enable_markdown_editor_flag_by_default.py diff --git a/cms/djangoapps/contentstore/migrations/0011_enable_markdown_editor_flag_by_default.py b/cms/djangoapps/contentstore/migrations/0011_enable_markdown_editor_flag_by_default.py new file mode 100644 index 000000000000..491ae0e4224a --- /dev/null +++ b/cms/djangoapps/contentstore/migrations/0011_enable_markdown_editor_flag_by_default.py @@ -0,0 +1,25 @@ +from django.db import migrations + +from cms.djangoapps.contentstore.toggles import ( + ENABLE_REACT_MARKDOWN_EDITOR +) + + +def create_flag(apps, schema_editor): + Flag = apps.get_model('waffle', 'Flag') + Flag.objects.get_or_create( + name=ENABLE_REACT_MARKDOWN_EDITOR.name, defaults={'everyone': True} + ) + + +class Migration(migrations.Migration): + dependencies = [ + ('contentstore', '0010_container_link_models'), + ('waffle', '0001_initial'), + ] + + operations = [ + # Do not remove the flags for rollback. We don't want to lose originals if + # they already existed, and it won't hurt if they are created. + migrations.RunPython(create_flag, reverse_code=migrations.RunPython.noop), + ] diff --git a/cms/djangoapps/contentstore/toggles.py b/cms/djangoapps/contentstore/toggles.py index 232bfc45d242..5fe20338a311 100644 --- a/cms/djangoapps/contentstore/toggles.py +++ b/cms/djangoapps/contentstore/toggles.py @@ -226,6 +226,7 @@ def use_new_custom_pages(course_key): # .. toggle_use_cases: opt_in # .. toggle_creation_date: 2025-4-11 # .. toggle_tickets: https://openedx.atlassian.net/wiki/spaces/OEPM/pages/4517232656/Re-enable+Markdown+editing+of+CAPA+problems+to+meet+various+use+cases +# TODO: After removing this flag, add a migration to remove waffle flag in a follow-up deployment. ENABLE_REACT_MARKDOWN_EDITOR = CourseWaffleFlag( f'{CONTENTSTORE_NAMESPACE}.use_react_markdown_editor', __name__) From 543c12b9077d7bcb351fc4f7d84412c2f9deb82e Mon Sep 17 00:00:00 2001 From: Muhammad Anas Date: Fri, 25 Apr 2025 19:54:21 +0500 Subject: [PATCH 2/3] fix: better approach --- ..._enable_markdown_editor_flag_by_default.py | 25 ------------------- .../v1/serializers/course_waffle_flags.py | 2 +- .../views/tests/test_course_waffle_flags.py | 2 +- cms/djangoapps/contentstore/toggles.py | 11 ++++---- 4 files changed, 7 insertions(+), 33 deletions(-) delete mode 100644 cms/djangoapps/contentstore/migrations/0011_enable_markdown_editor_flag_by_default.py diff --git a/cms/djangoapps/contentstore/migrations/0011_enable_markdown_editor_flag_by_default.py b/cms/djangoapps/contentstore/migrations/0011_enable_markdown_editor_flag_by_default.py deleted file mode 100644 index 491ae0e4224a..000000000000 --- a/cms/djangoapps/contentstore/migrations/0011_enable_markdown_editor_flag_by_default.py +++ /dev/null @@ -1,25 +0,0 @@ -from django.db import migrations - -from cms.djangoapps.contentstore.toggles import ( - ENABLE_REACT_MARKDOWN_EDITOR -) - - -def create_flag(apps, schema_editor): - Flag = apps.get_model('waffle', 'Flag') - Flag.objects.get_or_create( - name=ENABLE_REACT_MARKDOWN_EDITOR.name, defaults={'everyone': True} - ) - - -class Migration(migrations.Migration): - dependencies = [ - ('contentstore', '0010_container_link_models'), - ('waffle', '0001_initial'), - ] - - operations = [ - # Do not remove the flags for rollback. We don't want to lose originals if - # they already existed, and it won't hurt if they are created. - migrations.RunPython(create_flag, reverse_code=migrations.RunPython.noop), - ] 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 3a885f8c96bc..be03220ca45b 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 @@ -156,7 +156,7 @@ def get_enable_course_optimizer(self, obj): def get_use_react_markdown_editor(self, obj): """ - Method to get the use_react_markdown_editor waffle flag + Method to get the use_react_markdown_editor switch """ course_key = self.get_course_key() return toggles.use_react_markdown_editor(course_key) diff --git a/cms/djangoapps/contentstore/rest_api/v1/views/tests/test_course_waffle_flags.py b/cms/djangoapps/contentstore/rest_api/v1/views/tests/test_course_waffle_flags.py index 1d58f99d386c..61435c19c948 100644 --- a/cms/djangoapps/contentstore/rest_api/v1/views/tests/test_course_waffle_flags.py +++ b/cms/djangoapps/contentstore/rest_api/v1/views/tests/test_course_waffle_flags.py @@ -33,7 +33,7 @@ class CourseWaffleFlagsViewTest(CourseTestCase): 'use_new_unit_page': True, 'use_new_updates_page': True, 'use_new_video_uploads_page': False, - 'use_react_markdown_editor': False, + 'use_react_markdown_editor': True, } def setUp(self): diff --git a/cms/djangoapps/contentstore/toggles.py b/cms/djangoapps/contentstore/toggles.py index 5fe20338a311..dec17e281956 100644 --- a/cms/djangoapps/contentstore/toggles.py +++ b/cms/djangoapps/contentstore/toggles.py @@ -219,23 +219,22 @@ def use_new_custom_pages(course_key): return not LEGACY_STUDIO_CUSTOM_PAGES.is_enabled(course_key) -# .. toggle_name: contentstore.use_react_markdown_editor +# .. toggle_name: contentstore.disable_react_markdown_editor # .. toggle_implementation: CourseWaffleFlag # .. toggle_default: False -# .. toggle_description: This flag enables the use of the Markdown editor when creating or editing problems in the authoring MFE +# .. toggle_description: This flag disables the Markdown editor in the authoring MFE # .. toggle_use_cases: opt_in # .. toggle_creation_date: 2025-4-11 # .. toggle_tickets: https://openedx.atlassian.net/wiki/spaces/OEPM/pages/4517232656/Re-enable+Markdown+editing+of+CAPA+problems+to+meet+various+use+cases -# TODO: After removing this flag, add a migration to remove waffle flag in a follow-up deployment. -ENABLE_REACT_MARKDOWN_EDITOR = CourseWaffleFlag( - f'{CONTENTSTORE_NAMESPACE}.use_react_markdown_editor', __name__) +DISABLE_REACT_MARKDOWN_EDITOR = CourseWaffleFlag( + f'{CONTENTSTORE_NAMESPACE}.disable_react_markdown_editor', __name__) def use_react_markdown_editor(course_key): """ Returns a boolean if new studio custom pages mfe is enabled """ - return ENABLE_REACT_MARKDOWN_EDITOR.is_enabled(course_key) + return not DISABLE_REACT_MARKDOWN_EDITOR.is_enabled(course_key) # .. toggle_name: legacy_studio.schedule_details From 94bbb4395d83c5adeb21663bf27f4844d7f1e7ad Mon Sep 17 00:00:00 2001 From: Muhammad Anas Date: Tue, 29 Apr 2025 12:03:09 +0500 Subject: [PATCH 3/3] docs: update wordings --- .../rest_api/v1/serializers/course_waffle_flags.py | 2 +- cms/djangoapps/contentstore/toggles.py | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) 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 be03220ca45b..6db34b4cf34f 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 @@ -156,7 +156,7 @@ def get_enable_course_optimizer(self, obj): def get_use_react_markdown_editor(self, obj): """ - Method to get the use_react_markdown_editor switch + Determine whether the new markdown editor should be enabled in the react problem editor """ course_key = self.get_course_key() return toggles.use_react_markdown_editor(course_key) diff --git a/cms/djangoapps/contentstore/toggles.py b/cms/djangoapps/contentstore/toggles.py index dec17e281956..cea753fe7963 100644 --- a/cms/djangoapps/contentstore/toggles.py +++ b/cms/djangoapps/contentstore/toggles.py @@ -222,8 +222,8 @@ def use_new_custom_pages(course_key): # .. toggle_name: contentstore.disable_react_markdown_editor # .. toggle_implementation: CourseWaffleFlag # .. toggle_default: False -# .. toggle_description: This flag disables the Markdown editor in the authoring MFE -# .. toggle_use_cases: opt_in +# .. toggle_description: This flag disables the use of the Markdown editor when creating or editing problems in the authoring MFE +# .. toggle_use_cases: opt_out # .. toggle_creation_date: 2025-4-11 # .. toggle_tickets: https://openedx.atlassian.net/wiki/spaces/OEPM/pages/4517232656/Re-enable+Markdown+editing+of+CAPA+problems+to+meet+various+use+cases DISABLE_REACT_MARKDOWN_EDITOR = CourseWaffleFlag(