2011-07-11 01:49:03 +01:00
|
|
|
from django.conf import settings
|
2022-03-04 14:54:49 +00:00
|
|
|
from django.urls import include, re_path
|
2021-03-21 01:37:52 +00:00
|
|
|
from django.views.generic.base import RedirectView
|
2020-05-28 01:38:35 +01:00
|
|
|
from django.views.generic.edit import UpdateView
|
|
|
|
from django.views.generic.list import ListView
|
|
|
|
from django.contrib import admin
|
2021-04-06 00:49:09 +01:00
|
|
|
from django.contrib import auth
|
2022-03-02 21:15:24 +00:00
|
|
|
from django.urls import path, reverse, resolve
|
2020-06-22 00:03:23 +01:00
|
|
|
|
2021-04-21 19:08:42 +01:00
|
|
|
from troggle.core.views import caves, statistics, survex
|
2021-05-03 20:36:29 +01:00
|
|
|
from troggle.core.views.scans import scansingle, singlewallet, allwallets
|
2021-05-04 14:16:48 +01:00
|
|
|
from troggle.core.views.drawings import dwgallfiles, dwgfilesingle
|
2021-05-05 00:35:10 +01:00
|
|
|
from troggle.core.views.uploads import dwgupload, scanupload
|
|
|
|
from troggle.core.views.other import troggle404, frontpage, todos, controlpanel, frontpage
|
2021-04-28 02:43:09 +01:00
|
|
|
from troggle.core.views.other import exportlogbook
|
2021-04-16 03:05:39 +01:00
|
|
|
from troggle.core.views.caves import ent, cavepage
|
2021-04-16 21:28:44 +01:00
|
|
|
from troggle.core.views.logbooks import get_logbook_entries, logbookentry, logbookSearch
|
2021-04-30 21:32:53 +01:00
|
|
|
from troggle.core.views.logbooks import notablepersons, person, get_people
|
2021-04-16 21:28:44 +01:00
|
|
|
from troggle.core.views.logbooks import expedition, personexpedition, Expeditions_tsvListView, Expeditions_jsonListView
|
|
|
|
from troggle.core.views.prospect import prospecting_image
|
|
|
|
from troggle.core.views.prospect import prospecting
|
2021-04-11 20:00:09 +01:00
|
|
|
from troggle.core.views.statistics import pathsreport, stats, dataissues
|
2021-04-16 21:28:44 +01:00
|
|
|
from troggle.core.views.expo import expofiles_redirect, expofilessingle, expopage, editexpopage, mediapage, map, mapfile
|
2021-03-31 21:51:17 +01:00
|
|
|
from troggle.core.views.survex import survexcaveslist, survexcavesingle, svx
|
2021-04-06 00:49:09 +01:00
|
|
|
from troggle.core.views.auth import expologin, expologout
|
2021-03-28 03:48:04 +01:00
|
|
|
"""This sets the actualurlpatterns[] and urlpatterns[] lists which django uses
|
2021-03-21 01:37:52 +00:00
|
|
|
to resolve urls - in both directions as these are declarative.
|
2020-05-28 01:38:35 +01:00
|
|
|
|
2020-07-18 16:23:54 +01:00
|
|
|
HOW THIS WORKS
|
|
|
|
This is a "url dispatcher" - something needed by every web framework.
|
2021-04-19 01:32:18 +01:00
|
|
|
re_path( <regular expression that matches the thing in the web browser>,
|
2020-07-18 16:23:54 +01:00
|
|
|
<reference to python function in 'core' folder>, <optional name>)
|
2011-07-11 01:49:03 +01:00
|
|
|
|
2020-07-18 16:23:54 +01:00
|
|
|
Django also provides the reverse function: given an an object, provide the URL
|
|
|
|
which is vital to writing code for the webapp. So the URL dispatch is declarative.
|
2020-07-28 01:22:06 +01:00
|
|
|
|
|
|
|
The API urls return TSV or JSON and are new in July 2020.
|
2020-07-18 16:23:54 +01:00
|
|
|
"""
|
2021-03-21 01:37:52 +00:00
|
|
|
|
2021-10-31 17:25:45 +00:00
|
|
|
todo = '''Replace most re_path() with modern and simpler path().
|
|
|
|
The admin and logout paths need to stay using re_path() as they
|
|
|
|
have to be locked to the start.
|
|
|
|
The final _edit and CATCHALL also have to use re_path().
|
|
|
|
Test VERY CAREFULLY for each change. It is fragile.
|
2021-04-21 19:08:42 +01:00
|
|
|
'''
|
|
|
|
|
2020-07-18 16:23:54 +01:00
|
|
|
# Many of these patterns do not work because troggle spent many years broken and we have
|
|
|
|
# not yet restored all the functions. Some may have never been fully implemented in
|
|
|
|
# the first place and what they were intended to provide is obscure.
|
2020-06-22 00:03:23 +01:00
|
|
|
|
2021-03-26 13:51:00 +00:00
|
|
|
if settings.EXPOFILESREMOTE:
|
|
|
|
expofilesurls = [
|
2021-04-28 00:48:20 +01:00
|
|
|
path('/<path:filepath>', expofiles_redirect, name="expofiles_redirect"), # to http://expo.survex.com/expofiles
|
|
|
|
path('', expofiles_redirect, {'filepath': ""}, name="expofiles_redirect"),
|
|
|
|
]
|
2021-03-26 13:51:00 +00:00
|
|
|
else:
|
|
|
|
expofilesurls = [
|
2021-04-28 00:48:20 +01:00
|
|
|
path('/<path:filepath>', expofilessingle, name="single"), # local copy of EXPOFILES
|
|
|
|
path('', expofilessingle, {'filepath': ""}, name="single"),
|
|
|
|
]
|
2022-03-02 21:15:24 +00:00
|
|
|
|
|
|
|
# see https://docs.djangoproject.com/en/dev/topics/auth/default/
|
2021-04-06 00:49:09 +01:00
|
|
|
# The URLs provided by include('django.contrib.auth.urls') are:
|
2022-03-04 14:54:49 +00:00
|
|
|
#
|
2021-04-06 00:49:09 +01:00
|
|
|
# accounts/login/ [name='login']
|
|
|
|
# accounts/logout/ [name='logout']
|
|
|
|
# accounts/password_change/ [name='password_change']
|
|
|
|
# accounts/password_change/done/ [name='password_change_done']
|
|
|
|
# accounts/password_reset/ [name='password_reset']
|
|
|
|
# accounts/password_reset/done/ [name='password_reset_done']
|
|
|
|
# accounts/reset/<uidb64>/<token>/ [name='password_reset_confirm']
|
|
|
|
# accounts/reset/done/ [name='password_reset_complete']
|
2021-03-31 23:41:46 +01:00
|
|
|
|
2022-03-05 17:05:15 +00:00
|
|
|
# BUT many of these are set up by opinionated Django even if 'django.contrib.auth.urls' is NOT included.
|
|
|
|
# Some overlap with 'admin.site.urls' needs to be investigated.
|
|
|
|
|
2021-03-31 16:14:36 +01:00
|
|
|
trogglepatterns = [
|
2021-12-30 00:56:09 +00:00
|
|
|
path('expofiles/', include(expofilesurls)), # intercepted by Apache, if it is running.
|
2021-04-28 00:48:20 +01:00
|
|
|
path('expofiles', include(expofilesurls)), # curious interaction with the include() here, not just a slash problem.
|
2021-03-26 13:51:00 +00:00
|
|
|
|
2021-04-19 01:32:18 +01:00
|
|
|
re_path(r'^caves$', caves.caveindex, name="caveindex"),
|
|
|
|
re_path(r'^indxal.htm$', caves.caveindex, name="caveindex"), # ~420 hrefs to this url in expoweb files
|
2021-04-30 21:32:53 +01:00
|
|
|
re_path(r'^people/?$', notablepersons, name="notablepersons"),
|
2011-07-11 01:49:03 +01:00
|
|
|
|
2021-04-19 01:32:18 +01:00
|
|
|
re_path(r'^admin/doc/', include('django.contrib.admindocs.urls')), # needs docutils Python module (http://docutils.sf.net/).
|
|
|
|
re_path(r'^admin/', admin.site.urls), # includes admin login & logout urls
|
2021-03-27 18:22:07 +00:00
|
|
|
|
2021-05-04 14:16:48 +01:00
|
|
|
# Uploads - uploading a file
|
2021-10-31 17:25:45 +00:00
|
|
|
path('scanupload/<wallet>', scanupload, name='scanupload'), # wallet=2020#01, not a path
|
|
|
|
path('dwgupload/<path:folder>', dwgupload, name='dwgupload'),
|
|
|
|
path('dwgupload/', dwgupload, name='dwgupload'),
|
|
|
|
path('dwguploadnogit/', dwgupload, {'gitdisable': 'yes'}, name='dwguploadnogit'), # used in testing
|
|
|
|
path('dwguploadnogit/<path:folder>', dwgupload, {'gitdisable': 'yes'}, name='dwguploadnogit'), # used in testing
|
2021-04-22 02:45:28 +01:00
|
|
|
|
2021-04-11 03:02:06 +01:00
|
|
|
# setting LOGIN_URL = '/accounts/login/' is default
|
2022-03-02 21:15:24 +00:00
|
|
|
path('accounts/logout/', expologout, name='expologout'), # same as in django.contrib.auth.urls
|
|
|
|
path('accounts/login/', expologin, name='expologin'), # same as in django.contrib.auth.urls
|
|
|
|
#re_path(r'^accounts/', include('django.contrib.auth.urls')), # see site-packages\registration\auth_urls_classes.py
|
2021-04-06 00:49:09 +01:00
|
|
|
|
2021-04-16 21:28:44 +01:00
|
|
|
# Persons - nasty surname recognition logic fails for 19 people!
|
2021-04-20 23:57:51 +01:00
|
|
|
re_path(r'^person/(?P<first_name>[A-Z]*[a-z\-\'&;]*)[^a-zA-Z]*(?P<last_name>[a-z\-\']*[^a-zA-Z]*[\-]*[A-Z]*[a-zA-Z\-&;]*)/?', person, name="person"),
|
2021-04-19 01:32:18 +01:00
|
|
|
re_path(r'^personexpedition/(?P<first_name>[A-Z]*[a-z&;]*)[^a-zA-Z]*(?P<last_name>[A-Z]*[a-zA-Z&;]*)/(?P<year>\d+)/?$', personexpedition, name="personexpedition"),
|
2020-06-18 15:54:40 +01:00
|
|
|
|
2021-04-22 02:45:28 +01:00
|
|
|
# Expedition master page & API exports
|
2021-04-19 01:32:18 +01:00
|
|
|
re_path(r'^expedition/(\d+)$', expedition, name="expedition"),
|
|
|
|
re_path(r'^api/expeditions_tsv$', Expeditions_tsvListView.as_view()),
|
|
|
|
re_path(r'^api/expeditions_json$', Expeditions_jsonListView.as_view()),
|
2021-04-11 03:02:06 +01:00
|
|
|
|
|
|
|
# Logbook entries
|
2021-04-19 01:32:18 +01:00
|
|
|
re_path(r'^logbookentry/(?P<date>.*)/(?P<slug>.*)/?$', logbookentry,name="logbookentry"),
|
2021-04-21 22:09:20 +01:00
|
|
|
re_path(r'^logbooksearch/(.*)/?$', logbookSearch), # name 'search' not defined in views/logbooks.py
|
2021-04-28 02:43:09 +01:00
|
|
|
re_path(r'^logbook(?P<year>\d\d\d\d)\.(?P<extension>.*)/?$', exportlogbook, name='exportlogbook'), # e.g. /logbook2019.html # working but old CSS in
|
|
|
|
re_path(r'^logbook$', exportlogbook, name='exportlogbook'),
|
|
|
|
|
2021-04-16 21:28:44 +01:00
|
|
|
# Internal. editfile.html template uses these internally
|
2021-04-19 01:32:18 +01:00
|
|
|
re_path(r'^getPeople/(?P<expeditionslug>.*)', get_people, name = "get_people"),
|
|
|
|
re_path(r'^getLogBookEntries/(?P<expeditionslug>.*)', get_logbook_entries, name = "get_logbook_entries"),
|
|
|
|
re_path(r'^getQMs/(?P<caveslug>.*)', caves.get_qms, name = "get_qms"),
|
|
|
|
re_path(r'^getEntrances/(?P<caveslug>.*)', caves.get_entrances, name = "get_entrances"),
|
2021-04-16 21:28:44 +01:00
|
|
|
|
2021-04-11 03:02:06 +01:00
|
|
|
# Cave description pages
|
2021-04-28 00:48:20 +01:00
|
|
|
re_path(r'^newcave/$', caves.edit_cave, name="newcave"),
|
2021-04-19 01:32:18 +01:00
|
|
|
re_path(r'^cave/3d/(?P<cave_id>[^/]+)$', caves.cave3d, name="cave3d"),
|
|
|
|
|
|
|
|
re_path(r'^cave/description/([^/]+)/?$', caves.caveDescription),
|
2021-12-30 00:56:09 +00:00
|
|
|
re_path(r'^cave/(?P<cave_id>[^/]+)/?$', caves.cave, name="cave"), #!!!BAD, local links fail.. to be checked..
|
2021-04-28 00:48:20 +01:00
|
|
|
re_path(r'^cave/(?P<cave_id>[^/]+)/?(?P<ent_letter>[^/])$', ent), # view_caves.ent
|
|
|
|
re_path(r'^cave/(?P<slug>[^/]+)/edit/$', caves.edit_cave, name="edit_cave"),
|
2021-12-30 00:56:09 +00:00
|
|
|
re_path(r'^(?P<karea>\d\d\d\d)(?P<subpath>.*)$', cavepage, name="cavepage"), # shorthand /1623/264 BUT url links break! Stop this..
|
2021-04-17 23:59:11 +01:00
|
|
|
# Note that urls eg '1623/161/l/rl89a.htm' are handled by cavepage which redirects them to 'expopage'
|
2021-12-30 14:15:08 +00:00
|
|
|
# Note that _edit$ for a cave description page in a subfolder e.g. /1623/via204.html_edit gets caught here and breaks with 404
|
2021-03-31 21:51:17 +01:00
|
|
|
|
2021-04-16 21:28:44 +01:00
|
|
|
# Entrances
|
2021-12-05 21:23:06 +00:00
|
|
|
re_path(r'^cave/entrance/([^/]+)/?$', caves.caveEntrance), # lists all entrances !!!BAD, local links fail
|
2021-05-09 00:55:37 +01:00
|
|
|
re_path(r'^entrance/(?P<caveslug>[^/]+)/(?P<slug>[^/]+)/edit/', caves.edit_entrance, name = "editentrance"), #edit existing entrance
|
|
|
|
re_path(r'^entrance/new/(?P<caveslug>[^/]+)$', caves.edit_entrance, name = "newentrance"), # new entrance for a cave
|
2021-04-17 23:59:11 +01:00
|
|
|
|
2021-04-21 19:08:42 +01:00
|
|
|
# System admin and monitoring
|
2021-04-27 19:02:11 +01:00
|
|
|
path('statistics', statistics.stats, name="stats"),
|
|
|
|
path('stats', statistics.stats, name="stats"),
|
|
|
|
path('pathsreport', statistics.pathsreport, name="pathsreport"),
|
|
|
|
path('dataissues', statistics.dataissues, name="dataissues"),
|
2021-05-09 00:55:37 +01:00
|
|
|
path('eastings', statistics.eastings, name="eastings"),
|
2020-06-04 21:57:04 +01:00
|
|
|
|
2021-04-30 03:44:53 +01:00
|
|
|
path('troggle', frontpage, name="frontpage"), # control panel. Shows recent actions.
|
|
|
|
path('todo/<path:module>', todos, name="todos"),
|
|
|
|
path('controlpanel', controlpanel, name="controlpanel"),
|
2011-07-11 01:49:03 +01:00
|
|
|
|
2021-04-11 03:02:06 +01:00
|
|
|
# The survexfile pages
|
2021-04-28 00:48:20 +01:00
|
|
|
path('survexfile', survex.survexcavesingle, {'survex_cave': ''}, name="survexcavessingle"),
|
|
|
|
path('survexfile/', survex.survexcavesingle, {'survex_cave': ''}, name="survexcavessingle"),
|
|
|
|
path('survexfile/caves', survex.survexcaveslist, name="survexcaveslist"),
|
|
|
|
path('survexfile/caves/', survex.survexcaveslist, name="survexcaveslist"), # auto slash not working
|
|
|
|
|
2021-04-27 19:02:11 +01:00
|
|
|
path('survexfile/<path:survex_file>.svx', survex.svx, name="svx"),
|
|
|
|
path('survexfile/<path:survex_file>.3d', survex.threed, name="threed"),
|
|
|
|
path('survexfile/<path:survex_file>.log', survex.svxraw, name="svxraw"),
|
|
|
|
path('survexfile/<path:survex_file>.err', survex.err, name="err"),
|
2021-04-28 00:48:20 +01:00
|
|
|
path('survexfile/<path:survex_cave>', survex.survexcavesingle, name="survexcavessingle"),
|
2021-04-19 01:32:18 +01:00
|
|
|
|
|
|
|
|
2021-04-28 00:48:20 +01:00
|
|
|
# The survey scans in the wallets
|
|
|
|
path('survey_scans/', allwallets, name="allwallets"),
|
2021-04-30 03:44:53 +01:00
|
|
|
path('survey_scans/<path:path>/', singlewallet, name="singlewallet"),
|
|
|
|
path('survey_scans/<path:path>/<file>', scansingle, name="scansingle"),
|
2020-06-04 21:57:04 +01:00
|
|
|
|
2021-04-11 03:02:06 +01:00
|
|
|
# The tunnel and therion drawings files pages
|
2021-05-04 14:16:48 +01:00
|
|
|
path('dwgfiles', dwgallfiles, name="dwgallfiles"),
|
2022-02-20 00:21:56 +00:00
|
|
|
path('dwgfiles/', dwgallfiles, name="dwgallfiles"),
|
2021-05-04 14:16:48 +01:00
|
|
|
path('dwgdataraw/<path:path>', dwgfilesingle, name="dwgfilesingle"),
|
2021-04-17 23:59:11 +01:00
|
|
|
|
2021-04-28 00:48:20 +01:00
|
|
|
# QMs pages - must precede other /caves pages?
|
2021-04-27 15:38:20 +01:00
|
|
|
re_path(r'^cave/qms/([^/]+)/?$', caves.caveQMs), # Broken- QMs have no proper link to cave id
|
2021-04-19 01:32:18 +01:00
|
|
|
re_path(r'^cave/(?P<cave_id>[^/]+)/(?P<year>\d\d\d\d)-(?P<qm_id>\d*)(?P<grade>[ABCDX]?)?$', caves.qm, name="qm"),
|
2021-04-17 23:59:11 +01:00
|
|
|
|
2021-04-16 21:28:44 +01:00
|
|
|
# Prospecting Guide document
|
2022-03-05 17:05:15 +00:00
|
|
|
re_path(r'^prospecting_guide/$', prospecting), # disabled. Bad links, incompatible image package use and very, very out of date.
|
2021-04-16 21:28:44 +01:00
|
|
|
|
2021-04-11 03:02:06 +01:00
|
|
|
# This next set are all intercepted by Apache, if it is running.
|
2021-04-19 01:32:18 +01:00
|
|
|
re_path(r'^photos/(?P<subpath>.*)$', mediapage, {'doc_root': settings.PHOTOS_ROOT}, name="mediapage"), # photo galleries
|
|
|
|
re_path(r'^site_media/(?P<subpath>.*)$', mediapage, {'doc_root': settings.MEDIA_ROOT}, name="mediapage"), # MEDIA_ROOT: CSS and JS
|
2022-02-20 00:21:56 +00:00
|
|
|
re_path(r'^static/(?P<subpath>.*)$', mediapage, {'doc_root': settings.MEDIA_ROOT}, name="mediapage"), # STATIC only used by admin pages
|
2021-04-30 00:24:36 +01:00
|
|
|
path('javascript/<path:subpath>', mediapage, {'doc_root': settings.JSLIB_ROOT}, name="mediapage"), # JSLIB_URL
|
2021-04-19 01:32:18 +01:00
|
|
|
re_path(r'^expowebcache/3d/(?P<subpath>.*)$', mediapage, {'doc_root': settings.THREEDCACHEDIR}, name="mediapage"),
|
2021-04-28 00:48:20 +01:00
|
|
|
|
|
|
|
re_path(r'^/loser/(?P<subpath>.*)$', mediapage, {'doc_root': settings.SURVEX_DATA}, name="mediapage"), # Oddly not working !?
|
2021-04-19 01:32:18 +01:00
|
|
|
re_path(r'^map/map.html', map, name="map"), # Redirects to OpenStreetMap JavaScript
|
|
|
|
re_path(r'^map/(?P<path>.*)$', mapfile, name="mapfile"), # css, js, gpx
|
2020-06-20 23:08:34 +01:00
|
|
|
|
2021-04-11 03:02:06 +01:00
|
|
|
# Final catchall which also serves expoweb handbook pages and images
|
2021-04-19 01:32:18 +01:00
|
|
|
re_path(r'^(.*)_edit$', editexpopage, name="editexpopage"),
|
|
|
|
re_path(r'^(.*)$', expopage, name="expopage"), # CATCHALL assumed relative to EXPOWEB
|
2020-06-17 22:55:51 +01:00
|
|
|
]
|
2011-07-11 01:49:03 +01:00
|
|
|
|
2021-04-27 19:02:11 +01:00
|
|
|
# do NOT allow DIR_ROOT prefix to all urls
|
2020-06-17 22:55:51 +01:00
|
|
|
urlpatterns = [
|
2021-04-19 01:32:18 +01:00
|
|
|
# re_path('^%s' % settings.DIR_ROOT, include(trogglepatterns))
|
|
|
|
re_path('', include(trogglepatterns))
|
2020-06-17 22:55:51 +01:00
|
|
|
]
|
2021-03-25 16:15:26 +00:00
|
|
|
|
2021-03-21 01:37:52 +00:00
|
|
|
# When apache is running these prempt Django so Django never sees them.
|
2021-04-10 15:30:29 +01:00
|
|
|
# NB apache has its own ideas about mimetypes, so behaviour may not be identical for .xml files by troggle
|
2021-03-21 01:37:52 +00:00
|
|
|
|
2021-04-02 19:22:53 +01:00
|
|
|
# NEW apache configurations suggested as of 2 April 2021:
|
2021-03-21 01:37:52 +00:00
|
|
|
# Alias /site-media/ /home/expo/troggle/media/
|
2022-02-20 00:21:56 +00:00
|
|
|
# Alias /robots.txt /home/expo/troggle/media/robots.txt # does not exist!
|
2021-03-21 01:37:52 +00:00
|
|
|
# Alias /favicon.ico /home/expo/troggle/media/favicon.ico # comes from /expoweb/* when running runserver
|
2021-04-02 19:22:53 +01:00
|
|
|
# Alias /javascript /home/expo/troggle/media/jslib # empty
|
2022-03-05 17:05:15 +00:00
|
|
|
# Alias /search ? # the Xapian text search thinggy
|
|
|
|
# Alias /kanboard ? # the Kanban Trello-clone thinggy
|
2021-03-21 01:37:52 +00:00
|
|
|
|
|
|
|
# Copy of old standard apache configurations:
|
|
|
|
# Alias /expofiles /home/expo/expofiles
|
|
|
|
# Alias /photos /home/expo/webphotos
|
|
|
|
# Alias /map /home/expo/expoweb/map
|
2022-02-20 00:21:56 +00:00
|
|
|
# Alias /javascript /usr/share/javascript # to be changed, see above
|
|
|
|
# Alias /robots.txt /home/expo/static/robots.txt # to be changed, see above
|
|
|
|
# Alias /favicon.ico /home/expo/static/favicon.ico # to be deleted. favicon.ico now in expoweb/
|
|
|
|
# Alias /static/ /home/expo/static/ # only used by Django admin, tinymce
|
2021-03-21 01:37:52 +00:00
|
|
|
|
2022-02-20 00:21:56 +00:00
|
|
|
# ScriptAlias /repositories /home/expo/config/apache/services/hgweb/hgweb.cgi # UPDATE this for git
|
2021-03-21 01:37:52 +00:00
|
|
|
# ScriptAlias /boe /home/expo/boe/boc/boc.pl
|
|
|
|
# ScriptAlias /boe-lastyear /home/expo/boe/boc-previous/boc.pl
|