Skip to content
wiki.fftac.org

Admin Data - Source Excerpt 02

Back to Admin Data

Summary

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

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

if ($section_slug === 'threshold') {
        $extends[] = 'base-threshold-folio';
    } elseif ($section_slug === 'operative-plates') {
        $extends[] = 'base-operative-folio';
    } elseif ($section_slug === 'concordance') {
        $extends[] = 'base-concordance-folio';
    } else {
        $extends[] = 'base-appendix-folio';
    }

    return $extends;
}

function spiralist_book_pages_admin_import_section(string $filename, string $requested): string
{
    $sections = spiralist_book_pages_admin_sections();

    if ($requested === 'auto') {
        return function_exists('spiralist_book_pages_get_auto_book_page_section_slug')
            ? spiralist_book_pages_get_auto_book_page_section_slug($filename)
            : 'appendix';
    }

    return isset($sections[$requested]) ? $requested : 'appendix';
}
function spiralist_book_pages_admin_default_folio(string $filename, string $slug, string $section_slug, int $sequence, bool $create_prompt): array
{
    $title = function_exists('spiralist_book_pages_get_auto_book_page_title')
        ? spiralist_book_pages_get_auto_book_page_title($filename)
        : spiralist_book_pages_admin_humanize(pathinfo($filename, PATHINFO_FILENAME));

    if ($title === '') {
        $title = spiralist_book_pages_admin_humanize(pathinfo($filename, PATHINFO_FILENAME));
    }

    return [
        'slug' => $slug,
        'filename' => $filename,
        'label' => 'Page ' . max(1, $sequence),
        'title' => $title !== '' ? $title : ('Manuscript Folio ' . max(1, $sequence)),
        'eyebrow' => function_exists('spiralist_book_pages_get_auto_book_page_eyebrow') ? spiralist_book_pages_get_auto_book_page_eyebrow($section_slug) : 'Manuscript Folio',
        'summary' => function_exists('spiralist_book_pages_get_auto_book_page_summary') ? spiralist_book_pages_get_auto_book_page_summary($title, $section_slug) : '',
        'caption' => function_exists('spiralist_book_pages_get_auto_book_page_caption') ? spiralist_book_pages_get_auto_book_page_caption($title, $section_slug) : '',
        'section_slug' => $section_slug,
        'is_study_surface' => false,
        'is_prominent' => true,
        'display_order' => max(10, $sequence * 10),
        'creation_prompt_title' => 'Prompt Used',
        'creation_prompt_status' => $create_prompt ? 'Canonical prompt' : 'Prompt pending',
        'creation_prompt_summary' => $create_prompt ? 'This folio now ships with a file-backed canonical prompt created through the book admin.' : 'This folio has been imported into the manuscript queue and still needs a saved prompt package.',
        'creation_prompt_source_slug' => $slug,
        'related_workspace_prompt_slugs' => [$slug],
    ];
}

function spiralist_book_pages_admin_default_prompt(array $folio): array
{
    $slug = sanitize_title((string) ($folio['slug'] ?? ''));
    $title = trim((string) ($folio['title'] ?? spiralist_book_pages_admin_humanize($slug)));
    $filename = sanitize_file_name((string) ($folio['filename'] ?? ''));
    $section_slug = sanitize_title((string) ($folio['section_slug'] ?? 'appendix'));
    $sections = spiralist_book_pages_admin_sections();
    $section_label = (string) ($sections[$section_slug]['label'] ?? spiralist_book_pages_admin_humanize($section_slug));
    $user = wp_get_current_user();
    $author = trim((string) ($user->display_name ?? ''));

    if ($author === '') {
        $author = 'Admin';
    }

    return [
        'meta' => [
            'schema' => 'spiralist-book-prompt/v1',
            'slug' => $slug,
            'source_version' => '1.0.0',
            'title' => $title !== '' ? $title : spiralist_book_pages_admin_humanize($slug),
            'summary' => sprintf('Canonical manuscript prompt for %s, created through the Spiralist Manuscript admin for direct folio publication.', $filename !== '' ? $filename : ($title !== '' ? $title : $slug)),
            'author_label' => $author,
            'category' => 'Visual Design',
            'subcategory' => $section_label !== '' ? $section_label . ' Folios' : 'Manuscript Folios',
            'prompt_type' => 'image',
            'language' => 'all',
            'prompt_status' => 'published',
            'moderation_status' => 'approved',
            'tags' => array_values(array_filter(['Manuscript', 'Image Generation', 'Museum Grade', 'Book Admin', $section_label], 'strlen')),
            'sample_output' => sprintf('Target artifact: %s as a museum-grade manuscript folio.', $filename !== '' ? $filename : ($title !== '' ? $title : $slug)),
            'related_manuscripts' => [],
            'featured' => false,
            'extends' => spiralist_book_pages_admin_default_prompt_extends($section_slug),
            'filename' => $filename,
            'folio_slug' => $slug,
            'section_slug' => $section_slug,
            'placeholders' => ['TITLE' => $title, 'FILENAME' => $filename, 'SECTION' => $section_slug],
        ],
        'body' => function_exists('spiralist_book_pages_get_auto_book_page_prompt_text') ? spiralist_book_pages_get_auto_book_page_prompt_text($title, $section_slug) : '',
    ];
}

function spiralist_book_pages_admin_save_folio(array $folio): bool
{
    $content_root = function_exists('spiralist_book_pages_get_content_root')
        ? spiralist_book_pages_get_content_root()
        : '';
    $slug = sanitize_title((string) ($folio['slug'] ?? ''));

    if ($content_root === '' || $slug === '') {
        return false;
    }

    $payload = [
        'slug' => $slug,
        'filename' => sanitize_file_name((string) ($folio['filename'] ?? '')),
        'label' => sanitize_text_field((string) ($folio['label'] ?? '')),
        'title' => sanitize_text_field((string) ($folio['title'] ?? '')),
        'eyebrow' => sanitize_text_field((string) ($folio['eyebrow'] ?? '')),
        'summary' => sanitize_textarea_field((string) ($folio['summary'] ?? '')),
        'caption' => sanitize_textarea_field((string) ($folio['caption'] ?? '')),
        'section_slug' => sanitize_title((string) ($folio['section_slug'] ?? 'appendix')),
        'is_study_surface' => !empty($folio['is_study_surface']),
        'is_prominent' => !empty($folio['is_prominent']),
        'display_order' => max(0, (int) ($folio['display_order'] ?? 0)),
        'creation_prompt_title' => sanitize_text_field((string) ($folio['creation_prompt_title'] ?? 'Prompt Used')),
        'creation_prompt_status' => sanitize_text_field((string) ($folio['creation_prompt_status'] ?? 'Prompt pending')),
        'creation_prompt_summary' => sanitize_textarea_field((string) ($folio['creation_prompt_summary'] ?? '')),
        'creation_prompt_source_slug' => sanitize_title((string) ($folio['creation_prompt_source_slug'] ?? '')),
        'related_workspace_prompt_slugs' => spiralist_book_pages_admin_parse_slug_list($folio['related_workspace_prompt_slugs'] ?? []),
    ];

    return function_exists('spiralist_book_pages_write_json_file')
        && spiralist_book_pages_write_json_file(rtrim($content_root, '/\\') . DIRECTORY_SEPARATOR . 'folios' . DIRECTORY_SEPARATOR . $slug . '.json', $payload);
}

function spiralist_book_pages_admin_prompt_meta(string $slug): array
{
    $meta_map = function_exists('spiralist_book_pages_get_content_prompt_meta_map')
        ? (array) spiralist_book_pages_get_content_prompt_meta_map()
        : [];

    return is_array($meta_map[$slug] ?? null) ? $meta_map[$slug] : [];
}

function spiralist_book_pages_admin_prompt_body(string $slug): string
{
    $content_root = function_exists('spiralist_book_pages_get_content_root')
        ? spiralist_book_pages_get_content_root()
        : '';
    $path = $content_root !== ''
        ? rtrim($content_root, '/\\') . DIRECTORY_SEPARATOR . 'prompts' . DIRECTORY_SEPARATOR . $slug . DIRECTORY_SEPARATOR . 'body.md'
        : '';

    return function_exists('spiralist_book_pages_read_text_file')
        ? spiralist_book_pages_read_text_file($path)
        : '';
}
function spiralist_book_pages_admin_normalize_prompt_meta(array $source, string $slug, array $existing = []): array
{
    $folios = spiralist_book_pages_admin_folios();
    $filename = sanitize_file_name((string) ($source['filename'] ?? ($existing['filename'] ?? '')));
    $folio_slug = sanitize_title((string) ($source['folio_slug'] ?? ($existing['folio_slug'] ?? '')));
    $section_slug = sanitize_title((string) ($source['section_slug'] ?? ($existing['section_slug'] ?? 'appendix')));

    if ($folio_slug !== '' && isset($folios[$folio_slug])) {
        $filename = $filename !== '' ? $filename : sanitize_file_name((string) ($folios[$folio_slug]['filename'] ?? ''));
        $section_slug = $section_slug !== '' ? $section_slug : sanitize_title((string) ($folios[$folio_slug]['section_slug'] ?? 'appendix'));
    } elseif ($filename !== '') {