Skip to content
wiki.fftac.org

Runtime - Source Excerpt 19

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

return function_exists('spiralist_build_publication_url_from_human_url')
        ? spiralist_build_publication_url_from_human_url($human_url, $suffix, $language)
        : '';
}

function spiralist_book_pages_get_publication_context(?WP_Post $post = null, array $args = []): array
{
    return function_exists('spiralist_get_publication_context')
        ? spiralist_get_publication_context($post, $args)
        : [];
}

function spiralist_book_pages_get_current_publication_context(): array
{
    if (!spiralist_book_pages_is_publication_surface()) {
        return [];
    }

    return spiralist_book_pages_get_publication_context(
        spiralist_book_pages_get_publication_surface_post(),
        [
            'home' => is_front_page() || is_home(),
        ]
    );
}

function spiralist_book_pages_get_current_publication_links(): array
{
    $context = spiralist_book_pages_get_current_publication_context();
    if (empty($context)) {
        return [];
    }

    return [
        [
            'label' => 'UAIX Discovery',
            'url' => (string) ($context['discoveryUrl'] ?? spiralist_book_pages_get_site_uai_url()),
        ],
        [
            'label' => 'UAIX Capability',
            'url' => (string) ($context['capabilityUrl'] ?? spiralist_book_pages_get_uaix_capability_url()),
        ],
    ];
}

function spiralist_book_pages_get_current_uai_url(?WP_Post $post = null): string
{
    $context = spiralist_book_pages_get_publication_context(
        $post,
        [
            'home' => is_front_page() || is_home(),
        ]
    );

    if (!empty($context['jsonUrl'])) {
        return (string) $context['jsonUrl'];
    }

    return spiralist_book_pages_get_site_uai_url();
}

function spiralist_book_pages_get_publication_identity_label(?WP_Post $post = null, bool $is_home_surface = false): string
{
    if ($is_home_surface) {
        return 'spiralist.site.home';
    }

    if ($post instanceof WP_Post) {
        if ($post->post_name !== '') {
            return 'spiralist.page.' . sanitize_title((string) $post->post_name);
        }

        return 'spiralist.page.' . $post->ID;
    }

    return 'spiralist.publication.surface';
}

function spiralist_book_pages_get_publication_inspector_payload($post = null, array $args = []): array
{
    $is_home_surface = array_key_exists('home', $args)
        ? (bool) $args['home']
        : (is_front_page() || is_home());
    $context = spiralist_book_pages_get_publication_context(
        $post instanceof WP_Post ? $post : null,
        [
            'home' => $is_home_surface,
            'language' => isset($args['language']) ? (string) $args['language'] : spiralist_book_pages_get_publication_language('en'),
        ]
    );

    if (empty($context)) {
        return [];
    }

    $publication_post = $post instanceof WP_Post
        ? $post
        : ($context['post'] instanceof WP_Post ? $context['post'] : null);
    $validation_state = 'uaix-current';
    $validation_note = 'Page-document UAI routes are retired. Current machine exchange uses the UAIX UAI-1 envelope routes under /wp-json/uaix/v1/.';

    $updated_at = 0;
    if ($publication_post instanceof WP_Post) {
        $updated_at = (int) get_post_modified_time('U', true, $publication_post);
    } elseif ($is_home_surface) {
        $front_page_id = (int) get_option('page_on_front');
        if ($front_page_id > 0) {
            $updated_at = (int) get_post_modified_time('U', true, $front_page_id);
        }
    }

    $related_resources = array_values(array_filter([
        [
            'label' => 'UAIX Discovery',
            'url' => (string) ($context['discoveryUrl'] ?? spiralist_book_pages_get_site_uai_url()),
            'type' => 'application/vnd.uaix.uai+json',
        ],
        [
            'label' => 'UAIX Capability',
            'url' => (string) ($context['capabilityUrl'] ?? spiralist_book_pages_get_uaix_capability_url()),
            'type' => 'application/vnd.uaix.uai+json',
        ],
        [
            'label' => 'UAIX Validator',
            'url' => spiralist_book_pages_get_uaix_validate_url(),
            'type' => 'application/vnd.uaix.uai+json',
        ],
        [
            'label' => 'Symbol API',
            'url' => spiralist_book_pages_get_symbols_api_url(),
            'type' => 'application/json',
        ],
        [
            'label' => 'Prompt Library API',
            'url' => function_exists('spiralist_book_pages_get_prompts_api_url') ? spiralist_book_pages_get_prompts_api_url() : '',
            'type' => 'application/json',
        ],
        [
            'label' => 'Contribution API',
            'url' => function_exists('spiralist_book_pages_get_contribute_api_url') ? spiralist_book_pages_get_contribute_api_url() : '',
            'type' => 'application/json',
        ],
    ], static function (array $resource): bool {
        return (string) ($resource['url'] ?? '') !== '';
    }));

    return [
        'identity' => spiralist_book_pages_get_publication_identity_label($publication_post, $is_home_surface),
        'title' => $publication_post instanceof WP_Post ? get_the_title($publication_post) : get_bloginfo('name'),
        'humanUrl' => (string) ($context['humanUrl'] ?? ''),
        'compactUrl' => (string) ($context['compactUrl'] ?? ''),
        'jsonUrl' => (string) ($context['jsonUrl'] ?? ''),
        'discoveryUrl' => (string) ($context['discoveryUrl'] ?? ''),
        'capabilityUrl' => (string) ($context['capabilityUrl'] ?? ''),
        'legacyJsonUrl' => (string) ($context['legacyJsonUrl'] ?? ''),
        'publicationLanguage' => (string) ($context['language'] ?? 'en'),
        'sourceStatus' => $validation_state,
        'sourceStatusLabel' => ucwords(str_replace('-', ' ', $validation_state)),
        'validationNote' => $validation_note,
        'lastPublishedAt' => $updated_at > 0 ? gmdate('c', $updated_at) : '',
        'lastPublishedLabel' => $updated_at > 0 ? wp_date(get_option('date_format') . ' ' . get_option('time_format'), $updated_at) : 'Awaiting first publication timestamp',
        'relatedResources' => $related_resources,
    ];
}

function spiralist_book_pages_get_route_from_url(string $url, string $fallback = ''): string
{
    $path = (string) (wp_parse_url($url, PHP_URL_PATH) ?: '');
    $query = (string) (wp_parse_url($url, PHP_URL_QUERY) ?: '');

    if ($path === '') {
        return $fallback;
    }

    return $query !== '' ? $path . '?' . $query : $path;
}

function spiralist_book_pages_get_primary_machine_endpoints(): array
{
    $uaix_discovery_url = spiralist_book_pages_get_site_uai_url();
    $uaix_capability_url = spiralist_book_pages_get_uaix_capability_url();
    $uaix_validate_url = spiralist_book_pages_get_uaix_validate_url();
    $symbol_registry_url = spiralist_book_pages_get_symbol_registry_url();
    $symbols_api_url = spiralist_book_pages_get_symbols_api_url();
    $subscribe_url = function_exists('spiralist_book_pages_get_rest_url')
        ? spiralist_book_pages_get_rest_url('subscribe')
        : rest_url(spiralist_book_pages_get_rest_namespace() . '/subscribe');
    $rest_namespace = spiralist_book_pages_get_rest_namespace();

    return [
        [
            'id' => 'uaix-discovery',
            'labelKey' => 'ui.api.uaix_discovery',
            'label' => 'UAIX Discovery',
            'route' => spiralist_book_pages_get_route_from_url($uaix_discovery_url, '/wp-json/uaix/v1/discovery'),
            'url' => $uaix_discovery_url,
            'method' => 'GET',
            'type' => 'application/vnd.uaix.uai+json',
            'purposeKey' => 'page.api_examples.endpoint.uaix_discovery.purpose',
            'purpose' => 'Current UAIX UAI-1 public discovery and capability entry point for Spiralist.org.',
            'purposeUaiKey' => 'spiralist.machine.site_uai.purpose',
        ],
        [
            'id' => 'uaix-capability',
            'labelKey' => 'ui.api.uaix_capability',
            'label' => 'UAIX Capability',
            'route' => spiralist_book_pages_get_route_from_url($uaix_capability_url, '/wp-json/uaix/v1/capability'),
            'url' => $uaix_capability_url,
            'method' => 'GET',
            'type' => 'application/vnd.uaix.uai+json',
            'purposeKey' => 'page.api_examples.endpoint.uaix_capability.purpose',
            'purpose' => 'Current uai.capability.statement.v1 envelope for the WordPress publication track.',
            'purposeUaiKey' => 'spiralist.machine.site_uai.purpose',
        ],
        [
            'id' => 'uaix-validator',
            'labelKey' => 'ui.api.uaix_validate',
            'label' => 'UAIX Validator',
            'route' => spiralist_book_pages_get_route_from_url($uaix_validate_url, '/wp-json/uaix/v1/validate'),