public function evaluate()
{
$text = $this->tsValue('value');
if ($text === '' || $text === null) {
return '';
}
if (!is_string($text)) {
throw new Exception(sprintf('Only strings can be processed by this TypoScript object, given: "%s".', gettype($text)), 1382624080);
}
$node = $this->tsValue('node');
if (!$node instanceof NodeInterface) {
throw new Exception(sprintf('The current node must be an instance of NodeInterface, given: "%s".', gettype($text)), 1382624087);
}
if ($node->getContext()->getWorkspace()->getName() !== 'live' && !$this->tsValue('forceConversion')) {
return $text;
}
$unresolvedUris = array();
$linkingService = $this->linkingService;
$controllerContext = $this->tsRuntime->getControllerContext();
$absolute = $this->tsValue('absolute');
$processedContent = preg_replace_callback(LinkingService::PATTERN_SUPPORTED_URIS, function (array $matches) use($node, $linkingService, $controllerContext, &$unresolvedUris, $absolute) {
switch ($matches[1]) {
case 'node':
$resolvedUri = $linkingService->resolveNodeUri($matches[0], $node, $controllerContext, $absolute);
$this->tsRuntime->addCacheTag('node', $matches[2]);
break;
case 'asset':
$resolvedUri = $linkingService->resolveAssetUri($matches[0]);
$this->tsRuntime->addCacheTag('asset', $matches[2]);
break;
default:
$resolvedUri = null;
}
if ($resolvedUri === null) {
$unresolvedUris[] = $matches[0];
return $matches[0];
}
return $resolvedUri;
}, $text);
if ($unresolvedUris !== array()) {
$processedContent = preg_replace('/<a[^>]* href="(node|asset):\\/\\/[^"]+"[^>]*>(.*?)<\\/a>/', '$2', $processedContent);
$processedContent = preg_replace(LinkingService::PATTERN_SUPPORTED_URIS, '', $processedContent);
}
$processedContent = $this->replaceLinkTargets($processedContent);
return $processedContent;
}