fix: dedicated save button for categories + preserve all extra DB keys

- Replace onchange+AJAX with explicit button '💾 Guardar categorías'
  that shows alert on success/error for clear feedback
- Get company_id from DOM (not COMPANY_ID JS const from another script block)
- Main form save now preserves welcome_menu and per_type from DB even if
  POST is truncated by max_input_vars
- Restore welcome_menu='welcome_msg' in DB (was wiped by a previous save)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Lizandro Guarnizo
2026-06-30 19:16:36 -05:00
co-authored by Claude Sonnet 4.6
parent ae5b7266d4
commit 601169525e
2 changed files with 32 additions and 19 deletions
+15 -4
View File
@@ -557,10 +557,21 @@ $routes = [
$approvalWebhook = trim($_POST['approval_webhook'] ?? '');
if ($approvalWebhook !== '') $config['approval_webhook'] = $approvalWebhook;
$welcomeMenu = trim($_POST['welcome_menu'] ?? '');
if ($welcomeMenu !== '') {
$config['welcome_menu'] = $welcomeMenu;
} elseif (!empty($existingConfig['welcome_menu'])) {
$config['welcome_menu'] = $existingConfig['welcome_menu'];
if ($welcomeMenu !== '') $config['welcome_menu'] = $welcomeMenu;
// Preserve any DB keys the form doesn't explicitly manage (welcome_menu, per_type, etc.)
$formManagedKeys = ['commands', 'menus', 'flows', 'ai_prompt', 'ai_model', 'ai_temperature',
'ai_provider', 'openai_api_key', 'gemini_api_key', 'gemini_model',
'ai_for_media', 'greeting', 'fallback', 'approval_webhook',
'ignore_prefixes', 'welcome_menu', 'per_type'];
foreach ($existingConfig as $k => $v) {
if (!in_array($k, $formManagedKeys, true) && !isset($config[$k])) {
$config[$k] = $v;
}
// Also preserve managed keys that POST didn't provide (e.g. truncated by max_input_vars)
if (in_array($k, ['welcome_menu', 'per_type'], true) && !isset($config[$k])) {
$config[$k] = $v;
}
}
CompanyRepository::save(['id' => $companyId, 'config_json' => json_encode($config, JSON_UNESCAPED_UNICODE)]);