Skip to content
wiki.fftac.org

Admin Actions - Source Excerpt 03

Back to Admin Actions

Summary

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

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

'tags' => (string) wp_unslash($_POST['tags'] ?? ''),
                'sample_output' => (string) wp_unslash($_POST['sample_output'] ?? ($existing_meta['sample_output'] ?? '')),
                'related_manuscripts' => (string) wp_unslash($_POST['related_manuscripts'] ?? ''),
                'featured' => !empty($_POST['featured']),
                'extends' => isset($_POST['prompt_extends']) ? (array) wp_unslash($_POST['prompt_extends']) : [],
                'extra_extends' => (string) wp_unslash($_POST['prompt_extra_extends'] ?? ''),
                'filename' => (string) wp_unslash($_POST['filename'] ?? ($existing_meta['filename'] ?? '')),
                'folio_slug' => (string) wp_unslash($_POST['folio_slug'] ?? ($existing_meta['folio_slug'] ?? '')),
                'section_slug' => (string) wp_unslash($_POST['section_slug'] ?? ($existing_meta['section_slug'] ?? 'appendix')),
                'placeholders' => is_array($existing_meta['placeholders'] ?? null) ? (array) $existing_meta['placeholders'] : [],
            ];

            $meta = spiralist_book_pages_admin_normalize_prompt_meta($raw_meta, $slug, $existing_meta);
            $body = str_replace("\r\n", "\n", (string) wp_unslash($_POST['prompt_body'] ?? spiralist_book_pages_admin_prompt_body($slug)));

            if (!spiralist_book_pages_admin_save_prompt($slug, $meta, $body)) {
                spiralist_book_pages_admin_set_notice('The prompt could not be saved.', 'error');
                spiralist_book_pages_admin_redirect(spiralist_book_pages_admin_page_slug('prompts'), ['edit' => $slug]);
            }

            $folio = spiralist_book_pages_admin_find_folio_for_prompt($meta);
            if (!empty($folio)) {
                $folio = spiralist_book_pages_admin_link_prompt($folio, $meta, $slug);
                spiralist_book_pages_admin_save_folio($folio);
            }

            spiralist_book_pages_admin_rebuild_cache();
            spiralist_book_pages_admin_set_notice('The prompt record and composed prompt package were updated.');
            spiralist_book_pages_admin_redirect(spiralist_book_pages_admin_page_slug('prompts'), ['edit' => $slug]);
            break;

        case 'save_fragment':
            $selected_slug = sanitize_title((string) wp_unslash($_POST['fragment_slug'] ?? ''));
            $new_slug = sanitize_title((string) wp_unslash($_POST['new_fragment_slug'] ?? ''));
            $slug = $selected_slug !== '' ? $selected_slug : $new_slug;
            $body = (string) wp_unslash($_POST['fragment_body'] ?? '');

            if ($slug === '') {
                spiralist_book_pages_admin_set_notice('Choose a fragment or provide a slug for the new one.', 'error');
                spiralist_book_pages_admin_redirect(spiralist_book_pages_admin_page_slug('fragments'));
            }

            if (!spiralist_book_pages_admin_save_fragment($slug, $body)) {
                spiralist_book_pages_admin_set_notice('The shared prompt fragment could not be saved.', 'error');
                spiralist_book_pages_admin_redirect(spiralist_book_pages_admin_page_slug('fragments'), ['fragment' => $slug]);
            }

            spiralist_book_pages_admin_rebuild_cache();
            spiralist_book_pages_admin_set_notice('The shared prompt fragment was updated and prompt caches were rebuilt.');
            spiralist_book_pages_admin_redirect(spiralist_book_pages_admin_page_slug('fragments'), ['fragment' => $slug]);
            break;
    }

    spiralist_book_pages_admin_set_notice('That admin action is not supported.', 'error');
    spiralist_book_pages_admin_redirect($return_page);
}

if (is_admin()) {
    add_action('admin_menu', 'spiralist_book_pages_admin_register_menu');
    add_action('admin_post_spiralist_book_pages_admin_action', 'spiralist_book_pages_admin_handle_action');
}