from django.conf import settings from django.conf.urls import url, include from django.views.generic.base import RedirectView from django.views.generic.edit import UpdateView from django.views.generic.list import ListView from django.contrib import admin from django.urls import reverse, resolve from troggle.core.views import surveys, logbooks, other, caves, statistics, survex from troggle.core.views.other import troggle404, frontpage from troggle.core.views.caves import ent, prospecting_image from troggle.core.views.statistics import pathsreport, stats from troggle.core.views.expo import expofiles_redirect, expofilessingle, expopage, editexpopage, mediapage from troggle.core.views.survex import survexcaveslist, survexcavesingle, svx """This sets the actualurlpatterns[] and urlpatterns[] lists which django uses to resolve urls - in both directions as these are declarative. HOW THIS WORKS This is a "url dispatcher" - something needed by every web framework. url( , , ) 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. The API urls return TSV or JSON and are new in July 2020. """ #handler404 = 'troggle.core.views.other.troggle404' # can't get this to work. but 404.html is default anyway # 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. if settings.EXPOFILESREMOTE: expofilesurls = [ url(r'^(?P.*)$', expofiles_redirect, name="expofiles_redirect"), # to expo.survex.com/expofiles ] else: expofilesurls = [ url(r'^(?P.*)$', expofilessingle, name="single"), # local copy of EXPOFILES ] trogglepatterns = [ url(r'^expofiles/', include(expofilesurls)), url(r'^troggle$', other.frontpage, name="frontpage"), # control panel. Shows recent actions. url(r'^caves$', caves.caveindex, name="caveindex"), url(r'^indxal.htm$', caves.caveindex, name="caveindex"), # ~420 hrefs to this url in expoweb files url(r'^people/?$', logbooks.personindex, name="personindex"), url(r'^admin/doc/', include('django.contrib.admindocs.urls')), # needs docutils Python module (http://docutils.sf.net/). url(r'^admin/', admin.site.urls), # setting LOGIN_URL = '/accounts/login/' is default #url(r'^accounts/', include('registration.backends.default.urls')), # deprecated, replace with .model_activation.urls url(r'^accounts/', include('registration.backends.model_activation.urls')), # deprecated in Dj3.0, but must not be commented out. url(r'^accounts/', include('django.contrib.auth.urls')), # from Dj3.0, see site-packages\registration\auth_urls_classes.py url(r'^newqmnumber/?$', other.ajax_QM_number, ), # url(r'^lbo_suggestions/?$', logbook_entry_suggestions), #broken, removed. # url(r'^person/(?P\d*)/?$', logbooks.person), url(r'^person/(?P[A-Z]*[a-z\-\'&;]*)[^a-zA-Z]*(?P[a-z\-\']*[^a-zA-Z]*[A-Z]*[a-z\-&;]*)/?', logbooks.person, name="person"), # url(r'^person/(\w+_\w+)$', logbooks.person, name="person"), # url(r'^personform/(.*)$', personForm), url(r'^expedition/(\d+)$', logbooks.expedition, name="expedition"), url(r'^api/expeditions_tsv$', logbooks.Expeditions_tsvListView.as_view()), url(r'^api/expeditions_json$', logbooks.Expeditions_jsonListView.as_view()), url(r'^personexpedition/(?P[A-Z]*[a-z&;]*)[^a-zA-Z]*(?P[A-Z]*[a-zA-Z&;]*)/(?P\d+)/?$', logbooks.personexpedition, name="personexpedition"), url(r'^logbookentry/(?P.*)/(?P.*)/?$', logbooks.logbookentry,name="logbookentry"), # url(r'^newlogbookentry/(?P.*)$', logbooks.newLogbookEntry, name="newLogBookEntry"), # Needed ! # url(r'^editlogbookentry/(?P[^/]*)/(?P[^/]*)/(?P[^/]*)/$', logbooks.newLogbookEntry, name="editLogBookEntry"), # working ! # url(r'^deletelogbookentry/(?P[^/]*)/(?P[^/]*)/(?P[^/]*)/$', logbooks.deleteLogbookEntry, name="deleteLogBookEntry"), url(r'^newfile', other.newFile, name="newFile"), # oddly broken, needs investigating more url(r'^getEntrances/(?P.*)', caves.get_entrances, name = "get_entrances"), #works # e.g. /getEntrances/1623-161 url(r'^getQMs/(?P.*)', caves.get_qms, name = "get_qms"), # no template "get_qms"? url(r'^getPeople/(?P.*)', logbooks.get_people, name = "get_people"), # fails url(r'^getLogBookEntries/(?P.*)', logbooks.get_logbook_entries, name = "get_logbook_entries"), #works url(r'^cave/new/$', caves.edit_cave, name="newcave"), url(r'^cave/(?P[^/]+)/?$', caves.cave, name="cave"), url(r'^cave/(?P[^/]+)/?(?P[^/])$', ent), # view_caves.ent url(r'^cave/(?P[^/]+)/edit/$', caves.edit_cave, name="edit_cave"), url(r'^cave/(?P[^/]+)/(?P\d\d\d\d)-(?P\d*)(?P[ABCDX]?)?$', caves.qm, name="qm"), url(r'^caveslug/([^/]+)/?$', caves.caveSlug, name="caveSlug"), url(r'^cave/entrance/([^/]+)/?$', caves.caveEntrance), url(r'^cave/description/([^/]+)/?$', caves.caveDescription), url(r'^cave/qms/([^/]+)/?$', caves.caveQMs), # blank page url(r'^cave/logbook/([^/]+)/?$', caves.caveLogbook), url(r'^cave/3d/(?P[^/]+).3d$', caves.cave3d, name="cave3d"), url(r'^entrance/(?P[^/]+)/(?P[^/]+)/edit/', caves.editEntrance, name = "editentrance"), url(r'^entrance/new/(?P[^/]+)/', caves.editEntrance, name = "newentrance"), url(r'^prospecting_guide/$', caves.prospecting), url(r'^logbooksearch/(.*)/?$', logbooks.logbookSearch), url(r'^statistics/?$', statistics.stats, name="stats"), url(r'^stats/?$', statistics.stats, name="stats"), url(r'^pathsreport.*$', statistics.pathsreport, name="pathsreport"), url(r'^controlpanel/?$', other.controlPanel, name="controlpanel"), url(r'^logbook(?P\d\d\d\d)\.(?P.*)/?$', other.downloadLogbook), url(r'^logbook/?$', other.downloadLogbook, name="downloadlogbook"), url(r'^cave/(?P[^/]+)/qm\.csv/?$', other.downloadQMs, name="downloadqms"), url(r'^downloadqms$', other.downloadQMs), # url(r'^map/', .........), # Intercepted by Apache. Yields OpenStreetMap. Redirects to expoweb/map url(r'^survexfile/(?P.*?)\.svx$', survex.svx, name="svx"), url(r'^survexfile/(?P.*?)\.3d$', survex.threed, name="threed"), url(r'^survexfile/(?P.*?)\.log$', survex.svxraw), url(r'^survexfile/(?P.*?)\.err$', survex.err), url(r'^survexfile/caves/$', survex.survexcaveslist, name="survexcaveslist"), url(r'^survexfile/(?P.*)$', survex.survexcavesingle, name="survexcavessingle"), url(r'^survey_scans/$', surveys.surveyscansfolders, name="surveyscansfolders"), url(r'^survey_scans/(?P[^/]+)/$', surveys.surveyscansfolder, name="surveyscansfolder"), url(r'^survey_scans/(?P[^/]+)/(?P[^/]+)$', surveys.surveyscansingle, name="surveyscansingle"), url(r'^tunneldata/$', surveys.tunneldata, name="tunneldata"), url(r'^tunneldataraw/(?P.+?\.xml)$', surveys.tunnelfilesingle, name="tunnelfile"), # url(r'^tunneldatainfo/(?P.+?\.xml)$', surveys.tunnelfileinfo, name="tunnelfileinfo"), url(r'^tunneldataraw/(?P.+?\.xml)/upload$', surveys.tunnelfileupload, name="tunnelfileupload"), url(r'^prospecting/(?P[^.]+).png$', prospecting_image, name="prospecting_image"), url(r'^photos/(?P.*)$', mediapage, {'doc_root': settings.PHOTOS_ROOT}, name="mediapage"), # photo galleries url(r'^site_media/(?P.*)$', mediapage, {'doc_root': settings.MEDIA_ROOT}, name="mediapage"), # MEDIA_ROOT: CSS and JS url(r'^static/(?P.*)$', mediapage, {'doc_root': settings.STATIC_ROOT}, name="mediapage"), # STATIC: CSS and JS url(r'^(.*)_edit$', editexpopage, name="editexpopage"), url(r'^(.*)$', expopage, name="expopage"), # CATCHALL assumed relative to EXPOWEB ] # do not allow DIR_ROOT prefix to all urls urlpatterns = [ # url('^%s' % settings.DIR_ROOT, include(trogglepatterns)) url('', include(trogglepatterns)) ] # When apache is running these prempt Django so Django never sees them. # NEW apache configurations suggested as of 20 March 2021: # Alias /site-media/ /home/expo/troggle/media/ # Alias /robots.txt /home/expo/troggle/media/robots.txt # Alias /favicon.ico /home/expo/troggle/media/favicon.ico # comes from /expoweb/* when running runserver # Alias /javascript /home/expo/troggle/media/javascript # Copy of old standard apache configurations: # Alias /expofiles /home/expo/expofiles # Alias /photos /home/expo/webphotos # Alias /map /home/expo/expoweb/map # Alias /javascript /usr/share/javascript # to be changed # Alias /robots.txt /home/expo/static/robots.txt # to be changed # Alias /favicon.ico /home/expo/static/favicon.ico # to be changed # Alias /static/ /home/expo/static/ # ScriptAlias /repositories /home/expo/config/apache/services/hgweb/hgweb.cgi # ScriptAlias /boe /home/expo/boe/boc/boc.pl # ScriptAlias /boe-lastyear /home/expo/boe/boc-previous/boc.pl