From 3ccd6783ac82b11b14c920afd0341df356e5b6c2 Mon Sep 17 00:00:00 2001
From: "j.vondoemming" <j.vondoemming@stud.uni-goettingen.de>
Date: Sat, 15 Oct 2022 19:03:13 +0200
Subject: [PATCH] automatically redirect renderer link pages

---
 lang.json                                    |  4 +++-
 theme/templates/macros/common.html           |  8 ++++---
 theme/templates/macros/content_renderer.html |  2 +-
 theme/templates/page.html                    | 25 +++++++++++++++++++-
 4 files changed, 33 insertions(+), 6 deletions(-)

diff --git a/lang.json b/lang.json
index 1ecf58e..6bd08b2 100644
--- a/lang.json
+++ b/lang.json
@@ -33,7 +33,9 @@
 			"slug_suffix": "",
 			"edit_url_text": "[Seite&nbsp;bearbeiten]",
 			"view_url_text": "[Quelltext]",
-			"history_url_text": "[Historie]"
+			"history_url_text": "[Historie]",
+			"redirect_prefix": "Diese Seite verlinkt auf eine andere Seite. Du wirst in kürze auf ",
+			"redirect_suffix": " weitergeleitet. Falls die automatische Weiterleitung nicht funktioniert, einfach den Link direkt klicken."
 		},
 		"tag": {
 			"edit_url_text": "[Text&nbsp;bearbeiten]",
diff --git a/theme/templates/macros/common.html b/theme/templates/macros/common.html
index 63d9c7e..f06dfee 100644
--- a/theme/templates/macros/common.html
+++ b/theme/templates/macros/common.html
@@ -133,12 +133,14 @@
 
 
 {%- macro render_link(link, content, lang, attr = None, title = None) -%}
-	{%- call(objtype, obj) render_link_raw(link, content, lang, attr, title) -%}
+	{%- call(objtype, obj, url, relation) render_link_raw(link, content, lang, attr, title) -%}
 		{%- if content is string or content is none -%}
 			{%- if content is string and content|length -%}
 				{{ encoded_span(content) }}
-			{%- else -%}
+			{%- elif obj -%}
 				{{ encoded_span(obj.title) }}
+			{%- else -%}
+				{{ encoded_span(url) }}
 			{%- endif -%}
 		{%- else -%}
 			<strong>ERROR: Cannot render link with formatted content here.</strong>
@@ -163,7 +165,7 @@
 	{%- endcall -%}
 	{%- set target = config.link_target[ns.relation] -%}
 	<a {{ render_attr(attr, lang, extra_classes=[ns.relation], extra={"href": ns.url, "title": {"value":title, "escape": true}, "target": target}) }}>
-		{{- caller(ns.objtype, ns.obj) -}}
+		{{- caller(ns.objtype, ns.obj,ns.url,ns.relation) -}}
 	</a>
 {%- endmacro -%}
 
diff --git a/theme/templates/macros/content_renderer.html b/theme/templates/macros/content_renderer.html
index 0caf523..9e22c91 100644
--- a/theme/templates/macros/content_renderer.html
+++ b/theme/templates/macros/content_renderer.html
@@ -8,7 +8,7 @@
 {%- endmacro -%}
 
 {%- macro render_link(link, content, lang, attr = None, title = None) -%}
-	{%- call(objtype, obj) common.render_link_raw(link, content, lang, attr, title) -%}
+	{%- call(objtype, obj, url, relation) common.render_link_raw(link, content, lang, attr, title) -%}
 		{%- if content is string or content is none -%}
 			{%- if content is string and content|length -%}
 				{{ common.encoded_span(content) }}
diff --git a/theme/templates/page.html b/theme/templates/page.html
index adca847..184046a 100644
--- a/theme/templates/page.html
+++ b/theme/templates/page.html
@@ -3,6 +3,21 @@
 {% block title %}{{ t[l].title_prefix }}{{ common.encoded_span(page.title)|striptags }}{{ t[l].title_seperator }}{{ common.encoded_span(page.category.title)|striptags }}{{ t[l].title_seperator }}{{ t[l].sitename }}{{ t[l].title_suffix }}{% endblock %}
 
 {% block extra_head %}
+
+	{%- if page.link.alias -%}
+		{#- If page is a link and the user somehow got non-aliased link (e.g. from an old qr-code), redirect them to the linked url. -#}
+		{%- set ns = namespace(relation=None, url=None) -%}
+		{%- call(resolvedlink, objtype, obj) common.resolve_link(page.link) -%}
+			{%- set ns.url = resolvedlink.urlwithanchor -%}
+			{%- if not resolvedlink.is_external -%}
+				{%- set ns.relation = "internal" -%}
+				{%- if resolvedlink.url|length -%}
+					{%- set ns.url = [siteurl, ns.url]|join("/") -%}
+				{%- endif -%}
+			{%- endif -%}
+		{%- endcall -%}
+		<meta http-equiv="refresh" content="5; url={{ ns.url }}" >
+	{%- endif -%}
 {% endblock %}
 
 {% block breadcrumb %}
@@ -15,7 +30,15 @@
 			{{ common.render_header(page.title, 1, None, lang) }}
 		{% endblock %}
 		{% block page_content %}
-			{{ render.section({"type": "page", "page": page, "title_mode": "prevent"}, l, 1) }}
+			{%- if page.link.alias -%}
+				<div class="info">
+					<p>
+						{{ t[l].page.redirect_prefix }}{{ common.render_link(page.link.alias, None, l) }}{{ t[l].page.redirect_suffix }}
+					</p>
+				</div>
+			{%- else -%}
+				{{ render.section({"type": "page", "page": page, "title_mode": "prevent"}, l, 1) }}
+			{%- endif -%}
 		{% endblock %}
 	</article>
 {% endblock %}
-- 
GitLab