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.
165 lines
5.4 KiB
165 lines
5.4 KiB
# coding=utf-8
|
|
import random
|
|
import re
|
|
from lms.decors import api_decor
|
|
from management.letters import sent_comment_news
|
|
from library.models import Article
|
|
from management.models import Comment
|
|
from storage.models import Storage
|
|
import django.utils.timezone
|
|
|
|
|
|
@api_decor(without_auth=True)
|
|
def get_random_article(request, context):
|
|
context['code'] = '1'
|
|
context['data'] = random.choice(Article.objects.exclude(id=request.GET['id'])).slug
|
|
return context
|
|
|
|
|
|
@api_decor(without_auth=False, method='POST', need_keys=['art'], check_request=True)
|
|
def set_favorite(request, context):
|
|
try:
|
|
article = Article.objects.get(id=request.POST['art'])
|
|
except Article.DoesNotExist:
|
|
context['code'] = '0'
|
|
context['response'] = u'Статья не найдена'
|
|
else:
|
|
article.set_favorite(request.user)
|
|
context['code'] = '1'
|
|
return context
|
|
|
|
|
|
@api_decor(without_auth=False, method='POST', need_keys=['art'], check_request=True)
|
|
def unset_favorite(request, context):
|
|
try:
|
|
article = Article.objects.get(id=request.POST['art'])
|
|
except Article.DoesNotExist:
|
|
context['code'] = '0'
|
|
context['response'] = u'Статья не найдена'
|
|
else:
|
|
article.unset_favorite(request.user)
|
|
context['code'] = '1'
|
|
return context
|
|
|
|
|
|
@api_decor(without_auth=False, method='GET', need_keys=['id'], check_request=True)
|
|
def check_favorite(request, context):
|
|
try:
|
|
article = Article.objects.get(id=request.GET['id'])
|
|
except Article.DoesNotExist:
|
|
context['code'] = '0'
|
|
context['response'] = u'Статья не найдена'
|
|
else:
|
|
if article.check_favorit_exists(request.user):
|
|
context['code'] = '1'
|
|
else:
|
|
context['code'] = '0'
|
|
return context
|
|
|
|
|
|
@api_decor(without_auth=True, need_keys=['lesson'], method='POST', check_request=True)
|
|
def load_comments(request, context):
|
|
# Загрузка списка комментариев
|
|
lesson = Article.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)
|
|
def get_comments_length(request, context):
|
|
context['code'] = '1'
|
|
context['data'] = Article.objects.get(id=request.GET['id']).comments.filter(closed=False).count()
|
|
return context
|
|
|
|
|
|
@api_decor(without_auth=False)
|
|
def sent_comment(request, context):
|
|
# Отправка комментария урока
|
|
if request.POST['comment_sent_text']:
|
|
lesson = Article.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,
|
|
bbtext=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
|
|
context['code'] = '1'
|
|
return context
|
|
|
|
|
|
@api_decor(without_auth=False)
|
|
def set_like(request, context):
|
|
try:
|
|
article = Article.objects.get(id=request.POST['id'])
|
|
except Article.DoesNotExist:
|
|
context['code'] = '0'
|
|
context['response'] = u'Статья не найдена'
|
|
else:
|
|
result = article.like_plus(request.user)
|
|
context['code'] = '1' if result else '0'
|
|
return context
|
|
|
|
|
|
@api_decor(without_auth=False)
|
|
def unset_like(request, context):
|
|
try:
|
|
article = Article.objects.get(id=request.POST['id'])
|
|
except Article.DoesNotExist:
|
|
context['code'] = '0'
|
|
context['response'] = u'Статья не найдена'
|
|
else:
|
|
result = article.like_minus(request.user)
|
|
context['code'] = '1' if result else '0'
|
|
return context
|
|
|
|
|
|
@api_decor(without_auth=True)
|
|
def refresh_like(request, context):
|
|
try:
|
|
article = Article.objects.get(id=request.GET['id'])
|
|
except Article.DoesNotExist:
|
|
context['code'] = '0'
|
|
context['response'] = u'Статья не найдена'
|
|
else:
|
|
context['data'] = article.get_likes_length()
|
|
context['code'] = '1'
|
|
return context
|
|
|
|
|
|
@api_decor(without_auth=True)
|
|
def get_articles_length(request, context):
|
|
context['data'] = Article.objects.all().count()
|
|
context['code'] = '1'
|
|
return context
|
|
|
|
|
|
@api_decor(without_auth=True)
|
|
def get_all_views_length(request, context):
|
|
views = 0
|
|
for i in Article.objects.filter(public=True):
|
|
views += i.get_views_length()
|
|
context['code'] = '1'
|
|
context['data'] = views
|
|
return context
|
|
|