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:
infosave2007
2025-11-08 09:56:25 +03:00
parent 5510e0b7b1
commit b6cf9cbab7
13 changed files with 378 additions and 16 deletions
+3
View File
@@ -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'),
+5 -2
View File
@@ -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', 'Добавить первый сервер'),
+5 -2
View File
@@ -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'),
+5 -2
View File
@@ -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'),
+5 -2
View File
@@ -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'),
+5 -2
View File
@@ -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', '添加第一个服务器'),
+6
View File
@@ -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);