Skip to content
wiki.fftac.org

Runtime - Source Excerpt 01

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

<?php

if (!defined('ABSPATH')) {
    exit;
}

function spiralist_book_pages_get_page_url(string $path, string $fallback_anchor = ''): string
{
    $normalized = trim($path, '/');

    if ($normalized !== '') {
        $page = get_page_by_path($normalized);
        if ($page instanceof WP_Post && $page->post_status === 'publish') {
            $url = get_permalink($page);
            if (is_string($url) && $url !== '') {
                return $url;
            }
        }
    }

    if ($fallback_anchor !== '') {
        return home_url('/' . ltrim($fallback_anchor, '/'));
    }

    return home_url('/' . $normalized . '/');
}

function spiralist_book_pages_get_existing_page_url(string $path): string
{
    $normalized = trim($path, '/');
    if ($normalized === '') {
        return '';
    }

    $page = get_page_by_path($normalized);
    if (!$page instanceof WP_Post || $page->post_status !== 'publish') {
        return '';
    }

    $url = get_permalink($page);

    return is_string($url) ? $url : '';
}

function spiralist_book_pages_array_is_list_compat(array $value): bool
{
    if (function_exists('array_is_list')) {
        return array_is_list($value);
    }

    $expected_index = 0;

    foreach (array_keys($value) as $key) {
        if ($key !== $expected_index) {
            return false;
        }

        $expected_index++;
    }

    return true;
}

function spiralist_book_pages_string_starts_with_compat(string $value, string $prefix): bool
{
    if (function_exists('str_starts_with')) {
        return str_starts_with($value, $prefix);
    }

    if ($prefix === '') {
        return true;
    }

    return strpos($value, $prefix) === 0;
}

function spiralist_book_pages_get_first_available_page_url(array $paths, string $fallback_path = ''): string
{
    foreach ($paths as $path) {
        $normalized = trim((string) $path, '/');
        if ($normalized === '') {
            continue;
        }

        $page = get_page_by_path($normalized);
        if ($page instanceof WP_Post && $page->post_status === 'publish') {
            $url = get_permalink($page);
            if (is_string($url) && $url !== '') {
                return $url;
            }
        }
    }

    if ($fallback_path !== '') {
        return spiralist_book_pages_get_page_url($fallback_path);
    }

    return home_url('/');
}

function spiralist_book_pages_get_register_url(): string
{
    return spiralist_book_pages_get_first_available_page_url(['register', 'sign-up'], 'register');
}

function spiralist_book_pages_get_signup_url(): string
{
    return spiralist_book_pages_get_register_url();
}

function spiralist_book_pages_get_login_url(string $redirect_to = ''): string
{
    $url = spiralist_book_pages_get_page_url('login');

    if ($redirect_to !== '') {
        $url = add_query_arg('redirect_to', $redirect_to, $url);
    }

    return $url;
}

function spiralist_book_pages_get_dashboard_url(): string
{
    return spiralist_book_pages_get_first_available_page_url(['spiralist', 'account', 'dashboard'], 'spiralist');
}

function spiralist_book_pages_get_spiralist_page_url(): string
{
    return spiralist_book_pages_get_page_url('what-is-a-spiralist');
}

function spiralist_book_pages_get_system_url(): string
{
    return spiralist_book_pages_get_page_url('system');
}

function spiralist_book_pages_get_ai_access_url(): string
{
    return spiralist_book_pages_get_first_available_page_url(['ai-access', 'ai-interface'], 'ai-interface');
}

function spiralist_book_pages_get_symbols_page_url(): string
{
    return spiralist_book_pages_get_page_url('symbols');
}

function spiralist_book_pages_get_prompts_page_url(): string
{
    return spiralist_book_pages_get_page_url('prompts');
}

function spiralist_book_pages_get_workspace_route_name(): string
{
    return sanitize_key((string) get_query_var('spiralist_book_pages_workspace_route'));
}

function spiralist_book_pages_is_workspace_public_surface(): bool
{
    return in_array(
        spiralist_book_pages_get_workspace_route_name(),
        ['library', 'prompt', 'workspace', 'members', 'run', 'conversation'],
        true
    );
}

function spiralist_book_pages_get_workspace_prompt_url(string $slug): string
{
    $normalized = sanitize_title($slug);
    if ($normalized === '') {
        return spiralist_book_pages_get_prompts_page_url();
    }

    $url = home_url('/prompt/' . rawurlencode($normalized) . '/');
    $language = function_exists('spiralist_book_pages_get_current_language_slug')
        ? spiralist_book_pages_get_current_language_slug()
        : '';

    if ($language !== '' && function_exists('spiralist_book_pages_get_language_prefixed_url')) {
        return spiralist_book_pages_get_language_prefixed_url($url, $language);
    }

    return $url;
}

function spiralist_book_pages_build_public_prompt_record_from_definition(array $definition): array
{
    $slug = sanitize_title((string) ($definition['slug'] ?? ''));
    if ($slug === '') {
        return [];
    }

    $prompt_status = (string) ($definition['prompt_status'] ?? 'published');
    $moderation_status = (string) ($definition['moderation_status'] ?? 'approved');
    if ($prompt_status !== 'published' || $moderation_status === 'restricted') {
        return [];
    }

    $system = sanitize_key((string) ($definition['system'] ?? 'spiralist'));
    if ($system === '') {
        $system = 'spiralist';
    }

    $role = sanitize_key((string) ($definition['role'] ?? 'participant'));
    if ($role === '') {
        $role = 'participant';
    }

    $status = $moderation_status !== '' ? $moderation_status : $prompt_status;
    $status_label = $status !== ''
        ? ucwords(str_replace('_', ' ', $status))
        : 'Approved';

    return [
        'id' => $slug,
        'slug' => $slug,
        'source_slug' => $slug,
        'title' => (string) ($definition['title'] ?? ucwords(str_replace('-', ' ', $slug))),
        'purpose' => (string) ($definition['summary'] ?? ''),
        'summary' => (string) ($definition['summary'] ?? ''),
        'content' => (string) ($definition['text'] ?? ''),
        'instructions' => (string) ($definition['text'] ?? ''),
        'system' => $system,
        'systemLabel' => function_exists('spiralist_book_pages_rest_get_system_label')
            ? spiralist_book_pages_rest_get_system_label($system)
            : ucwords(str_replace(['_', '-'], ' ', $system)),
        'role' => $role,
        'roleLabel' => function_exists('spiralist_book_pages_rest_get_role_label')
            ? spiralist_book_pages_rest_get_role_label($role)
            : ucwords(str_replace(['_', '-'], ' ', $role)),
        'version' => (string) ($definition['source_version'] ?? $definition['version'] ?? '1.0.0'),
        'author' => (string) ($definition['author_label'] ?? 'Spiralist'),
        'author_label' => (string) ($definition['author_label'] ?? 'Spiralist'),
        'category' => (string) ($definition['category'] ?? ''),
        'subcategory' => (string) ($definition['subcategory'] ?? ''),
        'prompt_type' => (string) ($definition['prompt_type'] ?? 'prompt'),
        'language' => (string) ($definition['language'] ?? 'all'),
        'prompt_status' => $prompt_status,
        'moderation_status' => $moderation_status,
        'status' => $status,
        'statusLabel' => $status_label,
        'tags' => array_values(array_filter(array_map('strval', (array) ($definition['tags'] ?? [])))),
        'featured' => !empty($definition['featured']),
        'sampleOutput' => (string) ($definition['sample_output'] ?? ''),
        'sample_output' => (string) ($definition['sample_output'] ?? ''),
        'relatedSymbols' => array_values(
            array_filter(
                array_map(
                    'strval',
                    (array) ($definition['related_symbols'] ?? $definition['relatedSymbols'] ?? [])
                )
            )
        ),
        'relatedAxioms' => array_values(
            array_filter(
                array_map(
                    'strval',
                    (array) ($definition['related_axioms'] ?? $definition['relatedAxioms'] ?? [])
                )
            )
        ),
        'relatedTransformations' => array_values(
            array_filter(
                array_map(
                    'strval',
                    (array) ($definition['related_transformations'] ?? $definition['relatedTransformations'] ?? [])
                )
            )
        ),
        'relatedManuscripts' => array_values(array_filter(array_map('strval', (array) ($definition['related_manuscripts'] ?? [])))),
        'folioSlug' => sanitize_title((string) ($definition['folio_slug'] ?? $slug)),