summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPhilip Sargent <philip.sargent@gmail.com>2023-08-10 23:17:03 +0300
committerPhilip Sargent <philip.sargent@gmail.com>2023-08-10 23:17:03 +0300
commitd3c17361192fbdea57eb3ef339375f671cc69ebf (patch)
treef3faafe147cce21f2ce894ba1c020eac27d04a08
parentda8e22c85607681dd3bbda92bddf593139a11f0e (diff)
downloadtroggle-d3c17361192fbdea57eb3ef339375f671cc69ebf.tar.gz
troggle-d3c17361192fbdea57eb3ef339375f671cc69ebf.tar.bz2
troggle-d3c17361192fbdea57eb3ef339375f671cc69ebf.zip
extending logbook entry edit
-rw-r--r--core/views/uploads.py106
-rw-r--r--templates/logbookentry.html1
-rw-r--r--templates/logbookform.html6
-rw-r--r--urls.py2
4 files changed, 89 insertions, 26 deletions
diff --git a/core/views/uploads.py b/core/views/uploads.py
index 9bcce94..0be3d35 100644
--- a/core/views/uploads.py
+++ b/core/views/uploads.py
@@ -1,4 +1,5 @@
import subprocess
+import hashlib
from pathlib import Path
from django import forms
@@ -6,6 +7,7 @@ from django.core.files.storage import FileSystemStorage
from django.shortcuts import render, redirect
import settings
+from troggle.core.models.logbooks import LogbookEntry, PersonLogEntry
from troggle.core.models.survex import DrawingFile
# from databaseReset import reinit_db # don't do this. databaseRest runs code *at import time*
@@ -38,6 +40,8 @@ todo = """
- Make file rename utility less ugly.
"""
+sha = hashlib.new('sha256')
+
class FilesForm(forms.Form): # not a model-form, just a form-form
uploadfiles = forms.FileField()
@@ -56,10 +60,33 @@ class LogbookEditForm(forms.Form): # not a model-form, just a form-form
author = forms.CharField(strip=True, required=False)
@login_required_if_public
-def logbookedit(request, year=None):
- """Type in a logbook entry.
- No editing yet, name is implying a future enhancement
+def logbookedit(request, year=None, slug=None):
+ """Edit a logbook entry
+ This is daft: we have the parsed identity of the person and we render it to text as 'fullname', to be re-parsed on re-importing.
+ And there is no guarantee that this will be the same thing, esp. as aliases are used in the initial data input.
+ So we are losing all the cute aliases that have been used over the years by this export/re-import process. Bother.
+ But they have already been lost in the Great Format Conversion of 2022-23 when everything was chnaged to use the same HTML parser.
+ Which is a shame.
"""
+ def clean_tu(tu):
+ if tu =="":
+ return 0
+ try:
+ tu = float(tu)/1 # check numeric
+ except:
+ return 0
+ return tu
+
+ def unique_id(text, n):
+ """This gives each logbook entry a unique id based on the date+content, so the order of entries on a particular day
+ does not matter. This is a change (August 2023) from previous process.
+ Otherwise we could get 2023-07-20a and 2023-07-20b swapped on exporting and re-importing logbooks
+ because the database does not record precendence.
+ 2 hex digits would seem adequate for each expo day, but we might get a collision..
+ """
+ sha.update(text.encode('utf-8'))
+ return sha.hexdigest()[0:n]
+
if not year:
year = 2023
@@ -78,23 +105,18 @@ def logbookedit(request, year=None):
title = request.POST["title"].strip()
entry = request.POST["text"].strip()
entry = entry.replace('\r','') # remove HTML-standard CR inserted
- entry = entry.replace('\n\n','\n<br /><br />\n') # replace 2 \n with <br><br>
- entry = entry.replace('<p','<br /><br') # replace <p> tag, even if it has attributes, with <br><br>
+ entry = entry.replace('\n\n','\n<br />\n<br />\n') # replace 2 \n with <br><br>
+ entry = entry.replace('<p','<br />\n<br') # replace <p> tag, even if it has attributes, with <br><br>
entry = entry.replace('<br>','<br />') # clean up previous hack
tu = request.POST["tu"].strip()
- if tu =="":
- tu = 0
- try:
- tu = float(tu)/1 # check numeric
- except:
- tu = 0
- seq = 99 # should match the number of entries on this date +1 in the db already
-
+ tu = clean_tu(tu)
+ uniq = unique_id(entry,2)
+ print(uniq)
# OK this could be done by rendering a template, but for such a small bit of HTML, it is easier to have
# it all in one place: here
output = f'''
<hr />
- <div class="tripdate" id="{date}-{seq}">{date}</div>
+ <div class="tripdate" id="{date}-{uniq}">{date}</div>
<div class="trippeople"><u>{author}</u>, {others}</div>
<div class="triptitle">{place} - {title}</div>
{entry}
@@ -119,14 +141,54 @@ def logbookedit(request, year=None):
else:
form = LogbookEditForm()
- return render(
- request,
- "logbookform.html",
- {
- "form": form,
- "year": year,
- },
- )
+ if slug:
+ lbes = LogbookEntry.objects.filter(slug=slug)
+ if lbes:
+ if len(lbes) > 1:
+ return render(request, "object_list.html", {"object_list": lbe}) # ie a bug
+ else:
+ lbe = lbes[0]
+ print(f"{lbe}")
+ tu = clean_tu(lbe.time_underground)
+
+ people = []
+ for p in lbe.personlogentry_set.filter(logbook_entry=lbe):
+ if p.is_logbook_entry_author:
+ author = p.personexpedition.person.fullname
+ else:
+ people.append(p.personexpedition.person.fullname)
+ others =', '.join(people)
+ lenothers = min(70,max(20, len(others)))
+ print(f"{lenothers}")
+ text = lbe.text
+ rows = max(5,len(text)/50)
+ return render(
+ request,
+ "logbookform.html",
+ {
+ "form": form,
+ "year": year,
+ "date": lbe.date.isoformat(),
+ "author": author,
+ "others": others,
+ "lenothers": lenothers,
+ "place": lbe.place,
+ "title": lbe.title.replace(f"{lbe.place} - ",""),
+ "tu": tu,
+ "entry": text,
+ "textrows": rows,
+ #"output": output,
+ },
+ )
+ else:
+ return render(
+ request,
+ "logbookform.html",
+ {
+ "form": form,
+ "year": year,
+ },
+ )
diff --git a/templates/logbookentry.html b/templates/logbookentry.html
index 2fdfb41..4185512 100644
--- a/templates/logbookentry.html
+++ b/templates/logbookentry.html
@@ -67,6 +67,7 @@
{% for personlogentry in logbookentry.personlogentry_set.all %}{% if personlogentry.is_logbook_entry_author %}<br />{{personlogentry.personexpedition.person}}{% endif %}{% endfor %}
<p>{{logbookentry.text|safe}}</p>
</div>
+ <p><a href="/logbookedit/{{logbookentry.slug|safe}}">Edit this entry</a>.
</div>
</div>
diff --git a/templates/logbookform.html b/templates/logbookform.html
index bd21e5d..f9b12ea 100644
--- a/templates/logbookform.html
+++ b/templates/logbookform.html
@@ -40,10 +40,10 @@
<br /><br />
<label for="others">Other names (comma separated) <a href="/aliases/{{year}}">[valid aliases]</a></label>
<input {% if not user.username %} disabled{% endif %}
- label = "others" name = "others" size="20"
+ label = "others" name = "others" size="{% if lenothers %}{{lenothers}}{% else %}20{% endif %}"
title="Everyone else involved"
{% if others %}value="{{others}}"{% else %}placeholder="Phil T, Chas, Planc" {% endif %}
- required />
+ />
<br /><br />
<label for="place">Place: cave name, or 'plateau', 'topcamp' etc.</label>
<input {% if not user.username %} disabled{% endif %}
@@ -60,7 +60,7 @@
required />
<br /><br />
<textarea {% if not user.username %} disabled{% endif %}
- rows="5" cols="60"
+ rows="{% if textrows%}{{textrows}}{% else %}5{% endif %}" cols="70"
label = "" name = "text"
required />{% if entry %}{{entry}}{% else %}We had a lot of fun...{% endif %}
</textarea>
diff --git a/urls.py b/urls.py
index b398690..7edc26d 100644
--- a/urls.py
+++ b/urls.py
@@ -110,7 +110,7 @@ trogglepatterns = [
path('dwguploadnogit/', dwgupload, {'gitdisable': 'yes'}, name='dwguploadnogit'), # used in testing
path('dwguploadnogit/<path:folder>', dwgupload, {'gitdisable': 'yes'}, name='dwguploadnogit'), # used in testing
path('logbookedit/', logbookedit, name='logbookedit'),
- path('logbookedit/<int:year>', logbookedit, name='logbookedit'), # year=2023
+ path('logbookedit/<slug:slug>', logbookedit, name='logbookedit'),
# Renaming an uploaded file
path('expofilerename/<path:filepath>', expofilerename, name='expofilerename'),