Major refactoring cleanup: - Add new controller architecture (class-controller-*.php) - Add new settings-v2 UI (views/settings-v2/) - Add new CSS architecture (agentic-sidebar.css, tokens) - Add esbuild build pipeline (scripts/build.js, package.json) - Add composer dependencies (vendor/) - Add frontend src directory (assets/js/src/index.jsx) - Add documentation files - Remove old/obsolete files (class-settings.php, old CSS) This commits all pending changes from previous refactoring efforts.
195 lines
7.4 KiB
PHP
195 lines
7.4 KiB
PHP
<?php
|
||
/**
|
||
* Settings V2 layout — Stitch rebuild.
|
||
*
|
||
* @package WP_Agentic_Writer
|
||
* @var array $view_data Prepared view data from class-settings-v2.php.
|
||
*/
|
||
|
||
if (!defined("ABSPATH")) {
|
||
exit();
|
||
}
|
||
|
||
// phpcs:ignore WordPress.PHP.DontExtract.extract_extract -- View templates are intentionally passed prepared variables.
|
||
extract($view_data);
|
||
|
||
$api_connected = !empty($api_key);
|
||
$models_ready = !empty($planning_model) && !empty($writing_model);
|
||
$budget_percent_safe = min(100, (float) $budget_percent);
|
||
$user_agent = isset($_SERVER["HTTP_USER_AGENT"])
|
||
? sanitize_text_field(wp_unslash($_SERVER["HTTP_USER_AGENT"]))
|
||
: "";
|
||
$cmd_key = false !== strpos($user_agent, "Mac OS") ? "⌘" : "Ctrl";
|
||
$settings_tabs = [
|
||
"general" => ["General", "6"],
|
||
"models" => ["OpenRouter", "6"],
|
||
"local-backend" => ["Custom Router", "3"],
|
||
"tools" => ["Tools", "1"],
|
||
"memanto" => ["MEMANTO", "3"],
|
||
"cost-log" => ["Cost Log", "2"],
|
||
"guide" => ["Model Guide", "3"],
|
||
];
|
||
?>
|
||
<div class="wrap wpaw2-settings">
|
||
<script>
|
||
// Intercept WP "Settings saved" admin notice → use our Agentic toast
|
||
document.addEventListener('DOMContentLoaded', function() {
|
||
var wpNotice = document.querySelector('#setting-error-settings_updated, .notice.settings-error');
|
||
if (wpNotice) {
|
||
var msg = wpNotice.querySelector('p');
|
||
var text = msg ? msg.textContent.replace('Settings saved.', 'Settings saved').trim() : 'Settings saved';
|
||
wpNotice.style.display = 'none';
|
||
// Delegate to existing toast system
|
||
var toast = document.getElementById('wpaw2-toast');
|
||
var body = document.getElementById('wpaw2-toast-message');
|
||
if (toast && body) {
|
||
body.textContent = text;
|
||
toast.className = 'toast show toast-success';
|
||
clearTimeout(toast._timer);
|
||
toast._timer = setTimeout(function() { toast.classList.remove('show'); }, 2600);
|
||
}
|
||
}
|
||
});
|
||
</script>
|
||
<div class="main">
|
||
<header class="admin-top">
|
||
<div class="crumb"><?php esc_html_e(
|
||
"Agentic Writer",
|
||
"wp-agentic-writer",
|
||
); ?> / <strong id="wpaw2-crumb-tab"><?php esc_html_e(
|
||
"General",
|
||
"wp-agentic-writer",
|
||
); ?></strong></div>
|
||
<div class="top-actions">
|
||
<button type="button" class="btn btn-small" data-aw2-tab="guide"><?php esc_html_e(
|
||
"Open Guide",
|
||
"wp-agentic-writer",
|
||
); ?></button>
|
||
<button type="button" class="btn btn-small btn-danger" id="wpaw-reset-settings"><?php esc_html_e(
|
||
"Reset Defaults",
|
||
"wp-agentic-writer",
|
||
); ?></button>
|
||
<button type="submit" form="wpaw2-settings-form" class="btn btn-primary btn-small"><?php esc_html_e(
|
||
"Save Settings",
|
||
"wp-agentic-writer",
|
||
); ?></button>
|
||
</div>
|
||
</header>
|
||
|
||
<main class="page">
|
||
<section class="hero">
|
||
<div class="hero-card">
|
||
<p class="eyebrow"><?php esc_html_e(
|
||
"Control center",
|
||
"wp-agentic-writer",
|
||
); ?></p>
|
||
<h1><?php esc_html_e(
|
||
"Configure your agentic writing workflow.",
|
||
"wp-agentic-writer",
|
||
); ?></h1>
|
||
<p class="hero-copy"><?php esc_html_e(
|
||
"Manage providers, model routing, memory, cost controls, and custom endpoint integrations from one lightweight settings interface.",
|
||
"wp-agentic-writer",
|
||
); ?></p>
|
||
</div>
|
||
<div class="status-panel">
|
||
<div class="workflow-step"><span class="step-dot">1</span><span class="step-label"><?php esc_html_e(
|
||
"OpenRouter",
|
||
"wp-agentic-writer",
|
||
); ?></span><span class="status <?php echo esc_attr(
|
||
$api_connected ? "connected" : "warn",
|
||
); ?>"><?php echo $api_connected
|
||
? esc_html__("Connected", "wp-agentic-writer")
|
||
: esc_html__("Missing key", "wp-agentic-writer"); ?></span></div>
|
||
<div class="workflow-step"><span class="step-dot">2</span><span class="step-label"><?php esc_html_e(
|
||
"Models",
|
||
"wp-agentic-writer",
|
||
); ?></span><span class="status <?php echo esc_attr(
|
||
$models_ready ? "connected" : "warn",
|
||
); ?>"><?php echo $models_ready
|
||
? esc_html__("Ready", "wp-agentic-writer")
|
||
: esc_html__("Review", "wp-agentic-writer"); ?></span></div>
|
||
<div class="workflow-step"><span class="step-dot">3</span><span class="step-label"><?php esc_html_e(
|
||
"Budget",
|
||
"wp-agentic-writer",
|
||
); ?></span><span class="status <?php echo esc_attr(
|
||
"danger" === $budget_status
|
||
? "error"
|
||
: ("warning" === $budget_status
|
||
? "warn"
|
||
: "connected"),
|
||
); ?>"><?php echo esc_html(
|
||
number_format_i18n($budget_percent_safe, 1),
|
||
); ?>%</span></div>
|
||
</div>
|
||
</section>
|
||
|
||
<form method="post" action="options.php" id="wpaw2-settings-form">
|
||
<?php settings_fields("wp_agentic_writer_settings"); ?>
|
||
<section class="tabs-wrap">
|
||
<aside class="tab-sidebar" aria-label="Settings sections">
|
||
<div class="tab-group">
|
||
<div class="tab-group-title"><?php esc_html_e(
|
||
"Setup",
|
||
"wp-agentic-writer",
|
||
); ?></div>
|
||
<?php foreach (
|
||
["general", "models", "local-backend", "tools", "memanto"]
|
||
as $tab_key
|
||
): ?>
|
||
<button type="button" class="tab-btn" data-aw2-tab="<?php echo esc_attr(
|
||
$tab_key,
|
||
); ?>" data-label="<?php echo esc_attr(
|
||
$settings_tabs[$tab_key][0],
|
||
); ?>" aria-selected="<?php echo "general" === $tab_key
|
||
? "true"
|
||
: "false"; ?>"><span><?php echo esc_html(
|
||
$settings_tabs[$tab_key][0],
|
||
); ?></span><span class="tab-count"><?php echo esc_html(
|
||
$settings_tabs[$tab_key][1],
|
||
); ?></span></button>
|
||
<?php endforeach; ?>
|
||
</div>
|
||
<div class="tab-group">
|
||
<div class="tab-group-title"><?php esc_html_e(
|
||
"Reference",
|
||
"wp-agentic-writer",
|
||
); ?></div>
|
||
<?php foreach (["cost-log", "guide"] as $tab_key): ?>
|
||
<button type="button" class="tab-btn" data-aw2-tab="<?php echo esc_attr(
|
||
$tab_key,
|
||
); ?>" data-label="<?php echo esc_attr(
|
||
$settings_tabs[$tab_key][0],
|
||
); ?>" aria-selected="false"><span><?php echo esc_html(
|
||
$settings_tabs[$tab_key][0],
|
||
); ?></span><span class="tab-count"><?php echo esc_html(
|
||
$settings_tabs[$tab_key][1],
|
||
); ?></span></button>
|
||
<?php endforeach; ?>
|
||
</div>
|
||
</aside>
|
||
|
||
<div>
|
||
<section class="tab-panel active" id="general"><?php require WP_AGENTIC_WRITER_DIR .
|
||
"views/settings-v2/tab-general.php"; ?></section>
|
||
<section class="tab-panel" id="models"><?php require WP_AGENTIC_WRITER_DIR .
|
||
"views/settings-v2/tab-models.php"; ?></section>
|
||
<section class="tab-panel" id="local-backend"><?php require WP_AGENTIC_WRITER_DIR .
|
||
"views/settings-v2/tab-local-backend.php"; ?></section>
|
||
<section class="tab-panel" id="tools"><?php require WP_AGENTIC_WRITER_DIR .
|
||
"views/settings-v2/tab-tools.php"; ?></section>
|
||
<section class="tab-panel" id="memanto"><?php require WP_AGENTIC_WRITER_DIR .
|
||
"views/settings-v2/tab-memanto.php"; ?></section>
|
||
<section class="tab-panel" id="cost-log"><?php require WP_AGENTIC_WRITER_DIR .
|
||
"views/settings-v2/tab-cost-log.php"; ?></section>
|
||
<section class="tab-panel" id="guide"><?php require WP_AGENTIC_WRITER_DIR .
|
||
"views/settings-v2/tab-guide.php"; ?></section>
|
||
</div>
|
||
</section>
|
||
</form>
|
||
</main>
|
||
</div>
|
||
|
||
<div class="toast" id="wpaw2-toast" role="status" aria-live="polite"><button type="button" class="btn btn-small" id="wpaw2-toast-close" style="float:right">×</button><span id="wpaw2-toast-message"></span></div>
|
||
</div>
|