271 lines
No EOL
10 KiB
Python
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')) |