summaryrefslogtreecommitdiffstats
path: root/flatpages/views.py
diff options
context:
space:
mode:
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}))