From 912d15809b3f1c94ae230390af188fb9dacc6920 Mon Sep 17 00:00:00 2001
From: Moritz Strohm <strohm@data-quest.de>
Date: Mon, 11 Oct 2021 12:48:53 +0000
Subject: [PATCH] BIESt #250

---
 lib/classes/StudipCoreFormat.php              | 27 ++++++++++++-------
 .../HTMLPurifier_Injector_ClassifyLinks.php   |  8 +++---
 2 files changed, 23 insertions(+), 12 deletions(-)

diff --git a/lib/classes/StudipCoreFormat.php b/lib/classes/StudipCoreFormat.php
index f0f9a62523a..665bb376dd9 100644
--- a/lib/classes/StudipCoreFormat.php
+++ b/lib/classes/StudipCoreFormat.php
@@ -515,8 +515,7 @@ class StudipCoreFormat extends TextFormat
 
         $intern = $domain === $_SERVER['HTTP_HOST'];
 
-        return sprintf('<a class="%s" href="mailto:%s">%s</a>',
-            $intern ? "link-intern" : "link-extern",
+        return sprintf('<a href="mailto:%1$s">%2$s</a>',
             $email,
             $link_text
         );
@@ -655,13 +654,23 @@ class StudipCoreFormat extends TextFormat
         $linkmarkup->removeMarkup('links');
         $linkmarkup->removeMarkup('wiki-links');
 
-        return sprintf('<a class="%s" href="%s"%s>%s</a>%s',
-            $intern ? 'link-intern' : 'link-extern',
-            $url,
-            $intern ? '' : ' target="_blank" rel="noreferrer noopener"',
-            $linkmarkup->format($title),
-            $postfix
-        );
+        if (strpos($url, 'mailto:') === 0) {
+            return sprintf(
+                '<a href="%1$s">%2$s</a>%3$s',
+                $url,
+                $linkmarkup->format($title),
+                $postfix
+            );
+        } else {
+            return sprintf(
+                '<a class="%s" href="%s"%s>%s</a>%s',
+                $intern ? 'link-intern' : 'link-extern',
+                $url,
+                $intern ? '' : ' target="_blank" rel="noreferrer noopener"',
+                $linkmarkup->format($title),
+                $postfix
+            );
+        }
     }
 
     protected static function htmlAnchor($markup, $matches, $contents)
diff --git a/lib/classes/htmlpurifier/HTMLPurifier_Injector_ClassifyLinks.php b/lib/classes/htmlpurifier/HTMLPurifier_Injector_ClassifyLinks.php
index 4096bc8cbc2..a43e27e5492 100644
--- a/lib/classes/htmlpurifier/HTMLPurifier_Injector_ClassifyLinks.php
+++ b/lib/classes/htmlpurifier/HTMLPurifier_Injector_ClassifyLinks.php
@@ -1,7 +1,7 @@
 <?php
 
 /**
- * Classify links as internal or external and set the class attribute 
+ * Classify links as internal or external and set the class attribute
  * accordingly.
  */
 class HTMLPurifier_Injector_ClassifyLinks extends HTMLPurifier_Injector
@@ -13,8 +13,10 @@ class HTMLPurifier_Injector_ClassifyLinks extends HTMLPurifier_Injector
     {
         if ($token->name === 'a' && isset($token->attr['href'])) {
             $is_link_intern = isLinkIntern($token->attr['href']);
-            $token->attr['class'] = $is_link_intern ? 'link-intern' : 'link-extern';
-            if (!$is_link_intern) {
+            if ($is_link_intern) {
+                $token->attr['class'] = 'link-intern';
+            } elseif (strpos($token->attr['href'], 'mailto:') !== 0) {
+                $token->attr['class'] = 'link-extern';
                 $token->attr['target'] = '_blank';
             }
         }
-- 
GitLab