diff options
-rw-r--r-- | core/views/scans.py | 9 | ||||
-rw-r--r-- | core/views/uploads.py | 27 | ||||
-rw-r--r-- | templates/scanuploadform.html | 202 | ||||
-rw-r--r-- | templates/wallet_old.html (renamed from templates/wallet.html) | 8 | ||||
-rw-r--r-- | urls.py | 20 |
5 files changed, 145 insertions, 121 deletions
diff --git a/core/views/scans.py b/core/views/scans.py index 6e380c2..9bf1edc 100644 --- a/core/views/scans.py +++ b/core/views/scans.py @@ -20,11 +20,14 @@ need to check if inavlid query string is invalid, or produces multiple replies and render a user-friendly error page. ''' -def singlewallet(request, path): - #print [ s.walletname for s in Wallet.objects.all() ] +def oldwallet(request, path): + '''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: 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: message = f'Scan folder error or not found \'{path}\' .' return render(request, 'errors/generic.html', {'message': message}) diff --git a/core/views/uploads.py b/core/views/uploads.py index dfaa29d..7dfa8c1 100644 --- a/core/views/uploads.py +++ b/core/views/uploads.py @@ -2,6 +2,7 @@ import re, os import subprocess import json import settings +import urllib from pathlib import Path @@ -15,6 +16,7 @@ from django.shortcuts import render from django.template import Context, loader from django.core.files.storage import FileSystemStorage, default_storage + #from troggle import settings from troggle.parsers.imports import import_caves, import_people, import_surveyscans 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.caves import LogbookEntry, QM, Cave, PersonTrip from troggle.core.models.survex import DrawingFile +from troggle.core.views.scans import oldwallet + from .auth import login_required_if_public #from django.views.decorators.csrf import ensure_csrf_cookie, csrf_exempt @@ -88,7 +92,7 @@ xlate = {"url": "description url", } @login_required_if_public -def scanupload(request, wallet=None): +def scanupload(request, path=None): '''Upload scanned image files into a wallet on /expofiles 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", "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] + 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: year = "1977" if int(year) > 2050: @@ -115,6 +127,7 @@ def scanupload(request, wallet=None): nexty = f'{int(year)+1}' prevy = f'{int(year)-1}' + wnumber = wallet[5:] next = f'{int(wnumber)+1:02d}' prev = f'{int(wnumber)-1:02d}' diff --git a/templates/scanuploadform.html b/templates/scanuploadform.html index 8f4e26e..00f40bd 100644 --- a/templates/scanuploadform.html +++ b/templates/scanuploadform.html @@ -57,107 +57,109 @@ </div> <hr /> -<br> -<span style="font-family: monospace; font-size: 150%; "> -{% if cave %}<u>Cave ID</u>: <b>{{cave}}</b><br> {% endif %} -{% if psg %}<u>Survey area</u>: <b>{{psg}}</b><br>{% endif %} -{% if svxfiles %}<u>Survey files</u>: - {% for svx in svxfiles%} - <a href="/survexfile/{{svx}}">{{svx}}</a> - {% endfor %} + {% if not create %} + <br> + <span style="font-family: monospace; font-size: 150%; "> + {% if cave %}<u>Cave ID</u>: <b>{{cave}}</b><br> {% endif %} + {% if psg %}<u>Survey area</u>: <b>{{psg}}</b><br>{% endif %} + {% if svxfiles %}<u>Survey files</u>: + {% for svx in svxfiles%} + <a href="/survexfile/{{svx}}">{{svx}}</a> + {% endfor %} -<br><br> -{% endif %} -</span> -<span style="font-family: monospace; font-size: 130%; "> -<!-- -<table style="border: 1px; border-style: hidden;> -{% for d, value in waldata.items %} -<tr style="border-style: hidden;"> - <td style="border-style: hidden; padding-right: 3em;">{{d}}</td> + <br><br> + {% endif %} + </span> + <span style="font-family: monospace; font-size: 130%; "> + <!-- + <table style="border: 1px; border-style: hidden;> + {% for d, value in waldata.items %} + <tr style="border-style: hidden;"> + <td style="border-style: hidden; padding-right: 3em;">{{d}}</td> - <td> <b>{{value}}</b></td> + <td> <b>{{value}}</b></td> -</tr> -{% empty %} - <p><No JSON data here> -{% endfor %} -</table> ---> -</span> -<style> -input {font-family: monospace; font-weight: bold; font-size: 100%; padding: 0.5em; } -</style> -<div style = "max-width:100%; margin-left:15%; font-family: monospace; font-weight: bold; font-size: 150%; text-align: right; " > - <form method ='post'> - {% csrf_token %} - <label for="date">Date of the survey trip</label> - <input - label = "Date" name = "date" size="12" - title="Date of the trip in ISO format: 2020-08-17" - placeholder="{{date}}" value="{{date}}" required /> -<br> - <label for="cave">Cave ID</label> - <input - label = "Cave" name = "cave" size="12" - title="Cave id e.g. 2017-DM-01 or 1623/256" - placeholder="{{cave}}" value="{{cave}}" /> -<br> - <label for="psg">Survey area</label> - <input - label = "Survey area" name = "psg" size ="{{psgsize}}" - title="Survey area, e.g. White Elephant or Nieder Augst Eck" - placeholder="{{psg}}" value="{{psg}}" /> -<br> - <label for="plannr">Plan not required ?</label> - <input type="checkbox" name="plannr" id="plannr" value=" True" {% if "plan not required" in checked %}checked{% endif %}> -<br> - <label for="elevnr">Elevation not required ?</label> - <input type="checkbox" name="elevnr" id="elevnr" value="True" {% if "elev not required" in checked %}checked{% endif %}> -<br> - <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 %}> -<br> - <label for="pland">Plan drawn ?</label> - <input type="checkbox" name="pland" id="pland" value="True" {{chkpland}} {% if "plan drawn" in checked %}checked{% endif %}> -<br> - <label for="elevd">Elevation drawn ?</label> - <input type="checkbox" name="elevd" id="elevd" value="True" {% if "elev drawn" in checked %}checked{% endif %}> -<br> - <label for="descriptionw">Cave description written ?</label> - <input type="checkbox" name="descriptionw" id="descriptionw" value="True" {% if "description written" in checked %}checked{% endif %}> -<br> - <label for="qmsw">QMs written ?</label> - <input type="checkbox" name="qmsw" id="qmsw" value="True" {% if "qms written" in checked %}checked{% endif %}> -<br> - <label for="websiteupt">Website updated ?</label> - <input type="checkbox" name="websiteupt" id="websiteupt" value="True" {% if "website updated" in checked %}checked{% endif %}> -<br> - <label for="electronic">Electronic survey ?</label> - <input type="checkbox" name="electronic" id="electronic" value="True" {% if "electronic survey" in checked %}checked{% endif %}> -<br> - <label for="people">List of people on the survey trip</label> - <input - label = "People" name = "people" size ="{{peoplesize}}" - title="List of people on the survey trip" - placeholder="{{people}}" value="{{people}}" /> -<br> - <label for="url">URL of cave description</label> - <input - label = "URL" name = "url" size ="{{urlsize}}" - title="URL of cave description, e.g. /1623/264/264.html" - placeholder="{{url}}" value="{{url}}" /> -<br> - <label for="survex">List of survex files</label> - <input - label = "survex" name = "survex" size ="{{survexsize}}" - title="List of survex files using this data" - placeholder="{{survex}}" value="{{survex}}" /> -<br><br> - <button class="fancybutton" style="padding: 0.5em 25px; margin-left: 155px; font-size: 90%; " - type = "submit" value = "Edit" > - Submit changes - </button> - </form> -</div> + </tr> + {% empty %} + <p><No JSON data here> + {% endfor %} + </table> + --> + </span> + <style> + input {font-family: monospace; font-weight: bold; font-size: 100%; padding: 0.5em; } + </style> + <div style = "max-width:100%; margin-left:15%; font-family: monospace; font-weight: bold; font-size: 150%; text-align: right; " > + <form method ='post'> + {% csrf_token %} + <label for="date">Date of the survey trip</label> + <input + label = "Date" name = "date" size="12" + title="Date of the trip in ISO format: 2020-08-17" + placeholder="{{date}}" value="{{date}}" required /> + <br> + <label for="cave">Cave ID</label> + <input + label = "Cave" name = "cave" size="12" + title="Cave id e.g. 2017-DM-01 or 1623/256" + placeholder="{{cave}}" value="{{cave}}" /> + <br> + <label for="psg">Survey area</label> + <input + label = "Survey area" name = "psg" size ="{{psgsize}}" + title="Survey area, e.g. White Elephant or Nieder Augst Eck" + placeholder="{{psg}}" value="{{psg}}" /> + <br> + <label for="plannr">Plan not required ?</label> + <input type="checkbox" name="plannr" id="plannr" value=" True" {% if "plan not required" in checked %}checked{% endif %}> + <br> + <label for="elevnr">Elevation not required ?</label> + <input type="checkbox" name="elevnr" id="elevnr" value="True" {% if "elev not required" in checked %}checked{% endif %}> + <br> + <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 %}> + <br> + <label for="pland">Plan drawn ?</label> + <input type="checkbox" name="pland" id="pland" value="True" {{chkpland}} {% if "plan drawn" in checked %}checked{% endif %}> + <br> + <label for="elevd">Elevation drawn ?</label> + <input type="checkbox" name="elevd" id="elevd" value="True" {% if "elev drawn" in checked %}checked{% endif %}> + <br> + <label for="descriptionw">Cave description written ?</label> + <input type="checkbox" name="descriptionw" id="descriptionw" value="True" {% if "description written" in checked %}checked{% endif %}> + <br> + <label for="qmsw">QMs written ?</label> + <input type="checkbox" name="qmsw" id="qmsw" value="True" {% if "qms written" in checked %}checked{% endif %}> + <br> + <label for="websiteupt">Website updated ?</label> + <input type="checkbox" name="websiteupt" id="websiteupt" value="True" {% if "website updated" in checked %}checked{% endif %}> + <br> + <label for="electronic">Electronic survey ?</label> + <input type="checkbox" name="electronic" id="electronic" value="True" {% if "electronic survey" in checked %}checked{% endif %}> + <br> + <label for="people">List of people on the survey trip</label> + <input + label = "People" name = "people" size ="{{peoplesize}}" + title="List of people on the survey trip" + placeholder="{{people}}" value="{{people}}" /> + <br> + <label for="url">URL of cave description</label> + <input + label = "URL" name = "url" size ="{{urlsize}}" + title="URL of cave description, e.g. /1623/264/264.html" + placeholder="{{url}}" value="{{url}}" /> + <br> + <label for="survex">List of survex files</label> + <input + label = "survex" name = "survex" size ="{{survexsize}}" + title="List of survex files using this data" + placeholder="{{survex}}" value="{{survex}}" /> + <br><br> + <button class="fancybutton" style="padding: 0.5em 25px; margin-left: 155px; font-size: 90%; " + type = "submit" value = "Edit" > + Submit changes + </button> + </form> + </div> + {% endif %} <!-- not create --> {% endblock %} diff --git a/templates/wallet.html b/templates/wallet_old.html index 51ac298..7bfac41 100644 --- a/templates/wallet.html +++ b/templates/wallet_old.html @@ -2,7 +2,9 @@ {% block title %}Survey Scans Wallet {% endblock %} {% 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> {% for singlescan in wallet.singlescan_set.all %} <tr> @@ -17,7 +19,9 @@ </table> <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> {% for survexblock in wallet.survexblock_set.all %} <tr> @@ -8,7 +8,7 @@ from django.contrib import auth from django.urls import path, reverse, resolve 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.uploads import dwgupload, scanupload, photoupload 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 # 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/<path:folder>', photoupload, name='photoupload'), # restricted to current year path('dwgupload/<path:folder>', dwgupload, name='dwgupload'), @@ -94,7 +95,8 @@ trogglepatterns = [ path('dwguploadnogit/', 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/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 @@ -124,13 +126,13 @@ trogglepatterns = [ 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/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>[^/]+)/?(?P<ent_letter>[^/])$', ent), # view_caves.ent - re_path(r'^cave/(?P<slug>[^/]+)/edit/$', caves.edit_cave, name="edit_cave"), + 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'^(?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 _edit$ for a cave description page in a subfolder e.g. /1623/via204.html_edit gets caught here and breaks with 404 + # 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/204/204.html_edit gets caught here and breaks with 404 # Entrances 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 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"), # The tunnel and therion drawings files pages |