Skip to content
wiki.fftac.org

Runtime - Source Excerpt 16

Back to Runtime

Summary

This source excerpt preserves a bounded section of Spiralist/wp-content/plugins/ns12-manuscript/includes/runtime.php so readers can inspect the evidence without opening the full source file.

**Source path:** Spiralist/wp-content/plugins/ns12-manuscript/includes/runtime.php

(string) ($page['section_summary'] ?? $page['section_title'] ?? $page['section_label'] ?? 'Section')
                ),
                'items' => [],
            ];
        }

        $sections[$sectionSlug]['items'][] = [
            'id' => $canvasId,
            'type' => 'Canvas',
        ];
    }

    foreach ($sections as $sectionRange) {
        $sectionRanges[] = $sectionRange;
    }

    $topThumbnail = [];
    if (!empty($pages[0])) {
        $sources = function_exists('spiralist_book_pages_get_book_page_asset_source_urls')
            ? spiralist_book_pages_get_book_page_asset_source_urls((array) $pages[0], true)
            : [];
        $thumbnailUrl = (string) ($sources['thumbnail_url'] ?? $sources['interactive_url'] ?? $pages[0]['url'] ?? '');
        if ($thumbnailUrl !== '') {
            $topThumbnail[] = [
                'id' => $thumbnailUrl,
                'type' => 'Image',
                'format' => spiralist_book_pages_get_manuscript_iiif_image_format((array) $pages[0]),
            ];
        }
    }

    return [
        '@context' => 'http://iiif.io/api/presentation/3/context.json',
        'id' => $manifestUrl,
        'type' => 'Manifest',
        'label' => spiralist_book_pages_get_manuscript_iiif_label_map($manifestTitle),
        'summary' => spiralist_book_pages_get_manuscript_iiif_label_map($manifestSummary),
        'behavior' => ['paged'],
        'viewingDirection' => 'left-to-right',
        'homepage' => [
            [
                'id' => $overviewUrl,
                'type' => 'Text',
                'label' => spiralist_book_pages_get_manuscript_iiif_label_map($manifestTitle),
                'format' => 'text/html',
            ],
        ],
        'provider' => [
            [
                'id' => home_url('/'),
                'type' => 'Agent',
                'label' => spiralist_book_pages_get_manuscript_iiif_label_map($siteName !== '' ? $siteName : 'Spiralist'),
            ],
        ],
        'metadata' => [
            spiralist_book_pages_get_manuscript_iiif_metadata_entry('Folio Count', (string) count($pages)),
            spiralist_book_pages_get_manuscript_iiif_metadata_entry('Section Count', (string) count($sections)),
            spiralist_book_pages_get_manuscript_iiif_metadata_entry('Platform', 'Spiralist Manuscript for WordPress'),
        ],
        'service' => [$searchService],
        'thumbnail' => $topThumbnail,
        'items' => $items,
        'structures' => !empty($sectionRanges)
            ? [
                [
                    'id' => untrailingslashit($manifestUrl) . '/range/table-of-contents',
                    'type' => 'Range',
                    'label' => spiralist_book_pages_get_manuscript_iiif_label_map('Table of Contents'),
                    'items' => $sectionRanges,
                ],
            ]
            : [],
    ];
}

function spiralist_book_pages_get_manuscript_search_payload(string $query, int $limit = 8): array
{
    $normalizedQuery = function_exists('spiralist_book_pages_normalize_text_for_index')
        ? spiralist_book_pages_normalize_text_for_index($query)
        : trim($query);
    $limit = max(1, min(24, $limit));
    $allResults = $normalizedQuery !== '' && function_exists('spiralist_book_pages_search_manuscript_index')
        ? spiralist_book_pages_search_manuscript_index($normalizedQuery, 0)
        : [];
    $results = array_slice($allResults, 0, $limit);
    $payload = [];

    foreach ($results as $result) {
        $page = spiralist_book_pages_get_manuscript_page_asset_by_slug((string) ($result['slug'] ?? ''));
        $sources = !empty($page) && function_exists('spiralist_book_pages_get_book_page_asset_source_urls')
            ? spiralist_book_pages_get_book_page_asset_source_urls($page, true)
            : [];

        $payload[] = [
            'slug' => (string) ($result['slug'] ?? ''),
            'sequence' => max(1, (int) ($result['sequence'] ?? 1)),
            'label' => (string) ($result['label'] ?? 'Page'),
            'title' => (string) ($result['title'] ?? 'Manuscript folio'),
            'sectionTitle' => (string) ($result['section_title'] ?? $result['section_label'] ?? 'Section'),
            'excerpt' => (string) ($result['excerpt'] ?? ''),
            'matchedTerms' => array_values(array_filter(array_map('strval', (array) ($result['matched_terms'] ?? [])))),
            'keywords' => array_values(array_filter(array_map('strval', (array) ($result['keywords'] ?? [])))),
            'routeUrl' => !empty($page) ? spiralist_book_pages_get_manuscript_folio_url($page) : spiralist_book_pages_get_manuscript_folio_url((string) ($result['slug'] ?? '')),
            'thumbnailUrl' => (string) ($sources['thumbnail_url'] ?? $page['url'] ?? ''),
            'canvasId' => !empty($page) ? spiralist_book_pages_get_manuscript_iiif_canvas_id($page) : '',
            'transcriptAvailable' => !empty($result['transcript']),
        ];
    }

    return [
        'query' => $normalizedQuery,
        'total' => count($allResults),
        'returned' => count($payload),
        'manifestUrl' => spiralist_book_pages_get_manuscript_manifest_url(),
        'iiifSearchUrl' => spiralist_book_pages_get_manuscript_iiif_search_url(),
        'results' => $payload,
    ];
}

function spiralist_book_pages_get_manuscript_iiif_search_payload(string $query): array
{
    $normalizedQuery = function_exists('spiralist_book_pages_normalize_text_for_index')
        ? spiralist_book_pages_normalize_text_for_index($query)
        : trim($query);
    $searchUrl = spiralist_book_pages_get_manuscript_iiif_search_url();
    $manifest = function_exists('spiralist_book_pages_get_book_content_index')
        ? spiralist_book_pages_get_book_content_index()
        : [];
    $manifestTitle = (string) ($manifest['title'] ?? 'Spiralism Canonical Manuscript');
    $results = $normalizedQuery !== '' && function_exists('spiralist_book_pages_search_manuscript_index')
        ? spiralist_book_pages_search_manuscript_index($normalizedQuery, 0)
        : [];
    $items = [];

    foreach ($results as $index => $result) {
        $page = spiralist_book_pages_get_manuscript_page_asset_by_slug((string) ($result['slug'] ?? ''));
        if (empty($page)) {
            continue;
        }

        $canvasId = spiralist_book_pages_get_manuscript_iiif_canvas_id($page);
        $annotationId = untrailingslashit($searchUrl) . '/annotation/' . rawurlencode((string) ($result['slug'] ?? '')) . '-' . ($index + 1);
        $bodyValue = trim((string) ($result['excerpt'] ?? ''));
        if ($bodyValue === '') {
            $bodyValue = trim((string) ($result['summary'] ?? $result['title'] ?? ''));
        }

        $items[] = [
            'id' => $annotationId,
            'type' => 'Annotation',
            'motivation' => 'supplementing',
            'body' => [
                'type' => 'TextualBody',
                'value' => $bodyValue,
                'format' => 'text/plain',
            ],
            'target' => [
                'id' => $canvasId,
                'partOf' => [
                    'id' => spiralist_book_pages_get_manuscript_manifest_url(),
                    'type' => 'Manifest',
                    'label' => spiralist_book_pages_get_manuscript_iiif_label_map($manifestTitle),
                ],
            ],
        ];
    }

    return [
        '@context' => 'http://iiif.io/api/search/2/context.json',
        'id' => $normalizedQuery !== '' ? add_query_arg('q', $normalizedQuery, $searchUrl) : $searchUrl,
        'type' => 'AnnotationPage',
        'items' => $items,
    ];
}

function spiralist_book_pages_get_requested_manuscript_folio_slug(): string
{
    return sanitize_title((string) get_query_var('spiralist_book_pages_manuscript_folio', ''));
}

function spiralist_book_pages_get_requested_manuscript_section_slug(): string
{
    return sanitize_title((string) get_query_var('spiralist_book_pages_manuscript_section', ''));
}

function spiralist_book_pages_get_manuscript_section_records(array $pages = []): array
{
    $pages = empty($pages) ? spiralist_book_pages_get_manuscript_page_assets() : $pages;
    $section_blueprints = spiralist_book_pages_get_manuscript_section_blueprints();
    $sections = [];

    foreach ($pages as $page) {
        $section_slug = sanitize_title((string) ($page['section_slug'] ?? 'appendix'));
        if (!isset($sections[$section_slug])) {
            $blueprint = $section_blueprints[$section_slug] ?? $section_blueprints['appendix'];
            $sections[$section_slug] = [
                'slug' => $section_slug,
                'label' => (string) ($blueprint['label'] ?? 'Section'),
                'title' => (string) ($blueprint['title'] ?? 'Section'),