diff --git a/files/forms.py b/files/forms.py index 36b3e697..1e3dc0b2 100644 --- a/files/forms.py +++ b/files/forms.py @@ -201,11 +201,11 @@ class MediaPublishForm(forms.ModelForm): # Check query parameter mode = self.request.GET.get('mode', '') - if mode == 'embed_mode': + if mode == 'lms_embed_mode': return True # Check session storage - if self.request.session.get('media_cms_embed_mode') == 'true': + if self.request.session.get('lms_embed_mode') == 'true': return True return False diff --git a/frontend/src/static/js/utils/helpers/embeddedApp.ts b/frontend/src/static/js/utils/helpers/embeddedApp.ts index 4de25dc7..f0dcd29e 100644 --- a/frontend/src/static/js/utils/helpers/embeddedApp.ts +++ b/frontend/src/static/js/utils/helpers/embeddedApp.ts @@ -3,17 +3,17 @@ export function inEmbeddedApp() { const params = new URL(globalThis.location.href).searchParams; const mode = params.get('mode'); - if (mode === 'embed_mode') { - sessionStorage.setItem('media_cms_embed_mode', 'true'); + if (mode === 'lms_embed_mode') { + sessionStorage.setItem('lms_embed_mode', 'true'); return true; } if (mode === 'standard') { - sessionStorage.removeItem('media_cms_embed_mode'); + sessionStorage.removeItem('lms_embed_mode'); return false; } - return sessionStorage.getItem('media_cms_embed_mode') === 'true'; + return sessionStorage.getItem('lms_embed_mode') === 'true'; } catch (e) { return false; } diff --git a/lms-plugins/mediacms-moodle/filter/mediacms/db/install.php b/lms-plugins/mediacms-moodle/filter/mediacms/db/install.php index 951c41d6..39122c82 100644 --- a/lms-plugins/mediacms-moodle/filter/mediacms/db/install.php +++ b/lms-plugins/mediacms-moodle/filter/mediacms/db/install.php @@ -9,33 +9,37 @@ function xmldb_filter_mediacms_install() { global $CFG, $DB; require_once($CFG->libdir . '/filterlib.php'); - // 1. Enable the filter globally. + // Enable the filter globally. filter_set_global_state('filter_mediacms', TEXTFILTER_ON); - // 2. Move to top priority (lowest sortorder). - // Get all global active filters. - $filters = $DB->get_records('filter_active', ['contextid' => SYSCONTEXTID], 'sortorder ASC', 'filter, id, sortorder'); - - // If we are already the only one or something failed, stop. + // Move to top priority (lowest sortorder). + $syscontextid = context_system::instance()->id; + $filters = $DB->get_records('filter_active', ['contextid' => $syscontextid], 'sortorder ASC'); + if (empty($filters)) { return; } - // Prepare the new order: mediacms first, then everyone else (excluding mediacms if present). - $sortedfilters = ['filter_mediacms']; - foreach ($filters as $filtername => $record) { - if ($filtername !== 'filter_mediacms') { - $sortedfilters[] = $filtername; + // Separate mediacms from other filters by inspecting the record property, + // not the array key (get_records indexes by id, not by filter name). + $mediacmsrecord = null; + $otherrecords = []; + foreach ($filters as $record) { + if ($record->filter === 'filter_mediacms') { + $mediacmsrecord = $record; + } else { + $otherrecords[] = $record; } } - // Write back the new sort orders. + // Reassign sortorders: mediacms first, then everyone else. $sortorder = 1; - foreach ($sortedfilters as $filtername) { - if ($record = $DB->get_record('filter_active', ['filter' => $filtername, 'contextid' => SYSCONTEXTID])) { - $record->sortorder = $sortorder; - $DB->update_record('filter_active', $record); - $sortorder++; - } + if ($mediacmsrecord) { + $mediacmsrecord->sortorder = $sortorder++; + $DB->update_record('filter_active', $mediacmsrecord); + } + foreach ($otherrecords as $record) { + $record->sortorder = $sortorder++; + $DB->update_record('filter_active', $record); } } diff --git a/lti/deep_linking.py b/lti/deep_linking.py index 586ef336..3ee6ab08 100644 --- a/lti/deep_linking.py +++ b/lti/deep_linking.py @@ -36,7 +36,7 @@ class SelectMediaView(View): def get(self, request): """Display media selection interface - redirects to user's profile page""" - profile_url = f"/user/{request.user.username}?mode=embed_mode&action=select_media" + profile_url = f"/user/{request.user.username}?mode=lms_embed_mode&action=select_media" return HttpResponseRedirect(profile_url) @method_decorator(csrf_exempt) diff --git a/lti/views.py b/lti/views.py index a86c1e12..8aea2d96 100644 --- a/lti/views.py +++ b/lti/views.py @@ -234,7 +234,7 @@ class LaunchView(View): # Check if base_url already has query parameters separator = '&' if '?' in base_url else '?' - query_parts = ['mode=embed_mode'] + query_parts = ['mode=lms_embed_mode'] query_parts.extend(embed_params) return f"{base_url}{separator}{'&'.join(query_parts)}" @@ -429,7 +429,7 @@ class LaunchView(View): except Media.DoesNotExist: pass - return reverse('lti:my_media') + '?mode=embed_mode' + return reverse('lti:my_media') + '?mode=lms_embed_mode' def handle_state_not_found(self, request, platform=None): """ @@ -582,7 +582,7 @@ class LaunchView(View): base_url = reverse('lti:embed_media', args=[media_token]) redirect_url = self.build_url_with_embed_params(base_url, embed_params) else: - redirect_url = reverse('lti:select_media') + '?mode=embed_mode' + redirect_url = reverse('lti:select_media') + '?mode=lms_embed_mode' # Use HTML meta refresh to ensure session cookie is preserved in cross-site contexts html_content = f""" @@ -657,7 +657,7 @@ class MyMediaLTIView(View): if not lti_session: return JsonResponse({'error': 'Not authenticated via LTI'}, status=403) - profile_url = f"/user/{request.user.username}?mode=embed_mode" + profile_url = f"/user/{request.user.username}?mode=lms_embed_mode" return HttpResponseRedirect(profile_url) diff --git a/templates/cms/add-media.html b/templates/cms/add-media.html index 5ef17514..a2f5c8e4 100644 --- a/templates/cms/add-media.html +++ b/templates/cms/add-media.html @@ -229,10 +229,10 @@ try { const params = new URLSearchParams(window.location.search); const mode = params.get('mode'); - if (mode === 'embed_mode') { + if (mode === 'lms_embed_mode') { return true; } - return sessionStorage.getItem('media_cms_embed_mode') === 'true'; + return sessionStorage.getItem('lms_embed_mode') === 'true'; } catch (e) { return false; }