use new upload page for most wallets

This commit is contained in:
Philip Sargent
2022-03-18 11:28:35 +00:00
parent e4ee4abce8
commit af7fc8f243
5 changed files with 145 additions and 121 deletions

View File

@@ -20,11 +20,14 @@ need to check if inavlid query string is invalid, or produces multiple replies
and render a user-friendly error page. and render a user-friendly error page.
''' '''
def singlewallet(request, path): def oldwallet(request, path):
#print [ s.walletname for s in Wallet.objects.all() ] '''Now called only for non-standard wallet structures for pre-2000 wallets
'''
# print([ s.walletname for s in Wallet.objects.all() ])
print(f'! - oldwallet path:{path}')
try: try:
wallet = Wallet.objects.get(walletname=urlunquote(path)) wallet = Wallet.objects.get(walletname=urlunquote(path))
return render(request, 'wallet.html', { 'wallet':wallet, 'settings': settings }) return render(request, 'wallet_old.html', { 'wallet':wallet, 'settings': settings })
except: except:
message = f'Scan folder error or not found \'{path}\' .' message = f'Scan folder error or not found \'{path}\' .'
return render(request, 'errors/generic.html', {'message': message}) return render(request, 'errors/generic.html', {'message': message})

View File

@@ -2,6 +2,7 @@ import re, os
import subprocess import subprocess
import json import json
import settings import settings
import urllib
from pathlib import Path from pathlib import Path
@@ -15,6 +16,7 @@ from django.shortcuts import render
from django.template import Context, loader from django.template import Context, loader
from django.core.files.storage import FileSystemStorage, default_storage from django.core.files.storage import FileSystemStorage, default_storage
#from troggle import settings #from troggle import settings
from troggle.parsers.imports import import_caves, import_people, import_surveyscans from troggle.parsers.imports import import_caves, import_people, import_surveyscans
from troggle.parsers.imports import import_logbooks, import_QMs, import_drawingsfiles, import_survex from troggle.parsers.imports import import_logbooks, import_QMs, import_drawingsfiles, import_survex
@@ -24,6 +26,8 @@ from troggle.core.models.troggle import DataIssue
from troggle.core.models.troggle import Expedition, Person, PersonExpedition from troggle.core.models.troggle import Expedition, Person, PersonExpedition
from troggle.core.models.caves import LogbookEntry, QM, Cave, PersonTrip from troggle.core.models.caves import LogbookEntry, QM, Cave, PersonTrip
from troggle.core.models.survex import DrawingFile from troggle.core.models.survex import DrawingFile
from troggle.core.views.scans import oldwallet
from .auth import login_required_if_public from .auth import login_required_if_public
#from django.views.decorators.csrf import ensure_csrf_cookie, csrf_exempt #from django.views.decorators.csrf import ensure_csrf_cookie, csrf_exempt
@@ -88,7 +92,7 @@ xlate = {"url": "description url",
} }
@login_required_if_public @login_required_if_public
def scanupload(request, wallet=None): def scanupload(request, path=None):
'''Upload scanned image files into a wallet on /expofiles '''Upload scanned image files into a wallet on /expofiles
Also display and edit the contents.json data in the wallet. Also display and edit the contents.json data in the wallet.
@@ -100,14 +104,22 @@ def scanupload(request, wallet=None):
checkboxes = ["description written", "survex not required", "qms written", "website updated", checkboxes = ["description written", "survex not required", "qms written", "website updated",
"plan not required", "plan drawn", "elev not required", "elev drawn", "electronic survey" ] "plan not required", "plan drawn", "elev not required", "elev drawn", "electronic survey" ]
if path:
wallet = urllib.parse.unquote(path)
else:
wallet = "2022#01" # improve this later
# print(f'! - FORM scanupload - start {wallet}')
if wallet is None:
wallet = "2021#01" # improve this later
if not re.match('(19|20)\d\d:\d\d', wallet):
wallet = "2021:01" # improve this later
year = wallet[:4] year = wallet[:4]
if int(year) <= 1999:
print(f'! - FORM scanupload - start {wallet} REDIRECT TO OLDWALLET')
return(oldwallet(request, path))
if not re.match('(19|20)\d\d[:#]\d\d', wallet):
wallet = "2022:01" # improve this later
print(f'! - FORM scanupload - start {wallet}')
if path:
print(f'! - FORM scanupload - start wallet:{wallet}: path:{path}:')
if int(year) < 1977: if int(year) < 1977:
year = "1977" year = "1977"
if int(year) > 2050: if int(year) > 2050:
@@ -115,6 +127,7 @@ def scanupload(request, wallet=None):
nexty = f'{int(year)+1}' nexty = f'{int(year)+1}'
prevy = f'{int(year)-1}' prevy = f'{int(year)-1}'
wnumber = wallet[5:] wnumber = wallet[5:]
next = f'{int(wnumber)+1:02d}' next = f'{int(wnumber)+1:02d}'
prev = f'{int(wnumber)-1:02d}' prev = f'{int(wnumber)-1:02d}'

View File

@@ -57,107 +57,109 @@
</div> </div>
<hr /> <hr />
<br> {% if not create %}
<span style="font-family: monospace; font-size: 150%; "> <br>
{% if cave %}<u>Cave ID</u>: <b>{{cave}}</b><br> {% endif %} <span style="font-family: monospace; font-size: 150%; ">
{% if psg %}<u>Survey area</u>: <b>{{psg}}</b><br>{% endif %} {% if cave %}<u>Cave ID</u>: <b>{{cave}}</b><br> {% endif %}
{% if svxfiles %}<u>Survey files</u>: {% if psg %}<u>Survey area</u>: <b>{{psg}}</b><br>{% endif %}
{% for svx in svxfiles%} {% if svxfiles %}<u>Survey files</u>:
<a href="/survexfile/{{svx}}">{{svx}}</a> {% for svx in svxfiles%}
{% endfor %} <a href="/survexfile/{{svx}}">{{svx}}</a>
{% endfor %}
<br><br> <br><br>
{% endif %} {% endif %}
</span> </span>
<span style="font-family: monospace; font-size: 130%; "> <span style="font-family: monospace; font-size: 130%; ">
<!-- <!--
<table style="border: 1px; border-style: hidden;> <table style="border: 1px; border-style: hidden;>
{% for d, value in waldata.items %} {% for d, value in waldata.items %}
<tr style="border-style: hidden;"> <tr style="border-style: hidden;">
<td style="border-style: hidden; padding-right: 3em;">{{d}}</td> <td style="border-style: hidden; padding-right: 3em;">{{d}}</td>
<td> <b>{{value}}</b></td> <td> <b>{{value}}</b></td>
</tr> </tr>
{% empty %} {% empty %}
<p>&lt;No JSON data here&gt; <p>&lt;No JSON data here&gt;
{% endfor %} {% endfor %}
</table> </table>
--> -->
</span> </span>
<style> <style>
input {font-family: monospace; font-weight: bold; font-size: 100%; padding: 0.5em; } input {font-family: monospace; font-weight: bold; font-size: 100%; padding: 0.5em; }
</style> </style>
<div style = "max-width:100%; margin-left:15%; font-family: monospace; font-weight: bold; font-size: 150%; text-align: right; " > <div style = "max-width:100%; margin-left:15%; font-family: monospace; font-weight: bold; font-size: 150%; text-align: right; " >
<form method ='post'> <form method ='post'>
{% csrf_token %} {% csrf_token %}
<label for="date">Date of the survey trip</label> <label for="date">Date of the survey trip</label>
<input <input
label = "Date" name = "date" size="12" label = "Date" name = "date" size="12"
title="Date of the trip in ISO format: 2020-08-17" title="Date of the trip in ISO format: 2020-08-17"
placeholder="{{date}}" value="{{date}}" required /> placeholder="{{date}}" value="{{date}}" required />
<br> <br>
<label for="cave">Cave ID</label> <label for="cave">Cave ID</label>
<input <input
label = "Cave" name = "cave" size="12" label = "Cave" name = "cave" size="12"
title="Cave id e.g. 2017-DM-01 or 1623/256" title="Cave id e.g. 2017-DM-01 or 1623/256"
placeholder="{{cave}}" value="{{cave}}" /> placeholder="{{cave}}" value="{{cave}}" />
<br> <br>
<label for="psg">Survey area</label> <label for="psg">Survey area</label>
<input <input
label = "Survey area" name = "psg" size ="{{psgsize}}" label = "Survey area" name = "psg" size ="{{psgsize}}"
title="Survey area, e.g. White Elephant or Nieder Augst Eck" title="Survey area, e.g. White Elephant or Nieder Augst Eck"
placeholder="{{psg}}" value="{{psg}}" /> placeholder="{{psg}}" value="{{psg}}" />
<br> <br>
<label for="plannr">Plan not required ?</label> <label for="plannr">Plan not required ?</label>
<input type="checkbox" name="plannr" id="plannr" value=" True" {% if "plan not required" in checked %}checked{% endif %}> <input type="checkbox" name="plannr" id="plannr" value=" True" {% if "plan not required" in checked %}checked{% endif %}>
<br> <br>
<label for="elevnr">Elevation not required ?</label> <label for="elevnr">Elevation not required ?</label>
<input type="checkbox" name="elevnr" id="elevnr" value="True" {% if "elev not required" in checked %}checked{% endif %}> <input type="checkbox" name="elevnr" id="elevnr" value="True" {% if "elev not required" in checked %}checked{% endif %}>
<br> <br>
<label for="survexvnr">Survex file not required ?</label> <label for="survexvnr">Survex file not required ?</label>
<input type="checkbox" name="survexvnr" id="survexvnr" value="True" {% if "survex not required" in checked %}checked{% endif %}> <input type="checkbox" name="survexvnr" id="survexvnr" value="True" {% if "survex not required" in checked %}checked{% endif %}>
<br> <br>
<label for="pland">Plan drawn ?</label> <label for="pland">Plan drawn ?</label>
<input type="checkbox" name="pland" id="pland" value="True" {{chkpland}} {% if "plan drawn" in checked %}checked{% endif %}> <input type="checkbox" name="pland" id="pland" value="True" {{chkpland}} {% if "plan drawn" in checked %}checked{% endif %}>
<br> <br>
<label for="elevd">Elevation drawn ?</label> <label for="elevd">Elevation drawn ?</label>
<input type="checkbox" name="elevd" id="elevd" value="True" {% if "elev drawn" in checked %}checked{% endif %}> <input type="checkbox" name="elevd" id="elevd" value="True" {% if "elev drawn" in checked %}checked{% endif %}>
<br> <br>
<label for="descriptionw">Cave description written ?</label> <label for="descriptionw">Cave description written ?</label>
<input type="checkbox" name="descriptionw" id="descriptionw" value="True" {% if "description written" in checked %}checked{% endif %}> <input type="checkbox" name="descriptionw" id="descriptionw" value="True" {% if "description written" in checked %}checked{% endif %}>
<br> <br>
<label for="qmsw">QMs written ?</label> <label for="qmsw">QMs written ?</label>
<input type="checkbox" name="qmsw" id="qmsw" value="True" {% if "qms written" in checked %}checked{% endif %}> <input type="checkbox" name="qmsw" id="qmsw" value="True" {% if "qms written" in checked %}checked{% endif %}>
<br> <br>
<label for="websiteupt">Website updated ?</label> <label for="websiteupt">Website updated ?</label>
<input type="checkbox" name="websiteupt" id="websiteupt" value="True" {% if "website updated" in checked %}checked{% endif %}> <input type="checkbox" name="websiteupt" id="websiteupt" value="True" {% if "website updated" in checked %}checked{% endif %}>
<br> <br>
<label for="electronic">Electronic survey ?</label> <label for="electronic">Electronic survey ?</label>
<input type="checkbox" name="electronic" id="electronic" value="True" {% if "electronic survey" in checked %}checked{% endif %}> <input type="checkbox" name="electronic" id="electronic" value="True" {% if "electronic survey" in checked %}checked{% endif %}>
<br> <br>
<label for="people">List of people on the survey trip</label> <label for="people">List of people on the survey trip</label>
<input <input
label = "People" name = "people" size ="{{peoplesize}}" label = "People" name = "people" size ="{{peoplesize}}"
title="List of people on the survey trip" title="List of people on the survey trip"
placeholder="{{people}}" value="{{people}}" /> placeholder="{{people}}" value="{{people}}" />
<br> <br>
<label for="url">URL of cave description</label> <label for="url">URL of cave description</label>
<input <input
label = "URL" name = "url" size ="{{urlsize}}" label = "URL" name = "url" size ="{{urlsize}}"
title="URL of cave description, e.g. /1623/264/264.html" title="URL of cave description, e.g. /1623/264/264.html"
placeholder="{{url}}" value="{{url}}" /> placeholder="{{url}}" value="{{url}}" />
<br> <br>
<label for="survex">List of survex files</label> <label for="survex">List of survex files</label>
<input <input
label = "survex" name = "survex" size ="{{survexsize}}" label = "survex" name = "survex" size ="{{survexsize}}"
title="List of survex files using this data" title="List of survex files using this data"
placeholder="{{survex}}" value="{{survex}}" /> placeholder="{{survex}}" value="{{survex}}" />
<br><br> <br><br>
<button class="fancybutton" style="padding: 0.5em 25px; margin-left: 155px; font-size: 90%; " <button class="fancybutton" style="padding: 0.5em 25px; margin-left: 155px; font-size: 90%; "
type = "submit" value = "Edit" > type = "submit" value = "Edit" >
Submit changes Submit changes
</button> </button>
</form> </form>
</div> </div>
{% endif %} <!-- not create -->
{% endblock %} {% endblock %}

View File

@@ -2,7 +2,9 @@
{% block title %}Survey Scans Wallet {% endblock %} {% block title %}Survey Scans Wallet {% endblock %}
{% block content %} {% block content %}
<h3>Survey Scans in: {{wallet.walletname}}</h3> <h3>Survey Scans in old wallet: {{wallet.walletname}}</h3>
<p>Wallets of 1999 and earlier are in a different structure and have not yet been edited to conform to the current
name format and folder structure.
<table> <table>
{% for singlescan in wallet.singlescan_set.all %} {% for singlescan in wallet.singlescan_set.all %}
<tr> <tr>
@@ -17,7 +19,9 @@
</table> </table>
<h3>Survex surveys referring to this wallet</h3> <h3>Survex surveys referring to this wallet</h3>
<p><b>*ref</b> references have not been configured in most old survex files,
so it is unlikley that you will see anything here. To find survex files for this year look in the
survex column of the <a href="/expedition/1999">expedition page</a>.
<table> <table>
{% for survexblock in wallet.survexblock_set.all %} {% for survexblock in wallet.survexblock_set.all %}
<tr> <tr>

20
urls.py
View File

@@ -8,7 +8,7 @@ from django.contrib import auth
from django.urls import path, reverse, resolve from django.urls import path, reverse, resolve
from troggle.core.views import caves, statistics, survex from troggle.core.views import caves, statistics, survex
from troggle.core.views.scans import scansingle, singlewallet, allwallets from troggle.core.views.scans import scansingle, allwallets
from troggle.core.views.drawings import dwgallfiles, dwgfilesingle from troggle.core.views.drawings import dwgallfiles, dwgfilesingle
from troggle.core.views.uploads import dwgupload, scanupload, photoupload from troggle.core.views.uploads import dwgupload, scanupload, photoupload
from troggle.core.views.other import troggle404, frontpage, todos, controlpanel, frontpage from troggle.core.views.other import troggle404, frontpage, todos, controlpanel, frontpage
@@ -86,7 +86,8 @@ trogglepatterns = [
re_path(r'^admin/', admin.site.urls), # includes admin login & logout urls re_path(r'^admin/', admin.site.urls), # includes admin login & logout urls
# Uploads - uploading a file # Uploads - uploading a file
path('scanupload/<wallet>', scanupload, name='scanupload'), # wallet=2020#01, not a path path('scanupload/', scanupload, name='scanupload'), # path=2020#01
path('scanupload/<path:path>', scanupload, name='scanupload'), # path=2020#01
path('photoupload/', photoupload, name='photoupload'), # restricted to current year path('photoupload/', photoupload, name='photoupload'), # restricted to current year
path('photoupload/<path:folder>', photoupload, name='photoupload'), # restricted to current year path('photoupload/<path:folder>', photoupload, name='photoupload'), # restricted to current year
path('dwgupload/<path:folder>', dwgupload, name='dwgupload'), path('dwgupload/<path:folder>', dwgupload, name='dwgupload'),
@@ -94,7 +95,8 @@ trogglepatterns = [
path('dwguploadnogit/', dwgupload, {'gitdisable': 'yes'}, name='dwguploadnogit'), # used in testing path('dwguploadnogit/', dwgupload, {'gitdisable': 'yes'}, name='dwguploadnogit'), # used in testing
path('dwguploadnogit/<path:folder>', dwgupload, {'gitdisable': 'yes'}, name='dwguploadnogit'), # used in testing path('dwguploadnogit/<path:folder>', dwgupload, {'gitdisable': 'yes'}, name='dwguploadnogit'), # used in testing
# setting LOGIN_URL = '/accounts/login/' is default # setting LOGIN_URL = '/accounts/login/' is default.
# NB setting url pattern name to 'login' instea dof 'expologin' with override Django, see https://docs.djangoproject.com/en/4.0/topics/http/urls/#naming-url-patterns
path('accounts/logout/', expologout, name='expologout'), # same as in django.contrib.auth.urls 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 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 #re_path(r'^accounts/', include('django.contrib.auth.urls')), # see site-packages\registration\auth_urls_classes.py
@@ -124,13 +126,13 @@ trogglepatterns = [
re_path(r'^newcave/$', caves.edit_cave, name="newcave"), re_path(r'^newcave/$', caves.edit_cave, name="newcave"),
re_path(r'^cave/3d/(?P<cave_id>[^/]+)$', caves.cave3d, name="cave3d"), re_path(r'^cave/3d/(?P<cave_id>[^/]+)$', caves.cave3d, name="cave3d"),
re_path(r'^cave/description/([^/]+)/?$', caves.caveDescription), re_path(r'^cave/description/([^/]+)/?$', caves.caveDescription), #!!!BAD, local links fail..
re_path(r'^cave/(?P<cave_id>[^/]+)/?$', caves.cave, name="cave"), #!!!BAD, local links fail.. to be checked.. re_path(r'^cave/(?P<cave_id>[^/]+)/?$', caves.cave, name="cave"), #!!!BAD, local links fail.. to be checked..
re_path(r'^cave/(?P<cave_id>[^/]+)/?(?P<ent_letter>[^/])$', ent), # view_caves.ent re_path(r'^cave/(?P<cave_id>[^/]+)/?(?P<ent_letter>[^/])$', ent), #!!!BAD, local links fail..# view_caves.ent
re_path(r'^cave/(?P<slug>[^/]+)/edit/$', caves.edit_cave, name="edit_cave"), re_path(r'^cave/(?P<slug>[^/]+)/edit/$', caves.edit_cave, name="edit_cave"),
re_path(r'^(?P<karea>\d\d\d\d)(?P<subpath>.*)$', cavepage, name="cavepage"), # shorthand /1623/264 BUT url links break! Stop this.. re_path(r'^(?P<karea>\d\d\d\d)(?P<subpath>.*)$', cavepage, name="cavepage"), # shorthand /1623/264 BUT url links break! Stop this..
# Note that urls eg '1623/161/l/rl89a.htm' are handled by cavepage which redirects them to 'expopage' # Note that urls eg '/1623/161/l/rl89a.htm' are handled by cavepage which redirects them to 'expopage'
# Note that _edit$ for a cave description page in a subfolder e.g. /1623/via204.html_edit gets caught here and breaks with 404 # Note that _edit$ for a cave description page in a subfolder e.g. /1623/204/204.html_edit gets caught here and breaks with 404
# Entrances # Entrances
re_path(r'^cave/entrance/([^/]+)/?$', caves.caveEntrance), # lists all entrances !!!BAD, local links fail re_path(r'^cave/entrance/([^/]+)/?$', caves.caveEntrance), # lists all entrances !!!BAD, local links fail
@@ -163,7 +165,7 @@ trogglepatterns = [
# The survey scans in the wallets # The survey scans in the wallets
path('survey_scans/', allwallets, name="allwallets"), path('survey_scans/', allwallets, name="allwallets"),
path('survey_scans/<path:path>/', singlewallet, name="singlewallet"), path('survey_scans/<path:path>/', scanupload, name="singlewallet"), # replaced singlewallet()
path('survey_scans/<path:path>/<file>', scansingle, name="scansingle"), path('survey_scans/<path:path>/<file>', scansingle, name="scansingle"),
# The tunnel and therion drawings files pages # The tunnel and therion drawings files pages