This commit is contained in:
Markos Gogoulos
2025-12-29 17:26:19 +02:00
parent a88413ce14
commit 56026a1a96

View File

@@ -4,7 +4,6 @@ LTI Deep Linking 2.0 for MediaCMS
Allows instructors to select media from MediaCMS library and embed in Moodle courses Allows instructors to select media from MediaCMS library and embed in Moodle courses
""" """
from django.conf import settings
from django.contrib.auth.decorators import login_required from django.contrib.auth.decorators import login_required
from django.http import JsonResponse from django.http import JsonResponse
from django.shortcuts import render from django.shortcuts import render
@@ -14,6 +13,7 @@ from django.views import View
from django.views.decorators.csrf import csrf_exempt from django.views.decorators.csrf import csrf_exempt
from files.models import Media from files.models import Media
from files.views.media import MediaList
from .adapters import DjangoToolConfig from .adapters import DjangoToolConfig
from .models import LTIPlatform from .models import LTIPlatform
@@ -31,28 +31,29 @@ class SelectMediaView(View):
def get(self, request): def get(self, request):
"""Display media selection interface""" """Display media selection interface"""
# Get accessible media for user # Get deep link session data
user = request.user deep_link_data = request.session.get('lti_deep_link')
if not deep_link_data:
return JsonResponse({'error': 'No deep linking session data found'}, status=400)
if getattr(settings, 'USE_RBAC', False): # Reuse MediaList logic to get media with proper permissions
# Get categories user has access to media_list_view = MediaList()
categories = user.get_rbac_categories_as_member()
media_queryset = Media.objects.filter(listable=True, category__in=categories)
else:
# Get all public media
media_queryset = Media.objects.filter(listable=True, state='public')
# Optionally filter by user's own media # Get base queryset with all permission/RBAC logic applied
media_queryset = media_list_view._get_media_queryset(request)
# Apply filtering based on query params
show_my_media_only = request.GET.get('my_media_only', 'false').lower() == 'true' show_my_media_only = request.GET.get('my_media_only', 'false').lower() == 'true'
if show_my_media_only: if show_my_media_only:
media_queryset = media_queryset.filter(user=user) media_queryset = media_queryset.filter(user=request.user)
# Order by recent # Order by recent and limit for performance
media_list = media_queryset.order_by('-add_date')[:100] # Limit to 100 for performance media_list = media_queryset.order_by('-add_date')[:100]
context = { context = {
'media_list': media_list, 'media_list': media_list,
'show_my_media_only': show_my_media_only, 'show_my_media_only': show_my_media_only,
'deep_link_data': deep_link_data,
} }
return render(request, 'lti/select_media.html', context) return render(request, 'lti/select_media.html', context)