Esempio n. 1
0
def lesson(request, lesson_pk=None):
    if lesson_pk is None:
        lesson = Lesson.objects.all(created_by=request.user)
    else:
        lesson = get_object_or_404(Lesson, pk=lesson_pk)
    enroll = get_enroll(request, lesson)
    data = LessonEnrollSerializer(enroll).data
    data.update(LessonSerializer(lesson).data)
    return Response(data)
Esempio n. 2
0
def answers(request, enroll_pk=None):
    if not request.user.is_authenticated():
        return Response([], status=status.HTTP_200_OK)

    if request.method == 'PUT' and request.user.is_authenticated(
    ) and enroll_pk and enroll_pk != '0':
        enroll = get_object_or_404(LessonEnroll, pk=enroll_pk)
        if enroll.learner == request.user:
            data = json.loads(request.body.decode("utf-8"))
            result = data.get('result')
            if result:
                success = result.get('success')
                if not enroll.success:
                    enroll.success = success
                if success is True:
                    enroll.date_success = timezone.now()
                enroll.number_of_attempt += 1

            enroll.data = data
            enroll.save()
            return Response(LessonEnrollSerializer(enroll).data,
                            status=status.HTTP_200_OK)

    if enroll_pk == '0':
        return Response(status=status.HTTP_200_OK)

    return Response(status=status.HTTP_400_BAD_REQUEST)
Esempio n. 3
0
def mylessons(request):
    """
    возвращает список назначеных на студента уроков
    """
    if not request.user.is_authenticated():
        return Response([], status=status.HTTP_200_OK)

    # проверяем есть ли старые пройденные уроки
    now = timezone.now()  # + timedelta(days=1)
    for enroll in LessonEnroll.objects.filter(learner=request.user,
                                              date_success__lt=now -
                                              timedelta(days=14)):
        statistic, created = Statistic.objects.get_or_create(
            lesson=enroll.lesson,
            learner=request.user,
            number_of_attempt=enroll.number_of_attempt,
            success=enroll.success)
        if enroll.success is True:
            statistic.reason = 'success'
        elif enroll.success is False:
            statistic.reason = 'done_time'
        else:
            statistic.reason = 'not_done'
        statistic.save()

        enroll.delete()
    for enroll in LessonEnroll.objects.filter(learner=request.user,
                                              success=True,
                                              date_success__lt=now -
                                              timedelta(days=1)):
        Statistic.objects.get_or_create(
            lesson=enroll.lesson,
            learner=request.user,
            number_of_attempt=enroll.number_of_attempt,
            success=enroll.success,
            reason='success')
        enroll.delete()

    # Сериализуем и сортируем полученные уроки
    enrolls = []
    lessonEnrolls = LessonEnroll.objects.filter(learner=request.user).extra(
        select={
            'null_success':
            'CASE WHEN quizy_lessonenroll.success IS NULL THEN 0 ELSE 1 END'
        }).order_by('null_success', 'success', '-created_at')
    for enroll in lessonEnrolls:
        enrolls.append(LessonEnrollSerializer(enroll).data)

    index = 0
    elements = []
    for en in list(enrolls):
        if en.get('required_attention_by_pupil') is True:
            elements.append(enrolls.pop(index))
        index += 1
    sortedenrolls = elements + enrolls

    return Response(sortedenrolls, status=status.HTTP_200_OK)
Esempio n. 4
0
def play(request, enroll_pk=None):
    if not request.user.is_authenticated():
        return Response([], status=status.HTTP_200_OK)

    try:
        enroll = LessonEnroll.objects.get(pk=enroll_pk, learner=request.user)
    except LessonEnroll.DoesNotExist:
        return Response("enroll not found", status=status.HTTP_404_NOT_FOUND)

    return Response(LessonEnrollSerializer(instance=enroll).data,
                    status=status.HTTP_200_OK)
Esempio n. 5
0
def public_play(request, lesson_pk=None):
    """
    Запуск публичного урока для демонстрации
    """
    if request.user.is_authenticated():
        try:
            raw_enroll = LessonEnroll.objects.filter(learner=request.user,
                                                     lesson=lesson_pk)[:1]
            if raw_enroll:
                enroll = raw_enroll[0]
                data = LessonEnrollSerializer(instance=enroll).data
                data['type'] = 'enroll'
                return Response(data, status=status.HTTP_200_OK)
        except LessonEnroll.DoesNotExist:
            pass
    # если пользователь не авторизован или нет назначения на урок то возвращаем урок
    lesson = get_object_or_404(Lesson, pk=lesson_pk)
    data = LessonForEnrollSerializer(lesson).data
    data['type'] = 'lesson'
    return Response(data, status=status.HTTP_200_OK)
Esempio n. 6
0
def demo_play(request, lesson_pk=None):
    """
    Тестовый запуск урока в админке редактирования
    """
    if not request.user.is_authenticated():
        return Response([], status=status.HTTP_200_OK)

    lesson = Lesson.objects.filter(Q(created_by=request.user)
                                   | Q(teacher=request.user)
                                   | Q(course__teacher=request.user),
                                   pk=lesson_pk).distinct()
    if lesson:
        lesson = lesson[0]
    else:
        return Response(status=status.HTTP_400_BAD_REQUEST)

    if request.method == 'GET':
        enroll = LessonEnroll(lesson=lesson,
                              learner=request.user,
                              created_by=request.user)
        enroll = LessonEnrollSerializer(instance=enroll).data
    return Response(enroll, status=status.HTTP_200_OK)
Esempio n. 7
0
def start_lessons(request, lesson_pk=None):
    """
    Запуск урока выбранный через главную страницу
    """
    if not request.user.is_authenticated():
        return Response([], status=status.HTTP_200_OK)

    lesson = get_object_or_404(Lesson, pk=lesson_pk)
    enroll, created = LessonEnroll.objects.get_or_create(
        lesson=lesson, learner=request.user, created_by=request.user)
    if lesson.lesson_type == 'outside':
        # если урок внешний считываем деннаые по умолчанию и сохраняем их в назначение
        path = os.path.join(settings.BASE_DIR, 'app', 'assets', 'lessons',
                            lesson.path_content)
        json_path = os.path.join(path, 'default.json')
        if os.path.exists(json_path):
            data = json.load(open(json_path))
            enroll.data = data
            enroll.save()

    data = LessonEnrollSerializer(instance=enroll).data
    data['type'] = 'enroll'
    return Response(data, status=status.HTTP_200_OK)
Esempio n. 8
0
def enroll_teacher(request, enroll_pk):
    """
    возвращает данные назначения для внешнего урока
    для учителя
    сохраняет отзыа от учителя
    """
    if not request.user.is_authenticated():
        return Response([], status=status.HTTP_200_OK)

    if enroll_pk:
        enroll = LessonEnroll.objects.filter(
            Q(created_by=request.user) | Q(lesson__teacher=request.user)
            | Q(lesson__course__teacher=request.user),
            pk=enroll_pk).distinct()
        if enroll:
            enroll = enroll[0]
        else:
            return Response(status=status.HTTP_400_BAD_REQUEST)

    if request.method == 'PUT':
        data = json.loads(request.body.decode("utf-8"))
        # enroll.data = normalize(data)
        # проверяем на наличие новых завершенных шагов
        is_equal = is_enrolls_different(enroll.data, data)
        if is_equal is True:
            enroll.required_attention_by_pupil = True
            enroll.success = True
            enroll.data = data
            enroll.data['mode'] = 'wait_pupil'
        else:
            enroll.data = data

        enroll.required_attention_by_teacher = False
        enroll.save()

        if enroll.required_attention_by_pupil is True:

            email_topic = u'English with Experts: Ваш преподаватель проверил Вашу письменную работу.'
            email_from = settings.DEFAULT_FROM_EMAIL
            email_to = [enroll.learner.email]

            email_msg = u'Здравствуйте,\n'
            email_msg += u'Рады сообщить, что Ваш преподаватель проверил Вашу письменную работу. '
            email_msg += u'Чтобы посмотреть Ваши оценки по шкале IELTS и комментарии преподавателя \n'
            email_msg += u'пожалуйста, пройдите по этой ссылке \n(Вам нужно быть зарегистрированым и авторизированым на сайте):\n'
            email_msg += u'http://ieltswriting.englishwithexperts.com/play/' + str(
                enroll.pk) + '/\n\n'
            email_msg += u'От себя хотим добавить, что IELTS Writing - это самая сложная часть для большинства сдающих (официальная статистика IELTS).'
            email_msg += u'Поэтому не теряйте мотивацию. Чем больше работ Вы напишите до сдачи экзамена, тем лучше. Keep up your good work! Мы верим в Вас!\n\n'
            email_msg += u'Пишите, если у Вас будут вопросы или пожелания к улучшению сервиса. Мы всегда рады конструктивным предложениям.\n\n'
            email_msg += u'Best wishes,\n'
            email_msg += u'English with Experts\n'

            if settings.MAIL is True:
                send_mail(email_topic, email_msg, email_from, email_to)
            elif settings.DEBUG is True:
                print email_topic
                print[enroll.learner.email]
                print email_msg

    enroll = LessonEnrollSerializer(instance=enroll).data
    return Response(enroll, status=status.HTTP_200_OK)
Esempio n. 9
0
def enroll(request, enroll_pk):
    """
    работа с назначениями со стороны преподователя
    """
    if not request.user.is_authenticated():
        return Response(status=status.HTTP_200_OK)

    if request.method == 'POST':
        data = json.loads(request.body.decode("utf-8"))
        course_id = data.get('course_id')
        auto_enroll = data.get('auto_enroll')
        lesson_id = data.get('lesson_id')
        email = data.get('email')
        if course_id is None and lesson_id is None:
            return Response("Неверный формат course или lesson",
                            status=status.HTTP_400_BAD_REQUEST)
        if validateEmail(email) is False:
            return Response("Неверный формат email",
                            status=status.HTTP_400_BAD_REQUEST)

        lesson = None
        course = None
        if lesson_id:
            lesson = get_object_or_404(Lesson, pk=lesson_id)
        if course_id:
            course = get_object_or_404(Course, pk=course_id)

        pupil = Account.objects.filter(email__iexact=email)[:1]

        if pupil:
            # проверяем являеться ли ученик учеников преподдователся
            # если нет то назначаем его на преподователя
            exists = request.user.pupils.filter(pk=pupil[0].pk).count()
            if not exists:
                request.user.pupils.add(pupil[0])

        if pupil and lesson:
            try:
                enroll = LessonEnroll.objects.get(lesson=lesson,
                                                  learner=pupil[0])
            except LessonEnroll.DoesNotExist:
                enroll = LessonEnroll.objects.create(lesson=lesson,
                                                     learner=pupil[0],
                                                     created_by=request.user)
                enroll.teachers.add(request.user)

                email_topic = u'English with Experts: Вам назначено письменное задание.'
                email_from = settings.DEFAULT_FROM_EMAIL
                email_to = [pupil[0].email]

                email_msg = u'Здравствуйте,\n'
                email_msg += u'Ваш преподаватель назначила Вам новое задание. '
                email_msg += u'Пожалуйста, пройдите по этой ссылке, чтобы выполнить это задание \n(Вам нужно быть зарегистрированым и авторизированым на сайте):\n'
                email_msg += u'http://ieltswriting.englishwithexperts.com/play/' + str(
                    enroll.pk) + '/\n\n'
                email_msg += u'Пишите, если у Вас будут вопросы. Желаем Вам прогресса в написании работ!\n\n'
                email_msg += u'Best wishes,\n'
                email_msg += u'English with Experts\n'

                if settings.MAIL is True:
                    send_mail(email_topic, email_msg, email_from, email_to)
                elif settings.DEBUG is True:
                    print[pupil[0].email]
                    print email_msg

                # если урок внешний считываем деннаые по умолчанию и сохраняем их в назначение
                if lesson.lesson_type == 'outside':
                    path = os.path.join(settings.BASE_DIR, 'app', 'assets',
                                        'lessons', lesson.path_content)
                    json_path = os.path.join(path, 'default.json')
                    if os.path.exists(json_path):
                        data = json.load(open(json_path))
                        enroll.data = data
                        enroll.save()

            return Response(LessonEnrollSerializer(enroll).data,
                            status=status.HTTP_200_OK)
        elif pupil and course:
            try:
                enroll = CourseEnroll.objects.get(course=course,
                                                  learner=pupil[0])
            except CourseEnroll.DoesNotExist:
                enroll = CourseEnroll.create(course, pupil[0], request.user)

                if auto_enroll:
                    enroll.auto_enroll = auto_enroll
                    enroll.save()

            return Response(CourseEnrollSerializer(enroll).data,
                            status=status.HTTP_200_OK)
        else:
            return Response({'code': 404}, status=status.HTTP_200_OK)

    if request.method == 'DELETE' and enroll_pk:
        if request.user.is_superuser:
            enroll = LessonEnroll.objects.filter(pk=enroll_pk).distinct()
        else:
            enroll = LessonEnroll.objects.filter(
                Q(lesson__created_by=request.user)
                | Q(lesson__teacher=request.user)
                | Q(lesson__course__teacher=request.user),
                pk=enroll_pk).distinct()
        if enroll:
            enroll = enroll[0]
            enroll.delete()

        else:
            return Response("", status=status.HTTP_400_BAD_REQUEST)
        return Response("", status=status.HTTP_200_OK)

    return Response(status=status.HTTP_200_OK)
Esempio n. 10
0
def enroll_pupil(request, enroll_pk):
    """
    Сохраняет данные для назначения со стороны ученика
    """
    if not request.user.is_authenticated():
        return Response([], status=status.HTTP_200_OK)

    if enroll_pk:
        try:
            enroll = LessonEnroll.objects.get(learner=request.user,
                                              pk=enroll_pk)
        except LessonEnroll.DoesNotExist:
            return Response(status=status.HTTP_400_BAD_REQUEST)

    if request.method == 'PUT':
        data = json.loads(request.body.decode("utf-8"))
        # enroll.data = normalize(data)

        enroll.required_attention_by_pupil = False
        # if data.get('active') is False:
        #    enroll.required_attention_by_teacher = False
        # else:
        #    enroll.required_attention_by_teacher = True

        is_equal = is_enrolls_different(enroll.data, data)
        if is_equal is True:
            enroll.required_attention_by_teacher = True
            enroll.data = data
            enroll.data['mode'] = 'wait_teacher'

            email_topic = u'from English with Experts'
            email_from = settings.DEFAULT_FROM_EMAIL
            email_to = [t.email for t in enroll.teachers.all()]

            email_msg = u'Dear,\n'
            email_msg += u'Please note that your student ' + request.user.email
            email_msg += u' has finished the writing task that you’ve assigned them.\n'
            email_msg += u'Please follow this link to see/mark their work '
            email_msg += u'(You need to be registered and logged in).\n'
            email_msg += u'http://ieltswriting.englishwithexperts.com/pupils/\n\n'
            email_msg += u'Best wishes,\n'
            email_msg += u'English with Experts\n'

            if settings.MAIL is True:
                send_mail(email_topic, email_msg, email_from, email_to)
            elif settings.DEBUG is True:
                print email_topic
                print[t.email for t in enroll.teachers.all()]
                print email_msg
        else:
            enroll.data = data

        enroll.success = True
        enroll.save()

        # Делаем пометку в статистики
        raw_statistic = Statistic.objects.filter(lesson=enroll.lesson,
                                                 learner=request.user)
        if not raw_statistic:
            statistic = Statistic.objects.create(lesson=enroll.lesson,
                                                 learner=request.user)
        else:
            statistic = raw_statistic.latest('created_at')

        statistic.success = enroll.success = True
        statistic.save()

    enroll = LessonEnrollSerializer(instance=enroll).data
    return Response(enroll, status=status.HTTP_200_OK)