feat: allow editing builtin prompts with override/restore support

This commit is contained in:
2026-05-31 13:32:32 +00:00
parent 72c2bfdd72
commit 26fb3ebd56
+17 -12
View File
@@ -337,12 +337,11 @@ class AdminMenu {
if (!is_array($custom)) $custom = []; if (!is_array($custom)) $custom = [];
$all = array_merge($builtin, $custom); $all = array_merge($builtin, $custom);
$editing_slug = isset($_GET['prompt_edit']) ? sanitize_key($_GET['prompt_edit']) : ''; $editing_slug = isset($_GET['prompt_edit']) ? sanitize_key($_GET['prompt_edit']) : '';
// editing_data: check custom overrides first, then fallback to builtins // editing_data: custom overrides first, then builtins
$builtin_check = $this->getBuiltinPrompts();
$editing_data = null; $editing_data = null;
if ($editing_slug) { if ($editing_slug) {
if (isset($custom[$editing_slug])) $editing_data = $custom[$editing_slug]; if (isset($custom[$editing_slug])) $editing_data = $custom[$editing_slug];
elseif (isset($builtin_check[$editing_slug])) $editing_data = $builtin_check[$editing_slug]; elseif (isset($builtin[$editing_slug])) $editing_data = $builtin[$editing_slug];
} }
?> ?>
<div class="asktam-mcp-prompts"> <div class="asktam-mcp-prompts">
@@ -419,14 +418,17 @@ class AdminMenu {
<div class="asktam-mcp-prompts-grid"> <div class="asktam-mcp-prompts-grid">
<?php foreach ($all as $slug => $meta): <?php foreach ($all as $slug => $meta):
$is_custom = !empty($meta['custom']); $is_custom = !empty($meta['custom']);
$copy_id = 'asktam-prompt-' . sanitize_title($slug); $is_builtin_override = $is_custom && isset($builtin[$slug]);
$content = $meta['content'] ?? "Build a {$meta['title']} page using Elementor MCP tools with professional layout and design."; $copy_id = 'asktam-prompt-' . sanitize_title($slug);
$is_editing_this = ($editing_slug === $slug); $content = $meta['content'] ?? "Build a {$meta['title']} page using Elementor MCP tools with professional layout and design.";
$is_editing_this = ($editing_slug === $slug);
?> ?>
<div class="asktam-mcp-prompt-card" style="position:relative<?php echo $is_editing_this ? ';border:2px solid #f59e0b;' : ''; ?>"> <div class="asktam-mcp-prompt-card" style="position:relative<?php echo $is_editing_this ? ';border:2px solid #f59e0b;' : ''; ?>">
<?php if ($is_custom): ?> <?php if ($is_custom && !$is_builtin_override): ?>
<span style="position:absolute;top:10px;right:10px;background:#e8f5e9;color:#2e7d32;font-size:10px;padding:2px 8px;border-radius:10px;font-weight:600;line-height:1.6">Custom</span> <span style="position:absolute;top:10px;right:10px;background:#e8f5e9;color:#2e7d32;font-size:10px;padding:2px 8px;border-radius:10px;font-weight:600;line-height:1.6">Custom</span>
<?php elseif ($is_builtin_override): ?>
<span style="position:absolute;top:10px;right:10px;background:#fff3cd;color:#856404;font-size:10px;padding:2px 8px;border-radius:10px;font-weight:600;line-height:1.6">Modified</span>
<?php endif; ?> <?php endif; ?>
<div class="asktam-mcp-prompt-header"> <div class="asktam-mcp-prompt-header">
<h3 class="asktam-mcp-prompt-title"><?php echo esc_html($meta['title']); ?></h3> <h3 class="asktam-mcp-prompt-title"><?php echo esc_html($meta['title']); ?></h3>
@@ -440,11 +442,15 @@ class AdminMenu {
</button> </button>
<a href="<?php echo esc_url(admin_url('admin.php?page=' . self::PAGE_SLUG . '-prompts&prompt_edit=' . urlencode($slug))); ?>" class="button" style="color:#92400e;border-color:#f59e0b">&#9998; Edit</a> <a href="<?php echo esc_url(admin_url('admin.php?page=' . self::PAGE_SLUG . '-prompts&prompt_edit=' . urlencode($slug))); ?>" class="button" style="color:#92400e;border-color:#f59e0b">&#9998; Edit</a>
<?php if ($is_custom): ?> <?php if ($is_custom): ?>
<form method="post" style="margin:0" onsubmit="return confirm('Delete this prompt?')"> <form method="post" style="margin:0" onsubmit="return confirm(<?php echo $is_builtin_override ? '\'Restore to original?\'' : '\'Delete this prompt?\''; ?>)">
<?php wp_nonce_field('asktam_mcp_delete_prompt_' . $slug, 'asktam_mcp_nonce'); ?> <?php wp_nonce_field('asktam_mcp_delete_prompt_' . $slug, 'asktam_mcp_nonce'); ?>
<input type="hidden" name="asktam_mcp_action" value="delete_prompt"> <input type="hidden" name="asktam_mcp_action" value="delete_prompt">
<input type="hidden" name="prompt_slug" value="<?php echo esc_attr($slug); ?>"> <input type="hidden" name="prompt_slug" value="<?php echo esc_attr($slug); ?>">
<?php if ($is_builtin_override): ?>
<button type="submit" class="button" style="color:#856404;border-color:#f59e0b">&#8635; Restore</button>
<?php else: ?>
<button type="submit" class="button" style="color:#b91c1c;border-color:#b91c1c">&#128465; Delete</button> <button type="submit" class="button" style="color:#b91c1c;border-color:#b91c1c">&#128465; Delete</button>
<?php endif; ?>
</form> </form>
<?php endif; ?> <?php endif; ?>
</div> </div>
@@ -780,12 +786,11 @@ class AdminMenu {
} }
$custom = get_option('asktam_mcp_custom_prompts', []); $custom = get_option('asktam_mcp_custom_prompts', []);
if (!is_array($custom)) $custom = []; if (!is_array($custom)) $custom = [];
// Allow editing builtin prompts — store override in custom store with same slug // Allow editing builtin prompts — save override with same slug; pure custom prompts keep custom:true
$builtins = $this->getBuiltinPrompts(); $builtins = $this->getBuiltinPrompts();
if (!isset($custom[$slug]) && !isset($builtins[$slug])) { if (!isset($custom[$slug]) && !isset($builtins[$slug])) {
wp_redirect(admin_url('admin.php?page='.self::PAGE_SLUG.'-prompts&prompt_error='.urlencode('Prompt not found'))); exit; wp_redirect(admin_url('admin.php?page='.self::PAGE_SLUG.'-prompts&prompt_error='.urlencode('Prompt not found'))); exit;
} }
// Builtin overrides don't get the green "Custom" badge (custom:false), pure custom ones do
$is_builtin_override = isset($builtins[$slug]) && !isset($custom[$slug]); $is_builtin_override = isset($builtins[$slug]) && !isset($custom[$slug]);
$custom[$slug] = ['title'=>$title,'industry'=>$industry,'description'=>$desc,'content'=>$content,'custom'=>!$is_builtin_override]; $custom[$slug] = ['title'=>$title,'industry'=>$industry,'description'=>$desc,'content'=>$content,'custom'=>!$is_builtin_override];
update_option('asktam_mcp_custom_prompts', $custom); update_option('asktam_mcp_custom_prompts', $custom);