refactor: inheritable authoring mixin callbacks for editing & duplication (#33756)

This commit is contained in:
Daniel Valenzuela
2024-07-25 13:30:37 -04:00
committed by GitHub
parent 238dca732e
commit 78b691b56a
5 changed files with 23 additions and 49 deletions

View File

@@ -13,6 +13,7 @@ from django.views.decorators.http import require_http_methods
from opaque_keys.edx.keys import CourseKey
from web_fragments.fragment import Fragment
from cms.djangoapps.contentstore.utils import load_services_for_studio
from cms.lib.xblock.authoring_mixin import VISIBILITY_VIEW
from common.djangoapps.edxmako.shortcuts import render_to_string
from common.djangoapps.student.auth import (
@@ -47,7 +48,6 @@ from .preview import get_preview_fragment
from cms.djangoapps.contentstore.xblock_storage_handlers.view_handlers import (
handle_xblock,
create_xblock_info,
load_services_for_studio,
get_block_info,
get_xblock,
delete_orphans,

View File

@@ -45,7 +45,7 @@ from openedx.core.lib.xblock_utils import (
wrap_xblock_aside
)
from ..utils import get_visibility_partition_info, StudioPermissionsService
from ..utils import StudioPermissionsService, get_visibility_partition_info
from .access import get_user_role
from .session_kv_store import SessionKeyValueStore

View File

@@ -305,13 +305,10 @@ def _update_with_callback(xblock, user, old_metadata=None, old_content=None):
old_metadata = own_metadata(xblock)
if old_content is None:
old_content = xblock.get_explicitly_set_fields_by_scope(Scope.content)
if hasattr(xblock, "editor_saved"):
load_services_for_studio(xblock.runtime, user)
xblock.editor_saved(user, old_metadata, old_content)
load_services_for_studio(xblock.runtime, user)
xblock.editor_saved(user, old_metadata, old_content)
xblock_updated = modulestore().update_item(xblock, user.id)
if hasattr(xblock_updated, "post_editor_saved"):
load_services_for_studio(xblock_updated.runtime, user)
xblock_updated.post_editor_saved(user, old_metadata, old_content)
xblock_updated.post_editor_saved(user, old_metadata, old_content)
return xblock_updated

View File

@@ -10,6 +10,7 @@ from web_fragments.fragment import Fragment
from xblock.core import XBlock, XBlockMixin
from xblock.fields import String, Scope
log = logging.getLogger(__name__)
VISIBILITY_VIEW = 'visibility_view'
@@ -21,6 +22,7 @@ class AuthoringMixin(XBlockMixin):
"""
Mixin class that provides authoring capabilities for XBlocks.
"""
def _get_studio_resource_url(self, relative_url):
"""
Returns the Studio URL to a static resource.
@@ -51,3 +53,17 @@ class AuthoringMixin(XBlockMixin):
scope=Scope.settings,
enforce_type=True,
)
def editor_saved(self, user, old_metadata, old_content) -> None: # pylint: disable=unused-argument
"""
Called right *before* the block is written to the DB. Can be used, e.g., to modify fields before saving.
By default, is a no-op. Can be overriden in subclasses.
"""
def post_editor_saved(self, user, old_metadata, old_content) -> None: # pylint: disable=unused-argument
"""
Called right *after* the block is written to the DB. Can be used, e.g., to spin up followup tasks.
By default, is a no-op. Can be overriden in subclasses.
"""