Fix
This commit is contained in:
@@ -210,24 +210,36 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST') {
|
||||
|
||||
// 4. AI Co-Pilot instellingen opslaan (Release v1.5)
|
||||
elseif ($action === 'save_ai_settings') {
|
||||
$aiEnabled = isset($_POST['ai_enabled']) ? 1 : 0;
|
||||
$aiProvider = trim($_POST['ai_provider'] ?? 'openai');
|
||||
$aiModel = trim($_POST['ai_model'] ?? 'gpt-4o-mini');
|
||||
$apiKeyIn = trim($_POST['ai_api_key'] ?? '');
|
||||
try {
|
||||
$aiEnabled = isset($_POST['ai_enabled']) ? 1 : 0;
|
||||
$aiModel = trim((string)($_POST['ai_model'] ?? 'gemini-1.5-pro'));
|
||||
$aiProvider = trim((string)($_POST['ai_provider'] ?? ''));
|
||||
if (empty($aiProvider)) {
|
||||
$aiProvider = str_contains($aiModel, 'gpt') ? 'openai' : 'gemini';
|
||||
}
|
||||
$apiKeyIn = trim((string)($_POST['ai_api_key'] ?? ''));
|
||||
|
||||
$currentAi = get_ai_settings();
|
||||
if ($apiKeyIn !== '' && $apiKeyIn !== '••••••••••••••••') {
|
||||
set_system_setting('ai_api_key', fociz_encrypt($apiKeyIn));
|
||||
if ($apiKeyIn !== '' && $apiKeyIn !== '••••••••••••••••') {
|
||||
set_system_setting('ai_api_key', fociz_encrypt($apiKeyIn));
|
||||
}
|
||||
|
||||
set_system_setting('ai_enabled', $aiEnabled);
|
||||
set_system_setting('ai_provider', $aiProvider);
|
||||
set_system_setting('ai_model', $aiModel);
|
||||
|
||||
fociz_log_audit($userId, 'SETTINGS_UPDATED', 'ai_settings', null, [
|
||||
'ai_enabled' => $aiEnabled,
|
||||
'ai_provider' => $aiProvider,
|
||||
'ai_model' => $aiModel
|
||||
], 'SUCCESS', $adminUser['email'] ?? null);
|
||||
|
||||
$message = "AI Co-Pilot instellingen zijn succesvol opgeslagen.";
|
||||
$messageType = 'success';
|
||||
} catch (Throwable $e) {
|
||||
error_log("Fout bij opslaan AI instellingen: " . $e->getMessage());
|
||||
$message = "Fout bij opslaan van AI instellingen: " . htmlspecialchars($e->getMessage());
|
||||
$messageType = 'error';
|
||||
}
|
||||
|
||||
set_system_setting('ai_enabled', $aiEnabled);
|
||||
set_system_setting('ai_provider', $aiProvider);
|
||||
set_system_setting('ai_model', $aiModel);
|
||||
|
||||
fociz_log_audit($userId, 'SETTINGS_UPDATED', 'ai_settings', null, ['ai_enabled' => $aiEnabled, 'ai_provider' => $aiProvider, 'ai_model' => $aiModel], 'SUCCESS', $adminUser['email']);
|
||||
|
||||
$message = "AI Co-Pilot instellingen zijn succesvol opgeslagen.";
|
||||
$messageType = 'success';
|
||||
}
|
||||
|
||||
// 5. Test e-mail versturen via SMTP (Release v1.6)
|
||||
@@ -1098,7 +1110,7 @@ require_once __DIR__ . '/includes/header.php';
|
||||
</span>
|
||||
<span class="px-2.5 py-1 rounded-full <?= $aiSettings['has_key'] ? 'bg-teal-50 dark:bg-teal-950/40 text-teal-700 dark:text-teal-400 border border-teal-200 dark:border-teal-800/60' : 'bg-amber-50 dark:bg-amber-950/40 text-amber-700 dark:text-amber-400 border border-amber-200 dark:border-amber-800/60' ?> text-xs font-bold inline-flex items-center space-x-1.5">
|
||||
<i data-lucide="<?= $aiSettings['has_key'] ? 'check-circle-2' : 'key' ?>" class="w-3.5 h-3.5 flex-shrink-0"></i>
|
||||
<span><?= $aiSettings['has_key'] ? 'AI Actief (' . htmlspecialchars($aiSettings['ai_model']) . ')' : 'Sleutel Vereist' ?></span>
|
||||
<span><?= $aiSettings['has_key'] ? 'AI Actief (' . htmlspecialchars((string)($aiSettings['ai_model'] ?? 'Gemini Pro')) . ')' : 'Sleutel Vereist' ?></span>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
@@ -1141,7 +1153,7 @@ require_once __DIR__ . '/includes/header.php';
|
||||
<option value="gpt-4o" <?= $aiSettings['ai_model'] === 'gpt-4o' ? 'selected' : '' ?>>OpenAI GPT-4o</option>
|
||||
</optgroup>
|
||||
</select>
|
||||
<input type="hidden" name="ai_provider" id="admin_ai_provider" value="<?= strpos($aiSettings['ai_model'], 'gpt') !== false ? 'openai' : 'gemini' ?>">
|
||||
<input type="hidden" name="ai_provider" id="admin_ai_provider" value="<?= str_contains((string)($aiSettings['ai_model'] ?? ''), 'gpt') ? 'openai' : 'gemini' ?>">
|
||||
</div>
|
||||
|
||||
<div>
|
||||
@@ -1651,7 +1663,10 @@ async function testAdminAiConnection() {
|
||||
const resultDiv = document.getElementById('adminAiTestResult');
|
||||
const apiKey = document.getElementById('admin_ai_api_key').value.trim();
|
||||
const model = document.getElementById('admin_ai_model').value;
|
||||
const provider = document.getElementById('admin_ai_provider').value;
|
||||
let provider = document.getElementById('admin_ai_provider').value;
|
||||
if (!provider) {
|
||||
provider = (model && model.indexOf('gpt') !== -1) ? 'openai' : 'gemini';
|
||||
}
|
||||
|
||||
resultDiv.classList.add('hidden');
|
||||
resultDiv.className = 'hidden p-3 rounded-xl text-xs';
|
||||
@@ -1673,12 +1688,19 @@ async function testAdminAiConnection() {
|
||||
headers: { 'Content-Type': 'application/json' },
|
||||
body: JSON.stringify(payload),
|
||||
});
|
||||
const data = await res.json();
|
||||
|
||||
const rawText = await res.text();
|
||||
let data;
|
||||
try {
|
||||
data = JSON.parse(rawText);
|
||||
} catch (parseErr) {
|
||||
throw new Error(`Ongeldig serverantwoord (HTTP ${res.status}): ${rawText.slice(0, 200)}`);
|
||||
}
|
||||
|
||||
resultDiv.classList.remove('hidden');
|
||||
if (data.success) {
|
||||
if (data && data.success) {
|
||||
resultDiv.className = 'p-3 rounded-xl text-xs bg-emerald-50 dark:bg-emerald-950/30 border border-emerald-200 dark:border-emerald-800 text-emerald-800 dark:text-emerald-200 flex items-center space-x-2';
|
||||
resultDiv.innerHTML = `<i data-lucide="check-circle" class="w-4 h-4 text-emerald-600 dark:text-emerald-400 flex-shrink-0"></i><span><strong>Verbinding Geslaagd!</strong> ${data.message}</span>`;
|
||||
resultDiv.innerHTML = `<i data-lucide="check-circle" class="w-4 h-4 text-emerald-600 dark:text-emerald-400 flex-shrink-0"></i><span><strong>Verbinding Geslaagd!</strong> ${data.message || 'API verbinding is geverifieerd.'}</span>`;
|
||||
} else {
|
||||
resultDiv.className = 'p-3 rounded-xl text-xs bg-rose-50 dark:bg-rose-950/30 border border-rose-200 dark:border-rose-800 text-rose-800 dark:text-rose-200 flex items-center space-x-2';
|
||||
resultDiv.innerHTML = `<i data-lucide="alert-circle" class="w-4 h-4 text-rose-600 dark:text-rose-400 flex-shrink-0"></i><span><strong>Verbinding Mislukt:</strong> ${data.error || 'Onbekende fout opgetreden'}</span>`;
|
||||
|
||||
Reference in New Issue
Block a user