forked from expo/troggle
Upload form for Photos
This commit is contained in:
@@ -12,6 +12,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
|
||||
# from databaseReset import reinit_db # don't do this. databaseRest runs code *at import time*
|
||||
@@ -19,6 +20,7 @@ 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 .auth import login_required_if_public
|
||||
#from django.views.decorators.csrf import ensure_csrf_cookie, csrf_exempt
|
||||
|
||||
'''File upload 'views'
|
||||
'''
|
||||
@@ -42,6 +44,9 @@ todo = '''
|
||||
class FilesForm(forms.Form): # not a model-form, just a form-form
|
||||
uploadfiles = forms.FileField()
|
||||
|
||||
class TextForm(forms.Form): # not a model-form, just a form-form
|
||||
photographer = forms.CharField(strip=True)
|
||||
|
||||
@login_required_if_public
|
||||
def scanupload(request, wallet=None):
|
||||
'''Upload scanned image files into a wallet on /expofiles
|
||||
@@ -77,9 +82,11 @@ def scanupload(request, wallet=None):
|
||||
dirpath = Path(settings.SURVEY_SCANS, year, wallet)
|
||||
|
||||
form = FilesForm()
|
||||
|
||||
|
||||
if request.method == 'POST':
|
||||
form = FilesForm(request.POST,request.FILES)
|
||||
print(f'! - FilesForm POSTED')
|
||||
|
||||
if form.is_valid():
|
||||
f = request.FILES["uploadfiles"]
|
||||
multiple = request.FILES.getlist('uploadfiles')
|
||||
@@ -115,6 +122,80 @@ def scanupload(request, wallet=None):
|
||||
return render(request, 'scanuploadform.html',
|
||||
{'form': form, 'wallet': wallet, **context, 'files': files, 'dirs': dirs, 'filesaved': filesaved, 'actual_saved': actual_saved})
|
||||
|
||||
@login_required_if_public
|
||||
def photoupload(request, folder=None):
|
||||
'''Upload photo image files into /expofiles/photos/<year>/<photographer>/
|
||||
This does NOT use a Django model linked to a Django form. Just a simple Django form.
|
||||
You will find the Django documentation on forms very confusing, This is simpler.
|
||||
'''
|
||||
year = settings.PHOTOS_YEAR
|
||||
filesaved = False
|
||||
actual_saved = []
|
||||
|
||||
context = {'year': year, 'placeholder': "AnathemaDevice"}
|
||||
|
||||
yearpath = Path(settings.PHOTOS_ROOT, year)
|
||||
|
||||
if folder == str(year) or folder == str(year) +"/":
|
||||
folder = None
|
||||
|
||||
if folder is None:
|
||||
folder = "" # improve this later
|
||||
dirpath = Path(settings.PHOTOS_ROOT, year)
|
||||
urlfile = f'/expofiles/photos/{year}'
|
||||
urldir = f'/photoupload/{year}'
|
||||
else: # it will contain the year as well as the photographer
|
||||
dirpath = Path(settings.PHOTOS_ROOT, folder)
|
||||
if dirpath.is_dir():
|
||||
urlfile = f'/expofiles/photos/{folder}'
|
||||
urldir = Path('/photoupload') / folder
|
||||
else:
|
||||
folder = "" # improve this later
|
||||
dirpath = Path(settings.PHOTOS_ROOT, year)
|
||||
urlfile = f'/expofiles/photos/{year}'
|
||||
urldir = f'/photoupload/{year}'
|
||||
|
||||
|
||||
form = FilesForm()
|
||||
formd = TextForm()
|
||||
|
||||
if request.method == 'POST':
|
||||
if "photographer" in request.POST:
|
||||
formd = TextForm(request.POST)
|
||||
if formd.is_valid():
|
||||
newphotographer = request.POST["photographer"]
|
||||
(yearpath / newphotographer).mkdir(exist_ok=True)
|
||||
else:
|
||||
form = FilesForm(request.POST,request.FILES)
|
||||
if form.is_valid():
|
||||
f = request.FILES["uploadfiles"]
|
||||
multiple = request.FILES.getlist('uploadfiles')
|
||||
fs = FileSystemStorage(dirpath)
|
||||
|
||||
actual_saved = []
|
||||
if multiple:
|
||||
for f in multiple:
|
||||
actual_saved.append( fs.save(f.name, content=f) )
|
||||
filesaved = True
|
||||
files = []
|
||||
dirs = []
|
||||
try:
|
||||
for f in dirpath.iterdir():
|
||||
if f.is_dir():
|
||||
dirs.append(f.name)
|
||||
if f.is_file():
|
||||
files.append(f.name)
|
||||
except FileNotFoundError:
|
||||
files.append('(no folder yet - would be created)')
|
||||
if len(files) >0 :
|
||||
files = sorted(files)
|
||||
|
||||
if dirs:
|
||||
dirs = sorted(dirs)
|
||||
|
||||
return render(request, 'photouploadform.html',
|
||||
{'form': form, **context, 'urlfile': urlfile, 'urldir': urldir,'folder': folder, 'files': files, 'dirs': dirs, 'filesaved': filesaved, 'actual_saved': actual_saved})
|
||||
|
||||
@login_required_if_public
|
||||
def dwgupload(request, folder=None, gitdisable='no'):
|
||||
'''Upload DRAWING files (tunnel or therion) into the upload folder in :drawings
|
||||
|
||||
Reference in New Issue
Block a user