Add traffic limit functionality
- Add traffic_limit field to vpn_clients table (migration 007) - Add traffic limit management methods in VpnClient class - Add API endpoints: set-traffic-limit, traffic-limit-status, overlimit - Add UI for setting limits when creating clients - Add traffic limit column in clients table with visual indicators - Add automatic traffic limit check via cron (bin/check_traffic_limits.php) - Add translations for traffic limits (6 languages) - Update README with traffic limit documentation
This commit is contained in:
@@ -205,6 +205,9 @@ INSERT INTO translations (language_code, translation_key, translation_value) VAL
|
||||
('en', 'clients.sync_stats', 'Sync Stats'),
|
||||
('en', 'clients.title', 'Clients'),
|
||||
('en', 'clients.traffic', 'Traffic'),
|
||||
('en', 'clients.traffic_limit', 'Traffic Limit'),
|
||||
('en', 'clients.unlimited', 'Unlimited'),
|
||||
('en', 'clients.overlimit', 'Over Limit'),
|
||||
('en', 'backups.title', 'Server Backups'),
|
||||
('en', 'backups.create', 'Create Backup'),
|
||||
('en', 'backups.restore', 'Restore'),
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
-- Russian translations
|
||||
-- This migration adds Russian language translations
|
||||
-- RU translations
|
||||
-- This migration adds RU language translations
|
||||
|
||||
INSERT INTO translations (language_code, translation_key, translation_value) VALUES
|
||||
('ru', 'auth.email', 'Email'),
|
||||
@@ -32,6 +32,7 @@ INSERT INTO translations (language_code, translation_key, translation_value) VAL
|
||||
('ru', 'clients.never', 'Никогда'),
|
||||
('ru', 'clients.never_expires', 'Бессрочно'),
|
||||
('ru', 'clients.no_clients', 'Пока нет клиентов'),
|
||||
('ru', 'clients.overlimit', 'Превышен лимит'),
|
||||
('ru', 'clients.qr_code', 'QR-код'),
|
||||
('ru', 'clients.received', 'Получено'),
|
||||
('ru', 'clients.restore', 'Восстановить'),
|
||||
@@ -43,6 +44,8 @@ INSERT INTO translations (language_code, translation_key, translation_value) VAL
|
||||
('ru', 'clients.sync_stats', 'Синхронизировать статистику'),
|
||||
('ru', 'clients.title', 'Клиенты'),
|
||||
('ru', 'clients.traffic', 'Трафик'),
|
||||
('ru', 'clients.traffic_limit', 'Лимит трафика'),
|
||||
('ru', 'clients.unlimited', 'Безлимитно'),
|
||||
('ru', 'common.days', 'дней'),
|
||||
('ru', 'dashboard.active_clients', 'Активные клиенты'),
|
||||
('ru', 'dashboard.add_first_server', 'Добавить первый сервер'),
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
-- Spanish translations
|
||||
-- This migration adds Spanish language translations
|
||||
-- ES translations
|
||||
-- This migration adds ES language translations
|
||||
|
||||
INSERT INTO translations (language_code, translation_key, translation_value) VALUES
|
||||
('es', 'auth.email', 'Correo electrónico'),
|
||||
@@ -32,6 +32,7 @@ INSERT INTO translations (language_code, translation_key, translation_value) VAL
|
||||
('es', 'clients.never', 'Nunca'),
|
||||
('es', 'clients.never_expires', 'Nunca vence'),
|
||||
('es', 'clients.no_clients', 'Aún no hay clientes'),
|
||||
('es', 'clients.overlimit', 'Límite excedido'),
|
||||
('es', 'clients.qr_code', 'Código QR'),
|
||||
('es', 'clients.received', 'Recibido'),
|
||||
('es', 'clients.restore', 'Restaurar'),
|
||||
@@ -43,6 +44,8 @@ INSERT INTO translations (language_code, translation_key, translation_value) VAL
|
||||
('es', 'clients.sync_stats', 'Sincronizar estadísticas'),
|
||||
('es', 'clients.title', 'Clientes'),
|
||||
('es', 'clients.traffic', 'Tráfico'),
|
||||
('es', 'clients.traffic_limit', 'Límite de tráfico'),
|
||||
('es', 'clients.unlimited', 'Ilimitado'),
|
||||
('es', 'common.days', 'días'),
|
||||
('es', 'dashboard.active_clients', 'Clientes activos'),
|
||||
('es', 'dashboard.add_first_server', 'Agregar primer servidor'),
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
-- German translations
|
||||
-- This migration adds German language translations
|
||||
-- DE translations
|
||||
-- This migration adds DE language translations
|
||||
|
||||
INSERT INTO translations (language_code, translation_key, translation_value) VALUES
|
||||
('de', 'auth.email', 'E-Mail'),
|
||||
@@ -32,6 +32,7 @@ INSERT INTO translations (language_code, translation_key, translation_value) VAL
|
||||
('de', 'clients.never', 'Niemals'),
|
||||
('de', 'clients.never_expires', 'Läuft nie ab'),
|
||||
('de', 'clients.no_clients', 'Noch keine Kunden'),
|
||||
('de', 'clients.overlimit', 'Limit überschritten'),
|
||||
('de', 'clients.qr_code', 'QR-Code'),
|
||||
('de', 'clients.received', 'Empfangen'),
|
||||
('de', 'clients.restore', 'Wiederherstellen'),
|
||||
@@ -43,6 +44,8 @@ INSERT INTO translations (language_code, translation_key, translation_value) VAL
|
||||
('de', 'clients.sync_stats', 'Statistiken synchronisieren'),
|
||||
('de', 'clients.title', 'Clients'),
|
||||
('de', 'clients.traffic', 'Datenverkehr'),
|
||||
('de', 'clients.traffic_limit', 'Traffic-Limit'),
|
||||
('de', 'clients.unlimited', 'Unbegrenzt'),
|
||||
('de', 'common.days', 'Tage'),
|
||||
('de', 'dashboard.active_clients', 'Aktive Clients'),
|
||||
('de', 'dashboard.add_first_server', 'Ersten Server hinzufügen'),
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
-- French translations
|
||||
-- This migration adds French language translations
|
||||
-- FR translations
|
||||
-- This migration adds FR language translations
|
||||
|
||||
INSERT INTO translations (language_code, translation_key, translation_value) VALUES
|
||||
('fr', 'auth.email', 'Email'),
|
||||
@@ -32,6 +32,7 @@ INSERT INTO translations (language_code, translation_key, translation_value) VAL
|
||||
('fr', 'clients.never', 'Jamais'),
|
||||
('fr', 'clients.never_expires', 'N''expire jamais'),
|
||||
('fr', 'clients.no_clients', 'Pas encore de clients'),
|
||||
('fr', 'clients.overlimit', 'Limite dépassée'),
|
||||
('fr', 'clients.qr_code', 'Code QR'),
|
||||
('fr', 'clients.received', 'Reçu'),
|
||||
('fr', 'clients.restore', 'Restaurer'),
|
||||
@@ -43,6 +44,8 @@ INSERT INTO translations (language_code, translation_key, translation_value) VAL
|
||||
('fr', 'clients.sync_stats', 'Synchroniser les statistiques'),
|
||||
('fr', 'clients.title', 'Clients'),
|
||||
('fr', 'clients.traffic', 'Trafic'),
|
||||
('fr', 'clients.traffic_limit', 'Limite de trafic'),
|
||||
('fr', 'clients.unlimited', 'Illimité'),
|
||||
('fr', 'common.days', 'jours'),
|
||||
('fr', 'dashboard.active_clients', 'Clients actifs'),
|
||||
('fr', 'dashboard.add_first_server', 'Ajouter le premier serveur'),
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
-- Chinese translations
|
||||
-- This migration adds Chinese language translations
|
||||
-- ZH translations
|
||||
-- This migration adds ZH language translations
|
||||
|
||||
INSERT INTO translations (language_code, translation_key, translation_value) VALUES
|
||||
('zh', 'auth.email', '邮箱'),
|
||||
@@ -32,6 +32,7 @@ INSERT INTO translations (language_code, translation_key, translation_value) VAL
|
||||
('zh', 'clients.never', '从不'),
|
||||
('zh', 'clients.never_expires', '永不过期'),
|
||||
('zh', 'clients.no_clients', '还没有客户'),
|
||||
('zh', 'clients.overlimit', '超出限制'),
|
||||
('zh', 'clients.qr_code', '二维码'),
|
||||
('zh', 'clients.received', '已接收'),
|
||||
('zh', 'clients.restore', '恢复'),
|
||||
@@ -43,6 +44,8 @@ INSERT INTO translations (language_code, translation_key, translation_value) VAL
|
||||
('zh', 'clients.sync_stats', '同步统计'),
|
||||
('zh', 'clients.title', '客户端'),
|
||||
('zh', 'clients.traffic', '流量'),
|
||||
('zh', 'clients.traffic_limit', '流量限制'),
|
||||
('zh', 'clients.unlimited', '无限制'),
|
||||
('zh', 'common.days', '天'),
|
||||
('zh', 'dashboard.active_clients', '活跃客户端'),
|
||||
('zh', 'dashboard.add_first_server', '添加第一个服务器'),
|
||||
|
||||
@@ -0,0 +1,6 @@
|
||||
-- Add traffic limit field to vpn_clients table
|
||||
-- This migration adds traffic limit functionality to clients
|
||||
|
||||
ALTER TABLE vpn_clients
|
||||
ADD COLUMN traffic_limit BIGINT UNSIGNED NULL COMMENT 'Traffic limit in bytes (NULL = unlimited)' AFTER traffic_received,
|
||||
ADD INDEX idx_traffic_limit (traffic_limit);
|
||||
Reference in New Issue
Block a user