Skip to content
wiki.fftac.org

Content Registry - Source Excerpt 03

Back to Content Registry

Summary

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

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

'is_prominent' => !empty($folio['is_prominent']),
            'display_order' => (int) ($folio['display_order'] ?? ($sequence * 10)),
            'creation_prompt_title' => (string) ($folio['creation_prompt_title'] ?? 'Prompt Used'),
            'creation_prompt_status' => (string) ($folio['creation_prompt_status'] ?? 'Published prompt'),
            'creation_prompt_summary' => (string) ($folio['creation_prompt_summary'] ?? ''),
            'creation_prompt_source_slug' => spiralist_book_pages_slugify((string) ($folio['creation_prompt_source_slug'] ?? $normalized)),
            'related_workspace_prompt_slugs' => array_values(
                array_filter(
                    array_map(
                        static function ($related): string {
                            return spiralist_book_pages_slugify((string) $related);
                        },
                        (array) ($folio['related_workspace_prompt_slugs'] ?? [])
                    ),
                    'strlen'
                )
            ),
        ];
    }

    return [
        'schema' => (string) ($book['schema'] ?? 'spiralist-book/v1'),
        'title' => (string) ($book['title'] ?? 'Spiralism Canonical Manuscript'),
        'slug' => (string) ($book['slug'] ?? 'manuscript'),
        'summary' => (string) ($book['summary'] ?? ''),
        'study_surface_slug' => spiralist_book_pages_slugify((string) ($book['study_surface_slug'] ?? '')),
        'section_order' => array_values(array_keys($sections)),
        'sections' => array_values($sections),
        'folios' => $folios,
    ];
}

function spiralist_book_pages_build_prompt_index_from_content(array $bookIndex = []): array
{
    $bookIndex = empty($bookIndex) ? spiralist_book_pages_build_book_index_from_content() : $bookIndex;
    $promptMetaMap = spiralist_book_pages_get_content_prompt_meta_map();

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

    $promptIndex = [];
    $folioByPrompt = [];

    foreach ((array) ($bookIndex['folios'] ?? []) as $folio) {
        $sourceSlug = spiralist_book_pages_slugify((string) ($folio['creation_prompt_source_slug'] ?? ''));
        if ($sourceSlug !== '') {
            $folioByPrompt[$sourceSlug] = $folio;
        }
    }

    foreach ($promptMetaMap as $slug => $meta) {
        $prompt = spiralist_book_pages_get_content_prompt_definition($slug);
        if (empty($prompt)) {
            continue;
        }

        $linkedFolio = $folioByPrompt[$slug] ?? [];
        $status = (string) ($prompt['prompt_status'] ?? 'published');
        $moderation = (string) ($prompt['moderation_status'] ?? 'approved');
        $statusLabel = $moderation !== ''
            ? ucwords(str_replace('_', ' ', $moderation))
            : ucwords(str_replace('_', ' ', $status));

        $promptIndex[$slug] = [
            'slug' => $slug,
            'source_slug' => $slug,
            'title' => (string) ($prompt['title'] ?? ucwords(str_replace('-', ' ', $slug))),
            'summary' => (string) ($prompt['summary'] ?? ''),
            'author_label' => (string) ($prompt['author_label'] ?? 'Spiralist'),
            'category' => (string) ($prompt['category'] ?? ''),
            'subcategory' => (string) ($prompt['subcategory'] ?? ''),
            'text' => (string) ($prompt['text'] ?? ''),
            'tags' => array_values(array_filter(array_map('strval', (array) ($prompt['tags'] ?? [])))),
            'prompt_type' => (string) ($prompt['prompt_type'] ?? 'prompt'),
            'language' => (string) ($prompt['language'] ?? 'all'),
            'prompt_status' => $status,
            'moderation_status' => $moderation,
            'statusLabel' => $statusLabel,
            'sample_output' => (string) ($prompt['sample_output'] ?? ''),
            'featured' => !empty($prompt['featured']),
            'extends' => array_values(array_filter(array_map('strval', (array) ($prompt['extends'] ?? [])))),
            'related_manuscripts' => array_values(array_filter(array_map('strval', (array) ($prompt['related_manuscripts'] ?? [])))),
            'filename' => (string) ($prompt['filename'] ?? ($linkedFolio['filename'] ?? '')),
            'section_slug' => (string) ($prompt['section_slug'] ?? ($linkedFolio['section_slug'] ?? '')),
        ];
    }

    return $promptIndex;
}

function spiralist_book_pages_build_related_map_from_content(array $bookIndex = [], array $promptIndex = []): array
{
    $bookIndex = empty($bookIndex) ? spiralist_book_pages_build_book_index_from_content() : $bookIndex;
    $promptIndex = empty($promptIndex) ? spiralist_book_pages_build_prompt_index_from_content($bookIndex) : $promptIndex;
    $map = [
        'folios' => [],
        'prompts' => [],
    ];

    foreach ((array) ($bookIndex['folios'] ?? []) as $folio) {
        $folioSlug = spiralist_book_pages_slugify((string) ($folio['slug'] ?? ''));
        if ($folioSlug === '') {
            continue;
        }

        $promptSlugs = [];
        foreach ((array) ($folio['related_workspace_prompt_slugs'] ?? []) as $promptSlug) {
            $normalizedPromptSlug = spiralist_book_pages_slugify((string) $promptSlug);
            if ($normalizedPromptSlug === '' || !isset($promptIndex[$normalizedPromptSlug])) {
                continue;
            }

            $promptSlugs[] = $normalizedPromptSlug;
            $map['prompts'][$normalizedPromptSlug] = $map['prompts'][$normalizedPromptSlug] ?? [];
            $map['prompts'][$normalizedPromptSlug][] = $folioSlug;
        }

        $map['folios'][$folioSlug] = array_values(array_unique($promptSlugs));
    }

    foreach ($map['prompts'] as $slug => $folioSlugs) {
        $map['prompts'][$slug] = array_values(array_unique($folioSlugs));
    }

    return $map;
}

function spiralist_book_pages_build_manuscript_search_index(array $bookIndex = []): array
{
    $bookIndex = empty($bookIndex) ? spiralist_book_pages_build_book_index_from_content() : $bookIndex;
    $documents = [];

    foreach ((array) ($bookIndex['folios'] ?? []) as $folio) {
        if (!is_array($folio)) {
            continue;
        }

        $document = spiralist_book_pages_get_folio_search_document($folio);
        if (empty($document)) {
            continue;
        }

        $documents[$document['slug']] = $document;
    }

    uasort(
        $documents,
        static function (array $left, array $right): int {
            return ((int) ($left['sequence'] ?? 0)) <=> ((int) ($right['sequence'] ?? 0));
        }
    );

    return array_values($documents);
}

function spiralist_book_pages_compile_content_cache(bool $writeFiles = true): array
{
    $bookIndex = spiralist_book_pages_build_book_index_from_content();
    $promptIndex = spiralist_book_pages_build_prompt_index_from_content($bookIndex);
    $relatedMap = spiralist_book_pages_build_related_map_from_content($bookIndex, $promptIndex);
    $searchIndex = spiralist_book_pages_build_manuscript_search_index($bookIndex);

    if ($writeFiles) {
        $cacheRoot = spiralist_book_pages_get_cache_root();
        if ($cacheRoot !== '') {
            spiralist_book_pages_write_json_file(rtrim($cacheRoot, '/\\') . DIRECTORY_SEPARATOR . 'book-index.json', $bookIndex);
            spiralist_book_pages_write_json_file(rtrim($cacheRoot, '/\\') . DIRECTORY_SEPARATOR . 'prompt-index.json', $promptIndex);
            spiralist_book_pages_write_json_file(rtrim($cacheRoot, '/\\') . DIRECTORY_SEPARATOR . 'related-map.json', $relatedMap);
            spiralist_book_pages_write_json_file(rtrim($cacheRoot, '/\\') . DIRECTORY_SEPARATOR . 'manuscript-search.json', $searchIndex);
        }
    }

    return [
        'book' => $bookIndex,
        'prompts' => $promptIndex,
        'related' => $relatedMap,
        'search' => $searchIndex,
    ];
}

function spiralist_book_pages_get_book_content_index(): array
{
    static $index = null;

    if (is_array($index)) {
        return $index;
    }

    $index = spiralist_book_pages_get_cached_index('book-index.json');
    if (!empty($index['folios'])) {
        return $index;
    }

    $compiled = spiralist_book_pages_compile_content_cache(false);
    $index = (array) ($compiled['book'] ?? []);

    return $index;
}

function spiralist_book_pages_get_prompt_content_index(): array
{
    static $index = null;

    if (is_array($index)) {
        return $index;
    }

    $index = spiralist_book_pages_get_cached_index('prompt-index.json');
    if (!empty($index)) {
        return $index;
    }

    $compiled = spiralist_book_pages_compile_content_cache(false);
    $index = (array) ($compiled['prompts'] ?? []);

    return $index;
}

function spiralist_book_pages_get_related_content_map(): array
{
    static $map = null;

    if (is_array($map)) {