From 9f10344fa7c3887459961412fcb948e1f4ea1473 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mathias=20Gla=CC=88ser?= Date: Mon, 21 Sep 2026 15:33:38 +0200 Subject: [PATCH] Allow external web links in market rich text --- .../market_management_hermes_mcp_api.md | 5 +++-- .../market_management_hermes_mcp_konzept.md | 3 ++- modules/market_management/service.php | 22 ++++++++++++------- modules/shared/auth/ui/home.php | 2 +- 4 files changed, 20 insertions(+), 12 deletions(-) diff --git a/docs/modules/market_management/konzepte/market_management_hermes_mcp_api.md b/docs/modules/market_management/konzepte/market_management_hermes_mcp_api.md index 4a61df8..aecaa80 100644 --- a/docs/modules/market_management/konzepte/market_management_hermes_mcp_api.md +++ b/docs/modules/market_management/konzepte/market_management_hermes_mcp_api.md @@ -47,8 +47,9 @@ Link: ]*>$/isu', $token, $matches) - && market_management_is_allowed_document_url($matches[2])) { + && market_management_is_allowed_link_url($matches[2])) { if ($anchorOpen) { $result .= ''; } $href = htmlspecialchars($matches[2], ENT_QUOTES | ENT_SUBSTITUTE, 'UTF-8'); - $result .= ''; + $result .= ''; $anchorOpen = true; continue; } diff --git a/modules/shared/auth/ui/home.php b/modules/shared/auth/ui/home.php index e0e9fbe..a9d3a05 100644 --- a/modules/shared/auth/ui/home.php +++ b/modules/shared/auth/ui/home.php @@ -1152,7 +1152,7 @@ function render_auth_home_page(array $user, array $otcProducts = [], array $otcM echo " const getCurrentLimit = () => parseInt(getTable()?.dataset.marketsLimit || '20', 10);"; echo " const getPageSize = () => parseInt(getTable()?.dataset.marketsPageSize || '20', 10);"; echo " const marketEscape = (value) => String(value ?? '').replace(/[&<>\"']/g, (character) => ({ '&': '&', '<': '<', '>': '>', '\"': '"', \"'\": ''' }[character] || character));"; - echo " const marketDisplay = (value) => { if (value === null || value === undefined || value === '') { return 'Nicht hinterlegt'; } const escaped = marketEscape(value); const safeMarkup = escaped.replace(/<br>/g, '
').replace(/<strong>/g, '').replace(/<\\/strong>/g, '').replace(/<a class="sg-hyperlink" href="(https:\\/\\/erpnaurua\\.imhochrain\\.ch\\/files\\.php\\?path=[^"]+)" target="_blank" rel="noopener">/g, '
').replace(/<\\/a>/g, ''); return safeMarkup.replace(/\\r?\\n/g, '
'); };"; + echo " const marketDisplay = (value) => { if (value === null || value === undefined || value === '') { return 'Nicht hinterlegt'; } const escaped = marketEscape(value); const safeMarkup = escaped.replace(/<br>/g, '
').replace(/<strong>/g, '').replace(/<\\/strong>/g, '').replace(/<a class="sg-hyperlink" href="(https?:\\/\\/.*?)" target="_blank" rel="noopener noreferrer">/g, '').replace(/<\\/a>/g, ''); return safeMarkup.replace(/\\r?\\n/g, '
'); };"; echo " const marketBoolean = (value) => value === true || value === 'true' || value === 1 || value === '1' ? 'Ja' : value === false || value === 'false' || value === 0 || value === '0' ? 'Nein' : 'Nicht hinterlegt';"; echo " const marketMoney = (value) => value === null || value === undefined || value === '' ? 'Nicht hinterlegt' : 'CHF ' + Number(value).toFixed(2);"; echo " const marketContactName = (contact) => { if (!contact) { return 'Nicht hinterlegt'; } return marketDisplay([contact.first_name, contact.last_name].filter(Boolean).join(' ')); };";