This commit is contained in:
Markos Gogoulos
2026-02-19 11:07:30 +02:00
parent 23c5c544ce
commit 17526aeecd
6 changed files with 35 additions and 31 deletions

View File

@@ -201,11 +201,11 @@ class MediaPublishForm(forms.ModelForm):
# Check query parameter # Check query parameter
mode = self.request.GET.get('mode', '') mode = self.request.GET.get('mode', '')
if mode == 'embed_mode': if mode == 'lms_embed_mode':
return True return True
# Check session storage # 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 True
return False return False

View File

@@ -3,17 +3,17 @@ export function inEmbeddedApp() {
const params = new URL(globalThis.location.href).searchParams; const params = new URL(globalThis.location.href).searchParams;
const mode = params.get('mode'); const mode = params.get('mode');
if (mode === 'embed_mode') { if (mode === 'lms_embed_mode') {
sessionStorage.setItem('media_cms_embed_mode', 'true'); sessionStorage.setItem('lms_embed_mode', 'true');
return true; return true;
} }
if (mode === 'standard') { if (mode === 'standard') {
sessionStorage.removeItem('media_cms_embed_mode'); sessionStorage.removeItem('lms_embed_mode');
return false; return false;
} }
return sessionStorage.getItem('media_cms_embed_mode') === 'true'; return sessionStorage.getItem('lms_embed_mode') === 'true';
} catch (e) { } catch (e) {
return false; return false;
} }

View File

@@ -9,33 +9,37 @@ function xmldb_filter_mediacms_install() {
global $CFG, $DB; global $CFG, $DB;
require_once($CFG->libdir . '/filterlib.php'); require_once($CFG->libdir . '/filterlib.php');
// 1. Enable the filter globally. // Enable the filter globally.
filter_set_global_state('filter_mediacms', TEXTFILTER_ON); filter_set_global_state('filter_mediacms', TEXTFILTER_ON);
// 2. Move to top priority (lowest sortorder). // Move to top priority (lowest sortorder).
// Get all global active filters. $syscontextid = context_system::instance()->id;
$filters = $DB->get_records('filter_active', ['contextid' => SYSCONTEXTID], 'sortorder ASC', 'filter, id, sortorder'); $filters = $DB->get_records('filter_active', ['contextid' => $syscontextid], 'sortorder ASC');
// If we are already the only one or something failed, stop.
if (empty($filters)) { if (empty($filters)) {
return; return;
} }
// Prepare the new order: mediacms first, then everyone else (excluding mediacms if present). // Separate mediacms from other filters by inspecting the record property,
$sortedfilters = ['filter_mediacms']; // not the array key (get_records indexes by id, not by filter name).
foreach ($filters as $filtername => $record) { $mediacmsrecord = null;
if ($filtername !== 'filter_mediacms') { $otherrecords = [];
$sortedfilters[] = $filtername; 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; $sortorder = 1;
foreach ($sortedfilters as $filtername) { if ($mediacmsrecord) {
if ($record = $DB->get_record('filter_active', ['filter' => $filtername, 'contextid' => SYSCONTEXTID])) { $mediacmsrecord->sortorder = $sortorder++;
$record->sortorder = $sortorder; $DB->update_record('filter_active', $mediacmsrecord);
$DB->update_record('filter_active', $record); }
$sortorder++; foreach ($otherrecords as $record) {
} $record->sortorder = $sortorder++;
$DB->update_record('filter_active', $record);
} }
} }

View File

@@ -36,7 +36,7 @@ class SelectMediaView(View):
def get(self, request): def get(self, request):
"""Display media selection interface - redirects to user's profile page""" """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) return HttpResponseRedirect(profile_url)
@method_decorator(csrf_exempt) @method_decorator(csrf_exempt)

View File

@@ -234,7 +234,7 @@ class LaunchView(View):
# Check if base_url already has query parameters # Check if base_url already has query parameters
separator = '&' if '?' in base_url else '?' separator = '&' if '?' in base_url else '?'
query_parts = ['mode=embed_mode'] query_parts = ['mode=lms_embed_mode']
query_parts.extend(embed_params) query_parts.extend(embed_params)
return f"{base_url}{separator}{'&'.join(query_parts)}" return f"{base_url}{separator}{'&'.join(query_parts)}"
@@ -429,7 +429,7 @@ class LaunchView(View):
except Media.DoesNotExist: except Media.DoesNotExist:
pass 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): 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]) base_url = reverse('lti:embed_media', args=[media_token])
redirect_url = self.build_url_with_embed_params(base_url, embed_params) redirect_url = self.build_url_with_embed_params(base_url, embed_params)
else: 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 # Use HTML meta refresh to ensure session cookie is preserved in cross-site contexts
html_content = f""" html_content = f"""
@@ -657,7 +657,7 @@ class MyMediaLTIView(View):
if not lti_session: if not lti_session:
return JsonResponse({'error': 'Not authenticated via LTI'}, status=403) 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) return HttpResponseRedirect(profile_url)

View File

@@ -229,10 +229,10 @@
try { try {
const params = new URLSearchParams(window.location.search); const params = new URLSearchParams(window.location.search);
const mode = params.get('mode'); const mode = params.get('mode');
if (mode === 'embed_mode') { if (mode === 'lms_embed_mode') {
return true; return true;
} }
return sessionStorage.getItem('media_cms_embed_mode') === 'true'; return sessionStorage.getItem('lms_embed_mode') === 'true';
} catch (e) { } catch (e) {
return false; return false;
} }