You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

154 lines
6.7 KiB

# coding=utf-8
from access.models import User
from lms.decors import api_decor
import simplejson as json
# Процесс добавления журналов через API
# Добавление проходит по
from lms.settings import SECRET_KEY
from courses.models import Course, Lesson, Homework, Exam
from journals.models import TeacherJ, LessonJ, ExamJ, HomeworkJ
def new_index(map, model, key, obj):
if str(key) in map[model]:
return obj.objects.get(id=map[model][str(key)])
return None
@api_decor(without_auth=False, need_keys=['id', 'type'], method='POST', check_request=True)
def check_materials_access(request, context):
return context
@api_decor(without_auth=True,
need_keys=['student', 'lesson', 'status', 'start_date', 'f_date', 'lesson_old_id', 'student_old_id'])
def open_lj(request, context):
_fixture = json.load(open('../migrate/fixtures/pk_maps.json'))
if request.POST['token'] == SECRET_KEY:
l = new_index(_fixture, 'courses.lesson', request.POST['lesson'], Lesson) if request.POST[
'lesson_old_id'] else Lesson.objects.get(id=request.POST['lesson'])
s = new_index(_fixture, 'access.user', request.POST['student'], User) if request.POST[
'student_old_id'] else User.objects.get(id=request.POST['student'])
lj = LessonJ.objects.get_or_create(material=l, student=s)
if request.POST['status'] == 'F':
lj.saw_this()
lj.f_date = request.POST['f_date']
lj.date = request.POST['start_date']
elif request.POST['status'] == 'A':
lj.open_material()
lj.date = request.POST['start_date']
elif request.POST['status'] == 'N':
lj.date = None
lj.f_date = None
lj.success = False
lj.save()
return context
@api_decor(without_auth=True,
need_keys=['student', 'homework', 'status', 'start_date', 'f_date', 'token', 'comments', 'student_old_id',
'homework_old_id'])
def set_ht(request, context):
# Добавить попытку и все ее комментарии
_fixture = json.load(open('../migrate/fixtures/pk_maps.json'))
if request.POST['token'] == SECRET_KEY:
t = new_index(_fixture, 'access.user', request.POST['teacher'], User) if request.POST[
'teacher_old_id'] else User.objects.get(id=request.POST['teaceher'])
s = new_index(_fixture, 'access.user', request.POST['student'], User) if request.POST[
'student_old_id'] else User.objects.get(id=request.POST['student'])
c = new_index(_fixture, 'courses.course', request.POST['course'], Course) if request.POST[
'course_old_id'] else Course.objects.get(id=request.POST['course'])
tj = TeacherJ.objects.get_or_create(student=s, course=c)
tj.teacher = t
tj.save()
return context
@api_decor(without_auth=True,
need_keys=['token', 'teacher', 'teacher_old_id', 'student', 'student_old_id', 'course', 'course_old_id'])
def set_teacher(request, context):
_fixture = json.load(open('../migrate/fixtures/pk_maps.json'))
if request.POST['token'] == SECRET_KEY:
t = new_index(_fixture, 'access.user', request.POST['teacher'], User) if request.POST[
'teacher_old_id'] else User.objects.get(id=request.POST['teaceher'])
s = new_index(_fixture, 'access.user', request.POST['student'], User) if request.POST[
'student_old_id'] else User.objects.get(id=request.POST['student'])
c = new_index(_fixture, 'courses.course', request.POST['course'], Course) if request.POST[
'course_old_id'] else Course.objects.get(id=request.POST['course'])
tj = TeacherJ.objects.get_or_create(student=s, course=c)
tj.teacher = t
tj.save()
return context
@api_decor(without_auth=True, need_keys=['id', 'type'], method='GET', check_request=True)
def check_jaccess(request, context):
if request.user.is_authenticated():
if request.user.is_admin:
context['code'] = '1'
return context
context['code'] = '0'
_type = request.GET['type']
journal = None
if _type == 'lesson':
journal = LessonJ.objects.filter(material=Lesson.objects.get(id=request.GET['id']), student=request.user)
if _type == 'homework':
journal = HomeworkJ.objects.filter(material=Homework.objects.get(id=request.GET['id']), student=request.user)
if _type == 'exam':
journal = ExamJ.objects.filter(material=Exam.objects.get(id=request.GET['id']), student=request.user)
if journal and journal.exists():
if request.user in journal[0].material.course.teachers.all():
context['code'] = '1'
return context
_before = journal.first().get_before()
if journal.first().get_status_flag() != 'N':
context['code'] = '1'
elif journal.first().get_status_flag() == 'N':
if _before['journal'].get_status_flag() == 'F':
journal.first().open_material()
return context
@api_decor(without_auth=False, need_keys=['id'], method='GET', check_request=True)
def check_exists_jhomework(request, context):
try:
HomeworkJ.objects.get(id=request.GET['id'], f_date=None)
except HomeworkJ.DoesNotExist:
context['code'] = '0'
else:
context['code'] = '1'
return context
@api_decor(without_auth=False, need_keys=['id'], method='GET', check_request=True)
def check_exists_jexam(request, context):
try:
ExamJ.objects.get(id=request.GET['id'], f_date=None)
except ExamJ.DoesNotExist:
context['code'] = '0'
else:
context['code'] = '1'
return context
@api_decor(without_auth=True, need_keys=['id', 'type'], method='GET', check_request=True)
def check_block(request, context):
if request.user.is_authenticated():
context['code'] = '0'
_type = request.GET['type']
journal = None
if _type == 'lesson':
journal = LessonJ.objects.filter(material=Lesson.objects.get(id=request.GET['id']), student=request.user)
if _type == 'homework':
journal = HomeworkJ.objects.filter(material=Homework.objects.get(id=request.GET['id']), student=request.user)
if _type == 'exam':
journal = ExamJ.objects.filter(material=Exam.objects.get(id=request.GET['id']), student=request.user)
if journal and journal.exists():
context['code'] = '0' if journal.first().material.theme.empty else '1'
return context