/**
* Post process output for caching information
*
* The content cache stores cache segments with markers inside the generated content. This method creates cache
* segments and will process the final outer result (currentPathIsEntryPoint) to remove all cache markers and
* store cache entries.
*
* @param array $evaluateContext The current evaluation context
* @param object $tsObject The current TypoScript object (for "this" in evaluations)
* @param mixed $output The generated output after caching information was removed
* @return mixed The post-processed output with cache segment markers or cleaned for the entry point
*/
public function postProcess(array $evaluateContext, $tsObject, $output)
{
if ($this->enableContentCache && $evaluateContext['cacheForPathEnabled'] && $evaluateContext['cacheForPathDisabled']) {
$contextArray = $this->runtime->getCurrentContext();
if (isset($evaluateContext['configuration']['context'])) {
$contextVariables = [];
foreach ($evaluateContext['configuration']['context'] as $contextVariableName) {
$contextVariables[$contextVariableName] = $contextArray[$contextVariableName];
}
} else {
$contextVariables = $contextArray;
}
$cacheTags = $this->buildCacheTags($evaluateContext['configuration'], $evaluateContext['typoScriptPath'], $tsObject);
$cacheMetadata = array_pop($this->cacheMetadata);
$output = $this->contentCache->createDynamicCachedSegment($output, $evaluateContext['typoScriptPath'], $contextVariables, $evaluateContext['cacheIdentifierValues'], $cacheTags, $cacheMetadata['lifetime'], $evaluateContext['cacheDiscriminator']);
} elseif ($this->enableContentCache && $evaluateContext['cacheForPathEnabled']) {
$cacheTags = $this->buildCacheTags($evaluateContext['configuration'], $evaluateContext['typoScriptPath'], $tsObject);
$cacheMetadata = array_pop($this->cacheMetadata);
$output = $this->contentCache->createCacheSegment($output, $evaluateContext['typoScriptPath'], $evaluateContext['cacheIdentifierValues'], $cacheTags, $cacheMetadata['lifetime']);
} elseif ($this->enableContentCache && $evaluateContext['cacheForPathDisabled'] && $this->inCacheEntryPoint) {
$contextArray = $this->runtime->getCurrentContext();
if (isset($evaluateContext['configuration']['context'])) {
$contextVariables = [];
foreach ($evaluateContext['configuration']['context'] as $contextVariableName) {
if (isset($contextArray[$contextVariableName])) {
$contextVariables[$contextVariableName] = $contextArray[$contextVariableName];
} else {
$contextVariables[$contextVariableName] = null;
}
}
} else {
$contextVariables = $contextArray;
}
$output = $this->contentCache->createUncachedSegment($output, $evaluateContext['typoScriptPath'], $contextVariables);
}
if ($evaluateContext['cacheForPathEnabled'] && $evaluateContext['currentPathIsEntryPoint']) {
$output = $this->contentCache->processCacheSegments($output, $this->enableContentCache);
$this->inCacheEntryPoint = null;
$this->addCacheSegmentMarkersToPlaceholders = false;
}
return $output;
}