# 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