Content Registry - Source Excerpt 03
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)) {