From 36b1888f468d5837d117e52920ece4d364a569b8 Mon Sep 17 00:00:00 2001
From: Martin Green <martin.speleo@gmail.com>
Date: Mon, 8 Aug 2011 12:18:47 +0100
Subject: [PATCH] Added 'page not found do you wnat to make this page' page. 
 Minor tweaks

---
 flatpages/views.py          | 46 +++++++++++++++++++++----------------
 templates/editflatpage.html |  2 +-
 templates/pagenotfound.html |  7 ++++++
 3 files changed, 34 insertions(+), 21 deletions(-)
 create mode 100644 templates/pagenotfound.html

diff --git a/flatpages/views.py b/flatpages/views.py
index 6279f4d..3357e64 100644
--- a/flatpages/views.py
+++ b/flatpages/views.py
@@ -47,12 +47,12 @@ def flatpage(request, path):
                 o = open(os.path.normpath(settings.EXPOWEB + path + "index.htm"), "rb")
                 path = path + "index.htm"
             except IOError:
-                raise Http404
+                return render_with_context(request, 'pagenotfound.html', {'path': path})
     else:        
         try:
             o = open(os.path.normpath(settings.EXPOWEB + path), "rb")
         except IOError:
-            raise Http404
+            return render_with_context(request, 'pagenotfound.html', {'path': path})
     if path.endswith(".htm") or path.endswith(".html"):
         html = o.read()
         
@@ -105,19 +105,22 @@ def editflatpage(request, path):
     try:
         filepath = os.path.normpath(settings.EXPOWEB + path)
         o = open(filepath, "r")
+        html = o.read()
+        m = re.search(r"<head>(.*)</head>.*<body[^>]*>(.*)</body>", html, re.DOTALL)
+        if m:
+            filefound = True
+            head, body = m.groups()
+            if re.search(r"iso-8859-1", html):
+                linksmatch = re.match('(.*)<ul id="links">', body, re.DOTALL)
+                if linksmatch:
+                    body, = linksmatch.groups()
+                body = unicode(body, "iso-8859-1")
+        else:
+            return HttpResponse("Page could not be split into header and body")
     except IOError:
-        raise Http404
-    html = o.read()
-    m = re.search(r"<head>(.*)</head>.*<body[^>]*>(.*)</body>", html, re.DOTALL)
-    if m:
-        head, body = m.groups()
-        if re.search(r"iso-8859-1", html):
-            linksmatch = re.match('(.*)<ul id="links">', body, re.DOTALL)
-            if linksmatch:
-                body, = linksmatch.groups()
-            body = unicode(body, "iso-8859-1")
-    else:
-        return HttpResponse("Page could not be split into header and body")
+        filefound = False
+        
+
     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
@@ -128,15 +131,18 @@ def editflatpage(request, path):
             f.close()
             return HttpResponseRedirect(reverse('flatpage', args=[path])) # Redirect after POST
     else:
-        m = re.search(r"<title>(.*)</title>", head, re.DOTALL)
-        if m: 
-            title, = m.groups()
+        if filefound:
+            m = re.search(r"<title>(.*)</title>", head, re.DOTALL)
+            if m: 
+                title, = m.groups()
+            else:
+                title = ""
+            flatpageForm = FlatPageForm({"html": body, "title": title})
         else:
-            title = ""
-        flatpageForm = FlatPageForm({"html": body, "title": title})
+            flatpageForm = FlatPageForm()
     return render_with_context(request, 'editflatpage.html', {'path': path, 'form': flatpageForm, })
 
 class FlatPageForm(forms.Form):
     title = forms.CharField(widget=forms.TextInput(attrs={'size':'60'}))
 
-    html = forms.CharField(widget=TinyMCE(attrs={'cols': 80, 'rows': 30}))
+    html = forms.CharField(widget=TinyMCE(attrs={'cols': 80, 'rows': 20}))
diff --git a/templates/editflatpage.html b/templates/editflatpage.html
index 547b94d..4768078 100644
--- a/templates/editflatpage.html
+++ b/templates/editflatpage.html
@@ -9,6 +9,6 @@
 <form action="" method="post">{% csrf_token %}
 {{form.as_p}}
 <p><input type="submit" value="Submit" /></p>
-{% include "menu.html" %}
 </form>
+{% include "menu.html" %}
 {% endblock %}
diff --git a/templates/pagenotfound.html b/templates/pagenotfound.html
new file mode 100644
index 0000000..03569de
--- /dev/null
+++ b/templates/pagenotfound.html
@@ -0,0 +1,7 @@
+{% extends "expobase.html" %}
+{% block title %}Page not found {{ path }}{% endblock %}
+{% block body %}
+<h1>Page not found {{ path }}</h1>
+<a href="{%url editflatpage path %}">Create this page.</a>
+{% include "menu.html" %}
+{% endblock %}