Source code for oioioi.newsfeed.views

from django.conf import settings
from django.shortcuts import get_object_or_404, redirect
from django.template.response import TemplateResponse
from django.utils.translation import get_language_from_request

from oioioi.base.permissions import enforce_condition, is_superuser
from oioioi.newsfeed.forms import NewsLanguageVersionFormset
from oioioi.newsfeed.models import News, NewsLanguageVersion


@enforce_condition(is_superuser)
[docs]def add_news_view(request): if request.method == 'POST': formset = NewsLanguageVersionFormset(request.POST) if formset.is_valid(): instances = formset.save(commit=False) news = News() news.save() for news_language_version in instances: news_language_version.news = news news_language_version.save() for news_language_version in formset.deleted_objects: news_language_version.delete() return redirect('newsfeed') else: current_language = get_language_from_request(request) formset = NewsLanguageVersionFormset( initial=[ {'language': lang_short, 'DELETE': lang_short != current_language} for lang_short, _ in settings.LANGUAGES ], queryset=NewsLanguageVersion.objects.none(), ) return TemplateResponse(request, 'newsfeed/news-add.html', {'formset': formset})
@enforce_condition(is_superuser)
[docs]def delete_news_view(request, news_id): news_item = get_object_or_404(News, id=news_id) news_item.delete() return redirect('newsfeed')
@enforce_condition(is_superuser)
[docs]def edit_news_view(request, news_id): news_item = get_object_or_404(News, id=news_id) if request.method == 'POST': formset = NewsLanguageVersionFormset(request.POST) if formset.is_valid(): instances = formset.save(commit=False) for news_language_version in instances: news_language_version.news = news_item news_language_version.save() for news_language_version in formset.deleted_objects: news_language_version.delete() return redirect('newsfeed') else: current_language = get_language_from_request(request) languages = [lang_short for lang_short, _ in settings.LANGUAGES] queryset = NewsLanguageVersion.objects.filter(news=news_item) for news_language_version in queryset: languages.remove(news_language_version.language) formset = NewsLanguageVersionFormset( initial=[ {'language': lang, 'DELETE': lang != current_language} for lang in languages ], queryset=NewsLanguageVersion.objects.filter(news=news_item), ) return TemplateResponse(request, 'newsfeed/news-edit.html', {'formset': formset})
[docs]def newsfeed_view(request): news_list = News.objects.order_by('-date').prefetch_related('versions') news_version_list = [] for news in news_list: news_version_list.append(news.get_content(request)) return TemplateResponse( request, 'newsfeed/newsfeed-view.html', {'news_version_list': news_version_list} )