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
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

View File

@@ -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;
}

View File

@@ -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);
}
}

View File

@@ -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)

View File

@@ -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)

View File

@@ -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;
}