Feature: Agregar selección de idiomas por plataforma (Telegram/Discord)

- Agregar columnas telegram_enabled y discord_enabled a supported_languages
- Nueva interfaz en admin/languages.php con checkboxes para Telegram y Discord
- Los bots ahora solo muestran botones de traducción para los idiomas seleccionados por plataforma
This commit is contained in:
2026-03-10 18:52:30 -06:00
parent 8170931f3d
commit 223c44f1d8
6 changed files with 71 additions and 18 deletions

View File

@@ -83,6 +83,22 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['action'])) {
} catch (Exception $e) { } catch (Exception $e) {
$syncError = "Error al conectar con LibreTranslate: " . $e->getMessage() . ". Verifica que el servicio esté configurado correctamente en el archivo .env"; $syncError = "Error al conectar con LibreTranslate: " . $e->getMessage() . ". Verifica que el servicio esté configurado correctamente en el archivo .env";
} }
} elseif ($action === 'toggle_telegram') {
$id = (int) $_POST['id'];
$stmt = $pdo->prepare("UPDATE supported_languages SET telegram_enabled = NOT telegram_enabled WHERE id = ? AND is_active = TRUE");
$stmt->execute([$id]);
logActivity(getCurrentUserId(), 'toggle_telegram_language', "Idioma Telegram ID: $id");
header('Location: languages.php');
exit;
} elseif ($action === 'toggle_discord') {
$id = (int) $_POST['id'];
$stmt = $pdo->prepare("UPDATE supported_languages SET discord_enabled = NOT discord_enabled WHERE id = ? AND is_active = TRUE");
$stmt->execute([$id]);
logActivity(getCurrentUserId(), 'toggle_discord_language', "Idioma Discord ID: $id");
header('Location: languages.php');
exit;
} }
} }
@@ -294,6 +310,8 @@ require_once __DIR__ . '/../templates/header.php';
<th><?= t('Código') ?></th> <th><?= t('Código') ?></th>
<th><?= t('Nombre') ?></th> <th><?= t('Nombre') ?></th>
<th><?= t('Estado') ?></th> <th><?= t('Estado') ?></th>
<th><?= t('Telegram') ?></th>
<th><?= t('Discord') ?></th>
<th><?= t('Acciones') ?></th> <th><?= t('Acciones') ?></th>
</tr> </tr>
</thead> </thead>
@@ -310,6 +328,32 @@ require_once __DIR__ . '/../templates/header.php';
<span class="badge bg-secondary"><?= t('Inactivo') ?></span> <span class="badge bg-secondary"><?= t('Inactivo') ?></span>
<?php endif; ?> <?php endif; ?>
</td> </td>
<td>
<?php if ($lang['is_active']): ?>
<form method="POST" class="d-inline">
<input type="hidden" name="action" value="toggle_telegram">
<input type="hidden" name="id" value="<?= $lang['id'] ?>">
<button type="submit" class="btn btn-sm btn-outline-<?= $lang['telegram_enabled'] ? 'info' : 'secondary' ?>">
<i class="bi bi-<?= $lang['telegram_enabled'] ? 'check-circle-fill' : 'circle' ?>"></i>
</button>
</form>
<?php else: ?>
<span class="text-muted"><i class="bi bi-circle"></i></span>
<?php endif; ?>
</td>
<td>
<?php if ($lang['is_active']): ?>
<form method="POST" class="d-inline">
<input type="hidden" name="action" value="toggle_discord">
<input type="hidden" name="id" value="<?= $lang['id'] ?>">
<button type="submit" class="btn btn-sm btn-outline-<?= $lang['discord_enabled'] ? 'primary' : 'secondary' ?>">
<i class="bi bi-<?= $lang['discord_enabled'] ? 'check-circle-fill' : 'circle' ?>"></i>
</button>
</form>
<?php else: ?>
<span class="text-muted"><i class="bi bi-circle"></i></span>
<?php endif; ?>
</td>
<td> <td>
<form method="POST" class="d-inline"> <form method="POST" class="d-inline">
<input type="hidden" name="action" value="toggle_status"> <input type="hidden" name="action" value="toggle_status">

View File

@@ -10,16 +10,19 @@ requireAdmin();
function getTranslationButtons(PDO $pdo, string $text): array function getTranslationButtons(PDO $pdo, string $text): array
{ {
$stmt = $pdo->query("SELECT language_code, flag_emoji FROM supported_languages WHERE is_active = 1"); $stmtTelegram = $pdo->query("SELECT language_code, flag_emoji FROM supported_languages WHERE is_active = 1 AND telegram_enabled = 1");
$languages = $stmt->fetchAll(); $telegramLanguages = $stmtTelegram->fetchAll();
if (count($languages) <= 1) { $stmtDiscord = $pdo->query("SELECT language_code, flag_emoji FROM supported_languages WHERE is_active = 1 AND discord_enabled = 1");
$discordLanguages = $stmtDiscord->fetchAll();
if (count($telegramLanguages) <= 1 && count($discordLanguages) <= 1) {
return []; return [];
} }
return [ return [
'telegram' => buildTelegramTranslationButtons($pdo, $languages, $text), 'telegram' => count($telegramLanguages) > 1 ? buildTelegramTranslationButtons($pdo, $telegramLanguages, $text) : [],
'discord' => buildDiscordTranslationButtons($languages, $text) 'discord' => count($discordLanguages) > 1 ? buildDiscordTranslationButtons($discordLanguages, $text) : []
]; ];
} }

View File

@@ -10,16 +10,19 @@ require_once __DIR__ . '/includes/i18n.php';
function getTranslationButtons(PDO $pdo, string $text): array function getTranslationButtons(PDO $pdo, string $text): array
{ {
$stmt = $pdo->query("SELECT language_code, flag_emoji FROM supported_languages WHERE is_active = 1"); $stmtTelegram = $pdo->query("SELECT language_code, flag_emoji FROM supported_languages WHERE is_active = 1 AND telegram_enabled = 1");
$languages = $stmt->fetchAll(); $telegramLanguages = $stmtTelegram->fetchAll();
if (count($languages) <= 1) { $stmtDiscord = $pdo->query("SELECT language_code, flag_emoji FROM supported_languages WHERE is_active = 1 AND discord_enabled = 1");
$discordLanguages = $stmtDiscord->fetchAll();
if (count($telegramLanguages) <= 1 && count($discordLanguages) <= 1) {
return []; return [];
} }
return [ return [
'telegram' => buildTelegramTranslationButtons($pdo, $languages, $text), 'telegram' => count($telegramLanguages) > 1 ? buildTelegramTranslationButtons($pdo, $telegramLanguages, $text) : [],
'discord' => buildDiscordTranslationButtons($languages, $text) 'discord' => count($discordLanguages) > 1 ? buildDiscordTranslationButtons($discordLanguages, $text) : []
]; ];
} }

View File

@@ -150,7 +150,7 @@ function handleTemplateCommand(PDO $pdo, Message $message, string $command): voi
function getDiscordTranslationButtons(PDO $pdo, string $text): array function getDiscordTranslationButtons(PDO $pdo, string $text): array
{ {
$stmt = $pdo->query("SELECT language_code, flag_emoji FROM supported_languages WHERE is_active = 1"); $stmt = $pdo->query("SELECT language_code, flag_emoji FROM supported_languages WHERE is_active = 1 AND discord_enabled = 1");
$languages = $stmt->fetchAll(); $languages = $stmt->fetchAll();
if (count($languages) <= 1) { if (count($languages) <= 1) {
@@ -351,7 +351,7 @@ function handleAutoTranslationWithButtons(PDO $pdo, Message $message, string $te
$detectedLang = $translator->detectLanguage($textForDetection) ?? $defaultLang; $detectedLang = $translator->detectLanguage($textForDetection) ?? $defaultLang;
// Obtener idiomas activos de la base de datos // Obtener idiomas activos de la base de datos
$stmt = $pdo->query("SELECT language_code, flag_emoji FROM supported_languages WHERE is_active = 1"); $stmt = $pdo->query("SELECT language_code, flag_emoji FROM supported_languages WHERE is_active = 1 AND discord_enabled = 1");
$activeLanguages = $stmt->fetchAll(); $activeLanguages = $stmt->fetchAll();
if (count($activeLanguages) <= 1) { if (count($activeLanguages) <= 1) {

View File

@@ -13,16 +13,19 @@ define('SLEEP_INTERVAL', 5);
function getTranslationButtons(PDO $pdo, string $text): array function getTranslationButtons(PDO $pdo, string $text): array
{ {
$stmt = $pdo->query("SELECT language_code, flag_emoji FROM supported_languages WHERE is_active = 1"); $stmtTelegram = $pdo->query("SELECT language_code, flag_emoji FROM supported_languages WHERE is_active = 1 AND telegram_enabled = 1");
$languages = $stmt->fetchAll(); $telegramLanguages = $stmtTelegram->fetchAll();
if (count($languages) <= 1) { $stmtDiscord = $pdo->query("SELECT language_code, flag_emoji FROM supported_languages WHERE is_active = 1 AND discord_enabled = 1");
$discordLanguages = $stmtDiscord->fetchAll();
if (count($telegramLanguages) <= 1 && count($discordLanguages) <= 1) {
return []; return [];
} }
return [ return [
'telegram' => buildTelegramTranslationButtons($pdo, $languages, $text), 'telegram' => count($telegramLanguages) > 1 ? buildTelegramTranslationButtons($pdo, $telegramLanguages, $text) : [],
'discord' => buildDiscordTranslationButtons($languages, $text) 'discord' => count($discordLanguages) > 1 ? buildDiscordTranslationButtons($discordLanguages, $text) : []
]; ];
} }

View File

@@ -126,7 +126,7 @@ function handleAutoTranslation(PDO $pdo, Telegram\TelegramSender $sender, src\Tr
function getTelegramTranslationButtons(PDO $pdo, string $text): ?array function getTelegramTranslationButtons(PDO $pdo, string $text): ?array
{ {
try { try {
$stmt = $pdo->query("SELECT language_code, flag_emoji FROM supported_languages WHERE is_active = 1"); $stmt = $pdo->query("SELECT language_code, flag_emoji FROM supported_languages WHERE is_active = 1 AND telegram_enabled = 1");
$activeLanguages = $stmt->fetchAll(); $activeLanguages = $stmt->fetchAll();
if (count($activeLanguages) <= 1) { if (count($activeLanguages) <= 1) {