mirror of
https://github.com/mediacms-io/mediacms.git
synced 2026-03-10 06:57:25 -04:00
wtv
This commit is contained in:
@@ -127,6 +127,7 @@ class MediaPublishForm(forms.ModelForm):
|
|||||||
|
|
||||||
def __init__(self, user, *args, **kwargs):
|
def __init__(self, user, *args, **kwargs):
|
||||||
self.user = user
|
self.user = user
|
||||||
|
self.request = kwargs.pop('request', None)
|
||||||
super(MediaPublishForm, self).__init__(*args, **kwargs)
|
super(MediaPublishForm, self).__init__(*args, **kwargs)
|
||||||
|
|
||||||
self.has_custom_permissions = self.instance.permissions.exists() if self.instance.pk else False
|
self.has_custom_permissions = self.instance.permissions.exists() if self.instance.pk else False
|
||||||
@@ -169,6 +170,13 @@ class MediaPublishForm(forms.ModelForm):
|
|||||||
|
|
||||||
self.fields['category'].queryset = Category.objects.filter(id__in=combined_category_ids).order_by('title')
|
self.fields['category'].queryset = Category.objects.filter(id__in=combined_category_ids).order_by('title')
|
||||||
|
|
||||||
|
# Filter for LMS courses only when in embed mode
|
||||||
|
if self.request and 'category' in self.fields:
|
||||||
|
is_embed_mode = self._check_embed_mode()
|
||||||
|
if is_embed_mode:
|
||||||
|
current_queryset = self.fields['category'].queryset
|
||||||
|
self.fields['category'].queryset = current_queryset.filter(is_lms_course=True)
|
||||||
|
|
||||||
self.helper = FormHelper()
|
self.helper = FormHelper()
|
||||||
self.helper.form_tag = True
|
self.helper.form_tag = True
|
||||||
self.helper.form_class = 'post-form'
|
self.helper.form_class = 'post-form'
|
||||||
@@ -186,6 +194,22 @@ class MediaPublishForm(forms.ModelForm):
|
|||||||
|
|
||||||
self.helper.layout.append(FormActions(Submit('submit', 'Publish Media', css_class='primaryAction')))
|
self.helper.layout.append(FormActions(Submit('submit', 'Publish Media', css_class='primaryAction')))
|
||||||
|
|
||||||
|
def _check_embed_mode(self):
|
||||||
|
"""Check if the current request is in embed mode"""
|
||||||
|
if not self.request:
|
||||||
|
return False
|
||||||
|
|
||||||
|
# Check query parameter
|
||||||
|
mode = self.request.GET.get('mode', '')
|
||||||
|
if mode == 'embed_mode':
|
||||||
|
return True
|
||||||
|
|
||||||
|
# Check session storage
|
||||||
|
if self.request.session.get('media_cms_embed_mode') == 'true':
|
||||||
|
return True
|
||||||
|
|
||||||
|
return False
|
||||||
|
|
||||||
def clean(self):
|
def clean(self):
|
||||||
cleaned_data = super().clean()
|
cleaned_data = super().clean()
|
||||||
state = cleaned_data.get("state")
|
state = cleaned_data.get("state")
|
||||||
|
|||||||
@@ -226,6 +226,7 @@ class CategorySerializer(serializers.ModelSerializer):
|
|||||||
"media_count",
|
"media_count",
|
||||||
"user",
|
"user",
|
||||||
"thumbnail_url",
|
"thumbnail_url",
|
||||||
|
"is_lms_course",
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -47,7 +47,14 @@ class CategoryListContributor(APIView):
|
|||||||
"""List categories where user has contributor access"""
|
"""List categories where user has contributor access"""
|
||||||
|
|
||||||
@swagger_auto_schema(
|
@swagger_auto_schema(
|
||||||
manual_parameters=[],
|
manual_parameters=[
|
||||||
|
openapi.Parameter(
|
||||||
|
name='lms_courses_only',
|
||||||
|
type=openapi.TYPE_BOOLEAN,
|
||||||
|
in_=openapi.IN_QUERY,
|
||||||
|
description='Filter to show only LMS courses (categories with is_lms_course=True)',
|
||||||
|
),
|
||||||
|
],
|
||||||
tags=['Categories'],
|
tags=['Categories'],
|
||||||
operation_summary='Lists Categories for Contributors',
|
operation_summary='Lists Categories for Contributors',
|
||||||
operation_description='Lists all categories where the user has contributor access',
|
operation_description='Lists all categories where the user has contributor access',
|
||||||
@@ -71,6 +78,11 @@ class CategoryListContributor(APIView):
|
|||||||
else:
|
else:
|
||||||
categories = public_categories
|
categories = public_categories
|
||||||
|
|
||||||
|
# Filter for LMS courses only if requested
|
||||||
|
lms_courses_only = request.GET.get('lms_courses_only', '').lower() in ['true', '1', 'yes']
|
||||||
|
if lms_courses_only:
|
||||||
|
categories = categories.filter(is_lms_course=True)
|
||||||
|
|
||||||
categories = categories.order_by("title")
|
categories = categories.order_by("title")
|
||||||
|
|
||||||
serializer = CategorySerializer(categories, many=True, context={"request": request})
|
serializer = CategorySerializer(categories, many=True, context={"request": request})
|
||||||
|
|||||||
@@ -350,13 +350,13 @@ def publish_media(request):
|
|||||||
return HttpResponseRedirect(media.get_absolute_url())
|
return HttpResponseRedirect(media.get_absolute_url())
|
||||||
|
|
||||||
if request.method == "POST":
|
if request.method == "POST":
|
||||||
form = MediaPublishForm(request.user, request.POST, request.FILES, instance=media)
|
form = MediaPublishForm(request.user, request.POST, request.FILES, instance=media, request=request)
|
||||||
if form.is_valid():
|
if form.is_valid():
|
||||||
media = form.save()
|
media = form.save()
|
||||||
messages.add_message(request, messages.INFO, translate_string(request.LANGUAGE_CODE, "Media was edited"))
|
messages.add_message(request, messages.INFO, translate_string(request.LANGUAGE_CODE, "Media was edited"))
|
||||||
return HttpResponseRedirect(media.get_absolute_url())
|
return HttpResponseRedirect(media.get_absolute_url())
|
||||||
else:
|
else:
|
||||||
form = MediaPublishForm(request.user, instance=media)
|
form = MediaPublishForm(request.user, instance=media, request=request)
|
||||||
|
|
||||||
return render(
|
return render(
|
||||||
request,
|
request,
|
||||||
|
|||||||
@@ -3,6 +3,8 @@ import json
|
|||||||
from django import forms
|
from django import forms
|
||||||
from django.utils.safestring import mark_safe
|
from django.utils.safestring import mark_safe
|
||||||
|
|
||||||
|
from .models import Category
|
||||||
|
|
||||||
|
|
||||||
class CategoryModalWidget(forms.SelectMultiple):
|
class CategoryModalWidget(forms.SelectMultiple):
|
||||||
"""Two-panel category selector with modal"""
|
"""Two-panel category selector with modal"""
|
||||||
@@ -16,7 +18,15 @@ class CategoryModalWidget(forms.SelectMultiple):
|
|||||||
categories = []
|
categories = []
|
||||||
for opt_value, opt_label in self.choices:
|
for opt_value, opt_label in self.choices:
|
||||||
if opt_value: # Skip empty choice
|
if opt_value: # Skip empty choice
|
||||||
categories.append({'id': str(opt_value), 'title': str(opt_label)})
|
# Extract the actual ID value from ModelChoiceIteratorValue if needed
|
||||||
|
category_id = opt_value.value if hasattr(opt_value, 'value') else opt_value
|
||||||
|
|
||||||
|
# Get is_lms_course info from the Category object
|
||||||
|
try:
|
||||||
|
cat_obj = Category.objects.get(id=category_id)
|
||||||
|
categories.append({'id': str(category_id), 'title': str(opt_label), 'is_lms_course': cat_obj.is_lms_course})
|
||||||
|
except Category.DoesNotExist:
|
||||||
|
categories.append({'id': str(category_id), 'title': str(opt_label), 'is_lms_course': False})
|
||||||
|
|
||||||
all_categories_json = json.dumps(categories)
|
all_categories_json = json.dumps(categories)
|
||||||
selected_ids_json = json.dumps([str(v) for v in (value or [])])
|
selected_ids_json = json.dumps([str(v) for v in (value or [])])
|
||||||
|
|||||||
@@ -224,8 +224,27 @@
|
|||||||
}).join('');
|
}).join('');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Check if in embed mode
|
||||||
|
function isInEmbedMode() {
|
||||||
|
try {
|
||||||
|
const params = new URLSearchParams(window.location.search);
|
||||||
|
const mode = params.get('mode');
|
||||||
|
if (mode === 'embed_mode') {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return sessionStorage.getItem('media_cms_embed_mode') === 'true';
|
||||||
|
} catch (e) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Fetch categories from API
|
// Fetch categories from API
|
||||||
fetch('/api/v1/categories/contributor')
|
var apiUrl = '/api/v1/categories/contributor';
|
||||||
|
if (isInEmbedMode()) {
|
||||||
|
apiUrl += '?lms_courses_only=true';
|
||||||
|
}
|
||||||
|
|
||||||
|
fetch(apiUrl)
|
||||||
.then(function(response) { return response.json(); })
|
.then(function(response) { return response.json(); })
|
||||||
.then(function(categories) {
|
.then(function(categories) {
|
||||||
allCategories = categories;
|
allCategories = categories;
|
||||||
|
|||||||
Reference in New Issue
Block a user