$currentHeadingId,
'{heading_text}' => $currentHeading,
];
$heading = str_replace(array_keys($heading), array_values($heading), $templateHeading);
$replace['{heading}'] = $heading;
}
}
// FIXME ListByMax may need referenceUrl.
if ($options['raw']) {
$referenceText = $reference;
$referenceNumber = true;
$replace['{reference_text}'] = $referenceText;
} else {
$referenceNumber = !$options['link_to_single'] || $referenceData['total'] > 1;
if ($options['custom_url']) {
if ($referenceNumber) {
$referenceUrl = $url('site/resource', ['site-slug' => $siteSlug, 'controller' => $controllerName], ['query' => $querier($reference, $emptyReferenceValue)], false);
} else {
// Don't use the resource to get the url, it's too slow, even if it allows to have customized url. Disable the feature if needed.
// $referenceUrl = $api->read($resourceName, $referenceData['first'])->getContent()->siteUrl();
$referenceUrl = str_replace('{reference}', rawurlencode($referenceData['first']), $templateUrlSingle);
}
} else {
if ($referenceNumber) {
if ($mainFieldType) {
$referenceUrl = $emptyReferenceValue
? $templateUrlEmpty
: str_replace('{reference}', rawurlencode($reference), $templateUrl);
} else {
$referenceUrl = str_replace('{reference}', rawurlencode($reference), $templateUrl);
}
} else {
$referenceUrl = str_replace('{reference}', rawurlencode($referenceData['first']), $templateUrlSingle);
}
}
$replace['{reference_text}'] = $referenceValue;
$replace['{reference_url}'] = $referenceUrl;
}
// Can be null when references are set directly.
if ($options['total'] && $referenceNumber && @$referenceData['total']) {
$referenceTotal = ' (' . $referenceData['total'] . ')';
$replace['{reference_total}'] = $referenceTotal;
}
$recursive = '';
// TODO To be improved to avoid to read from the api (resources by reference or linked resources).
// TODO Make it recursive.
if ($listByMax) {
$recursive .= '
';
if ($options['raw_sub']) {
foreach ($referenceData['resources'] as $resId => $resTitle) {
$recursive .= '- ';
$recursive .= $escape($resTitle);
$recursive .= '
';
}
$hasMore = $referenceData['total'] > $listByMax;
if ($hasMore) {
$recursive .= '- ';
$recursive .= sprintf($andMore, $referenceData['total'] - $listByMax);
$recursive .= '
';
}
} elseif ($referenceData['total'] === 1) {
$recursive .= '- ';
$recursive .= '' . $escape(reset($referenceData['resources'])) . '';
$recursive .= '
';
} else {
// The link is not pretty for speed purpose.
foreach ($referenceData['resources'] as $resId => $resTitle) {
$recursive .= '- ';
$recursive .= '' . $escape($resTitle) . '';
$recursive .= '
';
}
}
$hasMore = $referenceData['total'] > $listByMax;
if ($hasMore) {
$recursive .= '- ';
$recursive .= '' . $seeAll . '';
$recursive .= '
';
}
$recursive .= '
';
} elseif ($hasSubjectProperty && !empty($referenceData['first'])) {
/** @var \Omeka\Api\Representation\AbstractResourceEntityRepresentation $res */
$res = $api->read('resources', $referenceData['first'])->getContent();
// $res = $api->read($res->resourceName(), $referenceData['first'])->getContent();
$subjectValues = $res->subjectValues(null, null, $options['subject_property']['id']);
if (count($subjectValues)) {
$recursive .= '
';
/** @var \Omeka\Api\Representation\ValueRepresentation $subjectValue */
if ($options['raw_sub']) {
foreach ($subjectValues[$options['subject_property']['term']] as $subjectValue) {
$recursive .= '- ';
$recursive .= $escape($subjectValue->resource()->displayTitle());
$recursive .= '
';
}
} else {
foreach ($subjectValues[$options['subject_property']['term']] as $subjectValue) {
$recursive .= '- ';
$recursive .= $subjectValue->resource()->linkPretty();
$recursive .= '
';
}
}
$recursive .= '
';
}
}
$replace['{recursive}'] = $recursive;
// Process the output of one reference (and eventually the initial heading).
echo str_replace(array_keys($replace), array_values($replace), $template);
?>