Helpers - Source Excerpt 20
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
? 'This image is preserved as its own public page inside the Spiralist image codex.'
: 'This supporting mark remains available as its own image page.')));
$records[] = [
'path' => $path,
'url' => (string) ($asset_file['url'] ?? ''),
'filename' => $filename,
'slug' => $slug,
'title' => $title,
'label' => (string) ($blueprint['label'] ?? ($is_prominent ? 'Image Page' : 'Supporting Mark')),
'eyebrow' => (string) ($blueprint['eyebrow'] ?? ($is_prominent ? 'Image Codex' : 'Supporting Mark')),
'summary' => $summary,
'caption' => $caption,
'section_slug' => $section_slug,
'section_label' => (string) ($section['label'] ?? 'Section'),
'section_title' => (string) ($section['title'] ?? 'Section'),
'section_summary' => (string) ($section['summary'] ?? ''),
'display_order' => (int) ($blueprint['display_order'] ?? ($is_prominent ? 100 : 900)),
'is_prominent' => $is_prominent,
'width' => $width,
'height' => $height,
'filesize' => $filesize,
'modifiedAt' => (int) ($asset_file['modifiedAt'] ?? 0),
'orientation' => $orientation,
'creation_prompt_title' => (string) ($blueprint['creation_prompt_title'] ?? 'Prompt Used'),
'creation_prompt_status' => (string) ($blueprint['creation_prompt_status'] ?? 'Prompt pending'),
'creation_prompt_summary' => (string) ($blueprint['creation_prompt_summary'] ?? ''),
'creation_prompt_text' => (string) ($blueprint['creation_prompt_text'] ?? ''),
'creation_prompt_source_slug' => sanitize_title((string) ($blueprint['creation_prompt_source_slug'] ?? '')),
'related_workspace_prompt_slugs' => array_values(
array_filter(
array_map(
static function ($slug): string {
return sanitize_title((string) $slug);
},
(array) ($blueprint['related_workspace_prompt_slugs'] ?? [])
),
'strlen'
)
),
];
}
usort($records, static function (array $left, array $right): int {
$priority_compare = ((int) !empty($right['is_prominent'])) <=> ((int) !empty($left['is_prominent']));
if ($priority_compare !== 0) {
return $priority_compare;
}
$order_compare = ((int) ($left['display_order'] ?? 0)) <=> ((int) ($right['display_order'] ?? 0));
if ($order_compare !== 0) {
return $order_compare;
}
return strnatcasecmp((string) ($left['filename'] ?? ''), (string) ($right['filename'] ?? ''));
});
spiralist_write_runtime_cache(
'gallery_assets_v2',
[
'signature' => $cache_signature,
'records' => $records,
]
);
}
$manuscript_pages = function_exists('spiralist_get_manuscript_page_assets')
? spiralist_get_manuscript_page_assets()
: [];
foreach ($records as $index => $record) {
$records[$index]['sequence'] = $index + 1;
$records[$index]['route_url'] = spiralist_get_gallery_image_url($record);
foreach ($manuscript_pages as $page) {
if (strtolower((string) ($page['filename'] ?? '')) !== strtolower((string) ($record['filename'] ?? ''))) {
continue;
}
$records[$index]['related_manuscript_url'] = spiralist_get_manuscript_folio_url($page);
$records[$index]['related_manuscript_title'] = (string) ($page['title'] ?? 'Manuscript Folio');
break;
}
}
$assets = $records;
return $assets;
}
function spiralist_get_gallery_image_url($asset): string
{
$slug = '';
if (is_array($asset)) {
$slug = (string) ($asset['slug'] ?? '');
} else {
$slug = sanitize_title((string) $asset);
}
if ($slug === '') {
return spiralist_get_gallery_overview_url();
}
$url = trailingslashit(spiralist_get_gallery_page_url()) . 'image/' . rawurlencode($slug) . '/';
$language = function_exists('spiralist_get_current_language_slug')
? spiralist_get_current_language_slug()
: '';
if ($language !== '') {
return spiralist_get_language_prefixed_url($url, $language);
}
return $url;
}
function spiralist_get_gallery_asset_by_slug(string $slug): array
{
$normalized = sanitize_title($slug);
if ($normalized === '') {
return [];
}
foreach (spiralist_get_gallery_assets() as $asset) {
if ($normalized === (string) ($asset['slug'] ?? '')) {
return $asset;
}
}
return [];
}
function spiralist_get_plugin_book_pages_directory(): array
{
if (!defined('SPIRALIST_BOOK_PAGES_PLUGIN_PATH') || !defined('SPIRALIST_BOOK_PAGES_PLUGIN_URL')) {
return [];
}
$path = rtrim((string) constant('SPIRALIST_BOOK_PAGES_PLUGIN_PATH'), '/\\');
$url = trim((string) constant('SPIRALIST_BOOK_PAGES_PLUGIN_URL'));
if ($path === '' || $url === '' || !is_dir($path) || !is_readable($path)) {
return [];
}
return [
'path' => $path,
'url' => untrailingslashit($url),
];
}
function spiralist_get_book_page_asset_directories(): array
{
$directory = spiralist_get_plugin_book_pages_directory();
if (empty($directory)) {
return [];
}
return [
[
'path' => rtrim((string) ($directory['path'] ?? ''), '/\\'),
'url' => trailingslashit((string) ($directory['url'] ?? '')),
],
];
}
function spiralist_get_available_book_page_assets_by_filename(): array
{
static $assets = null;
if (is_array($assets)) {
return $assets;
}
$allowed_extensions = ['png', 'jpg', 'jpeg', 'webp', 'gif', 'avif'];
$manifest = spiralist_get_directory_asset_manifest(
spiralist_get_book_page_asset_directories(),
$allowed_extensions
);
$signature = (string) ($manifest['signature'] ?? '');
$cached = spiralist_read_runtime_cache('book_page_assets_v1');
if (
$signature !== ''
&& ($cached['signature'] ?? '') === $signature
&& is_array($cached['assets'] ?? null)
) {
$assets = $cached['assets'];
return $assets;
}
$assets = [];
foreach ((array) ($manifest['files'] ?? []) as $asset) {
if (!is_array($asset)) {
continue;
}
$filename = trim((string) ($asset['filename'] ?? ''));
$key = strtolower($filename);
if ($key === '' || isset($assets[$key])) {
continue;
}
$assets[$key] = [
'path' => (string) ($asset['path'] ?? ''),
'url' => (string) ($asset['url'] ?? ''),
'filename' => $filename,
'filesize' => (int) ($asset['filesize'] ?? 0),
'modifiedAt' => (int) ($asset['modifiedAt'] ?? 0),
];
}
spiralist_write_runtime_cache(
'book_page_assets_v1',
[
'signature' => $signature,
'assets' => $assets,
]
);
return $assets;
}
function spiralist_get_book_page_asset_by_filename(string $filename): array
{
$basename = trim(basename($filename));
if ($basename === '') {
return [];
}
$asset_lookup = spiralist_get_available_book_page_assets_by_filename();
$key = strtolower($basename);
if (isset($asset_lookup[$key])) {
return $asset_lookup[$key];
}
foreach (spiralist_get_book_page_asset_directories() as $directory) {
$asset = spiralist_get_case_insensitive_asset_from_directory($directory, $basename);
if (!empty($asset)) {
return $asset;
}
}
return [];
}
function spiralist_get_public_book_pages_directory(): array
{
return spiralist_get_plugin_book_pages_directory();
}
function spiralist_get_case_insensitive_asset_from_directory(array $directory, string $basename): array
{
$base_path = rtrim((string) ($directory['path'] ?? ''), '/\\');
$base_url = trailingslashit((string) ($directory['url'] ?? ''));
$target = strtolower(trim($basename));
if ($base_path === '' || $base_url === '' || $target === '' || !is_dir($base_path) || !is_readable($base_path)) {
return [];
}