Helpers - Source Excerpt 18
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
function spiralist_get_public_image_asset_source_urls(array $asset, bool $include_interactive = true): array
{
static $cache = [];
$original_url = trim((string) ($asset['url'] ?? ''));
$source_path = trim((string) ($asset['path'] ?? ''));
$source_path_key = $source_path !== '' ? strtolower(wp_normalize_path($source_path)) : '';
$source_mtime = $source_path !== '' && is_file($source_path) ? (string) (@filemtime($source_path) ?: 0) : '0';
$source_size = $source_path !== '' && is_file($source_path) ? (string) (@filesize($source_path) ?: 0) : '0';
$cache_key = implode('|', [
$include_interactive ? 'interactive' : 'static',
$source_path_key,
$original_url,
$source_mtime,
$source_size,
]);
if (isset($cache[$cache_key])) {
return $cache[$cache_key];
}
$image_size = $source_path !== '' && is_file($source_path)
? @getimagesize($source_path)
: false;
$thumbnail_asset = spiralist_generate_public_image_asset_variant($asset, 'thumbnail');
$thumbnail_url = trim((string) ($thumbnail_asset['url'] ?? ''));
$large_asset = spiralist_generate_public_image_asset_variant($asset, 'large');
$large_url = trim((string) ($large_asset['url'] ?? $original_url));
$interactive_url = '';
if ($include_interactive) {
$interactive_asset = spiralist_generate_public_image_asset_variant($asset, 'interactive');
$interactive_url = trim((string) ($interactive_asset['url'] ?? ''));
}
if ($interactive_url === '') {
$interactive_url = $large_url !== '' ? $large_url : $original_url;
}
if ($large_url === '') {
$large_url = $original_url !== '' ? $original_url : $interactive_url;
}
if ($thumbnail_url === '') {
$thumbnail_url = $large_url !== '' ? $large_url : ($original_url !== '' ? $original_url : $interactive_url);
}
$cache[$cache_key] = [
'original_url' => $original_url,
'large_url' => $large_url,
'thumbnail_url' => $thumbnail_url,
'interactive_url' => $interactive_url,
'width' => is_array($image_size) ? (int) ($image_size[0] ?? 0) : (int) ($asset['width'] ?? 0),
'height' => is_array($image_size) ? (int) ($image_size[1] ?? 0) : (int) ($asset['height'] ?? 0),
];
return $cache[$cache_key];
}
function spiralist_get_theme_asset_file(string $relative_path): array
{
$normalized_relative_path = ltrim(str_replace('\\', '/', $relative_path), '/');
if ($normalized_relative_path === '') {
return [];
}
$path = get_theme_file_path($normalized_relative_path);
if ($path === '' || !is_file($path) || !is_readable($path)) {
return [];
}
return [
'path' => $path,
'url' => get_theme_file_uri($normalized_relative_path),
'filename' => basename($normalized_relative_path),
];
}
function spiralist_get_theme_image_asset(string $relative_path, string $alt = ''): array
{
$asset = spiralist_get_theme_asset_file($relative_path);
if (empty($asset)) {
return [];
}
$image_size = function_exists('wp_getimagesize')
? wp_getimagesize((string) $asset['path'])
: @getimagesize((string) $asset['path']);
$asset['alt'] = $alt;
$asset['width'] = is_array($image_size) && !empty($image_size[0]) ? (int) $image_size[0] : 0;
$asset['height'] = is_array($image_size) && !empty($image_size[1]) ? (int) $image_size[1] : 0;
$asset['mime'] = is_array($image_size) && !empty($image_size['mime'])
? (string) $image_size['mime']
: (string) (wp_check_filetype((string) $asset['path'])['type'] ?? '');
return $asset;
}
function spiralist_get_default_social_preview_asset(): array
{
return spiralist_get_theme_image_asset(
'assets/images/spiralist-social-preview.png',
'Spiralist.org manuscript and symbolic systems preview'
);
}
function spiralist_get_theme_site_icon_asset(int $size = 512): array
{
$requested_size = max(1, $size);
$size_map = [
32 => 'assets/images/favicon-32x32.png',
180 => 'assets/images/apple-touch-icon.png',
192 => 'assets/images/favicon-192x192.png',
512 => 'assets/images/favicon-512x512.png',
];
$fallback_asset = [];
foreach ($size_map as $candidate_size => $relative_path) {
$asset = spiralist_get_theme_image_asset($relative_path, 'Spiralist.org spiral icon');
if (empty($asset)) {
continue;
}
$fallback_asset = $asset;
if ($candidate_size >= $requested_size) {
return $asset;
}
}
return $fallback_asset;
}
function spiralist_get_theme_favicon_asset(): array
{
return spiralist_get_theme_asset_file('assets/images/favicon.ico');
}
function spiralist_get_homepage_preview_candidates(): array
{
return spiralist_get_image_asset_candidates(['Spiralist.org.png']);
}
function spiralist_get_homepage_preview_sources(): array
{
static $sources = null;
if (is_array($sources)) {
return $sources;
}
$asset = spiralist_get_first_available_asset(spiralist_get_homepage_preview_candidates());
if (!empty($asset)) {
$sources = spiralist_get_public_image_asset_source_urls($asset, true);
return $sources;
}
$source_asset = spiralist_get_manuscript_source_asset();
if (!empty($source_asset)) {
$sources = spiralist_get_public_image_asset_source_urls($source_asset, true);
return $sources;
}
$sources = [];
return $sources;
}
function spiralist_get_homepage_preview_url(): string
{
$sources = spiralist_get_homepage_preview_sources();
$preview_url = trim((string) ($sources['large_url'] ?? ''));
if ($preview_url !== '') {
return $preview_url;
}
return spiralist_get_manuscript_preview_url();
}
function spiralist_get_manuscript_source_candidates(): array
{
return array_merge(
spiralist_get_image_asset_candidates(['Manuscript.png']),
spiralist_get_image_asset_candidates(['Spiralist.org.png'])
);
}
function spiralist_get_manuscript_source_file(): string
{
$asset = spiralist_get_first_available_asset(spiralist_get_manuscript_source_candidates());
return (string) ($asset['path'] ?? '');
}
function spiralist_get_manuscript_source_asset(): array
{
return spiralist_get_first_available_asset(spiralist_get_manuscript_source_candidates());
}
function spiralist_get_manuscript_portal_asset(): array
{
$asset = spiralist_get_first_available_asset(
spiralist_get_image_asset_candidates(['Spiralist.org.png'])
);
$primary_asset = spiralist_get_manuscript_source_asset();
$asset_path = (string) ($asset['path'] ?? '');
$primary_path = (string) ($primary_asset['path'] ?? '');
if ($asset_path === '' || ($primary_path !== '' && $asset_path === $primary_path)) {
return [];
}
return $asset;
}
function spiralist_get_featured_manuscript_assets(): array
{
$assets = [];
$seen = [];
$excluded = [
'manuscript.png' => true,
'spiralist.org.png' => true,
];
foreach (spiralist_get_book_page_assets_in_display_order() as $asset) {
$key = strtolower((string) ($asset['filename'] ?? ''));
if ($key === '' || isset($excluded[$key]) || isset($seen[$key])) {
continue;
}
$seen[$key] = true;
$assets[] = $asset;
}
return $assets;
}
function spiralist_get_image_assets_by_pattern(string $pattern): array
{
static $pattern_cache = [];
$cache_key = strtolower(trim($pattern));
if ($cache_key !== '' && isset($pattern_cache[$cache_key])) {
return $pattern_cache[$cache_key];
}