class StudentsGroupSerializer(serializers.ModelSerializer): participants = UserBackupSerializer('get_files', many=True) def get_files(self, obj): files = self.context.get("files", None) return files class Meta: model = StudentsGroup fields = '__all__'
class CompleteYTVideoSerializer(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 = YTVideo fields = '__all__' def create(self, data): topic = data['topic'] ytvideo = 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'], description=topic['description']) data["topic"] = topic else: data["topic"] = get_object_or_404(Topic, id=topic["id"]) ytvideo_data = data pendencies = ytvideo_data["pendencies_resource"] del ytvideo_data["pendencies_resource"] ytvideo = YTVideo() ytvideo.name = ytvideo_data["name"] ytvideo.brief_description = ytvideo_data["brief_description"] ytvideo.show_window = ytvideo_data["show_window"] ytvideo.all_students = ytvideo_data["all_students"] ytvideo.visible = ytvideo_data["visible"] ytvideo.order = ytvideo_data["order"] ytvideo.topic = ytvideo_data["topic"] ytvideo.url = ytvideo_data["url"] ytvideo.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"]) ytvideo.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) ytvideo.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) ytvideo.groups.add(group) resource = get_object_or_404(Resource, id=ytvideo.id) for pend in pendencies: Pendencies.objects.create(resource=resource, **pend) return ytvideo
class CompleteFileLinkSerializer(serializers.ModelSerializer): file_content = serializers.CharField(required=False, allow_blank=True, max_length=255) 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 def validate(self, data): files = self.context.get('files', None) if files: if data["file_content"] in files.namelist(): file_path = os.path.join(settings.MEDIA_ROOT, data["file_content"]) if os.path.isfile(file_path): dst_path = os.path.join(settings.MEDIA_ROOT, "tmp") path = files.extract(data["file_content"], dst_path) new_name = os.path.join( "files", "file_" + str(time.time()) + os.path.splitext(data["file_content"])[1]) os.rename(os.path.join(dst_path, path), os.path.join(settings.MEDIA_ROOT, new_name)) data["file_content"] = new_name else: path = files.extract(data["file_content"], settings.MEDIA_ROOT) else: data["file_content"] = None else: data["file_content"] = None return data class Meta: model = FileLink fields = '__all__' def create(self, data): topic = data['topic'] file_link = 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'], description=topic['description']) data["topic"] = topic else: data["topic"] = get_object_or_404(Topic, id=topic["id"]) file_link_data = data pendencies = file_link_data["pendencies_resource"] del file_link_data["pendencies_resource"] file_link = FileLink() file_link.name = file_link_data["name"] file_link.brief_description = file_link_data[ "brief_description"] file_link.show_window = file_link_data["show_window"] file_link.all_students = file_link_data["all_students"] file_link.visible = file_link_data["visible"] file_link.order = file_link_data["order"] file_link.topic = file_link_data["topic"] file_link.file_content = file_link_data["file_content"] file_link.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"]) file_link.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) file_link.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) file_link.groups.add(group) resource = get_object_or_404(Resource, id=file_link.id) for pend in pendencies: Pendencies.objects.create(resource=resource, **pend) return file_link
class CompleteH5PSerializer(serializers.ModelSerializer): file = serializers.CharField(required=False, allow_blank=True, max_length=255) 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 def validate(self, data): files = self.context.get('files', None) if files: if data["file"] in files.namelist(): file_path = os.path.join(settings.MEDIA_ROOT, data["file"]) if os.path.isfile(file_path): dst_path = os.path.join(settings.MEDIA_ROOT, "tmp") h5p_helper_path = os.path.join(settings.MEDIA_ROOT, 'h5pp', 'tmp') if not os.path.exists(h5p_helper_path): os.makedirs(h5p_helper_path) path = files.extract(data["file"], dst_path) tmph5pfile = files.extract(data["file"], h5p_helper_path) new_name = os.path.join( "h5p_resource", "file_" + str(time.time()) + os.path.splitext(data["file"])[1]) os.rename(os.path.join(dst_path, path), os.path.join(settings.MEDIA_ROOT, new_name)) os.rename( tmph5pfile, os.path.join(h5p_helper_path, os.path.split(data["file"])[1])) data["tmph5pfile"] = os.path.join( h5p_helper_path, os.path.split(data["file"])[1]) data["folderpath"] = h5p_helper_path data["file"] = new_name if os.path.exists( os.path.join(h5p_helper_path, "h5p_resource")): os.rmdir(os.path.join(h5p_helper_path, "h5p_resource")) else: path = files.extract(data["file"], settings.MEDIA_ROOT) else: data["file"] = None else: data["file"] = None return data class Meta: model = H5P fields = '__all__' def create(self, data): topic = data['topic'] request = self.context.get('request', None) h5p = 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'], description=topic['description']) data["topic"] = topic else: data["topic"] = get_object_or_404(Topic, id=topic["id"]) h5p_data = data pendencies = h5p_data["pendencies_resource"] del h5p_data["pendencies_resource"] if h5p_data["tmph5pfile"]: interface = H5PDjango(request.user) validator = interface.h5pGetInstance( 'validator', h5p_data['folderpath'], h5p_data['tmph5pfile']) if validator.isValidPackage(False, False): _mutable = request.POST._mutable request.POST._mutable = True request.POST["name"] = h5p_data["name"] request.POST['file_uploaded'] = True request.POST['disable'] = 0 request.POST['author'] = request.user.username request.POST['h5p_upload'] = h5p_data['tmph5pfile'] request.POST['h5p_upload_folder'] = h5p_data[ 'folderpath'] request.POST._mutable = _mutable if h5pInsert(request, interface): contentResource = h5p_contents.objects.all( ).order_by('-content_id')[0] h5p = H5P() h5p.name = h5p_data["name"] h5p.brief_description = h5p_data[ "brief_description"] h5p.show_window = h5p_data["show_window"] h5p.all_students = h5p_data["all_students"] h5p.visible = h5p_data["visible"] h5p.order = h5p_data["order"] h5p.topic = h5p_data["topic"] h5p.file = h5p_data["file"] h5p.data_ini = h5p_data["data_ini"] h5p.data_end = h5p_data["data_end"] h5p.h5p_resource = contentResource h5p.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"]) h5p.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) h5p.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) h5p.groups.add(group) resource = get_object_or_404(Resource, id=h5p.id) for pend in pendencies: Pendencies.objects.create(resource=resource, **pend) return h5p