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))
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()
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))
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))
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))
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))
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))
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)
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))
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')
def viewFile(request, output, reference): file = File.objects.filter(id=reference) if file.count() == 0: return invalidAccess() return redirect('/download/' + str(file[0].id))
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()