forked from expo/troggle
Allow entrances to be edited with the correct parent url. Commit changes to caves when adding a new entrance. Order entrances alphabetically
This commit is contained in:
@@ -19,6 +19,7 @@ from troggle.core.views import expo
|
||||
from troggle.core.models.troggle import Expedition, DataIssue
|
||||
from troggle.core.models.caves import CaveSlug, Cave, CaveAndEntrance, QM, EntranceSlug, Entrance, Area, SurvexStation, GetCaveLookup
|
||||
from troggle.core.forms import CaveForm, CaveAndEntranceFormSet, EntranceForm, EntranceLetterForm
|
||||
from troggle.core.utils import writetrogglefile, write_and_commit
|
||||
from .auth import login_required_if_public
|
||||
|
||||
'''Manages the complex procedures to assemble a cave description out of the compnoents
|
||||
@@ -187,7 +188,7 @@ def file3d(request, cave, cave_id):
|
||||
# These if statements need refactoring more cleanly
|
||||
if cave.survex_file:
|
||||
#print(" - cave.survex_file '{}'".format(cave.survex_file))
|
||||
if threedpath.is_file():
|
||||
if threedpath.Pathis_file():
|
||||
#print(" - threedpath '{}'".format(threedpath))
|
||||
# possible error here as several .svx files of same names in different directories will overwrite in /3d/
|
||||
if survexpath.is_file():
|
||||
@@ -342,7 +343,8 @@ def edit_cave(request, path = "", slug=None):
|
||||
ceinst.cave = cave
|
||||
ceinst.save()
|
||||
try:
|
||||
cave.writeDataFile()
|
||||
cave_file = cave.file_output()
|
||||
write_and_commit([cave_file], "Online edit of %s" % cave)
|
||||
# leave other exceptions unhandled so that they bubble up to user interface
|
||||
except PermissionError:
|
||||
message = f'CANNOT save this file.\nPERMISSIONS incorrectly set on server for this file {cave.filename}. Ask a nerd to fix this.'
|
||||
@@ -375,27 +377,28 @@ def edit_entrance(request, path = "", caveslug=None, slug=None):
|
||||
|
||||
It does save the data into into the database directly, not by parsing the file.
|
||||
'''
|
||||
message = ""
|
||||
if caveslug is not None:
|
||||
try:
|
||||
cave = Cave.objects.get(caveslug__slug = caveslug)
|
||||
except:
|
||||
return render(request,'errors/badslug.html', {'badslug': caveslug})
|
||||
else:
|
||||
cave = Cave()
|
||||
if slug is not None:
|
||||
|
||||
try:
|
||||
cave = Cave.objects.get(caveslug__slug = caveslug)
|
||||
except:
|
||||
return render(request,'errors/badslug.html', {'badslug': caveslug})
|
||||
|
||||
if slug:
|
||||
entrance = Entrance.objects.get(entranceslug__slug = slug)
|
||||
caveAndEntrance = CaveAndEntrance.objects.get(entrance = entrance, cave = cave)
|
||||
entlettereditable = False
|
||||
else:
|
||||
entrance = Entrance()
|
||||
caveAndEntrance = CaveAndEntrance(cave = cave, entrance = entrance)
|
||||
entlettereditable = True
|
||||
|
||||
if request.POST:
|
||||
form = EntranceForm(request.POST, instance = entrance)
|
||||
entletter = EntranceLetterForm(request.POST, instance = caveAndEntrance)
|
||||
#versionControlForm = VersionControlCommentForm(request.POST)
|
||||
if slug is None:
|
||||
entletter = EntranceLetterForm(request.POST)
|
||||
else:
|
||||
entletter = None
|
||||
if form.is_valid() and (slug is not None or entletter.is_valid()):
|
||||
if form.is_valid() and entletter.is_valid():
|
||||
entrance = form.save(commit = False)
|
||||
entrance_letter = entletter.save(commit = False)
|
||||
if slug is None:
|
||||
if entletter.cleaned_data["entrance_letter"]:
|
||||
slugname = cave.slug() + entletter.cleaned_data["entrance_letter"]
|
||||
@@ -407,36 +410,29 @@ def edit_entrance(request, path = "", caveslug=None, slug=None):
|
||||
if slug is None:
|
||||
es = EntranceSlug(entrance = entrance, slug = slugname, primary = True)
|
||||
es.save()
|
||||
el = entletter.save(commit = False)
|
||||
el.cave = cave
|
||||
el.entrance = entrance
|
||||
el.save()
|
||||
try:
|
||||
entrance.writeDataFile()
|
||||
# leave other exceptions unhandled so that they bubble up to user interface
|
||||
except PermissionError:
|
||||
message = f'CANNOT save this file.\nPERMISSIONS incorrectly set on server for this file {entrance.filename}. Ask a nerd to fix this.'
|
||||
return render(request,'errors/generic.html', {'message': message})
|
||||
except subprocess.SubprocessError:
|
||||
message = f'CANNOT git on server for this file {entrance.filename}. Edits may not be committed.\nAsk a nerd to fix this.'
|
||||
return render(request,'errors/generic.html', {'message': message})
|
||||
|
||||
entrance_file = entrance.file_output()
|
||||
cave_file = cave.file_output()
|
||||
write_and_commit([entrance_file, cave_file], "Online edit of %s%s" % (cave, entletter))
|
||||
entrance.save()
|
||||
if slug is None:
|
||||
entrance_letter.save()
|
||||
return HttpResponseRedirect("/" + cave.url)
|
||||
else:
|
||||
message = f'! POST data is INVALID {cave}'
|
||||
print(message)
|
||||
else:
|
||||
form = EntranceForm(instance = entrance)
|
||||
#versionControlForm = VersionControlCommentForm()
|
||||
if slug is None:
|
||||
entletter = EntranceLetterForm(request.POST)
|
||||
entletter = EntranceLetterForm()
|
||||
else:
|
||||
entletter = None
|
||||
entletter = caveAndEntrance.entrance_letter
|
||||
|
||||
return render(request,
|
||||
'editentrance.html',
|
||||
{'form': form, 'cave': cave, 'message': message,
|
||||
{'form': form,
|
||||
|
||||
'cave': cave,
|
||||
#'versionControlForm': versionControlForm,
|
||||
'entletter': entletter
|
||||
'entletter': entletter,
|
||||
'entlettereditable': entlettereditable
|
||||
})
|
||||
|
||||
def ent(request, cave_id, ent_letter):
|
||||
|
||||
Reference in New Issue
Block a user