Commit 9fe3158ff773e4b606304acc893d16cfe0a08283

Authored by Zambom
1 parent 93aa9f63

Backup/Restore: Fixing blank tag error & add webconference resource

file_link/serializers.py
... ... @@ -113,12 +113,13 @@ class SimpleFileLinkSerializer(serializers.ModelSerializer):
113 113 tags = data["tags"]
114 114  
115 115 for tag in tags:
116   - if tag["id"] == "":
117   - tag = Tag.objects.create(name = tag["name"])
118   - else:
119   - tag = get_object_or_404(Tag, id = tag["id"])
  116 + if not tag["name"] == "":
  117 + if tag["id"] == "":
  118 + tag = Tag.objects.create(name = tag["name"])
  119 + else:
  120 + tag = get_object_or_404(Tag, id = tag["id"])
120 121  
121   - file_link.tags.add(tag)
  122 + file_link.tags.add(tag)
122 123  
123 124 resource = get_object_or_404(Resource, id = file_link.id)
124 125  
... ... @@ -222,12 +223,13 @@ class CompleteFileLinkSerializer(serializers.ModelSerializer):
222 223 tags = data["tags"]
223 224  
224 225 for tag in tags:
225   - if tag["id"] == "":
226   - tag = Tag.objects.create(name = tag["name"])
227   - else:
228   - tag = get_object_or_404(Tag, id = tag["id"])
  226 + if not tag["name"] == "":
  227 + if tag["id"] == "":
  228 + tag = Tag.objects.create(name = tag["name"])
  229 + else:
  230 + tag = get_object_or_404(Tag, id = tag["id"])
229 231  
230   - file_link.tags.add(tag)
  232 + file_link.tags.add(tag)
231 233  
232 234 students = data["students"]
233 235 subject = get_object_or_404(Subject, slug = self.context.get("subject", None))
... ...
goals/serializers.py
... ... @@ -37,7 +37,13 @@ class SimpleGoalSerializer(serializers.ModelSerializer):
37 37  
38 38 class Meta:
39 39 model = Goals
  40 + extra_kwargs = {
  41 + "tags": {
  42 + "validators": [],
  43 + },
  44 + }
40 45 exclude = ('students', 'groups',)
  46 + validators = []
41 47  
42 48 def create(self, data):
43 49 topic = data['topic']
... ... @@ -87,12 +93,13 @@ class SimpleGoalSerializer(serializers.ModelSerializer):
87 93 tags = data["tags"]
88 94  
89 95 for tag in tags:
90   - if tag["id"] == "":
91   - tag = Tag.objects.create(name = tag["name"])
92   - else:
93   - tag = get_object_or_404(Tag, id = tag["id"])
  96 + if not tag["name"] == "":
  97 + if tag["id"] == "":
  98 + tag = Tag.objects.create(name = tag["name"])
  99 + else:
  100 + tag = get_object_or_404(Tag, id = tag["id"])
94 101  
95   - goals.tags.add(tag)
  102 + goals.tags.add(tag)
96 103  
97 104 resource = get_object_or_404(Resource, id = goals.id)
98 105  
... ... @@ -177,12 +184,13 @@ class CompleteGoalSerializer(serializers.ModelSerializer):
177 184 tags = data["tags"]
178 185  
179 186 for tag in tags:
180   - if tag["id"] == "":
181   - tag = Tag.objects.create(name = tag["name"])
182   - else:
183   - tag = get_object_or_404(Tag, id = tag["id"])
  187 + if not tag["name"] == "":
  188 + if tag["id"] == "":
  189 + tag = Tag.objects.create(name = tag["name"])
  190 + else:
  191 + tag = get_object_or_404(Tag, id = tag["id"])
184 192  
185   - goals.tags.add(tag)
  193 + goals.tags.add(tag)
186 194  
187 195 students = data["students"]
188 196 subject = get_object_or_404(Subject, slug = self.context.get("subject", None))
... ...
links/serializers.py
... ... @@ -77,12 +77,13 @@ class SimpleLinkSerializer(serializers.ModelSerializer):
77 77 tags = data["tags"]
78 78  
79 79 for tag in tags:
80   - if tag["id"] == "":
81   - tag = Tag.objects.create(name = tag["name"])
82   - else:
83   - tag = get_object_or_404(Tag, id = tag["id"])
  80 + if not tag["name"] == "":
  81 + if tag["id"] == "":
  82 + tag = Tag.objects.create(name = tag["name"])
  83 + else:
  84 + tag = get_object_or_404(Tag, id = tag["id"])
84 85  
85   - link.tags.add(tag)
  86 + link.tags.add(tag)
86 87  
87 88 resource = get_object_or_404(Resource, id = link.id)
88 89  
... ... @@ -159,12 +160,13 @@ class CompleteLinkSerializer(serializers.ModelSerializer):
159 160 tags = data["tags"]
160 161  
161 162 for tag in tags:
162   - if tag["id"] == "":
163   - tag = Tag.objects.create(name = tag["name"])
164   - else:
165   - tag = get_object_or_404(Tag, id = tag["id"])
  163 + if not tag["name"] == "":
  164 + if tag["id"] == "":
  165 + tag = Tag.objects.create(name = tag["name"])
  166 + else:
  167 + tag = get_object_or_404(Tag, id = tag["id"])
166 168  
167   - link.tags.add(tag)
  169 + link.tags.add(tag)
168 170  
169 171 students = data["students"]
170 172 subject = get_object_or_404(Subject, slug = self.context.get("subject", None))
... ...
pdf_file/serializers.py
... ... @@ -106,12 +106,13 @@ class SimplePDFFileSerializer(serializers.ModelSerializer):
106 106 tags = data["tags"]
107 107  
108 108 for tag in tags:
109   - if tag["id"] == "":
110   - tag = Tag.objects.create(name = tag["name"])
111   - else:
112   - tag = get_object_or_404(Tag, id = tag["id"])
  109 + if not tag["name"] == "":
  110 + if tag["id"] == "":
  111 + tag = Tag.objects.create(name = tag["name"])
  112 + else:
  113 + tag = get_object_or_404(Tag, id = tag["id"])
113 114  
114   - pdf.tags.add(tag)
  115 + pdf.tags.add(tag)
115 116  
116 117 resource = get_object_or_404(Resource, id = pdf.id)
117 118  
... ... @@ -216,12 +217,13 @@ class CompletePDFFileSerializer(serializers.ModelSerializer):
216 217 tags = data["tags"]
217 218  
218 219 for tag in tags:
219   - if tag["id"] == "":
220   - tag = Tag.objects.create(name = tag["name"])
221   - else:
222   - tag = get_object_or_404(Tag, id = tag["id"])
  220 + if not tag["name"] == "":
  221 + if tag["id"] == "":
  222 + tag = Tag.objects.create(name = tag["name"])
  223 + else:
  224 + tag = get_object_or_404(Tag, id = tag["id"])
223 225  
224   - pdf.tags.add(tag)
  226 + pdf.tags.add(tag)
225 227  
226 228 students = data["students"]
227 229 subject = get_object_or_404(Subject, slug = self.context.get("subject", None))
... ...
subjects/models.py
... ... @@ -11,7 +11,7 @@ from django.core.exceptions import ValidationError
11 11 from categories.models import Category
12 12 import datetime
13 13 class Tag(models.Model):
14   - name = models.CharField( _("Name"), unique = True,max_length= 200)
  14 + name = models.CharField( _("Name"), unique = True,max_length= 200, blank = True)
15 15 def __str__(self):
16 16 return self.name
17 17  
... ...
subjects/views.py
... ... @@ -55,6 +55,8 @@ from youtube_video.serializers import SimpleYTVideoSerializer, CompleteYTVideoSe
55 55 from youtube_video.models import YTVideo
56 56 from webpage.serializers import SimpleWebpageSerializer, CompleteWebpageSerializer
57 57 from webpage.models import Webpage
  58 +from webconference.serializers import SimpleWebconferenceSerializer, CompleteWebconferenceSerializer
  59 +from webconference.models import Webconference
58 60  
59 61 from amadeus.permissions import has_category_permissions, has_subject_permissions, has_subject_view_permissions, has_resource_permissions
60 62  
... ... @@ -767,6 +769,7 @@ def realize_backup(request, subject):
767 769 links = Link.objects.filter(id__in = resources_ids)
768 770 pdffiles = PDFFile.objects.filter(id__in = resources_ids)
769 771 goals = Goals.objects.filter(id__in = resources_ids)
  772 + webconferences = Webconference.objects.filter(id__in = resources_ids)
770 773  
771 774  
772 775 for filelink in filelinks:
... ... @@ -808,6 +811,7 @@ def realize_backup(request, subject):
808 811 serializer_l = CompleteLinkSerializer(links, many = True)
809 812 serializer_p = CompletePDFFileSerializer(pdffiles, many = True)
810 813 serializer_g = CompleteGoalSerializer(goals, many = True)
  814 + serializer_c = CompleteWebconferenceSerializer(webconferences, many = True)
811 815 else:
812 816 serializer_w = SimpleWebpageSerializer(webpages, many = True)
813 817 serializer_y = SimpleYTVideoSerializer(ytvideos, many = True)
... ... @@ -815,6 +819,7 @@ def realize_backup(request, subject):
815 819 serializer_l = SimpleLinkSerializer(links, many = True)
816 820 serializer_p = SimplePDFFileSerializer(pdffiles, many = True)
817 821 serializer_g = SimpleGoalSerializer(goals, many = True)
  822 + serializer_c = SimpleWebconferenceSerializer(webconferences, many = True)
818 823  
819 824 if len(serializer_w.data) > 0:
820 825 data_list.append(serializer_w.data)
... ... @@ -834,6 +839,9 @@ def realize_backup(request, subject):
834 839 if len(serializer_g.data) > 0:
835 840 data_list.append(serializer_g.data)
836 841  
  842 + if len(serializer_c.data) > 0:
  843 + data_list.append(serializer_c.data)
  844 +
837 845 json.dump(data_list, file)
838 846  
839 847 file.close()
... ... @@ -931,6 +939,11 @@ def realize_restore(request, subject):
931 939 serial = CompleteYTVideoSerializer(data = line, many = True, context = {'subject': subject, 'files': file})
932 940 else:
933 941 serial = SimpleYTVideoSerializer(data = line, many = True, context = {'subject': subject})
  942 + elif line[0]["_my_subclass"] == "webconference":
  943 + if "students" in line[0]:
  944 + serial = CompleteWebconferenceSerializer(data = line, many = True, context = {'subject': subject, 'files': file})
  945 + else:
  946 + serial = SimpleWebconferenceSerializer(data = line, many = True, context = {'subject': subject})
934 947  
935 948 serial.is_valid()
936 949 serial.save()
... ...
webconference/serializers.py 0 → 100644
... ... @@ -0,0 +1,251 @@
  1 +import os
  2 +from django.conf import settings
  3 +from django.core.files import File
  4 +from rest_framework import serializers
  5 +from django.shortcuts import get_object_or_404
  6 +
  7 +from subjects.serializers import TagSerializer
  8 +from topics.serializers import TopicSerializer
  9 +from pendencies.serializers import PendenciesSerializer
  10 +from students_group.serializers import StudentsGroupSerializer
  11 +from users.serializers import UserBackupSerializer
  12 +
  13 +from subjects.models import Tag, Subject
  14 +from topics.models import Topic, Resource
  15 +from pendencies.models import Pendencies
  16 +from students_group.models import StudentsGroup
  17 +from log.models import Log
  18 +from users.models import User
  19 +
  20 +from .models import Webconference
  21 +
  22 +class SimpleWebconferenceSerializer(serializers.ModelSerializer):
  23 + topic = TopicSerializer('get_subject')
  24 + tags = TagSerializer(many = True)
  25 + pendencies_resource = PendenciesSerializer(many = True)
  26 +
  27 + def get_subject(self, obj):
  28 + subject = self.context.get("subject", None)
  29 +
  30 + return subject
  31 +
  32 + class Meta:
  33 + model = Webconference
  34 + exclude = ('students', 'groups',)
  35 +
  36 + def create(self, data):
  37 + topic = data['topic']
  38 +
  39 + webconference = None
  40 +
  41 + if not topic["id"] is None:
  42 + if "subject" in topic:
  43 + r_exits = Resource.objects.filter(topic__subject = topic["subject"], name__unaccent__iexact = data["name"])
  44 + else:
  45 + r_exits = Resource.objects.filter(topic__subject__id = topic["subject_id"], name__unaccent__iexact = data["name"])
  46 +
  47 + if not r_exits.exists():
  48 + if topic['id'] == "":
  49 + topic_exist = Topic.objects.filter(subject = topic['subject'], name__unaccent__iexact = topic["name"])
  50 +
  51 + if topic_exist.exists():
  52 + topic = topic_exist[0]
  53 + else:
  54 + topic = Topic.objects.create(name = topic['name'], subject = topic['subject'], repository = topic['repository'], visible = topic['visible'], order = topic['order'])
  55 +
  56 + data["topic"] = topic
  57 + else:
  58 + data["topic"] = get_object_or_404(Topic, id = topic["id"])
  59 +
  60 + webconference_data = data
  61 +
  62 + pendencies = webconference_data["pendencies_resource"]
  63 + del webconference_data["pendencies_resource"]
  64 +
  65 + webconference = Webconference()
  66 + webconference.name = webconference_data["name"]
  67 + webconference.brief_description = webconference_data["brief_description"]
  68 + webconference.show_window = webconference_data["show_window"]
  69 + webconference.all_students = webconference_data["all_students"]
  70 + webconference.visible = webconference_data["visible"]
  71 + webconference.order = webconference_data["order"]
  72 + webconference.topic = webconference_data["topic"]
  73 + webconference.presentation = webconference_data["presentation"]
  74 + webconference.start = webconference_data["start"]
  75 + webconference.end = webconference_data["end"]
  76 +
  77 + webconference.save()
  78 +
  79 + tags = data["tags"]
  80 +
  81 + for tag in tags:
  82 + if not tag["name"] == "":
  83 + if tag["id"] == "":
  84 + tag = Tag.objects.create(name = tag["name"])
  85 + else:
  86 + tag = get_object_or_404(Tag, id = tag["id"])
  87 +
  88 + webconference.tags.add(tag)
  89 +
  90 + resource = get_object_or_404(Resource, id = webconference.id)
  91 +
  92 + for pend in pendencies:
  93 + Pendencies.objects.create(resource = resource, **pend)
  94 +
  95 + return webconference
  96 +
  97 + def update(self, instance, data):
  98 + return instance
  99 +
  100 +class CompleteWebconferenceSerializer(serializers.ModelSerializer):
  101 + topic = TopicSerializer('get_subject')
  102 + tags = TagSerializer(many = True)
  103 + pendencies_resource = PendenciesSerializer(many = True)
  104 + groups = StudentsGroupSerializer('get_files', many = True)
  105 + students = UserBackupSerializer('get_files', many = True)
  106 +
  107 + def get_subject(self, obj):
  108 + subject = self.context.get("subject", None)
  109 +
  110 + return subject
  111 +
  112 + def get_files(self, obj):
  113 + files = self.context.get("files", None)
  114 +
  115 + return files
  116 +
  117 + class Meta:
  118 + model = Webconference
  119 + fields = '__all__'
  120 +
  121 + def create(self, data):
  122 + topic = data['topic']
  123 +
  124 + webconference = None
  125 +
  126 + if not topic["id"] is None:
  127 + if "subject" in topic:
  128 + r_exits = Resource.objects.filter(topic__subject = topic["subject"], name__unaccent__iexact = data["name"])
  129 + else:
  130 + r_exits = Resource.objects.filter(topic__subject__id = topic["subject_id"], name__unaccent__iexact = data["name"])
  131 +
  132 + if not r_exits.exists():
  133 + if topic['id'] == "":
  134 + topic_exist = Topic.objects.filter(subject = topic['subject'], name__unaccent__iexact = topic["name"])
  135 +
  136 + if topic_exist.exists():
  137 + topic = topic_exist[0]
  138 + else:
  139 + topic = Topic.objects.create(name = topic['name'], subject = topic['subject'], repository = topic['repository'], visible = topic['visible'], order = topic['order'])
  140 +
  141 + data["topic"] = topic
  142 + else:
  143 + data["topic"] = get_object_or_404(Topic, id = topic["id"])
  144 +
  145 + webconference_data = data
  146 +
  147 + pendencies = webconference_data["pendencies_resource"]
  148 + del webconference_data["pendencies_resource"]
  149 +
  150 + webconference = Webconference()
  151 + webconference.name = webconference_data["name"]
  152 + webconference.brief_description = webconference_data["brief_description"]
  153 + webconference.show_window = webconference_data["show_window"]
  154 + webconference.all_students = webconference_data["all_students"]
  155 + webconference.visible = webconference_data["visible"]
  156 + webconference.order = webconference_data["order"]
  157 + webconference.topic = webconference_data["topic"]
  158 + webconference.presentation = webconference_data["presentation"]
  159 + webconference.start = webconference_data["start"]
  160 + webconference.end = webconference_data["end"]
  161 +
  162 + webconference.save()
  163 +
  164 + tags = data["tags"]
  165 +
  166 + for tag in tags:
  167 + if not tag["name"] == "":
  168 + if tag["id"] == "":
  169 + tag = Tag.objects.create(name = tag["name"])
  170 + else:
  171 + tag = get_object_or_404(Tag, id = tag["id"])
  172 +
  173 + webconference.tags.add(tag)
  174 +
  175 + students = data["students"]
  176 + subject = get_object_or_404(Subject, slug = self.context.get("subject", None))
  177 +
  178 + for student_data in students:
  179 + logs = student_data["get_items"]
  180 +
  181 + if student_data["id"] == "":
  182 + u_exist = User.objects.filter(email = student_data["email"])
  183 +
  184 +
  185 + if not u_exist.exists():
  186 + student = u_exist[0]
  187 +
  188 + for log in logs:
  189 + log["user_id"] = student.id
  190 +
  191 + 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"])
  192 +
  193 + if not l_exists.exists():
  194 + Log.objects.create(**log)
  195 + else:
  196 + student = User()
  197 + student.email = student_data["email"]
  198 + student.username = student_data["username"]
  199 + student.last_name = student_data["last_name"]
  200 + student.social_name = student_data["social_name"]
  201 + student.show_email = student_data["show_email"]
  202 + student.is_staff = student_data["is_staff"]
  203 + student.is_active = student_data["is_active"]
  204 + student.image = student_data["image"]
  205 +
  206 + student.save()
  207 +
  208 + for log in logs:
  209 + log["user_id"] = student.id
  210 +
  211 + Log.objects.create(**log)
  212 + else:
  213 + student = get_object_or_404(User, id = student_data["id"])
  214 +
  215 + for log in logs:
  216 + 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"])
  217 +
  218 + if not l_exists.exists():
  219 + Log.objects.create(**log)
  220 +
  221 + webconference.students.add(student)
  222 + subject.students.add(student)
  223 +
  224 + groups = data["groups"]
  225 +
  226 + for group_data in groups:
  227 + g_exists = StudentsGroup.objects.filter(subject = subject, slug = group_data["slug"])
  228 +
  229 + if g_exists.exists():
  230 + group = g_exists[0]
  231 + else:
  232 + group = StudentsGroup()
  233 + group.name = group_data["name"]
  234 + group.description = group_data["description"]
  235 + group.subject = subject
  236 +
  237 + group.save()
  238 +
  239 + for participant in group_data["participants"]:
  240 + p_user = get_object_or_404(User, email = participant["email"])
  241 +
  242 + group.participants.add(p_user)
  243 +
  244 + webconference.groups.add(group)
  245 +
  246 + resource = get_object_or_404(Resource, id = webconference.id)
  247 +
  248 + for pend in pendencies:
  249 + Pendencies.objects.create(resource = resource, **pend)
  250 +
  251 + return webconference
0 252 \ No newline at end of file
... ...
webpage/serializers.py
... ... @@ -77,12 +77,13 @@ class SimpleWebpageSerializer(serializers.ModelSerializer):
77 77 tags = data["tags"]
78 78  
79 79 for tag in tags:
80   - if tag["id"] == "":
81   - tag = Tag.objects.create(name = tag["name"])
82   - else:
83   - tag = get_object_or_404(Tag, id = tag["id"])
  80 + if not tag["name"] == "":
  81 + if tag["id"] == "":
  82 + tag = Tag.objects.create(name = tag["name"])
  83 + else:
  84 + tag = get_object_or_404(Tag, id = tag["id"])
84 85  
85   - webpage.tags.add(tag)
  86 + webpage.tags.add(tag)
86 87  
87 88 resource = get_object_or_404(Resource, id = webpage.id)
88 89  
... ... @@ -159,12 +160,13 @@ class CompleteWebpageSerializer(serializers.ModelSerializer):
159 160 tags = data["tags"]
160 161  
161 162 for tag in tags:
162   - if tag["id"] == "":
163   - tag = Tag.objects.create(name = tag["name"])
164   - else:
165   - tag = get_object_or_404(Tag, id = tag["id"])
  163 + if not tag["name"] == "":
  164 + if tag["id"] == "":
  165 + tag = Tag.objects.create(name = tag["name"])
  166 + else:
  167 + tag = get_object_or_404(Tag, id = tag["id"])
166 168  
167   - webpage.tags.add(tag)
  169 + webpage.tags.add(tag)
168 170  
169 171 students = data["students"]
170 172 subject = get_object_or_404(Subject, slug = self.context.get("subject", None))
... ...
youtube_video/serializers.py
... ... @@ -78,12 +78,13 @@ class SimpleYTVideoSerializer(serializers.ModelSerializer):
78 78 tags = data["tags"]
79 79  
80 80 for tag in tags:
81   - if tag["id"] == "":
82   - tag = Tag.objects.create(name = tag["name"])
83   - else:
84   - tag = get_object_or_404(Tag, id = tag["id"])
  81 + if not tag["name"] == "":
  82 + if tag["id"] == "":
  83 + tag = Tag.objects.create(name = tag["name"])
  84 + else:
  85 + tag = get_object_or_404(Tag, id = tag["id"])
85 86  
86   - ytvideo.tags.add(tag)
  87 + ytvideo.tags.add(tag)
87 88  
88 89 resource = get_object_or_404(Resource, id = ytvideo.id)
89 90  
... ... @@ -161,12 +162,13 @@ class CompleteYTVideoSerializer(serializers.ModelSerializer):
161 162 tags = data["tags"]
162 163  
163 164 for tag in tags:
164   - if tag["id"] == "":
165   - tag = Tag.objects.create(name = tag["name"])
166   - else:
167   - tag = get_object_or_404(Tag, id = tag["id"])
  165 + if not tag["name"] == "":
  166 + if tag["id"] == "":
  167 + tag = Tag.objects.create(name = tag["name"])
  168 + else:
  169 + tag = get_object_or_404(Tag, id = tag["id"])
168 170  
169   - ytvideo.tags.add(tag)
  171 + ytvideo.tags.add(tag)
170 172  
171 173 students = data["students"]
172 174 subject = get_object_or_404(Subject, slug = self.context.get("subject", None))
... ...