summaryrefslogtreecommitdiffstats
path: root/flatpages/views.py
diff options
context:
space:
mode:
authorWookey <wookey@wookware.org>2011-07-10 23:30:36 +0100
committerWookey <wookey@wookware.org>2011-07-10 23:30:36 +0100
commit1e1d63c768fb7791f278c164ded138e95fd787e5 (patch)
tree63c7e3d9693802991c6c278a7461fd577445dc8e /flatpages/views.py
parentca6e50b8abc07c22d90d5626ade1a0a1c52d09bf (diff)
parentf318105a9bed2792fa3cab017bb6a2d5c8204284 (diff)
downloadtroggle-1e1d63c768fb7791f278c164ded138e95fd787e5.tar.gz
troggle-1e1d63c768fb7791f278c164ded138e95fd787e5.tar.bz2
troggle-1e1d63c768fb7791f278c164ded138e95fd787e5.zip
merge fix from martin's tip.
Diffstat (limited to 'flatpages/views.py')
-rw-r--r--flatpages/views.py62
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}))