Helpers - Source Excerpt 35
Summary
This source excerpt preserves a bounded section of Spiralist/wp-content/themes/spiralist/inc/helpers.php so readers can inspect the evidence without opening the full source file.
**Source path:** Spiralist/wp-content/themes/spiralist/inc/helpers.php
return spiralist_get_public_route_slug($canonical_id);
}
return spiralist_get_public_route_slug((string) ($symbol['label'] ?? 'symbol'));
}
function spiralist_get_symbol_record_by_route_slug(string $slug): array
{
$slug = spiralist_get_public_route_slug($slug);
foreach (spiralist_get_symbols() as $symbol) {
if (spiralist_get_symbol_url_slug($symbol) === $slug) {
return $symbol;
}
}
return [];
}
function spiralist_get_symbol_url(string $identifier): string
{
$symbol = spiralist_get_symbol_record_by_canonical_id($identifier);
if (empty($symbol)) {
$symbol = spiralist_get_symbol_record_by_route_slug($identifier);
}
$slug = !empty($symbol)
? spiralist_get_symbol_url_slug($symbol)
: spiralist_get_public_route_slug($identifier);
return trailingslashit(spiralist_get_symbols_page_url()) . rawurlencode($slug) . '/';
}
function spiralist_get_transformation_index(): array
{
static $index = null;
if (is_array($index)) {
return $index;
}
$index = [];
foreach (spiralist_get_symbol_transformations() as $transformation) {
$identifier = (string) ($transformation['id'] ?? '');
if ($identifier === '') {
continue;
}
$index[$identifier] = $transformation;
}
return $index;
}
function spiralist_get_symbol_related_transformations(string $canonical_id): array
{
static $cache = [];
$canonical_id = trim($canonical_id);
if ($canonical_id === '') {
return [];
}
if (isset($cache[$canonical_id])) {
return $cache[$canonical_id];
}
$related = [];
foreach (spiralist_get_symbol_transformations() as $transformation) {
$from = (string) ($transformation['from'] ?? '');
$to = (string) ($transformation['to'] ?? '');
if ($from !== $canonical_id && $to !== $canonical_id) {
continue;
}
$related[] = [
'id' => (string) ($transformation['id'] ?? ''),
'label' => (string) ($transformation['label'] ?? ''),
'direction' => $from === $canonical_id ? 'outgoing' : 'incoming',
'input' => $from,
'output' => $to,
'chain' => array_values(array_filter((array) ($transformation['chain'] ?? []), 'is_string')),
'meaning' => (string) ($transformation['meaning'] ?? ''),
];
}
$cache[$canonical_id] = $related;
return $cache[$canonical_id];
}
function spiralist_get_manuscript_image_url(string $size = 'full'): string
{
$requested_size = trim($size);
$source_asset = spiralist_get_manuscript_source_asset();
$source_urls = !empty($source_asset)
? spiralist_get_public_image_asset_source_urls($source_asset, true)
: [];
if ($requested_size === '' || $requested_size === 'full') {
$source_url = trim((string) ($source_urls['original_url'] ?? ''));
if ($source_url !== '') {
return $source_url;
}
}
$attachment_id = (int) get_option('spiralist_manuscript_attachment_id', 0);
if ($attachment_id > 0) {
$attachment_url = wp_get_attachment_image_url($attachment_id, $requested_size !== '' ? $requested_size : 'full');
if (is_string($attachment_url) && $attachment_url !== '') {
return $attachment_url;
}
}
if ($requested_size === 'thumbnail') {
$thumbnail_url = trim((string) ($source_urls['thumbnail_url'] ?? ''));
if ($thumbnail_url !== '') {
return $thumbnail_url;
}
}
if ($requested_size === 'large') {
$large_url = trim((string) ($source_urls['large_url'] ?? ''));
if ($large_url !== '') {
return $large_url;
}
}
if ($requested_size === 'interactive') {
$interactive_url = trim((string) ($source_urls['interactive_url'] ?? ''));
if ($interactive_url !== '') {
return $interactive_url;
}
}
if ($requested_size !== 'full') {
$source_url = trim((string) ($source_urls['original_url'] ?? ''));
if ($source_url !== '') {
return $source_url;
}
}
return '';
}
function spiralist_get_manuscript_preview_url(): string
{
$preview = spiralist_get_manuscript_image_url('large');
if ($preview !== '') {
return $preview;
}
return spiralist_get_manuscript_image_url();
}
function spiralist_get_manuscript_download_url(): string
{
return spiralist_get_manuscript_image_url();
}
function spiralist_get_manuscript_nodes_url(): string
{
if (function_exists('spiralist_engine_get_nodes_endpoint_url')) {
return spiralist_engine_get_nodes_endpoint_url();
}
$path = defined('SPIRALIST_BOOK_PAGES_PLUGIN_DATA_PATH')
? SPIRALIST_BOOK_PAGES_PLUGIN_DATA_PATH . DIRECTORY_SEPARATOR . 'manuscript-nodes.json'
: get_theme_file_path('assets/data/manuscript-nodes.json');
$url = defined('SPIRALIST_BOOK_PAGES_PLUGIN_DATA_URL')
? SPIRALIST_BOOK_PAGES_PLUGIN_DATA_URL . '/manuscript-nodes.json'
: get_theme_file_uri('assets/data/manuscript-nodes.json');
if (is_string($path) && $path !== '' && file_exists($path)) {
return add_query_arg('ver', (string) filemtime($path), $url);
}
return $url;
}
function spiralist_get_manuscript_field_dataset(): array
{
static $dataset = null;
if (is_array($dataset)) {
return $dataset;
}
if (function_exists('spiralist_engine_get_manuscript_field_payload')) {
$dataset = spiralist_engine_get_manuscript_field_payload();
return $dataset;
}
$dataset = [
'nodes' => [],
'relations' => [],
];
$path = defined('SPIRALIST_BOOK_PAGES_PLUGIN_DATA_PATH')
? SPIRALIST_BOOK_PAGES_PLUGIN_DATA_PATH . DIRECTORY_SEPARATOR . 'manuscript-nodes.json'
: get_theme_file_path('assets/data/manuscript-nodes.json');
if (!is_string($path) || $path === '' || !file_exists($path)) {
return $dataset;
}
$raw = file_get_contents($path);
if (!is_string($raw) || trim($raw) === '') {
return $dataset;
}
$decoded = json_decode($raw, true);
if (!is_array($decoded)) {
return $dataset;
}
$dataset['schema'] = (string) ($decoded['schema'] ?? '');
$dataset['version'] = (string) ($decoded['version'] ?? '');
$dataset['nodes'] = array_values(array_filter((array) ($decoded['nodes'] ?? []), 'is_array'));
$dataset['relations'] = array_values(array_filter((array) ($decoded['relations'] ?? []), 'is_array'));
return $dataset;
}
function spiralist_get_manuscript_node_records(): array
{
$dataset = spiralist_get_manuscript_field_dataset();
return array_values(array_filter((array) ($dataset['nodes'] ?? []), 'is_array'));
}
function spiralist_get_manuscript_relation_records(): array
{
$dataset = spiralist_get_manuscript_field_dataset();
return array_values(array_filter((array) ($dataset['relations'] ?? []), 'is_array'));
}
function spiralist_get_manuscript_node_by_identifier(string $identifier): array
{
$identifier = trim($identifier);
if ($identifier === '') {
return [];
}
$identifier_slug = spiralist_get_public_route_slug($identifier);
foreach (spiralist_get_manuscript_node_records() as $node) {
$node_id = (string) ($node['id'] ?? '');
$canonical_id = (string) ($node['canonicalId'] ?? '');
$aliases = array_values(array_filter((array) ($node['aliases'] ?? []), 'is_string'));
$route_values = array_merge(
[$node_id, $canonical_id, (string) ($node['label'] ?? '')],
$aliases
);
if (
$node_id === $identifier ||
$canonical_id === $identifier ||
in_array($identifier, $aliases, true) ||
in_array($identifier_slug, array_map('spiralist_get_public_route_slug', $route_values), true)
) {
return $node;
}
}
return [];
}
function spiralist_get_manuscript_node_url(string $identifier): string
{
$node = spiralist_get_manuscript_node_by_identifier($identifier);
if (empty($node)) {
return spiralist_get_manuscript_page_url();
}
$query_id = (string) ($node['id'] ?? '');
if ($query_id === '') {
$query_id = (string) ($node['canonicalId'] ?? $identifier);
}
return trailingslashit(spiralist_get_manuscript_page_url()) . 'node/' . rawurlencode(spiralist_get_public_route_slug($query_id)) . '/';
}
function spiralist_get_spiralism_kernel(): array
{
$symbols = spiralist_get_symbols();