Exemplo n.º 1
0
def saveQuiz(request, output, reference):
    course_id = output['course'].id
    module_id = output['module'].id
    if 'questions' not in request.POST or 'answers' not in request.POST:
        return invalidAccess()
    questions = json.loads(request.POST['questions'])
    answers = json.loads(request.POST['answers'])
    if len(questions) != len(answers):
        return invalidAccess()
    originalQuizes = Quiz.objects.filter(
        quiz_id=reference).order_by('-question_no')
    for i in range(originalQuizes.count() - 1, len(questions) - 1, -1):
        Quiz.objects.get(pk=originalQuizes[i].id).delete()
    for i in range(0, len(questions)):
        if i < originalQuizes.count():
            quiz = Quiz.objects.filter(id=originalQuizes[len(questions) - i -
                                                         1].id)
            quiz.update(question=questions[i], answer=answers[i])
        else:
            quiz = Quiz(quiz_id=reference,
                        question_no=i,
                        question=questions[i],
                        answer=answers[i])
            quiz.save()
    return HttpResponse('/course/' + str(course_id) + '/module/' +
                        str(module_id))
def drop(request, course_id):
    course_id = int(course_id)
    if not isParticipant(request):
        return invalidAccess()
    course = Course.objects.filter(id=course_id, is_open=1)
    if course.count() == 0:
        return invalidAccess()
    course = course[0]
    enrolledCourse = EnrolledCourse.objects.filter(
        course=course_id, user=request.session['user_id'])
    if enrolledCourse.count() == 0:
        return invalidAccess()
    if enrolledCourse[0].status.id == Status.objects.filter(
            name='Completed')[0].id:
        return invalidAccess()
    status = Status.objects.filter(name='Dropped')[0]
    modules = ModuleProgress.objects.filter(
        enrolled_course=enrolledCourse[0].id)
    modules.update(status=status)
    for module in modules:
        components = ComponentProgress.objects.filter(
            module_progress=module.id)
        components.update(status=status)
    enrolledCourse.update(status=status)
    return redirect('/course/' + str(course_id) + '/overview')
def switch_course_open_status(request, course_id, is_open):
    if not isInstructor(request):
        return invalidAccess()
    course_id = int(course_id)
    course = Course.objects.filter(id=course_id)
    if course.count() == 0:
        return invalidAccess()
    if course[0].instructor.id != request.session['user_id']:
        return invalidAccess()
    course.update(is_open=is_open)
    return redirect('/course/' + str(course_id))
def enroll(request, course_id):
    course_id = int(course_id)
    if not isParticipant(request):
        return invalidAccess()
    inProgress = Status.objects.filter(name="In Progress")[0].id
    retake = Status.objects.filter(name="Retake")[0].id
    courseTaken = EnrolledCourse.objects.filter(
        user=request.session['user_id']).filter(
            Q(status=inProgress) | Q(status=retake))
    if courseTaken.count() > 0:
        return redirect('/course/' + str(course_id) + '/overview')
    course = Course.objects.filter(id=course_id, is_open=1)
    if course.count() == 0:
        return invalidAccess()
    course = course[0]
    enrolledCourse = EnrolledCourse.objects.filter(
        course=course_id, user=request.session['user_id'])
    if enrolledCourse.count() == 0:
        user = User.objects.filter(id=request.session['user_id'])[0]
        status = Status.objects.filter(name='In Progress')[0]
        enrolledCourse = EnrolledCourse(course=course,
                                        user=user,
                                        status=status)
        enrolledCourse.save()
        modules = Module.objects.filter(course=course_id)
        for module in modules:
            moduleProgress = ModuleProgress(enrolled_course=enrolledCourse,
                                            module=module,
                                            status=status)
            moduleProgress.save()
            components = Component.objects.filter(module=module.id)
            for component in components:
                componentProgress = ComponentProgress(
                    module_progress=moduleProgress,
                    component=component,
                    status=status)
                componentProgress.save()
    else:
        if enrolledCourse[0].status.id != Status.objects.filter(
                name='Completed'
        )[0].id and enrolledCourse[0].status.id != Status.objects.filter(
                name='Dropped')[0].id:
            return invalidAccess()
        status = Status.objects.filter(name='Retake')[0]
        modules = ModuleProgress.objects.filter(
            enrolled_course=enrolledCourse[0].id)
        modules.update(status=status)
        for module in modules:
            components = ComponentProgress.objects.filter(
                module_progress=module.id)
            components.update(status=status)
        enrolledCourse.update(status=status)
    return redirect('/course/' + str(course_id))
Exemplo n.º 5
0
def index(request, course_id, module_id):
    if isInstructor(request):
        course = Course.objects.filter(id=course_id)
        module = Module.objects.filter(id=module_id, course=course_id)
        components = Component.objects.filter(module=module_id).order_by('order_no')
        if course.count() == 0 or module.count() == 0:
            return invalidAccess()
        course = course[0]
        module = module[0]
        if course.instructor.id != request.session['user_id']:
            return invalidAccess()
        output = {'course': course, 'module': module, 'components': components}
        return HttpResponse(render(request, 'course/module/index.html', output))
    return invalidAccess()
Exemplo n.º 6
0
def renderFile(request, output, reference):
    file = File.objects.filter(id=reference)
    if file.count() == 0:
        return invalidAccess()
    output['file'] = file[0]
    return HttpResponse(
        render(request, 'course/module/component/file.html', output))
Exemplo n.º 7
0
def viewImage(request, output, reference):
    image = Image.objects.filter(id=reference)
    if image.count() == 0:
        return invalidAccess()
    output['image'] = image[0]
    return HttpResponse(
        render(request, 'course/module/component/view-image.html', output))
Exemplo n.º 8
0
def viewText(request, output, reference):
    text = Text.objects.filter(id=reference)
    if text.count() == 0:
        return invalidAccess()
    output['text'] = text[0]
    return HttpResponse(
        render(request, 'course/module/component/view-text.html', output))
Exemplo n.º 9
0
def viewYoutube(request, output, reference):
    youtube = Youtube.objects.filter(id=reference)
    if youtube.count() == 0:
        return invalidAccess()
    output['youtube'] = youtube[0]
    return HttpResponse(
        render(request, 'course/module/component/view-youtube.html', output))
def overview(request, course_id):
    course = Course.objects.filter(id=course_id, is_open=1)
    if course.count() == 0:
        return invalidAccess()
    course = course[0]
    enrolledCourse = EnrolledCourse.objects.filter(
        course=course.id, user=request.session['user_id'])
    inProgress = Status.objects.filter(name="In Progress")[0].id
    completed = Status.objects.filter(name="Completed")[0].id
    retake = Status.objects.filter(name="Retake")[0].id
    if enrolledCourse.count() > 0:
        enrolledCourse = enrolledCourse[0]
        currentStatus = enrolledCourse.status.id
        if currentStatus == inProgress or currentStatus == retake:
            course.action = "drop"
        if currentStatus == completed:
            course.action = "retake"
    courseTaken = EnrolledCourse.objects.filter(
        user=request.session['user_id']).filter(
            Q(status=inProgress) | Q(status=retake))
    if courseTaken.count() > 0:
        course.action = "enrolled"
        course.enrolledId = courseTaken[0].course.id
    output = {'course': course}
    output = getEnrolledCourse(request, output)
    return HttpResponse(render(request, 'course/overview.html', output))
Exemplo n.º 11
0
def saveText(request, output, reference):
    course_id = output['course'].id
    module_id = output['module'].id
    text = Text.objects.filter(id=reference)
    if 'contents' not in request.POST or text.count() == 0:
        return invalidAccess()
    contents = request.POST['contents']
    text.update(contents=contents)
    return redirect('/course/' + str(course_id) + '/module/' + str(module_id))
Exemplo n.º 12
0
def add(request, course_id):
    if not isInstructor(request):
        return invalidAccess()
    course = Course.objects.filter(id=course_id)
    if course.count() == 0:
        return invalidAccess()
    course = course[0]
    if 'name' not in request.POST:
        output = {'course': course}
        return HttpResponse(render(request, 'course/module/add.html', output))
    if course.instructor.id != request.session['user_id']:
        return invalidAccess()
    name = request.POST['name']
    lastModule = Module.objects.filter(course=course_id).order_by('-order_no')
    order_no = lastModule.count()
    module = Module(name=name, course=course, order_no=order_no)
    module.save()
    return HttpResponse(module.id)
Exemplo n.º 13
0
def saveYoutube(request, output, reference):
    course_id = output['course'].id
    module_id = output['module'].id
    youtube = Youtube.objects.filter(id=reference)
    if 'video' not in request.POST or youtube.count() == 0:
        return invalidAccess()
    video = request.POST['video']
    youtube.update(video=video)
    return redirect('/course/' + str(course_id) + '/module/' + str(module_id))
Exemplo n.º 14
0
def add(request, course_id, module_id):
    if not isInstructor(request):
        return invalidAccess()
    course = Course.objects.filter(id=course_id)
    module = Module.objects.filter(id=module_id, course=course_id)
    if course.count() == 0 or module.count() == 0:
        return invalidAccess()
    course = course[0]
    module = module[0]
    if 'name' not in request.POST or 'type' not in request.POST:
        types = ComponentType.objects.all().order_by('id')
        output = {'course': course, 'module': module, 'types': types}
        return HttpResponse(
            render(request, 'course/module/component/add.html', output))
    if course.instructor.id != request.session['user_id']:
        return invalidAccess()
    name = request.POST['name']
    type = ComponentType.objects.filter(id=request.POST['type'])
    if type.count() == 0:
        return invalidAccess()
    type = type[0]

    def create_specific_component(type):
        switcher = {
            "Text": createNewText,
            "Image": createNewImage,
            "File": createNewFile,
            "Quiz": createNewQuiz,
            "Youtube": createNewYoutube,
        }
        return switcher.get(type.name)()

    reference = create_specific_component(type)
    lastComponent = Component.objects.filter(
        module=module_id).order_by('order_no')
    order_no = lastComponent.count()
    component = Component(name=name,
                          module=module,
                          type=type,
                          order_no=order_no,
                          reference=reference)
    component.save()
    return redirect('/course/' + str(course_id) + '/module/' + str(module_id) +
                    '/component/' + str(component.id))
def save_order(request, course_id):
    if not isInstructor(request) or 'order' not in request.POST:
        return invalidAccess()
    course_id = int(course_id)
    course = Course.objects.filter(id=course_id)
    if course.count() == 0:
        return invalidAccess()
    course = course[0]
    if course.instructor.id != request.session['user_id']:
        return invalidAccess()
    order = json.loads(request.POST['order'])
    for val in order:
        module = Module.objects.filter(id=val)
        if module.count() == 0 or module[0].course.id != course_id:
            return invalidAccess()
    for i, val in enumerate(order):
        module = Module.objects.filter(id=val)
        module.update(order_no=i)
    return HttpResponse('success')
def add(request):
    if not isInstructor(request):
        return invalidAccess()
    if 'name' not in request.POST or 'category' not in request.POST or 'description' not in request.POST:
        output = {'categories': Category.objects.all()}
        return HttpResponse(render(request, 'course/add.html', output))
    name = request.POST['name']
    category = Category.objects.filter(id=request.POST['category'])[0]
    description = request.POST['description']
    instructor = User.objects.filter(id=request.session['user_id'])[0]
    course = Course(name=name,
                    category=category,
                    description=description,
                    instructor=instructor,
                    is_open=0)
    course.save()
    return HttpResponse(course.id)
def index(request, course_id):
    course = Course.objects.filter(id=course_id)
    if course.count() == 0:
        return invalidAccess()
    course = course[0]
    modules = Module.objects.filter(course=course_id).order_by('order_no')
    if isParticipant(request):
        if course.is_open == 0:
            return HttpResponse('Course is closed')
        enrolledCourse = EnrolledCourse.objects.filter(
            course=course_id, user=request.session['user_id'])
        if enrolledCourse.count() == 0:
            return invalidAccess()
        enrolledCourse = enrolledCourse[0]
        inProgress = Status.objects.filter(name="In Progress")[0].id
        completed = Status.objects.filter(name="Completed")[0].id
        retake = Status.objects.filter(name="Retake")[0].id
        currentStatus = enrolledCourse.status.id
        if currentStatus != inProgress and currentStatus != completed and currentStatus != retake:
            return invalidAccess()
        for i, module in enumerate(modules):
            components = Component.objects.filter(
                module=module).order_by('order_no')
            modules[i].components = components
            module_progress = ModuleProgress.objects.filter(
                enrolled_course=enrolledCourse, module=module)
            if module_progress.count() == 0:
                module_progress = ModuleProgress(
                    enrolled_course=enrolledCourse,
                    module=module,
                    status=enrolledCourse.status)
                module_progress.save()
            else:
                module_progress = module_progress[0]
            modules[i].module_progress = module_progress
            if i == 0:
                modules[i].can_view = True
                if module.components.count() == 0:
                    ModuleProgress.objects.filter(
                        id=module_progress.id).update(status=completed)
            if i < modules.count() - 1:
                modules[i + 1].can_view = False
                if module_progress.status.id == completed:
                    modules[i + 1].can_view = True
                if modules[i].can_view == True and module.components.count(
                ) == 0:
                    modules[i + 1].can_view = True
                    ModuleProgress.objects.filter(
                        id=module_progress.id).update(status=completed)
            if i == modules.count() - 1:
                if modules[i].can_view == True and module.components.count(
                ) == 0:
                    ModuleProgress.objects.filter(
                        id=module_progress.id).update(status=completed)
                module_progress = ModuleProgress.objects.filter(
                    id=module_progress.id)[0]
                if module_progress.status.id == completed:
                    if enrolledCourse.status.id != completed:
                        EnrolledCourse.objects.filter(
                            course=course_id,
                            user=request.session['user_id']).update(
                                status=completed,
                                completion_date=datetime.now())
        output = {'course': course, 'modules': modules}
        output = getEnrolledCourse(request, output)
        if currentStatus == inProgress or currentStatus == retake:
            output['action'] = 'drop'
        if currentStatus == completed:
            if EnrolledCourse.objects.filter(
                    user=request.session['user_id']).filter(
                        Q(status__name="In Progress")
                        | Q(status__name="Retake")).count() == 0:
                output['action'] = 'retake'
        return HttpResponse(
            render(request, 'course/index-participant.html', output))
    if isInstructor(request):
        if course.instructor.id != request.session['user_id']:
            return InvalidAccess()
        output = {'course': course, 'modules': modules}
        return HttpResponse(
            render(request, 'course/index-instructor.html', output))
    return HttpResponse('Unknown Request')
Exemplo n.º 18
0
def viewFile(request, output, reference):
    file = File.objects.filter(id=reference)
    if file.count() == 0:
        return invalidAccess()
    return redirect('/download/' + str(file[0].id))
Exemplo n.º 19
0
def index(request, course_id, module_id, component_id):
    if isParticipant(request):
        course_id = int(course_id)
        component = Component.objects.filter(id=component_id, module=module_id)
        if component.count() == 0:
            return invalidAccess()
        component = component[0]
        if component.module.course.id != course_id:
            return invalidAccess()
        inProgress = Status.objects.filter(name="In Progress")[0]
        completed = Status.objects.filter(name="Completed")[0]
        dropped = Status.objects.filter(name="Dropped")[0].id
        enrolledCourse = EnrolledCourse.objects.filter(
            course=course_id, user=request.session['user_id'])
        if enrolledCourse.count() == 0:
            return redirect('/course/' + str(course_id) + '/overview')
        enrolledCourse = enrolledCourse[0]
        currentStatus = enrolledCourse.status.id
        if currentStatus == dropped:
            return redirect('/course/' + str(course_id) + '/overview')
        moduleProgress = ModuleProgress.objects.filter(
            enrolled_course=enrolledCourse.id, module=module_id)
        if moduleProgress.count() == 0:
            module = Module.objects.filter(id=module_id, course=course_id)
            moduleProgress = ModuleProgress(enrolled_course=enrolledCourse,
                                            module=module,
                                            status=inProgress)
            moduleProgress.save()
        else:
            moduleProgress = moduleProgress[0]
        componentProgress = ComponentProgress.objects.filter(
            module_progress=moduleProgress, component=component_id)
        if componentProgress.count() == 0:
            component = Component.objects.filter(id=component_id,
                                                 module=module_id)
            componentProgress = ComponentProgress(
                module_progress=moduleProgress,
                component=component,
                status=completed)
        else:
            componentProgress.update(status=completed)
        componentProgressTotal = ComponentProgress.objects.filter(
            module_progress=moduleProgress).count()
        componentProgressCompleted = ComponentProgress.objects.filter(
            module_progress=moduleProgress, status=completed.id).count()
        if componentProgressCompleted == componentProgressTotal:
            moduleProgress = ModuleProgress.objects.filter(
                enrolled_course=enrolledCourse.id, module=module_id)
            moduleProgress.update(status=completed)
        output = {'component': component}
        output = getEnrolledCourse(request, output)

        def view_specific_component(request, output):
            switcher = {
                "Text": viewText,
                "Image": viewImage,
                "File": viewFile,
                "Quiz": viewQuiz,
                "Youtube": viewYoutube,
            }
            type = output['component'].type.name
            reference = output['component'].reference
            return switcher.get(type)(request, output, reference)

        return view_specific_component(request, output)
    if isInstructor(request):
        course = Course.objects.filter(id=course_id)
        module = Module.objects.filter(id=module_id, course=course_id)
        component = Component.objects.filter(id=component_id, module=module_id)
        if course.count() == 0 or module.count() == 0 or component.count(
        ) == 0:
            return invalidAccess()
        course = course[0]
        module = module[0]
        component = component[0]
        if course.instructor.id != request.session['user_id']:
            return InvalidAccess()
        output = {'course': course, 'module': module, 'component': component}
        if request.method == 'POST':

            def save_specific_component(request, output):
                switcher = {
                    "Text": saveText,
                    "Image": saveImage,
                    "File": saveFile,
                    "Quiz": saveQuiz,
                    "Youtube": saveYoutube,
                }
                type = output['component'].type.name
                reference = output['component'].reference
                return switcher.get(type)(request, output, reference)

            return save_specific_component(request, output)

        def render_specific_component(request, output):
            switcher = {
                "Text": renderText,
                "Image": renderImage,
                "File": renderFile,
                "Quiz": renderQuiz,
                "Youtube": renderYoutube,
            }
            type = output['component'].type.name
            reference = output['component'].reference
            return switcher.get(type)(request, output, reference)

        return render_specific_component(request, output)
    return invalidAccess()