From 9c05cb6af034882c15d16f07f5f7733e08b4c738 Mon Sep 17 00:00:00 2001
From: Philip Sargent <philip.sargent@gmail.com>
Date: Sat, 23 Sep 2023 00:48:35 +0300
Subject: [PATCH] rotatable images & text

---
 core/views/uploads.py     | 20 ++++++++++++++++++--
 templates/renameform.html |  7 ++++++-
 templates/walletform.html | 26 +++++++++++++++-----------
 3 files changed, 39 insertions(+), 14 deletions(-)

diff --git a/core/views/uploads.py b/core/views/uploads.py
index dd9f60d..8bec24e 100644
--- a/core/views/uploads.py
+++ b/core/views/uploads.py
@@ -406,6 +406,16 @@ def expofilerename(request, filepath):
     Currently this just does files within wallets i.e. in /surveyscans/
     and it returns control to the original wallet edit page
     """
+    def is_rotatable(path):
+        """If file is a JPG but has no filename extension, then it must be renamed 
+        before it can be rotated.
+        """
+        print(f"{path}: '{Path(path).suffix.lower()}'")
+        if Path(path).suffix.lower() in [".png", ".jpg", ".jpeg"]:
+            return True
+        else:
+            return False
+    
     def rotate_image():
         wallet = str(Path(filepath).parent).lstrip("surveyscans/")
         cwd = settings.SCANS_ROOT / wallet
@@ -455,7 +465,9 @@ def expofilerename(request, filepath):
                 "filesize": filesize,
                 "files": files,
                 "walletpath": walletpath,
+                "wallet": wallet,
                 "notpics": notpics,
+                "rotatable": rotatable,
             },
         )
         
@@ -474,8 +486,11 @@ def expofilerename(request, filepath):
     else:
         filename = Path(filepath).name
         walletpath = Path(filepath).parent
+        wallet = Path(walletpath).name
         folder = actualpath.parent
         filesize = f"{actualpath.stat().st_size:,}"
+        rotatable= is_rotatable(filename)
+ 
 
     if not actualpath.is_relative_to(Path(settings.SCANS_ROOT)):
         message = f'\n Can only do rename within wallets (expofiles/surveyscans/) currently, sorry. "{actualpath}" '
@@ -494,10 +509,10 @@ def expofilerename(request, filepath):
                     for d in f.iterdir():
                         dirs.append(f"{f.name}/{d.name}")
                 if f.is_file():
-                    if Path(f.name).suffix.lower() in [".jpg", ".jpeg", ".png"]:
+                    if is_rotatable(f.name): # should allow all images here which can be thumsized, not just rotatables. e.g. PDF
                         files.append(f.name)
                     else:
-                         notpics.append(f.name)     
+                        notpics.append(f.name)     
         except FileNotFoundError:
             files.append(
                 "(Error. There should be at least one filename visible here. Try refresh.)"
@@ -537,6 +552,7 @@ def expofilerename(request, filepath):
                         "filesize": filesize,
                         "files": files,
                         "walletpath": walletpath,
+                        "wallet": wallet,
                         "notpics": notpics,
                         "rename_bad": rename_bad,
                     },
diff --git a/templates/renameform.html b/templates/renameform.html
index f543057..35bcbeb 100644
--- a/templates/renameform.html
+++ b/templates/renameform.html
@@ -37,15 +37,20 @@
        </button>
     </form>
     <br />
+    {% if rotatable %}
     <form method ='post' >
         {% csrf_token %}              
        <button  class="fancybutton2"  style="padding: 0.5em 25px; margin-left: 110px"  name="rotate" type = "submit"  title="Rotates 90 degrees clockwise. JPG and PNG files only." value = "Rotate" >
           Rotate it
        </button>
     </form>
-
+    {% else %}
+    <p style="padding: 0.5em 25px; margin-left: 110px">Not a rotatable image.
+    {% endif %}
     <br /><br /><br />
     Full urlencoded path for this file in expofiles is <a href="/expofiles/{{filepath|urlencode}}"><em>{{filepath|urlencode}}</em></a>
+    <br /><br />
+    Return to wallet <a href="/walletedit/{{wallet|urlencode}}">{{wallet}}</a>
  
 </div>
 
diff --git a/templates/walletform.html b/templates/walletform.html
index 84d47b2..aff70fe 100644
--- a/templates/walletform.html
+++ b/templates/walletform.html
@@ -15,6 +15,10 @@
 {% else %}
 <h2>Wallet {{wallet}}</h2>
 {% endif %}
+<style>
+var {font-family: monospace;
+}
+</style>
 
     <form method ='post' style="text-align: center">
         {% csrf_token %}              
@@ -29,13 +33,13 @@
                 
     </form>
 <p style="font-family: monospace; font-weight: bold; font-size: 130%; text-align: center">
-<a style="font-weight: normal;" href="/walletedit/{{prevy}}:01">{{prevy}}</a>
+<a style="font-weight: normal;" href="/walletedit/{{prevy|urlencode}}:01">{{prevy}}</a>
 &nbsp;...&nbsp;
 <a href="/walletedit/{{recent_year}}:{{recent_number}}">{{recent_year}}:{{recent_number}}</a> 
 &larr; {{wallet}} &rarr; 
 <a href="/walletedit/{{year}}:{{next}}">{{year}}:{{next}}</a>
 &nbsp;...&nbsp;
-<a style="font-weight: normal;" href="/walletedit/{{nexty}}:01">{{nexty}}</a>
+<a style="font-weight: normal;" href="/walletedit/{{nexty|urlencode}}:01">{{nexty}}</a>
 </p>  
 
  
@@ -58,10 +62,10 @@
                    </button>
                 {% endif %}
     </form>
-    <details><summary>Do NOT invent your own filenaming scheme. <br />Click for more details.</summary>
-<div align="left">We have a 20-year old scheme for naming scanned files, <br><br>
-Name the scanned pages <em>"notes-cavepassagename.jpg"</em> etc., (or <em>notes-1.jpg</em> if you must, but self-describing filenames are much better). This is important as a script detects whether these files exist (with names beginning <em>"notes..", "plan.." and "elev.."</em>) and if you name them something else it will hassle you unnecessarily. (Or you can use this format <em>cavepassagename5-notes.jpg</em> if you like.)
-Handbook: <a href="/handbook/survey/newwallet.html">Creating a Wallet</a>   </div></details> 
+    <details style="text-align: left"><summary>Troggle needs standardised filenames. Use <br />"<var>notes1-myhole.jpg</var>", "<var>notes2-myhole.jpg</var>" etc. for in-cave notes,<br />"<var>plan1-myhole.jpg</var>" for the first page of the <em>drawn up</em> plan, <br />"<var>elev3-myhole.jpg</var>" for p3 of the <em>drawn up</em> elevation.   <p><u>Click</u> for more details.</summary>
+<div align="left"><p>Please do NOT invent your own filenaming scheme. We have a 20-year old scheme for naming scanned files, <br><br>
+Name the scanned pages <var>"notes-cavepassagename.jpg"</var> etc., or <var>notes-1.jpg</var> if you like, but self-describing filenames are better. This is important as a script detects whether these files exist (with names beginning <var>"notes..", "plan.." and "elev.."</var>) and if you name them something else it will hassle you unnecessarily. (Or you can use this format <var>cavepassagename5-notes.jpg</var> if you like.) See how this works in the Handbook: <a href="/handbook/survey/newwallet.html">Creating a Wallet</a>   
+<p>The '<var>plan..</var>' and '<var>elev..</var>' scans are <em>for fully drawn-up Tunnel or Therion plans or elevations</em>. If you have hand-sketches, then these are '<var>notes..</var>' as are the raw survex survey data numbers.</div></details> 
 </div>
 <div style = "max-width:29%; margin-left:20%; text-align: left" >
     {% if filesaved %}
@@ -76,14 +80,14 @@ Handbook: <a href="/handbook/survey/newwallet.html">Creating a Wallet</a>   </di
 {% if not create %}
     <p>
     {% for f in files %}
-    <a href="/expofilerename/surveyscans/{{year}}/{{wallet|urlencode}}/{{f}}">&raquo;</a> <a href="/expofiles/surveyscans/{{year}}/{{wallet|urlencode}}/{{f}}">{{ f}}</a><br />
+    <a href="/expofilerename/surveyscans/{{year}}/{{wallet|urlencode}}/{{f|urlencode}}">&raquo;</a> <a href="/expofiles/surveyscans/{{year}}/{{wallet|urlencode}}/{{f|urlencode}}">{{ f}}</a> &nbsp;&nbsp;-&nbsp;&nbsp;<a href="/expofilerename/surveyscans/{{year}}/{{wallet|urlencode}}/{{f|urlencode}}"><em>Rename or Rotate</em></a><br />
         {% empty %}
         <p>&lt;No files in this wallet. &gt;
         
     {% endfor %}
     <ul>
     {% for d in dirs %}
-        <a href="/expofiles/surveyscans/{{year}}/{{wallet|urlencode}}/{{d}}"><em>{{d}}</em></a><br />
+        <a href="/expofiles/surveyscans/{{year}}/{{wallet|urlencode}}/{{d|urlencode}}"><em>{{d}}</em></a><br />
     {% endfor %}
     </ul>
 {% endif %}
@@ -135,7 +139,7 @@ Handbook: <a href="/handbook/survey/newwallet.html">Creating a Wallet</a>   </di
     <br>
     <span style="font-family: monospace;  font-size: 150%; ">
     {% if cave %}<u>Cave ID</u>: 
-        {% if caveobject %}<b>{{cave}}</b></a> which implies "<a href="/{{caveobject.url}}">{{caveobject}}</a>"<br> 
+        {% if caveobject %}<b>{{cave}}</b></a> which implies "<a href="/{{caveobject.url|urlencode}}">{{caveobject}}</a>"<br> 
         {% else %}
         <b>{{cave}}</b><br> 
         {% endif %}   
@@ -143,7 +147,7 @@ Handbook: <a href="/handbook/survey/newwallet.html">Creating a Wallet</a>   </di
     {% if psg %}<u>Survey area</u>: <b>{{psg}}</b><br>{% endif %}
     {% if svxfiles %}<u>Survex files</u>: 
             {% for svx in svxfiles %}
-            <a href="/survexfile/{{svx}}">{{svx}}</a>
+            <a href="/survexfile/{{svx|urlencode}}">{{svx}}</a>
             {% endfor %}
             <br>
     {% endif %}
@@ -238,7 +242,7 @@ Handbook: <a href="/handbook/survey/newwallet.html">Creating a Wallet</a>   </di
     {% if metadataurl %}<span style="font-size: 70%; "><details><summary>
     JSON  <br> 
         </summary>
-    <a href="{{metadataurl}}">{{metadataurl}}</a><br>
+    <a href="{{metadataurl|urlencode}}">{{metadataurl}}</a><br>
     <pre>
     {{metadata}}
     </pre>