diff options
Diffstat (limited to 'core/views/other.py')
-rw-r--r-- | core/views/other.py | 197 |
1 files changed, 197 insertions, 0 deletions
diff --git a/core/views/other.py b/core/views/other.py new file mode 100644 index 0000000..83acc4c --- /dev/null +++ b/core/views/other.py @@ -0,0 +1,197 @@ +import re + +from django import forms +from django.conf import settings +from django.urls import reverse +from django.db.models import Q +from django.http import HttpResponse, HttpResponseRedirect +from django.shortcuts import render +from django.template import Context, loader + +import troggle.parsers.imports +from troggle.core.models import Expedition, Person, PersonExpedition +from troggle.core.models_caves import LogbookEntry, QM, Cave, PersonTrip +from troggle.helper import login_required_if_public +from troggle.core.forms import UploadFileForm + +print("** importing troggle/core/views.other.py") + +"""Utility functions and code to serve the control panel and individual user's +progress and task list (deprecated as we do not have individual user login). + +Also has code to download a logbook in a choice of formats (why?!) and to +download all QMs (not working) +""" + +def troggle404(request): # cannot get this to work. Handler404 in urls.py not right syntax + '''Custom 404 page to be used even when Debug=True + https://blog.juanwolf.fr/posts/programming/how-to-create-404-page-django/ + ''' + context = RequestContext(request) + #context['caves'] = Cave.objects.all() + return render(request, ('404.html', context.flatten())) + +def showrequest(request): + return HttpResponse(request.GET) + +def frontpage(request): + '''never seen in practice''' + # bthe messages system does a popup on this page if there is a recent message, e.g. from the admin site actions. + # via django.contrib.messages.middleware.MessageMiddleware + # this is set in the templates. + if request.user.is_authenticated(): + return render(request,'tasks.html') + + expeditions = Expedition.objects.order_by("-year") + logbookentry = LogbookEntry + cave = Cave + #from django.contrib.admin.templatetags import log + return render(request,'frontpage.html', locals()) + + +def controlPanel(request): + jobs_completed=[] + if request.method=='POST': + if request.user.is_superuser: + # NONE of this works now that databaseReset (now parsers.imports) has been so extensively rewritten + reinit_db() + import_caves() + import_people() + import_surveyscans() + import_logbooks() + import_QMs() + import_tunnelfiles() + import_survexblks() + import_survexpos() + else: + if request.user.is_authenticated(): #The user is logged in, but is not a superuser. + return render(request,'controlPanel.html', {'caves':Cave.objects.all(),'error':'You must be a superuser to use that feature.'}) + else: + return HttpResponseRedirect(reverse('auth_login')) + + return render(request,'controlPanel.html', {'caves':Cave.objects.all(),'expeditions':Expedition.objects.all(),'jobs_completed':jobs_completed}) + + +def downloadLogbook(request,year=None,extension=None,queryset=None): + + if year: + current_expedition=Expedition.objects.get(year=year) + logbook_entries=LogbookEntry.objects.filter(expedition=current_expedition) + filename='logbook'+year + elif queryset: + logbook_entries=queryset + filename='logbook' + else: + response = HttpResponse(content_type='text/plain') + return response(r"Error: Logbook downloader doesn't know what year you want") + + if 'year' in request.GET: + year=request.GET['year'] + if 'extension' in request.GET: + extension=request.GET['extension'] + + if extension =='txt': + response = HttpResponse(content_type='text/plain') + style='2008' + elif extension == 'html': + response = HttpResponse(content_type='text/html') + style='2005' + + template='logbook'+style+'style.'+extension + response['Content-Disposition'] = 'attachment; filename='+filename+'.'+extension + t=loader.get_template(template) + c=Context({'logbook_entries':logbook_entries}) + response.write(t.render(c)) + return response + + +def downloadQMs(request): + # Note to self: use get_cave method for the below + if request.method=='GET': + try: + cave=Cave.objects.get(kataster_number=request.GET['cave_id']) + except Cave.DoesNotExist: + cave=Cave.objects.get(name=request.GET['cave_id']) + + from export import toqms + + response = HttpResponse(content_type='text/csv') + response['Content-Disposition'] = 'attachment; filename=qm.csv' + toqms.writeQmTable(response,cave) + return response + +def ajax_test(request): + post_text = request.POST['post_data'] + return HttpResponse("{'response_text': '"+post_text+" recieved.'}", + content_type="application/json") + +def eyecandy(request): + return + +def ajax_QM_number(request): + res="" + if request.method=='POST': + cave=Cave.objects.get(id=request.POST['cave']) + print(cave) + exp=Expedition.objects.get(pk=request.POST['year']) + print(exp) + res=cave.new_QM_number(exp.year) + + return HttpResponse(res) + + +print(" - newFile() is next in troggle/core/views.other.py") + +@login_required_if_public +def newFile(request, pslug = None): + if pslug: + previousfile = LogbookEntry.objects.get(slug = pslug, date = previousdate, expedition = expedition) + #assert previousfile.filename + if request.method == 'POST': # If the form has been submitted... + tripForm = TripForm(request.POST) # A form bound to the POST data + personTripFormSet = PersonTripFormSet(request.POST) + if tripForm.is_valid() and personTripFormSet.is_valid(): # All validation rules pass + dateStr = tripForm.cleaned_data["date"].strftime("%Y-%m-%d") + directory = os.path.join(settings.EXPOWEB, + "years", + expedition.year, + "autologbook") + filename = os.path.join(directory, + dateStr + "." + slugify(tripForm.cleaned_data["title"])[:50] + ".html") + if not os.path.isdir(directory): + os.mkdir(directory) + if pslug and pdate: + delLogbookEntry(previouslbe) + f = open(filename, "w") + template = loader.get_template('dataformat/logbookentry.html') + context = Context({'trip': tripForm.cleaned_data, + 'persons': personTripFormSet.cleaned_data, + 'date': dateStr, + 'expeditionyear': expeditionyear}) + f.write(template.render(context)) + f.close() + print(logbookparsers.parseAutoLogBookEntry(filename)) + return HttpResponseRedirect(reverse('expedition', args=[expedition.year])) # Redirect after POST + else: + if pslug: + pass + else: + fileform = UploadFileForm() # An unbound form + + return render(request, 'editfile.html', {'fileForm': fileform, }) + +@login_required_if_public +def deleteFile(request, expeditionyear, date = None, slug = None): + expedition = Expedition.objects.get(year=expeditionyear) + previousdate = datetime.date(*[int(x) for x in date.split("-")]) + previouslbe = LogbookEntry.objects.get(slug = slug, date = previousdate, expedition = expedition) + delLogbookEntry(previouslbe) + return HttpResponseRedirect(reverse('expedition', args=[expedition.year])) # Redirect after POST + +def delFile(f): + for pt in lbe.persontrip_set.all(): + pt.delete() + lbe.delete() + os.remove(lbe.filename) + +print("** Finished importing troggle/core/views.other.py")
\ No newline at end of file |