moneropro/articles/views.py
2022-08-07 10:43:12 -03:00

271 lines
No EOL
10 KiB
Python

from django.shortcuts import render
from django.http import HttpResponseRedirect
from django.urls import reverse
from .models import *
from .forms import *
from users.models import *
from users.forms import *
from users.views import update_visitors
from django.contrib.auth import logout, login, authenticate
from django.contrib.auth.forms import UserCreationForm
from django.contrib.auth.decorators import login_required
import datetime
from datetime import date, timedelta
###########################################
# General visitors' pages
###########################################
def articles(request):
if request.user.username != "Administrador" and request.user.username != "Morpheus":
update_visitors(False)
articles = Article.objects.filter(status="Published").order_by('-id')
first = True
thumbnail = ''
count = 0
for article in articles:
if first:
thumbnail = article.thumbnail
thumbnail = thumbnail.replace('400x300', '1920x1080')
first = False
article.thumbnail = 'img/articles/' + article.thumbnail
if len(article.title) > 100:
article.title = article.title[:100] + '...'
article.count = count
if count != 5 and count != 0:
article.text = article.text[:200] + '...'
else:
article.text = article.text[:250] + '...'
count += 1
if request.method != 'POST':
#no data, go back to articles section
form = SubscriberForm()
message = False
else:
#e-mail submitted
form = SubscriberForm(data=request.POST)
if form.is_valid():
new_subscriber = form.save(commit=False)
new_subscriber.save()
message = 'Subscription successful!'
else:
message = 'Something went wrong!'
context = {'page': 'article', 'articles': articles, 'form': form, 'message': message, 'thumbnail': thumbnail}
return render(request, 'articles/articles.html', context)
# This function is equal to 'view_article', except that it increase unique_visitors
def article(request, identification):
if request.user.username != "Administrador" and request.user.username != "Morpheus":
update_visitors(True)
try:
article = Article.objects.get(id=identification)
except:
try:
identification = identification.replace('-', ' ')
article = Article.objects.get(title=identification)
except:
return render(request, 'users/error.html')
article.thumbnail = article.thumbnail.replace('400x300', '1920x1080')
if article.status == 'Published':
context = {'page': 'article', 'article': article}
return render(request, 'articles/article.html', context)
else:
if request.user.username != "Administrador" and request.user.username != "Morpheus" and request.user != article.owner and request.user.profile.type != 'editor':
return render(request, 'users/error.html')
else:
context = {'page': 'article', 'article': article}
return render(request, 'articles/article.html', context)
# This function is equal to 'article', except that it doesn't increase unique_visitors
def view_article(request, identification):
if request.user.username != "Administrador" and request.user.username != "Morpheus":
update_visitors(False)
try:
article = Article.objects.get(id=identification)
except:
try:
identification = identification.replace('-', ' ')
article = Article.objects.get(title=identification)
except:
return render(request, 'users/error.html')
article.thumbnail = article.thumbnail.replace('400x300', '1920x1080')
if article.status == 'Published':
context = {'page': 'article', 'article': article}
return render(request, 'articles/article.html', context)
else:
if request.user.username != "Administrador" and request.user.username != "Morpheus" and request.user != article.owner and request.user.profile.type != 'editor':
return render(request, 'users/error.html')
else:
context = {'page': 'article', 'article': article}
return render(request, 'articles/article.html', context)
###########################################
# Required login - Users
###########################################
@login_required
def images(request):
context = {'page': 'article'}
return render(request, 'articles/images.html', context)
@login_required
def write(request):
articles = Article.objects.filter(author=request.user).order_by('-id')
for article in articles:
try:
article.date_added = datetime.datetime.strftime(article.date_added, '%d/%m/%Y')
article.date_updated = datetime.datetime.strftime(article.date_updated, '%d/%m/%Y')
except:
pass
try:
article.date_published = datetime.datetime.strftime(article.date_published, '%d/%m/%Y')
except:
pass
if len(article.title) > 60:
article.title = article.title[:60] + '...'
if request.user.profile.type == 'editor':
reviews = Article.objects.filter(status="Pending approval").exclude(author=request.user)
for review in reviews:
try:
review.date_added = datetime.datetime.strftime(review.date_added, '%d/%m/%Y')
review.date_updated = datetime.datetime.strftime(review.date_updated, '%d/%m/%Y')
except:
pass
try:
review.date_published = datetime.datetime.strftime(review.date_published, '%d/%m/%Y')
except:
pass
if len(review.title) > 60:
review.title = review.title[:60] + '...'
context = {'page': 'article', 'articles': articles, 'reviews': reviews}
if request.user.profile.type == "admin":
reviews = Article.objects.filter(status="Pending approval")
for review in reviews:
try:
review.date_added = datetime.datetime.strftime(review.date_added, '%d/%m/%Y')
review.date_updated = datetime.datetime.strftime(review.date_updated, '%d/%m/%Y')
except:
pass
try:
review.date_published = datetime.datetime.strftime(review.date_published, '%d/%m/%Y')
except:
pass
if len(review.title) > 60:
review.title = review.title[:60] + '...'
published = Article.objects.filter(status="Published")
for publish in published:
try:
publish.date_added = datetime.datetime.strftime(publish.date_added, '%d/%m/%Y')
publish.date_updated = datetime.datetime.strftime(publish.date_updated, '%d/%m/%Y')
except:
pass
try:
publish.date_published = datetime.datetime.strftime(publish.date_published, '%d/%m/%Y')
except:
pass
if len(publish.title) > 60:
publish.title = publish.title[:60] + '...'
context = {'page': 'article', 'articles': articles, 'reviews': reviews, 'published': published}
else:
context = {'page': 'article', 'articles': articles}
return render(request, 'articles/write.html', context)
@login_required
def new_article(request):
if request.method != 'POST':
#create new page with blank form
form = ArticleForm()
else:
#process data and submit article
form = ArticleForm(data=request.POST)
if form.is_valid():
new_article = form.save(commit=False)
new_article.author = request.user.username
articles = Article.objects.filter(author=new_article.author).filter(status='Pending approval')
count = 0
if articles:
for article in articles:
count += 1
if count >= 5:
return HttpResponseRedirect(reverse('articles:write'))
new_article.date_updated = datetime.datetime.now()
new_article.owner = request.user
new_article.url = new_article.title.replace(' ', '-')
new_article.status = 'Pending approval'
new_article.save()
return HttpResponseRedirect(reverse('articles:write'))
context = {'form': form, 'page': 'article'}
return render(request, 'articles/new_article.html', context)
@login_required
def edit_article(request, identification):
try:
article = Article.objects.get(id=identification)
except:
return render(request, 'users/error.html')
if request.user.profile.type != "admin" and request.user != article.owner:
return render(request, 'users/error.html')
if request.method != 'POST':
#no data submitted, load saved data
form = ArticleForm(instance=article)
else:
#data submitted, now save it
form = ArticleForm(instance=article, data=request.POST)
if form.is_valid():
new_article = form.save(commit=False)
new_article.author = request.user.username
new_article.date_updated = date.today()
new_article.owner = request.user
new_article.url = new_article.title.replace(' ', '-')
new_article.status = 'Pending approval'
new_article.save()
return HttpResponseRedirect(reverse('articles:write'))
context = {'form': form, 'article': article, 'page': 'article'}
return render(request, 'articles/edit_article.html', context)
@login_required
def delete_article(request, identification):
try:
article = Article.objects.get(id=identification)
except:
return render(request, 'users/error.html')
if request.user.profile.type != "admin" and request.user != article.owner:
return render(request, 'users/error.html')
article.delete()
return HttpResponseRedirect(reverse('articles:write'))
@login_required
def publish_article(request, identification):
try:
article = Article.objects.get(id=identification)
except:
return render(request, 'users/error.html')
if request.user.profile.type != "admin" and request.user.profile.type != "editor":
return render(request, 'users/error.html')
if request.user.profile.type == article.owner.profile.type and request.user.profile.type != 'admin':
return render(request, 'users/error.html')
article.status = 'Published'
article.date_published = date.today()
article.save()
return HttpResponseRedirect(reverse('articles:write'))