--
cgit v1.2.3
From 85318ac6661f464ac504712b1e4aee88c616fd8a Mon Sep 17 00:00:00 2001
From: Martin Green
Date: Sun, 10 Jul 2011 23:48:13 +0100
Subject: Add ability to views caves via their cave slug. Not recommended
until links are fixed.
---
urls.py | 1 +
1 file changed, 1 insertion(+)
diff --git a/urls.py b/urls.py
index 3dc4bc2..24df04b 100644
--- a/urls.py
+++ b/urls.py
@@ -44,6 +44,7 @@ actualurlpatterns = patterns('',
url(r'^getLogBookEntries/(?P.*)', views_logbooks.get_logbook_entries, name = "get_logbook_entries"),
url(r'^cave/(?P[^/]+)/?$', views_caves.cave, name="cave"),
+ url(r'^caveslug/([^/]+)/?$', views_caves.caveSlug, name="caveSlug"),
url(r'^cavedescription/(?P[^/]+)/?$', views_caves.cave_description, name="cavedescription"),
url(r'^cavedescription/?$', object_list, {'queryset':CaveDescription.objects.all(),'template_name':'object_list.html'}, name="cavedescriptions"),
#url(r'^cavehref/(.+)$', views_caves.cave, name="cave"),url(r'cave'),
--
cgit v1.2.3
From c4194be5f1ee3734a4ce5e2a063a3111e0b366c0 Mon Sep 17 00:00:00 2001
From: Martin Green
Date: Sun, 10 Jul 2011 23:52:18 +0100
Subject: Added url to cave and turned entrances station names and removed the
previous SurveyStation model.
Note caves should be rendered in the directory of their original url to make links work.
Note SurveyStations appeared to duplicate SurvexStations.
Note Given we want to be running from a mercurial repository, it is easiest to store the names of survey stations rather than foreign keys.
---
core/models.py | 15 ++++++---------
1 file changed, 6 insertions(+), 9 deletions(-)
diff --git a/core/models.py b/core/models.py
index f8e7400..1c08a25 100644
--- a/core/models.py
+++ b/core/models.py
@@ -368,6 +368,7 @@ class Cave(TroggleModel):
extent = models.CharField(max_length=100,blank=True,null=True)
survex_file = models.CharField(max_length=100,blank=True,null=True)
description_file = models.CharField(max_length=200,blank=True,null=True)
+ url = models.CharField(max_length=200,blank=True,null=True)
#class Meta:
# unique_together = (("area", "kataster_number"), ("area", "unofficial_number"))
@@ -466,11 +467,7 @@ class OtherCaveName(TroggleModel):
cave = models.ForeignKey(Cave)
def __unicode__(self):
return unicode(self.name)
-
-class SurveyStation(TroggleModel):
- name = models.CharField(max_length=200)
- def __unicode__(self):
- return unicode(self.name)
+
class Entrance(TroggleModel):
slug = models.SlugField(max_length=50, unique = True)
@@ -504,9 +501,9 @@ class Entrance(TroggleModel):
alt = models.TextField(blank=True, null=True)
northing = models.TextField(blank=True, null=True)
easting = models.TextField(blank=True, null=True)
- tag_station = models.ForeignKey(SurveyStation, blank=True,null=True, related_name="tag_station")
- exact_station = models.ForeignKey(SurveyStation, blank=True,null=True, related_name="exact_station")
- other_station = models.ForeignKey(SurveyStation, blank=True,null=True, related_name="other_station")
+ tag_station = models.TextField()
+ exact_station = models.TextField()
+ other_station = models.TextField()
other_description = models.TextField(blank=True,null=True)
bearings = models.TextField(blank=True,null=True)
def __unicode__(self):
@@ -623,7 +620,7 @@ class DPhoto(TroggleImageModel):
is_mugshot = models.BooleanField(default=False)
contains_cave = models.ForeignKey(Cave,blank=True,null=True)
contains_entrance = models.ForeignKey(Entrance, related_name="photo_file",blank=True,null=True)
- nearest_survey_point = models.ForeignKey(SurveyStation,blank=True,null=True)
+ #nearest_survey_point = models.ForeignKey(SurveyStation,blank=True,null=True)
nearest_QM = models.ForeignKey(QM,blank=True,null=True)
lon_utm = models.FloatField(blank=True,null=True)
lat_utm = models.FloatField(blank=True,null=True)
--
cgit v1.2.3
From b70995d3148f84185c92b2f467082ff5d8d3098f Mon Sep 17 00:00:00 2001
From: Martin Green
Date: Sun, 10 Jul 2011 23:53:32 +0100
Subject: Added THREEDTOPOS setting for survexs 3dtopos program
---
localsettingsserver.py | 1 +
localsettingsubuntu.py | 1 +
localsettingswindows.py | 1 +
3 files changed, 3 insertions(+)
diff --git a/localsettingsserver.py b/localsettingsserver.py
index 1cde267..7e7a67f 100644
--- a/localsettingsserver.py
+++ b/localsettingsserver.py
@@ -10,6 +10,7 @@ DATABASE_PORT = '' # Set to empty string for default. Not used with
SURVEX_DATA = '/home/expo/loser/'
CAVERN = 'cavern'
+THREEDTOPOS = '3dtopos'
EXPOWEB = '/home/expo/expoweb/'
SURVEYS = '/home/expo/'
SURVEY_SCANS = '/home/expo/expoimages/'
diff --git a/localsettingsubuntu.py b/localsettingsubuntu.py
index 0d1fe62..63e3ce6 100644
--- a/localsettingsubuntu.py
+++ b/localsettingsubuntu.py
@@ -16,6 +16,7 @@ EXPOWEB_URL = 'http://expo.survex.com/'
PUBLIC_SITE = False
CAVERN = 'cavern'
+THREEDTOPOS = '3dtopos'
EXPOWEB = '/home/goatchurch/expoweb/'
SURVEYS_URL = ''
diff --git a/localsettingswindows.py b/localsettingswindows.py
index 168a39a..c5cb682 100644
--- a/localsettingswindows.py
+++ b/localsettingswindows.py
@@ -7,6 +7,7 @@ DATABASE_PORT = '' # Set to empty string for default. Not used with
SURVEX_DATA = 'c:\\Expo\\loser\\'
CAVERN = 'cavern'
+THREEDTOPOS = '3dtopos'
EXPOWEB = 'C:\\Expo\\expoweb\\'
SURVEYS = 'E:\\surveys\\'
SURVEY_SCANS = 'E:\\surveys\\surveyscans'
--
cgit v1.2.3
From 10351fc65b10584afe235deca43a6ff66397093a Mon Sep 17 00:00:00 2001
From: Martin Green
Date: Sun, 10 Jul 2011 23:55:54 +0100
Subject: Removed SurveyStation model (not SurvexStation)
---
core/admin.py | 1 -
1 file changed, 1 deletion(-)
diff --git a/core/admin.py b/core/admin.py
index 8dfa7ca..be4045a 100644
--- a/core/admin.py
+++ b/core/admin.py
@@ -108,7 +108,6 @@ admin.site.register(Cave, CaveAdmin)
admin.site.register(Area)
#admin.site.register(OtherCaveName)
admin.site.register(CaveAndEntrance)
-admin.site.register(SurveyStation)
admin.site.register(NewSubCave)
admin.site.register(CaveDescription)
admin.site.register(Entrance, EntranceAdmin)
--
cgit v1.2.3
From 425d38727d4142af42a9dc3ddf66ff2add095392 Mon Sep 17 00:00:00 2001
From: Martin Green
Date: Sun, 10 Jul 2011 23:57:31 +0100
Subject: Removed modelforms for Caves started to add normal forms
---
core/forms.py | 69 +++++++++++++++++++++++++++++++----------------------------
1 file changed, 36 insertions(+), 33 deletions(-)
diff --git a/core/forms.py b/core/forms.py
index 2a54428..ec639b0 100644
--- a/core/forms.py
+++ b/core/forms.py
@@ -7,46 +7,49 @@ import string
from datetime import date
from tinymce.widgets import TinyMCE
-class CaveForm(ModelForm):
- class Meta:
- model = Cave
-
-class PersonForm(ModelForm):
- class Meta:
- model = Person
-
-class LogbookEntryForm(ModelForm):
- class Meta:
- model = LogbookEntry
-
- def wikiLinkHints(LogbookEntry=None):
- """
- This function returns html-formatted paragraphs for each of the
- wikilink types that are related to this logbookentry. Each paragraph
- contains a list of all of the related wikilinks.
-
- Perhaps an admin javascript solution would be better.
- """
- res = ["Please use the following wikilinks, which are related to this logbook entry:"]
-
- res.append(r'
QMs found:')
- for QM in LogbookEntry.instance.QMs_found.all():
- res.append(QM.wiki_link())
-
- res.append(r'
QMs ticked off:')
- for QM in LogbookEntry.instance.QMs_ticked_off.all():
- res.append(QM.wiki_link())
+#class CaveForm(ModelForm):
+# class Meta:
+# model = Cave
+
+#class PersonForm(ModelForm):
+# class Meta:
+# model = Person
+
+#class LogbookEntryForm(ModelForm):
+# class Meta:
+# model = LogbookEntry#
+
+# def wikiLinkHints(LogbookEntry=None):
+# """
+# This function returns html-formatted paragraphs for each of the
+# wikilink types that are related to this logbookentry. Each paragraph
+# contains a list of all of the related wikilinks.
+#
+# Perhaps an admin javascript solution would be better.
+# """
+# res = ["Please use the following wikilinks, which are related to this logbook entry:"]
+#
+# res.append(r'
QMs found:')
+# for QM in LogbookEntry.instance.QMs_found.all():
+# res.append(QM.wiki_link())
+
+# res.append(r'
QMs ticked off:')
+# for QM in LogbookEntry.instance.QMs_ticked_off.all():
+# res.append(QM.wiki_link())
# res.append(r'
People')
# for persontrip in LogbookEntry.instance.persontrip_set.all():
# res.append(persontrip.wiki_link())
# res.append(r'
')
- return string.join(res, r' ')
+# return string.join(res, r' ')
+
+# def __init__(self, *args, **kwargs):
+# super(LogbookEntryForm, self).__init__(*args, **kwargs)
+# self.fields['text'].help_text=self.wikiLinkHints()#
- def __init__(self, *args, **kwargs):
- super(LogbookEntryForm, self).__init__(*args, **kwargs)
- self.fields['text'].help_text=self.wikiLinkHints()
+class CaveForm(forms.Form):
+ html = forms.CharField(widget=TinyMCE(attrs={'cols': 80, 'rows': 30}))
def getTripForm(expedition):
--
cgit v1.2.3
From 06efab7d73a5107352a7473c93c963ac11808409 Mon Sep 17 00:00:00 2001
From: Martin Green
Date: Mon, 11 Jul 2011 00:01:12 +0100
Subject: Added parsing of all.svx, along side parsing individual caves. Added
the making and parsing of all.pos to determine the location of stations. Mare
work is required so the caves are parsed and stored only once. Survex parsing
appears to include bugs, that print out errors.
---
core/models_survex.py | 19 ++++++++++++++
parsers/survex.py | 72 ++++++++++++++++++++++++++++++++++++++++++++++-----
2 files changed, 84 insertions(+), 7 deletions(-)
diff --git a/core/models_survex.py b/core/models_survex.py
index ed21658..efd3022 100644
--- a/core/models_survex.py
+++ b/core/models_survex.py
@@ -52,10 +52,20 @@ class SurvexFile(models.Model):
class SurvexEquate(models.Model):
cave = models.ForeignKey('Cave', blank=True, null=True)
+class SurvexStationLookUpManager(models.Manager):
+ def lookup(self, name):
+ blocknames, sep, stationname = name.rpartition(".")
+ return self.get(block = SurvexBlock.objects.lookup(blocknames),
+ name = stationname)
+
class SurvexStation(models.Model):
name = models.CharField(max_length=20)
block = models.ForeignKey('SurvexBlock')
equate = models.ForeignKey('SurvexEquate', blank=True, null=True)
+ objects = SurvexStationLookUpManager()
+ x = models.FloatField(blank=True, null=True)
+ y = models.FloatField(blank=True, null=True)
+ z = models.FloatField(blank=True, null=True)
class SurvexLeg(models.Model):
block = models.ForeignKey('SurvexBlock')
@@ -70,7 +80,16 @@ class SurvexLeg(models.Model):
#
# Single SurvexBlock
#
+class SurvexBlockLookUpManager(models.Manager):
+ def lookup(self, name):
+ blocknames = name.split(".")
+ block = SurvexBlock.objects.get(parent=None, survexfile__path="all")
+ for blockname in blocknames:
+ block = SurvexBlock.objects.get(parent=block, name=blockname)
+ return block
+
class SurvexBlock(models.Model):
+ objects = SurvexBlockLookUpManager()
name = models.CharField(max_length=100)
parent = models.ForeignKey('SurvexBlock', blank=True, null=True)
text = models.TextField()
diff --git a/parsers/survex.py b/parsers/survex.py
index f8ec6d4..2e0b8d3 100644
--- a/parsers/survex.py
+++ b/parsers/survex.py
@@ -1,5 +1,8 @@
import troggle.settings as settings
import troggle.core.models as models
+import troggle.settings as settings
+
+from subprocess import call, Popen, PIPE
from troggle.parsers.people import GetPersonExpeditionNameLookup
import re
@@ -14,7 +17,13 @@ def LoadSurvexLineLeg(survexblock, stardata, sline, comment):
survexleg = models.SurvexLeg(block=survexblock, stationfrom=ssfrom, stationto=ssto)
if stardata["type"] == "normal":
- survexleg.tape = float(ls[stardata["tape"]])
+ try:
+ survexleg.tape = float(ls[stardata["tape"]])
+ except ValueError:
+ print "Tape misread in", survexblock.survexfile.path
+ print "Stardata:", stardata
+ print "Line:", ls
+ survexleg.tape = 1000
lclino = ls[stardata["clino"]]
lcompass = ls[stardata["compass"]]
if lclino == "up":
@@ -24,7 +33,13 @@ def LoadSurvexLineLeg(survexblock, stardata, sline, comment):
survexleg.compass = 0.0
survexleg.clino = -90.0
elif lclino == "-" or lclino == "level":
- survexleg.compass = float(lcompass)
+ try:
+ survexleg.compass = float(lcompass)
+ except ValueError:
+ print "Compass misread in", survexblock.survexfile.path
+ print "Stardata:", stardata
+ print "Line:", ls
+ survexleg.compass = 1000
survexleg.clino = -90.0
else:
assert re.match("[\d\-+.]+$", lcompass), ls
@@ -37,7 +52,10 @@ def LoadSurvexLineLeg(survexblock, stardata, sline, comment):
itape = stardata.get("tape")
if itape:
- survexblock.totalleglength += float(ls[itape])
+ try:
+ survexblock.totalleglength += float(ls[itape])
+ except ValueError:
+ print "Length not added"
survexblock.save()
def LoadSurvexEquate(survexblock, sline):
@@ -86,6 +104,7 @@ def RecursiveLoad(survexblock, survexfile, fin, textlines):
LoadSurvexLineLeg(survexblock, stardata, sline, comment)
elif stardata["type"] == "passage":
LoadSurvexLinePassage(survexblock, stardata, sline, comment)
+ #Missing "station" in stardata.
continue
# detect the star command
@@ -151,8 +170,7 @@ def RecursiveLoad(survexblock, survexfile, fin, textlines):
for i in range(0, len(ls)):
stardata[stardataparamconvert.get(ls[i], ls[i])] = i - 1
if ls[0] in ["normal", "cartesian", "nosurvey"]:
- assert "from" in stardata, line
- assert "to" in stardata, line
+ assert (("from" in stardata and "to" in stardata) or "station" in stardata), line
elif ls[0] == "default":
stardata = stardatadefault
else:
@@ -162,7 +180,7 @@ def RecursiveLoad(survexblock, survexfile, fin, textlines):
LoadSurvexEquate(survexblock, sline)
else:
- assert cmd.lower() in [ "sd", "equate", "include", "units", "entrance", "fix", "data", "flags", "title", "export", "instrument", "calibrate", ], (cmd, line, survexblock)
+ assert cmd.lower() in [ "sd", "equate", "include", "units", "entrance", "fix", "data", "flags", "title", "export", "instrument", "calibrate", "set", "infer"], (cmd, line, survexblock)
@@ -186,6 +204,30 @@ def ReloadSurvexCave(survex_cave):
def LoadAllSurvexBlocks():
+ models.SurvexBlock.objects.all().delete()
+ models.SurvexFile.objects.all().delete()
+ models.SurvexDirectory.objects.all().delete()
+ models.SurvexEquate.objects.all().delete()
+ models.SurvexLeg.objects.all().delete()
+ models.SurvexTitle.objects.all().delete()
+ models.SurvexPersonRole.objects.all().delete()
+
+ survexfile = models.SurvexFile(path="all", cave=None)
+ survexfile.save()
+ survexfile.SetDirectory()
+
+ #Load all
+ survexblockroot = models.SurvexBlock(name="root", survexpath="", begin_char=0, cave=None, survexfile=survexfile, totalleglength=0.0)
+ survexblockroot.save()
+ fin = survexfile.OpenFile()
+ textlines = [ ]
+ RecursiveLoad(survexblockroot, survexfile, fin, textlines)
+ survexblockroot.text = "".join(textlines)
+ survexblockroot.save()
+
+
+ #Load each cave,
+ #FIXME this should be dealt with load all above
caves = models.Cave.objects.all()
for cave in caves:
if cave.kataster_number and os.path.isdir(os.path.join(settings.SURVEX_DATA, "caves", cave.kataster_number)):
@@ -193,4 +235,20 @@ def LoadAllSurvexBlocks():
print "loading", cave
ReloadSurvexCave(cave.kataster_number)
-
+poslineregex = re.compile("^\(\s*([+-]?\d*\.\d*),\s*([+-]?\d*\.\d*),\s*([+-]?\d*\.\d*)\s*\)\s*([^\s]+)$")
+def LoadPos():
+ call([settings.CAVERN, "--output=%s/all.3d" % settings.SURVEX_DATA, "%s/all.svx" % settings.SURVEX_DATA])
+ call([settings.THREEDTOPOS, '%sall.3d' % settings.SURVEX_DATA], cwd = settings.SURVEX_DATA)
+ posfile = open("%sall.pos" % settings.SURVEX_DATA)
+ posfile.readline()#Drop header
+ for line in posfile.readlines():
+ r = poslineregex.match(line)
+ if r:
+ x, y, z, name = r.groups()
+ try:
+ ss = models.SurvexStation.objects.lookup(name)
+ except:
+ pass
+ ss.x = float(x)
+ ss.y = float(y)
+ ss.z = float(z)
--
cgit v1.2.3
From 203719375eefd31a2010baa0f1bdee9aea669d6a Mon Sep 17 00:00:00 2001
From: Martin Green
Date: Mon, 11 Jul 2011 00:03:36 +0100
Subject: slug views, start of cave eidt form, cavelist splitting up by
kataster area etc.
---
core/views_caves.py | 31 +++++++++++++++++++++++++++++--
1 file changed, 29 insertions(+), 2 deletions(-)
diff --git a/core/views_caves.py b/core/views_caves.py
index e24e6c2..24a85c7 100644
--- a/core/views_caves.py
+++ b/core/views_caves.py
@@ -1,6 +1,9 @@
from troggle.core.models import Cave, CaveAndEntrance, Survey, Expedition, QM, CaveDescription
+from troggle.core.forms import CaveForm
import troggle.core.models as models
import troggle.settings as settings
+from troggle.helper import login_required_if_public
+
from django.forms.models import formset_factory
from django.core.urlresolvers import reverse
from utils import render_with_context # see views_logbooks for explanation on this.
@@ -21,15 +24,31 @@ def caveindex(request):
caves = Cave.objects.all()
notablecavehrefs = [ "161", "204", "258", "76" ] # could detect notability by trips and notability of people who have been down them
notablecaves = [Cave.objects.get(kataster_number=kataster_number) for kataster_number in notablecavehrefs ]
- return render_with_context(request,'caveindex.html', {'caves': caves, 'notablecaves':notablecaves})
+ caves1623 = Cave.objects.filter(area__short_name = "1623")
+ caves1626 = Cave.objects.filter(area__short_name = "1626")
+ return render_with_context(request,'caveindex.html', {'caves1623': caves1623, 'caves1626': caves1626, 'notablecaves':notablecaves, 'cavepage': True})
def cave(request, cave_id='', offical_name=''):
cave=getCave(cave_id)
+ if cave.non_public and not request.user.is_authenticated():
+ return render_with_context(request,'nonpublic.html', {'instance': cave, 'cavepage': True})
+ else:
+ return render_with_context(request,'cave.html', {'cave': cave, 'cavepage': True})
+
+def caveSlug(request, slug):
+ cave = Cave.objects.get(slug = slug)
if cave.non_public and not request.user.is_authenticated():
return render_with_context(request,'nonpublic.html', {'instance': cave})
else:
return render_with_context(request,'cave.html', {'cave': cave})
-
+
+@login_required_if_public
+def editCave(request, slug=None):
+ form = CaveForm()
+ return render_with_context(request,
+ 'editcave.html',
+ {'form': form})
+
def qm(request,cave_id,qm_id,year,grade=None):
year=int(year)
try:
@@ -43,6 +62,7 @@ def qm(request,cave_id,qm_id,year,grade=None):
return HttpResponseRedirect(url)
+
def ent(request, cave_id, ent_letter):
cave = Cave.objects.filter(kataster_number = cave_id)[0]
cave_and_ent = CaveAndEntrance.objects.filter(cave = cave).filter(entrance_letter = ent_letter)[0]
@@ -50,6 +70,13 @@ def ent(request, cave_id, ent_letter):
'entrance': cave_and_ent.entrance,
'letter': cave_and_ent.entrance_letter,})
+def entranceSlug(request, slug):
+ entrance = Entrance.objects.get(slug = slug)
+ if entrance.non_public and not request.user.is_authenticated():
+ return render_with_context(request,'nonpublic.html', {'instance': entrance})
+ else:
+ return render_with_context(request,'entranceslug.html', {'entrance': entrance})
+
def survexblock(request, survexpath):
survexpath = re.sub("/", ".", survexpath)
print "jjjjjj", survexpath
--
cgit v1.2.3
From 4a88493afa2e4c663848cdc296d2bc76195daaf9 Mon Sep 17 00:00:00 2001
From: Martin Green
Date: Mon, 11 Jul 2011 00:04:30 +0100
Subject: Removed links to removed forms
---
core/views_logbooks.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/core/views_logbooks.py b/core/views_logbooks.py
index 4495f03..007086f 100644
--- a/core/views_logbooks.py
+++ b/core/views_logbooks.py
@@ -5,7 +5,7 @@ import troggle.settings as settings
import django.db.models
from troggle.parsers.logbooks import LoadLogbookForExpedition
from troggle.parsers.people import GetPersonExpeditionNameLookup
-from troggle.core.forms import PersonForm, getTripForm, get_name
+#from troggle.core.forms import PersonForm, getTripForm, get_name
from django.core.urlresolvers import reverse
from django.http import HttpResponseRedirect, HttpResponse
from django.template import Context, loader
--
cgit v1.2.3
From db2d954b1d8d3a7454d51a7f6eebd88aa102e64c Mon Sep 17 00:00:00 2001
From: Martin Green
Date: Mon, 11 Jul 2011 00:13:06 +0100
Subject: Added flat pages for entrance and special flatpage redirects.
Enetrances should probably store their urls like cavers. Maybe the flatpages should be handled by the app Aaron installed.
---
flatpages/admin.py | 5 +++++
flatpages/models.py | 11 ++++++++++-
flatpages/views.py | 39 +++++++++++++++++++++++++++++++++++++--
3 files changed, 52 insertions(+), 3 deletions(-)
create mode 100644 flatpages/admin.py
diff --git a/flatpages/admin.py b/flatpages/admin.py
new file mode 100644
index 0000000..2bb1f84
--- /dev/null
+++ b/flatpages/admin.py
@@ -0,0 +1,5 @@
+from troggle.flatpages.models import Redirect, EntranceRedirect
+from django.contrib import admin
+
+admin.site.register(Redirect)
+admin.site.register(EntranceRedirect)
diff --git a/flatpages/models.py b/flatpages/models.py
index 71a8362..1c97851 100644
--- a/flatpages/models.py
+++ b/flatpages/models.py
@@ -1,3 +1,12 @@
from django.db import models
+from core.models import Cave, Entrance
-# Create your models here.
+class Redirect(models.Model):
+ originalURL = models.CharField(max_length=200, unique=True)
+ newURL = models.CharField(max_length=200)
+
+class EntranceRedirect(models.Model):
+ originalURL = models.CharField(max_length=200)
+ entrance = models.ForeignKey(Entrance)
+ def __unicode__(self):
+ return self.entrance.slug
diff --git a/flatpages/views.py b/flatpages/views.py
index 9c7483e..5f7b579 100644
--- a/flatpages/views.py
+++ b/flatpages/views.py
@@ -7,12 +7,33 @@ from django.core.urlresolvers import reverse
from django.template import Context, loader
import django.forms as forms
from tinymce.widgets import TinyMCE
+from troggle.flatpages.models import Redirect, EntranceRedirect
+from troggle.core.models import Cave
+import troggle.core.views_caves
import os
import re
def flatpage(request, path):
- print path
+ try:
+ r = Redirect.objects.get(originalURL = path)
+ return HttpResponseRedirect(r.newURL) # Redirect after POST
+ except Redirect.DoesNotExist:
+ pass
+
+ try:
+ r = Cave.objects.get(url = path)
+ return troggle.core.views_caves.caveSlug(request, r.slug)
+ except Cave.DoesNotExist:
+ pass
+
+ try:
+ r = EntranceRedirect.objects.get(originalURL = path)
+ return troggle.core.views_caves.enranceSlug(request, r.entrance.slug)
+ except EntranceRedirect.DoesNotExist:
+ pass
+
+
if path.startswith("noinfo") and settings.PUBLIC_SITE and not request.user.is_authenticated():
return HttpResponseRedirect(reverse("auth_login") + '?next=%s' % request.path)
try:
@@ -21,19 +42,31 @@ def flatpage(request, path):
raise Http404
if path.endswith(".htm") or path.endswith(".html"):
html = o.read()
+
m = re.search(r"(.*).*(.*)", html, re.DOTALL)
+ mwithid = re.search(r'(.*).*(.*)', html, re.DOTALL)
if m:
head, body = m.groups()
+ bodyid = None
+ elif mwithid:
+ head, bodyid, body = mwithid.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})
+ return render_with_context(request, 'flatpage.html', {'editable': True, 'path': path, 'head': head, 'body': body, "bodyid": bodyid})
else:
return HttpResponse(o.read())
@login_required_if_public
def editflatpage(request, path):
+ try:
+ r = CaveRedirect.objects.get(originalURL = path)
+ return troggle.core.views_caves.editCave(request, r.cave.slug)
+ except CaveRedirect.DoesNotExist:
+ pass
+
+
try:
filepath = os.path.normpath(settings.EXPOWEB + path)
o = open(filepath, "r")
@@ -43,6 +76,8 @@ def editflatpage(request, path):
m = re.search(r"(.*).*(.*)", html, re.DOTALL)
if m:
head, body = m.groups()
+ if re.search(r"iso-8859-1", html):
+ body = unicode(body, "iso-8859-1")
else:
return HttpResponse("Page could not be split into header and body")
if request.method == 'POST': # If the form has been submitted...
--
cgit v1.2.3
From 861daee66feb985ccfb9271c211dc1a27263fbf4 Mon Sep 17 00:00:00 2001
From: Martin Green
Date: Mon, 11 Jul 2011 00:15:59 +0100
Subject: Removed conversion to wiki, replaced Surveystation models with text,
added area 1623 to all relevant caves.
---
databaseReset.py | 17 +++++++-
parsers/cavetab.py | 35 ++++++++-------
settings.py | 1 +
templates/base.html | 2 +-
templates/cave.html | 105 ++++++++++++++++++++++++++++++---------------
templates/cavebase.html | 52 +++++++++++-----------
templates/caveindex.html | 26 ++++++++---
templates/editcave.html | 19 ++++++++
templates/expowebbase.html | 40 +++++++++++++++++
templates/flatpage.html | 2 +-
10 files changed, 213 insertions(+), 86 deletions(-)
create mode 100644 templates/editcave.html
create mode 100644 templates/expowebbase.html
diff --git a/databaseReset.py b/databaseReset.py
index cdd7dcf..52a646c 100644
--- a/databaseReset.py
+++ b/databaseReset.py
@@ -7,6 +7,8 @@ from django.core import management
from django.db import connection
from django.contrib.auth.models import User
from django.http import HttpResponse
+from django.core.urlresolvers import reverse
+import flatpages.models
@@ -59,6 +61,7 @@ def import_logbooks():
def import_survex():
import parsers.survex
parsers.survex.LoadAllSurvexBlocks()
+ parsers.survex.LoadPos()
def import_QMs():
import parsers.QMs
@@ -91,6 +94,7 @@ def reset():
"""
reload_db()
make_dirs()
+ pageredirects()
import_cavetab()
import_people()
import_surveyscans()
@@ -98,7 +102,8 @@ def reset():
import_logbooks()
import_QMs()
import_tunnelfiles()
- #import_surveys()
+
+ import_surveys()
import_descriptions()
parse_descriptions()
@@ -170,6 +175,11 @@ def dumplogbooks():
f.write(unicode(output).encode( "utf-8" ))
f.close()
+def pageredirects():
+ for oldURL, newURL in [("indxal.htm", reverse("caveindex"))]:
+ f = flatpages.models.Redirect(originalURL = oldURL, newURL = newURL)
+ f.save()
+
if __name__ == "__main__":
import core.models
import sys
@@ -177,6 +187,11 @@ if __name__ == "__main__":
resetdesc()
elif "scans" in sys.argv:
import_surveyscans()
+ elif "caves" in sys.argv:
+ reload_db()
+ make_dirs()
+ pageredirects()
+ import_cavetab()
elif "QMs" in sys.argv:
import_QMs()
elif "tunnel" in sys.argv:
diff --git a/parsers/cavetab.py b/parsers/cavetab.py
index bf61d7f..68ea4b3 100644
--- a/parsers/cavetab.py
+++ b/parsers/cavetab.py
@@ -3,7 +3,8 @@ import troggle.core.models as models
from django.conf import settings
import csv, time, re, os, logging
from utils import save_carefully
-from utils import html_to_wiki
+from django.core.urlresolvers import reverse
+import flatpages.models
##format of CAVETAB2.CSV is
KatasterNumber = 0
@@ -54,6 +55,7 @@ Findability = 44
FindabilityComment = 45
def LoadCaveTab():
+
cavetab = open(os.path.join(settings.EXPOWEB, "noinfo", "CAVETAB2.CSV"),'rU')
caveReader = csv.reader(cavetab)
caveReader.next() # Strip out column headers
@@ -76,14 +78,14 @@ def LoadCaveTab():
if line[MultipleEntrances] == 'yes' or line[MultipleEntrances]=='': #When true, this line contains an actual cave, otherwise it is an extra entrance.
args = {}
defaultArgs = {}
-
+
def addToArgs(CSVname, modelName):
if line[CSVname]:
- args[modelName] = html_to_wiki(line[CSVname])
+ args[modelName] = line[CSVname]
def addToDefaultArgs(CSVname, modelName): #This has to do with the non-destructive import. These arguments will be passed as the "default" dictionary in a get_or_create
if line[CSVname]:
- defaultArgs[modelName] = html_to_wiki(line[CSVname])
+ defaultArgs[modelName] = line[CSVname]
# The attributes added using "addToArgs" will be used to look up an existing cave. Those added using "addToDefaultArgs" will not.
addToArgs(KatasterNumber, "kataster_number")
@@ -103,6 +105,7 @@ def LoadCaveTab():
addToDefaultArgs(Extent, "extent")
addToDefaultArgs(SurvexFile, "survex_file")
addToDefaultArgs(Notes, "notes")
+ addToDefaultArgs(AutogenFile, "url")
if line[Area] == "1626":
if line[KatasterNumber] != "":
args["slug"] = line[Area] + "-" + line[KatasterNumber]
@@ -140,6 +143,7 @@ def LoadCaveTab():
newArea = models.Area(short_name = line[Area], parent = area1623)
newArea.save()
newCave.area.add(newArea)
+ newCave.area.add(area1623)
elif created:
newCave.area.add(area1623)
@@ -152,6 +156,7 @@ def LoadCaveTab():
newUnofficialName.save()
logging.info("Added unofficial name "+str(newUnofficialName)+" to cave "+str(newCave)+"\n")
+
if created and line[MultipleEntrances] == '' or \
line[MultipleEntrances] == 'entrance' or \
@@ -165,10 +170,10 @@ def LoadCaveTab():
def addToArgs(CSVname, modelName):
if line[CSVname]:
- args[modelName] = html_to_wiki(line[CSVname])
+ args[modelName] = line[CSVname]
def addToArgsViaDict(CSVname, modelName, dictionary):
if line[CSVname]:
- args[modelName] = dictionary[html_to_wiki(line[CSVname])]
+ args[modelName] = dictionary[line[CSVname]]
addToArgs(EntranceName, 'name')
addToArgs(Explorers, 'explorers')
addToArgs(Map, 'map_description')
@@ -188,6 +193,7 @@ def LoadCaveTab():
"Unmarked": "U",
"": "?",
})
+
addToArgs(MarkingComment, 'marking_comment')
addToArgsViaDict(Findability, 'findability', {"Surveyed": "S",
"Lost": "L",
@@ -200,20 +206,15 @@ def LoadCaveTab():
addToArgs(Northing, 'northing')
addToArgs(Altitude, 'alt')
addToArgs(DescriptionOfOtherPoint, 'other_description')
- def addToArgsSurveyStation(CSVname, modelName):
- if line[CSVname]:
- surveyPoint = models.SurveyStation(name = line[CSVname])
- surveyPoint.save()
- args[modelName] = surveyPoint
- addToArgsSurveyStation(TagPoint, 'tag_station')
- addToArgsSurveyStation(ExactEntrance, 'exact_station')
- addToArgsSurveyStation(OtherPoint, 'other_station')
+ addToArgs(TagPoint, 'tag_station')
+ addToArgs(ExactEntrance, 'exact_station')
+ addToArgs(OtherPoint, 'other_station')
addToArgs(OtherPoint, 'other_description')
if line[GPSpreSA]:
- addToArgsSurveyStation(GPSpreSA, 'other_station')
+ addToArgs(GPSpreSA, 'other_station')
args['other_description'] = 'pre selective availability GPS'
if line[GPSpostSA]:
- addToArgsSurveyStation(GPSpostSA, 'other_station')
+ addToArgs(GPSpostSA, 'other_station')
args['other_description'] = 'post selective availability GPS'
addToArgs(Bearings, 'bearings')
args['slug'] = newCave.slug + entrance_letter
@@ -227,6 +228,8 @@ def LoadCaveTab():
newCaveAndEntrance.save()
logging.info("Added CaveAndEntrance "+str(newCaveAndEntrance)+"\n")
+ f = flatpages.models.EntranceRedirect(originalURL = line[AutogenFile], entrance = newEntrance)
+ f.save()
# lookup function modelled on GetPersonExpeditionNameLookup
diff --git a/settings.py b/settings.py
index ef24512..50fbbae 100644
--- a/settings.py
+++ b/settings.py
@@ -92,6 +92,7 @@ INSTALLED_APPS = (
'troggle.registration',
'troggle.profiles',
'troggle.core',
+ 'troggle.flatpages',
'troggle.imagekit',
)
diff --git a/templates/base.html b/templates/base.html
index 6a4da29..d3341b2 100644
--- a/templates/base.html
+++ b/templates/base.html
@@ -1,7 +1,7 @@
-
+
diff --git a/templates/cave.html b/templates/cave.html
index 9469118..12e83b4 100644
--- a/templates/cave.html
+++ b/templates/cave.html
@@ -1,72 +1,105 @@
{% extends "cavebase.html" %}
-{% load wiki_markup %}
-{% block editLink %}| Edit cave {{cave|wiki_to_html_short}}{% endblock %}
-{% block related %}
-
All logbook entries regarding this cave ({{cave.logbookentry_set.count}})
-
- {% for logbookentry in cave.logbookentry_set.all %}
- {% if logbookentry.title %}
-