diff --git a/core/forms.py b/core/forms.py index 42ed0e0..a7b44db 100644 --- a/core/forms.py +++ b/core/forms.py @@ -15,7 +15,8 @@ from troggle.core.models.caves import Cave, LogbookEntry, QM, Entrance, CaveAndE Some are not used and need renovating or destroying. ''' -todo = '''Fix UploadFileForm - long list of actions +todo = '''Remove UploadFileForm - replace by Simple variant +Re engineer Simple upload to not use a Django form object ''' diff --git a/core/views/expo.py b/core/views/expo.py index a312143..b454df9 100644 --- a/core/views/expo.py +++ b/core/views/expo.py @@ -89,7 +89,7 @@ def expofilessingle(request, filepath): def expofilesdir(request, dirpath, filepath): '''does a directory display. If there is an index.html file we should display that. - - dirpath is a full Path() resolved including lcoal machine /expofiles/ + - dirpath is a full Path() resolved including local machine /expofiles/ - filepath is a Path() and it does not have /expofiles/ in it ''' #print(f' - expofilesdir {dirpath} settings.EXPOFILESREMOTE: {settings.EXPOFILESREMOTE}') diff --git a/core/views/other.py b/core/views/other.py index 89fac23..186616a 100644 --- a/core/views/other.py +++ b/core/views/other.py @@ -204,25 +204,63 @@ def ajax_test(request): @login_required_if_public -def scanupload(request, year='2050'): - print(f'! - FORM scanupload - start') +def scanupload(request, wallet=None): + '''Upload one scanned image file into a wallet on /expofiles + ''' + filesaved = False + actual_saved = [] + 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] + 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}' + + if int(wnumber) == 0: + prev = f'{int(wnumber):02d}' + + wallet = wallet.replace(':','#') + dirpath = Path(settings.SURVEY_SCANS, year, wallet) + if request.method == 'POST': form = SimpleUploadFileForm(request.POST,request.FILES) if form.is_valid(): #form.save() # comment out so nothing saved in MEDIA_ROOT/fileuploads f = request.FILES["simplefile"] w = request.POST["title"] - print(f'! - FORM scanupload uploaded {f.name}') + multiple = request.FILES.getlist('simplefile') fs = FileSystemStorage(os.path.join(settings.SURVEY_SCANS, year, w)) - actual_saved = fs.save(f.name, content=f) # name may chnage to avoid clash - # INSERT check if name is changed, to allow user to abort and rename - or lets do a chaecjk anyway. - - print(f'! - FORM scanupload {actual_saved}') - - form = SimpleUploadFileForm() - return render(request, 'scanuploadform.html', {'form': form,'filesaved': True, 'actual_saved': actual_saved}) + actual_saved = [] + if multiple: + for f in multiple: + actual_saved.append( fs.save(f.name, content=f) ) + print(f'! - FORM scanupload multiple {actual_saved}') + filesaved = True + + files = [] + dirs = [] + print(f'! - FORM scanupload - start {wallet} {dirpath}') + try: + for f in dirpath.iterdir(): + if f.is_dir(): + dirs.append(f.name) + if f.is_file(): + if f.name != 'contents.json' and f.name != 'walletindex.html': + files.append(f.name) + except FileNotFoundError: + files.append('(no wallet yet - would be created)') + if len(files) ==0 : + files.append('(no image files in wallet)') + else: form = SimpleUploadFileForm() - return render(request, 'scanuploadform.html', {'form':form,}) + return render(request, 'scanuploadform.html', + {'form': form, 'wallet': wallet, 'year': year, 'prev': prev, 'next': next, 'prevy': prevy, 'nexty': nexty, 'files': files, 'dirs': dirs, 'filesaved': filesaved, 'actual_saved': actual_saved}) diff --git a/templates/base.html b/templates/base.html index c10f2ab..ccc6982 100644 --- a/templates/base.html +++ b/templates/base.html @@ -32,6 +32,7 @@ <a href="/survexfile/">Survex</a> | <a href="{% url "survexcaveslist" %}">All Survex</a> | <a href="{% url "allwallets" %}">Scans</a> | + <a href="{% url "scanupload" '2021:01' %}">Upload Scans</a> | <a href="{% url "dwgdata" %}">Drawings</a> | <a href="/1623/290/290.html">290 (FGH)</a> | <a href="/1623/291/291">291 (GSH)</a> | diff --git a/templates/scanuploadform.html b/templates/scanuploadform.html index c08a165..ed16301 100644 --- a/templates/scanuploadform.html +++ b/templates/scanuploadform.html @@ -4,15 +4,27 @@ {% block content %} -<h2>Survey Scan upload into Wallet</h2> +<h2>Scanned notes or survey upload into wallet </h2> +<p style="font-family: monospace; font-weight: bold; font-size: 130%; text-align: center"> +<a style="font-weight: normal;" href="/scanupload/{{prevy}}:01">{{prevy}}</a> + ... +<a href="/scanupload/{{year}}:{{prev}}">{{year}}:{{prev}}</a> +← {{wallet}} → +<a href="/scanupload/{{year}}:{{next}}">{{year}}:{{next}}</a> + ... +<a style="font-weight: normal;" href="/scanupload/{{nexty}}:01">{{nexty}}</a> +</p> - -<div style="column-count: 2;"> - <div style = "max-width:40%px; " > + <div style = "max-width:40%;"> + {% if filesaved %} <p style="margin-left:20%;"> - <b>The file was saved as <em>'{{actual_saved}}'</em> <br><br>Upload another?</b> + <b>File(s) saved as + {% for f in actual_saved %} + <em>'{{f}}'</em> + {% endfor %} + <br><br>Upload more?</b> </p> <br> {% endif %} @@ -21,22 +33,24 @@ <form method ='post' enctype ="multipart/form-data"> {% csrf_token %} <br> - <input type = "file" style = "margin-left:20%;" - placeholder = "Simplefile" name = "simplefile" id="files"><label for="files">Scan file(s)</label> + <input type = "file" multiple="multiple" style = "margin-left:20%;" + placeholder = "Simplefile" name = "simplefile" id="files"> <br> <br> - <input type = "text" style = "margin-left:20%;" - placeholder = "Wallet id e.g. 2021#23" name = "title" value='2050#99'id="wallet"><label for="wallet"> Wallet id</label> + <input type = "text" size = "8" style = "margin-left:20%;" + placeholder = "Wallet id e.g. 2021#23" name = "title" value='{{wallet}}'id="wallet"><label for="wallet"> Wallet id</label> - </div> - <div style = "max-width:30%;"> <center> <button style = "color: #fff; border:1px; background-color:#999; margin-top:8%; height:35px; width:80%; margin-left:19%;" type = "submit" value = "Upload" > <strong>Upload</strong> </button> </center> - </div> </form> </div> -</div> + + <p style="margin-left:20%;"> +{% for f in files %} +<a href="/expofiles/surveyscans/{{year}}/{{wallet|urlencode}}/{{f}}">{{ f}}</a><br /> +{% endfor %} +</p> {% endblock %} diff --git a/urls.py b/urls.py index 14aa34a..4b4ccf8 100644 --- a/urls.py +++ b/urls.py @@ -78,7 +78,7 @@ trogglepatterns = [ 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 - path('scanupload', scanupload, name='scanupload'), + path('scanupload/<wallet>', scanupload, name='scanupload'), # setting LOGIN_URL = '/accounts/login/' is default # url ENDS WITH this string @@ -129,9 +129,9 @@ trogglepatterns = [ path('pathsreport', statistics.pathsreport, name="pathsreport"), path('dataissues', statistics.dataissues, name="dataissues"), - path(r'troggle', frontpage, name="frontpage"), # control panel. Shows recent actions. - path(r'todo/<path:module>', todos, name="todos"), - path(r'controlpanel', controlpanel, name="controlpanel"), + path('troggle', frontpage, name="frontpage"), # control panel. Shows recent actions. + path('todo/<path:module>', todos, name="todos"), + path('controlpanel', controlpanel, name="controlpanel"), # The survexfile pages path('survexfile', survex.survexcavesingle, {'survex_cave': ''}, name="survexcavessingle"), @@ -148,8 +148,8 @@ trogglepatterns = [ # The survey scans in the wallets path('survey_scans/', allwallets, name="allwallets"), - path('survey_scans/<path>/', singlewallet, name="singlewallet"), - path('survey_scans/<path>/<file>', scansingle, name="scansingle"), + path('survey_scans/<path:path>/', singlewallet, name="singlewallet"), + path('survey_scans/<path:path>/<file>', scansingle, name="scansingle"), # The tunnel and therion drawings files pages re_path(r'^dwgdata/$', dwgdata, name="dwgdata"),