From 251af10faf0a8ec07e205b834c76d707c80d3d3f Mon Sep 17 00:00:00 2001
From: Frank Harris
Date: Thu, 2 Jul 2026 18:11:32 -0500
Subject: [PATCH] cleanup
---
.github/agent.md | 12 +-
.github/copilot-instructions.md | 12 +-
.github/module-map.md | 16 +-
LAST_UPDATE.txt | 2 +-
Panel/APACHE_SETUP.md | 8 +-
Panel/CHANGELOG.md | 6 +-
Panel/IMPLEMENTATION_COMPLETE.md | 28 +-
Panel/IMPLEMENTATION_NOTES.md | 38 +-
Panel/IMPLEMENTATION_SUMMARY.md | 4 +-
Panel/INSTALL.BAT | 24 +-
Panel/INSTALL_README.md | 10 +-
Panel/README.txt | 4 +-
Panel/agent_event_receiver.php | 2 +-
Panel/all_hostable_games_union.csv | 14 +-
Panel/check.php | 6 +-
Panel/css/global.css | 8 +-
Panel/docs/GSP_INSTALLER.md | 34 +-
Panel/documentation/admin-guide.md | 24 +-
Panel/documentation/agent-guide.md | 26 +-
Panel/documentation/xml-notes.md | 28 +-
Panel/game_titles.txt | 4 +-
Panel/{ogp_api.php => gsp_api.php} | 524 +++----
Panel/home.php | 68 +-
Panel/includes/api_functions.php | 82 +-
Panel/includes/database.php | 68 +-
Panel/includes/database_mysqli.php | 728 +++++-----
Panel/includes/form_table_class.php | 6 +-
Panel/includes/functions.php | 190 +--
Panel/includes/helpers.php | 124 +-
Panel/includes/html_functions.php | 14 +-
Panel/includes/lang.php | 46 +-
Panel/includes/lib_remote.php | 140 +-
Panel/includes/navig.php | 16 +-
Panel/includes/refreshed.php | 34 +-
Panel/includes/view.php | 112 +-
Panel/index.orig.php | 96 +-
Panel/index.php | 118 +-
Panel/install.php | 40 +-
Panel/js/global.js | 60 +-
Panel/js/modules/gamemanager.js | 28 +-
Panel/js/modules/litefm.js | 96 +-
Panel/js/modules/user_games-assign.js | 14 +-
Panel/lang/Arabic/global.php | 6 +-
Panel/lang/Arabic/install.php | 14 +-
Panel/lang/Arabic/modules/TS3Admin.php | 6 +-
Panel/lang/Arabic/modules/addonsmanager.php | 6 +-
Panel/lang/Arabic/modules/administration.php | 6 +-
Panel/lang/Arabic/modules/config_games.php | 6 +-
Panel/lang/Arabic/modules/dashboard.php | 12 +-
Panel/lang/Arabic/modules/dsi.php | 6 +-
Panel/lang/Arabic/modules/extras.php | 6 +-
Panel/lang/Arabic/modules/fast_download.php | 8 +-
Panel/lang/Arabic/modules/ftp.php | 6 +-
Panel/lang/Arabic/modules/gamemanager.php | 14 +-
Panel/lang/Arabic/modules/litefm.php | 6 +-
Panel/lang/Arabic/modules/lostpwd.php | 8 +-
Panel/lang/Arabic/modules/modulemanager.php | 6 +-
Panel/lang/Arabic/modules/mysql.php | 20 +-
Panel/lang/Arabic/modules/news.php | 6 +-
Panel/lang/Arabic/modules/rcon.php | 6 +-
Panel/lang/Arabic/modules/register.php | 8 +-
Panel/lang/Arabic/modules/server.php | 16 +-
Panel/lang/Arabic/modules/settings.php | 10 +-
Panel/lang/Arabic/modules/status.php | 6 +-
Panel/lang/Arabic/modules/steam_workshop.php | 6 +-
.../steam_workshop.php.bak.20260609-112432 | 106 +-
Panel/lang/Arabic/modules/subusers.php | 8 +-
Panel/lang/Arabic/modules/support.php | 6 +-
Panel/lang/Arabic/modules/tickets.php | 6 +-
Panel/lang/Arabic/modules/update.php | 6 +-
Panel/lang/Arabic/modules/user_admin.php | 6 +-
Panel/lang/Arabic/modules/user_games.php | 10 +-
Panel/lang/Arabic/modules/util.php | 6 +-
.../Chinese(China)/modules/steam_workshop.php | 6 +-
.../steam_workshop.php.bak.20260609-112432 | 106 +-
Panel/lang/Croatian(Croatia)/global.php | 6 +-
Panel/lang/Croatian(Croatia)/install.php | 18 +-
.../Croatian(Croatia)/modules/TS3Admin.php | 6 +-
.../modules/addonsmanager.php | 6 +-
.../modules/administration.php | 6 +-
.../modules/config_games.php | 6 +-
.../Croatian(Croatia)/modules/dashboard.php | 12 +-
Panel/lang/Croatian(Croatia)/modules/dsi.php | 6 +-
.../lang/Croatian(Croatia)/modules/extras.php | 6 +-
.../modules/fast_download.php | 8 +-
Panel/lang/Croatian(Croatia)/modules/ftp.php | 6 +-
.../Croatian(Croatia)/modules/gamemanager.php | 16 +-
.../lang/Croatian(Croatia)/modules/litefm.php | 6 +-
.../Croatian(Croatia)/modules/lostpwd.php | 8 +-
.../modules/modulemanager.php | 8 +-
.../lang/Croatian(Croatia)/modules/mysql.php | 20 +-
Panel/lang/Croatian(Croatia)/modules/news.php | 6 +-
Panel/lang/Croatian(Croatia)/modules/rcon.php | 6 +-
.../Croatian(Croatia)/modules/register.php | 8 +-
.../lang/Croatian(Croatia)/modules/server.php | 16 +-
.../Croatian(Croatia)/modules/settings.php | 10 +-
.../lang/Croatian(Croatia)/modules/status.php | 6 +-
.../modules/steam_workshop.php | 6 +-
.../steam_workshop.php.bak.20260609-112432 | 106 +-
.../Croatian(Croatia)/modules/subusers.php | 8 +-
.../Croatian(Croatia)/modules/support.php | 6 +-
.../Croatian(Croatia)/modules/tickets.php | 6 +-
.../lang/Croatian(Croatia)/modules/update.php | 6 +-
.../Croatian(Croatia)/modules/user_admin.php | 6 +-
.../Croatian(Croatia)/modules/user_games.php | 12 +-
Panel/lang/Croatian(Croatia)/modules/util.php | 6 +-
Panel/lang/Czech(CzechRepublic)/global.php | 6 +-
Panel/lang/Czech(CzechRepublic)/install.php | 18 +-
.../Czech(CzechRepublic)/modules/TS3Admin.php | 6 +-
.../modules/addonsmanager.php | 6 +-
.../modules/administration.php | 6 +-
.../modules/config_games.php | 6 +-
.../modules/dashboard.php | 12 +-
.../lang/Czech(CzechRepublic)/modules/dsi.php | 6 +-
.../Czech(CzechRepublic)/modules/extras.php | 6 +-
.../modules/fast_download.php | 8 +-
.../lang/Czech(CzechRepublic)/modules/ftp.php | 6 +-
.../modules/gamemanager.php | 16 +-
.../Czech(CzechRepublic)/modules/litefm.php | 6 +-
.../Czech(CzechRepublic)/modules/lostpwd.php | 8 +-
.../modules/modulemanager.php | 8 +-
.../Czech(CzechRepublic)/modules/mysql.php | 20 +-
.../Czech(CzechRepublic)/modules/news.php | 6 +-
.../Czech(CzechRepublic)/modules/rcon.php | 6 +-
.../Czech(CzechRepublic)/modules/register.php | 8 +-
.../Czech(CzechRepublic)/modules/server.php | 16 +-
.../Czech(CzechRepublic)/modules/settings.php | 10 +-
.../Czech(CzechRepublic)/modules/status.php | 6 +-
.../modules/steam_workshop.php | 6 +-
.../steam_workshop.php.bak.20260609-112432 | 106 +-
.../Czech(CzechRepublic)/modules/subusers.php | 8 +-
.../Czech(CzechRepublic)/modules/support.php | 6 +-
.../Czech(CzechRepublic)/modules/tickets.php | 6 +-
.../Czech(CzechRepublic)/modules/update.php | 6 +-
.../modules/user_admin.php | 6 +-
.../modules/user_games.php | 12 +-
.../Czech(CzechRepublic)/modules/util.php | 6 +-
Panel/lang/Danish/global.php | 6 +-
Panel/lang/Danish/install.php | 18 +-
Panel/lang/Danish/modules/TS3Admin.php | 6 +-
Panel/lang/Danish/modules/addonsmanager.php | 6 +-
Panel/lang/Danish/modules/administration.php | 6 +-
Panel/lang/Danish/modules/config_games.php | 6 +-
Panel/lang/Danish/modules/dashboard.php | 12 +-
Panel/lang/Danish/modules/dsi.php | 6 +-
Panel/lang/Danish/modules/extras.php | 6 +-
Panel/lang/Danish/modules/fast_download.php | 8 +-
Panel/lang/Danish/modules/ftp.php | 6 +-
Panel/lang/Danish/modules/gamemanager.php | 16 +-
Panel/lang/Danish/modules/litefm.php | 6 +-
Panel/lang/Danish/modules/lostpwd.php | 8 +-
Panel/lang/Danish/modules/modulemanager.php | 8 +-
Panel/lang/Danish/modules/mysql.php | 20 +-
Panel/lang/Danish/modules/news.php | 6 +-
Panel/lang/Danish/modules/rcon.php | 6 +-
Panel/lang/Danish/modules/register.php | 8 +-
Panel/lang/Danish/modules/server.php | 16 +-
Panel/lang/Danish/modules/settings.php | 10 +-
Panel/lang/Danish/modules/status.php | 6 +-
Panel/lang/Danish/modules/steam_workshop.php | 6 +-
.../steam_workshop.php.bak.20260609-112432 | 106 +-
Panel/lang/Danish/modules/subusers.php | 6 +-
Panel/lang/Danish/modules/support.php | 6 +-
Panel/lang/Danish/modules/tickets.php | 6 +-
Panel/lang/Danish/modules/update.php | 6 +-
Panel/lang/Danish/modules/user_admin.php | 6 +-
Panel/lang/Danish/modules/user_games.php | 12 +-
Panel/lang/Danish/modules/util.php | 6 +-
Panel/lang/English/fast_download_global.php | 8 +-
Panel/lang/English/global.php | 6 +-
Panel/lang/English/install.php | 18 +-
Panel/lang/English/modules/TS3Admin.php | 6 +-
Panel/lang/English/modules/addonsmanager.php | 6 +-
Panel/lang/English/modules/administration.php | 6 +-
Panel/lang/English/modules/billing.php | 6 +-
Panel/lang/English/modules/circular.php | 6 +-
Panel/lang/English/modules/config_games.php | 6 +-
Panel/lang/English/modules/cron.php | 8 +-
Panel/lang/English/modules/dashboard.php | 12 +-
Panel/lang/English/modules/dsi.php | 6 +-
Panel/lang/English/modules/extras.php | 6 +-
Panel/lang/English/modules/fast_download.php | 8 +-
Panel/lang/English/modules/ftp.php | 6 +-
Panel/lang/English/modules/gamemanager.php | 14 +-
Panel/lang/English/modules/litefm.php | 6 +-
Panel/lang/English/modules/lostpwd.php | 8 +-
Panel/lang/English/modules/modulemanager.php | 8 +-
Panel/lang/English/modules/mysql.php | 20 +-
Panel/lang/English/modules/news.php | 6 +-
Panel/lang/English/modules/rcon.php | 6 +-
Panel/lang/English/modules/register.php | 8 +-
Panel/lang/English/modules/reseller.php | 6 +-
Panel/lang/English/modules/server.php | 16 +-
Panel/lang/English/modules/settings.php | 10 +-
Panel/lang/English/modules/status.php | 6 +-
Panel/lang/English/modules/steam_workshop.php | 6 +-
.../steam_workshop.php.bak.20260609-112432 | 106 +-
Panel/lang/English/modules/subusers.php | 8 +-
Panel/lang/English/modules/support.php | 6 +-
Panel/lang/English/modules/tickets.php | 6 +-
Panel/lang/English/modules/update.php | 6 +-
Panel/lang/English/modules/user_admin.php | 6 +-
Panel/lang/English/modules/user_games.php | 12 +-
Panel/lang/English/modules/util.php | 6 +-
Panel/lang/Finnish(Finland)/modules/dsi.php | 6 +-
.../modules/fast_download.php | 8 +-
Panel/lang/Finnish(Finland)/modules/news.php | 6 +-
Panel/lang/Finnish(Finland)/modules/rcon.php | 6 +-
.../modules/steam_workshop.php | 6 +-
.../steam_workshop.php.bak.20260609-112432 | 106 +-
.../lang/Finnish(Finland)/modules/support.php | 6 +-
.../lang/Finnish(Finland)/modules/tickets.php | 6 +-
Panel/lang/Finnish(Finland)/modules/util.php | 6 +-
Panel/lang/French/global.php | 6 +-
Panel/lang/French/install.php | 18 +-
Panel/lang/French/modules/TS3Admin.php | 6 +-
Panel/lang/French/modules/addonsmanager.php | 6 +-
Panel/lang/French/modules/administration.php | 6 +-
Panel/lang/French/modules/config_games.php | 6 +-
Panel/lang/French/modules/dashboard.php | 12 +-
Panel/lang/French/modules/dsi.php | 6 +-
Panel/lang/French/modules/extras.php | 6 +-
Panel/lang/French/modules/fast_download.php | 6 +-
Panel/lang/French/modules/ftp.php | 6 +-
Panel/lang/French/modules/gamemanager.php | 12 +-
Panel/lang/French/modules/litefm.php | 6 +-
Panel/lang/French/modules/lostpwd.php | 8 +-
Panel/lang/French/modules/modulemanager.php | 8 +-
Panel/lang/French/modules/mysql.php | 20 +-
Panel/lang/French/modules/news.php | 6 +-
Panel/lang/French/modules/rcon.php | 6 +-
Panel/lang/French/modules/register.php | 6 +-
Panel/lang/French/modules/server.php | 18 +-
Panel/lang/French/modules/settings.php | 10 +-
Panel/lang/French/modules/status.php | 6 +-
Panel/lang/French/modules/steam_workshop.php | 6 +-
.../steam_workshop.php.bak.20260609-112432 | 106 +-
Panel/lang/French/modules/subusers.php | 6 +-
Panel/lang/French/modules/support.php | 6 +-
Panel/lang/French/modules/tickets.php | 6 +-
Panel/lang/French/modules/update.php | 6 +-
Panel/lang/French/modules/user_admin.php | 6 +-
Panel/lang/French/modules/user_games.php | 12 +-
Panel/lang/French/modules/util.php | 6 +-
Panel/lang/German/global.php | 6 +-
Panel/lang/German/install.php | 18 +-
Panel/lang/German/modules/TS3Admin.php | 6 +-
Panel/lang/German/modules/addonsmanager.php | 6 +-
Panel/lang/German/modules/administration.php | 6 +-
Panel/lang/German/modules/config_games.php | 6 +-
Panel/lang/German/modules/dashboard.php | 12 +-
Panel/lang/German/modules/dsi.php | 6 +-
Panel/lang/German/modules/extras.php | 6 +-
Panel/lang/German/modules/fast_download.php | 8 +-
Panel/lang/German/modules/ftp.php | 6 +-
Panel/lang/German/modules/gamemanager.php | 16 +-
Panel/lang/German/modules/litefm.php | 6 +-
Panel/lang/German/modules/lostpwd.php | 6 +-
Panel/lang/German/modules/modulemanager.php | 8 +-
Panel/lang/German/modules/mysql.php | 20 +-
Panel/lang/German/modules/news.php | 6 +-
Panel/lang/German/modules/rcon.php | 6 +-
Panel/lang/German/modules/register.php | 8 +-
Panel/lang/German/modules/server.php | 16 +-
Panel/lang/German/modules/settings.php | 10 +-
Panel/lang/German/modules/status.php | 6 +-
Panel/lang/German/modules/steam_workshop.php | 6 +-
.../steam_workshop.php.bak.20260609-112432 | 106 +-
Panel/lang/German/modules/subusers.php | 8 +-
Panel/lang/German/modules/support.php | 6 +-
Panel/lang/German/modules/tickets.php | 6 +-
Panel/lang/German/modules/update.php | 6 +-
Panel/lang/German/modules/user_admin.php | 6 +-
Panel/lang/German/modules/user_games.php | 12 +-
Panel/lang/German/modules/util.php | 6 +-
Panel/lang/Greek(Greece)/global.php | 6 +-
Panel/lang/Greek(Greece)/install.php | 18 +-
Panel/lang/Greek(Greece)/modules/TS3Admin.php | 6 +-
.../Greek(Greece)/modules/addonsmanager.php | 6 +-
.../Greek(Greece)/modules/administration.php | 6 +-
.../Greek(Greece)/modules/config_games.php | 6 +-
.../lang/Greek(Greece)/modules/dashboard.php | 12 +-
Panel/lang/Greek(Greece)/modules/dsi.php | 6 +-
Panel/lang/Greek(Greece)/modules/extras.php | 6 +-
.../Greek(Greece)/modules/fast_download.php | 8 +-
Panel/lang/Greek(Greece)/modules/ftp.php | 6 +-
.../Greek(Greece)/modules/gamemanager.php | 16 +-
Panel/lang/Greek(Greece)/modules/litefm.php | 6 +-
Panel/lang/Greek(Greece)/modules/lostpwd.php | 8 +-
.../Greek(Greece)/modules/modulemanager.php | 8 +-
Panel/lang/Greek(Greece)/modules/mysql.php | 20 +-
Panel/lang/Greek(Greece)/modules/news.php | 6 +-
Panel/lang/Greek(Greece)/modules/rcon.php | 6 +-
Panel/lang/Greek(Greece)/modules/register.php | 8 +-
Panel/lang/Greek(Greece)/modules/server.php | 16 +-
Panel/lang/Greek(Greece)/modules/settings.php | 10 +-
Panel/lang/Greek(Greece)/modules/status.php | 6 +-
.../Greek(Greece)/modules/steam_workshop.php | 6 +-
.../steam_workshop.php.bak.20260609-112432 | 106 +-
Panel/lang/Greek(Greece)/modules/subusers.php | 8 +-
Panel/lang/Greek(Greece)/modules/support.php | 6 +-
Panel/lang/Greek(Greece)/modules/tickets.php | 6 +-
Panel/lang/Greek(Greece)/modules/update.php | 6 +-
.../lang/Greek(Greece)/modules/user_admin.php | 6 +-
.../lang/Greek(Greece)/modules/user_games.php | 12 +-
Panel/lang/Greek(Greece)/modules/util.php | 6 +-
Panel/lang/Hebrew(Israel)/modules/dsi.php | 6 +-
.../Hebrew(Israel)/modules/fast_download.php | 6 +-
Panel/lang/Hebrew(Israel)/modules/news.php | 6 +-
Panel/lang/Hebrew(Israel)/modules/rcon.php | 6 +-
.../Hebrew(Israel)/modules/steam_workshop.php | 6 +-
.../steam_workshop.php.bak.20260609-112432 | 106 +-
Panel/lang/Hebrew(Israel)/modules/support.php | 6 +-
Panel/lang/Hebrew(Israel)/modules/tickets.php | 6 +-
Panel/lang/Hebrew(Israel)/modules/util.php | 6 +-
Panel/lang/Hungarian/global.php | 6 +-
Panel/lang/Hungarian/install.php | 18 +-
Panel/lang/Hungarian/modules/TS3Admin.php | 6 +-
.../lang/Hungarian/modules/addonsmanager.php | 6 +-
.../lang/Hungarian/modules/administration.php | 6 +-
Panel/lang/Hungarian/modules/config_games.php | 6 +-
Panel/lang/Hungarian/modules/dashboard.php | 12 +-
Panel/lang/Hungarian/modules/dsi.php | 6 +-
Panel/lang/Hungarian/modules/extras.php | 6 +-
.../lang/Hungarian/modules/fast_download.php | 8 +-
Panel/lang/Hungarian/modules/ftp.php | 6 +-
Panel/lang/Hungarian/modules/gamemanager.php | 14 +-
Panel/lang/Hungarian/modules/litefm.php | 6 +-
Panel/lang/Hungarian/modules/lostpwd.php | 10 +-
.../lang/Hungarian/modules/modulemanager.php | 8 +-
Panel/lang/Hungarian/modules/mysql.php | 20 +-
Panel/lang/Hungarian/modules/news.php | 6 +-
Panel/lang/Hungarian/modules/rcon.php | 6 +-
Panel/lang/Hungarian/modules/register.php | 8 +-
Panel/lang/Hungarian/modules/server.php | 16 +-
Panel/lang/Hungarian/modules/settings.php | 10 +-
Panel/lang/Hungarian/modules/status.php | 6 +-
.../lang/Hungarian/modules/steam_workshop.php | 6 +-
.../steam_workshop.php.bak.20260609-112432 | 106 +-
Panel/lang/Hungarian/modules/subusers.php | 8 +-
Panel/lang/Hungarian/modules/support.php | 6 +-
Panel/lang/Hungarian/modules/tickets.php | 6 +-
Panel/lang/Hungarian/modules/update.php | 6 +-
Panel/lang/Hungarian/modules/user_admin.php | 6 +-
Panel/lang/Hungarian/modules/user_games.php | 12 +-
Panel/lang/Hungarian/modules/util.php | 6 +-
Panel/lang/Italian/global.php | 6 +-
Panel/lang/Italian/install.php | 16 +-
Panel/lang/Italian/modules/TS3Admin.php | 6 +-
Panel/lang/Italian/modules/addonsmanager.php | 6 +-
Panel/lang/Italian/modules/administration.php | 6 +-
Panel/lang/Italian/modules/config_games.php | 6 +-
Panel/lang/Italian/modules/dashboard.php | 12 +-
Panel/lang/Italian/modules/dsi.php | 6 +-
Panel/lang/Italian/modules/extras.php | 6 +-
Panel/lang/Italian/modules/fast_download.php | 8 +-
Panel/lang/Italian/modules/ftp.php | 6 +-
Panel/lang/Italian/modules/gamemanager.php | 16 +-
Panel/lang/Italian/modules/litefm.php | 6 +-
Panel/lang/Italian/modules/lostpwd.php | 8 +-
Panel/lang/Italian/modules/modulemanager.php | 8 +-
Panel/lang/Italian/modules/mysql.php | 20 +-
Panel/lang/Italian/modules/news.php | 6 +-
Panel/lang/Italian/modules/rcon.php | 6 +-
Panel/lang/Italian/modules/register.php | 8 +-
Panel/lang/Italian/modules/server.php | 16 +-
Panel/lang/Italian/modules/settings.php | 10 +-
Panel/lang/Italian/modules/status.php | 6 +-
Panel/lang/Italian/modules/steam_workshop.php | 6 +-
.../steam_workshop.php.bak.20260609-112432 | 106 +-
Panel/lang/Italian/modules/subusers.php | 8 +-
Panel/lang/Italian/modules/support.php | 6 +-
Panel/lang/Italian/modules/tickets.php | 6 +-
Panel/lang/Italian/modules/update.php | 6 +-
Panel/lang/Italian/modules/user_admin.php | 6 +-
Panel/lang/Italian/modules/user_games.php | 12 +-
Panel/lang/Italian/modules/util.php | 6 +-
Panel/lang/Persian/global.php | 6 +-
Panel/lang/Persian/install.php | 18 +-
Panel/lang/Persian/modules/TS3Admin.php | 6 +-
Panel/lang/Persian/modules/addonsmanager.php | 6 +-
Panel/lang/Persian/modules/administration.php | 6 +-
Panel/lang/Persian/modules/config_games.php | 6 +-
Panel/lang/Persian/modules/dashboard.php | 12 +-
Panel/lang/Persian/modules/dsi.php | 6 +-
Panel/lang/Persian/modules/extras.php | 6 +-
Panel/lang/Persian/modules/fast_download.php | 8 +-
Panel/lang/Persian/modules/ftp.php | 6 +-
Panel/lang/Persian/modules/gamemanager.php | 16 +-
Panel/lang/Persian/modules/litefm.php | 6 +-
Panel/lang/Persian/modules/lostpwd.php | 10 +-
Panel/lang/Persian/modules/modulemanager.php | 8 +-
Panel/lang/Persian/modules/mysql.php | 20 +-
Panel/lang/Persian/modules/news.php | 6 +-
Panel/lang/Persian/modules/rcon.php | 6 +-
Panel/lang/Persian/modules/register.php | 8 +-
Panel/lang/Persian/modules/server.php | 16 +-
Panel/lang/Persian/modules/settings.php | 10 +-
Panel/lang/Persian/modules/status.php | 6 +-
Panel/lang/Persian/modules/steam_workshop.php | 6 +-
.../steam_workshop.php.bak.20260609-112432 | 106 +-
Panel/lang/Persian/modules/subusers.php | 8 +-
Panel/lang/Persian/modules/support.php | 6 +-
Panel/lang/Persian/modules/tickets.php | 6 +-
Panel/lang/Persian/modules/update.php | 6 +-
Panel/lang/Persian/modules/user_admin.php | 6 +-
Panel/lang/Persian/modules/user_games.php | 12 +-
Panel/lang/Persian/modules/util.php | 6 +-
Panel/lang/Polish/global.php | 6 +-
Panel/lang/Polish/install.php | 18 +-
Panel/lang/Polish/modules/TS3Admin.php | 6 +-
Panel/lang/Polish/modules/addonsmanager.php | 6 +-
Panel/lang/Polish/modules/administration.php | 6 +-
Panel/lang/Polish/modules/config_games.php | 6 +-
Panel/lang/Polish/modules/dashboard.php | 12 +-
Panel/lang/Polish/modules/dsi.php | 6 +-
Panel/lang/Polish/modules/extras.php | 6 +-
Panel/lang/Polish/modules/fast_download.php | 8 +-
Panel/lang/Polish/modules/ftp.php | 6 +-
Panel/lang/Polish/modules/gamemanager.php | 16 +-
Panel/lang/Polish/modules/litefm.php | 6 +-
Panel/lang/Polish/modules/lostpwd.php | 8 +-
Panel/lang/Polish/modules/modulemanager.php | 8 +-
Panel/lang/Polish/modules/mysql.php | 20 +-
Panel/lang/Polish/modules/news.php | 6 +-
Panel/lang/Polish/modules/rcon.php | 6 +-
Panel/lang/Polish/modules/register.php | 8 +-
Panel/lang/Polish/modules/server.php | 14 +-
Panel/lang/Polish/modules/settings.php | 10 +-
Panel/lang/Polish/modules/status.php | 6 +-
Panel/lang/Polish/modules/steam_workshop.php | 6 +-
.../steam_workshop.php.bak.20260609-112432 | 106 +-
Panel/lang/Polish/modules/subusers.php | 6 +-
Panel/lang/Polish/modules/support.php | 6 +-
Panel/lang/Polish/modules/tickets.php | 6 +-
Panel/lang/Polish/modules/update.php | 6 +-
Panel/lang/Polish/modules/user_admin.php | 6 +-
Panel/lang/Polish/modules/user_games.php | 12 +-
Panel/lang/Polish/modules/util.php | 6 +-
Panel/lang/Portuguese(Brazil)/global.php | 6 +-
Panel/lang/Portuguese(Brazil)/install.php | 16 +-
.../Portuguese(Brazil)/modules/TS3Admin.php | 6 +-
.../modules/addonsmanager.php | 6 +-
.../modules/administration.php | 6 +-
.../modules/config_games.php | 6 +-
.../Portuguese(Brazil)/modules/dashboard.php | 8 +-
Panel/lang/Portuguese(Brazil)/modules/dsi.php | 6 +-
.../Portuguese(Brazil)/modules/extras.php | 6 +-
.../modules/fast_download.php | 8 +-
Panel/lang/Portuguese(Brazil)/modules/ftp.php | 6 +-
.../modules/gamemanager.php | 12 +-
.../Portuguese(Brazil)/modules/litefm.php | 6 +-
.../Portuguese(Brazil)/modules/lostpwd.php | 8 +-
.../modules/modulemanager.php | 6 +-
.../lang/Portuguese(Brazil)/modules/mysql.php | 20 +-
.../lang/Portuguese(Brazil)/modules/news.php | 6 +-
.../lang/Portuguese(Brazil)/modules/rcon.php | 6 +-
.../Portuguese(Brazil)/modules/register.php | 8 +-
.../Portuguese(Brazil)/modules/server.php | 10 +-
.../Portuguese(Brazil)/modules/settings.php | 6 +-
.../Portuguese(Brazil)/modules/status.php | 6 +-
.../modules/steam_workshop.php | 6 +-
.../steam_workshop.php.bak.20260609-112432 | 106 +-
.../Portuguese(Brazil)/modules/subusers.php | 6 +-
.../Portuguese(Brazil)/modules/support.php | 6 +-
.../Portuguese(Brazil)/modules/tickets.php | 6 +-
.../Portuguese(Brazil)/modules/update.php | 6 +-
.../Portuguese(Brazil)/modules/user_admin.php | 6 +-
.../Portuguese(Brazil)/modules/user_games.php | 8 +-
.../lang/Portuguese(Brazil)/modules/util.php | 6 +-
Panel/lang/Portuguese/global.php | 6 +-
Panel/lang/Portuguese/install.php | 8 +-
Panel/lang/Portuguese/modules/TS3Admin.php | 6 +-
.../lang/Portuguese/modules/addonsmanager.php | 6 +-
.../Portuguese/modules/administration.php | 6 +-
.../lang/Portuguese/modules/config_games.php | 6 +-
Panel/lang/Portuguese/modules/dashboard.php | 6 +-
Panel/lang/Portuguese/modules/dsi.php | 6 +-
Panel/lang/Portuguese/modules/extras.php | 6 +-
.../lang/Portuguese/modules/fast_download.php | 6 +-
Panel/lang/Portuguese/modules/ftp.php | 6 +-
Panel/lang/Portuguese/modules/gamemanager.php | 10 +-
Panel/lang/Portuguese/modules/litefm.php | 6 +-
Panel/lang/Portuguese/modules/lostpwd.php | 6 +-
.../lang/Portuguese/modules/modulemanager.php | 6 +-
Panel/lang/Portuguese/modules/mysql.php | 20 +-
Panel/lang/Portuguese/modules/news.php | 6 +-
Panel/lang/Portuguese/modules/rcon.php | 6 +-
Panel/lang/Portuguese/modules/register.php | 6 +-
Panel/lang/Portuguese/modules/server.php | 10 +-
Panel/lang/Portuguese/modules/settings.php | 8 +-
Panel/lang/Portuguese/modules/status.php | 6 +-
.../Portuguese/modules/steam_workshop.php | 6 +-
.../steam_workshop.php.bak.20260609-112432 | 106 +-
Panel/lang/Portuguese/modules/subusers.php | 6 +-
Panel/lang/Portuguese/modules/support.php | 6 +-
Panel/lang/Portuguese/modules/tickets.php | 6 +-
Panel/lang/Portuguese/modules/update.php | 6 +-
Panel/lang/Portuguese/modules/user_admin.php | 6 +-
Panel/lang/Portuguese/modules/user_games.php | 6 +-
Panel/lang/Portuguese/modules/util.php | 6 +-
Panel/lang/README.lang | 8 +-
Panel/lang/Romanian(Romania)/global.php | 6 +-
Panel/lang/Romanian(Romania)/install.php | 18 +-
.../Romanian(Romania)/modules/TS3Admin.php | 6 +-
.../modules/addonsmanager.php | 6 +-
.../modules/administration.php | 6 +-
.../modules/config_games.php | 6 +-
.../Romanian(Romania)/modules/dashboard.php | 12 +-
Panel/lang/Romanian(Romania)/modules/dsi.php | 6 +-
.../lang/Romanian(Romania)/modules/extras.php | 6 +-
.../modules/fast_download.php | 8 +-
Panel/lang/Romanian(Romania)/modules/ftp.php | 6 +-
.../Romanian(Romania)/modules/gamemanager.php | 16 +-
.../lang/Romanian(Romania)/modules/litefm.php | 6 +-
.../Romanian(Romania)/modules/lostpwd.php | 8 +-
.../modules/modulemanager.php | 8 +-
.../lang/Romanian(Romania)/modules/mysql.php | 20 +-
Panel/lang/Romanian(Romania)/modules/news.php | 6 +-
Panel/lang/Romanian(Romania)/modules/rcon.php | 6 +-
.../Romanian(Romania)/modules/register.php | 8 +-
.../lang/Romanian(Romania)/modules/server.php | 16 +-
.../Romanian(Romania)/modules/settings.php | 10 +-
.../lang/Romanian(Romania)/modules/status.php | 6 +-
.../modules/steam_workshop.php | 6 +-
.../steam_workshop.php.bak.20260609-112432 | 106 +-
.../Romanian(Romania)/modules/subusers.php | 8 +-
.../Romanian(Romania)/modules/support.php | 6 +-
.../Romanian(Romania)/modules/tickets.php | 6 +-
.../lang/Romanian(Romania)/modules/update.php | 6 +-
.../Romanian(Romania)/modules/user_admin.php | 6 +-
.../Romanian(Romania)/modules/user_games.php | 12 +-
Panel/lang/Romanian(Romania)/modules/util.php | 6 +-
Panel/lang/Russian/global.php | 6 +-
Panel/lang/Russian/install.php | 14 +-
Panel/lang/Russian/modules/TS3Admin.php | 6 +-
Panel/lang/Russian/modules/addonsmanager.php | 6 +-
Panel/lang/Russian/modules/administration.php | 6 +-
Panel/lang/Russian/modules/config_games.php | 6 +-
Panel/lang/Russian/modules/dashboard.php | 12 +-
Panel/lang/Russian/modules/dsi.php | 6 +-
Panel/lang/Russian/modules/extras.php | 6 +-
Panel/lang/Russian/modules/fast_download.php | 8 +-
Panel/lang/Russian/modules/ftp.php | 6 +-
Panel/lang/Russian/modules/gamemanager.php | 14 +-
Panel/lang/Russian/modules/litefm.php | 6 +-
Panel/lang/Russian/modules/lostpwd.php | 8 +-
Panel/lang/Russian/modules/modulemanager.php | 6 +-
Panel/lang/Russian/modules/mysql.php | 20 +-
Panel/lang/Russian/modules/news.php | 6 +-
Panel/lang/Russian/modules/rcon.php | 6 +-
Panel/lang/Russian/modules/register.php | 8 +-
Panel/lang/Russian/modules/server.php | 16 +-
Panel/lang/Russian/modules/settings.php | 14 +-
Panel/lang/Russian/modules/status.php | 6 +-
Panel/lang/Russian/modules/steam_workshop.php | 6 +-
.../steam_workshop.php.bak.20260609-112432 | 106 +-
Panel/lang/Russian/modules/subusers.php | 6 +-
Panel/lang/Russian/modules/support.php | 6 +-
Panel/lang/Russian/modules/tickets.php | 6 +-
Panel/lang/Russian/modules/update.php | 6 +-
Panel/lang/Russian/modules/user_admin.php | 6 +-
Panel/lang/Russian/modules/user_games.php | 10 +-
Panel/lang/Russian/modules/util.php | 6 +-
Panel/lang/Serbian(Serbia)/global.php | 6 +-
Panel/lang/Serbian(Serbia)/install.php | 18 +-
.../lang/Serbian(Serbia)/modules/TS3Admin.php | 6 +-
.../Serbian(Serbia)/modules/addonsmanager.php | 6 +-
.../modules/administration.php | 6 +-
.../Serbian(Serbia)/modules/config_games.php | 6 +-
.../Serbian(Serbia)/modules/dashboard.php | 12 +-
Panel/lang/Serbian(Serbia)/modules/dsi.php | 6 +-
Panel/lang/Serbian(Serbia)/modules/extras.php | 6 +-
.../Serbian(Serbia)/modules/fast_download.php | 6 +-
Panel/lang/Serbian(Serbia)/modules/ftp.php | 6 +-
.../Serbian(Serbia)/modules/gamemanager.php | 14 +-
Panel/lang/Serbian(Serbia)/modules/litefm.php | 6 +-
.../lang/Serbian(Serbia)/modules/lostpwd.php | 8 +-
.../Serbian(Serbia)/modules/modulemanager.php | 8 +-
Panel/lang/Serbian(Serbia)/modules/mysql.php | 20 +-
Panel/lang/Serbian(Serbia)/modules/news.php | 6 +-
Panel/lang/Serbian(Serbia)/modules/rcon.php | 6 +-
.../lang/Serbian(Serbia)/modules/register.php | 8 +-
Panel/lang/Serbian(Serbia)/modules/server.php | 16 +-
.../lang/Serbian(Serbia)/modules/settings.php | 10 +-
Panel/lang/Serbian(Serbia)/modules/status.php | 6 +-
.../modules/steam_workshop.php | 6 +-
.../steam_workshop.php.bak.20260609-112432 | 106 +-
.../lang/Serbian(Serbia)/modules/subusers.php | 8 +-
.../lang/Serbian(Serbia)/modules/support.php | 6 +-
.../lang/Serbian(Serbia)/modules/tickets.php | 6 +-
Panel/lang/Serbian(Serbia)/modules/update.php | 6 +-
.../Serbian(Serbia)/modules/user_admin.php | 6 +-
.../Serbian(Serbia)/modules/user_games.php | 12 +-
Panel/lang/Serbian(Serbia)/modules/util.php | 6 +-
Panel/lang/Spanish/global.php | 8 +-
Panel/lang/Spanish/install.php | 16 +-
Panel/lang/Spanish/modules/TS3Admin.php | 6 +-
Panel/lang/Spanish/modules/addonsmanager.php | 6 +-
Panel/lang/Spanish/modules/administration.php | 6 +-
Panel/lang/Spanish/modules/config_games.php | 6 +-
Panel/lang/Spanish/modules/dashboard.php | 12 +-
Panel/lang/Spanish/modules/dsi.php | 6 +-
Panel/lang/Spanish/modules/extras.php | 6 +-
Panel/lang/Spanish/modules/fast_download.php | 8 +-
Panel/lang/Spanish/modules/ftp.php | 6 +-
Panel/lang/Spanish/modules/gamemanager.php | 14 +-
Panel/lang/Spanish/modules/litefm.php | 6 +-
Panel/lang/Spanish/modules/lostpwd.php | 6 +-
Panel/lang/Spanish/modules/modulemanager.php | 6 +-
Panel/lang/Spanish/modules/mysql.php | 20 +-
Panel/lang/Spanish/modules/news.php | 6 +-
Panel/lang/Spanish/modules/rcon.php | 6 +-
Panel/lang/Spanish/modules/register.php | 8 +-
Panel/lang/Spanish/modules/server.php | 12 +-
Panel/lang/Spanish/modules/settings.php | 28 +-
Panel/lang/Spanish/modules/status.php | 6 +-
Panel/lang/Spanish/modules/steam_workshop.php | 6 +-
.../steam_workshop.php.bak.20260609-112432 | 106 +-
Panel/lang/Spanish/modules/subusers.php | 6 +-
Panel/lang/Spanish/modules/support.php | 6 +-
Panel/lang/Spanish/modules/tickets.php | 6 +-
Panel/lang/Spanish/modules/update.php | 6 +-
Panel/lang/Spanish/modules/user_admin.php | 6 +-
Panel/lang/Spanish/modules/user_games.php | 10 +-
Panel/lang/Spanish/modules/util.php | 6 +-
Panel/lang/Swedish(Sweden)/global.php | 6 +-
Panel/lang/Swedish(Sweden)/install.php | 18 +-
.../lang/Swedish(Sweden)/modules/TS3Admin.php | 6 +-
.../Swedish(Sweden)/modules/addonsmanager.php | 6 +-
.../modules/administration.php | 6 +-
.../Swedish(Sweden)/modules/config_games.php | 6 +-
.../Swedish(Sweden)/modules/dashboard.php | 12 +-
Panel/lang/Swedish(Sweden)/modules/dsi.php | 6 +-
Panel/lang/Swedish(Sweden)/modules/extras.php | 6 +-
.../Swedish(Sweden)/modules/fast_download.php | 8 +-
Panel/lang/Swedish(Sweden)/modules/ftp.php | 6 +-
.../Swedish(Sweden)/modules/gamemanager.php | 16 +-
Panel/lang/Swedish(Sweden)/modules/litefm.php | 6 +-
.../lang/Swedish(Sweden)/modules/lostpwd.php | 8 +-
.../Swedish(Sweden)/modules/modulemanager.php | 8 +-
Panel/lang/Swedish(Sweden)/modules/mysql.php | 20 +-
Panel/lang/Swedish(Sweden)/modules/news.php | 6 +-
Panel/lang/Swedish(Sweden)/modules/rcon.php | 6 +-
.../lang/Swedish(Sweden)/modules/register.php | 8 +-
Panel/lang/Swedish(Sweden)/modules/server.php | 16 +-
.../lang/Swedish(Sweden)/modules/settings.php | 10 +-
Panel/lang/Swedish(Sweden)/modules/status.php | 6 +-
.../modules/steam_workshop.php | 6 +-
.../steam_workshop.php.bak.20260609-112432 | 106 +-
.../lang/Swedish(Sweden)/modules/subusers.php | 8 +-
.../lang/Swedish(Sweden)/modules/support.php | 6 +-
.../lang/Swedish(Sweden)/modules/tickets.php | 6 +-
Panel/lang/Swedish(Sweden)/modules/update.php | 6 +-
.../Swedish(Sweden)/modules/user_admin.php | 6 +-
.../Swedish(Sweden)/modules/user_games.php | 12 +-
Panel/lang/Swedish(Sweden)/modules/util.php | 6 +-
Panel/lang/Turkish(Turkey)/global.php | 6 +-
Panel/lang/Turkish(Turkey)/install.php | 18 +-
.../lang/Turkish(Turkey)/modules/TS3Admin.php | 6 +-
.../Turkish(Turkey)/modules/addonsmanager.php | 6 +-
.../modules/administration.php | 6 +-
.../Turkish(Turkey)/modules/config_games.php | 6 +-
.../Turkish(Turkey)/modules/dashboard.php | 12 +-
Panel/lang/Turkish(Turkey)/modules/dsi.php | 6 +-
Panel/lang/Turkish(Turkey)/modules/extras.php | 6 +-
.../Turkish(Turkey)/modules/fast_download.php | 8 +-
Panel/lang/Turkish(Turkey)/modules/ftp.php | 6 +-
.../Turkish(Turkey)/modules/gamemanager.php | 16 +-
Panel/lang/Turkish(Turkey)/modules/litefm.php | 6 +-
.../lang/Turkish(Turkey)/modules/lostpwd.php | 12 +-
.../Turkish(Turkey)/modules/modulemanager.php | 8 +-
Panel/lang/Turkish(Turkey)/modules/mysql.php | 20 +-
Panel/lang/Turkish(Turkey)/modules/news.php | 6 +-
Panel/lang/Turkish(Turkey)/modules/rcon.php | 6 +-
.../lang/Turkish(Turkey)/modules/register.php | 8 +-
Panel/lang/Turkish(Turkey)/modules/server.php | 16 +-
.../lang/Turkish(Turkey)/modules/settings.php | 10 +-
Panel/lang/Turkish(Turkey)/modules/status.php | 6 +-
.../modules/steam_workshop.php | 6 +-
.../steam_workshop.php.bak.20260609-112432 | 106 +-
.../lang/Turkish(Turkey)/modules/subusers.php | 8 +-
.../lang/Turkish(Turkey)/modules/support.php | 6 +-
.../lang/Turkish(Turkey)/modules/tickets.php | 6 +-
Panel/lang/Turkish(Turkey)/modules/update.php | 6 +-
.../Turkish(Turkey)/modules/user_admin.php | 6 +-
.../Turkish(Turkey)/modules/user_games.php | 12 +-
Panel/lang/Turkish(Turkey)/modules/util.php | 6 +-
Panel/lang/lang-check2.php | 18 +-
Panel/modules/SERVER_IMAGE_MODULE_REVIEW.md | 4 +-
Panel/modules/TS3Admin/TS3Admin.php | 16 +-
Panel/modules/TS3Admin/module.php | 8 +-
.../TS3Admin/ts3webinterface.class.php | 338 ++---
.../addonsmanager/SERVER_CONTENT_ROADMAP.md | 20 +-
.../SERVER_CONTENT_WORKSHOP_PHASE1.md | 4 +-
.../addonsmanager/addons_installer.php | 48 +-
.../addons_installer.php.bak.20260609-111046 | 48 +-
.../modules/addonsmanager/addons_manager.php | 56 +-
.../addons_manager.php.bak.20260609-111046 | 56 +-
Panel/modules/addonsmanager/module.php | 16 +-
.../module.php.bak.20260609-111046 | 16 +-
.../modules/addonsmanager/monitor_buttons.php | 6 +-
...generated_steamcmd_job.bak.20260609-093249 | 2 +-
...generated_steamcmd_job.bak.20260609-101329 | 2 +-
...generated_steamcmd_job.bak.20260609-101812 | 2 +-
.../addonsmanager/server_content_actions.php | 10 +-
.../server_content_categories.php | 4 +-
.../addonsmanager/server_content_helpers.php | 38 +-
...er_content_helpers.php.bak.20260609-083408 | 38 +-
...er_content_helpers.php.bak.20260609-083446 | 38 +-
...er_content_helpers.php.bak.20260609-111046 | 38 +-
.../tests/workshop_helpers_test.php | 4 +-
Panel/modules/addonsmanager/user_addons.php | 10 +-
.../workshop_action.php.bak.20260609-070033 | 16 +-
.../workshop_action.php.bak.20260609-070146 | 16 +-
.../workshop_action.php.bak.20260609-071012 | 14 +-
.../workshop_action.php.bak.20260609-083408 | 16 +-
.../workshop_action.php.bak.20260609-083446 | 18 +-
.../workshop_action.php.bak.20260609-093249 | 18 +-
.../workshop_content.php.bak.20260609-070033 | 4 +-
.../workshop_content.php.bak.20260609-070146 | 4 +-
.../workshop_content.php.bak.20260609-071012 | 4 +-
.../workshop_content.php.bak.20260609-083408 | 4 +-
.../workshop_content.php.bak.20260609-083446 | 4 +-
.../modules/administration/administration.php | 52 +-
Panel/modules/administration/backupdwl.php | 8 +-
Panel/modules/administration/banlist.php | 14 +-
Panel/modules/administration/iframe.php | 22 +-
Panel/modules/administration/module.php | 18 +-
Panel/modules/administration/panel_update.php | 8 +-
Panel/modules/administration/watch_logger.php | 40 +-
.../Old Stuff/old.backup-restore.php.old | 4 +-
.../backup-restore/Old Stuff/servers2.xml | 4 +-
.../modules/backup-restore/backup-restore.php | 4 +-
Panel/modules/backup-restore/function.php | 14 +-
.../backup-restore/monitor_buttons.php | 8 +-
Panel/modules/backup-restore/test.sh | 4 +-
Panel/modules/billing/BILLING_FIX_SUMMARY.md | 6 +-
.../modules/billing/COLUMN_RENAME_SUMMARY.md | 6 +-
Panel/modules/billing/COUPON_SYSTEM.md | 24 +-
Panel/modules/billing/FIXES_APPLIED.md | 14 +-
Panel/modules/billing/INVOICE_FIRST_FLOW.md | 36 +-
Panel/modules/billing/INVOICE_SYSTEM.md | 12 +-
Panel/modules/billing/MIGRATION_SUMMARY.md | 36 +-
Panel/modules/billing/PANEL_INTEGRATION.md | 28 +-
.../billing/PAYMENT_IMPLEMENTATION_SUMMARY.md | 34 +-
.../modules/billing/PAYPAL_DEBUGGING_GUIDE.md | 10 +-
.../modules/billing/QUICK_DEBUG_REFERENCE.md | 8 +-
Panel/modules/billing/QUICK_START.md | 56 +-
Panel/modules/billing/README.md | 4 +-
Panel/modules/billing/README_COUPON_UPDATE.md | 16 +-
Panel/modules/billing/RECENT_FIXES_SUMMARY.md | 8 +-
Panel/modules/billing/STATUS_REPORT.md | 10 +-
Panel/modules/billing/TESTING_CHECKLIST.md | 62 +-
.../billing/_archived/CONFIGURATION.md | 2 +-
Panel/modules/billing/_archived/FEATURES.md | 34 +-
.../_archived/IMPLEMENTATION_SUMMARY.md | 44 +-
.../modules/billing/_archived/README_LOGIN.md | 26 +-
.../add_remote_server_enabled_column.sql | 2 +-
Panel/modules/billing/add_to_cart.php | 4 +-
Panel/modules/billing/admin_config.php | 2 +-
Panel/modules/billing/admin_invoices.php | 2 +-
Panel/modules/billing/admin_orders.php | 82 +-
Panel/modules/billing/admin_payments.php | 2 +-
Panel/modules/billing/adminserverlist.php | 2 +-
Panel/modules/billing/api/capture_order.php | 2 +-
Panel/modules/billing/cart.php | 36 +-
Panel/modules/billing/checkout_free.php | 2 +-
Panel/modules/billing/create_servers.php | 66 +-
Panel/modules/billing/cron-shop.php | 10 +-
Panel/modules/billing/diag_remote.php | 2 +-
Panel/modules/billing/docs.php | 106 +-
.../docs/DOCUMENTATION_ENHANCEMENT_SUMMARY.md | 8 +-
Panel/modules/billing/docs/XML-Notes.md | 28 +-
.../billing/docs/brainbread2/index.php | 4 +-
Panel/modules/billing/docs/csgo/index.php | 4 +-
Panel/modules/billing/docs/czero/index.php | 4 +-
Panel/modules/billing/docs/dmc/index.php | 4 +-
Panel/modules/billing/docs/dod/index.php | 4 +-
.../docs/gameserver_catalog_all_sources.yaml | 50 +-
Panel/modules/billing/docs/hldm/index.php | 4 +-
.../billing/docs/nmrih_steam/index.php | 4 +-
.../billing/docs/nucleardawn/index.php | 4 +-
Panel/modules/billing/docs/ricochet/index.php | 4 +-
Panel/modules/billing/docs/xml_notes.php | 4 +-
Panel/modules/billing/docs/zps/index.php | 4 +-
Panel/modules/billing/forgot_password.php | 82 +-
Panel/modules/billing/includes/README.md | 2 +-
.../modules/billing/includes/panel_bridge.php | 10 +-
.../billing/includes/session_bridge.php | 2 +-
Panel/modules/billing/login.php | 44 +-
Panel/modules/billing/logout.php | 2 +-
.../modules/billing/migration_to_invoices.sql | 44 +-
Panel/modules/billing/module.php | 92 +-
Panel/modules/billing/my_account.php | 30 +-
Panel/modules/billing/my_orders_panel.php | 32 +-
.../normalize_billing_order_status.sql | 2 +-
Panel/modules/billing/payment_success.php | 12 +-
Panel/modules/billing/register.php | 2 +-
Panel/modules/billing/renew_server.php | 28 +-
Panel/modules/billing/reset_password.php | 76 +-
.../sql/002_billing_checkout_fixes.sql | 2 +-
Panel/modules/billing/test_db_connection.php | 8 +-
Panel/modules/billing/test_integration.php | 42 +-
Panel/modules/billing/tools/check_db_user.php | 2 +-
Panel/modules/circular/circular.php | 28 +-
Panel/modules/circular/functions.php | 34 +-
Panel/modules/circular/lang/circular.php | 6 +-
Panel/modules/circular/module.php | 16 +-
Panel/modules/circular/show_circular.php | 8 +-
Panel/modules/config_games/cli-params.php | 10 +-
Panel/modules/config_games/config_servers.php | 38 +-
Panel/modules/config_games/create.php | 10 +-
Panel/modules/config_games/module.php | 14 +-
.../config_games/server_config_parser.php | 34 +-
.../backup/7daystodie_linux32.xml | 2 +-
.../backup/brainbread2_win32.xml | 2 +-
.../backup/counterstrike_source.xml | 2 +-
.../server_configs/backup/csgo128_linux.xml | 2 +-
.../server_configs/backup/cstrike.xml | 2 +-
.../server_configs/backup/czero_linux.xml | 2 +-
.../server_configs/backup/dmc.xml | 2 +-
.../server_configs/backup/dod.xml | 2 +-
.../server_configs/backup/doi.xml | 2 +-
.../server_configs/backup/doi_win.xml | 2 +-
.../backup/dontstarvetogether_linux32.xml | 4 +-
.../server_configs/backup/ets2_linux64.xml | 4 +-
.../server_configs/backup/garrysmod.xml | 2 +-
.../server_configs/backup/hldm_linux32.xml | 2 +-
.../backup/insurgency_linux.xml | 2 +-
.../backup/insurgency_linux32.xml | 2 +-
.../backup/left4dead2_linux32.xml | 2 +-
.../server_configs/backup/nmrih_linux32.xml | 2 +-
.../server_configs/backup/nuclear_dawn.xml | 2 +-
.../server_configs/backup/ricochet.xml | 2 +-
.../server_configs/backup/rust_linux64.xml | 2 +-
.../backup/sinusbot_linux64.xml | 14 +-
.../backup/teamspeak3_linux32.xml | 2 +-
.../backup/teamspeak3_win32.xml | 2 +-
.../backup/teamspeak3_win64.xml | 2 +-
.../server_configs/backup/tfc.xml | 2 +-
.../backup/unturned_linux32.xml | 2 +-
.../backup/unturned_linux64.xml | 2 +-
.../server_configs/backup/vbox_linux32.xml | 2 +-
.../server_configs/backup/zps_linux32.xml | 2 +-
.../server_configs/brainbread2_win32.xml | 2 +-
.../server_configs/counterstrike_source.xml | 2 +-
.../server_configs/csgo128_linux.xml | 2 +-
.../config_games/server_configs/cstrike.xml | 2 +-
.../server_configs/czero_linux.xml | 2 +-
.../config_games/server_configs/database.sh | 4 +-
.../config_games/server_configs/dmc.xml | 2 +-
.../config_games/server_configs/dod.xml | 2 +-
.../config_games/server_configs/doi.xml | 2 +-
.../config_games/server_configs/doi_win.xml | 2 +-
.../dontstarvetogether_linux32.xml | 4 +-
.../server_configs/ets2_linux64.xml | 4 +-
.../config_games/server_configs/garrysmod.xml | 2 +-
.../server_configs/hldm_linux32.xml | 2 +-
.../server_configs/insurgency_linux.xml | 2 +-
.../server_configs/left4dead2_linux32.xml | 2 +-
.../server_configs/nmrih_linux32.xml | 2 +-
.../server_configs/nuclear_dawn.xml | 2 +-
.../config_games/server_configs/ricochet.xml | 2 +-
.../server_configs/rust_linux64.xml | 2 +-
.../server_configs/sinusbot_linux64.xml | 14 +-
.../server_configs/teamspeak3_win64.xml | 2 +-
.../config_games/server_configs/tfc.xml | 2 +-
.../server_configs/unturned_linux64.xml | 2 +-
.../server_configs/vbox_linux32.xml | 2 +-
.../server_configs/zps_linux32.xml | 2 +-
Panel/modules/config_games/set_mods.php | 18 +-
Panel/modules/config_games/set_params.php | 28 +-
.../config_games/xml_config_creator.php | 8 +-
.../config_games/xml_tag_descriptions.php | 4 +-
Panel/modules/cron/cron.php | 66 +-
Panel/modules/cron/events.php | 28 +-
Panel/modules/cron/module.php | 6 +-
Panel/modules/cron/shared_cron_functions.php | 90 +-
Panel/modules/cron/thetime.php | 12 +-
Panel/modules/cron/user_cron.php | 60 +-
Panel/modules/dashboard/dashboard.php | 70 +-
Panel/modules/dashboard/module.php | 34 +-
Panel/modules/dashboard/query_ref.php | 24 +-
Panel/modules/dashboard/updateWidgets.php | 34 +-
Panel/modules/dsi/dsi_admin.php | 36 +-
Panel/modules/dsi/dsi_list.php | 56 +-
Panel/modules/dsi/dsi_user.php | 18 +-
Panel/modules/dsi/image.php | 56 +-
Panel/modules/dsi/includes/functions.php | 32 +-
Panel/modules/dsi/includes/functions_ui.php | 16 +-
Panel/modules/dsi/module.php | 8 +-
Panel/modules/dsi/monitor_buttons.php | 8 +-
.../editconfigfiles/configFileList.php | 28 +-
Panel/modules/editconfigfiles/modify.php | 46 +-
Panel/modules/editconfigfiles/module.php | 6 +-
.../editconfigfiles/monitor_buttons.php | 6 +-
Panel/modules/faq/faq.php | 32 +-
Panel/modules/faq/faq.php.save | 26 +-
Panel/modules/faq/faq.rss | 6 +-
Panel/modules/faq/{ogpfaq.rss => gspfaq.rss} | 1268 ++++++++---------
Panel/modules/fast_download/admin_fastdl.php | 48 +-
Panel/modules/fast_download/functions.php | 22 +-
Panel/modules/fast_download/module.php | 14 +-
.../modules/fast_download/monitor_buttons.php | 6 +-
Panel/modules/fast_download/user_fastd.php | 42 +-
Panel/modules/ftp/ftp.php | 18 +-
Panel/modules/ftp/ftp_admin.php | 70 +-
.../ftp/includes/registerglobals.inc.php | 60 +-
Panel/modules/ftp/index.php | 26 +-
Panel/modules/ftp/module.php | 6 +-
Panel/modules/ftp/monitor_buttons.php | 10 +-
Panel/modules/ftp/settings.inc.php | 16 +-
.../modules/ftp/skins/blue/login.template.php | 6 +-
.../gamemanager/MinecraftRcon.class.php | 58 +-
.../modules/gamemanager/cfg_text_replace.php | 38 +-
Panel/modules/gamemanager/get_server_log.php | 8 +-
.../gamemanager/home_handling_functions.php | 104 +-
Panel/modules/gamemanager/log.php | 8 +-
Panel/modules/gamemanager/mini_start.php | 127 +-
Panel/modules/gamemanager/module.php | 34 +-
Panel/modules/gamemanager/monitor_buttons.php | 12 +-
Panel/modules/gamemanager/rcon.php | 22 +-
Panel/modules/gamemanager/rcon_presets.php | 34 +-
.../modules/gamemanager/ref_servermonitor.php | 22 +-
Panel/modules/gamemanager/restart_server.php | 60 +-
Panel/modules/gamemanager/server_monitor.php | 164 +--
Panel/modules/gamemanager/start_server.php | 82 +-
Panel/modules/gamemanager/stop_server.php | 28 +-
Panel/modules/gamemanager/update_actions.php | 6 +-
Panel/modules/gamemanager/update_server.php | 22 +-
.../modules/gamemanager/upload_map_image.php | 40 +-
Panel/modules/gamemanager/view_server_log.php | 16 +-
Panel/modules/lgsl_with_img_mod/feed.php | 2 +-
Panel/modules/lgsl_with_img_mod/image.php | 80 +-
Panel/modules/lgsl_with_img_mod/lgsl.php | 8 +-
.../modules/lgsl_with_img_mod/lgsl_admin.php | 8 +-
.../lgsl_files/lgsl_admin.php | 12 +-
.../lgsl_files/lgsl_class.php | 30 +-
Panel/modules/lgsl_with_img_mod/module.php | 8 +-
Panel/modules/litefm/SessionCheck.php | 8 +-
Panel/modules/litefm/fm_dir.php | 62 +-
Panel/modules/litefm/fm_read.php | 38 +-
Panel/modules/litefm/fm_write.php | 18 +-
Panel/modules/litefm/get_file.php | 32 +-
Panel/modules/litefm/litefm.php | 16 +-
Panel/modules/litefm/module.php | 6 +-
Panel/modules/litefm/monitor_buttons.php | 8 +-
Panel/modules/litefm/settings.php | 14 +-
Panel/modules/lostpwd/lostpwd.php | 48 +-
Panel/modules/lostpwd/module.php | 6 +-
Panel/modules/modulemanager/add_module.php | 8 +-
Panel/modules/modulemanager/delete_module.php | 8 +-
Panel/modules/modulemanager/module.php | 8 +-
.../modules/modulemanager/module_handling.php | 40 +-
Panel/modules/modulemanager/modulemanager.php | 26 +-
.../modules/modulemanager/update_modules.php | 10 +-
Panel/modules/mysql/edit_server.php | 112 +-
Panel/modules/mysql/get_dump.php | 22 +-
Panel/modules/mysql/module.php | 14 +-
.../modules/mysql/monitor_buttons.PHPMYADMIN | 8 +-
Panel/modules/mysql/monitor_buttons.php | 12 +-
Panel/modules/mysql/mysql_database.php | 48 +-
Panel/modules/mysql/mysqli_database.php | 48 +-
Panel/modules/mysql/servers.php | 90 +-
Panel/modules/mysql/user_db.php | 54 +-
Panel/modules/news/README.md | 2 +-
Panel/modules/news/admin.php | 2 +-
Panel/modules/news/index.php | 2 +-
Panel/modules/news/module.php | 6 +-
Panel/modules/news/upload.php | 8 +-
Panel/modules/rcon/module.php | 6 +-
Panel/modules/rcon/rcon.php | 26 +-
Panel/modules/register/captchakeys.php | 6 +-
Panel/modules/register/module.php | 6 +-
Panel/modules/register/register-exec.php | 50 +-
Panel/modules/register/register.php | 28 +-
Panel/modules/register/register_helpers.php | 6 +-
Panel/modules/reseller/account_details.php | 56 +-
Panel/modules/reseller/accounts.php | 54 +-
Panel/modules/reseller/add_to_cart.php | 34 +-
Panel/modules/reseller/assign_server.php | 134 +-
Panel/modules/reseller/bill.php | 42 +-
Panel/modules/reseller/cart.php | 118 +-
Panel/modules/reseller/cron-shop.php | 46 +-
Panel/modules/reseller/module.php | 36 +-
Panel/modules/reseller/paid-ipn.php | 42 +-
Panel/modules/reseller/paid.php | 4 +-
Panel/modules/reseller/paypal.php | 34 +-
Panel/modules/reseller/services.php | 104 +-
Panel/modules/reseller/settings.php | 14 +-
Panel/modules/reseller/shop.php | 44 +-
Panel/modules/server/add_server.php | 18 +-
Panel/modules/server/arrange_ports.php | 48 +-
Panel/modules/server/edit_server.php | 38 +-
Panel/modules/server/firewall.php | 20 +-
Panel/modules/server/module.php | 14 +-
Panel/modules/server/mon_stats.php | 22 +-
Panel/modules/server/reboot.php | 18 +-
Panel/modules/server/restart.php | 24 +-
Panel/modules/server/servers.php | 42 +-
Panel/modules/server/view_log.php | 14 +-
Panel/modules/settings/api_hosts.php | 40 +-
Panel/modules/settings/functions.php | 6 +-
Panel/modules/settings/module.php | 12 +-
Panel/modules/settings/settings.php | 44 +-
Panel/modules/settings/themes.php | 10 +-
Panel/modules/status/config.php | 6 +-
Panel/modules/status/include/bar.php | 6 +-
Panel/modules/status/include/cpu.php | 38 +-
Panel/modules/status/include/hdd.php | 8 +-
Panel/modules/status/include/os.php | 14 +-
Panel/modules/status/include/ram.php | 26 +-
Panel/modules/status/include/task.php | 8 +-
Panel/modules/status/include/uptime.php | 8 +-
Panel/modules/status/module.php | 6 +-
Panel/modules/status/status.php | 28 +-
.../functions.php | 44 +-
.../main.php | 80 +-
.../module.php | 6 +-
.../monitor_buttons.php | 6 +-
.../uninstall.php | 54 +-
.../workshop_admin.php | 62 +-
Panel/modules/steam_workshop/functions.php | 22 +-
Panel/modules/steam_workshop/main.php | 64 +-
Panel/modules/steam_workshop/module.php | 6 +-
.../steam_workshop/monitor_buttons.php | 6 +-
Panel/modules/steam_workshop/uninstall.php | 54 +-
.../modules/steam_workshop/workshop_admin.php | 42 +-
.../workshop_admin.php.bak.20260609-151211 | 62 +-
Panel/modules/subusers/add_subuser-exec.php | 28 +-
Panel/modules/subusers/add_subuser.php | 18 +-
Panel/modules/subusers/del_subuser.php | 38 +-
Panel/modules/subusers/module.php | 6 +-
Panel/modules/subusers/submanage.php | 18 +-
Panel/modules/support/module.php | 6 +-
Panel/modules/support/support.php | 20 +-
Panel/modules/teamspeak3/module.php | 6 +-
Panel/modules/tickets/downloadAttachment.php | 4 +-
Panel/modules/tickets/include/Attachments.php | 4 +-
.../tickets/include/TicketSettings.php | 8 +-
Panel/modules/tickets/include/ticket.php | 54 +-
Panel/modules/tickets/module.php | 42 +-
Panel/modules/tickets/notificationCount.php | 4 +-
Panel/modules/tickets/rating.php | 4 +-
Panel/modules/tickets/submitTicket.php | 8 +-
Panel/modules/tickets/supportTickets.php | 4 +-
Panel/modules/tickets/ticketSettings.php | 6 +-
Panel/modules/tickets/viewTicket.php | 6 +-
Panel/modules/tshock/bans.php | 20 +-
Panel/modules/tshock/create_token.php | 10 +-
Panel/modules/tshock/module.php | 10 +-
Panel/modules/tshock/server.php | 26 +-
Panel/modules/tshock/users.php | 24 +-
Panel/modules/update/blacklist.php | 58 +-
Panel/modules/update/module.php | 22 +-
Panel/modules/update/patch_manager.php | 8 +-
Panel/modules/update/post_update.php | 8 +-
Panel/modules/update/unzip.php | 6 +-
Panel/modules/update/update.php | 8 +-
Panel/modules/update/updating.php | 80 +-
Panel/modules/user_admin/add_group.php | 8 +-
Panel/modules/user_admin/add_to_group.php | 16 +-
Panel/modules/user_admin/add_user.php | 14 +-
Panel/modules/user_admin/del_from_group.php | 18 +-
Panel/modules/user_admin/del_group.php | 18 +-
Panel/modules/user_admin/del_user.php | 8 +-
Panel/modules/user_admin/edit_user.php | 36 +-
Panel/modules/user_admin/module.php | 46 +-
Panel/modules/user_admin/show_groups.php | 26 +-
Panel/modules/user_admin/show_users.php | 20 +-
Panel/modules/user_games/add_home.php | 50 +-
Panel/modules/user_games/add_home.php.org | 46 +-
Panel/modules/user_games/assign_home.php | 42 +-
.../user_games/billing_integration.php | 8 +-
Panel/modules/user_games/browser.php | 26 +-
Panel/modules/user_games/check_expire.php | 16 +-
Panel/modules/user_games/clone_home.php | 44 +-
Panel/modules/user_games/custom_fields.php | 48 +-
Panel/modules/user_games/del_home.php | 50 +-
Panel/modules/user_games/edit_home.php | 120 +-
Panel/modules/user_games/get_size.php | 8 +-
Panel/modules/user_games/home_mods.php | 40 +-
Panel/modules/user_games/install_cmds.php | 32 +-
Panel/modules/user_games/migrate_home.php | 20 +-
Panel/modules/user_games/module.php | 28 +-
Panel/modules/user_games/monitor_buttons.php | 8 +-
Panel/modules/user_games/show_homes.php | 24 +-
Panel/modules/util/addadmin_helper.php | 36 +-
Panel/modules/util/agents.php | 14 +-
Panel/modules/util/amx_addadmin_helper.php | 36 +-
Panel/modules/util/functions.php | 22 +-
Panel/modules/util/module.php | 6 +-
Panel/modules/util/network_tools.php | 22 +-
Panel/modules/util/steamid_converter.php | 8 +-
Panel/modules/util/util.php | 92 +-
Panel/modules/util/util_config.php | 16 +-
Panel/panel.conf | 30 +-
Panel/panel.sql | 598 ++++----
Panel/protocol/PROTOCOL_UPGRADE_REVIEW.md | 2 +-
Panel/protocol/TeamSpeak3/TS3Monitor.php | 14 +-
Panel/protocol/TeamSpeak3/functions.php | 36 +-
Panel/protocol/lgsl/lgsl_protocol.php | 66 +-
Panel/protocol/lgsl/lgsl_protocol.php.080723 | 66 +-
Panel/protocol/lgsl/lgsl_protocol.php.save.1 | 66 +-
Panel/protocol/lgsl/lgsl_protocol.php.save.2 | 66 +-
Panel/protocol/lgsl/lgsl_protocol.save | 12 +-
Panel/scripts/build_pdfs.py | 146 +-
Panel/scripts/quality_control.py | 116 +-
Panel/server_status.php | 36 +-
Panel/status_api.php | 18 +-
Panel/status_api_local.php.example | 2 +-
.../AdminLTE-2/dist/img/gsp_logo_light.svg | 4 +
.../AdminLTE-2/dist/img/ogp_logo_light.svg | 1 -
Panel/themes/AdminLTE-2/dist/js/main.js | 34 +-
Panel/themes/AdminLTE-2/dist/php/settings.php | 76 +-
.../AdminLTE-2/dist/php/theme.class.php | 220 +--
Panel/themes/AdminLTE-2/layout.html | 8 +-
.../AdminLTE-2/modules/administration/main.js | 20 +-
.../AdminLTE-2/modules/dashboard/dashboard.js | 138 +-
.../modules/gamemanager/game_monitor.js | 40 +-
.../AdminLTE-2/modules/litefm/litefm.js | 8 +-
.../AdminLTE-2/modules/mysql/mysql_admin.js | 12 +-
Panel/themes/AdminLTE-2/modules/server/add.js | 2 +-
.../AdminLTE-2/modules/settings/themes.js | 108 +-
.../modules/simple-billing/services.js | 2 +-
.../AdminLTE-2/modules/simple-billing/shop.js | 14 +-
.../modules/simple-billing/shop_guest.js | 18 +-
.../modules/steam_workshop/steam_workshop.js | 8 +-
.../AdminLTE-2/modules/update/blacklist.js | 8 +-
.../modules/user_admin/user_admin.js | 26 +-
.../AdminLTE/dist/img/gsp_logo_light.svg | 4 +
.../AdminLTE/dist/img/ogp_logo_light.svg | 1 -
Panel/themes/AdminLTE/dist/js/main.js | 34 +-
Panel/themes/AdminLTE/dist/php/settings.php | 76 +-
.../themes/AdminLTE/dist/php/theme.class.php | 222 +--
Panel/themes/AdminLTE/layout.html | 8 +-
.../AdminLTE/modules/administration/main.js | 20 +-
.../AdminLTE/modules/dashboard/dashboard.js | 138 +-
.../modules/gamemanager/game_monitor.js | 40 +-
.../themes/AdminLTE/modules/litefm/litefm.js | 8 +-
.../AdminLTE/modules/mysql/mysql_admin.js | 12 +-
Panel/themes/AdminLTE/modules/server/add.js | 2 +-
.../AdminLTE/modules/settings/themes.js | 108 +-
.../modules/simple-billing/services.js | 2 +-
.../AdminLTE/modules/simple-billing/shop.js | 14 +-
.../modules/simple-billing/shop_guest.js | 18 +-
.../modules/steam_workshop/steam_workshop.js | 8 +-
.../AdminLTE/modules/update/blacklist.js | 8 +-
.../AdminLTE/modules/user_admin/user_admin.js | 26 +-
.../Evolution/modules/evolution/evolution.css | 322 ++---
Panel/themes/MasterControlProgram/README.md | 10 +-
Panel/themes/MasterControlProgram/bottom.html | 2 +-
.../themes/MasterControlProgram/css/main.css | 26 +-
Panel/themes/Obsidian/config/config.php | 22 +-
Panel/themes/Obsidian/upload/get.php | 2 +-
Panel/themes/Obsidian/upload/remove.php | 2 +-
Panel/themes/Obsidian/upload/upload.php | 16 +-
Panel/themes/Revolution-Light/bottom.html | 54 +-
Panel/themes/SimpleBootstrap/css/main.css | 6 +-
Panel/tools/generate_server_guides.py | 162 +--
README.md | 4 +-
docs/AGENT_COMMUNICATION.md | 4 +-
docs/ARCHITECTURE.md | 2 +-
docs/COMMAND_FLOW.md | 2 +-
docs/agents/LINUX_AGENT.md | 18 +-
docs/agents/WINDOWS_AGENT.md | 73 +-
docs/architecture/API_REFERENCE.md | 28 +-
docs/architecture/LIBRARY_REFERENCE.md | 8 +-
docs/architecture/MODULE_DEPENDENCIES.md | 14 +-
docs/architecture/PANEL_AGENT_COMMANDS.md | 14 +-
docs/architecture/PANEL_AGENT_FLOW.md | 4 +-
docs/architecture/REPOSITORY_OVERVIEW.md | 6 +-
docs/architecture/RPC_STATUS_REPAIR_REPORT.md | 12 +-
.../2026-07-02-1631-lifecycle-hardening.md | 134 ++
docs/decisions/COMPANION_PROGRAMS_DESIGN.md | 26 +-
docs/decisions/SCHEDULER_ACTIONS_DESIGN.md | 10 +-
docs/decisions/STEAM_WORKSHOP_DESIGN.md | 12 +-
docs/development/CODEX_GUIDE.md | 18 +-
.../GSP_PLATFORM_IMPROVEMENT_REPORT.md | 8 +-
docs/features/COMPANION_PROGRAMS.md | 12 +-
docs/features/COMPETITOR_COMPARISON.md | 2 +-
docs/features/INSTALLERS.md | 22 +-
docs/features/LOGGING_SYSTEM.md | 4 +-
docs/features/SCHEDULER_ACTIONS.md | 22 +-
docs/features/SCHEDULER_SYSTEM.md | 4 +-
docs/features/STATUS_SYSTEM.md | 6 +-
docs/features/USER_API.md | 22 +-
docs/modules/GAMEMANAGER.md | 2 +-
docs/modules/SCHEDULER.md | 8 +-
1190 files changed, 12636 insertions(+), 12476 deletions(-)
rename Panel/{ogp_api.php => gsp_api.php} (92%)
rename Panel/modules/faq/{ogpfaq.rss => gspfaq.rss} (55%)
create mode 100644 Panel/themes/AdminLTE-2/dist/img/gsp_logo_light.svg
delete mode 100644 Panel/themes/AdminLTE-2/dist/img/ogp_logo_light.svg
create mode 100644 Panel/themes/AdminLTE/dist/img/gsp_logo_light.svg
delete mode 100644 Panel/themes/AdminLTE/dist/img/ogp_logo_light.svg
create mode 100644 docs/codex-history/2026/2026-07-02-1631-lifecycle-hardening.md
diff --git a/.github/agent.md b/.github/agent.md
index cbd80475..51e90a11 100644
--- a/.github/agent.md
+++ b/.github/agent.md
@@ -4,7 +4,7 @@
**Prime directive:** Read this document first. Keep `.github/agent.md` identical to this file—any edit here must be mirrored there in the same commit.
## Workspace deliverables (WDS 2025 refresh)
-- Use the GSP/WDS/GSW branding across UI, docs, and comments; when heritage context matters add: “GSP is a heavily customized fork of OGP maintained by WDS.”
+- Use the GSP/WDS/GSW branding across UI, docs, and comments; when heritage context matters add: “GSP is a heavily customized fork of GSP maintained by WDS.”
- Keep `bootstrap/` current: Ubuntu 24.04 panel + agent installers, Windows Server 2019 (Cygwin) agent installer + service wrapper, and the optional `docker/compose.yml` dev stack. All scripts must be idempotent, echo next steps, and document verify/rollback procedures in their README files.
- Author and maintain admin-only docs in `WDS_Website/content/projects/gsp.md` and `content/docs/gsp/*` (front-matter + the **Admin Documentation** banner). Cross-link these guides from panel features that need deep dives.
- Refresh user-facing help in `Panel/modules/faq/` (RSS + UI) so the seven core topics—panel basics, file browser, Adminer/MySQL, FTP/SFTP, task scheduler, sub-users, and support—link to the latest WDS admin docs.
@@ -48,7 +48,7 @@ header('Location: /modules/billing/cart.php');
- `Website/` – storefront runtime, payment handlers, provisioning bridge.
- `Panel/modules/config_games/server_configs/` – authoritative XML metadata for every supported game.
- `Panel/modules/` – control-panel modules.
-- `Panel/includes/` & `Panel/ogp_api.php` – database layer, shared helpers, remote agent operations.
+- `Panel/includes/` & `Panel/gsp_api.php` – database layer, shared helpers, remote agent operations.
## 2) Planning mode (default)
While scoping multi-file work, do **not** emit PHP/SQL/XML or run shell commands unless a maintainer explicitly says “Generate code now.” Plans should cover:
@@ -57,14 +57,14 @@ While scoping multi-file work, do **not** emit PHP/SQL/XML or run shell commands
- Risks, rollback notes, validation/tests.
## 3) Scope & principles
-- **Single session across panel + storefront.** Every billing page must call `session_name('opengamepanel_web')` before `session_start()`. Always keep `$_SESSION['user_id']`, `$_SESSION['users_login']`, `$_SESSION['users_group']`, and `$_SESSION['website_user_id']` in sync so that logging into either surface signs the visitor into both.
+- **Single session across panel + storefront.** Every billing page must call `session_name('gameserverpanel_web')` before `session_start()`. Always keep `$_SESSION['user_id']`, `$_SESSION['users_login']`, `$_SESSION['users_group']`, and `$_SESSION['website_user_id']` in sync so that logging into either surface signs the visitor into both.
- **Auth reuse.** Preferred order when verifying credentials: `users_pass_hash` (modern hash) → legacy `users_passwd` (MD5). Upgrading to a modern hash is allowed so long as panel logins keep working.
-- **Bridge for panel helpers.** Use `Website/includes/panel_bridge.php` to load panel classes (`OGPDatabase`, `OGPRemoteLibrary`, XML parsers) when the storefront needs to provision servers or read panel-only metadata. Do not reinvent ad-hoc copies of panel logic.
-- **Storefront runtime.** Public pages continue to use mysqli with credentials from `Website/includes/config.inc.php`. Provisioning steps may request an `OGPDatabase` handle from the bridge.
+- **Bridge for panel helpers.** Use `Website/includes/panel_bridge.php` to load panel classes (`GSPDatabase`, `GSPRemoteLibrary`, XML parsers) when the storefront needs to provision servers or read panel-only metadata. Do not reinvent ad-hoc copies of panel logic.
+- **Storefront runtime.** Public pages continue to use mysqli with credentials from `Website/includes/config.inc.php`. Provisioning steps may request an `GSPDatabase` handle from the bridge.
- **Provisioning pipeline.** Always funnel server creation or renewals through the shared provisioner (`Website/includes/provisioner.php`). This helper wraps the old `create_servers.php` logic and ensures PayPal captures, cron jobs, and panel clicks all follow the same code path.
- **Catalog = XML.** Never hardcode game metadata. Parse `Panel/modules/config_games/server_configs/*.xml` at runtime; new XMLs must show up automatically.
- **Regions/Nodes = live DB.** Pull nodes/locations from the panel DB (`gsp_remote_servers`, etc.). Respect admin enable/disable flags and never mirror node lists into flat files.
-- **Game XML wiki parity.** We ship a PHP-rendered version of https://github.com/OpenGamePanel/OGP-Website/wiki/XML-Notes inside `Website/` (linked from the storefront admin area). Keep it updated so maintainers can edit XMLs without leaving the repo.
+- **Game XML wiki parity.** We ship a PHP-rendered version of https://github.com/GameServerPanel/GSP-Panel/wiki/XML-Notes inside `Website/` (linked from the storefront admin area). Keep it updated so maintainers can edit XMLs without leaving the repo.
## 4) Functional requirements
### 4.1 Catalog (from XML)
diff --git a/.github/copilot-instructions.md b/.github/copilot-instructions.md
index cbd80475..51e90a11 100644
--- a/.github/copilot-instructions.md
+++ b/.github/copilot-instructions.md
@@ -4,7 +4,7 @@
**Prime directive:** Read this document first. Keep `.github/agent.md` identical to this file—any edit here must be mirrored there in the same commit.
## Workspace deliverables (WDS 2025 refresh)
-- Use the GSP/WDS/GSW branding across UI, docs, and comments; when heritage context matters add: “GSP is a heavily customized fork of OGP maintained by WDS.”
+- Use the GSP/WDS/GSW branding across UI, docs, and comments; when heritage context matters add: “GSP is a heavily customized fork of GSP maintained by WDS.”
- Keep `bootstrap/` current: Ubuntu 24.04 panel + agent installers, Windows Server 2019 (Cygwin) agent installer + service wrapper, and the optional `docker/compose.yml` dev stack. All scripts must be idempotent, echo next steps, and document verify/rollback procedures in their README files.
- Author and maintain admin-only docs in `WDS_Website/content/projects/gsp.md` and `content/docs/gsp/*` (front-matter + the **Admin Documentation** banner). Cross-link these guides from panel features that need deep dives.
- Refresh user-facing help in `Panel/modules/faq/` (RSS + UI) so the seven core topics—panel basics, file browser, Adminer/MySQL, FTP/SFTP, task scheduler, sub-users, and support—link to the latest WDS admin docs.
@@ -48,7 +48,7 @@ header('Location: /modules/billing/cart.php');
- `Website/` – storefront runtime, payment handlers, provisioning bridge.
- `Panel/modules/config_games/server_configs/` – authoritative XML metadata for every supported game.
- `Panel/modules/` – control-panel modules.
-- `Panel/includes/` & `Panel/ogp_api.php` – database layer, shared helpers, remote agent operations.
+- `Panel/includes/` & `Panel/gsp_api.php` – database layer, shared helpers, remote agent operations.
## 2) Planning mode (default)
While scoping multi-file work, do **not** emit PHP/SQL/XML or run shell commands unless a maintainer explicitly says “Generate code now.” Plans should cover:
@@ -57,14 +57,14 @@ While scoping multi-file work, do **not** emit PHP/SQL/XML or run shell commands
- Risks, rollback notes, validation/tests.
## 3) Scope & principles
-- **Single session across panel + storefront.** Every billing page must call `session_name('opengamepanel_web')` before `session_start()`. Always keep `$_SESSION['user_id']`, `$_SESSION['users_login']`, `$_SESSION['users_group']`, and `$_SESSION['website_user_id']` in sync so that logging into either surface signs the visitor into both.
+- **Single session across panel + storefront.** Every billing page must call `session_name('gameserverpanel_web')` before `session_start()`. Always keep `$_SESSION['user_id']`, `$_SESSION['users_login']`, `$_SESSION['users_group']`, and `$_SESSION['website_user_id']` in sync so that logging into either surface signs the visitor into both.
- **Auth reuse.** Preferred order when verifying credentials: `users_pass_hash` (modern hash) → legacy `users_passwd` (MD5). Upgrading to a modern hash is allowed so long as panel logins keep working.
-- **Bridge for panel helpers.** Use `Website/includes/panel_bridge.php` to load panel classes (`OGPDatabase`, `OGPRemoteLibrary`, XML parsers) when the storefront needs to provision servers or read panel-only metadata. Do not reinvent ad-hoc copies of panel logic.
-- **Storefront runtime.** Public pages continue to use mysqli with credentials from `Website/includes/config.inc.php`. Provisioning steps may request an `OGPDatabase` handle from the bridge.
+- **Bridge for panel helpers.** Use `Website/includes/panel_bridge.php` to load panel classes (`GSPDatabase`, `GSPRemoteLibrary`, XML parsers) when the storefront needs to provision servers or read panel-only metadata. Do not reinvent ad-hoc copies of panel logic.
+- **Storefront runtime.** Public pages continue to use mysqli with credentials from `Website/includes/config.inc.php`. Provisioning steps may request an `GSPDatabase` handle from the bridge.
- **Provisioning pipeline.** Always funnel server creation or renewals through the shared provisioner (`Website/includes/provisioner.php`). This helper wraps the old `create_servers.php` logic and ensures PayPal captures, cron jobs, and panel clicks all follow the same code path.
- **Catalog = XML.** Never hardcode game metadata. Parse `Panel/modules/config_games/server_configs/*.xml` at runtime; new XMLs must show up automatically.
- **Regions/Nodes = live DB.** Pull nodes/locations from the panel DB (`gsp_remote_servers`, etc.). Respect admin enable/disable flags and never mirror node lists into flat files.
-- **Game XML wiki parity.** We ship a PHP-rendered version of https://github.com/OpenGamePanel/OGP-Website/wiki/XML-Notes inside `Website/` (linked from the storefront admin area). Keep it updated so maintainers can edit XMLs without leaving the repo.
+- **Game XML wiki parity.** We ship a PHP-rendered version of https://github.com/GameServerPanel/GSP-Panel/wiki/XML-Notes inside `Website/` (linked from the storefront admin area). Keep it updated so maintainers can edit XMLs without leaving the repo.
## 4) Functional requirements
### 4.1 Catalog (from XML)
diff --git a/.github/module-map.md b/.github/module-map.md
index f5fa0d71..1785be60 100644
--- a/.github/module-map.md
+++ b/.github/module-map.md
@@ -6,16 +6,16 @@ This file captures how the control panel, storefront, agents, and helper scripts
| Area | Key files | Responsibilities | Downstream callers |
| --- | --- | --- | --- |
-| Database bootstrap | `Panel/includes/functions.php`, `Panel/includes/database_mysqli.php` | Creates the `OGPDatabase` instance and exposes helpers such as `resultQuery()`, `addGameHome()`, and logging. | Every panel page, `Website/Website/includes/panel_bridge.php`, cron jobs. |
-| Session helpers | `includes/helpers.php` (`startSession()`) | Sets `session_name('opengamepanel_web')`, sanitizes request vars, loads locales. | `index.php`, `home.php`, provisioning pages, storefront session bridge. |
+| Database bootstrap | `Panel/includes/functions.php`, `Panel/includes/database_mysqli.php` | Creates the `GSPDatabase` instance and exposes helpers such as `resultQuery()`, `addGameHome()`, and logging. | Every panel page, `Website/Website/includes/panel_bridge.php`, cron jobs. |
+| Session helpers | `includes/helpers.php` (`startSession()`) | Sets `session_name('gameserverpanel_web')`, sanitizes request vars, loads locales. | `index.php`, `home.php`, provisioning pages, storefront session bridge. |
| Remote control | `Panel/includes/lib_remote.php` | Wraps agent RPC (install/update, FTP user management, rsync, SteamCMD). | `Panel/modules/gamemanager/*`, `Website/create_servers.php`, cron jobs. |
| XML parser | `Panel/modules/config_games/server_config_parser.php` | Converts `Panel/modules/config_games/server_configs/*.xml` into PHP arrays used for provisioning and pricing metadata. | `Panel/modules/gamemanager`, `Website/` (catalog + provisioner), cron installers. |
-| API surface | `ogp_api.php`, `includes/api_functions.php` | HTTP API for third-party tooling. Exposes operations such as starting/stopping homes, querying stats. | Mobile apps, automated provisioning, selected billing workflows. |
+| API surface | `gsp_api.php`, `includes/api_functions.php` | HTTP API for third-party tooling. Exposes operations such as starting/stopping homes, querying stats. | Mobile apps, automated provisioning, selected billing workflows. |
| Cron/automation | `scripts/` (`cron-shop.php`, `status/*`, etc.) | Suspends/unsuspends services, refreshes status caches, runs backups. | Triggered via system cron or panel scheduler. |
## High-level flows
-1. **Auth/session** – Driven by `index.php` (panel) and `Website/login.php` (storefront). Both set `$_SESSION['user_id']`, `users_login`, `users_group`, and `website_user_id`. The shared session cookie `opengamepanel_web` means logging into either surface immediately authenticates the other.
+1. **Auth/session** – Driven by `index.php` (panel) and `Website/login.php` (storefront). Both set `$_SESSION['user_id']`, `users_login`, `users_group`, and `website_user_id`. The shared session cookie `gameserverpanel_web` means logging into either surface immediately authenticates the other.
2. **Catalog** – `modules/config_games` hosts XML definitions. Panel modules (`gamemanager`, `config_games`) and storefront pages (`serverlist.php`, `order.php`, documentation pages, and the XML-notes mirror) parse these files for display and provisioning metadata.
3. **Provisioning** – Orders land in `gsp_billing_orders`. `Website/create_servers.php` allocates homes, assigns nodes/IPs, configures mods, kicks off SteamCMD/rsync/manual installers, and then syncs the resulting `home_id` back into `billing_orders`, `billing_invoices`, and `billing_transactions` so paid services never stay orphaned. The same provisioner is invoked by:
- PayPal capture endpoint (`Website/api/capture_order.php`).
@@ -40,14 +40,14 @@ This file captures how the control panel, storefront, agents, and helper scripts
| `extras`, `addonsmanager` | Workshop/add-on management. Server Content workshop installs now share validation/runtime helpers across admin, user, and API flows, and sync bundled workshop scripts into each home’s `gsp_server_content/scripts/workshop/` directory before execution. | Hooks into game homes after provisioning and uses agent-side SteamCMD copy/install workflows. |
| `litefm`, `ftp`, `TS3Admin` | File managers and TeamSpeak controllers. | Depend on homes and remote server credentials set during provisioning. |
| `news`, `circular`, `faq` | Content modules for panel UI. | Use standard MVC wrappers, share session/auth. |
-| `cron` | Scheduler UI feeding `scripts/` commands. | Maintains job metadata that OS cron reads, including scheduler-triggered Server Content actions via `ogp_api.php?server_content/run_scheduled_action` and `modules/addonsmanager/server_content_actions.php`. |
+| `cron` | Scheduler UI feeding `scripts/` commands. | Maintains job metadata that OS cron reads, including scheduler-triggered Server Content actions via `gsp_api.php?server_content/run_scheduled_action` and `modules/addonsmanager/server_content_actions.php`. |
## Storefront (`Panel/modules/billing` runtime + `Website/` compatibility wrappers)
| Area | Key files | Notes |
| --- | --- | --- |
| Public pages | `Panel/modules/billing/index.php`, `serverlist.php`, `order.php`, `cart.php`, `payment_success.php`, `docs.php` | Runtime now lives under `Panel/modules/billing`. `Website/*.php` wrappers proxy legacy paths to these files. |
-| Auth | `Panel/modules/billing/login.php`, `register.php`, `reset_password.php`, `forgot_password.php`, `includes/login_required.php`, `includes/admin_auth.php` | Share `opengamepanel_web` session, call into panel DB to validate roles. |
+| Auth | `Panel/modules/billing/login.php`, `register.php`, `reset_password.php`, `forgot_password.php`, `includes/login_required.php`, `includes/admin_auth.php` | Share `gameserverpanel_web` session, call into panel DB to validate roles. |
| Admin | `Panel/modules/billing/admin.php`, `adminserverlist.php`, `admin_orders.php`, `admin_coupons.php`, `admin_config.php`, `my_orders_panel.php` | Manage services, coupons, prices, and provisioning. `adminserverlist.php` controls service availability per node. |
| PayPal API | `Panel/modules/billing/api/create_order.php`, `api/capture_order.php`, `paypal/webhook.php`, `logs/payment_capture.log` | Implements REST checkout. Legacy `Website/api/*` and `Website/paypal/webhook.php` wrappers proxy to module runtime. |
| Provisioning bridge | `Panel/modules/billing/create_servers.php`, `includes/provisioner.php`, `includes/panel_bridge.php` | Shared between panel module and storefront backend. Encapsulates whole server creation/renewal pipeline. |
@@ -67,11 +67,11 @@ This file captures how the control panel, storefront, agents, and helper scripts
- **Users** – `gsp_users` table is shared. Registration uses `Website/register.php`, admin pages use `Panel/modules/user_admin`. Password upgrades must not break panel logins.
- **Billing tables** – `gsp_billing_services`, `gsp_billing_orders`, `gsp_billing_invoices`, `gsp_billing_coupons`. Admin edits (pricing, enable/disable, locations) are done via `adminserverlist.php`; automation uses `cron-shop.php`.
- **Homes/Mods/IPs** – Stored in `gsp_game_homes`, `gsp_game_mods`, `gsp_remote_server_ips`. Provisioner writes to these tables; `gamemanager`, `litefm`, `ftp`, and `user_games` read them.
-- **Logging** – `$db->logger()` writes to `ogp_logs`. Storefront-specific logs live in `Website/logs/` for quick inspection (payment capture, provisioning outcomes, coupon usage).
+- **Logging** – `$db->logger()` writes to `gsp_logs`. Storefront-specific logs live in `Website/logs/` for quick inspection (payment capture, provisioning outcomes, coupon usage).
## Usage tips
-1. **Need a DB object inside `Website/`?** Include `Website/includes/panel_bridge.php` and call `billing_get_panel_db()`. It sets up constants, loads helpers, and caches the `OGPDatabase` instance so multi-call flows (e.g., capture → provision → email) reuse it.
+1. **Need a DB object inside `Website/`?** Include `Website/includes/panel_bridge.php` and call `billing_get_panel_db()`. It sets up constants, loads helpers, and caches the `GSPDatabase` instance so multi-call flows (e.g., capture → provision → email) reuse it.
2. **Want to change provisioning?** Update `Website/includes/provisioner.php` once. `create_servers.php`, PayPal webhooks, cron jobs, and admin repair flows all use it.
3. **Working on XML or documentation?** Update the XML file under `Panel/modules/config_games/server_configs/`, regenerate docs if needed, and keep the PHP XML-notes mirror (`Website/docs/xml_notes.php`) accurate so the admin link stays trustworthy.
4. **Need to know who uses a table?** Search `.github/module-map.md` first; the table above lists the canonical readers/writers for each major schema.
diff --git a/LAST_UPDATE.txt b/LAST_UPDATE.txt
index bed3d4c1..457ac84a 100644
--- a/LAST_UPDATE.txt
+++ b/LAST_UPDATE.txt
@@ -12,7 +12,7 @@ Updated files:
- Panel/modules/addonsmanager/server_content_categories.php
- Panel/modules/addonsmanager/server_content_helpers.php
- Panel/modules/addonsmanager/workshop_action.php
-- Panel/ogp_api.php
+- Panel/gsp_api.php
- Panel/CHANGELOG.md
- Panel/docs/COPILOT_TODO.md
- .github/module-map.md
diff --git a/Panel/APACHE_SETUP.md b/Panel/APACHE_SETUP.md
index f392531b..568afe3d 100644
--- a/Panel/APACHE_SETUP.md
+++ b/Panel/APACHE_SETUP.md
@@ -5,7 +5,7 @@ This directory contains Apache virtual host configuration files for deploying th
## Configuration Files
### 1. panel.conf
-Configuration for the main Open Game Panel dashboard.
+Configuration for the main GameServer Panel dashboard.
- **Domain**: panel.yourdomain.com
- **Document Root**: /var/www/GSP
- **Purpose**: Main panel interface for server management
@@ -15,7 +15,7 @@ Configuration for the GameServers.World storefront website.
- **Domain**: gameservers.world
- **Document Root**: /var/www/GSP/_website
- **Purpose**: Customer-facing storefront for ordering game servers
-- **Features**:
+- **Features**:
- Separate session handling
- Protected includes and data directories
- Static asset caching
@@ -190,7 +190,7 @@ sudo tail -f /var/log/apache2/error.log # Ubuntu/Debian
sudo tail -f /var/log/httpd/error_log # CentOS/RHEL
# Site-specific logs
-sudo tail -f /var/log/apache2/ogp-panel-error.log
+sudo tail -f /var/log/apache2/gsp-panel-error.log
sudo tail -f /var/log/apache2/gameservers-website-error.log
sudo tail -f /var/log/apache2/fileserver-error.log
```
@@ -227,4 +227,4 @@ For issues specific to:
## License
-These configuration files are part of the Open Game Panel project and follow the same license as the main project.
+These configuration files are part of the GameServer Panel project and follow the same license as the main project.
diff --git a/Panel/CHANGELOG.md b/Panel/CHANGELOG.md
index e472e15b..e9ef554e 100644
--- a/Panel/CHANGELOG.md
+++ b/Panel/CHANGELOG.md
@@ -33,7 +33,7 @@
- **Auto-install trigger + monthly-only billing pricing:** Refactored Game Monitor update/install into a shared callable (`modules/gamemanager/update_actions.php`) reused by billing provisioning so new paid/free/admin-created homes auto-trigger the same install/update path used by `m=gamemanager&p=update&update=refresh` without manual clicks. Billing now treats monthly pricing (`price_monthly`) as canonical across admin service config, add-to-cart, free checkout, PayPal capture, and provisioning end-date math (31-day months), while preserving legacy daily/yearly columns for backward compatibility.
- **LiteFM PHP 8.3 compatibility and install-pending UX:** Removed deprecated `${var}` interpolation usage, guarded missing `fm_cwd_*` session keys and `dirname()` null paths, and replaced directory-not-found warning output with a clear message when server files are not installed yet.
- **Provisioning + billing admin UX reliability pass:** Hardened automatic server provisioning to reserve ports from `arrange_ports` (exact `home_cfg_id`, then `home_cfg_id=0` fallback), prevent duplicate `home_ip_ports` assignment, keep order/invoice/home linkage intact even when install is pending, and apply safe default mod resolution so base installs are not blocked by missing explicit mod choices. Refreshed billing admin service management with row-level save actions, sortable columns (including Game Name enabled-first toggle), clearer save feedback, cleaner unstable-update caution styling, login theme polish, and updated storefront timestamp footer metadata.
-- **Steam Workshop reliability + UI simplification:** Removed customer CLI/update scripting instructions from Workshop user flow, reduced per-server behavior options to supported modes only, switched remaining Steam Workshop SQL references to prefix helpers (no `OGP_DB_PREFIX` strings), hardened queued-update agent processing (`queued → updating → installed/failed`) with clearer error persistence, and refreshed monitor/support documentation links to open game-specific docs (fallback to docs index) in a new tab.
+- **Steam Workshop reliability + UI simplification:** Removed customer CLI/update scripting instructions from Workshop user flow, reduced per-server behavior options to supported modes only, switched remaining Steam Workshop SQL references to prefix helpers (no `GSP_DB_PREFIX` strings), hardened queued-update agent processing (`queued → updating → installed/failed`) with clearer error persistence, and refreshed monitor/support documentation links to open game-specific docs (fallback to docs index) in a new tab.
- **Billing docs routing refresh:** Updated docs browser links/icons to root-relative storefront paths (`/docs.php`, `/docs/...`) and removed stale hardcoded panel host guidance from getting-started documentation.
## 2026-05-07
@@ -57,11 +57,11 @@
- **Billing checkout — SQL migration:** Added `sql/002_billing_checkout_fixes.sql` — idempotent migration that adds `coupon_id`, `discount_amount`, `payment_status`, `subtotal`, and `total_due` columns to `gsp_billing_invoices`, and `coupon_id`/`discount_amount` to `gsp_billing_orders` for older installations missing these columns.
- **Billing order status standardization:** Canonical `billing_orders.status` values are now `Active`, `Invoiced`, and `Expired` only. All old writes of `installed`, `paid` (as order status), and `suspended` have been replaced. A SQL migration script `modules/billing/sql/normalize_billing_order_status.sql` converts any existing legacy rows. Backward-compatibility read paths (e.g. renewable-status checks in `my_account.php`) are preserved until the migration runs.
- **Expiration display date-only:** The billing expiration shown on the game server monitor (`server_monitor.php`) now displays as `YYYY-MM-DD` only instead of `YYYY-MM-DD HH:MM`.
-- **Full-day expiration grace rule:** A server whose `end_date` falls on today is treated as active for the entire calendar day. Expiration is only processed starting the next calendar day. This rule is applied consistently in: billing cron (`cron-shop.php` Steps B and C), the server monitor expiration helper (`home_handling_functions.php::get_server_billing_expiration_html`), and the OGP user/group assignment expiration processor (`user_games/check_expire.php`). All comparisons now use `DATE(end_date) < CURDATE()` (SQL) or `< strtotime(date('Y-m-d'))` (PHP) — never `<= NOW()` or `<= time()`.
+- **Full-day expiration grace rule:** A server whose `end_date` falls on today is treated as active for the entire calendar day. Expiration is only processed starting the next calendar day. This rule is applied consistently in: billing cron (`cron-shop.php` Steps B and C), the server monitor expiration helper (`home_handling_functions.php::get_server_billing_expiration_html`), and the GSP user/group assignment expiration processor (`user_games/check_expire.php`). All comparisons now use `DATE(end_date) < CURDATE()` (SQL) or `< strtotime(date('Y-m-d'))` (PHP) — never `<= NOW()` or `<= time()`.
- **GSP 1.0 baseline:** Reset all bundled/core module versions to `1.0`. DB schema versions (`$db_version`) are unchanged.
-- **FAQ module refresh:** Restored online RSS update code from upstream (opengamepanel.org), fixed `$local = false` initialization bug, switched local cache to `ogpfaq.rss`, added PHP 8.3-compatible `(array)` casts, restored upstream credits footer, and opened `navigation.xml` access to `user,admin,subuser`.
+- **FAQ module refresh:** Restored online RSS update code from upstream (gameserverpanel.org), fixed `$local = false` initialization bug, switched local cache to `gspfaq.rss`, added PHP 8.3-compatible `(array)` casts, restored upstream credits footer, and opened `navigation.xml` access to `user,admin,subuser`.
- **Config XML editor improvements:** Added schema validation before save (both structured editor and raw XML path); invalid XML is rejected with line-level error messages instead of being written to disk. Added auto-restore from backup on validation failure. Fields are now displayed in schema-defined order with required/optional badges. Added a raw XML editing panel with validation warning. Unknown/custom XML fields are preserved when only specific nodes are modified.
- **Obsidian theme:** Added `themes/Obsidian/` from `hmrserver/Obsidian`. The theme is immediately selectable in the panel theme settings.
diff --git a/Panel/IMPLEMENTATION_COMPLETE.md b/Panel/IMPLEMENTATION_COMPLETE.md
index d799a379..0a9e1b7f 100644
--- a/Panel/IMPLEMENTATION_COMPLETE.md
+++ b/Panel/IMPLEMENTATION_COMPLETE.md
@@ -2,8 +2,8 @@
## Task: Fix PayPal Order Error & Implement Coupon System
-**Date**: October 29, 2025
-**Status**: ✅ COMPLETE
+**Date**: October 29, 2025
+**Status**: ✅ COMPLETE
**Branch**: `copilot/fix-paypal-order-error`
## Problems Solved
@@ -14,13 +14,13 @@
```
Error: Unexpected end of JSON input
-[29-Oct-2025 10:30:12 UTC] PHP Fatal error: Failed opening required
+[29-Oct-2025 10:30:12 UTC] PHP Fatal error: Failed opening required
'/home/domainpl/gameservers.world/api/../../../includes/database_mysqli.php'
```
**Root Cause**: The billing module was trying to use panel database helper functions that don't exist when deployed on a separate web server.
-**Solution**:
+**Solution**:
- Removed all `require_once` statements referencing panel files
- Replaced `createDatabaseConnection()` with native `mysqli_connect()`
- Created standalone `config.inc.php` for database credentials
@@ -35,7 +35,7 @@ Error: Unexpected end of JSON input
The billing module can now operate completely independently:
- ✅ Can be deployed on same server as panel
-- ✅ Can be deployed on external web host
+- ✅ Can be deployed on external web host
- ✅ Only requires MySQL connection credentials
- ✅ No dependencies on panel PHP files
- ✅ Uses `gameservers_website` session namespace (separate from panel)
@@ -59,7 +59,7 @@ Implemented full-featured discount coupon system:
**Example Use Cases**:
-1. **New Customer Welcome**:
+1. **New Customer Welcome**:
- Code: `WELCOME10`
- Type: One-time
- Discount: 10%
@@ -93,13 +93,13 @@ Implemented full-featured discount coupon system:
### Database Changes
-**New Table**: `ogp_billing_coupons`
+**New Table**: `gsp_billing_coupons`
- 14 columns including coupon_id, code, discount_percent, usage_type, game_filter_list, etc.
- Indexes on code (unique), active status, expiration
**Modified Tables**:
-- `ogp_billing_invoices`: Added `coupon_id`, `discount_amount`
-- `ogp_billing_orders`: Added `coupon_id`, `discount_amount`
+- `gsp_billing_invoices`: Added `coupon_id`, `discount_amount`
+- `gsp_billing_orders`: Added `coupon_id`, `discount_amount`
## Quality Assurance
@@ -210,7 +210,7 @@ If issues occur:
Suggested features for future development:
- Fixed-amount coupons
-- Minimum purchase requirements
+- Minimum purchase requirements
- User-specific or group-specific coupons
- Referral system integration
- Coupon analytics dashboard
@@ -249,7 +249,7 @@ Suggested features for future development:
1. ✅ Fixed PayPal "Unexpected end of JSON input" error
2. ✅ Made billing module truly standalone
3. ✅ Implemented comprehensive coupon system
-4. ✅ Admin interface for coupon management
+4. ✅ Admin interface for coupon management
5. ✅ Cart integration with real-time updates
6. ✅ One-time and permanent discount types
7. ✅ Game-specific filtering
@@ -261,7 +261,7 @@ The implementation is production-ready, well-documented, and security-validated.
---
-**Completed By**: GitHub Copilot Agent
-**Review Status**: Code review passed, no issues
-**Security Status**: CodeQL scan passed, no vulnerabilities
+**Completed By**: GitHub Copilot Agent
+**Review Status**: Code review passed, no issues
+**Security Status**: CodeQL scan passed, no vulnerabilities
**Ready for Merge**: ✅ YES
diff --git a/Panel/IMPLEMENTATION_NOTES.md b/Panel/IMPLEMENTATION_NOTES.md
index febb2156..f99b36c2 100644
--- a/Panel/IMPLEMENTATION_NOTES.md
+++ b/Panel/IMPLEMENTATION_NOTES.md
@@ -65,11 +65,11 @@ This implementation adds password reset functionality, user server management, i
## Database Tables Created
-### ogp_password_reset_tokens
+### gsp_password_reset_tokens
Stores password reset tokens with expiration and usage tracking.
```sql
-CREATE TABLE ogp_password_reset_tokens (
+CREATE TABLE gsp_password_reset_tokens (
id INT AUTO_INCREMENT PRIMARY KEY,
user_id INT NOT NULL,
token VARCHAR(64) NOT NULL,
@@ -81,11 +81,11 @@ CREATE TABLE ogp_password_reset_tokens (
)
```
-### ogp_server_status
+### gsp_server_status
Stores server infrastructure status and metrics.
```sql
-CREATE TABLE ogp_server_status (
+CREATE TABLE gsp_server_status (
status_id INT AUTO_INCREMENT PRIMARY KEY,
remote_server_id INT NOT NULL,
server_name VARCHAR(255) NOT NULL,
@@ -257,17 +257,17 @@ Before deploying to production:
All requirements from the problem statement have been addressed:
-✅ **Password reset on login page** - Added "Forgot Password?" link and complete workflow
-✅ **Password reset via username or email** - Both methods supported
-✅ **Email password reset link** - Implemented with email sending
-✅ **Reset password page** - Created with token validation
-✅ **Fix order page images** - Changed to use ../ prefix
-✅ **Server list "Order Now" as button** - Styled as gradient button
-✅ **My servers page** - Shows active servers with expiration and renewal
-✅ **Server status page** - Created with database table
-✅ **Server status link in footer** - Added
-✅ **Apache configs** - All three created (panel, website, fileserver)
-✅ **Documentation** - APACHE_SETUP.md and FEATURES.md created
+✅ **Password reset on login page** - Added "Forgot Password?" link and complete workflow
+✅ **Password reset via username or email** - Both methods supported
+✅ **Email password reset link** - Implemented with email sending
+✅ **Reset password page** - Created with token validation
+✅ **Fix order page images** - Changed to use ../ prefix
+✅ **Server list "Order Now" as button** - Styled as gradient button
+✅ **My servers page** - Shows active servers with expiration and renewal
+✅ **Server status page** - Created with database table
+✅ **Server status link in footer** - Added
+✅ **Apache configs** - All three created (panel, website, fileserver)
+✅ **Documentation** - APACHE_SETUP.md and FEATURES.md created
## Next Steps
@@ -282,13 +282,13 @@ All requirements from the problem statement have been addressed:
## Support
- Main documentation: See FEATURES.md
-- Apache setup: See APACHE_SETUP.md
+- Apache setup: See APACHE_SETUP.md
- Issues: Check PHP error logs and database connectivity
- Questions: Review existing GSP documentation
---
-**Implementation Date**: 2025-10-22
-**Repository**: GameServerPanel/GSP
-**Branch**: copilot/add-password-reset-feature
+**Implementation Date**: 2025-10-22
+**Repository**: GameServerPanel/GSP
+**Branch**: copilot/add-password-reset-feature
**Status**: Ready for review and testing
diff --git a/Panel/IMPLEMENTATION_SUMMARY.md b/Panel/IMPLEMENTATION_SUMMARY.md
index 7f1b0d82..46278e92 100644
--- a/Panel/IMPLEMENTATION_SUMMARY.md
+++ b/Panel/IMPLEMENTATION_SUMMARY.md
@@ -9,12 +9,12 @@ This PR successfully addresses all three main issues from the problem statement:
## 1. Login White Screen Fix
### Issue
-Users were experiencing a white screen after login due to hardcoded table name `ogp_users` in the menu.php file.
+Users were experiencing a white screen after login due to hardcoded table name `gsp_users` in the menu.php file.
### Solution
- Changed `modules/billing/includes/menu.php` line 46 from:
```php
- $res = mysqli_query($menu_db, "SELECT users_role FROM ogp_users WHERE user_id = $uid LIMIT 1");
+ $res = mysqli_query($menu_db, "SELECT users_role FROM gsp_users WHERE user_id = $uid LIMIT 1");
```
To:
```php
diff --git a/Panel/INSTALL.BAT b/Panel/INSTALL.BAT
index a0cf3c8e..c93625ff 100644
--- a/Panel/INSTALL.BAT
+++ b/Panel/INSTALL.BAT
@@ -61,7 +61,7 @@ REM cls
REM ===== Create/update 'gameserver' and make admin (PowerShell handles special chars) =====
-set /p PASS=Enter password for 'gameserver' (visible):
+set /p PASS=Enter password for 'gameserver' (visible):
set "GSU=gameserver"
powershell -NoProfile -ExecutionPolicy Bypass -Command ^
@@ -82,24 +82,24 @@ cls
REM ===== Fetch agent files (curl instead of wget) =====
REM (Old SVN example left as comment)
REM curl -L "http://master.dl.sourceforge.net/project/ogpextras/Installer-Snapshot/latest_win_agent_files.zip" -o "agent_files.zip"
-curl -L "https://github.com/OpenGamePanel/OGP-Agent-Windows/archive/master.zip" -o "agent_files.zip"
+curl -L "https://github.com/GameServerPanel/GSP-Agent-Windows/archive/master.zip" -o "agent_files.zip"
unzip -q agent_files_old.zip
unzip -q -o agent_files.zip
-IF NOT EXIST "OGP-Agent-Windows-master" unzip -q agent_files_local_copy.zip
-cd "OGP-Agent-Windows-master"
-IF EXIST OGP/COPYING xcopy /Y /E * ..\
-IF EXIST OGP/COPYING cd ..
-rm -rf "OGP-Agent-Windows-master"
+IF NOT EXIST "GSP-Agent-Windows-master" unzip -q agent_files_local_copy.zip
+cd "GSP-Agent-Windows-master"
+IF EXIST GSP/COPYING xcopy /Y /E * ..\
+IF EXIST GSP/COPYING cd ..
+rm -rf "GSP-Agent-Windows-master"
rm -f agent_files.zip
rm -f agent_files_old.zip
rm -f agent_files_local_copy.zip
-chmod +x /OGP/agent_conf.sh
-chmod +x /bin/ogp_agent
+chmod +x /GSP/agent_conf.sh
+chmod +x /bin/gsp_agent
REM ===== Configure agent (pass password safely) =====
powershell -NoProfile -ExecutionPolicy Bypass -Command ^
- "Start-Process -FilePath bash -NoNewWindow -Wait -ArgumentList @('/OGP/agent_conf.sh','-p',$env:PASS)"
+ "Start-Process -FilePath bash -NoNewWindow -Wait -ArgumentList @('/GSP/agent_conf.sh','-p',$env:PASS)"
REM ===== Create scheduled task (password via PowerShell to avoid metachar issues) =====
tools\fart.exe "%WD%\service_settings.xml" "{COMMAND}" "%WD%\agent_start.bat"
@@ -107,12 +107,12 @@ tools\fart.exe "%WD%\service_settings.xml" "{COMMAND_WORK_DIR}" "%WD%"
powershell -NoProfile -ExecutionPolicy Bypass -Command ^
"$xml = Join-Path $env:WD 'service_settings.xml'; " ^
- "Start-Process -FilePath schtasks -NoNewWindow -Wait -ArgumentList @('/create','/tn','OGP agent start on boot','/XML',$xml,'/ru','gameserver','/rp',$env:PASS)"
+ "Start-Process -FilePath schtasks -NoNewWindow -Wait -ArgumentList @('/create','/tn','GSP agent start on boot','/XML',$xml,'/ru','gameserver','/rp',$env:PASS)"
REM ===== Rebase & start agent =====
call "%WD%\rebase_post_ins.bat"
echo.
-schtasks /Run /tn "OGP agent start on boot"
+schtasks /Run /tn "GSP agent start on boot"
REM ===== Grant logon as a service =====
tools\ntrights.exe +r SeServiceLogonRight -u gameserver -m \\%COMPUTERNAME%
diff --git a/Panel/INSTALL_README.md b/Panel/INSTALL_README.md
index 6e1c17cb..1d2b9205 100644
--- a/Panel/INSTALL_README.md
+++ b/Panel/INSTALL_README.md
@@ -1,6 +1,6 @@
# GSP / WDS Panel — Installer Guide
-> **GSP is a heavily customized fork of OGP maintained by WDS.**
+> **GSP is a heavily customized fork of GSP maintained by WDS.**
---
@@ -147,15 +147,15 @@ After installation completes:
---
-## 7. Table Prefix Migration (ogp_ → gsp_)
+## 7. Table Prefix Migration (gsp_ → gsp_)
-If you are migrating from an older OGP installation:
+If you are migrating from an older GSP installation:
-- The installer automatically renames `ogp_*` tables to `gsp_*` (or your chosen prefix) when they don't already exist.
+- The installer automatically renames `gsp_*` tables to `gsp_*` (or your chosen prefix) when they don't already exist.
- Tables that already exist under the new prefix are skipped safely.
- You can choose a custom prefix (e.g. `mypanel_`) in the installer form.
-**Module SQL files** containing `ogp_` references are dynamically converted to the chosen prefix at import time.
+**Module SQL files** containing `gsp_` references are dynamically converted to the chosen prefix at import time.
---
diff --git a/Panel/README.txt b/Panel/README.txt
index f71174a8..57887539 100644
--- a/Panel/README.txt
+++ b/Panel/README.txt
@@ -14,12 +14,12 @@ crontab -e
and copy this line at the end of the file and save it (WARNING:modify it with the correct path):
-*/1 * * * * php /var/www/html/ogp/modules/billing/cron-shop.php
+*/1 * * * * php /var/www/html/gsp/modules/billing/cron-shop.php
Now this script searches for expired game homes every minute, and wil stop and remove them if they are expired.
If you would like to do this at midnight every day instead of every minute you should use
-0 0 * * * php /var/www/html/ogp/modules/billing/cron-shop.php
+0 0 * * * php /var/www/html/gsp/modules/billing/cron-shop.php
TIP: Searching in google, for example, "cron every month" you will find the correct code to search expired homes and remove them every month.
diff --git a/Panel/agent_event_receiver.php b/Panel/agent_event_receiver.php
index bf83cf4d..036a8526 100644
--- a/Panel/agent_event_receiver.php
+++ b/Panel/agent_event_receiver.php
@@ -11,7 +11,7 @@ if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
}
$db = createDatabaseConnection($db_type, $db_host, $db_user, $db_pass, $db_name, $table_prefix, isset($db_port) ? $db_port : NULL);
-if (!$db instanceof OGPDatabase) {
+if (!$db instanceof GSPDatabase) {
gsp_agent_event_fail(503, 'database_unavailable', 'Could not connect to database.');
}
diff --git a/Panel/all_hostable_games_union.csv b/Panel/all_hostable_games_union.csv
index 6edf1829..8e0cf925 100644
--- a/Panel/all_hostable_games_union.csv
+++ b/Panel/all_hostable_games_union.csv
@@ -6,12 +6,12 @@ ARMA 3,LinuxGSM
Abiotic Factor,Nitrado
Action Half-Life,LinuxGSM
Action: Source,LinuxGSM
-Aliens vs Predator,OGP
+Aliens vs Predator,GSP
Aloft,"G-Portal, Nitrado"
American Truck Simulator,"LinuxGSM, Nitrado"
-Arma 2,OGP
-Arma 2 Combined Operations,OGP
-Arma 2 Operation Arrowhead,OGP
+Arma 2,GSP
+Arma 2 Combined Operations,GSP
+Arma 2 Operation Arrowhead,GSP
Arma 3,G-Portal
Arma Reforger,"G-Portal, LinuxGSM"
Assetto Corsa,LinuxGSM
@@ -54,7 +54,7 @@ Day of Defeat: Source,LinuxGSM
Day of Dragons,"G-Portal, LinuxGSM"
Day of Infamy,LinuxGSM
DayZ,LinuxGSM
-DayZ Mod for Arma2CO ,OGP
+DayZ Mod for Arma2CO ,GSP
Dead Matter,G-Portal
Deadside,G-Portal
Deadside (Console),G-Portal
@@ -191,14 +191,14 @@ Unreal Tournament 2004,LinuxGSM
Unreal Tournament 3,LinuxGSM
Unreal Tournament 99,LinuxGSM
Unturned,"G-Portal, LinuxGSM, Nitrado"
-Urban Terror 4,OGP
+Urban Terror 4,GSP
V Rising,G-Portal
Valheim,"G-Portal, GameServers.com, LinuxGSM"
Vampire Slayer,LinuxGSM
Velocity Proxy,LinuxGSM
Vintage Story,"G-Portal, LinuxGSM"
Warfork,LinuxGSM
-Warsow,OGP
+Warsow,GSP
WaterfallMC,LinuxGSM
Wolfenstein: Enemy Territory,LinuxGSM
World Titans War,G-Portal
diff --git a/Panel/check.php b/Panel/check.php
index 3604f27e..660212d2 100644
--- a/Panel/check.php
+++ b/Panel/check.php
@@ -1,10 +1,10 @@
$pear_path !== false ? 'ok' : 'warning',
'current' => $pear_path !== false ? $pear_path : 'Not found',
'fix' => $pear_path !== false ? '' : 'sudo apt install php-pear -y',
- 'notes' => 'Used by some legacy OGP/GSP modules.',
+ 'notes' => 'Used by some legacy GSP/GSP modules.',
];
// ── Writable / readable paths ────────────────────────────────────────────────
diff --git a/Panel/css/global.css b/Panel/css/global.css
index 0df3fc92..1d936512 100644
--- a/Panel/css/global.css
+++ b/Panel/css/global.css
@@ -1,5 +1,5 @@
-/*
- * These are global CSS styles that should apply to all themes
+/*
+ * These are global CSS styles that should apply to all themes
* Overrides go here... some styles may need !important to override inline styles applied by libraries
* This CSS file will be loaded last in the chain, so use !important carefully
*/
@@ -23,7 +23,7 @@ span.versionInfo{
display: inline-block;
}
-div.OGPVersionArea{
+div.GSPVersionArea{
width: 100%;
position: relative;
}
@@ -48,7 +48,7 @@ span.copyVersionResult{
.progress .progress-bar {
width: 1px;
height: 15px;
-
+
/* Permalink - use to edit and share this gradient: http://colorzilla.com/gradient-editor/#b4e391+0,61c419+50,b4e391+100;Green+3D */
background: #43DB00; /* Old browsers */
background: -moz-linear-gradient(top, #b4e391 0%, #61c419 50%, #b4e391 100%); /* FF3.6-15 */
diff --git a/Panel/docs/GSP_INSTALLER.md b/Panel/docs/GSP_INSTALLER.md
index 2385e26b..0efac087 100644
--- a/Panel/docs/GSP_INSTALLER.md
+++ b/Panel/docs/GSP_INSTALLER.md
@@ -1,11 +1,11 @@
-# GSP Installer – Differences from Original OGP `install.php`
+# GSP Installer – Differences from Original GSP `install.php`
## Overview
`install.php` in this repository is a customized installer for the
**GSP (Game Server Panel)** maintained by WDS. It is based on the original
-OGP installer at
-
+GSP installer at
+
but has been adapted for the GSP/WDS environment.
---
@@ -14,7 +14,7 @@ but has been adapted for the GSP/WDS environment.
### 1. Default table prefix: `gsp_`
-The original OGP installer defaults to `ogp_`. Our installer defaults to
+The original GSP installer defaults to `gsp_`. Our installer defaults to
`gsp_` (the `$table_prefix` form field pre-fills with `gsp_`). You may
change this during installation.
@@ -38,7 +38,7 @@ port 3306).
### 3. MySQLi connection uses the port
-`includes/database_mysqli.php` – `OGPDatabaseMySQL::connect()` – now
+`includes/database_mysqli.php` – `GSPDatabaseMySQL::connect()` – now
accepts an optional `$db_port` argument and passes it to `mysqli_connect()`:
```php
@@ -48,7 +48,7 @@ $this->link = mysqli_connect($db_host, $db_user, $db_pass, $db_name, $port);
`includes/helpers.php` – `createDatabaseConnection()` – likewise accepts
and forwards `$db_port`.
-All panel entry points (`home.php`, `index.php`, `ogp_api.php`,
+All panel entry points (`home.php`, `index.php`, `gsp_api.php`,
`server_status.php`, `modules/billing/cron-shop.php`,
`modules/billing/includes/panel_bridge.php`) pass
`isset($db_port) ? $db_port : NULL` when calling
@@ -57,7 +57,7 @@ All panel entry points (`home.php`, `index.php`, `ogp_api.php`,
### 4. Default admin account created automatically
After modules are installed, the installer automatically creates an `admin`
-account with password `admin` using the existing `OGPDatabaseMySQL::addUser()`
+account with password `admin` using the existing `GSPDatabaseMySQL::addUser()`
method (which stores passwords as `MD5`). If an admin user already exists it
is **not** duplicated.
@@ -65,7 +65,7 @@ is **not** duplicated.
### 5. No prerequisite checks
-Step 0 shows a welcome screen and language selector only. The original OGP
+Step 0 shows a welcome screen and language selector only. The original GSP
installer checks for required PHP extensions, Pear, etc. GSP skips those
checks because the deployment environment is pre-validated by our bootstrap
scripts.
@@ -77,21 +77,21 @@ Every directory found under `modules/` is installed via
as warnings (not hard failures) so that the overall installation succeeds
even if optional dependencies are missing.
-### 7. `ogp_` → `gsp_` table migration (optional, safe)
+### 7. `gsp_` → `gsp_` table migration (optional, safe)
-If the database already contains tables prefixed with `ogp_`:
+If the database already contains tables prefixed with `gsp_`:
-* For each `ogp_X` table, if the corresponding `gsp_X` table does **not**
+* For each `gsp_X` table, if the corresponding `gsp_X` table does **not**
exist, it is renamed to `gsp_X`.
* If `gsp_X` already exists, the rename is skipped silently.
* The installer never aborts due to pre-existing tables.
-This allows upgrading an existing OGP installation to GSP without losing data.
+This allows upgrading an existing GSP installation to GSP without losing data.
### 8. MD5 password hashing (legacy)
-The `OGPDatabaseMySQL::addUser()` method stores passwords using `MD5()`.
-This is legacy behaviour inherited from OGP and matches the existing panel
+The `GSPDatabaseMySQL::addUser()` method stores passwords using `MD5()`.
+This is legacy behaviour inherited from GSP and matches the existing panel
login system. MD5 is cryptographically broken for new systems; however,
changing the hashing scheme requires coordinated changes to the login code
(`index.php`, `modules/register/`, etc.) and is outside the scope of the
@@ -101,7 +101,7 @@ scheme in a follow-up change.
### 9. Branding
The installer title and default site settings reference **GSP – Game Server
-Panel** and **WDS** instead of "Open Game Panel".
+Panel** and **WDS** instead of "GameServer Panel".
---
@@ -124,5 +124,5 @@ Panel** and **WDS** instead of "Open Game Panel".
* To re-run the installer, simply navigate to `install.php` again.
* If the wrong prefix was chosen, edit `includes/config.inc.php` manually or
re-run `install.php`.
-* Renamed (`ogp_` → `gsp_`) tables can be manually renamed back with
- `RENAME TABLE gsp_X TO ogp_X` in MySQL.
+* Renamed (`gsp_` → `gsp_`) tables can be manually renamed back with
+ `RENAME TABLE gsp_X TO gsp_X` in MySQL.
diff --git a/Panel/documentation/admin-guide.md b/Panel/documentation/admin-guide.md
index acb46897..f1066c91 100644
--- a/Panel/documentation/admin-guide.md
+++ b/Panel/documentation/admin-guide.md
@@ -1,6 +1,6 @@
# GameServer Panel Admin Guide
-This document mirrors the internal WDS wiki entry so it can be viewed directly from the repository, packaged with releases, or imported into another wiki. It explains how we deploy, operate, and extend the GameServer Panel (GSP) fork of Open Game Panel.
+This document mirrors the internal WDS wiki entry so it can be viewed directly from the repository, packaged with releases, or imported into another wiki. It explains how we deploy, operate, and extend the GameServer Panel (GSP) fork of GameServer Panel.
## Overview
@@ -28,10 +28,10 @@ Key behaviors:
## Architecture
-GSP is still built around the classic OGP topology:
+GSP is still built around the classic GSP topology:
1. **Web Panel** – PHP application with billing, coupons, invoicing, and customer UI enhancements.
-2. **Agents** – Lightweight Perl daemons (`ogp_agent.pl`) installed on every game host. Default port 12679/TCP.
+2. **Agents** – Lightweight Perl daemons (`gsp_agent.pl`) installed on every game host. Default port 12679/TCP.
3. **Game Servers** – Processes defined in `modules/config_games/server_configs/*.xml`. Agents launch them inside detached GNU screen sessions, capture PIDs, and stream console logs back to the panel.
All provisioning logic flows through XML definition files, so keep IDs, attributes, and order compliant with `modules/config_games/schema_server_config.xml`.
@@ -46,10 +46,10 @@ All provisioning logic flows through XML definition files, so keep IDs, attribut
sudo git clone https://github.com/GameServerPanel/GSP-Agent-Linux.git /opt/gsp-agent
cd /opt/gsp-agent
sudo bash install.sh
- sudo bash agent_conf.sh -s "yourRootPassword" -u ogp_agent
+ sudo bash agent_conf.sh -s "yourRootPassword" -u gsp_agent
```
-3. Edit `/home/ogp_agent/Cfg/Config.pm` to match the panel entry (listen ip/port, `key`, `web_api_url`).
-4. Enable the service: `sudo systemctl enable --now ogp_agent` (installs from `systemd/ogp_agent.service`).
+3. Edit `/home/gsp_agent/Cfg/Config.pm` to match the panel entry (listen ip/port, `key`, `web_api_url`).
+4. Enable the service: `sudo systemctl enable --now gsp_agent` (installs from `systemd/gsp_agent.service`).
5. Confirm heartbeats from the panel → Administration → Game Servers.
### Windows Agent (Cygwin bundle)
@@ -58,11 +58,11 @@ All provisioning logic flows through XML definition files, so keep IDs, attribut
2. Run `Install\onceinstall_agent.bat` as Administrator to install Cygwin, create the `gameserver` service user, and copy files.
3. Launch the bundled Cygwin terminal and execute:
```bash
- cd /OGP
+ cd /GSP
bash agent_conf.sh -p "gameserverPassword"
```
-4. Update `C:\\OGP\\Cfg\\Config.pm` (same structure as Linux) with the panel’s key, API URL, and listen port.
-5. Ensure the “OGP Agent” Windows service is set to Automatic (Delayed Start) and the firewall allows the agent port plus expected game ports.
+4. Update `C:\\GSP\\Cfg\\Config.pm` (same structure as Linux) with the panel’s key, API URL, and listen port.
+5. Ensure the “GSP Agent” Windows service is set to Automatic (Delayed Start) and the firewall allows the agent port plus expected game ports.
## XML Deep Dive
@@ -111,7 +111,7 @@ Game definitions live under `modules/config_games/server_configs`. They must res
- export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:{OGP_HOME_DIR}/RustDedicated_Data/Plugins/x86_64
+ export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:{GSP_HOME_DIR}/RustDedicated_Data/Plugins/x86_64
```
@@ -138,13 +138,13 @@ The full human-readable version is provided in [`documentation/xml-notes.md`](./
2. **Copy a template** – Duplicate a similar XML file from `server_configs/` and modify it in-place.
3. **Wire up parameters** – Use `server_params` for every knob you want exposed, and map those IDs inside `cli_params`.
4. **Validate** – Run `xmllint --schema modules/config_games/schema_server_config.xml mygame.xml --noout`.
-5. **Test** – Upload through the panel, click “Update Games List,” provision a server, and watch `ogp_agent.log` for errors.
+5. **Test** – Upload through the panel, click “Update Games List,” provision a server, and watch `gsp_agent.log` for errors.
6. **Document** – Update this guide or the wiki with any quirks, Steam app IDs, or non-standard install notes.
## Operational Notes
- **No panelStart wrapper** – The agent handles PID tracking, console logs, and restart logic. Keep commands clean.
-- **Logging** – Agents write `ogp_agent.log`, `ogp_agent.pid`, `ogp_agent_run.pid`, and individual `console.log` files.
+- **Logging** – Agents write `gsp_agent.log`, `gsp_agent.pid`, `gsp_agent_run.pid`, and individual `console.log` files.
- **Stats database** – Optional MySQL credentials in `Cfg/Config.pm` feed resource monitoring cron jobs.
- **Password rotation** – Update credentials in `content/staff-passwords.txt` on the WDS website and regenerate secrets in the panel/agents at the same time.
diff --git a/Panel/documentation/agent-guide.md b/Panel/documentation/agent-guide.md
index 9a36e9a2..5fc5c142 100644
--- a/Panel/documentation/agent-guide.md
+++ b/Panel/documentation/agent-guide.md
@@ -4,7 +4,7 @@ Packaged copy of the instructions we keep in the staff wiki so you can view them
## Purpose
-The Linux agent (`ogp_agent.pl`) exposes the RPC endpoint that allows the GameServer Panel to install, start, stop, and monitor game servers on Linux hosts. Every host that runs customer games must run this service.
+The Linux agent (`gsp_agent.pl`) exposes the RPC endpoint that allows the GameServer Panel to install, start, stop, and monitor game servers on Linux hosts. Every host that runs customer games must run this service.
## Supported platforms
@@ -21,48 +21,48 @@ sudo apt install -y git curl rsync screen perl libxml-parser-perl libpath-class-
sudo git clone https://github.com/GameServerPanel/GSP-Agent-Linux.git /opt/gsp-agent
cd /opt/gsp-agent
sudo bash install.sh
-sudo bash agent_conf.sh -s "root-password" -u ogp_agent
+sudo bash agent_conf.sh -s "root-password" -u gsp_agent
```
-`agent_conf.sh` writes `/home/ogp_agent/Cfg/Config.pm`. Set:
+`agent_conf.sh` writes `/home/gsp_agent/Cfg/Config.pm`. Set:
| Key | Description |
| --- | ----------- |
| `listen_ip` | Interface to bind (use `0.0.0.0` unless you want to restrict access). |
| `listen_port` | TCP port exposed to the panel. Default is `12679`. |
| `key` | Shared secret copied from the panel → Administration → Game Servers. |
-| `web_api_url` | HTTPS URL to `ogp_api.php` on the panel. |
+| `web_api_url` | HTTPS URL to `gsp_api.php` on the panel. |
| `stats_db_*` | Optional MySQL credentials for the resource stats cron. |
## Service management
```bash
-sudo cp systemd/ogp_agent.service /etc/systemd/system/
-sudo sed -i "s#{OGP_AGENT_PATH}#/opt/gsp-agent#g" /etc/systemd/system/ogp_agent.service
+sudo cp systemd/gsp_agent.service /etc/systemd/system/
+sudo sed -i "s#{GSP_AGENT_PATH}#/opt/gsp-agent#g" /etc/systemd/system/gsp_agent.service
sudo systemctl daemon-reload
-sudo systemctl enable --now ogp_agent
+sudo systemctl enable --now gsp_agent
```
-Logs live next to the binaries (`/opt/gsp-agent/ogp_agent.log`). Individual game servers stream to their own `console.log` files inside each home folder.
+Logs live next to the binaries (`/opt/gsp-agent/gsp_agent.log`). Individual game servers stream to their own `console.log` files inside each home folder.
## Firewall checklist
1. Allow inbound TCP on the agent port.
2. Allow inbound/outbound UDP/TCP for the games you host.
-3. Allow outbound HTTPS to the panel so the agent can talk to `ogp_api.php`.
+3. Allow outbound HTTPS to the panel so the agent can talk to `gsp_api.php`.
## Upgrades
1. `cd /opt/gsp-agent && git pull`
-2. Stop the service (`sudo systemctl stop ogp_agent`).
+2. Stop the service (`sudo systemctl stop gsp_agent`).
3. Re-run `bash install.sh` if new files were added.
-4. Start the service (`sudo systemctl start ogp_agent`).
+4. Start the service (`sudo systemctl start gsp_agent`).
5. Verify the panel shows the agent as “online”.
## Troubleshooting
-- `tail -f ogp_agent.log` – handshake failures usually mean the encryption key or port mismatches the panel entry.
-- `journalctl -u ogp_agent` – capture Perl stack traces and missing dependency errors.
+- `tail -f gsp_agent.log` – handshake failures usually mean the encryption key or port mismatches the panel entry.
+- `journalctl -u gsp_agent` – capture Perl stack traces and missing dependency errors.
- `screen -ls` – confirm customer servers are running in screen sessions.
- `nc -vz panel.example.com 12679` from the panel host – ensures the agent port is reachable.
diff --git a/Panel/documentation/xml-notes.md b/Panel/documentation/xml-notes.md
index 2e32a526..4395e721 100644
--- a/Panel/documentation/xml-notes.md
+++ b/Panel/documentation/xml-notes.md
@@ -1,6 +1,6 @@
## GameServer Panel XML Notes / still W.I.P.
-_The order of each XML element matters, and this guide presents them in their order of appearance for the GSP (OGP fork)!_
+_The order of each XML element matters, and this guide presents them in their order of appearance for the GSP (GSP fork)!_
___
### Linux and Windows:
@@ -23,7 +23,7 @@ Comes after `` element (actually within `` element as
```
space_engineers_win64
```
-This is a unique key used to identify this specific game server in OGP. You should not use spaces, nor any special character in it, only alpha-numeric value and underscores. It should contain a suffix related to the compatible OS. Available suffixes are `_win32`, `_win64`, `_linux32`, `_linux64`, using one of these suffixes in the game_key will let OGP know which OS it is available on, making it visible or not when you install a new game server, depending on your OS architecture. `_win` and `_linux` work too, but we highly recommend to now use the previously listed suffixes.
+This is a unique key used to identify this specific game server in GSP. You should not use spaces, nor any special character in it, only alpha-numeric value and underscores. It should contain a suffix related to the compatible OS. Available suffixes are `_win32`, `_win64`, `_linux32`, `_linux64`, using one of these suffixes in the game_key will let GSP know which OS it is available on, making it visible or not when you install a new game server, depending on your OS architecture. `_win` and `_linux` work too, but we highly recommend to now use the previously listed suffixes.
@@ -34,7 +34,7 @@ Comes after `` element. There can only be one `` element.
```
lgsl
```
-It defines the query protocol used by OGP. Available protocols are `lgsl`, `gameq`, `rcon` (`rcon2`? `lcon`?)
+It defines the query protocol used by GSP. Available protocols are `lgsl`, `gameq`, `rcon` (`rcon2`? `lcon`?)
@@ -114,8 +114,8 @@ Comes after `` element. There can only be one `
```
%MAP%%GAMEMODE%%DIFFICULTY%%GAMELENGTH%%PLAYERS%%MUTATOR% %PORT% %IP% %WEB_ADMIN_PORT% %QUERY_PORT%
```
-This is the template that will generate the start command line placed after the server executable name.
-You can use these variables which are known to OGP:
+This is the template that will generate the start command line placed after the server executable name.
+You can use these variables which are known to GSP:
```
GAME_TYPE
HOSTNAME
@@ -142,7 +142,7 @@ ___
Comes after `` element. There can only be one `` element. Example:
```
-
+
@@ -166,7 +166,7 @@ Comes after `` or `` element. There can only be one `
666
```
-You can add reserved ports here to use in the generated start command line. These ports will also be managed by OGP if OGP is used to manage the Agent machine firewall. Type can be `add` or `subtract` which is self explanatory. In this example when using the %WEB_ADMIN_PORT% variable in the `` it will generate `-WebAdminPort=XXX`, XXX being 5 subtracted to the Port set for this game server, when using the %STEAM_PORT% variable in the `` it will generate `-SteamPort=XXX` where XXX will be 19238 added to the Port set for this game server. As you can see, the variable %MY_CUSTOM_PORT% have no `cli_string`, this can be used this way to simply open this port (which here would be 666 added to the game server port) in the Agent machine firewall, when OGP is set to control the machine firewall (note: the firewall management may actually not open anything else than the game server port, to be verified).
+You can add reserved ports here to use in the generated start command line. These ports will also be managed by GSP if GSP is used to manage the Agent machine firewall. Type can be `add` or `subtract` which is self explanatory. In this example when using the %WEB_ADMIN_PORT% variable in the `` it will generate `-WebAdminPort=XXX`, XXX being 5 subtracted to the Port set for this game server, when using the %STEAM_PORT% variable in the `` it will generate `-SteamPort=XXX` where XXX will be 19238 added to the Port set for this game server. As you can see, the variable %MY_CUSTOM_PORT% have no `cli_string`, this can be used this way to simply open this port (which here would be 666 added to the game server port) in the Agent machine firewall, when GSP is set to control the machine firewall (note: the firewall management may actually not open anything else than the game server port, to be verified).
@@ -264,7 +264,7 @@ Comes after `` element. There can only be one `` elemen
```
-Used to define different mods for the game server, in this example there is only one mod available which will be the default installed one (actually the game server itself here). The `` here is the Steam appID that will be used to install and update the game server. (note: case RSync to explain? Case multi mods to explain?)
+Used to define different mods for the game server, in this example there is only one mod available which will be the default installed one (actually the game server itself here). The `` here is the Steam appID that will be used to install and update the game server. (note: case RSync to explain? Case multi mods to explain?)
@@ -352,7 +352,7 @@ Valid options are for the `` element within the `` element withi
ns = no space between key and value
q = quotes wrapped around value after key (no space added)
s = space added after key before value (no quotes added)
- anything else = space after key and quotes around the value
+ anything else = space after key and quotes around the value
```
@@ -533,7 +533,7 @@ Used for setting environment variables which may be needed by some servers. Thi
Special entries:
-`{OGP_HOME_DIR}` will be replaced by the home directory for the game server.
+`{GSP_HOME_DIR}` will be replaced by the home directory for the game server.
___
### Linux:
@@ -563,19 +563,19 @@ Comes after `` element. There can only be one `
```
-Used for setting environment variables which may be needed by some servers such as Rust.
+Used for setting environment variables which may be needed by some servers such as Rust.
Example:
```
-export LD_LIBRARY_PATH="{OGP_HOME_DIR}/RustDedicated_Data/Plugins/x86_64"
+export LD_LIBRARY_PATH="{GSP_HOME_DIR}/RustDedicated_Data/Plugins/x86_64"
```
Special entries:
-`{OGP_HOME_DIR}` will be replaced by the home directory for the game server.
+`{GSP_HOME_DIR}` will be replaced by the home directory for the game server.
@@ -603,7 +603,7 @@ The above example adds chattr +i to the bin/AvorionServer executable. This prev
Special entries:
-`{OGP_HOME_DIR}` will be replaced by the home directory for the game server. However, if you're using this variable, you should just use a local path.
+`{GSP_HOME_DIR}` will be replaced by the home directory for the game server. However, if you're using this variable, you should just use a local path.
diff --git a/Panel/game_titles.txt b/Panel/game_titles.txt
index 22b3b852..a55fd813 100644
--- a/Panel/game_titles.txt
+++ b/Panel/game_titles.txt
@@ -1,6 +1,6 @@
# Game Titles Reference File
# This file contains the complete list of games to generate comprehensive server admin guides for
-# Format: Game Title | Engine | AppID | Workshop Support | LinuxGSM Support | OGP Module Support
+# Format: Game Title | Engine | AppID | Workshop Support | LinuxGSM Support | GSP Module Support
# Existing games from data/games/ (verified)
7 Days to Die | Unity | 294420 | No | Yes | Yes
@@ -18,7 +18,7 @@ Terraria | XNA/MonoGame | 105600 | Yes | Yes | Yes
Unturned | Unity | 304930 | Yes | Yes | Yes
Valheim | Unity | 892970 | Yes | Yes | Yes
-# Additional popular games from OGP, LinuxGSM, and top providers
+# Additional popular games from GSP, LinuxGSM, and top providers
Conan Exiles | Unreal Engine 4 | 440900 | Yes | Yes | Yes
Space Engineers | VRAGE 2.0 | 244850 | Yes | Yes | Yes
Killing Floor 2 | Unreal Engine 3 | 232090 | Yes | Yes | Yes
diff --git a/Panel/ogp_api.php b/Panel/gsp_api.php
similarity index 92%
rename from Panel/ogp_api.php
rename to Panel/gsp_api.php
index c0c147c1..32c7e0fb 100644
--- a/Panel/ogp_api.php
+++ b/Panel/gsp_api.php
@@ -1,62 +1,62 @@
getSettings();
-
+
if(!is_authorized())
output(array("status" => '401', "message" => 'Unauthorized host'), $function);
-
+
$db->checkApiTable();
$logged_in = false;
-
+
if($function != 'api_token')
{
if(isset($_POST['token']))
@@ -128,7 +128,7 @@ if(function_exists($function))
output(array("status" => "300", "message" => "No token supplied"), $function);
}
}
-
+
if($logged_in or $function == 'api_token')
{
//call the function and output the returned data as json
@@ -137,7 +137,7 @@ if(function_exists($function))
output(array("status" => "400", "message" => "BAD REQUEST"), $function);
else
$function_args = get_function_args("$func_req");
-
+
if(!$function_args)
output(array("status" => "400", "message" => "BAD REQUEST - CANT FIND FUNCTION ARGS"), $function);
elseif(!(($func_req == "token/test" and isset($request[1])) OR ($func_req == "token/create" and isset($request[1]) and isset($request[2]))))
@@ -175,7 +175,7 @@ function output($result, $function){
}
}
-function outputJSON($result){
+function outputJSON($result){
// Send JSON output
header('Content-Type: application/json');
echo json_encode($result);
@@ -223,14 +223,14 @@ function api_token()
$message = "Invalid Token";
}
}
-
+
if($request[0] == "create")
{
$user = isset($request[1])?urldecode($request[1]):$_POST['user'];
$password = isset($request[2])?urldecode($request[2]):$_POST['password'];
-
+
$userInfo = $db->getUser($user);
-
+
if(isset($userInfo['users_passwd']) && md5($password) == $userInfo['users_passwd'])
{
$token = bin2hex(openssl_random_pseudo_bytes(32));
@@ -270,35 +270,35 @@ function api_token()
function api_server()
{
global $request, $db, $user_info, $settings;
-
+
if($user_info['users_role'] != "admin")
return array("status" => '350', "message" => "This function is restricted to administrator accounts.");
-
+
if($request[0] == "list")
{
$status = "200";
$message = $db->getRemoteServers();
}
-
+
if($request[0] == "status")
{
$remote_server_id = $_POST['remote_server_id'];
$remote_server = $db->getRemoteServer($remote_server_id);
- $remote = new OGPRemoteLibrary($remote_server['agent_ip'],$remote_server['agent_port'],$remote_server['encryption_key'],$remote_server['timeout']);
+ $remote = new GSPRemoteLibrary($remote_server['agent_ip'],$remote_server['agent_port'],$remote_server['encryption_key'],$remote_server['timeout']);
$status = "200";
$message = $remote->status_chk() == 1?'online':'offline';
}
-
+
if($request[0] == "restart")
{
$remote_server_id = $_POST['remote_server_id'];
$remote_server = $db->getRemoteServer($remote_server_id);
- $remote = new OGPRemoteLibrary($remote_server['agent_ip'],$remote_server['agent_port'],$remote_server['encryption_key'],$remote_server['timeout']);
+ $remote = new GSPRemoteLibrary($remote_server['agent_ip'],$remote_server['agent_port'],$remote_server['encryption_key'],$remote_server['timeout']);
$remote->agent_restart();
$status = "200";
$message = "success";
}
-
+
if($request[0] == "create")
{
$agent_name = $_POST['agent_name'];
@@ -311,20 +311,20 @@ function api_server()
$timeout = $_POST['timeout'];
$use_nat = $_POST['use_nat'];
$display_public_ip = $_POST['display_public_ip'];
-
+
$remote_server_id = $db->addRemoteServer($agent_ip,$agent_name,$agent_user,$agent_port,$ftp_ip,$ftp_port,$encryption_key,$timeout,$use_nat,$display_public_ip);
-
+
$status = "200";
$message = $remote_server_id;
}
-
+
if($request[0] == "remove")
{
$remote_server_id = $_POST['remote_server_id'];
$status = "200";
$message = $db->removeRemoteServer($remote_server_id);
}
-
+
if($request[0] == "add_ip")
{
$remote_server_id = $_POST['remote_server_id'];
@@ -332,7 +332,7 @@ function api_server()
$status = "200";
$message = $db->addRemoteServerIP($remote_server_id, $ip);
}
-
+
if($request[0] == "remove_ip")
{
$remote_server_id = $_POST['remote_server_id'];
@@ -348,14 +348,14 @@ function api_server()
}
$status = "200";
}
-
+
if($request[0] == "list_ips")
{
$remote_server_id = $_POST['remote_server_id'];
$message = $db->getRemoteServerIPs($remote_server_id);
$status = "200";
}
-
+
if($request[0] == "edit_ip")
{
$remote_server_id = $_POST['remote_server_id'];
@@ -372,17 +372,17 @@ function api_server()
}
$status = "200";
}
-
+
return array("status" => $status, "message" => $message);
}
function api_user_games()
{
global $request, $db, $user_info, $settings;
-
+
if($user_info['users_role'] != "admin")
return array("status" => '350', "message" => "This function is restricted to administrator accounts.");
-
+
if($request[0] == "list_games")
{
$system = strtolower($_POST['system']);
@@ -404,7 +404,7 @@ function api_user_games()
{
$games[$key]['mods'] = $db->getCfgMods($game['home_cfg_id']);
preg_match("/^([a-z0-9_-]+)_(linux|win)(32|64)?$/i",$game['game_key'],$matches);
-
+
if(count((array)$matches) == 4)
list($game_key, $game_clean, $os, $arch) = $matches;
else
@@ -420,13 +420,13 @@ function api_user_games()
$status = "200";
$message = $sorted_games[$system][$architecture];
}
-
+
if($request[0] == "list_servers")
- {
+ {
$status = "200";
$message = $db->getGameHomes();
}
-
+
if($request[0] == "create")
{
$remote_server_id = $_POST['remote_server_id'];
@@ -441,12 +441,12 @@ function api_user_games()
$slots = $_POST['slots'];
$affinity = $_POST['affinity'];
$nice = $_POST['nice'];
-
+
$homeForUser = $user_info['users_login'];
if(array_key_exists('custom_user_login_homepath', (array)$_POST) && !empty($_POST['custom_user_login_homepath'])){
$homeForUser = $_POST['custom_user_login_homepath'];
}
-
+
$assignGameServerToUserId = $user_info['user_id'];
if(array_key_exists('assign_to_username', (array)$_POST) && !empty($_POST['assign_to_username'])){
$assignToAccountUser = $_POST['assign_to_username'];
@@ -455,15 +455,15 @@ function api_user_games()
$assignGameServerToUserId = $userInfo['user_id'];
}
}
-
+
$remote_server = $db->getRemoteServer($remote_server_id);
if($remote_server === FALSE)
return array("status" => '304', "message" => "Remote Server ID#$remote_server_id does not exists");
-
+
$game_cfg = $db->getGameCfg($home_cfg_id);
if($game_cfg === FALSE)
return array("status" => '305', "message" => "No game configuration found for home_cfg_id #" . $home_cfg_id . ".");
-
+
$cfg_mods = $db->getCfgMods($home_cfg_id);
$mod_key = FALSE;
if($cfg_mods === FALSE)
@@ -479,24 +479,24 @@ function api_user_games()
}
}
}
-
+
if($mod_key === FALSE)
return array("status" => '307', "message" => "The mod_cfg_id #" . $mod_cfg_id . " does not belong to the game configuration for home_cfg_id #" . $home_cfg_id . ".");
-
- $ip_info = $db->resultQuery( "SELECT ip,ip_id FROM OGP_DB_PREFIXremote_server_ips WHERE ip='".$db->real_escape_string($ip)."' AND remote_server_id=".$db->real_escape_string($remote_server_id));
+
+ $ip_info = $db->resultQuery( "SELECT ip,ip_id FROM GSP_DB_PREFIXremote_server_ips WHERE ip='".$db->real_escape_string($ip)."' AND remote_server_id=".$db->real_escape_string($remote_server_id));
if($ip_info === FALSE)
return array("status" => '308', "message" => "The given IP address does not belongs to the given remote server.");
-
+
$port = (int)(trim($port));
if(!isPortValid($port))
return array("status" => '309', "message" => "The given port is not a valid port.");
-
- $remote = new OGPRemoteLibrary($remote_server['agent_ip'],$remote_server['agent_port'],$remote_server['encryption_key'],$remote_server['timeout']);
+
+ $remote = new GSPRemoteLibrary($remote_server['agent_ip'],$remote_server['agent_port'],$remote_server['encryption_key'],$remote_server['timeout']);
$host_stat = $remote->status_chk();
if($host_stat !== 1)
return array("status" => '310', "message" => "The remote server is offline.");
-
- // Game path logic
+
+ // Game path logic
$skipId = false;
if(hasValue($settings["default_game_server_home_path_prefix"]))
{
@@ -508,51 +508,51 @@ function api_user_games()
}
$game_path = str_replace("{GAMEKEY}", strtolower(substr($game_cfg['game_key'], 0, stripos($game_cfg['game_key'], "_"))), $game_path);
// Make sure the path ends with forward slash
- if($game_path[strlen($game_path)-1] != "/"){
+ if($game_path[strlen($game_path)-1] != "/"){
$game_path .= "/";
}
}
else
- $game_path = "/home/".$remote_server['ogp_user']."/OGP_User_Files/"; // Default
-
+ $game_path = "/home/".$remote_server['gsp_user']."/GSP_User_Files/"; // Default
+
$game_path = clean_path($game_path); // Clean it
-
+
$home_id = $db->addGameHome($remote_server_id, $assignGameServerToUserId, $home_cfg_id, $game_path, $server_name, $control_password, $ftp_password, $skipId);
if($home_id === FALSE)
return array("status" => '311', "message" => "Server could not be added to the database.");
-
+
if($db->addGameIpPort($home_id, $ip_info[0]['ip_id'], $port) === FALSE)
{
$db->deleteGameHome($home_id);
return array("status" => '312', "message" => "The given IP:Port is already in use.");
}
-
+
if($db->addModToGameHome($home_id, $mod_cfg_id) === FALSE )
{
$db->deleteGameHome($home_id);
return array("status" => '313', "message" => "Failed to assing mod.");
}
-
+
if($db->updateGameModParams($slots, '', $affinity, $nice, $home_id, $mod_cfg_id) === FALSE)
{
$db->deleteGameHome($home_id);
return array("status" => '314', "message" => "Maxplayers, affinity or nice could not be configured.");
}
-
- // Create new home directory if it doesn't already exist
+
+ // Create new home directory if it doesn't already exist
$game_path = $game_path . (!$skipId ? $home_id : "");
$remote->exec("mkdir -p " . $game_path);
-
+
if($enable_ftp == "1")
{
$remote->ftp_mgr("useradd", $home_id, $ftp_password, $game_path);
$db->changeFtpStatus('enabled',$home_id);
}
-
+
$status = "200";
$message = $home_id;
}
-
+
if($request[0] == "clone")
{
$home_id = $_POST['origin_home_id'];
@@ -565,16 +565,16 @@ function api_user_games()
$slots = $_POST['slots'];
$affinity = $_POST['affinity'];
$nice = $_POST['nice'];
-
+
$homeForUser = $user_info['users_login'];
if(array_key_exists('custom_user_login_homepath', (array)$_POST) && !empty($_POST['custom_user_login_homepath'])){
$homeForUser = $_POST['custom_user_login_homepath'];
}
-
+
$game_home = $db->getGameHome($home_id);
if($game_home === FALSE)
return array("status" => '315', "message" => "There is no game home with home_id #" . $home_id . ".");
-
+
$assignGameServerToUserId = $game_home['user_id_main'];
if(array_key_exists('assign_to_username', (array)$_POST) && !empty($_POST['assign_to_username'])){
$assignToAccountUser = $_POST['assign_to_username'];
@@ -583,20 +583,20 @@ function api_user_games()
$assignGameServerToUserId = $userInfo['user_id'];
}
}
-
- $remote = new OGPRemoteLibrary($game_home['agent_ip'],$game_home['agent_port'],$game_home['encryption_key'],$game_home['timeout']);
+
+ $remote = new GSPRemoteLibrary($game_home['agent_ip'],$game_home['agent_port'],$game_home['encryption_key'],$game_home['timeout']);
$host_stat = $remote->status_chk();
if($host_stat !== 1)
return array("status" => '310', "message" => "The remote server is offline.");
-
- $ip_info = $db->resultQuery("SELECT ip,ip_id FROM OGP_DB_PREFIXremote_server_ips WHERE ip='".$db->real_escape_string($ip)."' AND remote_server_id=".$db->real_escape_string($game_home['remote_server_id']));
+
+ $ip_info = $db->resultQuery("SELECT ip,ip_id FROM GSP_DB_PREFIXremote_server_ips WHERE ip='".$db->real_escape_string($ip)."' AND remote_server_id=".$db->real_escape_string($game_home['remote_server_id']));
if($ip_info === FALSE)
return array("status" => '308', "message" => "The given IP address does not belongs to the given remote server.");
-
+
$port = (int)(trim($port));
if(!isPortValid($port))
return array("status" => '309', "message" => "The given port is not a valid port.");
-
+
// Game path logic
$skipId = false;
if(hasValue($settings["default_game_server_home_path_prefix"]))
@@ -609,52 +609,52 @@ function api_user_games()
}
$game_path = str_replace("{GAMEKEY}", strtolower(substr($game_home['game_key'], 0, stripos($game_home['game_key'], "_"))), $game_path);
// Make sure the path ends with forward slash
- if($game_path[strlen($game_path)-1] != "/"){
+ if($game_path[strlen($game_path)-1] != "/"){
$game_path .= "/";
}
}
else
- $game_path = "/home/".$game_home['ogp_user']."/OGP_User_Files/"; // Default
-
+ $game_path = "/home/".$game_home['gsp_user']."/GSP_User_Files/"; // Default
+
$game_path = clean_path($game_path); // Clean it
-
+
$clone_home_id = $db->addGameHome($game_home['remote_server_id'], $assignGameServerToUserId,
$game_home['home_cfg_id'], $game_path, $server_name, $control_password, $ftp_password, $skipId);
-
+
if ($clone_home_id === FALSE)
return array("status" => '311', "message" => "Server could not be added to the database.");
-
+
if($db->addGameIpPort($clone_home_id, $ip_info[0]['ip_id'], $port) === FALSE)
{
$db->deleteGameHome($clone_home_id);
return array("status" => '312', "message" => "The given IP:Port is already in use.");
}
-
+
foreach ((array)$game_home['mods'] as $mod_info)
if($db->addModToGameHome($clone_home_id, $mod_info['mod_cfg_id']) !== FALSE)
$db->updateGameModParams($slots, $mod_info['extra_params'], $affinity, $nice, $clone_home_id, $mod_info['mod_cfg_id']);
-
- // Create new home directory if it doesn't already exist
+
+ // Create new home directory if it doesn't already exist
$game_path = $game_path . (!$skipId ? $clone_home_id : "");
$remote->exec("mkdir -p " . $game_path);
-
+
if($enable_ftp == "1")
{
$remote->ftp_mgr("useradd", $clone_home_id, $ftp_password, $game_path);
$db->changeFtpStatus('enabled', $clone_home_id);
}
-
- $user_group = get_user_uid_gid_from_passwd(explode("\n", $remote->sudo_exec('cat /etc/passwd')), $game_home['ogp_user']);
-
+
+ $user_group = get_user_uid_gid_from_passwd(explode("\n", $remote->sudo_exec('cat /etc/passwd')), $game_home['gsp_user']);
+
$status = "200";
$message = array("clone_home_id" => $clone_home_id, "cloning_status" => $remote->clone_home($game_home['home_path'], $game_path, $user_group));
}
-
+
if($request[0] == "set_expiration")
{
$home_id = $_POST['home_id'];
$date = date('d/m/Y H:i:s', is_numeric($_POST['timestamp']) ? (int)$_POST['timestamp'] : strtotime($_POST['timestamp']));
-
+
if($db->updateExpirationDate($home_id, $date, 'server') === TRUE)
{
$status = "200";
@@ -666,23 +666,23 @@ function api_user_games()
$message = "Expiration date could not be changed";
}
}
-
+
return array("status" => $status, "message" => $message);
}
function api_user_admin()
{
global $request, $db, $user_info, $settings;
-
+
if($user_info['users_role'] != "admin")
return array("status" => '350', "message" => "This function is restricted to administrator accounts.");
-
+
if($request[0] == "list")
{
$status = "200";
$message = $db->getUserList();
}
-
+
if($request[0] == "get")
{
$email = $_POST['email'];
@@ -697,8 +697,8 @@ function api_user_admin()
$status = "200";
$message = $account;
}
- }
-
+ }
+
if($request[0] == "create")
{
$name = $_POST['name'];
@@ -715,7 +715,7 @@ function api_user_admin()
$message = "Account created";
}
}
-
+
if($request[0] == "remove")
{
$email = $_POST['email'];
@@ -732,7 +732,7 @@ function api_user_admin()
$message = "Account removed successfully";
}
}
-
+
if($request[0] == "set_expiration")
{
$email = $_POST['email'];
@@ -745,7 +745,7 @@ function api_user_admin()
else
{
$date = (strtoupper($_POST['timestamp']) == 'X' or $_POST['timestamp'] == '') ? 'X': $date;
-
+
if($date != 'X' and !isValidTimeStamp($_POST['timestamp']))
{
$status = "321";
@@ -755,7 +755,7 @@ function api_user_admin()
{
if($date != 'X')
$date = $_POST['timestamp'];
-
+
$account['user_expires'] = $date;
if ($db->editUser($account, $account['user_id']) == FALSE)
{
@@ -770,7 +770,7 @@ function api_user_admin()
}
}
}
-
+
if($request[0] == "list_assigned")
{
$email = $_POST['email'];
@@ -795,21 +795,21 @@ function api_user_admin()
$message = $game_homes;
}
}
- }
-
+ }
+
if($request[0] == "assign")
{
$email = $_POST['email'];
$home_id = $_POST['home_id'];
$access_rights = strtolower($_POST['access_rights']);
-
+
$game_home = $db->getGameHome($home_id);
if($game_home === FALSE)
return array("status" => '315', "message" => "There is no game home with home_id #" . $home_id . ".");
-
+
if(!preg_match("/^u?f?p?e?t?c?$/", $access_rights))
return array("status" => "324", "message" => "Ivalid string for access rights");
-
+
$account = $db->getUserByEmail($email);
if($account === FALSE)
{
@@ -819,7 +819,7 @@ function api_user_admin()
else
{
$date = (strtoupper($_POST['timestamp']) == 'X' or $_POST['timestamp'] == '') ? 'X': $date;
-
+
if($date != 'X' and !isValidTimeStamp($_POST['timestamp']))
{
$status = "321";
@@ -829,7 +829,7 @@ function api_user_admin()
{
if($date != 'X')
$date = date('d/m/Y H:i:s', is_numeric($_POST['timestamp']) ? (int)$_POST['timestamp'] : strtotime($_POST['timestamp']));
-
+
if ( $db->assignHomeTo('user', $account['user_id'], $home_id, $access_rights) === TRUE )
{
$db->updateExpirationDate($game_home['home_id'], $date, 'user', $account['user_id']);
@@ -844,16 +844,16 @@ function api_user_admin()
}
}
}
-
+
if($request[0] == "remove_assign")
{
$email = $_POST['email'];
$home_id = $_POST['home_id'];
-
+
$game_home = $db->getGameHome($home_id);
if($game_home === FALSE)
return array("status" => '315', "message" => "There is no game home with home_id #" . $home_id . ".");
-
+
$account = $db->getUserByEmail($email);
if($account === FALSE)
{
@@ -874,16 +874,16 @@ function api_user_admin()
}
}
}
-
+
return array("status" => $status, "message" => $message);
}
function api_gamemanager_admin()
{
global $request, $db, $user_info, $settings;
-
+
$isAdmin = $db->isAdmin($user_info['user_id']);
-
+
if($request[0] == "reorder")
{
if($isAdmin){
@@ -906,29 +906,29 @@ function api_gamemanager_admin()
$message = "Only admin users can save the game server display order.";
}
}
-
+
return array("status" => $status, "message" => $message);
}
function api_gamemanager()
{
global $request, $db, $user_info, $settings;
-
+
$ip = trim($_POST['ip']);
$port = (int) trim($_POST['port']);
$mod_key = isset($_POST['mod_key'])?trim($_POST['mod_key']):'';
-
+
if(!isPortValid($port))
return array("status" => '309', "message" => "The given port is not a valid port.");
if(!preg_match("/[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}/",$ip))
return array("status" => '327', "message" => "The given IP ($ip) is not a valid IP address.");
-
+
$home_info = $db->getGameHomeByIP($ip, $port);
if($home_info === FALSE)
return array("status" => '328', "message" => "There is no game server with the given address ($ip:$port).");
-
+
$mod_id = key($home_info['mods']);
-
+
if($mod_key != '')
{
foreach ((array)$home_info['mods'] as $home_mod)
@@ -940,9 +940,9 @@ function api_gamemanager()
}
}
}
-
+
$isAdmin = $db->isAdmin($user_info['user_id']);
-
+
if($isAdmin)
{
$access_rights = 'ufpetc';
@@ -954,26 +954,26 @@ function api_gamemanager()
return array("status" => '329', "message" => "The given address ($ip:$port) does not belong to your account.");
$access_rights = $game_home['access_rights'];
}
-
+
$server_xml = read_server_config(SERVER_CONFIG_LOCATION."/".$home_info['home_cfg_file']);
if($server_xml === FALSE)
return array("status" => '305', "message" => "No game configuration found for home_cfg_id #" . $home_cfg_id . ".");
-
- $remote = new OGPRemoteLibrary($home_info['agent_ip'],$home_info['agent_port'],$home_info['encryption_key'],$home_info['timeout']);
+
+ $remote = new GSPRemoteLibrary($home_info['agent_ip'],$home_info['agent_port'],$home_info['encryption_key'],$home_info['timeout']);
$host_stat = $remote->status_chk();
if($host_stat !== 1)
return array("status" => '310', "message" => "The remote server is offline.");
-
+
$os = $remote->what_os();
-
+
if($request[0] == "start")
{
$start_cmd = get_start_cmd($user_info,$remote,$server_xml,$home_info,$mod_id,$ip,$port,$db);
-
+
if(isset($server_xml->lgsl_query_name))
require_once('protocol/lgsl/lgsl_protocol.php');
-
+
// Do text replacements in cfg file
if($server_xml->replace_texts)
{
@@ -984,38 +984,38 @@ function api_gamemanager()
$server_home = $home_info;
require_once(MODULES."gamemanager/cfg_text_replace.php");
}
-
+
// Run pre-start commands
if(isset($server_xml->pre_start) && !empty($server_xml->pre_start)){
$preStart = trim($server_xml->pre_start);
}else{
$preStart = "";
}
-
+
// Environment variables
if(isset($server_xml->environment_variables) && !empty($server_xml->environment_variables)){
$envVars = trim($server_xml->environment_variables);
}else{
$envVars = "";
}
-
+
// Additional files to lock
if(isset($server_xml->lock_files) && !empty($server_xml->lock_files)){
$lockFiles = trim($server_xml->lock_files);
}else{
$lockFiles = "";
}
-
+
if(!empty($lockFiles)){
// Linux only call
if(preg_match("/Linux/", $os)){
$lockedFilesStatus = $remote->lock_additional_home_files($home_info['home_path'], $lockFiles, "lock");
}
}
-
+
$start_retval = $remote->universal_start($home_info['home_id'],
$home_info['home_path'],
- $server_xml->server_exec_name,
+ $server_xml->server_exec_name,
$server_xml->exe_location,
$start_cmd, $port, $ip,
$home_info['mods'][$mod_id]['cpu_affinity'],
@@ -1025,7 +1025,7 @@ function api_gamemanager()
$server_xml->game_key,
(isset( $server_xml->console_log ) ? $server_xml->console_log : "")
);
-
+
if( $start_retval == AGENT_ERROR_NOT_EXECUTABLE)
return array("status" => '330', "message" => "The server executable does not have execution permission.");
elseif($start_retval <= 0)
@@ -1052,7 +1052,7 @@ function api_gamemanager()
if(isset($query_port) and $query_port != "" and $query_port != $port)
set_firewall($remote, $firewall_settings, 'allow', $query_port, $ip);
}
-
+
$db->delServerStatusCache($home_info['ip_id'],$port);
$status = "200";
$message = "The server has been started.";
@@ -1064,7 +1064,7 @@ function api_gamemanager()
$remote_retval = $remote->remote_stop_server($home_info['home_id'],
$ip, $port, $server_xml->control_protocol,
$home_info['control_password'],$server_xml->control_protocol_type, $home_info['home_path']);
-
+
if($remote_retval === -1)
return array("status" => '332', "message" => "The server could not be stopped.");
elseif($remote_retval === -2)
@@ -1122,35 +1122,35 @@ function api_gamemanager()
require_once('protocol/lgsl/lgsl_protocol.php');
require_once(MODULES."gamemanager/cfg_text_replace.php");
}
-
+
// Run pre-start commands
if(isset($server_xml->pre_start) && !empty($server_xml->pre_start)){
$preStart = trim($server_xml->pre_start);
}else{
$preStart = "";
}
-
+
// Environment variables
if(isset($server_xml->environment_variables) && !empty($server_xml->environment_variables)){
$envVars = trim($server_xml->environment_variables);
}else{
$envVars = "";
}
-
+
// Additional files to lock
if(isset($server_xml->lock_files) && !empty($server_xml->lock_files)){
$lockFiles = trim($server_xml->lock_files);
}else{
$lockFiles = "";
}
-
+
if(!empty($lockFiles)){
// Linux only call
if(preg_match("/Linux/", $os)){
$lockedFilesStatus = $remote->lock_additional_home_files($home_info['home_path'], $lockFiles, "lock");
}
}
-
+
$remote_retval = $remote->remote_restart_server($home_info['home_id'],$ip,$port,$server_xml->control_protocol,
$home_info['control_password'],$server_xml->control_protocol_type,$home_info['home_path'],
$server_xml->server_exec_name,$server_xml->exe_location,$start_cmd,
@@ -1158,10 +1158,10 @@ function api_gamemanager()
$home_info['mods'][$mod_id]['nice'],
$preStart,
$envVars,
- $server_xml->game_key,
+ $server_xml->game_key,
(isset( $server_xml->console_log ) ? $server_xml->console_log : ""),
$restart_reason);
-
+
if($remote_retval === -1)
return array("status" => '333', "message" => "The server could not be restarted.");
elseif($remote_retval === -2)
@@ -1190,7 +1190,7 @@ function api_gamemanager()
$message = $response;
}
}
-
+
if($request[0] == "update")
{
if(!strstr($access_rights,'u'))
@@ -1218,16 +1218,16 @@ function api_gamemanager()
preg_match("/(win|linux)(32|64)?$/", $server_xml->game_key, $matches);
$os = strtolower($matches[1]) == 'linux'? 'linux':'windows';
$arch = isset($matches[2])?$matches[2]:'32';
-
+
$preInstallCMD = "";
if(isset($server_xml->post_install))
$preInstallCMD .= $server_xml->pre_install;
-
+
$postInstallCMD = "";
if(isset($server_xml->post_install))
$postInstallCMD .= $server_xml->post_install;
- $postInstallCMD .= "\n{OGP_LOCK_FILE} " . $home_info['home_path'] . "/" . ($server_xml->exe_location ? $server_xml->exe_location . "/" : "") . $server_xml->server_exec_name;
-
+ $postInstallCMD .= "\n{GSP_LOCK_FILE} " . $home_info['home_path'] . "/" . ($server_xml->exe_location ? $server_xml->exe_location . "/" : "") . $server_xml->server_exec_name;
+
$remote->steam_cmd($home_info['home_id'],$home_info['home_path'],$installer_name,$modname,
$betaname,$betapwd,$login,$pass,$settings['steam_guard'],
$exec_folder_path,$exec_path,$preInstallCMD,$postInstallCMD,$os,'',$arch);
@@ -1240,7 +1240,7 @@ function api_gamemanager()
$message = 'This game is not supported by Steam installation.';
}
}
-
+
if($_POST['type'] == "master")
{
$ms_home_id = $db->getMasterServer($home_info['remote_server_id'], $home_info['home_cfg_id']);
@@ -1249,16 +1249,16 @@ function api_gamemanager()
$exec_folder_path = clean_path($home_info['home_path'] . "/" . $server_xml->exe_location );
$exec_path = clean_path($exec_folder_path . "/" . $server_xml->server_exec_name );
$ms_info = $db->getGameHome($ms_home_id);
-
+
$preInstallCMD = "";
if(isset($server_xml->post_install))
$preInstallCMD .= $server_xml->pre_install;
-
+
$postInstallCMD = "";
if(isset($server_xml->post_install))
$postInstallCMD .= $server_xml->post_install;
- $postInstallCMD .= "\n{OGP_LOCK_FILE} " . $home_info['home_path'] . "/" . ($server_xml->exe_location ? $server_xml->exe_location . "/" : "") . $server_xml->server_exec_name;
-
+ $postInstallCMD .= "\n{GSP_LOCK_FILE} " . $home_info['home_path'] . "/" . ($server_xml->exe_location ? $server_xml->exe_location . "/" : "") . $server_xml->server_exec_name;
+
$remote->masterServerUpdate($home_id,$home_info['home_path'],$ms_home_id,$ms_info['home_path'],$exec_folder_path,$exec_path,$preInstallCMD,$postInstallCMD);
$status = "200";
$message = "Installation from master server ($home_info[home_name]) started";
@@ -1270,24 +1270,24 @@ function api_gamemanager()
}
}
}
-
+
return array("status" => $status, "message" => $message);
}
function api_litefm()
{
global $request, $db, $user_info, $settings;
-
+
$ip = $_POST['ip'];
$port = $_POST['port'];
$relative_path = $_POST['relative_path'];
-
+
$home_info = $db->getGameHomeByIP($ip, $port);
if($home_info === FALSE)
return array("status" => '328', "message" => "There is no game server with the given address ($ip:$port).");
-
+
$isAdmin = $db->isAdmin($user_info['user_id']);
-
+
if($isAdmin)
{
$access_rights = 'ufpetc';
@@ -1301,36 +1301,36 @@ function api_litefm()
}
if(!strstr($access_rights,'f'))
return array("status" => '351', "message" => "You don't have access right for file management in server at $ip:$port.");
-
+
$server_xml = read_server_config(SERVER_CONFIG_LOCATION."/".$home_info['home_cfg_file']);
if($server_xml === FALSE)
return array("status" => '305', "message" => "No game configuration found for home_cfg_id #" . $home_cfg_id . ".");
-
- $remote = new OGPRemoteLibrary($home_info['agent_ip'],$home_info['agent_port'],$home_info['encryption_key'],$home_info['timeout']);
+
+ $remote = new GSPRemoteLibrary($home_info['agent_ip'],$home_info['agent_port'],$home_info['encryption_key'],$home_info['timeout']);
$host_stat = $remote->status_chk();
if($host_stat !== 1)
return array("status" => '310', "message" => "The remote server is offline.");
-
+
$relative_path = preg_replace("/(\.\.)(\\\|\/)+/", '/', $relative_path);
$path = clean_path($home_info['home_path'].'/'.$relative_path);
-
+
if($request[0] != "save" and $remote->rfile_exists($path) === 0)
return array("status" => '338', "message" => "$path does not exists.");
-
+
if($request[0] == "list")
{
$status = "200";
$message = $remote->remote_dirlistfm($path);
}
-
+
if($request[0] == "get")
{
$remote->remote_readfile($path, $data);
$status = "200";
$message = $data;
}
-
+
if($request[0] == "save")
{
$contents = $_POST['contents'];
@@ -1345,7 +1345,7 @@ function api_litefm()
$message = "Could not write to the file.";
}
}
-
+
if($request[0] == "remove")
{
$remote->shell_action('remove_recursive', $path);
@@ -1359,9 +1359,9 @@ function api_litefm()
$status = '340';
$message = "$path could not be removed.";
}
-
+
}
-
+
return array("status" => $status, "message" => $message);
}
@@ -1372,45 +1372,45 @@ function api_addonsmanager()
require_once(MODULES.'addonsmanager/workshop_action.php');
if (file_exists(MODULES.'steam_workshop/includes/functions.php'))
require_once(MODULES.'steam_workshop/includes/functions.php');
-
+
if($db->isModuleInstalled('addonsmanager') === FALSE)
return array("status" => '349', "message" => "This function is not available because the module is not installed.");
-
+
if($request[0] == "list")
{
- $addons_rows = $db->resultQuery("SELECT * FROM OGP_DB_PREFIXaddons");
+ $addons_rows = $db->resultQuery("SELECT * FROM GSP_DB_PREFIXaddons");
$status = "200";
$message = $addons_rows;
}
-
+
if($request[0] == "install")
{
$ip = $_POST['ip'];
$port = (int)$_POST['port'];
$mod_key = isset($_POST['mod_key'])?trim($_POST['mod_key']):'';
$addon_id = (int)$_POST['addon_id'];
-
+
$home_info = $db->getGameHomeByIP($ip, $port);
if($home_info === FALSE)
return array("status" => '328', "message" => "There is no game server with the given address ($ip:$port).");
-
+
$isAdmin = $db->isAdmin($user_info['user_id']);
-
+
if(!$isAdmin and $db->getUserGameHome($user_info['user_id'], $home_info['home_id']) === FALSE)
return array("status" => '329', "message" => "The given address ($ip:$port) does not belong to your account.");
-
+
$server_xml = read_server_config(SERVER_CONFIG_LOCATION."/".$home_info['home_cfg_file']);
if($server_xml === FALSE)
return array("status" => '305', "message" => "No game configuration found for home_cfg_id #" . $home_cfg_id . ".");
-
- $remote = new OGPRemoteLibrary($home_info['agent_ip'],$home_info['agent_port'],$home_info['encryption_key'],$home_info['timeout']);
+
+ $remote = new GSPRemoteLibrary($home_info['agent_ip'],$home_info['agent_port'],$home_info['encryption_key'],$home_info['timeout']);
$host_stat = $remote->status_chk();
if($host_stat !== 1)
return array("status" => '310', "message" => "The remote server is offline.");
-
+
$mod_id = key($home_info['mods']);
-
+
if($mod_key != '')
{
foreach ((array)$home_info['mods'] as $home_mod)
@@ -1424,7 +1424,7 @@ function api_addonsmanager()
}
else
$mod_key = $home_info['mods'][$mod_id]['mod_key'];
-
+
$query_groups = "";
if(!$isAdmin)
{
@@ -1435,13 +1435,13 @@ function api_addonsmanager()
$query_groups .= "group_id=0 OR group_id IS NULL)";
}
- $addons_rows = $db->resultQuery("SELECT * FROM OGP_DB_PREFIXaddons WHERE home_cfg_id=".$home_info['home_cfg_id']." AND addon_id=".$addon_id.$query_groups);
+ $addons_rows = $db->resultQuery("SELECT * FROM GSP_DB_PREFIXaddons WHERE home_cfg_id=".$home_info['home_cfg_id']." AND addon_id=".$addon_id.$query_groups);
if($addons_rows === FALSE)
return array("status" => '341', "message" => "Invalid addon id #" . $addon_id . ".");
-
+
$addon_info = $addons_rows[0];
-
+
$install_method = scm_get_install_method_default(isset($addon_info['install_method']) ? $addon_info['install_method'] : 'download_zip');
$validation_payload = scm_collect_install_payload($addon_info);
$validation_message = '';
@@ -1449,12 +1449,12 @@ function api_addonsmanager()
return array("status" => '422', "message" => $validation_message);
$url = $addon_info['url'];
$filename = basename($url);
-
+
$post_script = '';
if($addon_info['post_script'] != "")
{
$addon_info['post_script'] = strip_real_escape_string($addon_info['post_script']);
-
+
if( isset($server_xml->gameq_query_name) )
{
$home_info['query_port'] = get_query_port($server_xml, $home_info['port']);
@@ -1469,9 +1469,9 @@ function api_addonsmanager()
{
$query_port = $port + 24;
}
-
+
$home_info["incremental"] = $db->incrementalNumByHomeId($home_info['home_id'], $home_info['mods'][$mod_id]['mod_cfg_id'], $home_info['remote_server_id']);
-
+
$post_script = preg_replace( "/\%home_path\%/i", $home_info['home_path'], $addon_info['post_script']);
$post_script = preg_replace( "/\%home_name\%/i", $home_info['home_name'], $post_script);
$post_script = preg_replace( "/\%control_password\%/i", $home_info['control_password'], $post_script);
@@ -1542,7 +1542,7 @@ function api_addonsmanager()
$message = "Addon installation failed, file download could not be started.($retval)";
}
}
-
+
return array("status" => $status, "message" => $message);
}
@@ -1587,44 +1587,44 @@ function api_server_content()
function api_steam_workshop()
{
global $request, $db, $user_info, $settings;
-
+
if($db->isModuleInstalled('steam_workshop') === FALSE)
return array("status" => '349', "message" => "This function is not available because the module is not installed.");
-
+
define('CONFIGS', "modules/steam_workshop/game_configs/");
-
+
if($request[0] == "install")
{
$ip = $_POST['ip'];
$port = (int)$_POST['port'];
$mod_key = isset($_POST['mod_key'])?trim($_POST['mod_key']):'';
$mods_list = $_POST['mods_list'];
-
+
$home_info = $db->getGameHomeByIP($ip, $port);
if($home_info === FALSE)
return array("status" => '328', "message" => "There is no game server with the given address ($ip:$port).");
-
+
$isAdmin = $db->isAdmin($user_info['user_id']);
-
+
if(!$isAdmin and $db->getUserGameHome($user_info['user_id'], $home_info['home_id']) === FALSE)
return array("status" => '329', "message" => "The given address ($ip:$port) does not belong to your account.");
-
+
$server_xml = read_server_config(SERVER_CONFIG_LOCATION."/".$home_info['home_cfg_file']);
if($server_xml === FALSE)
return array("status" => '305', "message" => "No game configuration found for home_cfg_id #" . $home_cfg_id . ".");
-
- $remote = new OGPRemoteLibrary($home_info['agent_ip'],$home_info['agent_port'],$home_info['encryption_key'],$home_info['timeout']);
+
+ $remote = new GSPRemoteLibrary($home_info['agent_ip'],$home_info['agent_port'],$home_info['encryption_key'],$home_info['timeout']);
$host_stat = $remote->status_chk();
if($host_stat !== 1)
return array("status" => '310', "message" => "The remote server is offline.");
-
+
require_once(MODULES.'steam_workshop/functions.php');
-
+
if(preg_match('/^([0-9]+,?)+$/', $mods_list))
- {
+ {
$mod_id = key($home_info['mods']);
-
+
if($mod_key != '')
{
foreach ((array)$home_info['mods'] as $home_mod)
@@ -1636,30 +1636,30 @@ function api_steam_workshop()
}
}
}
-
+
$mod_xml = xml_get_mod($server_xml, $home_info['mods'][$mod_id]['mod_key']);
-
+
if($mod_xml == FALSE)
return array("status" => '344', "message" => "mod_key not found from game xml.");
-
+
preg_match('/(linux|win)(32|64)?/i', $home_info['game_key'], $matches);
-
+
if(strtolower($matches[1]) == 'linux')
$os = "Linux";
elseif(strtolower($matches[1]) == 'win')
$os = "Windows";
-
+
$xml_file = CONFIGS.$mod_xml->installer_name."_".$os.".xml";
if(!file_exists($xml_file))
return array("status" => '344', "message" => "No Steam workshop xml file could be found for the game installed in the given ip:port.");
-
+
$dom = new DOMDocument();
-
+
if ( @$dom->load($xml_file) === FALSE )
return array("status" => '345', "message" => "The Steam workshop xml file for this game has bad format.");
-
+
$xml = simplexml_load_file($xml_file);
-
+
$mod_id_array = explode(',', $mods_list);
foreach ((array)$mod_id_array as $workshop_mod_id)
@@ -1673,7 +1673,7 @@ function api_steam_workshop()
break;
}
}
-
+
if(belongs_to_workshop($workshop_mod_id, $xml->workshop_id))
{
if(!$exist)
@@ -1691,17 +1691,17 @@ function api_steam_workshop()
$moddom = dom_import_simplexml($mod)->ownerDocument;
$moddom->formatOutput = true;
$mod_string = $moddom->saveXML($moddom->documentElement);
-
+
$dom = dom_import_simplexml($xml)->ownerDocument;
$dom->formatOutput = true;
-
+
$mods = $dom->getElementsByTagName('mods')->item(0);
-
+
$f = $dom->createDocumentFragment();
$f->appendXML($mod_string."\n");
$mods->appendChild($f);
-
-
+
+
file_put_contents($xml_file, $dom->saveXML());
$xml = simplexml_load_file($xml_file);
}
@@ -1712,7 +1712,7 @@ function api_steam_workshop()
return array("status" => '346', "message" => "Mod $workshop_mod_id does not belong to workshop ".$xml->workshop_id.".");
}
}
-
+
$config = $xml->config;
$anonymous_login = $xml->anonymous_login;
$download_method = $xml->download_method;
@@ -1729,7 +1729,7 @@ function api_steam_workshop()
$mod_names_list = get_mod_names_list($mods_list, $xml->mods->mod);
$mods_full_path = clean_path($home_info['home_path'].'/'.$xml->mods_path);
$workshop_id = $xml->workshop_id;
-
+
$url_list = "";
$filename_list = "";
if($download_method == "steamapi")
@@ -1747,9 +1747,9 @@ function api_steam_workshop()
}
}
}
-
+
if($remote->steam_workshop( $home_info['home_id'],$mods_full_path,$workshop_id,$mods_list,$regex,$mods_backreference_index,
- $variable,$place_after,$mod_string,$string_separator,$config_file_path,$post_install,
+ $variable,$place_after,$mod_string,$string_separator,$config_file_path,$post_install,
$mod_names_list,$anonymous_login,$user,$pass,$download_method,$url_list,$filename_list ) == 1)
{
$status = "200";
@@ -1767,29 +1767,29 @@ function api_steam_workshop()
$message = "The mods list has bad format ($mods_list), must be a list of mod ids separated by coma with no spaces, or only one mod id.";
}
}
-
+
return array("status" => $status, "message" => $message);
}
function api_setting()
{
global $request, $db, $user_info, $settings;
-
+
if($user_info['users_role'] != "admin"){
outputPlainText("-1");
}
-
+
if($request[0] == "get")
{
$setting = $_POST['setting_name'];
if(array_key_exists($setting, (array)$settings)){
$status = "200";
$message = $settings[$setting];
-
+
outputPlainText($message);
}
}
-
+
outputPlainText("-1");
}
?>
diff --git a/Panel/home.php b/Panel/home.php
index 369fb9a5..2a4ab048 100644
--- a/Panel/home.php
+++ b/Panel/home.php
@@ -1,10 +1,10 @@
getSettings();
@$GLOBALS['panel_language'] = $settings['panel_language'];
-ogpLang();
+gspLang();
// Apply debug level from panel settings (overrides the DEBUG_LEVEL constant)
if (defined('DEBUG_MODE') && DEBUG_MODE && function_exists('gsp_apply_debug_level')) {
@@ -65,7 +65,7 @@ if (defined('DEBUG_MODE') && DEBUG_MODE && function_exists('gsp_apply_debug_leve
}
require_once("includes/view.php");
-$view = new OGPView();
+$view = new GSPView();
$view->setCharset(get_lang('lang_charset'));
$view->setTimeZone($settings['time_zone']);
if(isset($_GET['type']) && $_GET['type'] == 'cleared')
@@ -80,14 +80,14 @@ if(isset($_GET['type']) && $_GET['type'] == 'cleared')
}
else
{
- ogpHome();
+ gspHome();
$view->printView();
}
function heading()
{
global $db,$view,$settings;
-
+
if ( !file_exists(CONFIG_FILE) )
{
print_failure(get_lang('failed_to_read_config'));
@@ -101,11 +101,11 @@ function heading()
echo "".get_lang('invalid_redirect')."...
";
$view->refresh("index.php", 2);
return;
- }
+ }
else
{
$info = $db->getUserById($_SESSION['user_id']);
-
+
// Use parent expiration date for subusers
if(!is_null($info['users_parent']) && is_numeric($info['users_parent'])){
$parentInfo = $db->getUserById($info['users_parent']);
@@ -113,11 +113,11 @@ function heading()
$info['user_expires'] = $parentInfo['user_expires'];
}
}
-
+
if($info['user_expires'] != "X")
{
list($days,$strd,$hours,$strh,$minutes,$strm) = explode(" ", read_expire($info['user_expires']));
-
+
$minutes2expire = $minutes + intval( $hours * 60 ) + intval( $days * 24 * 60 );
if($minutes2expire <= 0)
@@ -128,14 +128,14 @@ function heading()
return;
}
}
-
+
if( isset($settings['maintenance_mode']) && $settings['maintenance_mode'] == "1" )
{
if ($_SESSION['users_group'] == "user")
{
echo "".$settings['maintenance_title']."
";
echo "".$settings['maintenance_message']."
";
- $view->setTitle("OGP: Maintenance.");
+ $view->setTitle("GSP: Maintenance.");
echo "".get_lang('logging_out_10')."...
";
$view->refresh("index.php", 10);
session_destroy();
@@ -154,7 +154,7 @@ function heading()
if(isset($maintenance))echo $maintenance;
}
-function ogpHome()
+function gspHome()
{
global $db,$view,$settings;
?>
@@ -163,12 +163,12 @@ function ogpHome()
if(isset($_SESSION['user_id']))
{
$isAdmin = $db->isAdmin($_SESSION['user_id']);
-
+
if ( $isAdmin )
$server_homes = $db->getHomesFor('admin', $_SESSION['user_id']);
else
$server_homes = $db->getHomesFor('user_and_group', $_SESSION['user_id']);
-
+
if(!empty($server_homes))
{
$servers_by_game_name = array();
@@ -203,20 +203,20 @@ function ogpHome()
$query_name = 'ts3';
else
$query_name = $mod;
-
+
//----------+ getting the lgsl image icon
$icon_paths = array("images/icons/$mod.png",
"images/icons/$query_name.png",
"protocol/lgsl/other/icon_unknown.gif");
$icon_path = get_first_existing_file($icon_paths);
-
+
$game_homes_list .= "\n$game_name\n
");
- $database = new OGPDatabaseMysql();
+ die("GSP requires the mysqli PHP extension. Please install it, and then try again.
");
+ $database = new GSPDatabaseMySQL();
$connect_value = $database->connect($db_host,$db_user,$db_pass,$db_name,$table_prefix,$db_port);
-
+
if ($connect_value === TRUE)
return $database;
@@ -70,7 +70,7 @@ function createDatabaseConnection($db_type,$db_host,$db_user,$db_pass,$db_name,$
function get_db_error_text ($db_retval, &$error_text)
{
- if (is_a($db_retval,"OGPDatabase"))
+ if (is_a($db_retval,"GSPDatabase"))
return FALSE;
switch ($db_retval) {
@@ -151,7 +151,7 @@ function get_first_existing_file($paths, $referrer = "", $agent = "")
// Five second timeout...
$origSocketTimeout = ini_get('default_socket_timeout');
ini_set('default_socket_timeout', 5);
-
+
// Get headers with a socket timeout value of 5 seconds...
if(isset($agent) && !empty($agent)){
stream_context_set_default(
@@ -163,18 +163,18 @@ function get_first_existing_file($paths, $referrer = "", $agent = "")
)
);
}
-
+
$file_headers = @get_headers($path);
-
+
// Reset timeout to old value
ini_set('default_socket_timeout', $origSocketTimeout);
}
if(trim($file_headers[0]) == 'HTTP/1.0 200 OK' || trim($file_headers[0]) == 'HTTP/1.1 200 OK') return $path;
}
-
+
if (file_exists($path)) return $path;
}
-
+
return false;
}
@@ -199,7 +199,7 @@ function get_headers_curl($url, $referrer = "", $agent = "")
if(isset($agent) && !empty($agent)){
curl_setopt($ch, CURLOPT_USERAGENT, $agent);
}
-
+
// 5 second timeout should be reasonable...
curl_setopt($ch, CURLOPT_TIMEOUT, 5);
@@ -207,7 +207,7 @@ function get_headers_curl($url, $referrer = "", $agent = "")
$r = explode("\n", $r);
if(is_array($r)){
$r = array_filter($r, 'strlen');
-
+
// Get rid of the last index value which appears to be holding odd characters
array_pop($r);
}
@@ -226,45 +226,45 @@ function sanitizeInputStr($strToProcess, $removeHTML = true, $trim = true, $remo
// For magic quotes or addslashes values
$strToProcess = str_replace('\"', '', $strToProcess);
$strToProcess = str_replace("\'", "", $strToProcess);
-
+
// Remove any possible leftovers
$strToProcess = str_replace('"', '', $strToProcess);
$strToProcess = str_replace("'", "", $strToProcess);
}
-
+
// Trim string value
if($trim){
$strToProcess = trim($strToProcess);
}
-
+
// Remove HTML tags
if($removeHTML){
$strToProcess = strip_tags($strToProcess);
}
-
+
// Return the processed string
return $strToProcess;
}
function startSession(){
if(!isset($_SESSION)){
- session_name("opengamepanel_web");
+ session_name("gameserverpanel_web");
session_start();
}
}
function updateGameConfigsPostInstall($clear_old = false){
global $db;
-
+
if(file_exists('modules/config_games/server_config_parser.php')){
require_once('modules/config_games/server_config_parser.php');
}else{
require_once(__DIR__ . '/../modules/config_games/server_config_parser.php');
}
-
+
if(function_exists("read_server_config")){
removeOldGameConfigs();
-
+
$files = glob(SERVER_CONFIG_LOCATION."*.xml");
if ( empty($files) )
@@ -284,14 +284,14 @@ function updateGameConfigsPostInstall($clear_old = false){
continue;
}
}
-
+
if($counter == count((array)$files)){
return false;
}
-
+
return true;
}
-
+
return false;
}
@@ -300,7 +300,7 @@ function isCoreModule($module){
if(in_array($module, $coreModules)){
return true;
}
-
+
return false;
}
@@ -310,14 +310,14 @@ function recursiveDelete($str) {
}else if(file_exists($str) && is_dir($str)){
// Strip the trailing slash from the directory if there is one
$str = rtrim($str,'/');
-
+
// Get the index of the last slash in the path so that we can pull just the relative folder name being scanned
$lastSlash = strrpos($str, "/");
-
+
if($lastSlash != false){
// Get the folder name so we can ignore "." and ".." which relates to current directory and up a level
$folder = substr($str, $lastSlash + 1);
-
+
if($folder != ".." && $folder != "."){
$scan = glob($str . '/{,.}*', GLOB_BRACE);
if(isset($scan) && is_array($scan)){
@@ -329,7 +329,7 @@ function recursiveDelete($str) {
}
}
}
-
+
return true;
}
@@ -390,21 +390,21 @@ function removeOldGameConfigs(){ // Wrote this function in-case we rename config
'modules/config_games/server_configs/bukkit_win32.xml',
'modules/config_games/server_configs/bukkit_win64.xml',
);
-
+
foreach ((array)$oldConfigsToRemove as $config){
recursiveDelete($config);
- }
+ }
}
function removeOldPanelFiles(){ // Should run post panel update to remove old files that are no longer users
$oldFiles = array(
- 'includes/database_mysql.php',
+ 'includes/database_mysql.php',
'protocol/GameQ/gameq'
);
-
+
foreach ((array)$oldFiles as $file){
recursiveDelete($file);
- }
+ }
}
function runPostUpdateOperations(){
@@ -415,81 +415,81 @@ function runPostUpdateOperations(){
updateCronJobsToNewApi();
}
}
-
+
if(function_exists("updateAllPanelModules")){
updateAllPanelModules();
}
-
+
if(function_exists("removeOldPanelFiles")){
removeOldPanelFiles();
}
-
+
if(!array_key_exists("users_api_key", (array)$_SESSION)){
$_SESSION['users_api_key'] = $db->getApiToken($_SESSION['user_id']);
}
}
-function getOGPGitHubURL($gitHubUsername, $repo){
- $OGPGitHub = "https://github.com/OpenGamePanel/";
- $gitHubURL = $OGPGitHub;
+function getGSPGitHubURL($gitHubUsername, $repo){
+ $GSPGitHub = "https://github.com/GameServerPanel/";
+ $gitHubURL = $GSPGitHub;
if(isset($gitHubUsername) && !empty($gitHubUsername)){
- $gitHubURL = "https://github.com/" . $gitHubUsername . "/";
+ $gitHubURL = "https://github.com/" . $gitHubUsername . "/";
}
-
+
$paths[] = $gitHubURL . $repo . "/commits/master.atom";
$exists = get_first_existing_file($paths);
if($exists !== false){
return $gitHubURL;
}
-
- return $OGPGitHub;
+
+ return $GSPGitHub;
}
-function getOGPGitHubURLUnstrict($gitHubUsername){
- $OGPGitHub = "https://github.com/OpenGamePanel/";
- $gitHubURL = $OGPGitHub;
+function getGSPGitHubURLUnstrict($gitHubUsername){
+ $GSPGitHub = "https://github.com/GameServerPanel/";
+ $gitHubURL = $GSPGitHub;
if(isset($gitHubUsername) && !empty($gitHubUsername)){
- $gitHubURL = "https://github.com/" . $gitHubUsername . "/";
+ $gitHubURL = "https://github.com/" . $gitHubUsername . "/";
}
-
+
$paths[] = $gitHubURL;
-
+
$exists = get_first_existing_file($paths);
if($exists !== false){
return $gitHubURL;
}
-
- return $OGPGitHub;
+
+ return $GSPGitHub;
}
function getGitHubOrganization($gitHubURL){
- $gitHubOrg = "OpenGamePanel";
+ $gitHubOrg = "GameServerPanel";
$githubCom = "github.com";
if(substr($gitHubURL, -1) == "/" && stripos($gitHubURL, $githubCom) !== false){
// Get the immediate folder after github.com
$gitHubOrg = substr($gitHubURL, stripos($gitHubURL, $githubCom) + strlen($githubCom) + 1);
-
+
// Strip last forward slash
$gitHubOrg = substr($gitHubOrg, 0, -1);
}
return $gitHubOrg;
}
-function getOGPLangConstantsJSON(){
- global $OGPLangPre;
+function getGSPLangConstantsJSON(){
+ global $GSPLangPre;
$finalConsts = array();
-
+
$consts = get_defined_constants(true);
foreach ((array)$consts["user"] as $key => $value){
- if(startsWith($key, $OGPLangPre)){
+ if(startsWith($key, $GSPLangPre)){
$finalConsts[$key] = $value;
}
}
-
+
if(count((array)$finalConsts) > 0){
return json_encode(utf8ize($finalConsts));
}
-
+
return false;
}
?>
diff --git a/Panel/includes/html_functions.php b/Panel/includes/html_functions.php
index 0347178c..fbd3e9a4 100644
--- a/Panel/includes/html_functions.php
+++ b/Panel/includes/html_functions.php
@@ -1,10 +1,10 @@
diff --git a/Panel/includes/lang.php b/Panel/includes/lang.php
index 596fad4a..e9d88472 100644
--- a/Panel/includes/lang.php
+++ b/Panel/includes/lang.php
@@ -1,10 +1,10 @@
$request,
'timeout' => $this->timeout
)));
-
+
$status = @file_get_contents("http://".$this->host.":".$this->port."/RPC2", false, $context);
return xmlrpc_decode($status);
}
@@ -119,7 +119,7 @@ class OGPRemoteLibrary
$param = $param_tmp;
return TRUE;
}
-
+
private function add_enc_chk(&$args)
{
$param = "Encryption checking OK";
@@ -230,7 +230,7 @@ class OGPRemoteLibrary
else
return 0;
}
-
+
/// \brief Send a RCON command.
/// \return 1 On success.
@@ -241,15 +241,15 @@ class OGPRemoteLibrary
$control_protocol,$control_password,$control_type, $rconCommand);
$this->add_enc_chk($params_array);
$request = xmlrpc_encode_request("send_rcon_command", $params_array);
-
+
$response = $this->sendRequest($request);
-
+
@list($retval,$data_tmp) = @explode(";",$response);
-
+
if ( $retval > 0 )
{
$lines = explode('\n',$data_tmp);
-
+
foreach ((array)$lines as $line)
{
$data .= base64_decode($line);
@@ -263,7 +263,7 @@ class OGPRemoteLibrary
else
return -1;
}
-
+
/// \return 1 If success
/// \return 0 If file does not exist.
@@ -313,7 +313,7 @@ class OGPRemoteLibrary
else
return -1;
}
-
+
/// \return 1 If success
public function remote_rebootnow()
{
@@ -345,7 +345,7 @@ class OGPRemoteLibrary
else
return -1;
}
-
+
/// Updates the mod located in the game home with steamCmd.
/// \return 1 If update started successfully
/// \return 0 If error
@@ -417,7 +417,7 @@ class OGPRemoteLibrary
return $response;
}
-
+
/// Updates the mod located in the game home with master server.
/// \return 1 If update started successfully
/// \return 0 If error
@@ -537,7 +537,7 @@ class OGPRemoteLibrary
array_walk_recursive($response, function (&$item, $key) {
if ($key == 'filename')$item = base64_decode($item);
});
-
+
return $response;
}
/// \returns the number of CPUs on the server
@@ -584,7 +584,7 @@ class OGPRemoteLibrary
return $response;
}
-
+
public function lock_additional_home_files($game_home, $filesToLockUnlock, $action)
{
$params_array = $this->encrypt_params($game_home, $filesToLockUnlock, $action);
@@ -623,7 +623,7 @@ class OGPRemoteLibrary
if ( $status == 0 )
return array();
-
+
return explode(",",$status);
}
@@ -744,7 +744,7 @@ class OGPRemoteLibrary
return -1;
}
- public function remote_restart_server($home_id,$server_ip,$server_port,
+ public function remote_restart_server($home_id,$server_ip,$server_port,
$control_protocol,$control_password,$control_type,
$home_path,$server_exe,$run_dir,$cmd,$cpu,$nice,$preStart, $envVars, $game_key, $console_log = "", $restart_reason = "")
{
@@ -769,7 +769,7 @@ class OGPRemoteLibrary
else
return 0;
}
-
+
public function sudo_exec($command)
{
$args = $this->encryptParam($command);
@@ -793,7 +793,7 @@ class OGPRemoteLibrary
}
return 0;
}
-
+
public function exec($command)
{
$args = $this->encryptParam($command);
@@ -815,7 +815,7 @@ class OGPRemoteLibrary
}
return $data;
}
-
+
public function secure_path($action, $path)
{
$params_array = $this->encrypt_params($action, $path);
@@ -838,7 +838,7 @@ class OGPRemoteLibrary
}
return $data;
}
-
+
public function get_chattr($path)
{
$args = $this->encryptParam($path);
@@ -860,7 +860,7 @@ class OGPRemoteLibrary
}
return $data;
}
-
+
public function ftp_mgr($action, $login = "", $password = "", $home_path = "")
{
$params_array = $this->encrypt_params($action, $login, $password, $home_path);
@@ -885,7 +885,7 @@ class OGPRemoteLibrary
}
return 0;
}
-
+
public function compress_files($files,$destination,$archive_name,$archive_type)
{
$params_array = $this->encrypt_params($files,$destination,$archive_name,$archive_type);
@@ -893,7 +893,7 @@ class OGPRemoteLibrary
$request = xmlrpc_encode_request("compress_files",$params_array);
return $this->sendRequest($request);
}
-
+
public function stop_fastdl()
{
$args = NULL;
@@ -901,7 +901,7 @@ class OGPRemoteLibrary
$request = xmlrpc_encode_request("stop_fastdl",$args);
return $this->sendRequest($request);
}
-
+
public function start_fastdl()
{
$args = NULL;
@@ -909,7 +909,7 @@ class OGPRemoteLibrary
$request = xmlrpc_encode_request("start_fastdl",$args);
return $this->sendRequest($request);
}
-
+
public function restart_fastdl()
{
$args = NULL;
@@ -917,7 +917,7 @@ class OGPRemoteLibrary
$request = xmlrpc_encode_request("restart_fastdl",$args);
return $this->sendRequest($request);
}
-
+
public function fastdl_status()
{
$args = NULL;
@@ -928,7 +928,7 @@ class OGPRemoteLibrary
return -1;
return 1;
}
-
+
public function fastdl_get_aliases()
{
$args = NULL;
@@ -939,7 +939,7 @@ class OGPRemoteLibrary
return -1;
return $response;
}
-
+
public function fastdl_add_alias($alias,$home,$match_file_extension,$match_client_ip)
{
$params_array = $this->encrypt_params($alias,$home,$match_file_extension,$match_client_ip);
@@ -947,7 +947,7 @@ class OGPRemoteLibrary
$request = xmlrpc_encode_request("fastdl_add_alias",$params_array);
return $this->sendRequest($request);
}
-
+
public function fastdl_del_alias($aliases)
{
if(is_array($aliases))
@@ -965,7 +965,7 @@ class OGPRemoteLibrary
$request = xmlrpc_encode_request("fastdl_del_alias",$params_array);
return $this->sendRequest($request);
}
-
+
public function fastdl_get_info()
{
$args = NULL;
@@ -976,7 +976,7 @@ class OGPRemoteLibrary
return -1;
return $response;
}
-
+
public function fastdl_create_config($fd_address, $fd_port, $listing, $autostart_on_agent_startup)
{
$params_array = $this->encrypt_params($fd_address, $fd_port, $listing, $autostart_on_agent_startup);
@@ -984,7 +984,7 @@ class OGPRemoteLibrary
$request = xmlrpc_encode_request("fastdl_create_config",$params_array);
return $this->sendRequest($request);
}
-
+
public function agent_restart()
{
$args = $this->encryptParam('restart');
@@ -1020,7 +1020,7 @@ class OGPRemoteLibrary
}
return array('success' => false, 'status' => 'unexpected_response', 'message' => (string)$response);
}
-
+
public function scheduler_list_tasks()
{
$args = NULL;
@@ -1041,7 +1041,7 @@ class OGPRemoteLibrary
return $data;
}
}
-
+
public function scheduler_del_task($id)
{
$args = $this->encryptParam($id);
@@ -1049,7 +1049,7 @@ class OGPRemoteLibrary
$request = xmlrpc_encode_request("scheduler_del_task",$args);
return $this->sendRequest($request);
}
-
+
public function scheduler_add_task($job)
{
$args = $this->encryptParam($job);
@@ -1057,7 +1057,7 @@ class OGPRemoteLibrary
$request = xmlrpc_encode_request("scheduler_add_task",$args);
return $this->sendRequest($request);
}
-
+
public function scheduler_edit_task($job_id, $job)
{
$params_array = $this->encrypt_params($job_id, $job);
@@ -1065,40 +1065,40 @@ class OGPRemoteLibrary
$request = xmlrpc_encode_request("scheduler_edit_task",$params_array);
return $this->sendRequest($request);
}
-
+
public function remote_get_file_part($file, $offset, &$data)
{
$params_array = $this->encrypt_params($file, $offset);
$this->add_enc_chk($params_array);
$request = xmlrpc_encode_request("get_file_part",$params_array);
$response = $this->sendRequest($request);
-
+
if ( $response === NULL )
return -1;
if ( is_array($response) && xmlrpc_is_fault($response))
return -1;
-
+
if ( $response === -1 )
return -1;
-
+
list($cur_offset,$data_tmp) = explode(";",$response);
$data = base64_decode($data_tmp);
return $cur_offset;
}
-
+
public function shell_action($action, $arguments)
{
$params_array = $this->encrypt_params($action, $arguments);
$this->add_enc_chk($params_array);
$request = xmlrpc_encode_request("shell_action", $params_array);
$response = $this->sendRequest($request);
-
+
if (is_array($response) && xmlrpc_is_fault($response))
return NULL;
-
+
$data = NULL;
-
+
if (is_array($response) and !empty($response))
{
$data = array();
@@ -1108,9 +1108,9 @@ class OGPRemoteLibrary
}
return $data;
}
-
+
@list($retval,$data_tmp) = @explode(";",$response);
-
+
if ( $retval > 0 )
{
$lines = explode('\n',$data_tmp);
@@ -1121,26 +1121,26 @@ class OGPRemoteLibrary
}
return $data;
}
-
+
public function stop_update($home_id)
{
$args = $this->encryptParam($home_id);
$this->add_enc_chk($args);
$request = xmlrpc_encode_request("stop_update", $args);
$response = $this->sendRequest($request);
-
+
if ($response === NULL)
return -1;
-
+
if (is_array($response) && xmlrpc_is_fault($response))
return -1;
-
+
if ($response === 1)
return -1;
-
+
return 1;
}
-
+
public function remote_query($protocol, $game_type, $ip, $c_port, $q_port, $s_port)
{
$params_array = $this->encrypt_params($protocol, $game_type, $ip, $c_port, $q_port, $s_port);
@@ -1153,26 +1153,26 @@ class OGPRemoteLibrary
return NULL;
return base64_decode($response);
}
-
+
public function send_steam_guard_code($home_id, $sgc)
{
$params_array = $this->encrypt_params($home_id, $sgc);
$this->add_enc_chk($params_array);
$request = xmlrpc_encode_request("send_steam_guard_code", $params_array);
$response = $this->sendRequest($request);
-
+
if ($response === NULL)
return -1;
-
+
if (is_array($response) && xmlrpc_is_fault($response))
return -1;
-
+
if ($response === 1)
return -1;
-
+
return 1;
}
-
+
/// Updates the mod located in the game home with steamCmd.
/// \return 1 If update started successfully
/// \return 0 If error
@@ -1180,8 +1180,8 @@ class OGPRemoteLibrary
public function steam_workshop($home_id, $mods_full_path,
$workshop_id, $mods_list,
$regex, $mods_backreference_index,
- $variable, $place_after, $mod_string,
- $string_separator, $config_file_path,
+ $variable, $place_after, $mod_string,
+ $string_separator, $config_file_path,
$post_install, $mod_names_list,
$anonymous_login, $user, $pass,
$download_method, $url_list, $filename_list)
@@ -1189,15 +1189,15 @@ class OGPRemoteLibrary
$params = $this->encrypt_params($home_id, $mods_full_path,
$workshop_id, $mods_list,
$regex, $mods_backreference_index,
- $variable, $place_after, $mod_string,
- $string_separator, $config_file_path,
+ $variable, $place_after, $mod_string,
+ $string_separator, $config_file_path,
$post_install, $mod_names_list,
$anonymous_login, $user, $pass,
$download_method, $url_list, $filename_list);
$this->add_enc_chk($params);
$request = xmlrpc_encode_request("steam_workshop", $params);
$response = $this->sendRequest($request);
-
+
// Connection Error
if ($response === NULL)
return -3;
@@ -1213,7 +1213,7 @@ class OGPRemoteLibrary
//Unknown response
return -4;
}
-
+
public function get_workshop_mods_info(&$data, $home_id = "")
{
$args = $this->encryptParam($home_id === "" ? "mods_info" : $home_id);
@@ -1230,7 +1230,7 @@ class OGPRemoteLibrary
// mods directory does not exists
if($response === -1)
return -1;
-
+
if(preg_match("/^1;/", $response))
{
list($retval, $data_tmp) = explode(";", $response);
diff --git a/Panel/includes/navig.php b/Panel/includes/navig.php
index 761cf929..9ddd5807 100644
--- a/Panel/includes/navig.php
+++ b/Panel/includes/navig.php
@@ -1,10 +1,10 @@
page as $page )
{
if ( $page["key"] != $wanted_page )
@@ -97,13 +97,13 @@ function navigation() {
include_once( $include_file );
- if ( !function_exists( 'exec_ogp_module' ) )
+ if ( !function_exists( 'exec_gsp_module' ) )
{
print_failure("Missing module execute function.");
return;
}
- exec_ogp_module();
+ exec_gsp_module();
return;
}
print_failure("Invalid subpage given.");
@@ -113,12 +113,12 @@ function navigation() {
else if ( is_file( MODULES.$_REQUEST['m'].'/'.$_REQUEST['m'].'.php') )
{
include( MODULES.$_REQUEST['m'].'/'.$_REQUEST['m'].'.php');
- if ( !function_exists( 'exec_ogp_module' ) )
+ if ( !function_exists( 'exec_gsp_module' ) )
{
print_failure("Missing module execute function.");
return;
}
- exec_ogp_module();
+ exec_gsp_module();
}
// If files above are not found then we print an error.
else
diff --git a/Panel/includes/refreshed.php b/Panel/includes/refreshed.php
index 16a5f5e1..6dbcc8b8 100644
--- a/Panel/includes/refreshed.php
+++ b/Panel/includes/refreshed.php
@@ -1,10 +1,10 @@
add("home.php?m=gamemanager&p=log2&type=pop&home_id=5",5000);
echo $refresh->getdiv($pos,"height:500px;overflow : auto;");
- //Build:
+ //Build:
?>url = array();
$this->pos = 0;
}
-
+
public function add($url)
{
$this->url[$this->pos] = $url;
$this->pos++;
return $this->pos-1;
}
-
+
public function getdiv($pos,$style = "")
{
- return "";
+ return "";
}
-
+
public function build($time = "4000")
{
if($_GET['m'] == 'gamemanager' and $_GET['p'] == 'game_monitor')
@@ -97,13 +97,13 @@ class refreshed
"var status = $(this).attr('data-status');\n".
$switch.
"});\n";
-
+
}
else
{
$first = "";
$second = "";
-
+
for($i=0;$i<$this->pos;$i++)
{
$ref = '#refreshed-'.$i;
@@ -120,18 +120,18 @@ class refreshed
"\t success: function(data, textStatus) {\n".
"\t if (!enableCallbacks) return;\n".
"\t $('".$ref."').html(data);\n";
-
+
if($_GET['m'] == 'status' || $_GET['m'] == 'dashboard'){
$first .= "\t animateProgressBars();\n";
}
-
+
if($_GET['m'] == 'gamemanager' and $_GET['p'] == 'log')
{
$first .= "\t $('".$ref."').animate({ scrollTop: $('".$ref."').prop('scrollHeight')*3}, 3000);\n";
}
$first .= "\t }\n".
"\t});\n";
-
+
$second .= "\n".
"\t\tjQuery.ajax({\n".
"\t\t url: \"".$this->url[$i]."\",\n".
@@ -149,11 +149,11 @@ class refreshed
{
$second .= "\t\t $('".$ref."').animate({ scrollTop: 9999});\n";
}
-
+
if($_GET['m'] == 'status' || $_GET['m'] == 'dashboard'){
$second .= "\t\t animateProgressBars();\n";
}
-
+
$second .= "\t\t }\n".
"\t\t});\n";
}
diff --git a/Panel/includes/view.php b/Panel/includes/view.php
index 54e75430..d8d27345 100644
--- a/Panel/includes/view.php
+++ b/Panel/includes/view.php
@@ -1,10 +1,10 @@
getSettings();
}
-
+
// Our global CSS goes first so that themes can override
$this->header_code = '' . "\n";
if(function_exists("getThemePath")){
@@ -69,69 +69,69 @@ class OGPView {
@$bottom = file_get_contents($path.'bottom.html');
@$topbody = file_get_contents($path.'topbody.html');
@$botbody = file_get_contents($path.'botbody.html');
-
+
if ( isset($panel_settings['logo_link']) &&
!empty($panel_settings['logo_link']))
$this->logo = $panel_settings['logo_link'];
-
+
if ( isset($panel_settings['bg_wrapper']) &&
!empty($panel_settings['bg_wrapper']))
$this->bg_wrapper = $panel_settings['bg_wrapper'];
-
-
+
+
if ( isset($panel_settings['time_zone']) &&
!empty($panel_settings['time_zone']))
{
$this->time_zone = $panel_settings['time_zone'];
ini_set('date.timezone', $panel_settings['time_zone']);
}
-
+
if ( isset($panel_settings['panel_name']) &&
!empty($panel_settings['panel_name']))
$this->title = $panel_settings['panel_name'];
-
+
if ( isset($panel_settings['header_code']) &&
- !empty($panel_settings['header_code']))
+ !empty($panel_settings['header_code']))
$this->header_code .= $panel_settings['header_code']."\n";
-
+
$module_name = isset($_GET['m']) ? get_lang($_GET['m']) : "";
$page_name = isset($_GET['p']) ? get_lang($_GET['p']) : "";
$title = $page_name == "" ? $module_name : "$module_name - $page_name";
$title = str_replace("_", " ", $title);
$this->title = $title == "" ? $this->title : $this->title . " [$title]";
-
+
// Dump defined constants to json (for language javascript)
- $jsonStrConsts = getOGPLangConstantsJSON();
+ $jsonStrConsts = getGSPLangConstantsJSON();
if($jsonStrConsts !== false){
- $this->header_code .= '' . "\n";
+ $this->header_code .= '' . "\n";
}
-
+
// Include jQuery, jQuery UI, and our global CSS file in the header code
$stylesheet = '' . "\n";
$javascript = '' . "\n" .
'' . "\n";
-
+
// Include magnific popup
$javascript .= '' . "\n";
$stylesheet .= '' . "\n";
-
+
// Include tablesorter, table collapse, and quick search
$javascript .= '' . "\n" .
'' . "\n" .
'' . "\n";
-
+
// Include our global JS
$javascript .= '' . "\n";
-
+
// Set some useful variables
$javascript .= '' . "\n";
-
+
// Include global JS for modules
- if(is_object($db) && array_key_exists("OGPDatabase", class_parents($db))){
+ if(is_object($db) && array_key_exists("GSPDatabase", class_parents($db))){
foreach($db->getInstalledModules() as $m)
{
$global_js_file = 'js/' . MODULES . "{$m['folder']}_global.js";
@@ -141,7 +141,7 @@ class OGPView {
$javascript .= "\n";
}
}
-
+
// Include CSS and JS for the current module page
if(isset($_GET['m']) and !empty($_GET['m']))
{
@@ -152,19 +152,19 @@ class OGPView {
MODULES . "{$_GET['m']}/{$subpage}.css",
MODULES . "{$_GET['m']}/{$_GET['m']}.css"
);
-
+
foreach ((array)$fc as $file_check){
if(is_readable($file_check)){
$stylesheet .= "\n";
break;
}
}
-
+
$fc = array(
$path . MODULES . "{$_GET['m']}/{$subpage}.js",
$path . MODULES . "{$_GET['m']}/{$_GET['m']}.js"
);
-
+
foreach ((array)$fc as $file_check){
if(is_readable($file_check)){
$javascript .= "\n";
@@ -172,18 +172,18 @@ class OGPView {
}
}
}
-
+
$this->header_code .= $stylesheet.$javascript;
-
+
$buffer = ob_get_contents();
ob_end_clean();
-
+
if ( !empty($this->refreshUrl) )
{
if ( $panel_settings['page_auto_refresh'] == "1" )
- {
+ {
$topbody .= "";
-
+
$this->meta .= "";
-
+
if($this->refreshUrl != "{CURRENT_PAGE}"){
$topbody .= "".get_lang('refresh_page')."";
}else{
@@ -212,19 +212,19 @@ class OGPView {
$topbody .= "";
}
}
-
+
$footer = "";
- if ( is_object($db) && array_key_exists( "OGPDatabase", class_parents($db) ) ) {
+ if ( is_object($db) && array_key_exists( "GSPDatabase", class_parents($db) ) ) {
$footer .= "";
+ $footer .= "
".get_lang('copyright')." © GameServer Panel " . date("Y") . " - ".get_lang('all_rights_reserved')." - ".get_lang('show_version')."
" . get_lang('version') . ": ".@$panel_settings['gsp_version']."
";
}
else
{
- $footer .= "";
+ $footer .= "";
}
-
+
// Add our magnific popup holder to the page (hidden element):
$footer .= '';
@@ -250,13 +250,13 @@ class OGPView {
$_vdesc = 'GSP Panel: Unknown Version';
}
$footer .= '';
-
+
if (!isset($_GET['action']))
{
$filename = 'install.php';
if ( !empty($_SESSION['users_theme']) ) $theme = $_SESSION['users_theme'];
else $theme = $panel_settings['theme'];
-
+
// Attempt to automatically delete the install file only if an admin user has already been created and exists
if(is_object($db)){
$admins = $db->getAdmins();
@@ -264,7 +264,7 @@ class OGPView {
unlink($filename);
}
}
-
+
if (is_readable($filename))
{
if (is_readable($filename) AND $theme == "Modern")
@@ -277,12 +277,12 @@ class OGPView {
}
}
}
-
+
if ( isset($panel_settings['maintenance_mode']) && $panel_settings['maintenance_mode'] == "1" )
{
if ( !empty($_SESSION['users_theme']) ) $theme = $_SESSION['users_theme'];
else $theme = $panel_settings['theme'];
-
+
if (@$_SESSION['users_group'] == "admin" AND $theme == "Modern")
{
$top = "".get_lang('maintenance_mode_on')."!
".$top;
@@ -292,7 +292,7 @@ class OGPView {
$topbody = "".get_lang('maintenance_mode_on')."!
".$topbody;
}
}
-
+
if($cleared){
$page = $buffer;
}
@@ -301,11 +301,11 @@ class OGPView {
$page = str_replace("%meta%",$this->meta,$page);
$top = str_replace("%logo%",$this->logo,$top);
$topbody = str_replace("%bg_wrapper%",$this->bg_wrapper,$topbody);
- if ( !empty($_SESSION['users_theme']) )
+ if ( !empty($_SESSION['users_theme']) )
$theme = $_SESSION['users_theme'];
- else
+ else
$theme = @$panel_settings['theme'];
-
+
$page = str_replace("%bg_wrapper%",$this->bg_wrapper,$page);
$page = str_replace("%title%",$this->title,$page);
$page = str_replace("%header_code%",$this->header_code,$page);
@@ -318,14 +318,14 @@ class OGPView {
$page = str_replace("%footer%",(string)($footer ?? ''),$page);
$page = str_replace("%notifications%",(string)($notifications ?? ''),$page);
}
-
+
// Set the content-type header as this is needed by older browsers
if($dataType == "html"){
header("Content-type: text/html; charset=" . $this->charset);
}else if($dataType == "json"){
header("Content-type: application/json; charset=" . $this->charset);
}
-
+
// Print everything for the template.
print $page;
}
@@ -341,13 +341,13 @@ class OGPView {
{
$this->title = $title;
}
-
+
function setCharset($charset)
{
$this->charset = $charset;
ini_set('default_charset', $charset);
}
-
+
function setTimeZone($time_zone)
{
$time_zone = (!isset($time_zone) or $time_zone == "") ? "America/Chicago" : $time_zone;
diff --git a/Panel/index.orig.php b/Panel/index.orig.php
index 38eb8b07..6063fdeb 100644
--- a/Panel/index.orig.php
+++ b/Panel/index.orig.php
@@ -1,10 +1,10 @@
getSettings();
@$GLOBALS['panel_language'] = $settings['panel_language'];
-ogpLang();
+gspLang();
require_once("includes/view.php");
-$view = new OGPView();
+$view = new GSPView();
$view->setCharset( get_lang('lang_charset') );
if(isset($_GET['type']) && $_GET['type'] == 'cleared')
{
@@ -85,7 +85,7 @@ if(isset($_GET['type']) && $_GET['type'] == 'cleared')
}
else
{
- ogpHome();
+ gspHome();
$view->printView();
}
@@ -93,10 +93,10 @@ function heading()
{
global $db,$view,$settings;
-
+
$view->setCharset( get_lang('lang_charset') );
$view->setTimeZone($settings['time_zone']);
-
+
if ( !file_exists(CONFIG_FILE) )
{
print_failure( get_lang("failed_to_read_config") );
@@ -104,14 +104,14 @@ function heading()
return;
}
// Start Output Buffering
-
+
if( isset($settings['maintenance_mode']) && $settings['maintenance_mode'] == "1" )
{
if ($_SESSION['users_group'] != "admin" )
{
echo "".$settings['maintenance_title']."
";
echo "".$settings['maintenance_message']."
";
- $view->setTitle("OGP: Maintenance.");
+ $view->setTitle("GSP: Maintenance.");
echo "". get_lang("logging_out_10") ."...
";
$view->refresh("index.php", 10);
session_destroy();
@@ -122,21 +122,21 @@ function heading()
if(isset($maintenance))echo $maintenance;
}
-function ogpHome()
+function gspHome()
{
global $db,$view,$settings;
-
+
if( isset($_GET['lang']) AND $_GET['lang'] != "-")
$lang = $_GET['lang'];
elseif( isset($settings['panel_language']) )
$lang = $settings['panel_language'];
else
$lang = "English";
-
+
$locale_files = makefilelist("lang/", ".|..|.svn", true, "folders");
$lang_sel = "