diff options
Diffstat (limited to 'flatpages/views.py')
-rw-r--r-- | flatpages/views.py | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/flatpages/views.py b/flatpages/views.py new file mode 100644 index 0000000..9c7483e --- /dev/null +++ b/flatpages/views.py @@ -0,0 +1,62 @@ +import troggle.settings as settings +from troggle.helper import login_required_if_public +from utils import render_with_context + +from django.http import HttpResponse, HttpResponseRedirect, Http404 +from django.core.urlresolvers import reverse +from django.template import Context, loader +import django.forms as forms +from tinymce.widgets import TinyMCE + +import os +import re + +def flatpage(request, path): + print path + if path.startswith("noinfo") and settings.PUBLIC_SITE and not request.user.is_authenticated(): + return HttpResponseRedirect(reverse("auth_login") + '?next=%s' % request.path) + try: + o = open(os.path.normpath(settings.EXPOWEB + path), "rb") + except IOError: + raise Http404 + if path.endswith(".htm") or path.endswith(".html"): + html = o.read() + m = re.search(r"<head>(.*)</head>.*<body>(.*)</body>", html, re.DOTALL) + if m: + head, body = m.groups() + else: + return HttpResponse(html + "Page could not be split into header and body") + if re.search(r"iso-8859-1", html): + body = unicode(body, "iso-8859-1") + return render_with_context(request, 'flatpage.html', {'editable': True, 'path': path, 'head': head, 'body': body}) + else: + return HttpResponse(o.read()) + +@login_required_if_public +def editflatpage(request, path): + try: + filepath = os.path.normpath(settings.EXPOWEB + path) + o = open(filepath, "r") + except IOError: + raise Http404 + html = o.read() + m = re.search(r"<head>(.*)</head>.*<body>(.*)</body>", html, re.DOTALL) + if m: + head, body = m.groups() + else: + return HttpResponse("Page could not be split into header and body") + if request.method == 'POST': # If the form has been submitted... + flatpageForm = FlatPageForm(request.POST) # A form bound to the POST data + if flatpageForm.is_valid():# Form valid therefore write file + f = open(filepath, "w") + template = loader.get_template('dataformat/flatfile.html') + context = Context({'form': flatpageForm.cleaned_data, 'head': head}) + f.write(template.render(context)) + f.close() + return HttpResponseRedirect(reverse('flatpage', args=[path])) # Redirect after POST + else: + flatpageForm = FlatPageForm({"html": body}) + return render_with_context(request, 'editflatpage.html', {'path': path, 'form': flatpageForm, }) + +class FlatPageForm(forms.Form): + html = forms.CharField(widget=TinyMCE(attrs={'cols': 80, 'rows': 30})) |