prepare("SELECT setting_value FROM settings WHERE setting_key = 'is_locked'"); $stmt->execute(); $isLocked = $stmt->fetchColumn(); if ($isLocked === '1') { echo json_encode(['success' => false, 'error' => 'Settings are locked.']); exit; } $uploadDir = __DIR__ . '/../assets/images/uploads/'; $fileName = 'valentine_' . time() . '_' . basename($_FILES['image']['name']); $targetPath = $uploadDir . $fileName; if (move_uploaded_file($_FILES['image']['tmp_name'], $targetPath)) { $webPath = 'assets/images/uploads/' . $fileName; $stmt = db()->prepare("UPDATE settings SET setting_value = ? WHERE setting_key = 'valentine_image'"); $stmt->execute([$webPath]); echo json_encode(['success' => true, 'path' => $webPath]); } else { echo json_encode(['success' => false, 'error' => 'Failed to move uploaded file.']); } } else { echo json_encode(['success' => false, 'error' => 'No file uploaded or upload error.']); } } elseif ($action === 'toggle_lock') { $lockValue = $_POST['lock'] === 'true' ? '1' : '0'; $stmt = db()->prepare("UPDATE settings SET setting_value = ? WHERE setting_key = 'is_locked'"); $stmt->execute([$lockValue]); echo json_encode(['success' => true, 'locked' => $lockValue === '1']); } elseif ($action === 'reset') { // We don't necessarily reset the image here unless specified, // but the user said "reset the experience". // Maybe it just clears the locked state and image? // Usually "reset experience" for the user means restart the proposal. // However, if they want to reset the setup, we can clear the image. $stmt = db()->prepare("UPDATE settings SET setting_value = '' WHERE setting_key = 'valentine_image'"); $stmt->execute(); $stmt = db()->prepare("UPDATE settings SET setting_value = '0' WHERE setting_key = 'is_locked'"); $stmt->execute(); echo json_encode(['success' => true]); } else { echo json_encode(['success' => false, 'error' => 'Invalid action.']); }