Admin Actions - Source Excerpt 03
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');
}