diff --git a/cms/static/sass/course-unit-mfe-iframe-bundle.scss b/cms/static/sass/course-unit-mfe-iframe-bundle.scss index 4100310f406b..13f8b1988286 100644 --- a/cms/static/sass/course-unit-mfe-iframe-bundle.scss +++ b/cms/static/sass/course-unit-mfe-iframe-bundle.scss @@ -618,6 +618,42 @@ body, } } +.lib-edit-warning-tooltipbox { + .tooltiptext { + visibility: hidden; + position: absolute; + width: 200px; + background-color: $black; + color: $white; + text-align: center; + padding: 5px; + border-radius: 6px; + z-index: 1; + top: 50%; + right: 100%; + margin-right: 10px; + transform: translateY(-50%); + opacity: 0; + transition: opacity 0.3s; + } + + .tooltiptext::after { + content: ""; + position: absolute; + top: 50%; + left: 100%; + transform: translateY(-50%); + border-width: 5px; + border-style: solid; + border-color: transparent transparent transparent $black; + } + + &:hover .tooltiptext { + visibility: visible; + opacity: 1; + } +} + .action-edit { .action-button-text { display: none; @@ -632,6 +668,13 @@ body, display: none; } + &.disabled-button { + pointer-events: all; + opacity: .5; + cursor: default; + border-color: $transparent + } + &::before { @extend %icon-position; diff --git a/cms/templates/studio_xblock_wrapper.html b/cms/templates/studio_xblock_wrapper.html index f6022c6ac0e5..e5ec43434747 100644 --- a/cms/templates/studio_xblock_wrapper.html +++ b/cms/templates/studio_xblock_wrapper.html @@ -152,7 +152,7 @@ % endif % if not show_inline:
  • - @@ -211,6 +211,18 @@
  • % endif + % else: + % if not show_inline: +
  • +
    + + ${_('Components within a library referenced object cannot be edited')} +
    +
  • + % endif % endif % endif diff --git a/common/djangoapps/third_party_auth/pipeline.py b/common/djangoapps/third_party_auth/pipeline.py index ef1e6f887c36..2fff57620a9e 100644 --- a/common/djangoapps/third_party_auth/pipeline.py +++ b/common/djangoapps/third_party_auth/pipeline.py @@ -787,6 +787,7 @@ def associate_by_email_if_saml(auth_entry, backend, details, user, strategy, *ar This association is done ONLY if the user entered the pipeline belongs to SAML provider. """ + from openedx.features.enterprise_support.api import enterprise_is_enabled def get_user(): """ @@ -795,6 +796,7 @@ def get_user(): user_details = {'email': details.get('email')} if details else None return get_user_from_email(user_details or {}) + @enterprise_is_enabled() def associate_by_email_if_enterprise_user(): """ If the learner arriving via SAML is already linked to the enterprise customer linked to the same IdP, diff --git a/lms/envs/production.py b/lms/envs/production.py index 4884e0a22c87..f67926dec902 100644 --- a/lms/envs/production.py +++ b/lms/envs/production.py @@ -420,7 +420,7 @@ def get_env_setting(setting): # If we didn't override the value in YAML, OR we overrode it to a truthy value, # then update CELERYBEAT_SCHEDULE. CELERYBEAT_SCHEDULE['refresh-saml-metadata'] = { - 'task': 'common.djangoapps.third_party_auth.fetch_saml_metadata', + 'task': 'common.djangoapps.third_party_auth.tasks.fetch_saml_metadata', 'schedule': datetime.timedelta(hours=hours), } diff --git a/requirements/common_constraints.txt b/requirements/common_constraints.txt index fc92ee019407..748858b7015a 100644 --- a/requirements/common_constraints.txt +++ b/requirements/common_constraints.txt @@ -16,13 +16,9 @@ # this file from Github directly. It does not require packaging in edx-lint. # using LTS django version -Django<5.0 +Django<6.0 # elasticsearch>=7.14.0 includes breaking changes in it which caused issues in discovery upgrade process. # elastic search changelog: https://www.elastic.co/guide/en/enterprise-search/master/release-notes-7.14.0.html # See https://github.com/openedx/edx-platform/issues/35126 for more info elasticsearch<7.14.0 - -# Cause: https://github.com/openedx/edx-lint/issues/458 -# This can be unpinned once https://github.com/openedx/edx-lint/issues/459 has been resolved. -pip<24.3 diff --git a/requirements/edx/base.txt b/requirements/edx/base.txt index 3a9391489f5b..492d3c193c69 100644 --- a/requirements/edx/base.txt +++ b/requirements/edx/base.txt @@ -815,7 +815,7 @@ openedx-filters==2.0.1 # -r requirements/edx/kernel.in # lti-consumer-xblock # ora2 -openedx-forum==0.3.4 +openedx-forum==0.3.6 # via -r requirements/edx/kernel.in openedx-learning==0.26.0 # via diff --git a/requirements/edx/development.txt b/requirements/edx/development.txt index 4cb35eda8c26..cea879b897d1 100644 --- a/requirements/edx/development.txt +++ b/requirements/edx/development.txt @@ -1374,7 +1374,7 @@ openedx-filters==2.0.1 # -r requirements/edx/testing.txt # lti-consumer-xblock # ora2 -openedx-forum==0.3.4 +openedx-forum==0.3.6 # via # -r requirements/edx/doc.txt # -r requirements/edx/testing.txt diff --git a/requirements/edx/doc.txt b/requirements/edx/doc.txt index 76195ab08d48..c9929446bdd8 100644 --- a/requirements/edx/doc.txt +++ b/requirements/edx/doc.txt @@ -986,7 +986,7 @@ openedx-filters==2.0.1 # -r requirements/edx/base.txt # lti-consumer-xblock # ora2 -openedx-forum==0.3.4 +openedx-forum==0.3.6 # via -r requirements/edx/base.txt openedx-learning==0.26.0 # via diff --git a/requirements/edx/testing.txt b/requirements/edx/testing.txt index 7fe3dab49560..6eb1248b07ee 100644 --- a/requirements/edx/testing.txt +++ b/requirements/edx/testing.txt @@ -1044,7 +1044,7 @@ openedx-filters==2.0.1 # -r requirements/edx/base.txt # lti-consumer-xblock # ora2 -openedx-forum==0.3.4 +openedx-forum==0.3.6 # via -r requirements/edx/base.txt openedx-learning==0.26.0 # via diff --git a/requirements/pip.txt b/requirements/pip.txt index 6bb638bff471..d52d3d7fdf3b 100644 --- a/requirements/pip.txt +++ b/requirements/pip.txt @@ -9,8 +9,6 @@ wheel==0.45.1 # The following packages are considered to be unsafe in a requirements file: pip==24.2 - # via - # -c requirements/common_constraints.txt - # -r requirements/pip.in + # via -r requirements/pip.in setuptools==79.0.0 # via -r requirements/pip.in diff --git a/xmodule/util/builtin_assets.py b/xmodule/util/builtin_assets.py index cb1fca721414..6b8eb86ecf34 100644 --- a/xmodule/util/builtin_assets.py +++ b/xmodule/util/builtin_assets.py @@ -5,7 +5,6 @@ """ from pathlib import Path -import webpack_loader from django.conf import settings from django.core.exceptions import ImproperlyConfigured @@ -44,6 +43,11 @@ def add_webpack_js_to_fragment(fragment, bundle_name): """ Add all JS webpack chunks to the supplied fragment. """ - for chunk in webpack_loader.utils.get_files(bundle_name, None, 'DEFAULT'): + # Importing webpack_loader.utils at the top of the module causes an exception: + # OSError: Error reading webpack-stats.json. + # Are you sure webpack has generated the file and the path is correct? + # We are not quite sure why. + from webpack_loader.utils import get_files + for chunk in get_files(bundle_name, None, 'DEFAULT'): if chunk['name'].endswith(('.js', '.js.gz')): fragment.add_javascript_url(chunk['url'])