from apps.course.models import Category, Course, Material, Lesson, Like from apps.content.models import ( Content, Image, Text, ImageText, Video, Gallery, GalleryImage, ImageObject, ) class DispatchContentMixin(object): def dispatch_content(self, course, 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 ctype == 'text': if 'id' in cdata and cdata['id']: t = Text.objects.get(id=cdata['id']) t.position = cdata['position'] t.title = cdata['title'] t.course = course t.txt = cdata['txt'] t.save() else: t = Text.objects.create( position=cdata['position'], title=cdata['title'], course=course, txt=cdata['txt'], ) elif ctype == 'image': if 'id' in cdata and cdata['id']: image = Image.objects.get(id=cdata['id']) image.position = cdata['position'] image.title = cdata['title'] image.course = course image.img = ImageObject.objects.get(id=cdata['img']) image.save() else: image = Image.objects.create( position=cdata['position'], title=cdata['title'], course=course, img=ImageObject.objects.get(id=cdata['img']), ) elif ctype == 'image-text': if 'id' in cdata and cdata['id']: it = ImageText.objects.get(id=cdata['id']) it.position = cdata['position'] it.title = cdata['title'] it.course = course it.img = ImageObject.objects.get(id=cdata['img']) it.txt = cdata['txt'] it.save() else: it = ImageText.objects.create( position=cdata['position'], title=cdata['title'], course=course, img=ImageObject.objects.get(id=cdata['img']), txt=cdata['txt'], ) elif ctype == 'video': if 'id' in cdata and cdata['id']: v = Video.objects.get(id=cdata['id']) v.position = cdata['position'] v.title = cdata['title'] v.course = course v.url = cdata['url'] v.save() else: v = Video.objects.create( position=cdata['position'], title=cdata['title'], course=course, url=cdata['url'], ) 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.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.objects.create( course=course, position=cdata['position'], title=cdata['title'], ) 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()