Dynastie/views.py

360 lines
11 KiB
Python

import os
from datetime import datetime, date, time
from django.shortcuts import render
from django.contrib.auth import authenticate, login, logout
from django.http import HttpResponseRedirect, Http404
from django.contrib.auth.decorators import login_required
from django.forms.models import inlineformset_factory
from dynastie.models import *
from dynastie.forms import *
def index(request):
if request.user.is_authenticated():
return HttpResponseRedirect('/blog')
login_failed = False
if 'login' in request.POST:
user = authenticate(username=request.POST['login'], password=request.POST['password'])
if user is None:
login_failed = True
else:
login(request, user)
return HttpResponseRedirect('/blog')
c = {'auth_key': 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA',\
'login_failed' : login_failed}
return render(request, 'templates/login.html', c)
def disconnect(request):
logout(request)
c = {'auth_key': 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA',\
'login_failed' : False}
return render(request, 'templates/login.html', c)
@login_required
def user(request):
users = User.objects.all()
c = {'users' : users}
return render(request, 'templates/user.html', c)
@login_required
def add_user(request):
if not request.user.is_superuser:
return HttpResponseRedirect('/user')
if request.method == 'POST': # If the form has been submitted...
if 'add' in request.POST:
form = UserForm(request.POST) # A form bound to the POST data
if form.is_valid(): # All validation rules pass
form = form.save()
user = User.objects.get(pk=form.id)
user.set_password(request.POST['password'])
user.save()
# Process the data in form.cleaned_data
# ...
return HttpResponseRedirect('/user') # Redirect after POST
else:
return HttpResponseRedirect('/user') # Redirect after POST
else:
form = UserForm() # An unbound form
return render(request, 'add_user.html', {
'form': form,
})
@login_required
def edit_user(request, user_id):
user = User.objects.get(pk=user_id)
if user is None:
raise Http404
edited = False
if request.method == 'POST': # If the form has been submitted...
if int(user_id) != int(request.user.id) and (not request.user.is_superuser):
return HttpResponseRedirect('/user/' + str(user_id))
if 'edit' in request.POST:
form = UserForm(request.POST, instance=user, initial={'password':''}) # A form bound to the POST data
if form.is_valid(): # All validation rules pass
form.save()
if request.POST['password'] != '':
user.set_password(request.POST['password'])
user.save()
edited = True
else:
if 'delete' in request.POST and request.user.is_superuser:
User.objects.get(pk=user_id).delete()
return HttpResponseRedirect('/user')
if 'cancel' in request.POST:
return HttpResponseRedirect('/user')
else:
form = UserForm(instance=user, initial={'password':''}) # An unbound form
c = {'user_to_edit' : user, 'form' : form, 'edited' : edited}
return render(request, 'templates/edit_user.html', c)
@login_required
def category(request):
categories = Category.objects.all()
c = {'categories' : categories}
return render(request, 'templates/category.html', c)
@login_required
def add_category(request):
if not request.user.is_superuser:
return HttpResponseRedirect('/category')
if request.method == 'POST': # If the form has been submitted...
if 'add' in request.POST:
form = CategoryForm(request.POST) # A form bound to the POST data
if form.is_valid(): # All validation rules pass
form = form.save()
# Process the data in form.cleaned_data
# ...
return HttpResponseRedirect('/category') # Redirect after POST
else:
return HttpResponseRedirect('/category') # Redirect after POST
else:
form = CategoryForm() # An unbound form
return render(request, 'add_category.html', {
'form': form,
})
@login_required
def edit_category(request, category_id):
category = Category.objects.get(pk=category_id)
if category is None:
raise Http404
if request.method == 'POST': # If the form has been submitted...
if 'cancel' in request.POST:
return HttpResponseRedirect('/category')
if 'edit' in request.POST and request.user.is_superuser:
form = CategoryForm(request.POST, instance=category) # A form bound to the POST data
if form.is_valid(): # All validation rules pass
form.save()
else:
form = CategoryForm(instance=category) # An unbound form
c = {'category' : category, 'form' : form}
return render(request, 'templates/edit_category.html', c)
@login_required
def delete_category(request, category_id):
if not request.user.is_superuser:
return HttpResponseRedirect('/category/' + str(category_id))
category = Category.objects.get(pk=category_id)
if category is None:
raise Http404
category.delete()
return HttpResponseRedirect('/category')
@login_required
def blog(request):
if request.user.is_superuser:
b = Blog.objects.all()
else:
b = Blog.objects.filter(writers=request.user.id)
c = {'blogs' : b}
return render(request, 'templates/blog.html', c)
@login_required
def add_blog(request):
if not request.user.is_superuser:
return HttpResponseRedirect('/blog')
if request.method == 'POST': # If the form has been submitted...
if 'add' in request.POST:
form = BlogForm(request.POST) # A form bound to the POST data
if form.is_valid(): # All validation rules pass
form = form.save()
form.create()
return HttpResponseRedirect('/blog') # Redirect after POST
else:
return HttpResponseRedirect('/blog') # Redirect after POST
else:
form = BlogForm() # An unbound form
return render(request, 'add_blog.html', {
'form': form,
})
@login_required
def view_blog(request, blog_id):
if not request.user.is_superuser:
b = Blog.objects.filter(id=blog_id).filter(writers=request.user.id)
else:
b = Blog.objects.get(pk=blog_id)
if b is None:
raise Http404
articles = Article.objects.filter(blog=b)
b = Blog.objects.get(pk=blog_id)
form = BlogForm(instance=b)
c = {'blog' : b, 'articles' : articles, 'form' : form}
return render(request, 'templates/view_blog.html', c)
@login_required
def edit_blog(request, blog_id):
if not request.user.is_superuser:
return HttpResponseRedirect('/blog/' + str(blog_id))
b = Blog.objects.get(pk=blog_id)
if b is None:
raise Http404
if request.method == 'POST': # If the form has been submitted...
if 'edit' in request.POST:
form = BlogForm(request.POST, instance=b) # A form bound to the POST data
if form.is_valid(): # All validation rules pass
form.save()
else:
if 'delete' in request.POST:
b = Blog.objects.get(pk=blog_id)
b.delete()
return HttpResponseRedirect('/blog')
else:
form = BlogForm(instance=b) # An unbound form
articles = Article.objects.filter(blog=b)
c = {'blog' : b, 'articles' : articles, 'form' : form}
return render(request, 'templates/view_blog.html', c)
@login_required
def add_article(request, blog_id):
if not request.user.is_superuser:
b = Blog.objects.filter(id=blog_id).filter(writers=request.user.id)[0]
if b is None:
raise Http404
if request.method == 'POST': # If the form has been submitted...
if 'add' in request.POST:
article = Article(blog=Blog.objects.get(pk=blog_id), author=User.objects.get(pk=request.user.id), creation_date=datetime.now())
content = request.POST['content']
# del request.POST['content']
form = ArticleForm(request.POST, instance=article) # A form bound to the POST data
if form.is_valid(): # All validation rules pass
form = form.save()
form.createArticle(content)
# Process the data in form.cleaned_data
# ...
return HttpResponseRedirect('/blog/' + blog_id) # Redirect after POST
else:
return HttpResponseRedirect('/blog/' + blog_id) # Redirect after POST
else:
form = ArticleForm() # An unbound form
return render(request, 'add_article.html', {
'form': form, 'blog_id' : blog_id
})
@login_required
def edit_article(request, article_id):
article = Article.objects.get(pk=article_id)
if article is None:
raise Http404
title = article.title
blog_id = article.blog.id
if not request.user.is_superuser:
b = Blog.objects.filter(pk=article.blog.id).filter(writers=request.user.id)[0]
if b is None:
raise Http404
else:
b = Blog.objects.get(pk=article.blog.id)
if request.method == 'POST': # If the form has been submitted...
if 'edit' in request.POST:
form = ArticleForm(request.POST, instance=article) # A form bound to the POST data
if form.is_valid(): # All validation rules pass
if title != article.title:
article.remove()
form.save()
# Process the data in form.cleaned_data
# ...
return HttpResponseRedirect('/blog/' + str(blog_id)) # Redirect after POST
else:
if 'cancel' in request.POST:
return HttpResponseRedirect('/blog/' + str(blog_id)) # Redirect after POST
else:
form = ArticleForm(instance=article) # An unbound form
b.create_paths()
filename = b.src_path + '/_articles/' + str(article.pk)
if os.path.exists(filename):
f = open(filename, 'rb')
content = f.read()
f.close()
else:
content = 'Empty article'
return render(request, 'edit_article.html', {
'form': form, 'article_id' : article_id, 'content' : content
})
@login_required
def delete_article(request, article_id):
article = Article.objects.get(pk=article_id)
if article is None:
raise Http404
b = Blog.objects.filter(writers=request.user.id).filter(pk=article.blog.pk)
if b is None:
raise Http404
blog_id = article.blog.pk
article.delete()
return HttpResponseRedirect('/blog/' + str(blog_id))
@login_required
def generate(request, blog_id):
if not request.user.is_superuser:
b = Blog.objects.filter(id=blog_id).filter(writers=request.user.id)[0]
else:
b = Blog.objects.get(pk=blog_id)
if b is None:
raise Http404
b.create_paths()
report = b.generate()
articles = Article.objects.filter(blog=b)
b = Blog.objects.get(pk=blog_id)
form = BlogForm(instance=b)
c = {'blog' : b, 'articles' : articles, 'form' : form, 'report': report}
return render(request, 'generate.html', c)