diff --git a/cms/djangoapps/contentstore/toggles.py b/cms/djangoapps/contentstore/toggles.py index ff2ad24fc7..dc8714579d 100644 --- a/cms/djangoapps/contentstore/toggles.py +++ b/cms/djangoapps/contentstore/toggles.py @@ -122,6 +122,24 @@ def use_new_video_editor(): return ENABLE_NEW_VIDEO_EDITOR_FLAG.is_enabled() +# .. toggle_name: new_core_editors.use_video_gallery_flow +# .. toggle_implementation: WaffleFlag +# .. toggle_default: False +# .. toggle_description: This flag enables the use the video selection gallery on the flow of the new core video xblock editor +# .. toggle_use_cases: temporary +# .. toggle_creation_date: 2023-04-03 +# .. toggle_target_removal_date: 2023-6-01 +# .. toggle_warning: You need to activate the `new_core_editors.use_new_video_editor` flag to use this new flow. +ENABLE_VIDEO_GALLERY_FLOW_FLAG = WaffleFlag('new_core_editors.use_video_gallery_flow', __name__) + + +def use_video_gallery_flow(): + """ + Returns a boolean = true if the video gallery flow is enabled + """ + return ENABLE_VIDEO_GALLERY_FLOW_FLAG.is_enabled() + + # .. toggle_name: new_core_editors.use_new_problem_editor # .. toggle_implementation: WaffleFlag # .. toggle_default: False diff --git a/cms/djangoapps/contentstore/views/tests/test_videos.py b/cms/djangoapps/contentstore/views/tests/test_videos.py index 0d67cf9e52..c321129e95 100644 --- a/cms/djangoapps/contentstore/views/tests/test_videos.py +++ b/cms/djangoapps/contentstore/views/tests/test_videos.py @@ -365,6 +365,7 @@ class VideosHandlerTestCase( 'course_video_image_url', 'transcripts', 'transcription_status', + 'transcript_urls', 'error_description' } ) @@ -381,7 +382,7 @@ class VideosHandlerTestCase( [ 'edx_video_id', 'client_video_id', 'created', 'duration', 'status', 'course_video_image_url', 'transcripts', 'transcription_status', - 'error_description' + 'transcript_urls', 'error_description' ], [ { @@ -398,7 +399,7 @@ class VideosHandlerTestCase( [ 'edx_video_id', 'client_video_id', 'created', 'duration', 'status', 'course_video_image_url', 'transcripts', 'transcription_status', - 'error_description' + 'transcript_urls', 'error_description' ], [ { diff --git a/cms/djangoapps/contentstore/views/videos.py b/cms/djangoapps/contentstore/views/videos.py index 1286d9037f..bc880de4cf 100644 --- a/cms/djangoapps/contentstore/views/videos.py +++ b/cms/djangoapps/contentstore/views/videos.py @@ -29,6 +29,7 @@ from edxval.api import ( create_video, get_3rd_party_transcription_plans, get_available_transcript_languages, + get_video_transcript_url, get_transcript_credentials_state_for_org, get_transcript_preferences, get_videos_for_course, @@ -574,6 +575,12 @@ def _get_videos(course, pagination_conf=None): video['transcription_status'] = ( StatusDisplayStrings.get(video['status']) if is_video_encodes_ready else '' ) + video['transcript_urls'] = {} + for language_code in video['transcripts']: + video['transcript_urls'][language_code] = get_video_transcript_url( + video_id=video['edx_video_id'], + language_code=language_code, + ) # Convert the video status. video['status'] = convert_video_status(video, is_video_encodes_ready) @@ -595,7 +602,7 @@ def _get_index_videos(course, pagination_conf=None): attrs = [ 'edx_video_id', 'client_video_id', 'created', 'duration', 'status', 'courses', 'transcripts', 'transcription_status', - 'error_description' + 'transcript_urls', 'error_description' ] def _get_values(video): diff --git a/cms/static/js/views/pages/container.js b/cms/static/js/views/pages/container.js index b6afcd4b11..0586cffc3e 100644 --- a/cms/static/js/views/pages/container.js +++ b/cms/static/js/views/pages/container.js @@ -473,6 +473,7 @@ function($, _, Backbone, gettext, BasePage, ViewUtils, ContainerView, XBlockView onNewXBlock: function(xblockElement, scrollOffset, is_duplicate, data) { var useNewTextEditor = this.$('.xblock-header-primary').attr('use-new-editor-text'), useNewVideoEditor = this.$('.xblock-header-primary').attr('use-new-editor-video'), + useVideoGalleryFlow = this.$('.xblock-header-primary').attr("use-video-gallery-flow"), useNewProblemEditor = this.$('.xblock-header-primary').attr('use-new-editor-problem'); // find the block type in the locator if availible @@ -484,7 +485,13 @@ function($, _, Backbone, gettext, BasePage, ViewUtils, ContainerView, XBlockView || (useNewVideoEditor === 'True' && blockType.includes('video')) || (useNewProblemEditor === 'True' && blockType.includes('problem')) ){ - var destinationUrl = this.$('.xblock-header-primary').attr('authoring_MFE_base_url') + '/' + blockType[1] + '/' + encodeURI(data.locator); + var destinationUrl; + if (useVideoGalleryFlow === "True" && blockType.includes("video")) { + destinationUrl = this.$('.xblock-header-primary').attr("authoring_MFE_base_url") + '/course-videos/' + encodeURI(data.locator); + } + else { + destinationUrl = this.$('.xblock-header-primary').attr("authoring_MFE_base_url") + '/' + blockType[1] + '/' + encodeURI(data.locator); + } window.location.href = destinationUrl; return; } diff --git a/cms/templates/studio_xblock_wrapper.html b/cms/templates/studio_xblock_wrapper.html index 81a08a4d01..460cd6a0ae 100644 --- a/cms/templates/studio_xblock_wrapper.html +++ b/cms/templates/studio_xblock_wrapper.html @@ -7,12 +7,13 @@ from lms.lib.utils import is_unit from openedx.core.djangolib.js_utils import ( dump_js_escaped_json, js_escaped_string ) -from cms.djangoapps.contentstore.toggles import use_new_text_editor, use_new_problem_editor, use_new_video_editor +from cms.djangoapps.contentstore.toggles import use_new_text_editor, use_new_problem_editor, use_new_video_editor, use_video_gallery_flow %> <% use_new_editor_text = use_new_text_editor() use_new_editor_video = use_new_video_editor() use_new_editor_problem = use_new_problem_editor() +use_new_video_gallery_flow = use_video_gallery_flow() xblock_url = xblock_studio_url(xblock) show_inline = xblock.has_children and not xblock_url section_class = "level-nesting" if show_inline else "level-element" @@ -63,6 +64,7 @@ block_is_unit = is_unit(xblock) use-new-editor-text = ${use_new_editor_text} use-new-editor-video = ${use_new_editor_video} use-new-editor-problem = ${use_new_editor_problem} + use-video-gallery-flow = ${use_new_video_gallery_flow} authoring_MFE_base_url = ${get_editor_page_base_url(xblock.location.course_key)} data-block-type = ${xblock.scope_ids.block_type} data-usage-id = ${xblock.scope_ids.usage_id} diff --git a/test_root/data/Q291cnNlTG9jYXRvcignb3JnLjIzMTYnLCAnY291cnNlXzIzMTYnLCAnUnVuXzIzMTYnLCBOb25lLCBOb25lKQ==/good.tar.gz b/test_root/data/Q291cnNlTG9jYXRvcignb3JnLjIzMTYnLCAnY291cnNlXzIzMTYnLCAnUnVuXzIzMTYnLCBOb25lLCBOb25lKQ==/good.tar.gz new file mode 100644 index 0000000000..04a7658792 Binary files /dev/null and b/test_root/data/Q291cnNlTG9jYXRvcignb3JnLjIzMTYnLCAnY291cnNlXzIzMTYnLCAnUnVuXzIzMTYnLCBOb25lLCBOb25lKQ==/good.tar.gz differ diff --git a/test_root/data/Q291cnNlTG9jYXRvcignb3JnLjIzMTknLCAnY291cnNlXzIzMTknLCAnUnVuXzIzMTknLCBOb25lLCBOb25lKQ==/good.tar.gz b/test_root/data/Q291cnNlTG9jYXRvcignb3JnLjIzMTknLCAnY291cnNlXzIzMTknLCAnUnVuXzIzMTknLCBOb25lLCBOb25lKQ==/good.tar.gz new file mode 100644 index 0000000000..b0cd2cc3b3 Binary files /dev/null and b/test_root/data/Q291cnNlTG9jYXRvcignb3JnLjIzMTknLCAnY291cnNlXzIzMTknLCAnUnVuXzIzMTknLCBOb25lLCBOb25lKQ==/good.tar.gz differ