From 4f0eb96cd1ca5c93bf4d5890ba5fb66786dfd0f8 Mon Sep 17 00:00:00 2001
From: Tor-Einar Skog <tor-einar.skog@nibio.no>
Date: Wed, 23 Dec 2020 08:34:47 +0100
Subject: [PATCH] Adding the SYSTEM_TIME_EXACT setting for locking VIPSWeb to a
 fixed date, for demo purposes

---
 VIPSWeb/local_settings_sample.py        | 7 ++++++-
 VIPSWeb/static/js/util.js               | 4 ++++
 VIPSWeb/templates/base.html             | 2 +-
 VIPSWeb/templates/settings.js           | 2 ++
 VIPSWeb/templatetags/template_helper.py | 5 ++++-
 5 files changed, 17 insertions(+), 3 deletions(-)

diff --git a/VIPSWeb/local_settings_sample.py b/VIPSWeb/local_settings_sample.py
index 7430b81f..62e92696 100755
--- a/VIPSWeb/local_settings_sample.py
+++ b/VIPSWeb/local_settings_sample.py
@@ -69,7 +69,12 @@ TIME_ZONE = 'Europe/Oslo'
 
 # This can be used for testing purposes. Is valid locally for 
 # this web page, not the VIPSLogic application.
-SYSTEM_TIME_OFFSET_MONTHS = 0;
+SYSTEM_TIME_OFFSET_MONTHS = 0
+
+# This is for testing purposes. It overrides SYSTEM_TIME_OFFSET_MONTHS
+# It's valid locally for this web page, not the VIPSLogic application
+# Ideally, they should be synchronized
+SYSTEM_TIME_EXACT = None
 
 DATABASES = {
     'default': {
diff --git a/VIPSWeb/static/js/util.js b/VIPSWeb/static/js/util.js
index 760530f2..fa65784e 100755
--- a/VIPSWeb/static/js/util.js
+++ b/VIPSWeb/static/js/util.js
@@ -46,6 +46,10 @@ function buildPathParamString(paramName, values)
  * @returns the current system time as a Moment.js object
  */
 function getSystemTime(){
+	if(settings.systemTimeExact != null)
+	{
+		return systemTime = moment(settings.systemTimeExact);
+	}
 	return systemTime = moment().add(settings.systemTimeOffsetMonths,"months");
 }
 
diff --git a/VIPSWeb/templates/base.html b/VIPSWeb/templates/base.html
index da90bf70..20ce4ecd 100755
--- a/VIPSWeb/templates/base.html
+++ b/VIPSWeb/templates/base.html
@@ -62,7 +62,7 @@
 	      <span class="icon-bar"></span>
 	    </button>
 	    <a class="navbar-brand" href="/"><img src="{% static "images/logo_vips_newest.png" %}" alt="VIPS logo"/></a><span id="siteTitle" class="navbar-brand">{{settings.SITE_NAME|safe}}</span>
-	    {% if settings.SYSTEM_TIME_OFFSET_MONTHS != 0 %}
+	    {% if settings.SYSTEM_TIME_OFFSET_MONTHS != 0 or settings.SYSTEM_TIME_EXACT != None %}
 	    <span class="navbar-brand" style="margin-left: 0px; padding-left: 0px; padding-top: 15px; font-size: 0.8em">[{% get_system_time "%Y-%m-%d" %}]</span>
 	    {% endif %}
 	  </div>
diff --git a/VIPSWeb/templates/settings.js b/VIPSWeb/templates/settings.js
index 611638dd..2b34cf74 100755
--- a/VIPSWeb/templates/settings.js
+++ b/VIPSWeb/templates/settings.js
@@ -31,6 +31,8 @@ var settings = {
 		
 		systemTimeOffsetMonths: {{settings.SYSTEM_TIME_OFFSET_MONTHS}},
 		
+		systemTimeExact: {% if settings.SYSTEM_TIME_EXACT == None or settings.SYSTEM_TIME_EXACT|cut:" " == "" %}null{%else%}"{{settings.SYSTEM_TIME_EXACT}}"{%endif%},
+		
 		frontpageMessageTagIds: {{settings.FRONTPAGE_MESSAGE_TAG_IDS}},
 		
 		userUuid: {% if request.session.vips_logic_user == None %}null{% else %}"{{request.session.user_uuid}}"{% endif %},
diff --git a/VIPSWeb/templatetags/template_helper.py b/VIPSWeb/templatetags/template_helper.py
index 71575629..87200f63 100755
--- a/VIPSWeb/templatetags/template_helper.py
+++ b/VIPSWeb/templatetags/template_helper.py
@@ -145,7 +145,10 @@ def get_text_i18n(text_dict):
 
 @register.simple_tag
 def get_system_time(format_string):
-	time = datetime.now() + relativedelta(months = settings.SYSTEM_TIME_OFFSET_MONTHS)
+	if(settings.SYSTEM_TIME_EXACT != None and settings.SYSTEM_TIME_EXACT.strip() != ""):
+		time = datetime.strptime(settings.SYSTEM_TIME_EXACT,"%Y-%m-%d")
+	else:
+		time = datetime.now() + relativedelta(months = settings.SYSTEM_TIME_OFFSET_MONTHS)
 	return time.strftime(format_string)
 
 @register.filter
-- 
GitLab