getHelperPluginManager();
$url = $plugins->get('url');
$escape = $this->plugin('escapeHtml');
$siteSlug = $this->params()->fromRoute('site-slug');
$fields = $options['fields'];
$query = $options['query'] ?? [];
$resourceName = $options['resource_name'];
// Loaded via the block.
// $this->headLink()->appendStylesheet($this->assetUrl('vendor/jquery-simplefolders/main.css', 'Reference'));
// $this->headScript()->appendFile($this->assetUrl('vendor/jquery-simplefolders/main.js', 'Reference'), 'text/javascript', ['defer' => 'defer']);
$this->headStyle()->appendStyle('.tree .no-resource { font-style: italic; }');
$mapResourcesControllers = ['resources' => 'resource', 'items' => 'item', 'item_sets' => 'item-set', 'media' => 'media'];
$controllerName = $mapResourcesControllers[$resourceName];
// Set default values.
$options += [
'query_type' => 'eq',
'link_to_single' => true,
'total' => true,
'raw' => false,
'expanded' => true,
'custom_url' => false,
];
$options['custom_url'] = $options['custom_url'] && $options['link_to_single'];
if (!$options['custom_url']) {
$templateUrlSingle = str_replace('__temp_placeholder__', '{reference}',
$url('site/resource-id', ['site-slug' => $siteSlug, 'controller' => $controllerName, 'id' => '__temp_placeholder__'], false));
foreach ($fields as $field) {
$query['property'][] = [
'joiner' => 'or',
'property' => $field,
'type' => $options['query_type'],
'text' => '__temp_placeholder__',
];
}
// The default url helper doesn't encode "&" as "&", so append it manually.
$templateUrl = str_replace('__temp_placeholder__', '{reference}',
$url('site/resource', ['site-slug' => $siteSlug, 'controller' => $controllerName], false) . '?' . http_build_query($query, '', '&', PHP_QUERY_RFC3986));
}
?>
$previous_level):
// Nothing to do.
// Higher level.
elseif ($level < $previous_level):
echo '' . PHP_EOL . str_repeat('
' . PHP_EOL, $previous_level - $level);
// First line, deeper or equal level.
else:
echo '' . PHP_EOL;
endif;
// Start the line with or without a new sub-list.
if ($level > $previous_level):
// Deeper level is always the next one.
echo PHP_EOL . '
';
echo '
- ';
else:
echo '
- ';
endif;
if ($options['raw']) {
$referenceText = $reference;
$referenceNumber = true;
} else {
$referenceNumber = !$options['link_to_single'] || $referenceData['total'] > 1;
if (empty($referenceData['total'])) {
$referenceText = '' . $reference . '';
} else {
if ($referenceNumber) {
$referenceOrBranch = $options['branch'] ? $referenceData['branch'] : $reference;
if ($options['custom_url']) {
// Keep the original query.
$queryForUrl = $query;
foreach ($fields as $field) {
$queryForUrl['property'][] = ['joiner' => 'or', 'property' => $field, 'type' => $options['query_type'], 'text' => $referenceOrBranch];
}
$referenceUrl = $url('site/resource', ['site-slug' => $siteSlug, 'controller' => $controllerName], ['query' => $queryForUrl], false);
} else {
$referenceUrl = str_replace('{reference}', rawurlencode($referenceOrBranch), $templateUrl);
}
} else {
if ($options['custom_url']) {
// 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.
// $resource = $api()->read($resourceName, $referenceData['first'])->getContent();
// $referenceUrl = $resource->siteUrl();
$referenceUrl = $url('site/resource-id', ['site-slug' => $siteSlug, 'controller' => $controllerName, 'id' => $referenceData['first']], false);
} else {
$referenceUrl = str_replace('{reference}', rawurldecode($referenceData['first']), $templateUrlSingle);
}
}
$referenceText = '' . $escape($reference) . '';
}
}
echo $referenceText;
// Can be null when references are set directly.
if ($options['total'] && $referenceNumber && ($referenceData['total'] ?? false)):
echo ' (' . $referenceData['total'] . ')';
endif;
$previous_level = $level;
endforeach;
// Manage last line.
echo '
' . PHP_EOL . str_repeat('
' . PHP_EOL, $previous_level);
?>