mirror of
https://gitlab.com/ArkHost/WHMCS-ArkhostVPSAG.git
synced 2026-07-24 15:55:54 +02:00
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
95c8ea8c72 | ||
|
|
b52ef43833 | ||
|
|
a64ee60681 |
@@ -1,100 +1,43 @@
|
|||||||
# ArkHost VPSAG WHMCS Module
|
# WHMCS VPS Management Module - ArkHost VPSAG
|
||||||
|
|
||||||
WHMCS server module for VPSAG VPS platform integration.
|
A WHMCS server module for VPS management with multi-language support.
|
||||||
|
|
||||||
|
## Features
|
||||||
|
|
||||||
|
- VPS control (start/stop/restart)
|
||||||
|
- Backup management
|
||||||
|
- Firewall configuration
|
||||||
|
- OS reinstallation with advanced options
|
||||||
|
- Resource monitoring
|
||||||
|
- VNC console access
|
||||||
|
- 8 language support
|
||||||
|
- Responsive design
|
||||||
|
|
||||||
## Requirements
|
## Requirements
|
||||||
|
|
||||||
- WHMCS 8.0+
|
- WHMCS 7.0+
|
||||||
- PHP 7.4+
|
- PHP 7.4+
|
||||||
- cURL extension
|
|
||||||
- VPSAG API credentials
|
|
||||||
|
|
||||||
## Installation
|
|
||||||
|
|
||||||
1. Extract to `/path/to/whmcs/modules/servers/ArkhostVPSAG/`
|
|
||||||
2. Set permissions: `chmod -R 755 modules/servers/ArkhostVPSAG/`
|
|
||||||
3. In WHMCS admin: Setup → Products/Services → Servers
|
|
||||||
4. Add server:
|
|
||||||
- Type: ArkhostVPSAG
|
|
||||||
- Hostname: VPSAG API endpoint
|
|
||||||
- Username: API username
|
|
||||||
- Password: API key
|
|
||||||
|
|
||||||
## Configuration
|
|
||||||
|
|
||||||
- Create server with ArkhostVPSAG module type
|
|
||||||
- Enter VPSAG API credentials
|
|
||||||
- Test connection
|
|
||||||
|
|
||||||
- Create product
|
|
||||||
- Select module: ArkhostVPSAG
|
|
||||||
- Set plan ID and OS ID
|
|
||||||
|
|
||||||
Configurable options:
|
|
||||||
- `planid` - VPSAG plan identifier
|
|
||||||
- `osid` - Operating system identifier
|
|
||||||
|
|
||||||
## File Structure
|
|
||||||
|
|
||||||
```
|
|
||||||
/modules/servers/ArkhostVPSAG/
|
|
||||||
├── ArkhostVPSAG.php
|
|
||||||
├── callback.php
|
|
||||||
├── README.md
|
|
||||||
├── lang/
|
|
||||||
│ └── english.php
|
|
||||||
└── template/
|
|
||||||
├── clientarea_direct.tpl
|
|
||||||
├── error.tpl
|
|
||||||
├── css/
|
|
||||||
├── js/
|
|
||||||
└── img/
|
|
||||||
```
|
|
||||||
|
|
||||||
## API Integration
|
|
||||||
|
|
||||||
Base URL: `https://www.vpsag.com/api/v1/`
|
|
||||||
|
|
||||||
Headers:
|
|
||||||
X_API_USER: [username]
|
|
||||||
X_API_KEY: [api_key]
|
|
||||||
|
|
||||||
|
|
||||||
Endpoints:
|
## Changelog
|
||||||
- `GET /plans`
|
|
||||||
- `POST /order/plan`
|
|
||||||
- `GET /vps/{id}`
|
|
||||||
- `POST /vps/{id}/action/{action}`
|
|
||||||
- `GET /vps/{id}/graph/{period}`
|
|
||||||
- `POST /vps/{id}/backup`
|
|
||||||
- `POST /vps/{id}/firewall`
|
|
||||||
|
|
||||||
## Webhook
|
### Version 1.2
|
||||||
|
- Custom notifications replace browser popups
|
||||||
|
- Confirmation dialogs for critical actions
|
||||||
|
- Multi-language support for all notifications
|
||||||
|
- Smart post-installation script examples based on OS
|
||||||
|
- Fixed firewall rules not displaying after creation
|
||||||
|
- Improved UI styling and animations
|
||||||
|
|
||||||
VPSAG webhook URL:
|
### Version 1.1
|
||||||
`https://yourdomain.com/modules/servers/ArkhostVPSAG/callback.php`
|
- Basic VPS management
|
||||||
|
- Backup operations
|
||||||
|
- Firewall rules
|
||||||
|
- OS reinstall
|
||||||
|
|
||||||
Handles:
|
### Version 1.0
|
||||||
- VPS provisioning completion
|
- Initial release
|
||||||
- IP assignment
|
|
||||||
- Service activation
|
|
||||||
|
|
||||||
## Troubleshooting
|
|
||||||
|
|
||||||
Enable module logging: Utilities → Logs → Module Log
|
|
||||||
|
|
||||||
Common issues:
|
|
||||||
- Connection failed: Check API credentials and connectivity
|
|
||||||
- VPS not found: Verify VPS ID in service properties
|
|
||||||
- Client area not loading: Check file permissions and PHP logs
|
|
||||||
|
|
||||||
## Support
|
|
||||||
|
|
||||||
support@arkhost.com
|
|
||||||
|
|
||||||
## License
|
|
||||||
|
|
||||||
MIT License
|
MIT License
|
||||||
|
© 2025 ArkHost
|
||||||
Copyright (c) 2025 ArkHost
|
|
||||||
|
|
||||||
|
|||||||
@@ -3,8 +3,8 @@
|
|||||||
* WHMCS Server Module - VPSAG
|
* WHMCS Server Module - VPSAG
|
||||||
*
|
*
|
||||||
* @package WHMCS
|
* @package WHMCS
|
||||||
* @version 1.1
|
* @version 1.2
|
||||||
* @copyright Copyright (c) ArkHost 2024
|
* @copyright Copyright (c) ArkHost 2025
|
||||||
* @author ArkHost <support@arkhost.com>
|
* @author ArkHost <support@arkhost.com>
|
||||||
* @link https://arkhost.com
|
* @link https://arkhost.com
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -12,6 +12,20 @@ $_ADDONLANG['Stop'] = 'Stop';
|
|||||||
$_ADDONLANG['Restart'] = 'Herstarten';
|
$_ADDONLANG['Restart'] = 'Herstarten';
|
||||||
$_ADDONLANG['VNC'] = 'VNC-console';
|
$_ADDONLANG['VNC'] = 'VNC-console';
|
||||||
|
|
||||||
|
## Bevestigingen
|
||||||
|
$_ADDONLANG['Confirm']['Stop']['Title'] = 'VPS stoppen';
|
||||||
|
$_ADDONLANG['Confirm']['Stop']['Message'] = 'Weet u zeker dat u deze VPS wilt stoppen? Dit zal de server afsluiten.';
|
||||||
|
$_ADDONLANG['Confirm']['Restart']['Title'] = 'VPS herstarten';
|
||||||
|
$_ADDONLANG['Confirm']['Restart']['Message'] = 'Weet u zeker dat u deze VPS wilt herstarten? Dit zal de server opnieuw opstarten.';
|
||||||
|
$_ADDONLANG['Confirm']['Cancel'] = 'Annuleren';
|
||||||
|
$_ADDONLANG['Confirm']['Confirm'] = 'Bevestigen';
|
||||||
|
$_ADDONLANG['Confirm']['CreateBackup']['Title'] = 'Back-up maken';
|
||||||
|
$_ADDONLANG['Confirm']['CreateBackup']['Message'] = 'Wilt u een back-up maken. Dit kan enkele minuten duren.';
|
||||||
|
$_ADDONLANG['Confirm']['DeleteBackup']['Title'] = 'Back-up verwijderen';
|
||||||
|
$_ADDONLANG['Confirm']['DeleteBackup']['Message'] = 'Wilt u deze back-up verwijderen. Deze actie kan niet ongedaan worden gemaakt.';
|
||||||
|
$_ADDONLANG['Confirm']['RestoreBackup']['Title'] = 'Back-up herstellen';
|
||||||
|
$_ADDONLANG['Confirm']['RestoreBackup']['Message'] = 'Wilt u deze back-up herstellen. Dit overschrijft alle huidige gegevens en kan niet ongedaan worden gemaakt.';
|
||||||
|
|
||||||
## Navigatiebalk
|
## Navigatiebalk
|
||||||
$_ADDONLANG['Navbar']['Overview'] = 'Overzicht';
|
$_ADDONLANG['Navbar']['Overview'] = 'Overzicht';
|
||||||
$_ADDONLANG['Navbar']['Graphs'] = 'Grafieken';
|
$_ADDONLANG['Navbar']['Graphs'] = 'Grafieken';
|
||||||
@@ -45,6 +59,11 @@ $_ADDONLANG['Backups']['Type'] = 'Type';
|
|||||||
$_ADDONLANG['Backups']['Status'] = 'Status';
|
$_ADDONLANG['Backups']['Status'] = 'Status';
|
||||||
$_ADDONLANG['Backups']['Actions'] = 'Acties';
|
$_ADDONLANG['Backups']['Actions'] = 'Acties';
|
||||||
$_ADDONLANG['Backups']['Create'] = 'Nu Back-up Maken';
|
$_ADDONLANG['Backups']['Create'] = 'Nu Back-up Maken';
|
||||||
|
$_ADDONLANG['Backups']['Available'] = 'Beschikbaar';
|
||||||
|
$_ADDONLANG['Backups']['Creating'] = 'Bezig met maken...';
|
||||||
|
$_ADDONLANG['Backups']['Error'] = 'Fout';
|
||||||
|
$_ADDONLANG['Backups']['Automatic'] = 'Automatisch';
|
||||||
|
$_ADDONLANG['Backups']['Manual'] = 'Handmatig';
|
||||||
|
|
||||||
## Instellingen
|
## Instellingen
|
||||||
### Hostnaam
|
### Hostnaam
|
||||||
|
|||||||
@@ -12,6 +12,20 @@ $_ADDONLANG['Stop'] = 'Stop';
|
|||||||
$_ADDONLANG['Restart'] = 'Restart';
|
$_ADDONLANG['Restart'] = 'Restart';
|
||||||
$_ADDONLANG['VNC'] = 'VNC Console';
|
$_ADDONLANG['VNC'] = 'VNC Console';
|
||||||
|
|
||||||
|
## Confirmations
|
||||||
|
$_ADDONLANG['Confirm']['Stop']['Title'] = 'Stop VPS';
|
||||||
|
$_ADDONLANG['Confirm']['Stop']['Message'] = 'Do you want to stop this VPS? This will shutdown the server.';
|
||||||
|
$_ADDONLANG['Confirm']['Restart']['Title'] = 'Restart VPS';
|
||||||
|
$_ADDONLANG['Confirm']['Restart']['Message'] = 'Do you want to restart this VPS? This will reboot the server.';
|
||||||
|
$_ADDONLANG['Confirm']['Cancel'] = 'Cancel';
|
||||||
|
$_ADDONLANG['Confirm']['Confirm'] = 'Confirm';
|
||||||
|
$_ADDONLANG['Confirm']['CreateBackup']['Title'] = 'Create Backup';
|
||||||
|
$_ADDONLANG['Confirm']['CreateBackup']['Message'] = 'Do you want to create a backup. This may take several minutes.';
|
||||||
|
$_ADDONLANG['Confirm']['DeleteBackup']['Title'] = 'Delete Backup';
|
||||||
|
$_ADDONLANG['Confirm']['DeleteBackup']['Message'] = 'Do you want to delete this backup. This action cannot be undone.';
|
||||||
|
$_ADDONLANG['Confirm']['RestoreBackup']['Title'] = 'Restore Backup';
|
||||||
|
$_ADDONLANG['Confirm']['RestoreBackup']['Message'] = 'Do you want to restore this backup. This will overwrite all current data and cannot be undone.';
|
||||||
|
|
||||||
## Navbar
|
## Navbar
|
||||||
$_ADDONLANG['Navbar']['Overview'] = 'Overview';
|
$_ADDONLANG['Navbar']['Overview'] = 'Overview';
|
||||||
$_ADDONLANG['Navbar']['Graphs'] = 'Graphs';
|
$_ADDONLANG['Navbar']['Graphs'] = 'Graphs';
|
||||||
|
|||||||
@@ -12,6 +12,20 @@ $_ADDONLANG['Stop'] = 'Arrêter';
|
|||||||
$_ADDONLANG['Restart'] = 'Redémarrer';
|
$_ADDONLANG['Restart'] = 'Redémarrer';
|
||||||
$_ADDONLANG['VNC'] = 'Console VNC';
|
$_ADDONLANG['VNC'] = 'Console VNC';
|
||||||
|
|
||||||
|
## Confirmations
|
||||||
|
$_ADDONLANG['Confirm']['Stop']['Title'] = 'Arreter le VPS';
|
||||||
|
$_ADDONLANG['Confirm']['Stop']['Message'] = 'Voulez-vous arreter ce VPS. Cela va eteindre le serveur.';
|
||||||
|
$_ADDONLANG['Confirm']['Restart']['Title'] = 'Redemarrer le VPS';
|
||||||
|
$_ADDONLANG['Confirm']['Restart']['Message'] = 'Voulez-vous redemarrer ce VPS. Cela va redemarrer le serveur.';
|
||||||
|
$_ADDONLANG['Confirm']['Cancel'] = 'Annuler';
|
||||||
|
$_ADDONLANG['Confirm']['Confirm'] = 'Confirmer';
|
||||||
|
$_ADDONLANG['Confirm']['CreateBackup']['Title'] = 'Creer une sauvegarde';
|
||||||
|
$_ADDONLANG['Confirm']['CreateBackup']['Message'] = 'Voulez-vous creer une sauvegarde. Cela peut prendre plusieurs minutes.';
|
||||||
|
$_ADDONLANG['Confirm']['DeleteBackup']['Title'] = 'Supprimer la sauvegarde';
|
||||||
|
$_ADDONLANG['Confirm']['DeleteBackup']['Message'] = 'Voulez-vous supprimer cette sauvegarde. Cette action ne peut pas etre annulee.';
|
||||||
|
$_ADDONLANG['Confirm']['RestoreBackup']['Title'] = 'Restaurer la sauvegarde';
|
||||||
|
$_ADDONLANG['Confirm']['RestoreBackup']['Message'] = 'Voulez-vous restaurer cette sauvegarde. Cela ecrasera toutes les donnees actuelles et ne peut pas etre annule.';
|
||||||
|
|
||||||
## Navbar
|
## Navbar
|
||||||
$_ADDONLANG['Navbar']['Overview'] = 'Aperçu';
|
$_ADDONLANG['Navbar']['Overview'] = 'Aperçu';
|
||||||
$_ADDONLANG['Navbar']['Graphs'] = 'Graphiques';
|
$_ADDONLANG['Navbar']['Graphs'] = 'Graphiques';
|
||||||
|
|||||||
@@ -12,6 +12,20 @@ $_ADDONLANG['Stop'] = 'Stoppen';
|
|||||||
$_ADDONLANG['Restart'] = 'Neustart';
|
$_ADDONLANG['Restart'] = 'Neustart';
|
||||||
$_ADDONLANG['VNC'] = 'VNC-Konsole';
|
$_ADDONLANG['VNC'] = 'VNC-Konsole';
|
||||||
|
|
||||||
|
## Bestätigungen
|
||||||
|
$_ADDONLANG['Confirm']['Stop']['Title'] = 'VPS stoppen';
|
||||||
|
$_ADDONLANG['Confirm']['Stop']['Message'] = 'Sind Sie sicher, dass Sie diesen VPS stoppen möchten? Dies wird den Server herunterfahren.';
|
||||||
|
$_ADDONLANG['Confirm']['Restart']['Title'] = 'VPS neustarten';
|
||||||
|
$_ADDONLANG['Confirm']['Restart']['Message'] = 'Sind Sie sicher, dass Sie diesen VPS neustarten möchten? Dies wird den Server neu starten.';
|
||||||
|
$_ADDONLANG['Confirm']['Cancel'] = 'Abbrechen';
|
||||||
|
$_ADDONLANG['Confirm']['Confirm'] = 'Bestätigen';
|
||||||
|
$_ADDONLANG['Confirm']['CreateBackup']['Title'] = 'Backup erstellen';
|
||||||
|
$_ADDONLANG['Confirm']['CreateBackup']['Message'] = 'Möchten Sie ein Backup erstellen. Dies kann mehrere Minuten dauern.';
|
||||||
|
$_ADDONLANG['Confirm']['DeleteBackup']['Title'] = 'Backup löschen';
|
||||||
|
$_ADDONLANG['Confirm']['DeleteBackup']['Message'] = 'Möchten Sie dieses Backup löschen. Diese Aktion kann nicht rückgängig gemacht werden.';
|
||||||
|
$_ADDONLANG['Confirm']['RestoreBackup']['Title'] = 'Backup wiederherstellen';
|
||||||
|
$_ADDONLANG['Confirm']['RestoreBackup']['Message'] = 'Möchten Sie dieses Backup wiederherstellen. Dies überschreibt alle aktuellen Daten und kann nicht rückgängig gemacht werden.';
|
||||||
|
|
||||||
## Navbar
|
## Navbar
|
||||||
$_ADDONLANG['Navbar']['Overview'] = 'Übersicht';
|
$_ADDONLANG['Navbar']['Overview'] = 'Übersicht';
|
||||||
$_ADDONLANG['Navbar']['Graphs'] = 'Diagramme';
|
$_ADDONLANG['Navbar']['Graphs'] = 'Diagramme';
|
||||||
|
|||||||
@@ -12,6 +12,20 @@ $_ADDONLANG['Stop'] = 'Ferma';
|
|||||||
$_ADDONLANG['Restart'] = 'Riavvia';
|
$_ADDONLANG['Restart'] = 'Riavvia';
|
||||||
$_ADDONLANG['VNC'] = 'Console VNC';
|
$_ADDONLANG['VNC'] = 'Console VNC';
|
||||||
|
|
||||||
|
## Conferme
|
||||||
|
$_ADDONLANG['Confirm']['Stop']['Title'] = 'Ferma VPS';
|
||||||
|
$_ADDONLANG['Confirm']['Stop']['Message'] = 'Sei sicuro di voler fermare questo VPS? Questo spegnerà il server.';
|
||||||
|
$_ADDONLANG['Confirm']['Restart']['Title'] = 'Riavvia VPS';
|
||||||
|
$_ADDONLANG['Confirm']['Restart']['Message'] = 'Sei sicuro di voler riavviare questo VPS? Questo riavvierà il server.';
|
||||||
|
$_ADDONLANG['Confirm']['Cancel'] = 'Annulla';
|
||||||
|
$_ADDONLANG['Confirm']['Confirm'] = 'Conferma';
|
||||||
|
$_ADDONLANG['Confirm']['CreateBackup']['Title'] = 'Crea backup';
|
||||||
|
$_ADDONLANG['Confirm']['CreateBackup']['Message'] = 'Vuoi creare un backup. Questo potrebbe richiedere diversi minuti.';
|
||||||
|
$_ADDONLANG['Confirm']['DeleteBackup']['Title'] = 'Elimina backup';
|
||||||
|
$_ADDONLANG['Confirm']['DeleteBackup']['Message'] = 'Vuoi eliminare questo backup. Questa azione non può essere annullata.';
|
||||||
|
$_ADDONLANG['Confirm']['RestoreBackup']['Title'] = 'Ripristina backup';
|
||||||
|
$_ADDONLANG['Confirm']['RestoreBackup']['Message'] = 'Vuoi ripristinare questo backup. Questo sovrascriverà tutti i dati attuali e non può essere annullato.';
|
||||||
|
|
||||||
## Navbar
|
## Navbar
|
||||||
$_ADDONLANG['Navbar']['Overview'] = 'Panoramica';
|
$_ADDONLANG['Navbar']['Overview'] = 'Panoramica';
|
||||||
$_ADDONLANG['Navbar']['Graphs'] = 'Grafici';
|
$_ADDONLANG['Navbar']['Graphs'] = 'Grafici';
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
* WHMCS Server Module - VPSAG
|
* WHMCS Server Module - VPSAG
|
||||||
*
|
*
|
||||||
* @package WHMCS
|
* @package WHMCS
|
||||||
* @copyright Copyright (c) ArkHost 2024
|
* @copyright Copyright (c) ArkHost 2025
|
||||||
* @author ArkHost <support@arkhost.com>
|
* @author ArkHost <support@arkhost.com>
|
||||||
* @link https://arkhost.com
|
* @link https://arkhost.com
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -12,6 +12,20 @@ $_ADDONLANG['Stop'] = 'Parar';
|
|||||||
$_ADDONLANG['Restart'] = 'Reiniciar';
|
$_ADDONLANG['Restart'] = 'Reiniciar';
|
||||||
$_ADDONLANG['VNC'] = 'Consola VNC';
|
$_ADDONLANG['VNC'] = 'Consola VNC';
|
||||||
|
|
||||||
|
## Confirmações
|
||||||
|
$_ADDONLANG['Confirm']['Stop']['Title'] = 'Parar VPS';
|
||||||
|
$_ADDONLANG['Confirm']['Stop']['Message'] = 'Tem certeza de que deseja parar este VPS? Isso desligará o servidor.';
|
||||||
|
$_ADDONLANG['Confirm']['Restart']['Title'] = 'Reiniciar VPS';
|
||||||
|
$_ADDONLANG['Confirm']['Restart']['Message'] = 'Tem certeza de que deseja reiniciar este VPS? Isso reiniciará o servidor.';
|
||||||
|
$_ADDONLANG['Confirm']['Cancel'] = 'Cancelar';
|
||||||
|
$_ADDONLANG['Confirm']['Confirm'] = 'Confirmar';
|
||||||
|
$_ADDONLANG['Confirm']['CreateBackup']['Title'] = 'Criar cópia de segurança';
|
||||||
|
$_ADDONLANG['Confirm']['CreateBackup']['Message'] = 'Deseja criar uma cópia de segurança. Isto pode demorar vários minutos.';
|
||||||
|
$_ADDONLANG['Confirm']['DeleteBackup']['Title'] = 'Eliminar cópia de segurança';
|
||||||
|
$_ADDONLANG['Confirm']['DeleteBackup']['Message'] = 'Deseja eliminar esta cópia de segurança. Esta ação não pode ser desfeita.';
|
||||||
|
$_ADDONLANG['Confirm']['RestoreBackup']['Title'] = 'Restaurar cópia de segurança';
|
||||||
|
$_ADDONLANG['Confirm']['RestoreBackup']['Message'] = 'Deseja restaurar esta cópia de segurança. Isto substituirá todos os dados atuais e não pode ser desfeito.';
|
||||||
|
|
||||||
## Navbar
|
## Navbar
|
||||||
$_ADDONLANG['Navbar']['Overview'] = 'Visão geral';
|
$_ADDONLANG['Navbar']['Overview'] = 'Visão geral';
|
||||||
$_ADDONLANG['Navbar']['Graphs'] = 'Gráficos';
|
$_ADDONLANG['Navbar']['Graphs'] = 'Gráficos';
|
||||||
|
|||||||
@@ -12,6 +12,20 @@ $_ADDONLANG['Stop'] = 'Остановка';
|
|||||||
$_ADDONLANG['Restart'] = 'Перезапуск';
|
$_ADDONLANG['Restart'] = 'Перезапуск';
|
||||||
$_ADDONLANG['VNC'] = 'Консоль VNC';
|
$_ADDONLANG['VNC'] = 'Консоль VNC';
|
||||||
|
|
||||||
|
## Подтверждения
|
||||||
|
$_ADDONLANG['Confirm']['Stop']['Title'] = 'Остановить VPS';
|
||||||
|
$_ADDONLANG['Confirm']['Stop']['Message'] = 'Вы уверены, что хотите остановить этот VPS? Это выключит сервер.';
|
||||||
|
$_ADDONLANG['Confirm']['Restart']['Title'] = 'Перезапустить VPS';
|
||||||
|
$_ADDONLANG['Confirm']['Restart']['Message'] = 'Вы уверены, что хотите перезапустить этот VPS? Это перезагрузит сервер.';
|
||||||
|
$_ADDONLANG['Confirm']['Cancel'] = 'Отмена';
|
||||||
|
$_ADDONLANG['Confirm']['Confirm'] = 'Подтвердить';
|
||||||
|
$_ADDONLANG['Confirm']['CreateBackup']['Title'] = 'Создать резервную копию';
|
||||||
|
$_ADDONLANG['Confirm']['CreateBackup']['Message'] = 'Хотите создать резервную копию. Это может занять несколько минут.';
|
||||||
|
$_ADDONLANG['Confirm']['DeleteBackup']['Title'] = 'Удалить резервную копию';
|
||||||
|
$_ADDONLANG['Confirm']['DeleteBackup']['Message'] = 'Хотите удалить эту резервную копию. Это действие нельзя отменить.';
|
||||||
|
$_ADDONLANG['Confirm']['RestoreBackup']['Title'] = 'Восстановить резервную копию';
|
||||||
|
$_ADDONLANG['Confirm']['RestoreBackup']['Message'] = 'Хотите восстановить эту резервную копию. Это перезапишет все текущие данные и не может быть отменено.';
|
||||||
|
|
||||||
## Навигационная панель
|
## Навигационная панель
|
||||||
$_ADDONLANG['Navbar']['Overview'] = 'Обзор';
|
$_ADDONLANG['Navbar']['Overview'] = 'Обзор';
|
||||||
$_ADDONLANG['Navbar']['Graphs'] = 'Графики';
|
$_ADDONLANG['Navbar']['Graphs'] = 'Графики';
|
||||||
|
|||||||
@@ -12,6 +12,20 @@ $_ADDONLANG['Stop'] = 'Detener';
|
|||||||
$_ADDONLANG['Restart'] = 'Reiniciar';
|
$_ADDONLANG['Restart'] = 'Reiniciar';
|
||||||
$_ADDONLANG['VNC'] = 'Consola VNC';
|
$_ADDONLANG['VNC'] = 'Consola VNC';
|
||||||
|
|
||||||
|
## Confirmaciones
|
||||||
|
$_ADDONLANG['Confirm']['Stop']['Title'] = 'Detener VPS';
|
||||||
|
$_ADDONLANG['Confirm']['Stop']['Message'] = '¿Está seguro de que desea detener este VPS? Esto apagará el servidor.';
|
||||||
|
$_ADDONLANG['Confirm']['Restart']['Title'] = 'Reiniciar VPS';
|
||||||
|
$_ADDONLANG['Confirm']['Restart']['Message'] = '¿Está seguro de que desea reiniciar este VPS? Esto reiniciará el servidor.';
|
||||||
|
$_ADDONLANG['Confirm']['Cancel'] = 'Cancelar';
|
||||||
|
$_ADDONLANG['Confirm']['Confirm'] = 'Confirmar';
|
||||||
|
$_ADDONLANG['Confirm']['CreateBackup']['Title'] = 'Crear copia de seguridad';
|
||||||
|
$_ADDONLANG['Confirm']['CreateBackup']['Message'] = 'Desea crear una copia de seguridad. Esto puede tomar varios minutos.';
|
||||||
|
$_ADDONLANG['Confirm']['DeleteBackup']['Title'] = 'Eliminar copia de seguridad';
|
||||||
|
$_ADDONLANG['Confirm']['DeleteBackup']['Message'] = 'Desea eliminar esta copia de seguridad. Esta acción no se puede deshacer.';
|
||||||
|
$_ADDONLANG['Confirm']['RestoreBackup']['Title'] = 'Restaurar copia de seguridad';
|
||||||
|
$_ADDONLANG['Confirm']['RestoreBackup']['Message'] = 'Desea restaurar esta copia de seguridad. Esto sobrescribirá todos los datos actuales y no se puede deshacer.';
|
||||||
|
|
||||||
## Navbar
|
## Navbar
|
||||||
$_ADDONLANG['Navbar']['Overview'] = 'Resumen';
|
$_ADDONLANG['Navbar']['Overview'] = 'Resumen';
|
||||||
$_ADDONLANG['Navbar']['Graphs'] = 'Gráficos';
|
$_ADDONLANG['Navbar']['Graphs'] = 'Gráficos';
|
||||||
|
|||||||
@@ -1,3 +1,13 @@
|
|||||||
|
{*
|
||||||
|
* WHMCS Server Module - VPSAG
|
||||||
|
* @package WHMCS
|
||||||
|
* @copyright ArkHost 2025
|
||||||
|
* @link https://arkhost.com
|
||||||
|
* @author ArkHost <support@arkhost.com>
|
||||||
|
*}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<style>
|
<style>
|
||||||
.arkhost-vps-container {
|
.arkhost-vps-container {
|
||||||
font-family: 'Arial', sans-serif;
|
font-family: 'Arial', sans-serif;
|
||||||
@@ -147,7 +157,7 @@
|
|||||||
flex: 1;
|
flex: 1;
|
||||||
z-index: 2;
|
z-index: 2;
|
||||||
position: relative;
|
position: relative;
|
||||||
margin-top: 12px;
|
margin-top: 6px;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -175,7 +185,7 @@
|
|||||||
height: 48px;
|
height: 48px;
|
||||||
margin-right: 0;
|
margin-right: 0;
|
||||||
margin-top: 8px;
|
margin-top: 8px;
|
||||||
margin-bottom: 12px;
|
margin-bottom: 6px;
|
||||||
border-radius: 50%;
|
border-radius: 50%;
|
||||||
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
|
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
|
||||||
transition: all 0.3s ease;
|
transition: all 0.3s ease;
|
||||||
@@ -347,6 +357,26 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* OS Selection Enhancements */
|
/* OS Selection Enhancements */
|
||||||
|
.arkhost-vps-container .os_badge {
|
||||||
|
margin-bottom: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.arkhost-vps-container .os_badge .dropdown-toggle::after {
|
||||||
|
display: inline-block;
|
||||||
|
margin-left: .255em;
|
||||||
|
vertical-align: .255em;
|
||||||
|
content: "";
|
||||||
|
border-top: .3em solid;
|
||||||
|
border-right: .3em solid transparent;
|
||||||
|
border-bottom: 0;
|
||||||
|
border-left: .3em solid transparent;
|
||||||
|
margin-bottom: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.arkhost-vps-container .os_badge .dropdown-toggle:hover::after {
|
||||||
|
border-top-color: #495057;
|
||||||
|
}
|
||||||
|
|
||||||
.arkhost-vps-container .os_badge .dropdown-toggle.btn-success {
|
.arkhost-vps-container .os_badge .dropdown-toggle.btn-success {
|
||||||
border: 2px solid #28a745 !important;
|
border: 2px solid #28a745 !important;
|
||||||
background: linear-gradient(135deg, #f8fff9 0%, #e8f5e8 100%);
|
background: linear-gradient(135deg, #f8fff9 0%, #e8f5e8 100%);
|
||||||
@@ -390,8 +420,8 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
.arkhost-vps-container .os_badge .dropdown-item:hover {
|
.arkhost-vps-container .os_badge .dropdown-item:hover {
|
||||||
background-color: #f8f9fa;
|
background-color: #007bff;
|
||||||
color: #495057;
|
color: white !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
.arkhost-vps-container .os_badge .dropdown-item.active:hover {
|
.arkhost-vps-container .os_badge .dropdown-item.active:hover {
|
||||||
@@ -409,6 +439,7 @@
|
|||||||
margin-top: 4px;
|
margin-top: 4px;
|
||||||
max-height: 300px;
|
max-height: 300px;
|
||||||
overflow-y: auto;
|
overflow-y: auto;
|
||||||
|
overflow-x: hidden;
|
||||||
}
|
}
|
||||||
|
|
||||||
.arkhost-vps-container .os_badge .dropdown-item {
|
.arkhost-vps-container .os_badge .dropdown-item {
|
||||||
@@ -429,23 +460,318 @@
|
|||||||
0% { opacity: 0; transform: scale(0.5); }
|
0% { opacity: 0; transform: scale(0.5); }
|
||||||
100% { opacity: 1; transform: scale(1); }
|
100% { opacity: 1; transform: scale(1); }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Custom Notification System */
|
||||||
|
.arkhost-notification {
|
||||||
|
position: fixed;
|
||||||
|
top: 20px;
|
||||||
|
right: 20px;
|
||||||
|
min-width: 300px;
|
||||||
|
max-width: 400px;
|
||||||
|
z-index: 9999;
|
||||||
|
padding: 16px 20px;
|
||||||
|
border-radius: 8px;
|
||||||
|
box-shadow: 0 4px 20px rgba(0, 0, 0, 0.15);
|
||||||
|
color: white;
|
||||||
|
font-weight: 500;
|
||||||
|
transform: translateX(450px);
|
||||||
|
transition: all 0.3s ease;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
gap: 12px;
|
||||||
|
font-family: 'Arial', sans-serif;
|
||||||
|
}
|
||||||
|
|
||||||
|
.arkhost-notification.show {
|
||||||
|
transform: translateX(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
.arkhost-notification.success {
|
||||||
|
background: linear-gradient(135deg, #28a745 0%, #20c997 100%);
|
||||||
|
}
|
||||||
|
|
||||||
|
.arkhost-notification.error {
|
||||||
|
background: linear-gradient(135deg, #dc3545 0%, #fd7e14 100%);
|
||||||
|
}
|
||||||
|
|
||||||
|
.arkhost-notification.warning {
|
||||||
|
background: linear-gradient(135deg, #ffc107 0%, #fd7e14 100%);
|
||||||
|
color: #212529;
|
||||||
|
}
|
||||||
|
|
||||||
|
.arkhost-notification.info {
|
||||||
|
background: linear-gradient(135deg, #17a2b8 0%, #6f42c1 100%);
|
||||||
|
}
|
||||||
|
|
||||||
|
.arkhost-notification i {
|
||||||
|
font-size: 20px;
|
||||||
|
flex-shrink: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.arkhost-notification .close-btn {
|
||||||
|
margin-left: auto;
|
||||||
|
background: none;
|
||||||
|
border: none;
|
||||||
|
color: inherit;
|
||||||
|
font-size: 18px;
|
||||||
|
cursor: pointer;
|
||||||
|
padding: 0;
|
||||||
|
opacity: 0.8;
|
||||||
|
transition: opacity 0.2s ease;
|
||||||
|
}
|
||||||
|
|
||||||
|
.arkhost-notification .close-btn:hover {
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Custom Confirm Dialog */
|
||||||
|
.arkhost-confirm-overlay {
|
||||||
|
position: fixed;
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
background: rgba(0, 0, 0, 0.5);
|
||||||
|
z-index: 10000;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
opacity: 0;
|
||||||
|
visibility: hidden;
|
||||||
|
transition: all 0.3s ease;
|
||||||
|
}
|
||||||
|
|
||||||
|
.arkhost-confirm-overlay.show {
|
||||||
|
opacity: 1;
|
||||||
|
visibility: visible;
|
||||||
|
}
|
||||||
|
|
||||||
|
.arkhost-confirm-dialog {
|
||||||
|
background: white;
|
||||||
|
border-radius: 12px;
|
||||||
|
padding: 24px;
|
||||||
|
max-width: 400px;
|
||||||
|
width: 90%;
|
||||||
|
box-shadow: 0 8px 32px rgba(0, 0, 0, 0.2);
|
||||||
|
transform: scale(0.8);
|
||||||
|
transition: transform 0.3s ease;
|
||||||
|
font-family: 'Arial', sans-serif;
|
||||||
|
}
|
||||||
|
|
||||||
|
.arkhost-confirm-overlay.show .arkhost-confirm-dialog {
|
||||||
|
transform: scale(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
.arkhost-confirm-title {
|
||||||
|
font-size: 18px;
|
||||||
|
font-weight: 600;
|
||||||
|
color: #2c3e50;
|
||||||
|
margin-bottom: 12px;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
gap: 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.arkhost-confirm-message {
|
||||||
|
color: #6c757d;
|
||||||
|
margin-bottom: 20px;
|
||||||
|
line-height: 1.5;
|
||||||
|
}
|
||||||
|
|
||||||
|
.arkhost-confirm-buttons {
|
||||||
|
display: flex;
|
||||||
|
gap: 12px;
|
||||||
|
justify-content: flex-end;
|
||||||
|
}
|
||||||
|
|
||||||
|
.arkhost-confirm-btn {
|
||||||
|
padding: 8px 16px;
|
||||||
|
border: none;
|
||||||
|
border-radius: 6px;
|
||||||
|
font-weight: 500;
|
||||||
|
cursor: pointer;
|
||||||
|
transition: all 0.2s ease;
|
||||||
|
font-family: inherit;
|
||||||
|
}
|
||||||
|
|
||||||
|
.arkhost-confirm-btn.cancel {
|
||||||
|
background: #6c757d;
|
||||||
|
color: white;
|
||||||
|
}
|
||||||
|
|
||||||
|
.arkhost-confirm-btn.cancel:hover {
|
||||||
|
background: #5a6268;
|
||||||
|
}
|
||||||
|
|
||||||
|
.arkhost-confirm-btn.confirm {
|
||||||
|
background: #dc3545;
|
||||||
|
color: white;
|
||||||
|
}
|
||||||
|
|
||||||
|
.arkhost-confirm-btn.confirm:hover {
|
||||||
|
background: #c82333;
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
var productURL = '{$WEB_ROOT}/clientarea.php?action=productdetails&id={$serviceid}';
|
var productURL = '{$WEB_ROOT}/clientarea.php?action=productdetails&id={$serviceid}';
|
||||||
var serverInfoInitial = JSON.parse('{$serverInfo|@json_encode}');
|
var serverInfoInitial = JSON.parse('{$serverInfo|@json_encode}');
|
||||||
var lang = {
|
var lang = {
|
||||||
moduleactionfailed: '{$LANG.moduleactionfailed}!',
|
moduleactionfailed: 'Action failed!',
|
||||||
moduleactionsuccess: '{$LANG.moduleactionsuccess}',
|
moduleactionsuccess: 'Action completed successfully',
|
||||||
backups: {
|
backups: {
|
||||||
available: '{$_LANG['Backups']['Available']}',
|
available: 'Available',
|
||||||
creating: '{$_LANG['Backups']['Creating']}',
|
creating: 'Creating...',
|
||||||
error: '{$_LANG['Backups']['Error']}',
|
error: 'Error',
|
||||||
automatic: '{$_LANG['Backups']['Automatic']}',
|
automatic: 'Automatic',
|
||||||
manual: '{$_LANG['Backups']['Manual']}'
|
manual: 'Manual'
|
||||||
|
},
|
||||||
|
confirm: {
|
||||||
|
stop: {
|
||||||
|
title: "{$_LANG['Confirm']['Stop']['Title']|escape:'javascript'|default:'Stop VPS'}",
|
||||||
|
message: "{$_LANG['Confirm']['Stop']['Message']|escape:'javascript'|default:'Do you want to stop this VPS. This will shutdown the server.'}"
|
||||||
|
},
|
||||||
|
restart: {
|
||||||
|
title: "{$_LANG['Confirm']['Restart']['Title']|escape:'javascript'|default:'Restart VPS'}",
|
||||||
|
message: "{$_LANG['Confirm']['Restart']['Message']|escape:'javascript'|default:'Do you want to restart this VPS. This will reboot the server.'}"
|
||||||
|
},
|
||||||
|
createBackup: {
|
||||||
|
title: "{$_LANG['Confirm']['CreateBackup']['Title']|escape:'javascript'|default:'Create Backup'}",
|
||||||
|
message: "{$_LANG['Confirm']['CreateBackup']['Message']|escape:'javascript'|default:'Do you want to create a backup. This may take several minutes.'}"
|
||||||
|
},
|
||||||
|
deleteBackup: {
|
||||||
|
title: "{$_LANG['Confirm']['DeleteBackup']['Title']|escape:'javascript'|default:'Delete Backup'}",
|
||||||
|
message: "{$_LANG['Confirm']['DeleteBackup']['Message']|escape:'javascript'|default:'Do you want to delete this backup. This action cannot be undone.'}"
|
||||||
|
},
|
||||||
|
restoreBackup: {
|
||||||
|
title: "{$_LANG['Confirm']['RestoreBackup']['Title']|escape:'javascript'|default:'Restore Backup'}",
|
||||||
|
message: "{$_LANG['Confirm']['RestoreBackup']['Message']|escape:'javascript'|default:'Do you want to restore this backup. This will overwrite all current data and cannot be undone.'}"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// VPS control functions
|
||||||
|
console.log('Defining VPS control functions...');
|
||||||
|
|
||||||
|
function confirmStop() {
|
||||||
|
console.log('confirmStop called');
|
||||||
|
showConfirm(lang.confirm.stop.message, lang.confirm.stop.title, function() {
|
||||||
|
ArkHostVPS_API('Stop', true);
|
||||||
|
});
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
function confirmRestart() {
|
||||||
|
console.log('confirmRestart called');
|
||||||
|
showConfirm(lang.confirm.restart.message, lang.confirm.restart.title, function() {
|
||||||
|
ArkHostVPS_API('Reboot', true);
|
||||||
|
});
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
console.log('VPS control functions defined!', typeof confirmRestart);
|
||||||
|
|
||||||
|
// Custom notification functions
|
||||||
|
function showNotification(message, type, duration) {
|
||||||
|
type = type || 'success';
|
||||||
|
duration = duration || 4000;
|
||||||
|
|
||||||
|
// Remove existing notifications
|
||||||
|
var existing = document.querySelectorAll('.arkhost-notification');
|
||||||
|
for (var i = 0; i < existing.length; i++) {
|
||||||
|
existing[i].remove();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Create notification element
|
||||||
|
var notification = document.createElement('div');
|
||||||
|
notification.className = 'arkhost-notification ' + type;
|
||||||
|
|
||||||
|
// Set icon based on type
|
||||||
|
var icon = 'fa-check-circle';
|
||||||
|
if (type === 'error') icon = 'fa-exclamation-circle';
|
||||||
|
else if (type === 'warning') icon = 'fa-exclamation-triangle';
|
||||||
|
else if (type === 'info') icon = 'fa-info-circle';
|
||||||
|
|
||||||
|
notification.innerHTML = '<i class="fa ' + icon + '"></i><span>' + message + '</span><button class="close-btn" onclick="this.parentElement.remove()"><i class="fa fa-times"></i></button>';
|
||||||
|
|
||||||
|
// Add to document
|
||||||
|
document.body.appendChild(notification);
|
||||||
|
|
||||||
|
// Trigger animation
|
||||||
|
setTimeout(function() {
|
||||||
|
notification.classList.add('show');
|
||||||
|
}, 100);
|
||||||
|
|
||||||
|
// Auto remove
|
||||||
|
setTimeout(function() {
|
||||||
|
notification.classList.remove('show');
|
||||||
|
setTimeout(function() {
|
||||||
|
if (notification.parentElement) {
|
||||||
|
notification.remove();
|
||||||
|
}
|
||||||
|
}, 300);
|
||||||
|
}, duration);
|
||||||
|
}
|
||||||
|
|
||||||
|
function showConfirm(message, title, onConfirm) {
|
||||||
|
title = title || 'Confirm Action';
|
||||||
|
|
||||||
|
// Remove existing confirms
|
||||||
|
var existing = document.querySelectorAll('.arkhost-confirm-overlay');
|
||||||
|
for (var i = 0; i < existing.length; i++) {
|
||||||
|
existing[i].remove();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Create confirm dialog
|
||||||
|
var overlay = document.createElement('div');
|
||||||
|
overlay.className = 'arkhost-confirm-overlay';
|
||||||
|
|
||||||
|
overlay.innerHTML = '<div class="arkhost-confirm-dialog"><div class="arkhost-confirm-title"><i class="fa fa-exclamation-triangle" style="color: #ffc107;"></i>' + title + '</div><div class="arkhost-confirm-message">' + message + '</div><div class="arkhost-confirm-buttons"><button class="arkhost-confirm-btn cancel">{$_LANG['Confirm']['Cancel']|escape:'javascript'|default:'Cancel'}</button><button class="arkhost-confirm-btn confirm">{$_LANG['Confirm']['Confirm']|escape:'javascript'|default:'Confirm'}</button></div></div>';
|
||||||
|
|
||||||
|
// Add event listeners
|
||||||
|
var cancelBtn = overlay.querySelector('.cancel');
|
||||||
|
var confirmBtn = overlay.querySelector('.confirm');
|
||||||
|
|
||||||
|
cancelBtn.onclick = function() {
|
||||||
|
overlay.classList.remove('show');
|
||||||
|
setTimeout(function() {
|
||||||
|
if (overlay.parentElement) {
|
||||||
|
overlay.remove();
|
||||||
|
}
|
||||||
|
}, 300);
|
||||||
|
};
|
||||||
|
|
||||||
|
confirmBtn.onclick = function() {
|
||||||
|
overlay.classList.remove('show');
|
||||||
|
setTimeout(function() {
|
||||||
|
if (overlay.parentElement) {
|
||||||
|
overlay.remove();
|
||||||
|
}
|
||||||
|
}, 300);
|
||||||
|
if (onConfirm) {
|
||||||
|
onConfirm();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
// Close on backdrop click
|
||||||
|
overlay.onclick = function(e) {
|
||||||
|
if (e.target === overlay) {
|
||||||
|
overlay.classList.remove('show');
|
||||||
|
setTimeout(function() {
|
||||||
|
if (overlay.parentElement) {
|
||||||
|
overlay.remove();
|
||||||
|
}
|
||||||
|
}, 300);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
// Add to document and show
|
||||||
|
document.body.appendChild(overlay);
|
||||||
|
setTimeout(function() {
|
||||||
|
overlay.classList.add('show');
|
||||||
|
}, 100);
|
||||||
|
}
|
||||||
|
|
||||||
// Helper functions for API calls via WHMCS (use existing jQuery)
|
// Helper functions for API calls via WHMCS (use existing jQuery)
|
||||||
function ArkHostVPS_API(action, showAlert, params) {
|
function ArkHostVPS_API(action, showAlert, params) {
|
||||||
if (showAlert === undefined) showAlert = true;
|
if (showAlert === undefined) showAlert = true;
|
||||||
@@ -478,7 +804,7 @@
|
|||||||
(data && Object.keys(data).some(key => !isNaN(key))); // Has numeric keys
|
(data && Object.keys(data).some(key => !isNaN(key))); // Has numeric keys
|
||||||
|
|
||||||
if (isSuccess) {
|
if (isSuccess) {
|
||||||
if (showAlert) alert(lang.moduleactionsuccess);
|
if (showAlert) showNotification(lang.moduleactionsuccess, 'success');
|
||||||
// Handle specific responses
|
// Handle specific responses
|
||||||
if (action === 'List backups') {
|
if (action === 'List backups') {
|
||||||
updateBackupTable(data);
|
updateBackupTable(data);
|
||||||
@@ -523,7 +849,7 @@
|
|||||||
setTimeout(function() { location.reload(); }, 2000);
|
setTimeout(function() { location.reload(); }, 2000);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (showAlert) alert(lang.moduleactionfailed + ': ' + (data.message || 'Unknown error'));
|
if (showAlert) showNotification(lang.moduleactionfailed + ': ' + (data.message || 'Unknown error'), 'error');
|
||||||
// Hide loading for graphs
|
// Hide loading for graphs
|
||||||
if (action === 'Graphs') {
|
if (action === 'Graphs') {
|
||||||
document.getElementById('graphs-loading').style.display = 'none';
|
document.getElementById('graphs-loading').style.display = 'none';
|
||||||
@@ -532,7 +858,7 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
error: function(xhr, status, error) {
|
error: function(xhr, status, error) {
|
||||||
if (showAlert) alert(lang.moduleactionfailed + ': Network error');
|
if (showAlert) showNotification(lang.moduleactionfailed + ': Network error', 'error');
|
||||||
// Hide loading for graphs
|
// Hide loading for graphs
|
||||||
if (action === 'Graphs') {
|
if (action === 'Graphs') {
|
||||||
document.getElementById('graphs-loading').style.display = 'none';
|
document.getElementById('graphs-loading').style.display = 'none';
|
||||||
@@ -616,23 +942,35 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
function createBackup() {
|
function createBackup() {
|
||||||
if (confirm('Are you sure you want to create a backup? This may take several minutes.')) {
|
showConfirm(
|
||||||
ArkHostVPS_API('Create backup', true);
|
lang.confirm.createBackup.message,
|
||||||
}
|
lang.confirm.createBackup.title,
|
||||||
|
function() {
|
||||||
|
ArkHostVPS_API('Create backup', true);
|
||||||
|
}
|
||||||
|
);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
function deleteBackup(filename) {
|
function deleteBackup(filename) {
|
||||||
if (confirm('Are you sure you want to delete this backup? This action cannot be undone.')) {
|
showConfirm(
|
||||||
ArkHostVPS_API('Delete backup', true, { file: filename });
|
lang.confirm.deleteBackup.message,
|
||||||
}
|
lang.confirm.deleteBackup.title,
|
||||||
|
function() {
|
||||||
|
ArkHostVPS_API('Delete backup', true, { file: filename });
|
||||||
|
}
|
||||||
|
);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
function restoreBackup(filename) {
|
function restoreBackup(filename) {
|
||||||
if (confirm('Are you sure you want to restore this backup? This will overwrite all current data and cannot be undone.')) {
|
showConfirm(
|
||||||
ArkHostVPS_API('Restore backup', true, { file: filename });
|
lang.confirm.restoreBackup.message,
|
||||||
}
|
lang.confirm.restoreBackup.title,
|
||||||
|
function() {
|
||||||
|
ArkHostVPS_API('Restore backup', true, { file: filename });
|
||||||
|
}
|
||||||
|
);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -649,9 +987,34 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Handle the API response format
|
||||||
|
var rulesList = [];
|
||||||
|
|
||||||
|
// Handle different response formats
|
||||||
|
if (Array.isArray(data)) {
|
||||||
|
// Direct array response
|
||||||
|
rulesList = data;
|
||||||
|
} else if (data && typeof data === 'object') {
|
||||||
|
// Check if there are numeric keys (0, 1, 2, etc.) indicating rule array
|
||||||
|
var keys = Object.keys(data);
|
||||||
|
var numericKeys = keys.filter(function(key) { return !isNaN(key); });
|
||||||
|
if (numericKeys.length > 0) {
|
||||||
|
rulesList = numericKeys.map(function(key) { return data[key]; });
|
||||||
|
} else if (data.rules && Array.isArray(data.rules)) {
|
||||||
|
// Rules might be in a 'rules' property
|
||||||
|
rulesList = data.rules;
|
||||||
|
} else if (data.result === 'success') {
|
||||||
|
// WHMCS wrapper with result='success' - look for numeric keys excluding 'result'
|
||||||
|
var filteredKeys = keys.filter(function(key) { return !isNaN(key) && key !== 'result'; });
|
||||||
|
if (filteredKeys.length > 0) {
|
||||||
|
rulesList = filteredKeys.map(function(key) { return data[key]; });
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Add firewall rules if any exist
|
// Add firewall rules if any exist
|
||||||
if (data && Array.isArray(data)) {
|
if (rulesList.length > 0) {
|
||||||
data.forEach(function(rule) {
|
rulesList.forEach(function(rule) {
|
||||||
if (rule && rule.id) {
|
if (rule && rule.id) {
|
||||||
var row = document.createElement('tr');
|
var row = document.createElement('tr');
|
||||||
row.innerHTML =
|
row.innerHTML =
|
||||||
@@ -661,9 +1024,9 @@
|
|||||||
'<td>' + (rule.source || 'N/A') + '</td>' +
|
'<td>' + (rule.source || 'N/A') + '</td>' +
|
||||||
'<td>' + (rule.note || 'N/A') + '</td>' +
|
'<td>' + (rule.note || 'N/A') + '</td>' +
|
||||||
'<td>' +
|
'<td>' +
|
||||||
'<a href="#" onclick="ArkHostVPS_API(\'Delete Firewall rule\', true, { rule_id: \'' + rule.id + '\' }); return false;" title="Delete">' +
|
'<a href="#" onclick="ArkHostVPS_API(\'Delete Firewall rule\', true, { rule_id: \'' + rule.id + '\' }); return false;" title="Delete">' +
|
||||||
'<i class="fa fa-trash text-danger"></i>' +
|
'<i class="fa fa-trash text-danger"></i>' +
|
||||||
'</a>' +
|
'</a>' +
|
||||||
'</td>';
|
'</td>';
|
||||||
tableBody.insertBefore(row, tableBody.lastElementChild);
|
tableBody.insertBefore(row, tableBody.lastElementChild);
|
||||||
}
|
}
|
||||||
@@ -910,6 +1273,32 @@
|
|||||||
document.getElementById('disableSSHPassword').checked = false;
|
document.getElementById('disableSSHPassword').checked = false;
|
||||||
} else {
|
} else {
|
||||||
advancedOptions.style.display = 'block';
|
advancedOptions.style.display = 'block';
|
||||||
|
|
||||||
|
// Update post-installation script placeholder based on OS type
|
||||||
|
var scriptTextarea = document.getElementById('reinstallScript');
|
||||||
|
if (scriptTextarea) {
|
||||||
|
var osName = jQuery(element).text().toLowerCase();
|
||||||
|
var groupName = group.toLowerCase();
|
||||||
|
|
||||||
|
// Determine if it's Debian/Ubuntu based or RHEL/CentOS based
|
||||||
|
if (groupName.includes('debian') || groupName.includes('ubuntu') ||
|
||||||
|
osName.includes('debian') || osName.includes('ubuntu')) {
|
||||||
|
// Debian/Ubuntu based - use apt
|
||||||
|
scriptTextarea.placeholder = '#!/bin/bash\n# Example: Install and configure nginx\napt update && apt install -y nginx\nsystemctl enable nginx';
|
||||||
|
} else if (groupName.includes('centos') || groupName.includes('rhel') ||
|
||||||
|
groupName.includes('rocky') || groupName.includes('alma') ||
|
||||||
|
osName.includes('centos') || osName.includes('rhel') ||
|
||||||
|
osName.includes('rocky') || osName.includes('alma')) {
|
||||||
|
// RHEL based - use yum/dnf
|
||||||
|
scriptTextarea.placeholder = '#!/bin/bash\n# Example: Install and configure nginx\nyum update -y && yum install -y nginx\nsystemctl enable nginx';
|
||||||
|
} else if (groupName.includes('fedora') || osName.includes('fedora')) {
|
||||||
|
// Fedora - use dnf
|
||||||
|
scriptTextarea.placeholder = '#!/bin/bash\n# Example: Install and configure nginx\ndnf update -y && dnf install -y nginx\nsystemctl enable nginx';
|
||||||
|
} else {
|
||||||
|
// Generic example
|
||||||
|
scriptTextarea.placeholder = '#!/bin/bash\n# Example: Install packages based on your distribution\n# For Debian/Ubuntu: apt update && apt install -y package\n# For RHEL/CentOS: yum update -y && yum install -y package';
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -934,7 +1323,7 @@
|
|||||||
function reinstallWithAdvancedOptions() {
|
function reinstallWithAdvancedOptions() {
|
||||||
var osId = document.getElementById('newOS').value;
|
var osId = document.getElementById('newOS').value;
|
||||||
if (!osId || osId === '0') {
|
if (!osId || osId === '0') {
|
||||||
alert('Please select an operating system first.');
|
showNotification('Please select an operating system first.', 'warning');
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1108,7 +1497,7 @@
|
|||||||
<div class="row w-100">
|
<div class="row w-100">
|
||||||
<div class="col-4 text-center">
|
<div class="col-4 text-center">
|
||||||
<a href="#"
|
<a href="#"
|
||||||
onclick="return ArkHostVPS_API('{if $serverInfo['status'] !== 'running'}Start{else}Stop{/if}');"
|
onclick="{if $serverInfo['status'] !== 'running'}return ArkHostVPS_API('Start');{else}return confirmStop();{/if}"
|
||||||
class="vps-control-btn {if $serverInfo['status'] !== 'running'}start-btn{else}stop-btn{/if}"
|
class="vps-control-btn {if $serverInfo['status'] !== 'running'}start-btn{else}stop-btn{/if}"
|
||||||
title="{if $serverInfo['status'] !== 'running'}{$_LANG['Start']}{else}{$_LANG['Stop']}{/if}">
|
title="{if $serverInfo['status'] !== 'running'}{$_LANG['Start']}{else}{$_LANG['Stop']}{/if}">
|
||||||
<i class="fa fa-{if $serverInfo['status'] !== 'running'}play{else}stop{/if}" aria-hidden="true"></i>
|
<i class="fa fa-{if $serverInfo['status'] !== 'running'}play{else}stop{/if}" aria-hidden="true"></i>
|
||||||
@@ -1117,7 +1506,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="col-4 text-center">
|
<div class="col-4 text-center">
|
||||||
<a href="#"
|
<a href="#"
|
||||||
onclick="return ArkHostVPS_API('Reboot');"
|
onclick="return confirmRestart();"
|
||||||
class="vps-control-btn restart-btn"
|
class="vps-control-btn restart-btn"
|
||||||
title="{$_LANG['Restart']}">
|
title="{$_LANG['Restart']}">
|
||||||
<i class="fa fa-sync" aria-hidden="true"></i>
|
<i class="fa fa-sync" aria-hidden="true"></i>
|
||||||
@@ -1609,4 +1998,4 @@
|
|||||||
jQuery(document).ready(function($) {
|
jQuery(document).ready(function($) {
|
||||||
// WHMCS already loads Bootstrap and Font Awesome - no need to load additional libraries
|
// WHMCS already loads Bootstrap and Font Awesome - no need to load additional libraries
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
Reference in New Issue
Block a user