protected function replaceLinkTargets($processedContent)
{
$externalLinkTarget = trim($this->tsValue('externalLinkTarget'));
$resourceLinkTarget = trim($this->tsValue('resourceLinkTarget'));
if ($externalLinkTarget === '' && $resourceLinkTarget === '') {
return $processedContent;
}
$controllerContext = $this->tsRuntime->getControllerContext();
$host = $controllerContext->getRequest()->getHttpRequest()->getUri()->getHost();
$processedContent = preg_replace_callback('~<a.*?href="(.*?)".*?>~i', function ($matches) use($externalLinkTarget, $resourceLinkTarget, $host) {
list($linkText, $linkHref) = $matches;
$uriHost = parse_url($linkHref, PHP_URL_HOST);
$target = null;
if ($externalLinkTarget !== '' && is_string($uriHost) && $uriHost !== $host) {
$target = $externalLinkTarget;
}
if ($resourceLinkTarget !== '' && strpos($linkHref, '_Resources') !== false) {
$target = $resourceLinkTarget;
}
if ($target === null) {
return $linkText;
}
if (preg_match_all('~target="(.*?)~i', $linkText, $targetMatches)) {
return preg_replace('/target=".*?"/', sprintf('target="%s"', $target), $linkText);
}
return str_replace('<a', sprintf('<a target="%s"', $target), $linkText);
}, $processedContent);
return $processedContent;
}