summaryrefslogtreecommitdiffstats
path: root/core/views/survex.py
diff options
context:
space:
mode:
Diffstat (limited to 'core/views/survex.py')
-rw-r--r--core/views/survex.py44
1 files changed, 34 insertions, 10 deletions
diff --git a/core/views/survex.py b/core/views/survex.py
index aae2c0c..56d447f 100644
--- a/core/views/survex.py
+++ b/core/views/survex.py
@@ -19,7 +19,7 @@ from troggle.core.models.caves import Cave, GetCaveLookup
from troggle.core.models.logbooks import LogbookEntry
from troggle.core.models.survex import SurvexBlock, SurvexFile #, SurvexDirectory
from troggle.core.models.wallets import Wallet
-from troggle.core.utils import current_expo, only_commit
+from troggle.core.utils import COOKIE_MAX_AGE, current_expo, git_string, only_commit
from troggle.parsers.survex import parse_one_file
"""Everything that views survexfiles
@@ -43,7 +43,7 @@ todo = """
SVXPATH = Path(settings.SURVEX_DATA)
# NB this template text must be identical to that in :loser:/templates/template.svx
-survextemplatefile = """; *** THIS IS A TEMPLATE FILE NOT WHAT YOU MIGHT BE EXPECTING ***
+survextemplatefile = """; *** THIS IS A TEMPLATE FILE - NOT WHAT YOU MIGHT BE EXPECTING ***
*** DO NOT SAVE THIS FILE WITHOUT RENAMING IT !! ***
;[Stuff in square brackets is example text to be replaced with real data,
@@ -152,6 +152,12 @@ class SvxForm(forms.Form):
datetime = forms.DateTimeField(widget=forms.TextInput(attrs={"readonly": True}))
outputtype = forms.CharField(widget=forms.TextInput(attrs={"readonly": True}))
code = forms.CharField(widget=forms.Textarea(attrs={"cols": 140, "rows": 36}))
+ who_are_you = forms.CharField(
+ widget=forms.TextInput(
+ attrs={"size": 100, "placeholder": "You are editing this page, who are you ? e.g. 'Animal <mta@gasthof.expo>'",
+ "style": "vertical-align: text-top;"}
+ )
+ )
survexfile = models.ForeignKey(SurvexFile, blank=True, null=True, on_delete=models.SET_NULL) # 1:1 ?
template = False
@@ -187,7 +193,7 @@ class SvxForm(forms.Form):
difflist = [diffline.strip() for diffline in difftext if not re.match(r"\s*$", diffline)]
return difflist
- def SaveCode(self, rcode):
+ def SaveCode(self, rcode, editor):
fname = SVXPATH / (self.data["filename"] + ".svx")
if not fname.is_file():
if re.search(r"\[|\]", rcode):
@@ -214,7 +220,7 @@ class SvxForm(forms.Form):
"CANNOT save this file.\nPERMISSIONS incorrectly set on server for this file. Ask a nerd to fix this."
)
- # javascript seems to insert CRLF on WSL1 whatever you say. So fix that:
+ # HTML forms standard behaviour is to insert CRLF whatever you say. So fix that:
fout.write(rcode.replace("\r", ""))
fout.write("\n")
fout.close()
@@ -223,9 +229,10 @@ class SvxForm(forms.Form):
comment = f"Online survex edit: {self.data['filename']}.svx"
else:
comment = f"Online survex edit: {self.data['filename']}.svx on dev machine '{socket.gethostname()}' "
- only_commit(fname, comment)
+ print(f"Committing file which has been saved {editor=}")
+ only_commit(fname, comment, editor)
- msg = "SAVED and committed to git (if there were differences)"
+ msg = f"SAVED and committed to git (if there were differences)\nEdited by:{editor}"
# should only call this is something changed
if parse_one_file(self.data["filename"]):
return msg
@@ -284,6 +291,8 @@ def svx(request, survex_file):
Needs refactoring. Too many piecemeal edits and odd state dependencies.
+ Why is all the action code in this Class ?! Confusing..
+
On Get does the SAME THING as svxcavesingle but is called when the .svx suffix is MISSING
"""
warning = False
@@ -299,7 +308,13 @@ def svx(request, survex_file):
dirname += "/"
nowtime = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
outputtype = "normal"
- form = SvxForm({"filename": survex_file, "dirname": dirname, "datetime": nowtime, "outputtype": outputtype})
+
+ print(f"Reading cookie...")
+ editor_id = request.COOKIES.get('editor_id', 'speleologist') # if no cookie, then default string
+ editor = git_string(editor_id) # belt and braces, should have been validity checked on saving already
+ print(f"Cookie read: {editor_id=} reformatted as: {editor=}")
+
+ form = SvxForm({"filename": survex_file, "dirname": dirname, "datetime": nowtime, "outputtype": outputtype, "who_are_you":editor})
# if the form has been returned
difflist = []
@@ -309,6 +324,7 @@ def svx(request, survex_file):
if request.method == "POST": # If the form has been submitted...
rform = SvxForm(request.POST) #
if rform.is_valid(): # All validation rules pass (how do we check it against the filename and users?)
+ editor = rform.cleaned_data["who_are_you"]
rcode = rform.cleaned_data["code"]
outputtype = rform.cleaned_data["outputtype"] # used by CodeMirror ajax I think
difflist = form.DiffCode(rcode)
@@ -335,7 +351,9 @@ def svx(request, survex_file):
if "save" in rform.data:
if request.user.is_authenticated:
if difflist:
- message = form.SaveCode(rcode)
+ editor = rform.cleaned_data["who_are_you"]
+ print(f"Saving code and editor id {editor=}")
+ message = form.SaveCode(rcode, editor)
else:
message = "NO DIFFERENCES - so not saving the file"
else:
@@ -395,6 +413,7 @@ def svx(request, survex_file):
events = events_on_dates(svxblocks)
year = year_for_svx(svxblocks)
+ form.data['who_are_you'] = editor
vmap = {
"year": year,
"settings": settings,
@@ -412,9 +431,14 @@ def svx(request, survex_file):
}
if outputtype == "ajax": # used by CodeMirror ajax I think
- return render(request, "svxfiledifflistonly.html", vmap)
+ edit_response = render(request, "svxfiledifflistonly.html", vmap)
+ else:
+ edit_response = render(request, "svxfile.html", vmap)
+
+ edit_response.set_cookie('editor_id', editor, max_age=COOKIE_MAX_AGE) # cookie expires after COOKIE_MAX_AGE seconds
+ print(f"Cookie reset: {editor} for another {COOKIE_MAX_AGE/3600} hours")
- return render(request, "svxfile.html", vmap)
+ return edit_response
SameDateEvents = namedtuple('SameDateEvents', ['trips', 'svxfiles', 'wallets', 'blocks'])