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)); } ?>
' . 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); ?>