You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
250 lines
10 KiB
250 lines
10 KiB
from apps.course.models import Category, Course, Material, Lesson, Like
|
|
from apps.school.models import LiveLesson
|
|
|
|
from apps.content.models import (
|
|
Content, Image, Text, ImageText, Video,
|
|
Gallery, GalleryImage, ImageObject,
|
|
)
|
|
from .content import (
|
|
TextCreateSerializer, ImageCreateSerializer,
|
|
ImageTextCreateSerializer, VideoCreateSerializer,
|
|
)
|
|
|
|
|
|
class DispatchContentMixin(object):
|
|
|
|
def dispatch_content(self, obj, content):
|
|
for c in content:
|
|
if 'type' not in c or not c['type'] or 'data' not in c or not c['data']:
|
|
continue
|
|
ctype = c['type']
|
|
cdata = c['data']
|
|
if isinstance(obj, Course):
|
|
obj_type = 'course'
|
|
elif isinstance(obj, Lesson):
|
|
obj_type = 'lesson'
|
|
elif isinstance(obj, LiveLesson):
|
|
obj_type = 'live_lesson'
|
|
cdata[obj_type] = obj.id
|
|
if ctype == 'text':
|
|
if 'id' in cdata and cdata['id']:
|
|
t = Text.objects.get(id=cdata.pop('id'))
|
|
serializer = TextCreateSerializer(t, data=cdata)
|
|
if serializer.is_valid():
|
|
serializer.save()
|
|
# t.position = cdata['position']
|
|
# t.title = cdata['title']
|
|
# t.course = course
|
|
# t.txt = cdata['txt']
|
|
# t.uuid = cdata['uuid']
|
|
# t.save()
|
|
else:
|
|
serializer = TextCreateSerializer(data=cdata)
|
|
if serializer.is_valid():
|
|
serializer.save()
|
|
# t = Text.objects.create(
|
|
# position=cdata['position'],
|
|
# title=cdata['title'],
|
|
# course=course,
|
|
# txt=cdata['txt'],
|
|
# uuid=cdata['uuid'],
|
|
# )
|
|
elif ctype == 'image':
|
|
if 'id' in cdata and cdata['id']:
|
|
image = Image.objects.get(id=cdata.pop('id'))
|
|
serializer = ImageCreateSerializer(image, data=cdata)
|
|
if serializer.is_valid():
|
|
image = serializer.save()
|
|
else:
|
|
continue
|
|
# image.uuid = cdata['uuid']
|
|
# image.position = cdata['position']
|
|
# image.title = cdata['title']
|
|
# image.course = course
|
|
|
|
try:
|
|
image_object = ImageObject.objects.get(id=cdata['img'])
|
|
except ImageObject.DoesNotExist:
|
|
pass
|
|
else:
|
|
image.img = image_object
|
|
image.save()
|
|
|
|
# image.save()
|
|
else:
|
|
serializer = ImageCreateSerializer(data=cdata)
|
|
if serializer.is_valid():
|
|
image = serializer.save()
|
|
else:
|
|
continue
|
|
# image = Image.objects.create(
|
|
# position=cdata['position'],
|
|
# title=cdata['title'],
|
|
# course=course,
|
|
# uuid=cdata['uuid'],
|
|
# )
|
|
try:
|
|
image_object = ImageObject.objects.get(id=cdata['img'])
|
|
except ImageObject.DoesNotExist:
|
|
pass
|
|
else:
|
|
image.img = image_object
|
|
image.save()
|
|
|
|
elif ctype == 'image-text':
|
|
if 'id' in cdata and cdata['id']:
|
|
it = ImageText.objects.get(id=cdata.pop('id'))
|
|
serializer = ImageTextCreateSerializer(data=cdata)
|
|
if serializer.is_valid():
|
|
it = serializer.save()
|
|
else:
|
|
continue
|
|
# it.uuid = cdata['uuid']
|
|
# it.position = cdata['position']
|
|
# it.title = cdata['title']
|
|
# it.course = course
|
|
|
|
try:
|
|
image_object = ImageObject.objects.get(id=cdata['img'])
|
|
except ImageObject.DoesNotExist:
|
|
pass
|
|
else:
|
|
it.img = image_object
|
|
it.save()
|
|
|
|
# it.txt = cdata['txt']
|
|
# it.save()
|
|
else:
|
|
serializer = ImageTextCreateSerializer(data=cdata)
|
|
if serializer.is_valid():
|
|
it = serializer.save()
|
|
else:
|
|
continue
|
|
# it = ImageText.objects.create(
|
|
# position=cdata['position'],
|
|
# title=cdata['title'],
|
|
# course=course,
|
|
# txt=cdata['txt'],
|
|
# uuid=cdata['uuid'],
|
|
# )
|
|
try:
|
|
image_object = ImageObject.objects.get(id=cdata['img'])
|
|
except ImageObject.DoesNotExist:
|
|
pass
|
|
else:
|
|
it.img = image_object
|
|
it.save()
|
|
|
|
elif ctype == 'video':
|
|
if 'id' in cdata and cdata['id']:
|
|
v = Video.objects.get(id=cdata.pop('id'))
|
|
serializer = VideoCreateSerializer(v, data=cdata)
|
|
if serializer.is_valid():
|
|
serializer.save()
|
|
# v.position = cdata['position']
|
|
# v.title = cdata['title']
|
|
# v.course = course
|
|
# v.url = cdata['url']
|
|
# v.uuid = cdata['uuid']
|
|
# v.save()
|
|
else:
|
|
serializer = VideoCreateSerializer(data=cdata)
|
|
if serializer.is_valid():
|
|
serializer.save()
|
|
# v = Video.objects.create(
|
|
# position=cdata['position'],
|
|
# title=cdata['title'],
|
|
# course=course,
|
|
# url=cdata['url'],
|
|
# uuid=cdata['uuid'],
|
|
# )
|
|
elif ctype == 'images':
|
|
if 'id' in cdata and cdata['id']:
|
|
g = Gallery.objects.get(id=cdata['id'])
|
|
g.course = course
|
|
g.position = cdata['position']
|
|
g.title = cdata['title']
|
|
g.uuid = cdata['uuid']
|
|
obj_attr = getattr(g, obj_type)
|
|
obj_attr = obj
|
|
g.save()
|
|
if 'images' in cdata:
|
|
for image in cdata['images']:
|
|
if 'id' in image and image['id']:
|
|
gi = GalleryImage.objects.get(id=image['id'])
|
|
gi.img = ImageObject.objects.get(id=image['img'])
|
|
gi.save()
|
|
else:
|
|
gi = GalleryImage.objects.create(
|
|
gallery=g,
|
|
img=ImageObject.objects.get(id=image['img'])
|
|
)
|
|
else:
|
|
g = Gallery(
|
|
position=cdata['position'],
|
|
title=cdata['title'],
|
|
uuid=cdata['uuid'],
|
|
)
|
|
obj_attr = getattr(g, obj_type)
|
|
obj_attr = obj
|
|
g.save()
|
|
if 'images' in cdata:
|
|
for image in cdata['images']:
|
|
if 'id' in image and image['id']:
|
|
gi = GalleryImage.objects.get(id=image['id'])
|
|
gi.img = ImageObject.objects.get(id=image['img'])
|
|
gi.save()
|
|
else:
|
|
gi = GalleryImage.objects.create(
|
|
gallery=g,
|
|
img=ImageObject.objects.get(id=image['img'])
|
|
)
|
|
|
|
|
|
class DispatchMaterialMixin(object):
|
|
|
|
def dispatch_materials(self, course, materials):
|
|
for material in materials:
|
|
if 'id' in material and material['id']:
|
|
m = Material.objects.get(id=material['id'])
|
|
m.title = material['title']
|
|
m.cover = ImageObject.objects.get(id=material['cover'])
|
|
m.short_description = material['short_description']
|
|
m.save()
|
|
else:
|
|
m = Material.objects.create(
|
|
title=material['title'],
|
|
cover=ImageObject.objects.get(id=material['cover']),
|
|
short_description=material['short_description'],
|
|
)
|
|
course.materials.add(m)
|
|
|
|
|
|
class DispatchGalleryMixin(object):
|
|
|
|
def dispatch_gallery(self, course, gallery):
|
|
if gallery:
|
|
if 'id' in gallery and gallery['id']:
|
|
g = Gallery.objects.get(id=gallery['id'])
|
|
g.title = gallery.get('title', g.title)
|
|
g.position = 0
|
|
g.save()
|
|
else:
|
|
g = Gallery.objects.create(
|
|
title=gallery.get('title', ''),
|
|
position=0,
|
|
)
|
|
if 'images' in gallery:
|
|
for image in gallery['images']:
|
|
if 'id' in image and image['id']:
|
|
gi = GalleryImage.objects.get(id=image['id'])
|
|
gi.gallery = g
|
|
gi.img = image['img']
|
|
gi.save()
|
|
else:
|
|
gi = GalleryImage.objects.create(
|
|
gallery=g,
|
|
img=image['img'],
|
|
)
|
|
course.gallery = g
|
|
course.save()
|
|
|