Dynastie/views.py

469 lines
14 KiB
Python
Raw Normal View History

2012-07-22 10:47:24 +02:00
import os
2012-07-08 16:23:39 +02:00
from datetime import datetime, date, time
from django.shortcuts import render
from django.contrib.auth import authenticate, login, logout
from django.http import HttpResponseRedirect, HttpResponse, Http404
2012-07-08 16:23:39 +02:00
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}
2012-07-22 10:47:24 +02:00
return render(request, 'templates/login.html', c)
2012-07-08 16:23:39 +02:00
def disconnect(request):
logout(request)
c = {'auth_key': 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA',\
'login_failed' : False}
return HttpResponseRedirect('/')
2012-07-08 16:23:39 +02:00
@login_required
def user(request):
users = User.objects.all()
c = {'users' : users}
2012-07-22 10:47:24 +02:00
return render(request, 'templates/user.html', c)
2012-07-08 16:23:39 +02:00
@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
2012-07-22 10:47:24 +02:00
edited = False
2012-07-08 16:23:39 +02:00
if request.method == 'POST': # If the form has been submitted...
2012-07-22 10:47:24 +02:00
if int(user_id) != int(request.user.id) and (not request.user.is_superuser):
return HttpResponseRedirect('/user/' + str(user_id))
2012-07-08 16:23:39 +02:00
if 'edit' in request.POST:
2012-07-22 10:47:24 +02:00
form = UserForm(request.POST, instance=user, initial={'password':''}) # A form bound to the POST data
2012-07-08 16:23:39 +02:00
if form.is_valid(): # All validation rules pass
form.save()
2012-07-22 10:47:24 +02:00
if request.POST['password'] != '':
user.set_password(request.POST['password'])
2012-07-08 16:23:39 +02:00
user.save()
2012-07-22 10:47:24 +02:00
edited = True
2012-07-08 16:23:39 +02:00
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:
2012-07-22 10:47:24 +02:00
form = UserForm(instance=user, initial={'password':''}) # An unbound form
c = {'user_to_edit' : user, 'form' : form, 'edited' : edited}
2012-07-08 16:23:39 +02:00
2012-07-22 10:47:24 +02:00
return render(request, 'templates/edit_user.html', c)
2012-07-08 16:23:39 +02:00
@login_required
def category(request):
categories = Category.objects.all()
c = {'categories' : categories}
2012-07-22 10:47:24 +02:00
return render(request, 'templates/category.html', c)
2012-07-08 16:23:39 +02:00
@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:
2012-08-04 21:21:04 +02:00
name = category.name
2012-07-08 16:23:39 +02:00
form = CategoryForm(request.POST, instance=category) # A form bound to the POST data
if form.is_valid(): # All validation rules pass
2012-09-08 12:35:52 +02:00
if request.POST['name'] != name:
2012-08-04 21:21:04 +02:00
category.remove()
2012-07-08 16:23:39 +02:00
form.save()
else:
form = CategoryForm(instance=category) # An unbound form
c = {'category' : category, 'form' : form}
2012-07-22 10:47:24 +02:00
return render(request, 'templates/edit_category.html', c)
2012-07-08 16:23:39 +02:00
@login_required
def delete_category(request, category_id):
if not request.user.is_superuser:
return HttpResponseRedirect('/category/' + str(category_id))
2012-07-15 18:21:26 +02:00
category = Category.objects.get(pk=category_id)
if category is None:
raise Http404
2012-07-22 20:49:11 +02:00
category.remove()
2012-07-15 18:21:26 +02:00
category.delete()
2012-07-08 16:23:39 +02:00
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}
2012-07-22 10:47:24 +02:00
return render(request, 'templates/blog.html', c)
2012-07-08 16:23:39 +02:00
@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()
2012-07-15 18:21:26 +02:00
form.create()
2012-07-08 20:41:16 +02:00
return HttpResponseRedirect('/blog') # Redirect after POST
2012-07-08 16:23:39 +02:00
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
2012-08-28 09:09:14 +02:00
posts = Post.objects.filter(blog=b).order_by('-creation_date')
2012-07-08 20:41:16 +02:00
b = Blog.objects.get(pk=blog_id)
2012-07-08 16:23:39 +02:00
form = BlogForm(instance=b)
2012-07-08 20:41:16 +02:00
2012-08-28 09:09:14 +02:00
c = {'blog' : b, 'posts' : posts, 'form' : form}
2012-07-08 16:23:39 +02:00
2012-07-22 10:47:24 +02:00
return render(request, 'templates/view_blog.html', c)
2012-07-08 16:23:39 +02:00
@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:
2012-07-08 20:41:16 +02:00
b = Blog.objects.get(pk=blog_id)
b.delete()
2012-07-08 16:23:39 +02:00
return HttpResponseRedirect('/blog')
else:
form = BlogForm(instance=b) # An unbound form
2012-08-28 09:09:14 +02:00
posts = Post.objects.filter(blog=b).order_by('-creation_date')
2012-07-08 16:23:39 +02:00
2012-08-28 09:09:14 +02:00
c = {'blog' : b, 'posts' : posts, 'form' : form}
2012-07-08 16:23:39 +02:00
2012-07-22 10:47:24 +02:00
return render(request, 'templates/view_blog.html', c)
2012-07-08 16:23:39 +02:00
@login_required
2012-08-28 09:09:14 +02:00
def add_post(request, blog_id):
2012-07-08 16:23:39 +02:00
if not request.user.is_superuser:
2012-07-22 10:47:24 +02:00
b = Blog.objects.filter(id=blog_id).filter(writers=request.user.id)[0]
2012-07-08 16:23:39 +02:00
if b is None:
raise Http404
if request.method == 'POST': # If the form has been submitted...
if 'add' in request.POST:
2012-09-08 12:35:52 +02:00
post = Post(blog=Blog.objects.get(pk=blog_id), author=User.objects.get(pk=request.user.id), creation_date=datetime.now(), modification_date=datetime.now())
2012-07-22 10:47:24 +02:00
content = request.POST['content']
# del request.POST['content']
2012-08-28 09:09:14 +02:00
form = PostForm(request.POST, instance=post) # A form bound to the POST data
2012-07-08 16:23:39 +02:00
if form.is_valid(): # All validation rules pass
2012-07-22 10:47:24 +02:00
form = form.save()
2012-08-28 09:09:14 +02:00
form.createPost(content)
2012-07-08 16:23:39 +02:00
# 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:
2012-08-28 09:09:14 +02:00
form = PostForm() # An unbound form
2012-07-08 16:23:39 +02:00
2012-08-28 09:09:14 +02:00
return render(request, 'add_post.html', {
2012-07-08 16:23:39 +02:00
'form': form, 'blog_id' : blog_id
})
@login_required
2012-08-28 09:09:14 +02:00
def edit_post(request, post_id):
post = Post.objects.get(pk=post_id)
2012-07-08 16:23:39 +02:00
2012-08-28 09:09:14 +02:00
if post is None:
2012-07-08 16:23:39 +02:00
raise Http404
2012-08-28 09:09:14 +02:00
title = post.title
2012-07-22 10:47:24 +02:00
2012-08-28 09:09:14 +02:00
blog_id = post.blog.id
2012-07-08 16:23:39 +02:00
if not request.user.is_superuser:
2012-08-28 09:09:14 +02:00
b = Blog.objects.filter(pk=post.blog.id).filter(writers=request.user.id)[0]
2012-07-08 16:23:39 +02:00
if b is None:
raise Http404
2012-07-22 10:47:24 +02:00
else:
2012-08-28 09:09:14 +02:00
b = Blog.objects.get(pk=post.blog.id)
2012-07-08 16:23:39 +02:00
if request.method == 'POST': # If the form has been submitted...
if 'edit' in request.POST:
2012-09-08 12:35:52 +02:00
post.modification_date = datetime.now()
2012-08-28 09:09:14 +02:00
form = PostForm(request.POST, instance=post) # A form bound to the POST data
2012-07-08 16:23:39 +02:00
if form.is_valid(): # All validation rules pass
2012-09-08 12:35:52 +02:00
if title != request.POST['title']:
2012-08-28 09:09:14 +02:00
post.remove()
post.createPost(request.POST['content'])
2012-07-08 16:23:39 +02:00
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:
2012-08-28 09:09:14 +02:00
form = PostForm(instance=post) # An unbound form
2012-07-08 16:23:39 +02:00
2012-07-22 10:47:24 +02:00
b.create_paths()
2012-08-28 09:09:14 +02:00
filename = b.src_path + '/_post/' + str(post.pk)
2012-07-22 10:47:24 +02:00
if os.path.exists(filename):
f = open(filename, 'rb')
content = f.read()
f.close()
else:
2012-08-28 09:09:14 +02:00
content = 'Empty post'
2012-07-22 10:47:24 +02:00
2012-08-28 09:09:14 +02:00
return render(request, 'edit_post.html', {
2012-09-11 22:25:58 +02:00
'form': form, 'post_id' : post_id, 'content' : content,
'blog_id' : blog_id
2012-07-08 16:23:39 +02:00
})
2012-07-15 18:21:26 +02:00
@login_required
2012-08-28 09:09:14 +02:00
def delete_post(request, post_id):
post = Post.objects.get(pk=post_id)
2012-07-15 18:21:26 +02:00
2012-08-28 09:09:14 +02:00
if post is None:
2012-07-15 18:21:26 +02:00
raise Http404
2012-08-28 09:09:14 +02:00
b = Blog.objects.filter(writers=request.user.id).filter(pk=post.blog.pk)
2012-07-22 10:47:24 +02:00
2012-07-15 18:21:26 +02:00
if b is None:
raise Http404
2012-08-28 09:09:14 +02:00
blog_id = post.blog.pk
2012-07-22 10:47:24 +02:00
2012-08-28 09:09:14 +02:00
post.delete()
2012-07-15 18:21:26 +02:00
2012-07-22 10:47:24 +02:00
return HttpResponseRedirect('/blog/' + str(blog_id))
2012-07-15 18:21:26 +02:00
@login_required
def generate(request, blog_id):
if not request.user.is_superuser:
2012-07-20 21:54:43 +02:00
b = Blog.objects.filter(id=blog_id).filter(writers=request.user.id)[0]
2012-07-15 18:21:26 +02:00
else:
b = Blog.objects.get(pk=blog_id)
if b is None:
raise Http404
b.create_paths()
2012-07-18 11:30:54 +02:00
report = b.generate()
2012-07-20 21:54:43 +02:00
2012-08-28 09:09:14 +02:00
posts = Post.objects.filter(blog=b).order_by('-creation_date')
2012-07-20 21:54:43 +02:00
b = Blog.objects.get(pk=blog_id)
form = BlogForm(instance=b)
2012-08-28 09:09:14 +02:00
c = {'blog' : b, 'posts' : posts, 'form' : form, 'report': report}
2012-07-18 11:30:54 +02:00
2012-09-11 22:25:58 +02:00
return render(request, 'templates/generate.html', c)
@login_required
def preview(request, blog_id):
from dynastie.generators import post
values = {'title' : request.POST['title'], \
'author' : request.user.first_name + ' ' + request.user.last_name, \
'content' : request.POST['content']
}
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()
engine = globals()['post']
for name, obj in inspect.getmembers(engine):
if inspect.isclass(obj) and obj.__module__.startswith("dynastie") \
and obj.__module__.endswith("post"):
e = obj()
content = e.preview(b.src_path, values)
break
output = b.output_path
path = output + '/preview.html'
if os.path.exists(path):
os.unlink(path)
f = open(path, 'wb')
f.write(content)
f.close()
c = {'content' : content}
return HttpResponseRedirect('http://' + b.name + '/preview.html')
# return HttpResponseRedirect('http://' + 'localhost:8080' + '/preview.html')
def _tinymcelist(request, b, year, month):
ret = 'var tinyMCEImageList = new Array('
b.create_paths()
if month < 10:
suffix = '/images/' + str(year) + '/0' + str(month)
else:
suffix = '/images/' + str(year) + '/' + str(month)
path = b.src_path + '/' + suffix
# url = 'http://' + 'localhost:8080' + '/' + suffix + '/'
url = 'http://' + b.name + '/' + suffix + '/'
if os.path.exists(path):
files = ''
for p in os.listdir(path):
files += '["' + p + '", "' + url + p + '"],'
# Remove last comma
if len(files) != 0:
ret += files[:-1]
ret += ');'
return ret
@login_required
def tinymcelist_add(request, blog_id):
from datetime import datetime
now = datetime.now()
year = now.year
month = now.month
b = Blog.objects.filter(pk=blog_id).filter(writers=request.user.id)[0]
if b is None:
return HttpResponse('', content_type='application/x-javascript')
ret = _tinymcelist(request, b, year, month)
print 'Ret1 ' + ret
return HttpResponse(ret, content_type='application/x-javascript')
@login_required
def tinymcelist_edit(request, post_id):
post = Post.objects.filter(pk=post_id)
if post is None:
return HttpResponse('', content_type='application/x-javascript')
b = Blog.objects.filter(pk=post.blog).filter(writers=request.user.id)[0]
if b is None:
return HttpResponse('', content_type='application/x-javascript')
year = post.creation_date.year()
month = post.creation_date.month()
ret = _tinymcelist(request, b, year, month)
print 'Ret2 ' + ret
return HttpResponse(ret, content_type='application/x-javascript')