diff --git a/file_link/serializers.py b/file_link/serializers.py index 2f8711f..519207f 100644 --- a/file_link/serializers.py +++ b/file_link/serializers.py @@ -113,12 +113,13 @@ class SimpleFileLinkSerializer(serializers.ModelSerializer): tags = data["tags"] for tag in tags: - if tag["id"] == "": - tag = Tag.objects.create(name = tag["name"]) - else: - tag = get_object_or_404(Tag, id = tag["id"]) + if not tag["name"] == "": + if tag["id"] == "": + tag = Tag.objects.create(name = tag["name"]) + else: + tag = get_object_or_404(Tag, id = tag["id"]) - file_link.tags.add(tag) + file_link.tags.add(tag) resource = get_object_or_404(Resource, id = file_link.id) @@ -222,12 +223,13 @@ class CompleteFileLinkSerializer(serializers.ModelSerializer): tags = data["tags"] for tag in tags: - if tag["id"] == "": - tag = Tag.objects.create(name = tag["name"]) - else: - tag = get_object_or_404(Tag, id = tag["id"]) + if not tag["name"] == "": + if tag["id"] == "": + tag = Tag.objects.create(name = tag["name"]) + else: + tag = get_object_or_404(Tag, id = tag["id"]) - file_link.tags.add(tag) + file_link.tags.add(tag) students = data["students"] subject = get_object_or_404(Subject, slug = self.context.get("subject", None)) diff --git a/goals/serializers.py b/goals/serializers.py index be9f254..1a53d2b 100644 --- a/goals/serializers.py +++ b/goals/serializers.py @@ -37,7 +37,13 @@ class SimpleGoalSerializer(serializers.ModelSerializer): class Meta: model = Goals + extra_kwargs = { + "tags": { + "validators": [], + }, + } exclude = ('students', 'groups',) + validators = [] def create(self, data): topic = data['topic'] @@ -87,12 +93,13 @@ class SimpleGoalSerializer(serializers.ModelSerializer): tags = data["tags"] for tag in tags: - if tag["id"] == "": - tag = Tag.objects.create(name = tag["name"]) - else: - tag = get_object_or_404(Tag, id = tag["id"]) + if not tag["name"] == "": + if tag["id"] == "": + tag = Tag.objects.create(name = tag["name"]) + else: + tag = get_object_or_404(Tag, id = tag["id"]) - goals.tags.add(tag) + goals.tags.add(tag) resource = get_object_or_404(Resource, id = goals.id) @@ -177,12 +184,13 @@ class CompleteGoalSerializer(serializers.ModelSerializer): tags = data["tags"] for tag in tags: - if tag["id"] == "": - tag = Tag.objects.create(name = tag["name"]) - else: - tag = get_object_or_404(Tag, id = tag["id"]) + if not tag["name"] == "": + if tag["id"] == "": + tag = Tag.objects.create(name = tag["name"]) + else: + tag = get_object_or_404(Tag, id = tag["id"]) - goals.tags.add(tag) + goals.tags.add(tag) students = data["students"] subject = get_object_or_404(Subject, slug = self.context.get("subject", None)) diff --git a/links/serializers.py b/links/serializers.py index 27a102d..8c591d4 100644 --- a/links/serializers.py +++ b/links/serializers.py @@ -77,12 +77,13 @@ class SimpleLinkSerializer(serializers.ModelSerializer): tags = data["tags"] for tag in tags: - if tag["id"] == "": - tag = Tag.objects.create(name = tag["name"]) - else: - tag = get_object_or_404(Tag, id = tag["id"]) + if not tag["name"] == "": + if tag["id"] == "": + tag = Tag.objects.create(name = tag["name"]) + else: + tag = get_object_or_404(Tag, id = tag["id"]) - link.tags.add(tag) + link.tags.add(tag) resource = get_object_or_404(Resource, id = link.id) @@ -159,12 +160,13 @@ class CompleteLinkSerializer(serializers.ModelSerializer): tags = data["tags"] for tag in tags: - if tag["id"] == "": - tag = Tag.objects.create(name = tag["name"]) - else: - tag = get_object_or_404(Tag, id = tag["id"]) + if not tag["name"] == "": + if tag["id"] == "": + tag = Tag.objects.create(name = tag["name"]) + else: + tag = get_object_or_404(Tag, id = tag["id"]) - link.tags.add(tag) + link.tags.add(tag) students = data["students"] subject = get_object_or_404(Subject, slug = self.context.get("subject", None)) diff --git a/pdf_file/serializers.py b/pdf_file/serializers.py index 5ad7c95..a43700f 100644 --- a/pdf_file/serializers.py +++ b/pdf_file/serializers.py @@ -106,12 +106,13 @@ class SimplePDFFileSerializer(serializers.ModelSerializer): tags = data["tags"] for tag in tags: - if tag["id"] == "": - tag = Tag.objects.create(name = tag["name"]) - else: - tag = get_object_or_404(Tag, id = tag["id"]) + if not tag["name"] == "": + if tag["id"] == "": + tag = Tag.objects.create(name = tag["name"]) + else: + tag = get_object_or_404(Tag, id = tag["id"]) - pdf.tags.add(tag) + pdf.tags.add(tag) resource = get_object_or_404(Resource, id = pdf.id) @@ -216,12 +217,13 @@ class CompletePDFFileSerializer(serializers.ModelSerializer): tags = data["tags"] for tag in tags: - if tag["id"] == "": - tag = Tag.objects.create(name = tag["name"]) - else: - tag = get_object_or_404(Tag, id = tag["id"]) + if not tag["name"] == "": + if tag["id"] == "": + tag = Tag.objects.create(name = tag["name"]) + else: + tag = get_object_or_404(Tag, id = tag["id"]) - pdf.tags.add(tag) + pdf.tags.add(tag) students = data["students"] subject = get_object_or_404(Subject, slug = self.context.get("subject", None)) diff --git a/subjects/models.py b/subjects/models.py index a2fce0c..f42fb29 100644 --- a/subjects/models.py +++ b/subjects/models.py @@ -11,7 +11,7 @@ from django.core.exceptions import ValidationError from categories.models import Category import datetime class Tag(models.Model): - name = models.CharField( _("Name"), unique = True,max_length= 200) + name = models.CharField( _("Name"), unique = True,max_length= 200, blank = True) def __str__(self): return self.name diff --git a/subjects/views.py b/subjects/views.py index 90fb673..20dd2d2 100644 --- a/subjects/views.py +++ b/subjects/views.py @@ -55,6 +55,8 @@ from youtube_video.serializers import SimpleYTVideoSerializer, CompleteYTVideoSe from youtube_video.models import YTVideo from webpage.serializers import SimpleWebpageSerializer, CompleteWebpageSerializer from webpage.models import Webpage +from webconference.serializers import SimpleWebconferenceSerializer, CompleteWebconferenceSerializer +from webconference.models import Webconference from amadeus.permissions import has_category_permissions, has_subject_permissions, has_subject_view_permissions, has_resource_permissions @@ -767,6 +769,7 @@ def realize_backup(request, subject): links = Link.objects.filter(id__in = resources_ids) pdffiles = PDFFile.objects.filter(id__in = resources_ids) goals = Goals.objects.filter(id__in = resources_ids) + webconferences = Webconference.objects.filter(id__in = resources_ids) for filelink in filelinks: @@ -808,6 +811,7 @@ def realize_backup(request, subject): serializer_l = CompleteLinkSerializer(links, many = True) serializer_p = CompletePDFFileSerializer(pdffiles, many = True) serializer_g = CompleteGoalSerializer(goals, many = True) + serializer_c = CompleteWebconferenceSerializer(webconferences, many = True) else: serializer_w = SimpleWebpageSerializer(webpages, many = True) serializer_y = SimpleYTVideoSerializer(ytvideos, many = True) @@ -815,6 +819,7 @@ def realize_backup(request, subject): serializer_l = SimpleLinkSerializer(links, many = True) serializer_p = SimplePDFFileSerializer(pdffiles, many = True) serializer_g = SimpleGoalSerializer(goals, many = True) + serializer_c = SimpleWebconferenceSerializer(webconferences, many = True) if len(serializer_w.data) > 0: data_list.append(serializer_w.data) @@ -834,6 +839,9 @@ def realize_backup(request, subject): if len(serializer_g.data) > 0: data_list.append(serializer_g.data) + if len(serializer_c.data) > 0: + data_list.append(serializer_c.data) + json.dump(data_list, file) file.close() @@ -931,6 +939,11 @@ def realize_restore(request, subject): serial = CompleteYTVideoSerializer(data = line, many = True, context = {'subject': subject, 'files': file}) else: serial = SimpleYTVideoSerializer(data = line, many = True, context = {'subject': subject}) + elif line[0]["_my_subclass"] == "webconference": + if "students" in line[0]: + serial = CompleteWebconferenceSerializer(data = line, many = True, context = {'subject': subject, 'files': file}) + else: + serial = SimpleWebconferenceSerializer(data = line, many = True, context = {'subject': subject}) serial.is_valid() serial.save() diff --git a/webconference/serializers.py b/webconference/serializers.py new file mode 100644 index 0000000..3d7fc35 --- /dev/null +++ b/webconference/serializers.py @@ -0,0 +1,251 @@ +import os +from django.conf import settings +from django.core.files import File +from rest_framework import serializers +from django.shortcuts import get_object_or_404 + +from subjects.serializers import TagSerializer +from topics.serializers import TopicSerializer +from pendencies.serializers import PendenciesSerializer +from students_group.serializers import StudentsGroupSerializer +from users.serializers import UserBackupSerializer + +from subjects.models import Tag, Subject +from topics.models import Topic, Resource +from pendencies.models import Pendencies +from students_group.models import StudentsGroup +from log.models import Log +from users.models import User + +from .models import Webconference + +class SimpleWebconferenceSerializer(serializers.ModelSerializer): + topic = TopicSerializer('get_subject') + tags = TagSerializer(many = True) + pendencies_resource = PendenciesSerializer(many = True) + + def get_subject(self, obj): + subject = self.context.get("subject", None) + + return subject + + class Meta: + model = Webconference + exclude = ('students', 'groups',) + + def create(self, data): + topic = data['topic'] + + webconference = None + + if not topic["id"] is None: + if "subject" in topic: + r_exits = Resource.objects.filter(topic__subject = topic["subject"], name__unaccent__iexact = data["name"]) + else: + r_exits = Resource.objects.filter(topic__subject__id = topic["subject_id"], name__unaccent__iexact = data["name"]) + + if not r_exits.exists(): + if topic['id'] == "": + topic_exist = Topic.objects.filter(subject = topic['subject'], name__unaccent__iexact = topic["name"]) + + if topic_exist.exists(): + topic = topic_exist[0] + else: + topic = Topic.objects.create(name = topic['name'], subject = topic['subject'], repository = topic['repository'], visible = topic['visible'], order = topic['order']) + + data["topic"] = topic + else: + data["topic"] = get_object_or_404(Topic, id = topic["id"]) + + webconference_data = data + + pendencies = webconference_data["pendencies_resource"] + del webconference_data["pendencies_resource"] + + webconference = Webconference() + webconference.name = webconference_data["name"] + webconference.brief_description = webconference_data["brief_description"] + webconference.show_window = webconference_data["show_window"] + webconference.all_students = webconference_data["all_students"] + webconference.visible = webconference_data["visible"] + webconference.order = webconference_data["order"] + webconference.topic = webconference_data["topic"] + webconference.presentation = webconference_data["presentation"] + webconference.start = webconference_data["start"] + webconference.end = webconference_data["end"] + + webconference.save() + + tags = data["tags"] + + for tag in tags: + if not tag["name"] == "": + if tag["id"] == "": + tag = Tag.objects.create(name = tag["name"]) + else: + tag = get_object_or_404(Tag, id = tag["id"]) + + webconference.tags.add(tag) + + resource = get_object_or_404(Resource, id = webconference.id) + + for pend in pendencies: + Pendencies.objects.create(resource = resource, **pend) + + return webconference + + def update(self, instance, data): + return instance + +class CompleteWebconferenceSerializer(serializers.ModelSerializer): + topic = TopicSerializer('get_subject') + tags = TagSerializer(many = True) + pendencies_resource = PendenciesSerializer(many = True) + groups = StudentsGroupSerializer('get_files', many = True) + students = UserBackupSerializer('get_files', many = True) + + def get_subject(self, obj): + subject = self.context.get("subject", None) + + return subject + + def get_files(self, obj): + files = self.context.get("files", None) + + return files + + class Meta: + model = Webconference + fields = '__all__' + + def create(self, data): + topic = data['topic'] + + webconference = None + + if not topic["id"] is None: + if "subject" in topic: + r_exits = Resource.objects.filter(topic__subject = topic["subject"], name__unaccent__iexact = data["name"]) + else: + r_exits = Resource.objects.filter(topic__subject__id = topic["subject_id"], name__unaccent__iexact = data["name"]) + + if not r_exits.exists(): + if topic['id'] == "": + topic_exist = Topic.objects.filter(subject = topic['subject'], name__unaccent__iexact = topic["name"]) + + if topic_exist.exists(): + topic = topic_exist[0] + else: + topic = Topic.objects.create(name = topic['name'], subject = topic['subject'], repository = topic['repository'], visible = topic['visible'], order = topic['order']) + + data["topic"] = topic + else: + data["topic"] = get_object_or_404(Topic, id = topic["id"]) + + webconference_data = data + + pendencies = webconference_data["pendencies_resource"] + del webconference_data["pendencies_resource"] + + webconference = Webconference() + webconference.name = webconference_data["name"] + webconference.brief_description = webconference_data["brief_description"] + webconference.show_window = webconference_data["show_window"] + webconference.all_students = webconference_data["all_students"] + webconference.visible = webconference_data["visible"] + webconference.order = webconference_data["order"] + webconference.topic = webconference_data["topic"] + webconference.presentation = webconference_data["presentation"] + webconference.start = webconference_data["start"] + webconference.end = webconference_data["end"] + + webconference.save() + + tags = data["tags"] + + for tag in tags: + if not tag["name"] == "": + if tag["id"] == "": + tag = Tag.objects.create(name = tag["name"]) + else: + tag = get_object_or_404(Tag, id = tag["id"]) + + webconference.tags.add(tag) + + students = data["students"] + subject = get_object_or_404(Subject, slug = self.context.get("subject", None)) + + for student_data in students: + logs = student_data["get_items"] + + if student_data["id"] == "": + u_exist = User.objects.filter(email = student_data["email"]) + + + if not u_exist.exists(): + student = u_exist[0] + + for log in logs: + log["user_id"] = student.id + + l_exists = Log.objects.filter(user_id = log["user_id"], user = log["user"], user_email = log["user_email"], action = log["action"], resource = log["resource"], component = log["component"], context = log["context"]) + + if not l_exists.exists(): + Log.objects.create(**log) + else: + student = User() + student.email = student_data["email"] + student.username = student_data["username"] + student.last_name = student_data["last_name"] + student.social_name = student_data["social_name"] + student.show_email = student_data["show_email"] + student.is_staff = student_data["is_staff"] + student.is_active = student_data["is_active"] + student.image = student_data["image"] + + student.save() + + for log in logs: + log["user_id"] = student.id + + Log.objects.create(**log) + else: + student = get_object_or_404(User, id = student_data["id"]) + + for log in logs: + l_exists = Log.objects.filter(user_id = log["user_id"], user = log["user"], user_email = log["user_email"], action = log["action"], resource = log["resource"], component = log["component"], context = log["context"]) + + if not l_exists.exists(): + Log.objects.create(**log) + + webconference.students.add(student) + subject.students.add(student) + + groups = data["groups"] + + for group_data in groups: + g_exists = StudentsGroup.objects.filter(subject = subject, slug = group_data["slug"]) + + if g_exists.exists(): + group = g_exists[0] + else: + group = StudentsGroup() + group.name = group_data["name"] + group.description = group_data["description"] + group.subject = subject + + group.save() + + for participant in group_data["participants"]: + p_user = get_object_or_404(User, email = participant["email"]) + + group.participants.add(p_user) + + webconference.groups.add(group) + + resource = get_object_or_404(Resource, id = webconference.id) + + for pend in pendencies: + Pendencies.objects.create(resource = resource, **pend) + + return webconference \ No newline at end of file diff --git a/webpage/serializers.py b/webpage/serializers.py index f041f12..3b5ec44 100644 --- a/webpage/serializers.py +++ b/webpage/serializers.py @@ -77,12 +77,13 @@ class SimpleWebpageSerializer(serializers.ModelSerializer): tags = data["tags"] for tag in tags: - if tag["id"] == "": - tag = Tag.objects.create(name = tag["name"]) - else: - tag = get_object_or_404(Tag, id = tag["id"]) + if not tag["name"] == "": + if tag["id"] == "": + tag = Tag.objects.create(name = tag["name"]) + else: + tag = get_object_or_404(Tag, id = tag["id"]) - webpage.tags.add(tag) + webpage.tags.add(tag) resource = get_object_or_404(Resource, id = webpage.id) @@ -159,12 +160,13 @@ class CompleteWebpageSerializer(serializers.ModelSerializer): tags = data["tags"] for tag in tags: - if tag["id"] == "": - tag = Tag.objects.create(name = tag["name"]) - else: - tag = get_object_or_404(Tag, id = tag["id"]) + if not tag["name"] == "": + if tag["id"] == "": + tag = Tag.objects.create(name = tag["name"]) + else: + tag = get_object_or_404(Tag, id = tag["id"]) - webpage.tags.add(tag) + webpage.tags.add(tag) students = data["students"] subject = get_object_or_404(Subject, slug = self.context.get("subject", None)) diff --git a/youtube_video/serializers.py b/youtube_video/serializers.py index 1233d4a..0e0f815 100644 --- a/youtube_video/serializers.py +++ b/youtube_video/serializers.py @@ -78,12 +78,13 @@ class SimpleYTVideoSerializer(serializers.ModelSerializer): tags = data["tags"] for tag in tags: - if tag["id"] == "": - tag = Tag.objects.create(name = tag["name"]) - else: - tag = get_object_or_404(Tag, id = tag["id"]) + if not tag["name"] == "": + if tag["id"] == "": + tag = Tag.objects.create(name = tag["name"]) + else: + tag = get_object_or_404(Tag, id = tag["id"]) - ytvideo.tags.add(tag) + ytvideo.tags.add(tag) resource = get_object_or_404(Resource, id = ytvideo.id) @@ -161,12 +162,13 @@ class CompleteYTVideoSerializer(serializers.ModelSerializer): tags = data["tags"] for tag in tags: - if tag["id"] == "": - tag = Tag.objects.create(name = tag["name"]) - else: - tag = get_object_or_404(Tag, id = tag["id"]) + if not tag["name"] == "": + if tag["id"] == "": + tag = Tag.objects.create(name = tag["name"]) + else: + tag = get_object_or_404(Tag, id = tag["id"]) - ytvideo.tags.add(tag) + ytvideo.tags.add(tag) students = data["students"] subject = get_object_or_404(Subject, slug = self.context.get("subject", None)) -- libgit2 0.21.2