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: name = category.name form = CategoryForm(request.POST, instance=category) # A form bound to the POST data if form.is_valid(): # All validation rules pass if category.name != name: category.remove() 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.remove() 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).order_by('-creation_date') 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).order_by('-creation_date') 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 != form.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).order_by('-creation_date') 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)