From cb52c47aa9632a6c0affde9b0ceeab06877c760b Mon Sep 17 00:00:00 2001 From: substantialnoninfringinguser <substantialnoninfringinguser@gmail.com> Date: Wed, 13 May 2009 05:48:47 +0100 Subject: [PATCH] [svn] yorkshire work with tunnel integration Copied from http://cucc@cucc.survex.com/svn/trunk/expoweb/troggle/, rev. 8232 by julian @ 1/29/2009 11:40 PM --- expo/models.py | 122 +++++++++++++++++++------------------ expo/view_surveys.py | 120 +++++++++++++++++++++++++++++++++--- expo/views.py | 11 ++-- expo/views_caves.py | 7 +-- expo/views_logbooks.py | 7 +-- expo/views_other.py | 2 +- parsers/logbooks.py | 8 ++- parsers/people.py | 90 +++++++++++++-------------- templates/base.html | 2 +- templates/cave.html | 2 + templates/fileupload.html | 18 ++++++ templates/index.html | 46 ++++++++------ templates/listdir.html | 22 +++++++ templates/personindex.html | 15 +++++ urls.py | 47 ++++++++------ 15 files changed, 348 insertions(+), 171 deletions(-) create mode 100644 templates/fileupload.html create mode 100644 templates/listdir.html diff --git a/expo/models.py b/expo/models.py index 98b5d2b..aa84110 100644 --- a/expo/models.py +++ b/expo/models.py @@ -23,6 +23,7 @@ class Expedition(models.Model): class Meta: ordering = ('year',) + # lose these two functions (inelegant, and we may create a file with the dates that we can load from) def GuessDateFrom(self): try: return self.logbookentry_set.order_by('date')[0].date @@ -59,13 +60,17 @@ class Person(models.Model): is_vfho = models.BooleanField(help_text="VFHO is the Vereines für Höhlenkunde in Obersteier, a nearby Austrian caving club.") mug_shot = models.CharField(max_length=100, blank=True,null=True) blurb = models.TextField(blank=True,null=True) + href = models.CharField(max_length=200) + orderref = models.CharField(max_length=200) # for alphabetic + notability = models.FloatField() # for listing the top 20 people + bisnotable = models.BooleanField() user = models.ForeignKey(User, unique=True, null=True, blank=True) class Meta: verbose_name_plural = "People" class Meta: - ordering = ('last_name', 'first_name') + ordering = ('orderref',) # "Wookey" makes too complex for: ('last_name', 'first_name') def __unicode__(self): if self.last_name: @@ -78,6 +83,15 @@ class Person(models.Model): def Lastexpedition(self): return self.personexpedition_set.order_by('-expedition')[0] + def Sethref(self): + if self.last_name: + self.href = self.first_name.lower() + "_" + self.last_name.lower() + self.orderref = self.last_name + " " + self.first_name + else: + self.href = self.first_name.lower() + self.orderref = self.first_name + self.notability = 0.0 # set temporarily + class PersonExpedition(models.Model): expedition = models.ForeignKey(Expedition) @@ -94,7 +108,6 @@ class PersonExpedition(models.Model): res[-1]['roles'] += ", " + str(personrole.role) else: res.append({'date':personrole.survex_block.date, 'survexpath':personrole.survex_block.survexpath, 'roles':str(personrole.role)}) - print res return res class Meta: @@ -117,18 +130,8 @@ class PersonExpedition(models.Model): # needs converting dict into list return sorted(res.items()) - - # deprecated - def GetPossibleNameForms(self): - res = [ ] - if self.person.last_name: - res.append("%s %s" % (self.person.first_name, self.person.last_name)) - res.append("%s %s" % (self.person.first_name, self.person.last_name[0])) - res.append(self.person.first_name) - if self.nickname: - res.append(self.nickname) - return res - + # don't use tabs. + # possibly not useful functions anyway def ListDays(self): if self.date_from and self.date_to: res=[] @@ -156,13 +159,52 @@ class PersonExpedition(models.Model): return self.person.first_name -#class LogbookSentanceRating(models.Model): -# rating = models.IntegerField() -# person_trip = models.ForeignKey(PersonTrip) -# sentance_number = models.IntegerField() +class LogbookEntry(models.Model): + date = models.DateField() + expedition = models.ForeignKey(Expedition,blank=True,null=True) # yes this is double- + author = models.ForeignKey(PersonExpedition,blank=True,null=True) # the person who writes it up doesn't have to have been on the trip + title = models.CharField(max_length=200) + cave = models.ForeignKey('Cave',blank=True,null=True) + place = models.CharField(max_length=100,blank=True,null=True) + text = models.TextField() + href = models.CharField(max_length=100) -# def __unicode__(self): -# return person_trip + # turn these into functions + logbookentry_next = models.ForeignKey('LogbookEntry', related_name='pnext', blank=True,null=True) + logbookentry_prev = models.ForeignKey('LogbookEntry', related_name='pprev', blank=True,null=True) + + class Meta: + verbose_name_plural = "Logbook Entries" + # several PersonTrips point in to this object + class Meta: + ordering = ('-date',) + + def __unicode__(self): + return "%s: (%s)" % (self.date, self.title) + + +class PersonTrip(models.Model): + person_expedition = models.ForeignKey(PersonExpedition) + + # this will be a foreign key of the place(s) the trip went through + # possibly a trip has a plurality of triplets pointing into it + place = models.CharField(max_length=100) + # should add cave thing here (copied from logbook maybe) + date = models.DateField() + time_underground = models.FloatField() + logbook_entry = models.ForeignKey(LogbookEntry) + is_logbook_entry_author = models.BooleanField() + + persontrip_next = models.ForeignKey('PersonTrip', related_name='pnext', blank=True,null=True) + persontrip_prev = models.ForeignKey('PersonTrip', related_name='pprev', blank=True,null=True) + + def __unicode__(self): + return "%s %s (%s)" % (self.person_expedition, self.place, self.date) + + +# +# move following classes into models_cave +# class Area(models.Model): short_name = models.CharField(max_length=100) @@ -266,46 +308,6 @@ class Cave(models.Model): res += "–" + prevR return res -class LogbookEntry(models.Model): - date = models.DateField() - expedition = models.ForeignKey(Expedition,blank=True,null=True) # yes this is double- - author = models.ForeignKey(PersonExpedition,blank=True,null=True) # the person who writes it up doesn't have to have been on the trip - title = models.CharField(max_length=200) - cave = models.ForeignKey(Cave,blank=True,null=True) - place = models.CharField(max_length=100,blank=True,null=True) - text = models.TextField() - href = models.CharField(max_length=100) - - # turn these into functions - logbookentry_next = models.ForeignKey('LogbookEntry', related_name='pnext', blank=True,null=True) - logbookentry_prev = models.ForeignKey('LogbookEntry', related_name='pprev', blank=True,null=True) - - class Meta: - verbose_name_plural = "Logbook Entries" - # several PersonTrips point in to this object - class Meta: - ordering = ('-date',) - - def __unicode__(self): - return "%s: (%s)" % (self.date, self.title) - -class PersonTrip(models.Model): - person_expedition = models.ForeignKey(PersonExpedition) - - # this will be a foreign key of the place(s) the trip went through - # possibly a trip has a plurality of triplets pointing into it - place = models.CharField(max_length=100) - # should add cave thing here (copied from logbook maybe) - date = models.DateField() - time_underground = models.FloatField() - logbook_entry = models.ForeignKey(LogbookEntry) - is_logbook_entry_author = models.BooleanField() - - persontrip_next = models.ForeignKey('PersonTrip', related_name='pnext', blank=True,null=True) - persontrip_prev = models.ForeignKey('PersonTrip', related_name='pprev', blank=True,null=True) - - def __unicode__(self): - return "%s %s (%s)" % (self.person_expedition, self.place, self.date) class OtherCaveName(models.Model): diff --git a/expo/view_surveys.py b/expo/view_surveys.py index 2c5b5a1..388efa9 100644 --- a/expo/view_surveys.py +++ b/expo/view_surveys.py @@ -1,5 +1,21 @@ +import troggle.settings as settings import fileAbstraction +from django.shortcuts import render_to_response from django.http import HttpResponse, Http404 +import os +import re + +# inline fileabstraction into here if it's not going to be useful anywhere else +# keep things simple and ignore exceptions everywhere for now + +def getMimeType(extension): + try: + return {"txt": "text/plain", + "html": "text/html", + }[extension] + except: + print "unknown file type" + return "text/plain" def listdir(request, path): @@ -13,16 +29,104 @@ def upload(request, path): def download(request, path): #try: + return HttpResponse(fileAbstraction.readFile(path), mimetype=getMimeType(path.split(".")[-1])) #except: # raise Http404 -def getMimeType(extension): - try: - return {"txt": "text/plain", - "html": "text/html", - }[extension] - except: - print "unknown file type" - return "text/plain" \ No newline at end of file +# +# julian's quick hack for something that works +# could signal directories by ending with /, and forward cases where it's missing +# +extmimetypes = {".txt": "text/plain", + ".html": "text/html", + ".png": "image/png", + ".jpg": "image/jpeg", + } + +def jgtfile(request, f): + fp = os.path.join(settings.SURVEYS, f) + # could also surf through SURVEX_DATA + + # directory listing + if os.path.isdir(fp): + listdirfiles = [ ] + listdirdirs = [ ] + + for lf in sorted(os.listdir(fp)): + hpath = os.path.join(f, lf) # not absolute path + if lf[0] == "." or lf[-1] == "~": + continue + + hpath = hpath.replace("\\", "/") # for windows users + href = hpath.replace("#", "%23") # '#' in file name annoyance + + flf = os.path.join(fp, lf) + if os.path.isdir(flf): + nfiles = len([sf for sf in os.listdir(flf) if sf[0] != "."]) + listdirdirs.append((href, hpath + "/", nfiles)) + else: + listdirfiles.append((href, hpath, os.path.getsize(flf))) + + upperdirs = [ ] + lf = f + while lf: + hpath = lf.replace("\\", "/") # for windows users + if hpath[-1] != "/": + hpath += "/" + href = hpath.replace("#", "%23") + lf = os.path.split(lf)[0] + upperdirs.append((href, hpath)) + upperdirs.append(("", "/")) + + return render_to_response('listdir.html', {'file':f, 'listdirfiles':listdirfiles, 'listdirdirs':listdirdirs, 'upperdirs':upperdirs, 'settings': settings}) + + # flat output of file when loaded + if os.path.isfile(fp): + ext = os.path.splitext(fp)[1].lower() + mimetype = extmimetypes.get(ext, "text/plain") + fin = open(fp) + ftext = fin.read() + fin.close() + return HttpResponse(ftext, mimetype=mimetype) + + return HttpResponse("unknown file::%s::" % f, mimetype = "text/plain") + + +def SaveImageInDir(name, imgdir, fdata): + print ("hihihihi", fdata, settings.SURVEYS) + print os.path.join(settings.SURVEYS, imgdir) + if not os.path.isdir(os.path.join(settings.SURVEYS, imgdir)): + print "*** Must have directory '%s' in '%s'" % (imgdir, settings.SURVEYS) + while True: + fname = os.path.join(settings.SURVEYS, imgdir, name) + if not os.path.exists(fname): + break + mname = re.match("(.*?)(?:-(\d+))?\.(png|jpg|jpeg)$(?i)", name) + if mname: + name = "%s-%d.%s" % (mname.group(1), int(mname.group(2) or "0") + 1, mname.group(3)) + print "saving file", fname + fout = open(fname, "wb") + fout.write(fdata.read()) + fout.close() + res = os.path.join(imgdir, name) + return res.replace("\\", "/") + +def jgtuploadfile(request): + filesuploaded = [ ] + project, user, tunnelversion = request.POST["project"], request.POST["user"], request.POST["tunnelversion"] + print (project, user, tunnelversion) + for uploadedfile in request.FILES.values(): + if uploadedfile.field_name in ["tileimage", "backgroundimage"] and \ + uploadedfile.content_type in ["image/png", "image/jpeg"]: + fname = user + "_" + re.sub("[\\\\/]", "-", uploadedfile.name) # very escaped \ + print fname + fileuploaded = SaveImageInDir(fname, uploadedfile.field_name, uploadedfile) + filesuploaded.append(settings.URL_ROOT + "/jgtfile/" + fileuploaded) + #print "FF", request.FILES + #print ("FFF", request.FILES.values()) + message = "" + print "gothere" + return render_to_response('fileupload.html', {'message':message, 'filesuploaded':filesuploaded, 'settings': settings}) + diff --git a/expo/views.py b/expo/views.py index 718c720..4183f68 100644 --- a/expo/views.py +++ b/expo/views.py @@ -1,4 +1,7 @@ -from views_caves import * -from views_survex import * -from views_logbooks import * -from views_other import * +# primary namespace +import view_surveys +import views_caves +import views_survex +import views_logbooks +import views_other + diff --git a/expo/views_caves.py b/expo/views_caves.py index 3363a2e..684f4b4 100644 --- a/expo/views_caves.py +++ b/expo/views_caves.py @@ -7,15 +7,10 @@ import search def caveindex(request): caves = Cave.objects.all() - notablecavehrefs = [ "161", "204", "258", "76" ] + notablecavehrefs = [ "161", "204", "258", "76" ] # could detect notability by trips and notability of people who have been down them notablecaves = [ Cave.objects.get(href=href) for href in notablecavehrefs ] return render_to_response('caveindex.html', {'caves': caves, 'notablecaves':notablecaves, 'settings': settings}) -def cave(request, cave_id): - #hm, we're only choosing by the number within kataster, needs to be fixed. Caves in 1626 will presumably not work. - AC 7DEC08 - cave = Cave.objects.filter(kataster_number = cave_id)[0] - return render_to_response('cave.html', {'cave': cave, 'settings': settings}) - def cavehref(request, href): cave = Cave.objects.get(href=href) return render_to_response('cave.html', {'cave': cave, 'settings': settings}) diff --git a/expo/views_logbooks.py b/expo/views_logbooks.py index 513701b..a179c50 100644 --- a/expo/views_logbooks.py +++ b/expo/views_logbooks.py @@ -11,13 +11,14 @@ import re def personindex(request): persons = Person.objects.all() - personss = [ ] ncols = 5 nc = (len(persons) + ncols - 1) / ncols for i in range(ncols): personss.append(persons[i * nc: (i + 1) * nc]) - return render_to_response('personindex.html', {'persons': persons, 'personss':personss, 'settings': settings}) + + notablepersons = Person.objects.filter(bisnotable=True) + return render_to_response('personindex.html', {'persons': persons, 'personss':personss, 'notablepersons':notablepersons, 'settings': settings}) def expedition(request, expeditionname): year = int(expeditionname) @@ -42,12 +43,10 @@ def personexpedition(request, name, expeditionname): personexpedition = person.personexpedition_set.get(expedition=expedition) return render_to_response('personexpedition.html', {'personexpedition': personexpedition, 'settings': settings}) - def logbookentry(request, logbookentry_id): logbookentry = LogbookEntry.objects.filter(href = logbookentry_id)[0] return render_to_response('logbookentry.html', {'logbookentry': logbookentry, 'settings': settings}) - def logbookSearch(request, extra): query_string = '' found_entries = None diff --git a/expo/views_other.py b/expo/views_other.py index 1155036..e413297 100644 --- a/expo/views_other.py +++ b/expo/views_other.py @@ -18,7 +18,7 @@ def stats(request): statsDict['logbookEntryCount'] = int(LogbookEntry.objects.count()) return render_to_response('statistics.html', statsDict) -def frontPage(request): +def frontpage(request): message = "no test message" #reverse('personn', kwargs={"name":"hkjhjh"}) if "reloadexpos" in request.GET: message = LoadPersonsExpos() diff --git a/parsers/logbooks.py b/parsers/logbooks.py index 3bad8c4..8138953 100644 --- a/parsers/logbooks.py +++ b/parsers/logbooks.py @@ -12,6 +12,11 @@ import datetime import os +# +# When we edit logbook entries, allow a "?" after any piece of data to say we've frigged it and +# it can be checked up later from the hard-copy if necessary; or it's not possible to determin (name, trip place, etc) +# + # # the logbook loading section # @@ -72,7 +77,7 @@ def EnterLogIntoDbase(date, place, title, text, trippeople, expedition, logtime_ lplace = place.lower() if lplace not in noncaveplaces: lbo.cave=GetCaveLookup().get(lplace) - print "pppp %s |%s|" % (lplace, str(lbo.cave)) + #print "pppp %s |%s|" % (lplace, str(lbo.cave)) lbo.save() #print "ttt", date, place @@ -289,6 +294,7 @@ def SetDatesFromLogbookEntries(expedition): def LoadLogbookForExpedition(expedition): + print "deleting logbooks for", expedition expedition.logbookentry_set.all().delete() models.PersonTrip.objects.filter(person_expedition__expedition=expedition).delete() expowebbase = os.path.join(settings.EXPOWEB, "years") diff --git a/parsers/people.py b/parsers/people.py index 4a2ea11..2fda46e 100644 --- a/parsers/people.py +++ b/parsers/people.py @@ -52,81 +52,74 @@ def LoadPersonsExpos(): headers = personreader.next() header = dict(zip(headers, range(len(headers)))) + # make expeditions + print "Loading expeditions" models.Expedition.objects.all().delete() years = headers[5:] years.append("2008") for year in years: - y = models.Expedition(year = year, name = "CUCC expo%s" % year) - y.save() - print "lll", years + expedition = models.Expedition(year = year, name = "CUCC expo%s" % year) + expedition.save() + # make persons + print "Loading personexpeditions" models.Person.objects.all().delete() models.PersonExpedition.objects.all().delete() expoers2008 = """Edvin Deadman,Kathryn Hopkins,Djuke Veldhuis,Becka Lawson,Julian Todd,Natalie Uomini,Aaron Curtis,Tony Rooke,Ollie Stevens,Frank Tully,Martin Jahnke,Mark Shinwell,Jess Stirrups,Nial Peters,Serena Povia,Olly Madge,Steve Jones,Pete Harley,Eeva Makiranta,Keith Curtis""".split(",") expomissing = set(expoers2008) - for person in personreader: - name = person[header["Name"]] + for personline in personreader: + name = personline[header["Name"]] name = re.sub("<.*?>", "", name) mname = re.match("(\w+)(?:\s((?:van |ten )?\w+))?(?:\s\(([^)]*)\))?", name) + nickname = mname.group(3) or "" - if mname.group(3): - nickname = mname.group(3) - else: - nickname = "" - - firstname, lastname = mname.group(1), mname.group(2) or "" - - print firstname, lastname, "NNN", nickname - #assert lastname == person[header[""]], person - - href = firstname.lower() - if lastname: - href += "_" + lastname.lower() - pObject = models.Person(first_name = firstname, - last_name = lastname, href=href, - is_vfho = person[header["VfHO member"]], - ) - - is_guest = person[header["Guest"]] == "1" # this is really a per-expo catagory; not a permanent state - pObject.save() + person = models.Person(first_name=mname.group(1), last_name=(mname.group(2) or "")) + person.is_vfho = personline[header["VfHO member"]] + person.Sethref() + #print "NNNN", person.href + is_guest = (personline[header["Guest"]] == "1") # this is really a per-expo catagory; not a permanent state + person.save() #parseMugShotAndBlurb(firstname, lastname, person, header, pObject) - for year, attended in zip(headers, person)[5:]: - yo = models.Expedition.objects.filter(year = year)[0] + # make person expedition from table + for year, attended in zip(headers, personline)[5:]: + expedition = models.Expedition.objects.get(year=year) if attended == "1" or attended == "-1": - pyo = models.PersonExpedition(person = pObject, expedition = yo, nickname=nickname, is_guest=is_guest) - pyo.save() - - # error - elif (firstname, lastname) == ("Mike", "Richardson") and year == "2001": - print "Mike Richardson(2001) error" - pyo = models.PersonExpedition(person = pObject, expedition = yo, nickname=nickname, is_guest=is_guest) - pyo.save() + personexpedition = models.PersonExpedition(person=person, expedition=expedition, nickname=nickname, is_guest=is_guest) + personexpedition.save() # this fills in those people for whom 2008 was their first expo + print "Loading personexpeditions 2008" for name in expomissing: firstname, lastname = name.split() is_guest = name in ["Eeva Makiranta", "Keith Curtis"] print "2008:", name persons = list(models.Person.objects.filter(first_name=firstname, last_name=lastname)) if not persons: - pObject = models.Person(first_name = firstname, - last_name = lastname, - is_vfho = False, - mug_shot = "") - pObject.href = firstname.lower() - if lastname: - pObject.href += "_" + lastname.lower() - pObject.save() + person = models.Person(first_name=firstname, last_name = lastname, is_vfho = False, mug_shot = "") + person.Sethref() + person.save() else: - pObject = persons[0] - yo = models.Expedition.objects.filter(year = "2008")[0] - pyo = models.PersonExpedition(person = pObject, expedition = yo, nickname="", is_guest=is_guest) - pyo.save() + person = persons[0] + expedition = models.Expedition.objects.get(year="2008") + personexpedition = models.PersonExpedition(person=person, expedition=expedition, nickname="", is_guest=is_guest) + personexpedition.save() + # could rank according to surveying as well + print "Setting person notability" + for person in models.Person.objects.all(): + person.notability = 0.0 + for personexpedition in person.personexpedition_set.all(): + if not personexpedition.is_guest: + person.notability += 1.0 / (2012 - int(personexpedition.expedition.year)) + person.bisnotable = person.notability > 0.3 # I don't know how to filter by this + person.save() + + +# used in other referencing parser functions # expedition name lookup cached for speed (it's a very big list) Gpersonexpeditionnamelookup = { } def GetPersonExpeditionNameLookup(expedition): @@ -135,9 +128,10 @@ def GetPersonExpeditionNameLookup(expedition): if res: return res - res = {} + res = { } duplicates = set() + print "Calculating GetPersonExpeditionNameLookup for", expedition.year personexpeditions = models.PersonExpedition.objects.filter(expedition=expedition) for personexpedition in personexpeditions: possnames = [ ] diff --git a/templates/base.html b/templates/base.html index c88ac19..820dea7 100644 --- a/templates/base.html +++ b/templates/base.html @@ -2,7 +2,7 @@ <html lang="en"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/> -<link rel="stylesheet" type="text/css" href="{{ settings.MEDIA_URL }}css/main3.css" /> +<link rel="stylesheet" type="text/css" href="{{ settings.MEDIA_URL }}css/main2.css" /> <title>{% block title %}THE TITLE{% endblock %}</title> diff --git a/templates/cave.html b/templates/cave.html index f8a511d..495e2f7 100644 --- a/templates/cave.html +++ b/templates/cave.html @@ -7,10 +7,12 @@ <h3>All trips done in this cave</h3> <table> {% for logbookentry in cave.logbookentry_set.all %} + {% if logbookentry.title %} <tr> <td>{{logbookentry.date}}</td> <td><a href="{% url logbookentry logbookentry.href %}">{{logbookentry.title|safe}}</a></td> </tr> + {% endif %} {% endfor %} </table> </div> diff --git a/templates/fileupload.html b/templates/fileupload.html new file mode 100644 index 0000000..d1db6ca --- /dev/null +++ b/templates/fileupload.html @@ -0,0 +1,18 @@ +<h2>Fileupload</h2> + +<ul> +{% for fileuploaded in filesuploaded %} +<li>UPLOADEDFILE: {{fileuploaded}} +</li> +{% endfor %} +</ul> +<p>MESSAGE: {{message}} +</p> + +{% if not filesuploaded %} +<form action="" method="POST"> + <p>file to upload</p> + <p><input type="file" name="file1"/></p> + <p><input type="submit" name="submit" value="Submit" /></p> +</form> +{% endif %} diff --git a/templates/index.html b/templates/index.html index 2dad17b..879346e 100644 --- a/templates/index.html +++ b/templates/index.html @@ -6,33 +6,39 @@ {% block content %} <h2>The unfinished front page</h2> -<b>Work down through an expedition page link</b> -<p class="indent"><b>Remaining work:</b> - -<p>(separate out the recent/notable people) vast front-page layout table of folks and caving trips and years; </p> -<p>parse 1995-1976 logbooks; </p> -<p>name matching and spelling in survex files; </p> -<p>detect T/U on log entries; </p> -<p>Improve logbook wikihtml text</p> -<p>match caves to log entries; </p> -<p>simplify the survex parsing code (if necessary); </p> -<p>links between logbooks and survex blocks to cave things; </p> -<p>where are the subcaves; </p> -<p>mini-tree of survexblocks; </p> -<p>connect sketches to caves to survey blocks and render thumbnailwise; </p> -<p>all images to start appearing in pages; and so on</p> -<p>tables of trips per year per person;</p> - -<h3>{{message}}</h3> <ul> <li><b><a href="{% url personindex %}">List of People</a></b></li> <li><b><a href="{% url caveindex %}">List of Caves</a></b></li> - <li><a href="/statistics">Statistics of what's loaded in the database</a></li> - <li><a href="{% url survexindex all %}">Survex directory</a></li> + <li><a href="{% url jgtfile aaaa %}">JGT list of files</a> (temporary simple file list and tunnel use)</li> <li><a href="{% url survey %}">Survey files</a></li> + <li><a href="{% url survexindex all %}">Survex directory</a></li> + <li><a href="{% url expedition 2008 %}">Expedition 2008</a></li> + <li><a href="{% url expedition 2007 %}">Expedition 2007</a></li> + <li><a href="{% url expedition 1996 %}">Expedition 1996</a></li> </ul> +<h2>Further work</h2> + +<p>surf through the tunnel sketches and images</p> +<p>bugs with all.svx block (double dot) +<p>name matching and spelling in survex files; </p> +<p>render bitmap view of every survex block as a thumbnail</p> +<p>upload tunnel images and tunnel sketches</p> +<p>parse 1995-1976 logbooks; (esp top 161)</p> +<p>where are the subcaves; </p> +<p>cave section entrance match for logbook entries</p> +<p>detect T/U on log entries; </p> +<p>Improve logbook wikihtml text</p> +<p>simplify the survex parsing code (if necessary); </p> +<p>wiki survex stop linegap between comment lins</p> +<p>links between logbooks and survex blocks to cave things; </p> +<p>mini-tree of survexblocks; </p> +<p>connect sketches to caves to survey blocks and render thumbnailwise; </p> +<p>all images to start appearing in pages; and so on</p> + +<h3>{{message}}</h3> + <form action="" method="GET"> <input type="submit" name="reloadexpos" value="Reload Expos"> <input type="submit" name="reloadsurvex" value="Reload Survex"> diff --git a/templates/listdir.html b/templates/listdir.html new file mode 100644 index 0000000..a3b677f --- /dev/null +++ b/templates/listdir.html @@ -0,0 +1,22 @@ +<h2>List file :{{file}}:</h2> + +<h3>Files</h3> +<ul> +{% for lf in listdirfiles %} +<li><a href="{% url jgtfile lf.0 %}">{{lf.1}}</a> ({{lf.2}} bytes)</li> +{% endfor %} +</ul> + +<h3>Upperdirectories</h3> +<ul> +{% for lf in upperdirs %} +<li><a href="{% url jgtfile lf.0 %}">{{lf.1}}</a></li> +{% endfor %} +</ul> + +<h3>Subdirectories</h3> +<ul> +{% for lf in listdirdirs %} +<li><a href="{% url jgtfile lf.0 %}">{{lf.1}}</a> ({{lf.2}} files)</li> +{% endfor %} +</ul> diff --git a/templates/personindex.html b/templates/personindex.html index c328628..5ffbe4d 100644 --- a/templates/personindex.html +++ b/templates/personindex.html @@ -5,6 +5,21 @@ {% block content %} +<h2>Notable expoers</h2> +<table> +<tr><th>Person</th><th>First</th><th>Last</th><th>Notability</th></tr> +{% for person in notablepersons %} +<tr> + <td><a href="{% url person person.href%}">{{person|wiki_to_html_short}}</a></td> + <td><a href="{% url personexpedition person.href person.Firstexpedition.expedition.year %}">{{person.Firstexpedition.expedition.year}}</a></td> + <td><a href="{% url personexpedition person.href person.Lastexpedition.expedition.year %}">{{person.Lastexpedition.expedition.year}}</a></td> + <td>{{person.notability}}</td> +</tr> +{% endfor %} +</table> + + +<h2>All expoers</h2> <table> <tr> {% for persons in personss %} diff --git a/urls.py b/urls.py index 8c2810c..ee5664d 100644 --- a/urls.py +++ b/urls.py @@ -1,43 +1,54 @@ from django.conf.urls.defaults import * -from expo.views import * -import expo.view_surveys as view_surveys import troggle.settings as settings + +from expo.views import * # flat import +from expo.views_caves import * +from expo.views_survex import * + from django.contrib import admin admin.autodiscover() urlpatterns = patterns('', - (r'^$', frontPage), - url(r'^caveindex$', caveindex, name="caveindex"), - url(r'^cave/(?P<cave_id>[^/]+)/?$', cave), + url(r'^$', views_other.frontpage, name="frontpage"), - url(r'^cavehref/(.+)$', cave, name="cave"), + url(r'^caveindex$', views_caves.caveindex, name="caveindex"), + url(r'^personindex$', views_logbooks.personindex, name="personindex"), + url(r'^person/(.+)$', views_logbooks.person, name="person"), + url(r'^expedition/(\d+)$', views_logbooks.expedition, name="expedition"), + url(r'^personexpedition/(.+?)/(\d+)$', views_logbooks.personexpedition, name="personexpedition"), + url(r'^logbookentry/(.+)$', views_logbooks.logbookentry,name="logbookentry"), + + url(r'^survexblock/(.+)$', views_caves.survexblock, name="survexblock"), + url(r'^cavehref/(.+)$', views_caves.cavehref, name="cave"), + + url(r'^jgtfile/(.*)$', view_surveys.jgtfile, name="jgtfile"), + url(r'^jgtuploadfile$', view_surveys.jgtuploadfile, name="jgtuploadfile"), + + + + + (r'^cave/(?P<cave_id>[^/]+)/?(?P<ent_letter>[^/])$', ent), #(r'^cave/(?P<cave_id>[^/]+)/edit/$', edit_cave), (r'^cavesearch', caveSearch), url(r'^cavearea', caveArea, name="caveArea"), - url(r'^survex/(.*?)\.index$', index, name="survexindex"), + url(r'^survex/(.*?)\.index$', views_survex.index, name="survexindex"), + url(r'^cave/(?P<cave_id>[^/]+)/?$', views_caves.cavehref), # deprecated (r'^survex/(?P<survex_file>.*)\.svx$', svx), (r'^survex/(?P<survex_file>.*)\.3d$', threed), (r'^survex/(?P<survex_file>.*)\.log$', log), (r'^survex/(?P<survex_file>.*)\.err$', err), - url(r'^personindex$', personindex, name="personindex"), - url(r'^person/(.+)$', person, name="person"), - - url(r'^logbookentry/(.+)$', logbookentry, name="logbookentry"), - url(r'^logbooksearch/(.*)/?$', logbookSearch), - url(r'^expedition/(\d+)$', expedition, name="expedition"), - url(r'^personexpedition/(.+?)/(\d+)$', personexpedition, name="personexpedition"), - url(r'^survexblock/(.+)$', survexblock, name="survexblock"), + url(r'^logbooksearch/(.*)/?$', views_logbooks.logbookSearch), - url(r'^statistics/?$', stats, name="stats"), + url(r'^statistics/?$', views_other.stats, name="stats"), - url(r'^calendar/(?P<year>\d\d\d\d)?$', calendar, name="calendar"), + url(r'^calendar/(?P<year>\d\d\d\d)?$', views_other.calendar, name="calendar"), url(r'^survey/?$', surveyindex, name="survey"), (r'^survey/(?P<year>\d\d\d\d)\#(?P<wallet_number>\d*)$', survey), @@ -48,7 +59,7 @@ urlpatterns = patterns('', (r'^accounts/', include('registration.urls')), (r'^profiles/', include('profiles.urls')), - (r'^personform/(.*)$', personForm), +# (r'^personform/(.*)$', personForm), (r'^site_media/(?P<path>.*)$', 'django.views.static.serve', {'document_root': settings.MEDIA_ROOT, 'show_indexes': True}),