# coding=utf-8
import datetime
import re
from django.db.models import Q
from access.models import User, ActionJ
from lms.decors import api_decor
from courses.models import Course, Lesson, Homework, CourseTheme
from courses.templates import comment_fabric
from journals.models import AchievementJ, LessonJ, HomeworkJ, ExamJ, check_journal, HomeworkTry, ExamTry
from finance.models import Bill
from courses.tools import set_read_flag, get_next_button
from management.letters import sent_comment_news, sent_teacher_answer, sent_to_teacher_answer, letter_delete_comment, \
sent_new_comment
from management.models import Comment
from lms.settings import DOMAIN
from storage.models import Storage
from library.models import Article
import django.utils.timezone
@api_decor(without_auth=False, method='POST', need_keys=['id', 'material_id', 'text', 'type'], check_request=True)
def sent_comment_response(request, context):
try:
response = Comment.objects.get(id=request.POST['id'])
except Comment:
context['code'] = '0'
context['response'] = u'Исходный комментарий не найден'
return context
comment = Comment.objects.create(owner=request.user, text=request.POST['text'], parent_id=response.id)
if request.POST['type'] == 'L':
try:
material = Article.objects.get(id=request.POST['material_id'])
except Article.DoesNotExists:
context['code'] = '0'
context['response'] = u'Статья не найдена'
return context
elif request.POST['type'] == 'A':
try:
material = Lesson.objects.get(id=request.POST['material_id'])
except Lesson.DoesNotExists:
context['code'] = '0'
context['response'] = u'Урок не найден'
return context
response.replies.add(comment)
response.response_comment = comment
response.response = True
response.saw.add(request.user)
if response.owner.check_subscription('new_comment'):
sent_comment_news(response, comment, material, _type=request.POST['type'])
response.save()
material.comments.add(comment)
material.save()
context['code'] = '1'
return context
@api_decor(without_auth=False, method='POST', need_keys=['id'], check_request=True)
def close_achievement(request, context):
# Пометка ачивки, как прочитанной
a = AchievementJ.objects.get(id=request.POST['id'])
a.got = True
a.save()
context['code'] = '1'
return context
@api_decor(without_auth=False)
def get_achievement(request, context):
# Получение ачивки пользователя, первой в очереди, не прочитанной
context['code'] = '0'
a = AchievementJ.objects.filter(student=request.user, got=False).first()
if a:
context['code'] = '1'
context['data'] = {
'id': a.id,
'title': a.title,
'text': a.text,
'image': a.achievement.image.url,
'border': a.achievement.border,
'background': a.achievement.background
}
return context
@api_decor(without_auth=False)
def get_process_vector(request, context):
return context
@api_decor(without_auth=False, need_keys=['id', 'user'], method='GET', check_request=True)
def check_bill(request, context):
# Проверка оплаты
# TODO: Применить новую модель доступов
course = Course.objects.get(id=request.GET['id'])
user = User.objects.get(id=request.GET['user'])
context['code'] = '0'
if Bill.objects.filter(service__course=course, user=user, status='F').exists():
context['code'] = '1'
return context
@api_decor(without_auth=False, need_keys=['lesson'], method='POST', check_request=True)
def read_lesson(request, context):
# Пометка урока как прочитанного
context['code'] = '1'
try:
lesson = Lesson.objects.get(id=request.POST['lesson'])
journal = LessonJ.objects.get(student=request.user, material=Lesson.objects.get(id=request.POST['lesson']))
except Lesson.DoesNotExist:
context['code'] = '0'
except LessonJ.DoesNotExist:
context['code'] = '0'
else:
context['data'] = [journal.id, lesson.id]
journal.saw_this()
return context
@api_decor(without_auth=False)
def sent_lesson_comment(request, context):
# Отправка комментария урока
if request.POST['comment_sent_text']:
lesson = Lesson.objects.get(id=request.POST['comment_for_lesson_id'])
parent_id = request.POST['reply_for_comment_id']
comment = Comment.objects.create(parent_id=parent_id, owner=request.user,
text=request.POST['comment_sent_text'], date=django.utils.timezone.now())
lesson.comments.add(comment)
lesson.save()
# Получение о добавление файлов комментария
r = re.compile('^file_')
files_keys = []
for i in request.POST.keys():
if r.match(i): files_keys.append(i)
if files_keys:
for i in files_keys:
comment.files.add(Storage.objects.get(key=request.POST[i]))
comment.save()
if parent_id != '0':
comment2 = Comment.objects.get(id=parent_id)
if comment2.owner.check_subscription('new_comment'):
sent_comment_news(comment2, comment, lesson)
context['code'] = '1'
context['data'] = comment.id
if not comment.send:
for eye in User.objects.filter(in_role='S2'):
sent_new_comment(comment, lesson, eye.email)
context['code'] = '1'
return context
@api_decor(without_auth=True, need_keys=['lesson'], method='POST', check_request=True)
def load_lesson_comments(request, context):
# Загрузка списка комментариев
lesson = Lesson.objects.get(id=request.POST['lesson'])
context['data'] = lesson.get_comments(_user=request.user)
if len(context['data']) == 0:
context['code'] = '0'
else:
context['code'] = '1'
return context
@api_decor(without_auth=True, need_keys=['id'], method='POST', check_request=True)
def load_comment(request, context):
try:
comment = Comment.objects.get(id=request.POST['id'])
except Comment.DoesNotExist:
context['code'] = '0'
else:
context['data'] = comment.get_face(__user=request.user)
return context
@api_decor(without_auth=False)
def sent_homework_comment(request, context):
# Отправка ДЗ попытки
context['data'] = {}
context['code'] = '0'
if request.POST['homework_text']:
homework = HomeworkJ.objects.get(id=request.POST['homework_id'], student=request.user)
h_status = homework.get_status_flag()
if h_status not in ['N', 'F']:
ht, c = HomeworkTry.objects.get_or_create(parent=homework, success=False, f_date=None, student=request.user,
material=homework.material)
comment = Comment.objects.create(owner=request.user, text=request.POST['homework_text'],
date=django.utils.timezone.now())
ht.comments.add(comment)
ht.save()
if c:
action = ActionJ.objects.create(student=homework.student,
a_type='I',
place=u'Курс '+u'\xab'+u'{0}'.format(homework.material.course.get_title())+u'\xbb'+u', домашнее задание # {0}'.format(homework.material.theme.sort),
text=u'Ваше домашнее задание отправлено на проверку.'
u''.format(homework.material.id, comment.id, DOMAIN))
homework.date = datetime.datetime.now()
if homework.student.check_subscription('teacher'):
sent_teacher_answer(action)
# Отправка письма и активности преподавателю
sent_to_teacher_answer(ActionJ.objects.create(
student=ht.teacher,
place=u'Студент: {0}, домашнее задание # {1}'.format(
homework.student,
homework.material.theme.sort),
text=u'Текст: {0}
Перейти к проверке'.format(comment.text,
homework.id, DOMAIN),
a_type='I'
))
# Проверка и загрузка файлов
r = re.compile('^file_')
files_keys = []
for i in request.POST.keys():
if r.match(i): files_keys.append(i)
if files_keys:
for i in files_keys:
comment.files.add(Storage.objects.get(key=request.POST[i]))
comment.save()
context['code'] = '1'
context['data'] = {'try': ht.get_head_face(), 'comment': comment.get_face()}
return context
@api_decor(without_auth=False)
def send_cancel_teach_comment(request, context):
# Отправка на доработку для преподавателя
# TODO: Перейти на модель попыток
if request.POST['comment_sent_text']:
lesson = HomeworkJ.objects.get(student__id=request.POST['comment_for_user_id'],
material__theme=request.POST['comment_for_theme_id'], teacher=request.user)
parent_id = request.POST['reply_for_comment_id']
comment = Comment.objects.create(parent_id=parent_id, owner=request.user, status='F',
text=request.POST['comment_sent_text'], date=django.utils.timezone.now())
lesson.comments.add(comment)
if lesson.status != 'F':
lesson.status = 'E'
action = ActionJ.objects.create(student=lesson.student,
a_type='D',
place=u'Курс '+u'\xab'+u'{0}'.format(lesson.homework.course.get_title())+u'\xbb'+u', домашнее задание # {0}'.format(lesson.homework.theme.sort),
text=u'Ваше домашнее задание проверено преподавателем. '
u'Вам необходимо провести работу над ошибками'
u''.format(
lesson.material.id, comment.id, DOMAIN))
if lesson.student.check_subscription('teacher'):
sent_teacher_answer(action)
lesson.save()
r = re.compile('^file_')
files_keys = []
for i in request.POST.keys():
if r.match(i): files_keys.append(i)
if files_keys:
for i in files_keys:
comment.files.add(Storage.objects.get(key=request.POST[i]))
comment.save()
if parent_id != '0':
comment2 = Comment.objects.get(id=parent_id)
if comment2.owner.check_subscription('new_comment'):
sent_comment_news(comment2, comment, lesson)
context['code'] = '1'
context['data'] = comment.id
context['code'] = '1'
return context
@api_decor(without_auth=False)
def send_accept_teach_comment(request, context):
# Одобрение попытки ДЗ для преподавателя
# TODO: Перейти на модель попыток
lesson = HomeworkJ.objects.get(student__id=request.POST['comment_for_user_id'],
material__theme=request.POST['comment_for_theme_id'], teacher=request.user)
parent_id = request.POST['reply_for_comment_id']
comment = Comment.objects.create(parent_id=parent_id, owner=request.user, status='G',
text=request.POST['comment_sent_text'] + get_next_button(lesson.student, "H",
lesson.homework.theme.id),
date=django.utils.timezone.now())
lesson.comments.add(comment)
if lesson.status != 'F':
lesson.status = 'F'
action = ActionJ.objects.create(student=lesson.student,
a_type='S',
place=u'Курс '+u'\xab'+u'{0}'.format(lesson.homework.course.get_title())+u'\xbb'+u', домашнее задание # {0}'.format(
lesson.homework.theme.sort),
text=u'Ваше домашнее задание одобрено преподавателем.'.format(
lesson.material.id, comment.id, DOMAIN))
if lesson.student.check_subscription('teacher'):
sent_teacher_answer(action)
set_read_flag(lesson.student, lesson.homework.course)
lesson.save()
r = re.compile('^file_')
files_keys = []
for i in request.POST.keys():
if r.match(i): files_keys.append(i)
if files_keys:
for i in files_keys:
comment.files.add(Storage.objects.get(key=request.POST[i]))
comment.save()
if parent_id != '0':
comment2 = Comment.objects.get(id=parent_id)
if comment2.owner.check_subscription('new_comment'):
sent_comment_news(comment2, comment, lesson)
context['code'] = '1'
context['data'] = comment.id
return context
@api_decor(without_auth=False)
def send_exam_cancel_teach_comment(request, context):
# Отправка попытки на доработку для преподавателя
# TODO: Перейти на модель попыток
if request.POST['comment_sent_text']:
lesson = ExamJ.objects.get(student__id=request.POST['comment_for_user_id'],
material__course__id=request.POST['comment_for_theme_id'], teacher=request.user)
parent_id = request.POST['reply_for_comment_id']
comment = Comment.objects.create(parent_id=parent_id, owner=request.user, status='F',
text=request.POST['comment_sent_text'], date=django.utils.timezone.now())
lesson.comments.add(comment)
if lesson.status != 'F':
lesson.status = 'E'
action = ActionJ.objects.create(student=lesson.student,
a_type='D',
place=u'Экзаменационная работа '+u'\xab'+u'{0}'.format(lesson.exam.course.get_title())+u'\xbb',
text=u'Ваша работа отправлена на доработку. '
u''
u'Вам необходимо провести работу над ошибками'.format(
lesson.material.id, DOMAIN))
if lesson.student.check_subscription('teacher'):
sent_teacher_answer(action)
lesson.save()
r = re.compile('^file_')
files_keys = []
for i in request.POST.keys():
if r.match(i): files_keys.append(i)
if files_keys:
for i in files_keys:
comment.files.add(Storage.objects.get(key=request.POST[i]))
comment.save()
if parent_id != '0':
comment2 = Comment.objects.get(id=parent_id)
if comment2.owner.check_subscription('new_comment'):
sent_comment_news(comment2, comment, lesson)
context['code'] = '1'
context['data'] = comment.id
context['code'] = '1'
return context
@api_decor(without_auth=False)
def send_exam_accept_teach_comment(request, context):
# Принятие экзамена для преподавателя
# TODO: Перейти на модель попыток
lesson = ExamJ.objects.get(student__id=request.POST['comment_for_user_id'],
material__course__id=request.POST['comment_for_theme_id'], teacher=request.user)
parent_id = request.POST['reply_for_comment_id']
comment = Comment.objects.create(parent_id=parent_id, owner=request.user, status='G',
text=request.POST['comment_sent_text'] +
request.POST['comment_sent_text'] + get_next_button(lesson.student, "E",
lesson.exam.course.id),
date=django.utils.timezone.now())
lesson.comments.add(comment)
if lesson.status != 'F':
lesson.status = 'F'
action = ActionJ.objects.create(student=lesson.student,
a_type='W',
place=u'Экзаменационная работа '+u'\xab'+u'{0}'.format(lesson.exam.course.get_title())+u'\xbb',
text=u'Ваша экзаменационная работа принята преподователем. '
u'Поздравляем вас!'.format(
lesson.material.id, DOMAIN))
if lesson.student.check_subscription('teacher'):
sent_teacher_answer(action)
lesson.save()
# TODO: Много повторений в других методах, переделать на отдельный метод
r = re.compile('^file_')
files_keys = []
for i in request.POST.keys():
if r.match(i): files_keys.append(i)
if files_keys:
for i in files_keys:
comment.files.add(Storage.objects.get(key=request.POST[i]))
comment.save()
if parent_id != '0':
comment2 = Comment.objects.get(id=parent_id)
if comment2.owner.check_subscription('new_comment'):
sent_comment_news(comment2, comment, lesson)
context['code'] = '1'
context['data'] = comment.id
return context
@api_decor(without_auth=False, need_keys=['theme', 'student'], method='POST', check_request=True)
def load_homework_comments_for_teacher(request, context):
# Получение комментариев для преподавателя
# TODO: Перейти на модель попыток
homework = HomeworkJ.objects.get(material__theme__id=request.POST['theme'], student__id=request.POST['student'],
teacher=request.user)
context['data'] = []
for i in homework.comments.filter(parent_id='0').order_by('date'):
context['data'].append(comment_fabric(i, __user=request.user))
if len(context['data']) == 0:
context['code'] = '0'
else:
context['code'] = '1'
return context
@api_decor(without_auth=False, need_keys=['theme', 'student'], method='POST', check_request=True)
def load_exam_comments_for_teacher(request, context):
# Полечение попыток экзамена
# TODO: Перейти на модель попыток
homework = ExamJ.objects.get(material__course__id=request.POST['theme'], student__id=request.POST['student'],
teacher=request.user)
context['data'] = []
for i in homework.comments.filter(parent_id='0').order_by('date'):
context['data'].append(comment_fabric(i, __user=request.user))
if len(context['data']) == 0:
context['code'] = '0'
else:
context['code'] = '1'
return context
@api_decor(without_auth=False, need_keys=['homework'], method='POST', check_request=True)
def load_homework_comments(request, context):
# Загрузка комментариев по ДЗ
# TODO: Перейти на модель попыток
homework = HomeworkJ.objects.get(material__id=request.POST['homework'], student=request.user)
context['data'] = []
for i in homework.comments.filter(parent_id='0').order_by('date'):
context['data'].append(comment_fabric(i, __user=request.user))
if len(context['data']) == 0:
context['code'] = '0'
else:
context['code'] = '1'
return context
@api_decor(without_auth=False)
def sent_exam_comment(request, context):
# Отправка попытки сутедентом
context['data'] = {}
context['code'] = '0'
if request.POST['exam_text']:
exam = ExamJ.objects.get(id=request.POST['exam_id'], student=request.user)
h_status = exam.get_status_flag()
if h_status not in ['N', 'F']:
ht, c = ExamTry.objects.get_or_create(parent=exam, success=False, f_date=None, student=request.user,
material=exam.material)
comment = Comment.objects.create(owner=request.user, text=request.POST['exam_text'],
date=django.utils.timezone.now())
ht.comments.add(comment)
ht.save()
if c:
action = ActionJ.objects.create(student=exam.student,
a_type='I',
place=u'Курс '+u'\xab'+u'{0}'.format(
exam.material.course.get_title())+u'\xbb'+u', Экзаменационная работа',
text=u'Ваша экзаменационная работа отправлена на проверку.'
u''.format(exam.material.id, comment.id, DOMAIN))
exam.date = datetime.datetime.now()
if exam.student.check_subscription('teacher'):
sent_teacher_answer(action)
# Отправка письма и активности преподавателю
sent_to_teacher_answer(ActionJ.objects.create(
student=ht.teacher,
place=u'Студент: {0}, Экзамен'.format(exam.student),
text=u'Текст: {0}
Перейти к проверке'.format(comment.text, exam.id, DOMAIN),
a_type='P'
))
# Проверка и загрузка файлов
r = re.compile('^file_')
files_keys = []
for i in request.POST.keys():
if r.match(i): files_keys.append(i)
if files_keys:
for i in files_keys:
comment.files.add(Storage.objects.get(key=request.POST[i]))
comment.save()
context['code'] = '1'
context['data'] = {'try': ht.get_head_face(), 'comment': comment.get_face()}
return context
@api_decor(without_auth=True, need_keys=['exam'], method='POST', check_request=True)
def load_exam_comments(request, context):
# Загрузка попыток по экзаменам
# TODO: Перейти на модель попыток
exam = ExamJ.objects.get(material__id=request.POST['exam'])
context['data'] = []
for i in exam.comments.filter(parent_id='0').order_by('date'):
context['data'].append(comment_fabric(i, __user=request.user))
if len(context['data']) == 0:
context['code'] = '0'
else:
context['code'] = '1'
return context
@api_decor(without_auth=False)
def delete_comment(request, context):
comment = Comment.objects.get(id=request.POST.get('comment'))
if comment.owner == request.user or request.user.is_admin:
if request.POST.get('text'):
letter_delete_comment(comment, request.POST.get('text'))
if Comment.objects.filter(parent_id=comment.id, closed=False).exists():
comment.closed = True
comment.save()
else:
comment.delete()
if comment.parent_id != '0' and Comment.objects.filter(id=comment.parent_id,
closed=True).exists() and not Comment.objects.filter(
parent_id=comment.parent_id).exists():
Comment.objects.get(id=comment.parent_id).delete()
context['code'] = '1'
else:
context['code'] = '0'
context['response'] = u'Вы не можете удалить коммментарий, автором которого вы не являетесь'
return context
@api_decor(without_auth=False)
def get_lesson_comments_length(request, context):
context['code'] = '1'
context['data'] = Lesson.objects.get(id=request.GET['id']).comments.filter(closed=False).count()
return context
@api_decor(without_auth=False)
def get_homework_comments_length(request, context):
context['code'] = '1'
try:
result = HomeworkJ.objects.get(material=Homework.objects.get(id=request.GET['id']),
student=request.user).get_comments_length()
except HomeworkJ.DoesNotExist:
result = 0
context['data'] = result
return context
@api_decor(without_auth=False)
def get_homework_comments_length_for_teacher(request, context):
context['code'] = '1'
context['data'] = HomeworkJ.objects.get(material__theme__id=request.GET['id'], teacher=request.user,
student__id=request.GET['student']).get_comments_length()
return context
@api_decor(without_auth=False)
def get_exam_comments_length_for_teacher(request, context):
context['code'] = '1'
context['data'] = ExamJ.objects.get(material__course__id=request.GET['id'], teacher=request.user,
student__id=request.GET['student']).get_comments_length()
return context
@api_decor(without_auth=False)
def get_exam_comments_length(request, context):
context['code'] = '1'
context['data'] = ExamJ.objects.get(material__id=request.GET['id'], student=request.user).get_comments_length()
return context
@api_decor(without_auth=False)
def get_comment_text(request, context):
try:
comment = Comment.objects.get(id=request.GET['comment'])
except Comment.DoesNotExist:
context['code'] = '0'
else:
context['code'] = '1'
context['data'] = comment.get_text()
return context
@api_decor(without_auth=False, need_keys=['ID'], check_request=True, method='GET')
def get_lesson_context(request, context):
if request.user.in_role != 'U':
lesson = Lesson.objects.get(id=request.GET['ID'])
materials = [] if lesson.materials.all() else ''
for i in lesson.materials.all():
materials.append({
'url': i.original.url,
'id': 'single_image' if i.f_format.f_type == 'I' else '',
'file_name': i.get_file_name(),
'name_for_user': i.get_name_for_user(),
'icon_class': i.f_format.icon_class
})
context['data'] = {
'video': lesson.video,
'description': lesson.description,
'title': lesson.title,
'materials': materials
}
context['code'] = '1'
return context
@api_decor(without_auth=False, need_keys=['start_place_type', 'start_place_id'], method='GET', check_request=True)
def get_next_button_ajax(request, context):
# Получение следующей кнопки
context['data'] = get_next_button(request.user,
request.GET['start_place_type'],
request.GET['start_place_id'])
context['code'] = '1'
return context
@api_decor(without_auth=True, need_keys=['id'], method='GET', check_request=True)
def by_course_data(request, context):
# Получить информацию окна покупки для курса
try:
course = Course.objects.get(id=request.GET['id'])
except Course.DoesNotExist:
context['code'] = '1'
else:
context['code'] = '1'
context['data'] = {
'image': course.buy_icon.url if course.buy_icon else '/static/img/1442791218_certificate.png',
'name': course.title,
'basic': CourseTheme.objects.filter(course=course,
_type='B').count() if not course.use_fail or course.basic_len == 0 else course.basic_len,
'addition': CourseTheme.objects.filter(
Q(course=course, _type='A') | Q(course=course, _type='P') | Q(course=course,
_type='M')).count() if not course.use_fail or course.addition_len == 0 else course.addition_len,
'min_price': 6777 if course.min_price == 0 else course.min_price
}
return context
@api_decor(without_auth=False, need_keys=['ID'], method='GET', check_request=True)
def get_homework_context(request, context):
# Получение информации из ДЗ
if request.user.in_role != 'U':
homework = CourseTheme.objects.get(id=request.GET['ID']).get_homework()
materials = [] if homework.materials.all() else ''
for i in homework.materials.all():
materials.append({
'url': i.original.url,
'id': 'single_image' if i.f_format.f_type == 'I' else '',
'file_name': i.get_file_name(),
'name_for_user': i.get_name_for_user(),
'icon_class': i.f_format.icon_class
})
context['data'] = {
'description': homework.description,
'materials': materials
}
context['code'] = '1'
return context
@api_decor(without_auth=False)
def sent_homework_up_teacher(request, context):
context['data'] = {}
context['code'] = '0'
if request.POST['homework_text']:
homework = HomeworkJ.objects.get(id=request.POST['homework_id'])
h_status = homework.get_status_flag()
if h_status not in ['N', 'F']:
ht, c = HomeworkTry.objects.get_or_create(parent=homework, success=False, f_date=None, teacher=request.user,
material=homework.material, student=homework.student)
comment = Comment.objects.create(owner=request.user, status='G',
text=request.POST['homework_text'],
date=django.utils.timezone.now())
ht.comments.add(comment)
action = ActionJ.objects.create(student=ht.student,
a_type='I',
place=u'Курс '+u'\xab'+u'{0}'.format(homework.material.course.get_title())+u'\xbb'+u', домашнее задание # {0}'.format(homework.material.theme.sort),
text=u'Ваше домашнее задание одобрено преподавателем.'.format(
homework.material.id, comment.id, DOMAIN))
if homework.student.check_subscription('teacher'):
sent_teacher_answer(action)
# Отправка письма и активности преподавателю
sent_to_teacher_answer(ActionJ.objects.create(
student=ht.get_teacher(),
place=u'Студент: {0}, домашнее задание # {1}'.format(
homework.student,
homework.material.theme.sort),
text=u'Задание одобрено',
a_type='S'
))
# Проверка и загрузка файлов
r = re.compile('^file_')
files_keys = []
for i in request.POST.keys():
if r.match(i): files_keys.append(i)
if files_keys:
for i in files_keys:
comment.files.add(Storage.objects.get(key=request.POST[i]))
comment.save()
context['code'] = '1'
context['data'] = {'try': ht.get_head_face(), 'comment': comment.get_face()}
ht.saw_this()
homework.success = True
homework.save()
return context
@api_decor(without_auth=False)
def sent_homework_down_teacher(request, context):
context['data'] = {}
context['code'] = '0'
if request.POST['homework_text'] and request.user.in_role == 'T':
homework = HomeworkJ.objects.get(id=request.POST['homework_id'])
h_status = homework.get_status_flag()
if h_status not in ['N', 'F']:
ht, c = HomeworkTry.objects.get_or_create(parent=homework, success=False, f_date=None, teacher=request.user,
material=homework.material, student=homework.student)
comment = Comment.objects.create(owner=request.user, date=django.utils.timezone.now(), status='F',
text=request.POST['homework_text'])
ht.comments.add(comment)
ht.success = False
ht.f_date = datetime.datetime.now()
ht.save()
action = ActionJ.objects.create(student=ht.student,
a_type='S',
place=u'Курс '+u'\xab'+u'{0}'.format(homework.material.course.get_title())+u'\xbb'+u', домашнее задание # {0}'.format(homework.material.theme.sort),
text=u'Ваше домашнее задание проверено преподавателем. '
u'Вам необходимо провести работу над ошибками'
u''.format(
homework.material.id, comment.id, DOMAIN))
if ht.student.check_subscription('teacher'):
sent_teacher_answer(action)
# Отправка письма и активности преподавателю
ActionJ.objects.create(
student=ht.get_teacher(),
place=u'Студент: {0}, домашнее задание # {1}'.format(
homework.student,
homework.material.theme.sort),
text=u'Задание отправлено на доработку',
a_type='D'
)
# Проверка и загрузка файлов
r = re.compile('^file_')
files_keys = []
for i in request.POST.keys():
if r.match(i): files_keys.append(i)
if files_keys:
for i in files_keys:
comment.files.add(Storage.objects.get(key=request.POST[i]))
comment.save()
context['code'] = '1'
context['data'] = {'try': ht.get_head_face(), 'comment': comment.get_face()}
return context
@api_decor(without_auth=False)
def sent_exam_up_teacher(request, context):
context['data'] = {}
context['code'] = '0'
if request.POST['exam_text']:
homework = ExamJ.objects.get(id=request.POST['exam_id'])
h_status = homework.get_status_flag()
if h_status not in ['N', 'F']:
ht, c = ExamTry.objects.get_or_create(parent=homework, success=False, f_date=None, teacher=request.user,
material=homework.material, student=homework.student)
comment = Comment.objects.create(owner=request.user, status='G',
text=request.POST['exam_text'],
date=django.utils.timezone.now())
ht.comments.add(comment)
action = ActionJ.objects.create(student=ht.student,
a_type='W',
place=u'Экзаменационная работа '+u'\xab'+u'{0}'.format(
ht.material.course.get_title())+u'\xbb',
text=u'Ваша экзаменационная работа принята преподователем. '
u'Поздравляем вас!'.format(
ht.material.id, DOMAIN))
if homework.student.check_subscription('teacher'):
sent_teacher_answer(action)
# Отправка письма и активности преподавателю
ActionJ.objects.create(
student=ht.get_teacher(),
place=u'Студент: {0}, Экзамен'.format(homework.student),
text=u'Экзамен одобрен',
a_type='S'
)
if not ExamTry.objects.filter(teacher=homework.teacher, success=True).exists():
# Отправка письма и активности преподавателю
ActionJ.objects.create(
student=ht.teacher,
place=u'Студент: {0}, Экзамен'.format(homework.student),
text=u'Поздравляем. Ваш первый студент дошедший до конца',
a_type='W'
)
# Проверка и загрузка файлов
r = re.compile('^file_')
files_keys = []
for i in request.POST.keys():
if r.match(i): files_keys.append(i)
if files_keys:
for i in files_keys:
comment.files.add(Storage.objects.get(key=request.POST[i]))
comment.save()
context['code'] = '1'
context['data'] = {'try': ht.get_head_face(), 'comment': comment.get_face()}
ht.saw_this()
return context
@api_decor(without_auth=False)
def sent_exam_down_teacher(request, context):
context['data'] = {}
context['code'] = '0'
if request.POST['exam_text'] and request.user.in_role == 'T':
homework = ExamJ.objects.get(id=request.POST['exam_id'])
h_status = homework.get_status_flag()
if h_status not in ['N', 'F']:
ht, c = ExamTry.objects.get_or_create(parent=homework, success=False, f_date=None, teacher=request.user,
material=homework.material, student=homework.student)
comment = Comment.objects.create(owner=request.user, date=django.utils.timezone.now(), status='F',
text=request.POST['exam_text'])
ht.comments.add(comment)
ht.f_date = datetime.datetime.now()
ht.save()
action = ActionJ.objects.create(student=ht.student,
a_type='D',
place=u'Экзаменационная работа '+u'\xab'+u'{0}'.format(
ht.material.course.get_title())+u'\xbb',
text=u'Ваша работа отправлена на доработку. '
u''
u'Вам необходимо провести работу над ошибками'.format(
ht.material.id, DOMAIN))
if ht.student.check_subscription('teacher'):
sent_teacher_answer(action)
# Отправка письма и активности преподавателю
ActionJ.objects.create(
student=ht.get_teacher(),
place=u'Студент: {0}, Экзамен'.format(homework.student),
text=u'Задание отправлено на доработку',
a_type='D'
)
# Проверка и загрузка файлов
r = re.compile('^file_')
files_keys = []
for i in request.POST.keys():
if r.match(i): files_keys.append(i)
if files_keys:
for i in files_keys:
comment.files.add(Storage.objects.get(key=request.POST[i]))
comment.save()
context['code'] = '1'
context['data'] = {'try': ht.get_head_face(), 'comment': comment.get_face()}
return context