Skip to content
wiki.fftac.org

Managedpromptadmin - Source Excerpt 02

Back to Managedpromptadmin

Summary

This source excerpt preserves a bounded section of Spiralist/wp-content/plugins/spiralist-workspace/includes/Admin/ManagedPromptAdmin.php so readers can inspect the evidence without opening the full source file.

**Source path:** Spiralist/wp-content/plugins/spiralist-workspace/includes/Admin/ManagedPromptAdmin.php

<option value="">Do not edit a prompt file</option>
                                <?php foreach ($prompt_records as $record) : ?>
                                    <option value="<?php echo esc_attr((string) ($record['slug'] ?? '')); ?>" <?php selected($selected_prompt_slug, (string) ($record['slug'] ?? '')); ?>>
                                        <?php echo esc_html((string) ($record['title'] ?? $record['slug'] ?? 'Prompt')); ?>
                                    </option>
                                <?php endforeach; ?>
                            </select>
                        </p>
                        <p class="description">Uploaded files stay in the Media Library. When a prompt is chosen, the saved prompt file is updated and then re-synced into the managed prompt registry.</p>
                        <p><button class="button button-secondary" type="submit">Upload Images</button></p>
                    </form>
                </div>

                <div class="spiralist-workspace-card">
                    <h3>Bulk Prompt Import</h3>
                    <p>Import prompt packs through <code>wp-admin</code> without touching the filesystem manually.</p>
                    <form method="post" action="<?php echo esc_url(admin_url('admin-post.php')); ?>" enctype="multipart/form-data" class="spiralist-workspace-admin-form">
                        <?php wp_nonce_field('spiralist_workspace_import_prompt_files'); ?>
                        <input type="hidden" name="action" value="spiralist_workspace_import_prompt_files" />
                        <p>
                            <label for="spiralist_workspace_prompt_import_files"><strong>Prompt files</strong></label><br />
                            <input id="spiralist_workspace_prompt_import_files" type="file" name="spiralist_workspace_prompt_import_files[]" accept=".zip,.json" multiple />
                        </p>
                        <p>
                            <label for="spiralist_workspace_prompt_import_version"><strong>Default version for JSON uploads</strong></label><br />
                            <input id="spiralist_workspace_prompt_import_version" class="regular-text code" type="text" name="default_version" value="<?php echo esc_attr(self::DEFAULT_VERSION); ?>" />
                        </p>
                        <p class="description">Accepted imports: JSON prompt definitions with a <code>slug</code>, or ZIP archives that contain <code>prompts/<slug>/<version>/prompt.php</code> (or the same layout without the leading <code>prompts/</code> folder). ZIP-imported PHP prompt files should be trusted administrator content.</p>
                        <p><button class="button button-secondary" type="submit">Import Prompt Files</button></p>
                    </form>
                </div>

                <div class="spiralist-workspace-card">
                    <h3>Starter Templates</h3>
                    <p>Use these starter files when you want to build a managed prompt outside the editor first, then import it back through this same admin screen.</p>
                    <div class="spiralist-workspace-admin-template-actions">
                        <a
                            class="button button-secondary"
                            href="<?php echo esc_url($this->get_template_download_url('json')); ?>"
                        >Download JSON Template</a>
                        <a
                            class="button button-secondary"
                            href="<?php echo esc_url($this->get_template_download_url('php')); ?>"
                        >Download PHP Template</a>
                    </div>
                    <details class="spiralist-workspace-details" style="margin-top:1rem;">
                        <summary>Preview starter files</summary>
                        <p>
                            <label for="spiralist_workspace_json_template_preview"><strong>JSON import template</strong></label><br />
                            <textarea
                                id="spiralist_workspace_json_template_preview"
                                class="large-text code"
                                rows="12"
                                readonly="readonly"
                            ><?php echo esc_textarea($this->get_json_template_contents()); ?></textarea>
                        </p>
                        <p>
                            <label for="spiralist_workspace_php_template_preview"><strong><code>prompt.php</code> template</strong></label><br />
                            <textarea
                                id="spiralist_workspace_php_template_preview"
                                class="large-text code"
                                rows="14"
                                readonly="readonly"
                            ><?php echo esc_textarea($this->get_php_template_contents()); ?></textarea>
                        </p>
                    </details>
                </div>
            </div>

            <div class="spiralist-workspace-card" id="spiralist-workspace-managed-prompt-editor">
                <h3><?php echo esc_html($is_new_prompt ? 'Create Managed Prompt' : 'Edit Managed Prompt'); ?></h3>
                <p>The form below writes directly to the versioned prompt file on disk, then re-syncs that prompt into the database-backed library.</p>
                <form method="post" action="<?php echo esc_url(admin_url('admin-post.php')); ?>" class="spiralist-workspace-admin-form spiralist-workspace-admin-form--prompt">
                    <?php wp_nonce_field('spiralist_workspace_save_managed_prompt'); ?>
                    <input type="hidden" name="action" value="spiralist_workspace_save_managed_prompt" />
                    <input type="hidden" name="existing_slug" value="<?php echo esc_attr($selected_prompt_slug); ?>" />
                    <input type="hidden" name="existing_version" value="<?php echo esc_attr($selected_prompt_version); ?>" />

                    <div class="spiralist-workspace-admin-field-grid spiralist-workspace-admin-field-grid--three">
                        <p>
                            <label for="spiralist_workspace_prompt_slug"><strong>Slug</strong></label><br />
                            <input id="spiralist_workspace_prompt_slug" class="regular-text code" type="text" name="prompt_slug" value="<?php echo esc_attr((string) ($selected_prompt['slug'] ?? '')); ?>" required />
                        </p>
                        <p>
                            <label for="spiralist_workspace_prompt_version"><strong>Version</strong></label><br />
                            <input id="spiralist_workspace_prompt_version" class="regular-text code" type="text" name="prompt_version" value="<?php echo esc_attr($selected_prompt_version); ?>" required />
                        </p>
                        <p>
                            <label for="spiralist_workspace_prompt_title"><strong>Title</strong></label><br />
                            <input id="spiralist_workspace_prompt_title" class="regular-text" type="text" name="title" value="<?php echo esc_attr((string) ($selected_prompt['title'] ?? '')); ?>" required />
                        </p>
                    </div>

                    <p>
                        <label for="spiralist_workspace_prompt_summary"><strong>Summary</strong></label><br />
                        <textarea id="spiralist_workspace_prompt_summary" class="large-text" rows="3" name="summary"><?php echo esc_textarea((string) ($selected_prompt['summary'] ?? '')); ?></textarea>
                    </p>

                    <div class="spiralist-workspace-admin-field-grid spiralist-workspace-admin-field-grid--three">
                        <p>
                            <label for="spiralist_workspace_prompt_author_label"><strong>Author Label</strong></label><br />
                            <input id="spiralist_workspace_prompt_author_label" class="regular-text" type="text" name="author_label" value="<?php echo esc_attr((string) ($selected_prompt['author_label'] ?? '')); ?>" />
                        </p>
                        <p>
                            <label for="spiralist_workspace_prompt_category"><strong>Category</strong></label><br />
                            <select id="spiralist_workspace_prompt_category" name="category" class="regular-text">
                                <?php foreach (PromptCategoryRegistry::categories() as $category) : ?>
                                    <option value="<?php echo esc_attr($category); ?>" <?php selected((string) ($selected_prompt['category'] ?? ''), $category); ?>><?php echo esc_html($category); ?></option>
                                <?php endforeach; ?>