cleanup
This commit is contained in:
parent
a49371c3dd
commit
251af10faf
1190 changed files with 12636 additions and 12476 deletions
12
.github/agent.md
vendored
12
.github/agent.md
vendored
|
|
@ -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)
|
||||
|
|
|
|||
12
.github/copilot-instructions.md
vendored
12
.github/copilot-instructions.md
vendored
|
|
@ -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)
|
||||
|
|
|
|||
16
.github/module-map.md
vendored
16
.github/module-map.md
vendored
|
|
@ -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.
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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%
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
||||
---
|
||||
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
||||
|
|
|
|||
|
|
@ -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.');
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
|
@ -1,10 +1,10 @@
|
|||
<?php
|
||||
/*
|
||||
* GSP - Game Server Panel (WDS)
|
||||
* Copyright (C) 2008 - 2018 The OGP Development Team
|
||||
* Copyright (C) 2008 - 2018 The GSP Development Team
|
||||
* GSP customizations (C) WDS / GameServerPanel
|
||||
*
|
||||
* GSP is a heavily customized fork of OGP maintained by WDS.
|
||||
* GSP is a heavily customized fork of GSP maintained by WDS.
|
||||
* https://github.com/GameServerPanel/GSP
|
||||
*
|
||||
* Dependency Check Page — check.php
|
||||
|
|
@ -127,7 +127,7 @@ $rows[] = [
|
|||
'status' => $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 ────────────────────────────────────────────────
|
||||
|
|
|
|||
|
|
@ -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 */
|
||||
|
|
|
|||
|
|
@ -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
|
||||
<https://github.com/OpenGamePanel/OGP-Website/blob/master/install.php>
|
||||
GSP installer at
|
||||
<https://github.com/GameServerPanel/GSP-Website/blob/master/install.php>
|
||||
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.
|
||||
|
|
|
|||
|
|
@ -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
|
|||
</command>
|
||||
</commands>
|
||||
<environment_variables>
|
||||
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
|
||||
</environment_variables>
|
||||
</game_config>
|
||||
```
|
||||
|
|
@ -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.
|
||||
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
||||
|
|
|
|||
|
|
@ -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 `<game_config>` element (actually within `<game_config>` element as
|
|||
```
|
||||
<game_key>space_engineers_win64</game_key>
|
||||
```
|
||||
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 `<game_key>` element. There can only be one `<protocol>` element.
|
|||
```
|
||||
<protocol>lgsl</protocol>
|
||||
```
|
||||
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 `<server_exec_name>` element. There can only be one `<cli_template>
|
|||
```
|
||||
<cli_template>%MAP%%GAMEMODE%%DIFFICULTY%%GAMELENGTH%%PLAYERS%%MUTATOR% %PORT% %IP% %WEB_ADMIN_PORT% %QUERY_PORT%</cli_template>
|
||||
```
|
||||
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 `<cli_template>` element. There can only be one `<cli_params>` element. Example:
|
||||
|
||||
```
|
||||
<cli_params>
|
||||
<cli_params>
|
||||
<cli_param id="MAP" cli_string="" />
|
||||
<cli_param id="IP" cli_string="-MultiHome=" options="q"/>
|
||||
<cli_param id="PORT" cli_string="-Port=" options="sq"/>
|
||||
|
|
@ -166,7 +166,7 @@ Comes after `<cli_template>` or `<cli_params>` element. There can only be one `
|
|||
<port type="add" id="MY_CUSTOM_PORT">666</port>
|
||||
</reserve_ports>
|
||||
```
|
||||
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 `<cli_template>` 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 `<cli_template>` 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 `<cli_template>` 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 `<cli_template>` 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 `<control_protocol>` element. There can only be one `<mods>` elemen
|
|||
</mods>
|
||||
```
|
||||
|
||||
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 `<installer_name>` 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 `<installer_name>` 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 `<options>` element within the `<param>` 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 `<pre_start>` element. There can only be one `<environment_variable
|
|||
<environment_variables>
|
||||
</environment_variables>
|
||||
```
|
||||
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:
|
||||
|
||||
```
|
||||
<environment_variables>
|
||||
export LD_LIBRARY_PATH="{OGP_HOME_DIR}/RustDedicated_Data/Plugins/x86_64"
|
||||
export LD_LIBRARY_PATH="{GSP_HOME_DIR}/RustDedicated_Data/Plugins/x86_64"
|
||||
</environment_variables>
|
||||
```
|
||||
|
||||
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.
|
||||
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load diff
|
|
@ -1,10 +1,10 @@
|
|||
<?php
|
||||
/*
|
||||
*
|
||||
* OGP - Open Game Panel
|
||||
* Copyright (C) 2008 - 2018 The OGP Development Team
|
||||
* GSP - GameServer Panel
|
||||
* Copyright (C) 2008 - 2018 The GSP Development Team
|
||||
*
|
||||
*
|
||||
* http://www.opengamepanel.org/
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
|
|
@ -45,8 +45,8 @@ $db = createDatabaseConnection($db_type, $db_host, $db_user, $db_pass, $db_name,
|
|||
// Load languages.
|
||||
include_once("includes/lang.php");
|
||||
|
||||
if (!$db instanceof OGPDatabase) {
|
||||
ogpLang();
|
||||
if (!$db instanceof GSPDatabase) {
|
||||
gspLang();
|
||||
die(get_lang('no_db_connection'));
|
||||
}
|
||||
|
||||
|
|
@ -57,7 +57,7 @@ if(hasValue($_SESSION['user_id'])){
|
|||
|
||||
$settings = $db->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 "<p class='note' style='color:red;'>".get_lang('invalid_redirect')."...</p>";
|
||||
$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 "<h2>".$settings['maintenance_title']."</h2>";
|
||||
echo "<p>".$settings['maintenance_message']."</p>";
|
||||
$view->setTitle("OGP: Maintenance.");
|
||||
$view->setTitle("GSP: Maintenance.");
|
||||
echo "<p class='failure'>".get_lang('logging_out_10')."...</p>";
|
||||
$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 .= "<li>\n<a href='?m=gamemanager&p=game_monitor&home_cfg_id=".$server_homes[0]['home_cfg_id'].
|
||||
"'><span data-icon_path='$icon_path'>$game_name</span></a>\n<ul id='submenu_1' >\n";
|
||||
foreach ((array)$server_homes as $server_home)
|
||||
{
|
||||
$button_name = htmlentities($server_home['home_name'] ?? '', ENT_QUOTES, 'UTF-8');
|
||||
if( ! preg_match("/none/i", (string)$server_home['mod_name']) )
|
||||
if( ! preg_match("/none/i", (string)$server_home['mod_name']) )
|
||||
$button_name .= " - ".$server_home['mod_name'];
|
||||
$game_homes_list .= "<li><a title='".$server_home['ip'].':'.$server_home['port'].
|
||||
"' class='user_menu_link' href='?m=gamemanager&p=game_monitor&home_id-mod_id-ip-port=".
|
||||
|
|
@ -271,7 +271,7 @@ function ogpHome()
|
|||
if (isset($_GET['m']) AND $_GET['m'] == $menu['module'] ) $menu_link_class = 'user_menu_link_selected'; else $menu_link_class = 'user_menu_link';
|
||||
}
|
||||
$button_url = "?m=".$module.$subpage;
|
||||
|
||||
|
||||
if ( preg_match( '/\\_?\\_/', get_lang("$button") ) )
|
||||
{
|
||||
$button_name = $menu['menu_name'];
|
||||
|
|
@ -280,29 +280,29 @@ function ogpHome()
|
|||
{
|
||||
$button_name = get_lang("$button");
|
||||
}
|
||||
|
||||
|
||||
echo "<li><a class='".$menu_link_class."' href='".$button_url."'><span class='$button'>".$button_name."</span></a>";
|
||||
if( $menu['subpage'] == "game_monitor" )
|
||||
echo $game_homes_list;
|
||||
echo "</li>\n";
|
||||
}
|
||||
|
||||
|
||||
if($isAdmin)
|
||||
{
|
||||
$data = "";
|
||||
$TotalSelected = false;
|
||||
$menus = $db->getMenusForGroup('admin');
|
||||
|
||||
|
||||
foreach ((array)$menus as $key => $row) {
|
||||
if ( !empty( $row['subpage'] ) )
|
||||
$name[$key] = $row['subpage'];
|
||||
else
|
||||
$name[$key] = $row['module'];
|
||||
|
||||
|
||||
$translation[$key] = get_lang($name[$key]);
|
||||
}
|
||||
array_multisort($translation, $name, SORT_DESC, $menus);
|
||||
|
||||
|
||||
foreach ((array)$menus as $menu)
|
||||
{
|
||||
$module = $menu['module'];
|
||||
|
|
@ -326,7 +326,7 @@ function ogpHome()
|
|||
else if($_GET['p'] != 'edit_user')
|
||||
$TotalSelected = true;
|
||||
$button_url = "?m=".$module.$subpage;
|
||||
|
||||
|
||||
if ( preg_match( '/\\_?\\_/', get_lang("$button") ) )
|
||||
{
|
||||
$button_name = $menu['menu_name'];
|
||||
|
|
@ -335,12 +335,12 @@ function ogpHome()
|
|||
{
|
||||
$button_name = get_lang("$button");
|
||||
}
|
||||
|
||||
|
||||
$data .= "<li><a class='".$menu_link_class."' href='".$button_url."'><span class='$button'>".$button_name."</span></a></li>\n";
|
||||
}
|
||||
?>
|
||||
<li><a href="?m=administration&p=main"
|
||||
<?php
|
||||
<li><a href="?m=administration&p=main"
|
||||
<?php
|
||||
if ((isset($_GET['m']) AND $_GET['m'] == "administration") || $TotalSelected )
|
||||
echo 'class="admin_menu_link_selected"'; else echo 'class="admin_menu_link"';
|
||||
?> target="_self" ><span class="administration" ><?php echo get_lang('administration'); ?></span></a>
|
||||
|
|
@ -354,8 +354,8 @@ function ogpHome()
|
|||
$isSubUser = $db->isSubUser($_SESSION['user_id']);
|
||||
?>
|
||||
<li>
|
||||
<a href="?m=user_admin&p=edit_user&user_id=<?php echo $_SESSION['user_id'] ?>"
|
||||
<?php if (isset($_GET['p']) AND $_GET['p'] == "edit_user" ) echo 'class="user_menu_link_selected"'; else echo 'class="user_menu_link"';
|
||||
<a href="?m=user_admin&p=edit_user&user_id=<?php echo $_SESSION['user_id'] ?>"
|
||||
<?php if (isset($_GET['p']) AND $_GET['p'] == "edit_user" ) echo 'class="user_menu_link_selected"'; else echo 'class="user_menu_link"';
|
||||
?> target="_self" ><span class="username" ><?php echo $_SESSION['users_login']; ?></span></a>
|
||||
<ul>
|
||||
<?php
|
||||
|
|
@ -405,7 +405,7 @@ function ogpHome()
|
|||
}
|
||||
?>
|
||||
%topbody%
|
||||
<?php
|
||||
<?php
|
||||
heading();
|
||||
?>
|
||||
<div class="clear"></div>
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@ function get_function_args($main_request)
|
|||
//______________ Token
|
||||
$functions["token/test"] = array("token" => true);
|
||||
$functions["token/create"] = array("user" => true, "password" => true);
|
||||
|
||||
|
||||
//______________ Remote Servers
|
||||
$functions["server/list"] = array("token" => true);
|
||||
$functions["server/status"] = array("token" => true, "remote_server_id" => true);
|
||||
|
|
@ -39,7 +39,7 @@ function get_function_args($main_request)
|
|||
$functions["gamemanager/restart"] = array("token" => true, "ip" => true, "port" => true, "mod_key" => false);
|
||||
$functions["gamemanager/rcon"] = array("token" => true, "ip" => true, "port" => true, "mod_key" => false, "command" => true);
|
||||
$functions["gamemanager/update"] = array("token" => true, "ip" => true, "port" => true, "mod_key" => false, "type" => true, "manual_url" => false);
|
||||
|
||||
|
||||
//______________ Game Manager Admin
|
||||
$functions["gamemanager_admin/reorder"] = array("token" => true);
|
||||
|
||||
|
|
@ -58,10 +58,10 @@ function get_function_args($main_request)
|
|||
|
||||
//______________ Server Content
|
||||
$functions["server_content/run_scheduled_action"] = array("token" => true, "home_id" => true, "action" => true, "options" => false);
|
||||
|
||||
|
||||
//______________ Settings
|
||||
$functions["setting/get"] = array("token" => true, "setting_name" => true);
|
||||
|
||||
|
||||
if($main_request == "all")
|
||||
return $functions;
|
||||
return isset($functions["$main_request"])?$functions["$main_request"]:false;
|
||||
|
|
@ -80,22 +80,22 @@ function get_query_port($server_xml, $server_port)
|
|||
}
|
||||
|
||||
function get_start_cmd($user_info,$remote,$server_xml,$home_info,$mod_id,$ip,$port,$db)
|
||||
{
|
||||
{
|
||||
$last_param = json_decode($home_info['last_param'], True);
|
||||
|
||||
|
||||
$os = $remote->what_os();
|
||||
|
||||
|
||||
$isAdmin = false;
|
||||
if(hasValue($user_info) && hasValue($user_info['user_id'])){
|
||||
$isAdmin = $db->isAdmin($user_info['user_id']);
|
||||
}
|
||||
|
||||
|
||||
$cli_param_data['GAME_TYPE'] = $home_info['mods'][$mod_id]['mod_key'];
|
||||
$cli_param_data['IP'] = $ip;
|
||||
$cli_param_data['PORT'] = $port;
|
||||
$cli_param_data['HOSTNAME'] = $home_info['home_name'];
|
||||
$cli_param_data['PID_FILE'] = "ogp_game_startup.pid";
|
||||
|
||||
$cli_param_data['PID_FILE'] = "gsp_game_startup.pid";
|
||||
|
||||
// Linux
|
||||
if( preg_match("/Linux/", $os) )
|
||||
{
|
||||
|
|
@ -131,7 +131,7 @@ function get_start_cmd($user_info,$remote,$server_xml,$home_info,$mod_id,$ip,$po
|
|||
$cli_param_data['OUTPUT_PATH'] = $home_path_win;
|
||||
$cli_param_data['USER_PATH'] = $home_path_win;
|
||||
}
|
||||
|
||||
|
||||
if ($server_xml->protocol == "gameq")
|
||||
{
|
||||
$cli_param_data['QUERY_PORT'] = get_query_port($server_xml, $port);
|
||||
|
|
@ -146,13 +146,13 @@ function get_start_cmd($user_info,$remote,$server_xml,$home_info,$mod_id,$ip,$po
|
|||
{
|
||||
$cli_param_data['QUERY_PORT'] = $port + 24;
|
||||
}
|
||||
|
||||
|
||||
$cli_param_data['MAP'] = ($last_param === NULL or !isset($last_param['map'])) ? "" : $last_param['map'];
|
||||
$cli_param_data['PLAYERS'] = ($last_param === NULL or !isset($last_param['players'])) ?
|
||||
isset($home_info['mods'][$mod_id]['max_players']) ?
|
||||
$cli_param_data['PLAYERS'] = ($last_param === NULL or !isset($last_param['players'])) ?
|
||||
isset($home_info['mods'][$mod_id]['max_players']) ?
|
||||
$home_info['mods'][$mod_id]['max_players'] : "1" : $last_param['players'];
|
||||
$cli_param_data['CONTROL_PASSWORD'] = $home_info['control_password'];
|
||||
|
||||
|
||||
$start_cmd = "";
|
||||
// If the template is empty then these are not needed.
|
||||
if ( $server_xml->cli_template )
|
||||
|
|
@ -174,7 +174,7 @@ function get_start_cmd($user_info,$remote,$server_xml,$home_info,$mod_id,$ip,$po
|
|||
$cli['cli_string'].$add_space.$cli_value, $start_cmd );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if ( $server_xml->reserve_ports )
|
||||
{
|
||||
foreach ( $server_xml->reserve_ports->port as $reserve_port )
|
||||
|
|
@ -198,20 +198,20 @@ function get_start_cmd($user_info,$remote,$server_xml,$home_info,$mod_id,$ip,$po
|
|||
{
|
||||
$home_info['access_rights'] = "ufpet";
|
||||
}
|
||||
|
||||
$param_access_enabled = preg_match("/p/",$home_info['access_rights']) > 0 ? TRUE : FALSE;
|
||||
|
||||
|
||||
$param_access_enabled = preg_match("/p/",$home_info['access_rights']) > 0 ? TRUE : FALSE;
|
||||
|
||||
if ($param_access_enabled && $last_param !== NULL and isset($server_xml->server_params->param) )
|
||||
{
|
||||
foreach($server_xml->server_params->param as $param)
|
||||
{
|
||||
{
|
||||
foreach ((array)$last_param as $paramKey => $paramValue)
|
||||
{
|
||||
if (!isset($paramValue))
|
||||
$paramValue = (string)$param->default;
|
||||
|
||||
|
||||
if ($param['key'] == $paramKey)
|
||||
{
|
||||
{
|
||||
if (0 == strlen($paramValue))
|
||||
continue;
|
||||
if ($param['key'] == $paramValue) // it's a checkbox
|
||||
|
|
@ -224,27 +224,27 @@ function get_start_cmd($user_info,$remote,$server_xml,$home_info,$mod_id,$ip,$po
|
|||
$new_param = $paramKey . ' ' . clean_server_param_value($paramValue, $server_xml->cli_allow_chars);
|
||||
else
|
||||
$new_param = $paramKey . ' "' . clean_server_param_value($paramValue, $server_xml->cli_allow_chars) . '"';
|
||||
|
||||
|
||||
if ($param['id'] == NULL || $param['id'] == "")
|
||||
$start_cmd .= ' '.$new_param;
|
||||
else
|
||||
$start_cmd = preg_replace( "/%".$param['id']."%/", $new_param, $start_cmd );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if ($param['id'] != NULL && $param['id'] != ""){
|
||||
$start_cmd = preg_replace( "/%".$param['id']."%/", '', $start_cmd );
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
$extra_param_access_enabled = preg_match("/e/",$home_info['access_rights']) > 0 ? TRUE:FALSE;
|
||||
|
||||
|
||||
if ( array_key_exists('extra', (array)$last_param) && $extra_param_access_enabled )
|
||||
$extra_default = $last_param['extra'];
|
||||
else
|
||||
$extra_default = $home_info['mods'][$mod_id]['extra_params'];
|
||||
|
||||
|
||||
$start_cmd .= " ".str_replace("\\\\", "\\", clean_server_param_value($extra_default, $server_xml->cli_allow_chars));
|
||||
|
||||
return $start_cmd;
|
||||
|
|
@ -283,7 +283,7 @@ function send_rcon_command($command, $remote, $server_xml, $home_info, $home_id,
|
|||
{
|
||||
$query_port = $port + 1;
|
||||
$return = $remote->exec('exec 3<>/dev/tcp/'.$ip.'/'. $query_port .' && echo -en "'.$command.'\\nexit\\n" >&3 && cat <&3');
|
||||
if(preg_match("/Connected with 7DTD server/",$return))
|
||||
if(preg_match("/Connected with 7DTD server/",$return))
|
||||
return $return;
|
||||
else
|
||||
return FALSE;
|
||||
|
|
@ -390,7 +390,7 @@ function split_v6_v4($ip) {
|
|||
}
|
||||
|
||||
function ipv6_compress($ip)
|
||||
{
|
||||
{
|
||||
// Prepare the IP to be compressed
|
||||
$ip = ipv6_uncompress($ip);
|
||||
$ip_parts = split_v6_v4($ip);
|
||||
|
|
@ -422,18 +422,18 @@ function is_authorized()
|
|||
$api_hosts_file = 'api_authorized.hosts';
|
||||
$api_fwd_hosts_file = 'api_authorized.fwd_hosts';
|
||||
global $db, $settings;
|
||||
|
||||
|
||||
if(!@$settings['use_authorized_hosts']){
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
$authorized_hosts = array();
|
||||
$ip = getHostByName(getHostName());
|
||||
if(is_valid_ipv4($ip))
|
||||
$authorized_hosts['address']['ipv4'][] = $ip;
|
||||
elseif(is_valid_ipv6($ip))
|
||||
$authorized_hosts['address']['ipv6'][] = $ip;
|
||||
|
||||
|
||||
$remote_servers = $db->getRemoteServers();
|
||||
foreach ((array)$remote_servers as $remote_server)
|
||||
{
|
||||
|
|
@ -444,7 +444,7 @@ function is_authorized()
|
|||
$authorized_hosts['address']['ipv6'][] = $ip;
|
||||
unset($ip);
|
||||
}
|
||||
|
||||
|
||||
if(file_exists($api_hosts_file))
|
||||
{
|
||||
$hosts_list = file_get_contents($api_hosts_file);
|
||||
|
|
@ -452,7 +452,7 @@ function is_authorized()
|
|||
foreach ((array)$hosts as $host)
|
||||
{
|
||||
$host = trim($host);
|
||||
|
||||
|
||||
if($host == '')
|
||||
continue;
|
||||
|
||||
|
|
@ -476,10 +476,10 @@ function is_authorized()
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
$client_forwarded_ip = getClientForwardedIP();
|
||||
$client_ip = $_SERVER['REMOTE_ADDR'];
|
||||
|
||||
|
||||
## Check authorized_hosts
|
||||
$authorized_host = false;
|
||||
if(is_valid_ipv4($client_ip))
|
||||
|
|
@ -504,7 +504,7 @@ function is_authorized()
|
|||
$authorized_host = true;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if($authorized_host)
|
||||
{
|
||||
if($client_forwarded_ip)
|
||||
|
|
@ -518,7 +518,7 @@ function is_authorized()
|
|||
foreach ((array)$fwd_hosts as $fwd_host)
|
||||
{
|
||||
$fwd_host = trim($fwd_host);
|
||||
|
||||
|
||||
if($fwd_host == '')
|
||||
continue;
|
||||
|
||||
|
|
@ -541,7 +541,7 @@ function is_authorized()
|
|||
unset($ip);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if(is_valid_ipv4($client_forwarded_ip))
|
||||
{
|
||||
if(in_array($client_forwarded_ip, $authorized_fwd_hosts['address']['ipv4']))
|
||||
|
|
|
|||
|
|
@ -1,10 +1,10 @@
|
|||
<?php
|
||||
/*
|
||||
*
|
||||
* OGP - Open Game Panel
|
||||
* Copyright (C) 2008 - 2018 The OGP Development Team
|
||||
* GSP - GameServer Panel
|
||||
* Copyright (C) 2008 - 2018 The GSP Development Team
|
||||
*
|
||||
*
|
||||
* http://www.opengamepanel.org/
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
|
|
@ -22,9 +22,9 @@
|
|||
*
|
||||
*/
|
||||
|
||||
define("OGP_DB_PREFIX", "OGP_DB_PREFIX");
|
||||
define("GSP_DB_PREFIX", "GSP_DB_PREFIX");
|
||||
|
||||
abstract class OGPDatabase {
|
||||
abstract class GSPDatabase {
|
||||
|
||||
protected $queries_ = 0;
|
||||
|
||||
|
|
@ -32,7 +32,7 @@ abstract class OGPDatabase {
|
|||
{
|
||||
return $this->queries_;
|
||||
}
|
||||
|
||||
|
||||
public function generateMySQLInClause($arrayOfInputs){
|
||||
$inClause = "IN ('";
|
||||
for($i = 0; $i < count((array)$arrayOfInputs); $i++){
|
||||
|
|
@ -43,7 +43,7 @@ abstract class OGPDatabase {
|
|||
}
|
||||
}
|
||||
$inClause .= "')";
|
||||
|
||||
|
||||
return $inClause;
|
||||
}
|
||||
|
||||
|
|
@ -55,7 +55,7 @@ abstract class OGPDatabase {
|
|||
|
||||
/// Get all available settings
|
||||
abstract public function getSettings();
|
||||
|
||||
|
||||
// Real escape
|
||||
abstract public function realEscapeSingle($string);
|
||||
|
||||
|
|
@ -79,28 +79,28 @@ abstract class OGPDatabase {
|
|||
abstract public function getGroupById($group_id);
|
||||
|
||||
abstract public function getUserList();
|
||||
|
||||
|
||||
abstract public function getUserList_limit($page_user,$limit_user,$search_field);
|
||||
|
||||
abstract public function getGroupList();
|
||||
|
||||
abstract public function getUsersGroups($user_id);
|
||||
|
||||
|
||||
abstract public function getGameServersWithSamePath($remote_id, $home_path);
|
||||
|
||||
|
||||
abstract public function getUserGroupList($user_id);
|
||||
|
||||
/// \return array of users. Array is empty if there is no users available.
|
||||
abstract public function getAvailableUsersForGroup($group_id);
|
||||
|
||||
|
||||
abstract public function getAvailableSubUsersForGroup($group_id, $user_id);
|
||||
|
||||
abstract public function listUsersInGroup($group_id);
|
||||
|
||||
abstract public function getUsersSubUsersIds($user_id);
|
||||
|
||||
|
||||
abstract public function getNumberOfOwnedServersPerUser($userID);
|
||||
|
||||
|
||||
abstract public function listServersInGroup($group_id);
|
||||
|
||||
abstract public function addUser($username,$password,$user_role,$user_email = "");
|
||||
|
|
@ -125,9 +125,9 @@ abstract class OGPDatabase {
|
|||
* group functionality.
|
||||
*/
|
||||
abstract public function isAdmin($user_id);
|
||||
|
||||
|
||||
abstract public function getAdmins();
|
||||
|
||||
|
||||
/**
|
||||
* Returns TRUE if user is admin.
|
||||
* \todo This function might require change as we are creating
|
||||
|
|
@ -138,9 +138,9 @@ abstract class OGPDatabase {
|
|||
abstract public function addModule($module_title,$module,$module_version,$db_version);
|
||||
|
||||
abstract public function getModuleMenu($module_id);
|
||||
|
||||
|
||||
abstract public function getModuleIDByName($name);
|
||||
|
||||
|
||||
abstract public function getModule($id);
|
||||
|
||||
abstract public function addModuleMenu($module_id,$subpage,$group,$name,$pos);
|
||||
|
|
@ -152,8 +152,8 @@ abstract class OGPDatabase {
|
|||
abstract public function addGameModCfg($game_id,$mod_key,$mod_name);
|
||||
|
||||
abstract public function getCurrentHomeConfigMods($clear_all);
|
||||
|
||||
abstract public function updateOGPGameModsWithNewIDs($oldModStructure);
|
||||
|
||||
abstract public function updateGSPGameModsWithNewIDs($oldModStructure);
|
||||
|
||||
abstract public function clearGameCfgs($clear_all);
|
||||
|
||||
|
|
@ -180,7 +180,7 @@ abstract class OGPDatabase {
|
|||
|
||||
/// \brief Get Remote servers
|
||||
abstract public function getRemoteServers();
|
||||
|
||||
|
||||
abstract public function getRemoteServers_ts3($assign_id);
|
||||
|
||||
abstract public function removeRemoteServer($remote_server_id);
|
||||
|
|
@ -200,7 +200,7 @@ abstract class OGPDatabase {
|
|||
abstract public function getHomeIpPorts($home_id);
|
||||
|
||||
abstract public function getHomesFor($id_type,$assign_id);
|
||||
|
||||
|
||||
abstract public function getHomesFor_limit($id_type,$assign_id,$home_page,$home_limit,$home_cfg_id,$search_field);
|
||||
|
||||
abstract public function getHomeMods($home_id);
|
||||
|
|
@ -210,15 +210,15 @@ abstract class OGPDatabase {
|
|||
abstract public function isIpPortOwnedByUser($user_id, $ip, $port);
|
||||
|
||||
abstract public function getRemoteServerById($remote_server_id);
|
||||
|
||||
|
||||
abstract public function getCfgHomeById($cfgid);
|
||||
|
||||
abstract public function getIpPortsForUser($user_id);
|
||||
|
||||
abstract public function getIpPortsForUser_limit($user_id,$page_user,$limit_user);
|
||||
|
||||
|
||||
abstract public function getIpPorts_count($id_type,$assign_id);
|
||||
|
||||
|
||||
// Module manager functions
|
||||
|
||||
/// \brief Returns the installed modules.
|
||||
|
|
@ -256,11 +256,11 @@ abstract class OGPDatabase {
|
|||
abstract public function delGameMod($mod_id);
|
||||
|
||||
abstract public function changeHomePath($home_id,$path);
|
||||
|
||||
|
||||
abstract public function changeUserIdMain($home_id,$userid);
|
||||
|
||||
|
||||
abstract public function changeFtpPassword($home_id,$password);
|
||||
|
||||
|
||||
/// \brief get available mods for game home.
|
||||
abstract public function getAvailableModsForGameHome($home_id);
|
||||
|
||||
|
|
@ -278,21 +278,21 @@ abstract class OGPDatabase {
|
|||
abstract public function getAvailableHomesFor($id_type,$assign_id);
|
||||
|
||||
abstract public function getGameHomes();
|
||||
|
||||
|
||||
abstract public function getGameHomes_limit($page_gameHomes, $limit_gameHomes, $searchType, $searchString);
|
||||
|
||||
/// \return true If username and password match.
|
||||
/// \return false If username and password does not match
|
||||
abstract public function is_valid_login($username,$password);
|
||||
|
||||
|
||||
abstract public function getTablePrefix();
|
||||
|
||||
|
||||
abstract public function getHomeAffinity($home_id);
|
||||
|
||||
|
||||
abstract public function saveGameServerOrder($order);
|
||||
|
||||
|
||||
abstract public function resetGameServerOrder();
|
||||
|
||||
|
||||
abstract public function runMultiSQLQuery($sql);
|
||||
}
|
||||
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load diff
|
|
@ -1,10 +1,10 @@
|
|||
<?php
|
||||
/*
|
||||
*
|
||||
* OGP - Open Game Panel
|
||||
* Copyright (C) 2008 - 2018 The OGP Development Team
|
||||
* GSP - GameServer Panel
|
||||
* Copyright (C) 2008 - 2018 The GSP Development Team
|
||||
*
|
||||
*
|
||||
* http://www.opengamepanel.org/
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
|
|
|
|||
|
|
@ -1,10 +1,10 @@
|
|||
<?php
|
||||
/*
|
||||
*
|
||||
* OGP - Open Game Panel
|
||||
* Copyright (C) 2008 - 2018 The OGP Development Team
|
||||
* GSP - GameServer Panel
|
||||
* Copyright (C) 2008 - 2018 The GSP Development Team
|
||||
*
|
||||
*
|
||||
* http://www.opengamepanel.org/
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
|
|
@ -21,7 +21,7 @@
|
|||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
#functions go here
|
||||
|
||||
//discordmsg() posts a message to a Discord webhook.
|
||||
|
|
@ -90,7 +90,7 @@ function read_expire($endtime)
|
|||
|
||||
function genRandomString($length) {
|
||||
$characters = "0123456789abcdefghijklmnopqrstuvwxyz";
|
||||
$string = "";
|
||||
$string = "";
|
||||
for ($p = 0; $p < $length; $p++) {
|
||||
$string .= $characters[mt_rand(0, strlen($characters)-1)];
|
||||
}
|
||||
|
|
@ -98,9 +98,9 @@ function genRandomString($length) {
|
|||
}
|
||||
|
||||
function get_map_path($query_name,$mod,$map) {
|
||||
|
||||
|
||||
$mod_gt = $mod;
|
||||
|
||||
|
||||
if($mod == "cstrike")
|
||||
{
|
||||
if ($query_name == "halflife")
|
||||
|
|
@ -115,7 +115,7 @@ function get_map_path($query_name,$mod,$map) {
|
|||
elseif($query_name == "source")
|
||||
$mod_gt = "tf2";
|
||||
}
|
||||
|
||||
|
||||
$mod_gt = $mod == "fof" ? "hl2dm" : $mod_gt;
|
||||
$mod_gt = $mod == "insurgency" ? "ins" : $mod_gt;
|
||||
$mod_gt = $mod == "redorchestra2" ? "ro2" : $mod_gt;
|
||||
|
|
@ -146,11 +146,11 @@ function get_map_path($query_name,$mod,$map) {
|
|||
return get_first_existing_file($map_paths, 'http://gametracker.com', 'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:51.0) Gecko/20100101 Firefox/51.0');
|
||||
}
|
||||
|
||||
// Thanks adjo (http://opengamepanel.org/forum/viewthread.php?thread_id=5209#post_25073)
|
||||
// Thanks adjo (forum/viewthread.php?thread_id=5209#post_25073)
|
||||
function curlCacheImage($cachePath, $resource){
|
||||
if(preg_match('/^(https?:\/\/)/', $resource)){
|
||||
$map = explode('/', $resource);
|
||||
|
||||
|
||||
if(!file_exists($cachePath . '/cache/' . end($map))){
|
||||
$ch = curl_init();
|
||||
curl_setopt($ch, CURLOPT_HEADER, 0);
|
||||
|
|
@ -160,13 +160,13 @@ function curlCacheImage($cachePath, $resource){
|
|||
curl_setopt($ch, CURLOPT_URL, $resource);
|
||||
$result = curl_exec($ch);
|
||||
curl_close($ch);
|
||||
|
||||
|
||||
file_put_contents($cachePath . '/cache/' . end($map), $result);
|
||||
}
|
||||
|
||||
|
||||
return $cachePath . '/cache/' . end($map);
|
||||
}
|
||||
|
||||
|
||||
return $resource;
|
||||
}
|
||||
|
||||
|
|
@ -188,7 +188,7 @@ function PopupBuild($data){
|
|||
return "<script type='text/javascript'>$(document).ready(function()\{".$data."\});</script>";
|
||||
}
|
||||
|
||||
function create_home_selector($module, $subpage, $server_homes) {
|
||||
function create_home_selector($module, $subpage, $server_homes) {
|
||||
if ($server_homes == "show_all")
|
||||
{
|
||||
echo "<form method='GET' action=''>\n";
|
||||
|
|
@ -206,9 +206,9 @@ function create_home_selector($module, $subpage, $server_homes) {
|
|||
$ip[$key] = $row['ip'];
|
||||
$port[$key] = $row['port'];
|
||||
}
|
||||
|
||||
|
||||
array_multisort($home_name, $ip, $port, $mod_id, $home_id, SORT_DESC, $server_homes);
|
||||
|
||||
|
||||
echo "<form method='GET' name='select' action=''>\n";
|
||||
echo "<input type='hidden' name='m' value='".$module."' />\n";
|
||||
if( $subpage ) echo "<input type='hidden' name='p' value='".$subpage."' />\n";
|
||||
|
|
@ -259,28 +259,28 @@ function create_home_selector_address($module, $subpage, $server_homes, $extra_i
|
|||
$ip[$key] = $row['ip'];
|
||||
$port[$key] = $row['port'];
|
||||
}
|
||||
array_multisort($home_name, $ip, $port, $mod_id,
|
||||
array_multisort($home_name, $ip, $port, $mod_id,
|
||||
$home_id, SORT_DESC, $server_homes);
|
||||
foreach ((array)$server_homes as $server_home)
|
||||
{
|
||||
$display_ip = checkDisplayPublicIP($server_home['display_public_ip'],$server_home['ip'] != $server_home['agent_ip'] ? $server_home['ip'] : $server_home['agent_ip']);
|
||||
|
||||
if(isset($_GET['home_id-mod_id-ip-port']) and
|
||||
$get_home_id == $server_home['home_id'] and
|
||||
$get_mod_id == $server_home['mod_id'] and
|
||||
$get_ip == $server_home['ip'] and
|
||||
if(isset($_GET['home_id-mod_id-ip-port']) and
|
||||
$get_home_id == $server_home['home_id'] and
|
||||
$get_mod_id == $server_home['mod_id'] and
|
||||
$get_ip == $server_home['ip'] and
|
||||
$get_port == $server_home['port'])
|
||||
$selected = 'selected="selected"';
|
||||
else
|
||||
$selected = '';
|
||||
echo "<option value='". $server_home['home_id'] .
|
||||
"-" . $server_home['mod_id'] . "-" . $server_home['ip'] .
|
||||
"-" . $server_home['port'] . "' $selected >" .
|
||||
"-" . $server_home['mod_id'] . "-" . $server_home['ip'] .
|
||||
"-" . $server_home['port'] . "' $selected >" .
|
||||
htmlentities($server_home['home_name'] ?? '', ENT_QUOTES, 'UTF-8') . " - " . $display_ip .
|
||||
":" . $server_home['port'] . "</option>\n";
|
||||
}
|
||||
echo "</select>\n";
|
||||
echo "</form>";
|
||||
echo "</form>";
|
||||
}
|
||||
|
||||
function create_home_selector_game_type($module, $subpage, $server_homes) {
|
||||
|
|
@ -289,7 +289,7 @@ function create_home_selector_game_type($module, $subpage, $server_homes) {
|
|||
if( $subpage != "" ) echo "<input type='hidden' name='p' value='".$subpage."' />\n";
|
||||
echo "<select onchange=".'"this.form.submit()"'." name='home_cfg_id'>\n".
|
||||
"<option>".get_lang('game_type')."</option>\n";
|
||||
|
||||
|
||||
$servers_by_game_name = array();
|
||||
foreach ((array)$server_homes as $server_home)
|
||||
{
|
||||
|
|
@ -298,7 +298,7 @@ function create_home_selector_game_type($module, $subpage, $server_homes) {
|
|||
$servers_by_game_name["$server_home[game_name]"] = $server_home['home_cfg_id'];
|
||||
}
|
||||
ksort($servers_by_game_name);
|
||||
|
||||
|
||||
foreach ((array)$servers_by_game_name as $game_name => $home_cfg_id )
|
||||
{
|
||||
$selected = (isset($_GET['home_cfg_id']) and $_GET['home_cfg_id'] == $home_cfg_id) ? 'selected="selected"' : "";
|
||||
|
|
@ -310,22 +310,22 @@ function create_home_selector_game_type($module, $subpage, $server_homes) {
|
|||
function mymail($email_address, $subject, $message, $panel_settings, $user_to_panel = FALSE){
|
||||
global $view;
|
||||
if( empty( $panel_settings['panel_name'] ) )
|
||||
$panel_name = "Open Game Panel";
|
||||
$panel_name = "GameServer Panel";
|
||||
else
|
||||
$panel_name = $panel_settings['panel_name'];
|
||||
|
||||
|
||||
// PHP Mailer
|
||||
require_once("PHPMailer/class.phpmailer.php");
|
||||
require_once("PHPMailer/class.smtp.php");
|
||||
|
||||
|
||||
// Create the mail object using the Mail::factory method
|
||||
$mail = new PHPMailer(true); // the true param means it will throw exceptions on errors, which we need to catch
|
||||
|
||||
$mail->IsSMTP(); // telling the class to use SMTP
|
||||
|
||||
|
||||
$mymail = TRUE;
|
||||
|
||||
try
|
||||
|
||||
try
|
||||
{
|
||||
$mail->SMTPDebug = 0; // enables SMTP debug information (for testing)
|
||||
// 1 = errors and messages
|
||||
|
|
@ -335,13 +335,13 @@ function mymail($email_address, $subject, $message, $panel_settings, $user_to_pa
|
|||
$mail->Host = $panel_settings['smtp_server'];
|
||||
else
|
||||
$mail->Host = 'localhost';
|
||||
|
||||
|
||||
// set the SMTP port
|
||||
if (isset($panel_settings['smtp_port']) and !empty($panel_settings['smtp_port']))
|
||||
$mail->Port = $panel_settings['smtp_port'];
|
||||
else
|
||||
$mail->Port = 25;
|
||||
|
||||
|
||||
// sets the prefix to the servier
|
||||
if (isset($panel_settings['smtp_ssl']) and $panel_settings['smtp_ssl'] == 1)
|
||||
$mail->SMTPSecure = "ssl";
|
||||
|
|
@ -359,20 +359,20 @@ function mymail($email_address, $subject, $message, $panel_settings, $user_to_pa
|
|||
$mail->Password = $panel_settings['smtp_passw'];
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if(empty($panel_settings['panel_email_address'])){
|
||||
$panel_email = "noreply@opengamepanel.org";
|
||||
$panel_email = "noreply@gameserverpanel.org";
|
||||
}else{
|
||||
$panel_email = $panel_settings['panel_email_address'];
|
||||
}
|
||||
|
||||
$email_addresses = explode( ",", $email_address );
|
||||
|
||||
|
||||
$email_addresses = explode( ",", $email_address );
|
||||
|
||||
if( $user_to_panel )
|
||||
{
|
||||
$mail->AddAddress($panel_email);
|
||||
$user_to_panel = is_bool($user_to_panel) ? "" : $user_to_panel; // True boolean or user name string
|
||||
foreach ((array)$email_addresses as $address)
|
||||
foreach ((array)$email_addresses as $address)
|
||||
{
|
||||
$mail->SetFrom($address,$user_to_panel);
|
||||
$mail->AddReplyTo($address,$user_to_panel);
|
||||
|
|
@ -380,14 +380,14 @@ function mymail($email_address, $subject, $message, $panel_settings, $user_to_pa
|
|||
}
|
||||
else // panel to user
|
||||
{
|
||||
foreach ((array)$email_addresses as $address)
|
||||
foreach ((array)$email_addresses as $address)
|
||||
{
|
||||
$mail->AddAddress($address);
|
||||
}
|
||||
$mail->SetFrom($panel_email,$panel_name);
|
||||
$mail->AddReplyTo($panel_email,$panel_name);
|
||||
}
|
||||
|
||||
|
||||
$mail->CharSet = $view->charset;
|
||||
$mail->Subject = $subject;
|
||||
$mail->MsgHTML($message);
|
||||
|
|
@ -399,19 +399,19 @@ function mymail($email_address, $subject, $message, $panel_settings, $user_to_pa
|
|||
)
|
||||
);
|
||||
$mail->Send();
|
||||
|
||||
|
||||
}
|
||||
catch (phpmailerException $e)
|
||||
catch (phpmailerException $e)
|
||||
{
|
||||
$mymail = FALSE;
|
||||
echo $e->errorMessage(); //Pretty error messages from PHPMailer
|
||||
}
|
||||
catch (Exception $e)
|
||||
catch (Exception $e)
|
||||
{
|
||||
$mymail = FALSE;
|
||||
echo $e->getMessage(); //Boring error messages from anything else!
|
||||
}
|
||||
|
||||
|
||||
return $mymail;
|
||||
}
|
||||
|
||||
|
|
@ -437,7 +437,7 @@ if( !function_exists("sys_get_temp_dir") )
|
|||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function set_firewall($remote, $firewall_settings, $action, $port, $ip = FALSE)
|
||||
|
|
@ -451,7 +451,7 @@ function set_firewall($remote, $firewall_settings, $action, $port, $ip = FALSE)
|
|||
}
|
||||
if(isset($command))
|
||||
return $remote->sudo_exec($command);
|
||||
else
|
||||
else
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
|
@ -495,7 +495,7 @@ function get_temp_dir($curdir)
|
|||
}
|
||||
|
||||
// ### Escape some characters that could break the server startup or make the user capable to run other programs. ###
|
||||
// \ (backslash) -> At the end of the string, can scape the next quote,
|
||||
// \ (backslash) -> At the end of the string, can scape the next quote,
|
||||
// and is commonly used to create Windows paths, must be escaped.
|
||||
// " (quote) -> Not escaped quote, without an ending quote, would break the startup command.
|
||||
// ' (single quote) -> same than quote.
|
||||
|
|
@ -555,8 +555,8 @@ function array_orderby()
|
|||
return array_pop($args);
|
||||
}
|
||||
|
||||
// Escape a single quote or multiple single quotes
|
||||
// in a string that is passed to bash
|
||||
// Escape a single quote or multiple single quotes
|
||||
// in a string that is passed to bash
|
||||
// and this string is single quoted
|
||||
function esc_squote($str)
|
||||
{
|
||||
|
|
@ -588,12 +588,12 @@ function get_game_selector($os, $game_cfgs, $home_cfg_id = FALSE)
|
|||
{
|
||||
$os_match = '/(win|linux)(32|64)?$/i';
|
||||
}
|
||||
|
||||
|
||||
$selector = "";
|
||||
foreach ((array)$game_cfgs as $row)
|
||||
{
|
||||
if ( preg_match($os_match, $row['game_key'], $matches) )
|
||||
{
|
||||
{
|
||||
$selector .= "<option value='".$row['home_cfg_id']."' ".
|
||||
($home_cfg_id == $row['home_cfg_id'] ? 'selected="selected"' : "").
|
||||
">".$row['game_name'].
|
||||
|
|
@ -602,7 +602,7 @@ function get_game_selector($os, $game_cfgs, $home_cfg_id = FALSE)
|
|||
"</option>\n";
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
return $selector;
|
||||
}
|
||||
|
||||
|
|
@ -615,19 +615,19 @@ function getClientIPAddress(){
|
|||
}else if(isset($_SERVER['HTTP_X_REAL_IP']) && !empty($_SERVER['HTTP_X_REAL_IP'])){
|
||||
$ip = $_SERVER['HTTP_X_REAL_IP'];
|
||||
}
|
||||
|
||||
|
||||
if(isset($ip) && filter_var($ip, FILTER_VALIDATE_IP)){
|
||||
return $ip;
|
||||
}
|
||||
|
||||
|
||||
return $_SERVER['REMOTE_ADDR'];
|
||||
}
|
||||
|
||||
function getOGPSiteURL(){
|
||||
function getGSPSiteURL(){
|
||||
$url = '';
|
||||
$scheme = ( isset($_SERVER['HTTPS']) and get_true_boolean($_SERVER['HTTPS']) ) ? "https://" : "http://";
|
||||
$url .= $scheme;
|
||||
|
||||
|
||||
if(strtolower($_SERVER['HTTP_HOST']) == "localhost"){
|
||||
$ip = getRemoteIPAddressFromSite('http://grabip.tk/');
|
||||
if(!hasValue($ip)){
|
||||
|
|
@ -646,24 +646,24 @@ function getOGPSiteURL(){
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if(isset($ip) and !empty($ip)){
|
||||
$url .= $ip;
|
||||
}else{
|
||||
$url .= $_SERVER['HTTP_HOST'];
|
||||
}
|
||||
|
||||
|
||||
if(!empty($_SERVER['REQUEST_URI'])){
|
||||
$lastSlash = strrpos($_SERVER['REQUEST_URI'], "/");
|
||||
if($lastSlash !== false){
|
||||
$url .= substr($_SERVER['REQUEST_URI'], 0, $lastSlash);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if(!empty($url)){
|
||||
return $url;
|
||||
}
|
||||
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
|
@ -720,7 +720,7 @@ function paginationPages($pageResults, $currentPage, $perPage, $pageUri, $pagesS
|
|||
$totalPages = ceil($pageResults/$perPage);
|
||||
$pageStart = (($currentPage - $pagesShown) > 0) ? $currentPage - $pagesShown : 1;
|
||||
$pageEnd = (($currentPage + $pagesShown) < $totalPages) ? $currentPage + $pagesShown : $totalPages;
|
||||
|
||||
|
||||
if ($pageStart > 1) {
|
||||
$pagination .= '<span class="'.$classPrefix.'_paginationStart">
|
||||
<a href="'.$pageUri . ($currentPage-1) .'" class="'.$classPrefix.'_previousPageLink">«</a>
|
||||
|
|
@ -732,13 +732,13 @@ function paginationPages($pageResults, $currentPage, $perPage, $pageUri, $pagesS
|
|||
$pagination .= '<span class="'.$classPrefix.'_paginationPages">';
|
||||
|
||||
for ($i=$pageStart; $i<=$pageEnd; ++$i) {
|
||||
|
||||
|
||||
if ($currentPage == $i) {
|
||||
$pagination .= '<a href="'.$pageUri . $i .'" class="'.$classPrefix.'_currentPageLink">['.$i.']</a>';
|
||||
} else {
|
||||
$pagination .= '<a href="'.$pageUri . $i .'" class="'.$classPrefix.'_pageLinks">'.$i.'</a>';
|
||||
}
|
||||
|
||||
|
||||
$pagination .= ($i < $pageEnd) ? ', ' : ' ';
|
||||
}
|
||||
|
||||
|
|
@ -763,7 +763,7 @@ function checkDisplayPublicIP($display_public_ip,$internal_ip){
|
|||
|
||||
// Set Cache Timer in Seconds
|
||||
$cache_timer = 600;
|
||||
|
||||
|
||||
// Exit Function when External IP is Internal IP or when Display Public IP is not set
|
||||
if($display_public_ip==$internal_ip || empty($display_public_ip)){
|
||||
return $internal_ip;
|
||||
|
|
@ -772,7 +772,7 @@ function checkDisplayPublicIP($display_public_ip,$internal_ip){
|
|||
if(!isset($_SESSION['gethostbyname_cache'])){
|
||||
$_SESSION['gethostbyname_cache'] = array();
|
||||
}
|
||||
|
||||
|
||||
if(filter_var($display_public_ip, FILTER_VALIDATE_IP)){
|
||||
return $display_public_ip;
|
||||
}else{
|
||||
|
|
@ -831,26 +831,26 @@ function preg_replace_nth($pattern, $replacement, $subject, $nth=1) {
|
|||
function customShift($array, $keyToMoveOn, $valueToMoveOn){
|
||||
foreach ((array)$array as $key => $val){
|
||||
if($val[$keyToMoveOn] == $valueToMoveOn){
|
||||
unset($array[$key]);
|
||||
array_unshift($array, $val);
|
||||
return $array;
|
||||
unset($array[$key]);
|
||||
array_unshift($array, $val);
|
||||
return $array;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
return $array;
|
||||
}
|
||||
|
||||
function getURLParam($param, $url){
|
||||
if(stripos($url, $param) !== false){
|
||||
|
||||
|
||||
$param = substr($url, stripos($url, $param) + strlen($param));
|
||||
if(stripos($param, "&")){
|
||||
$param = substr($param, 0, stripos($param, "&"));
|
||||
}
|
||||
|
||||
|
||||
return $param;
|
||||
}
|
||||
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
|
@ -937,7 +937,7 @@ function updateAllPanelModules(){
|
|||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
foreach ((array)$modules as $row)
|
||||
{
|
||||
if($row['folder'] == 'modulemanager')//already updated
|
||||
|
|
@ -950,11 +950,11 @@ function updateAllPanelModules(){
|
|||
function getRemoteContent($url, $timeout = 5, $referrer = ""){
|
||||
$useCURL = false;
|
||||
$agent = 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:66.0) Gecko/20100101 Firefox/66.0';
|
||||
|
||||
|
||||
try{
|
||||
$currentTimeout = ini_get('default_socket_timeout');
|
||||
ini_set('default_socket_timeout', $timeout); // Timeout in seconds
|
||||
|
||||
|
||||
$streamOptions = array(
|
||||
'http' => array(
|
||||
'method' => 'GET',
|
||||
|
|
@ -966,13 +966,13 @@ function getRemoteContent($url, $timeout = 5, $referrer = ""){
|
|||
'verify_peer_name' => false,
|
||||
)
|
||||
);
|
||||
|
||||
|
||||
if(!empty($referrer)){
|
||||
$streamOptions['header'] = array("Referer: $referer\r\n");
|
||||
}
|
||||
|
||||
|
||||
stream_context_set_default($streamOptions);
|
||||
|
||||
|
||||
$content = file_get_contents($url);
|
||||
if(empty($content) || strlen($content) <=5){
|
||||
$useCURL = true;
|
||||
|
|
@ -983,7 +983,7 @@ function getRemoteContent($url, $timeout = 5, $referrer = ""){
|
|||
}catch (Exception $e) {
|
||||
$useCURL = true;
|
||||
}
|
||||
|
||||
|
||||
if($useCURL && cURLEnabled()){
|
||||
try{
|
||||
$ch = curl_init();
|
||||
|
|
@ -1003,10 +1003,10 @@ function getRemoteContent($url, $timeout = 5, $referrer = ""){
|
|||
return $data;
|
||||
}
|
||||
} catch (Exception $e) {
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
|
@ -1035,19 +1035,19 @@ function deleteMysqlAddonDatabasesForGameServerHome($home_id){
|
|||
global $db, $db_host, $db_user, $db_pass, $db_name, $table_prefix, $db_port;
|
||||
// mysqli is always available in PHP 7+; the old mysql extension was removed in PHP 7.
|
||||
require_once("modules/mysql/mysqli_database.php");
|
||||
|
||||
|
||||
require_once('includes/lib_remote.php');
|
||||
|
||||
|
||||
$modDb = new MySQLModuleDatabase();
|
||||
require_once("includes/config.inc.php");
|
||||
$modDb->connect($db_host,$db_user,$db_pass,$db_name,$table_prefix,isset($db_port)?$db_port:NULL);
|
||||
|
||||
|
||||
if(hasValue($home_id) && is_numeric($home_id)){
|
||||
|
||||
|
||||
$dbDeletedCount = 0;
|
||||
|
||||
|
||||
$dbsToDelete = $modDb->getMysqlDBsbyHomeId($home_id);
|
||||
|
||||
|
||||
if(is_array($dbsToDelete) && count((array)$dbsToDelete)){
|
||||
foreach ((array)$dbsToDelete as $dbToDel){
|
||||
$mysql_db = $dbToDel;
|
||||
|
|
@ -1055,7 +1055,7 @@ function deleteMysqlAddonDatabasesForGameServerHome($home_id){
|
|||
if($mysql_db['remote_server_id'] != "0")
|
||||
{
|
||||
$remote_server = $db->getRemoteServer($mysql_db['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']);
|
||||
$host_stat = $remote->status_chk();
|
||||
if($host_stat === 1 )
|
||||
{
|
||||
|
|
@ -1075,7 +1075,7 @@ function deleteMysqlAddonDatabasesForGameServerHome($home_id){
|
|||
} catch (Throwable $e) {
|
||||
$link = false;
|
||||
}
|
||||
|
||||
|
||||
if ( $link !== FALSE )
|
||||
{
|
||||
$queries = array("DROP DATABASE ".$mysql_db['db_name'].";",
|
||||
|
|
@ -1090,13 +1090,13 @@ function deleteMysqlAddonDatabasesForGameServerHome($home_id){
|
|||
$db->connect($db_host,$db_user,$db_pass,$db_name,$table_prefix,isset($db_port)?$db_port:NULL);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if ( $modDb->removeMysqlServerDB($dbToDel['db_id']) !== FALSE )
|
||||
{
|
||||
$dbDeletedCount++;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if($dbDeletedCount == count((array)$dbsToDelete)){
|
||||
return true;
|
||||
}else if($dbDeletedCount > 0){
|
||||
|
|
@ -1104,7 +1104,7 @@ function deleteMysqlAddonDatabasesForGameServerHome($home_id){
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
return false;
|
||||
}
|
||||
?>
|
||||
|
|
|
|||
|
|
@ -1,10 +1,10 @@
|
|||
<?php
|
||||
/*
|
||||
*
|
||||
* OGP - Open Game Panel
|
||||
* Copyright (C) 2008 - 2018 The OGP Development Team
|
||||
* GSP - GameServer Panel
|
||||
* Copyright (C) 2008 - 2018 The GSP Development Team
|
||||
*
|
||||
*
|
||||
* http://www.opengamepanel.org/
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
|
|
@ -23,7 +23,7 @@
|
|||
*/
|
||||
|
||||
// Globals
|
||||
$OGPLangPre = "LANG_";
|
||||
$GSPLangPre = "LANG_";
|
||||
|
||||
// Ignore any request with unwanted values at 'm' or 'p'
|
||||
if( isset($_REQUEST['m']) and !preg_match("/^([a-z]|[0-9]|_|-)+$/i", $_REQUEST['m']) )
|
||||
|
|
@ -52,10 +52,10 @@ function createDatabaseConnection($db_type,$db_host,$db_user,$db_pass,$db_name,$
|
|||
if ( function_exists('mysqli_connect') )
|
||||
require_once("includes/database_mysqli.php");
|
||||
else
|
||||
die("<p class='failure'>OGP requires the <a href='http://php.net/manual/en/book.mysqli.php' target='_blank'>mysqli PHP extension</a>. Please install it, and then try again.</p>");
|
||||
$database = new OGPDatabaseMysql();
|
||||
die("<p class='failure'>GSP requires the <a href='http://php.net/manual/en/book.mysqli.php' target='_blank'>mysqli PHP extension</a>. Please install it, and then try again.</p>");
|
||||
$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;
|
||||
}
|
||||
?>
|
||||
|
|
|
|||
|
|
@ -1,10 +1,10 @@
|
|||
<?php
|
||||
/*
|
||||
*
|
||||
* OGP - Open Game Panel
|
||||
* Copyright (C) 2008 - 2018 The OGP Development Team
|
||||
* GSP - GameServer Panel
|
||||
* Copyright (C) 2008 - 2018 The GSP Development Team
|
||||
*
|
||||
*
|
||||
* http://www.opengamepanel.org/
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
|
|
@ -53,7 +53,7 @@ function create_drop_box_from_array($input_array,$listname,$current_value = "",
|
|||
// Make sure we don't allow HTML or script
|
||||
$key = trim(strip_tags($key));
|
||||
$value = trim(strip_tags($value));
|
||||
|
||||
|
||||
// We want to print lines with zeros, but not empty lines.
|
||||
if ( empty($value) and $value !="0" )
|
||||
{
|
||||
|
|
@ -66,7 +66,7 @@ function create_drop_box_from_array($input_array,$listname,$current_value = "",
|
|||
}
|
||||
|
||||
$sel = "";
|
||||
|
||||
|
||||
if ( $key == $current_value )
|
||||
{
|
||||
$sel .= "selected='selected'";
|
||||
|
|
@ -115,11 +115,11 @@ function check_theme_image($base_image_path)
|
|||
{
|
||||
$base_image_path = ltrim($base_image_path, "/");
|
||||
if(function_exists("getThemePath")){
|
||||
return file_exists( getThemePath() . $base_image_path ) ?
|
||||
return file_exists( getThemePath() . $base_image_path ) ?
|
||||
getThemePath() . $base_image_path :
|
||||
$base_image_path;
|
||||
}
|
||||
|
||||
|
||||
return $base_image_path;
|
||||
}
|
||||
?>
|
||||
|
|
|
|||
|
|
@ -1,10 +1,10 @@
|
|||
<?php
|
||||
/*
|
||||
*
|
||||
* OGP - Open Game Panel
|
||||
* Copyright (C) 2008 - 2018 The OGP Development Team
|
||||
* GSP - GameServer Panel
|
||||
* Copyright (C) 2008 - 2018 The GSP Development Team
|
||||
*
|
||||
*
|
||||
* http://www.opengamepanel.org/
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
|
|
@ -36,11 +36,11 @@ function add_lang_module($lang_module)
|
|||
{
|
||||
global $lang_modules;
|
||||
array_push($lang_modules,$lang_module);
|
||||
// Need to reload langs if module is added after the first ogpLang call.
|
||||
ogpLang();
|
||||
// Need to reload langs if module is added after the first gspLang call.
|
||||
gspLang();
|
||||
}
|
||||
|
||||
function ogpLang()
|
||||
function gspLang()
|
||||
{
|
||||
global $lang_modules;
|
||||
$locale_files = makefilelist("lang/", ".|..|.svn", true, "folders");
|
||||
|
|
@ -85,7 +85,7 @@ function ogpLang()
|
|||
}
|
||||
}
|
||||
|
||||
function ogp_load_english_fallbacks()
|
||||
function gsp_load_english_fallbacks()
|
||||
{
|
||||
static $coreLoaded = false;
|
||||
static $loadedModules = array();
|
||||
|
|
@ -100,7 +100,7 @@ function ogp_load_english_fallbacks()
|
|||
$coreFiles = glob($englishDir . "/*.php");
|
||||
if (is_array($coreFiles)) {
|
||||
foreach ($coreFiles as $coreFile) {
|
||||
ogp_include_lang_file_safely($coreFile);
|
||||
gsp_include_lang_file_safely($coreFile);
|
||||
}
|
||||
}
|
||||
$coreLoaded = true;
|
||||
|
|
@ -123,13 +123,13 @@ function ogp_load_english_fallbacks()
|
|||
}
|
||||
$moduleFile = $englishDir . "/modules/" . $moduleName . ".php";
|
||||
if (is_file($moduleFile)) {
|
||||
ogp_include_lang_file_safely($moduleFile);
|
||||
gsp_include_lang_file_safely($moduleFile);
|
||||
}
|
||||
$loadedModules[$moduleName] = true;
|
||||
}
|
||||
}
|
||||
|
||||
function ogp_include_lang_file_safely($filePath)
|
||||
function gsp_include_lang_file_safely($filePath)
|
||||
{
|
||||
set_error_handler(function ($severity, $message) {
|
||||
$isConstantRedefinition = (bool)preg_match('/^Constant\\s+.+\\s+already\\s+defined$/i', trim((string)$message));
|
||||
|
|
@ -144,20 +144,20 @@ function ogp_include_lang_file_safely($filePath)
|
|||
|
||||
function get_lang($lang_index)
|
||||
{
|
||||
global $OGPLangPre;
|
||||
|
||||
global $GSPLangPre;
|
||||
|
||||
if (defined($lang_index))
|
||||
{
|
||||
return constant($lang_index);
|
||||
}
|
||||
|
||||
if(!startsWith($lang_index, $OGPLangPre)){
|
||||
$newLangIndex = $OGPLangPre . $lang_index;
|
||||
|
||||
if(!startsWith($lang_index, $GSPLangPre)){
|
||||
$newLangIndex = $GSPLangPre . $lang_index;
|
||||
if (defined($newLangIndex))
|
||||
{
|
||||
return constant($newLangIndex);
|
||||
}
|
||||
ogp_load_english_fallbacks();
|
||||
gsp_load_english_fallbacks();
|
||||
if (defined($newLangIndex))
|
||||
{
|
||||
return constant($newLangIndex);
|
||||
|
|
@ -165,7 +165,7 @@ function get_lang($lang_index)
|
|||
}
|
||||
else
|
||||
{
|
||||
ogp_load_english_fallbacks();
|
||||
gsp_load_english_fallbacks();
|
||||
if (defined($lang_index))
|
||||
{
|
||||
return constant($lang_index);
|
||||
|
|
@ -178,7 +178,7 @@ function get_lang($lang_index)
|
|||
|
||||
function get_lang_f()
|
||||
{
|
||||
global $OGPLangPre;
|
||||
global $GSPLangPre;
|
||||
$args = func_get_args();
|
||||
$lang_index = array_shift($args);
|
||||
|
||||
|
|
@ -186,14 +186,14 @@ function get_lang_f()
|
|||
{
|
||||
return vsprintf(constant($lang_index),$args);
|
||||
}
|
||||
|
||||
if(!startsWith($lang_index, $OGPLangPre)){
|
||||
$newLangIndex = $OGPLangPre . $lang_index;
|
||||
|
||||
if(!startsWith($lang_index, $GSPLangPre)){
|
||||
$newLangIndex = $GSPLangPre . $lang_index;
|
||||
if (defined($newLangIndex))
|
||||
{
|
||||
return vsprintf(constant($newLangIndex),$args);
|
||||
}
|
||||
ogp_load_english_fallbacks();
|
||||
gsp_load_english_fallbacks();
|
||||
if (defined($newLangIndex))
|
||||
{
|
||||
return vsprintf(constant($newLangIndex),$args);
|
||||
|
|
@ -201,7 +201,7 @@ function get_lang_f()
|
|||
}
|
||||
else
|
||||
{
|
||||
ogp_load_english_fallbacks();
|
||||
gsp_load_english_fallbacks();
|
||||
if (defined($lang_index))
|
||||
{
|
||||
return vsprintf(constant($lang_index),$args);
|
||||
|
|
|
|||
|
|
@ -1,10 +1,10 @@
|
|||
<?php
|
||||
/*
|
||||
*
|
||||
* OGP - Open Game Panel
|
||||
* Copyright (C) 2008 - 2018 The OGP Development Team
|
||||
* GSP - GameServer Panel
|
||||
* Copyright (C) 2008 - 2018 The GSP Development Team
|
||||
*
|
||||
*
|
||||
* http://www.opengamepanel.org/
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
|
|
@ -43,12 +43,12 @@ if (!defined('GSP_XMLRPC_READY')) {
|
|||
}
|
||||
|
||||
// Screen type for servers
|
||||
define("OGP_SCREEN_TYPE_HOME","HOME");
|
||||
define("OGP_SCREEN_TYPE_UPDATE","UPDATE");
|
||||
define("GSP_SCREEN_TYPE_HOME","HOME");
|
||||
define("GSP_SCREEN_TYPE_UPDATE","UPDATE");
|
||||
|
||||
define("AGENT_ERROR_NOT_EXECUTABLE",-13);
|
||||
|
||||
class OGPRemoteLibrary
|
||||
class GSPRemoteLibrary
|
||||
{
|
||||
private $port;
|
||||
private $host;
|
||||
|
|
@ -80,7 +80,7 @@ class OGPRemoteLibrary
|
|||
'content' => $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);
|
||||
|
|
|
|||
|
|
@ -1,10 +1,10 @@
|
|||
<?php
|
||||
/*
|
||||
*
|
||||
* OGP - Open Game Panel
|
||||
* Copyright (C) 2008 - 2018 The OGP Development Team
|
||||
* GSP - GameServer Panel
|
||||
* Copyright (C) 2008 - 2018 The GSP Development Team
|
||||
*
|
||||
*
|
||||
* http://www.opengamepanel.org/
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
|
|
@ -62,7 +62,7 @@ function navigation() {
|
|||
|
||||
// If the subpage is not defined we use the default page.
|
||||
$wanted_page = isset($_REQUEST['p']) ? $_REQUEST['p'] : "default";
|
||||
|
||||
|
||||
foreach ( $xml_navig->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
|
||||
|
|
|
|||
|
|
@ -1,10 +1,10 @@
|
|||
<?php
|
||||
/*
|
||||
*
|
||||
* OGP - Open Game Panel
|
||||
* Copyright (C) 2008 - 2018 The OGP Development Team
|
||||
* GSP - GameServer Panel
|
||||
* Copyright (C) 2008 - 2018 The GSP Development Team
|
||||
*
|
||||
*
|
||||
* http://www.opengamepanel.org/
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
|
|
@ -22,7 +22,7 @@
|
|||
*
|
||||
*/
|
||||
|
||||
# Open Game Panel refreshed Class
|
||||
# GameServer Panel refreshed Class
|
||||
# Wrote by: Nirock
|
||||
# Sample Setup:
|
||||
/*
|
||||
|
|
@ -31,7 +31,7 @@
|
|||
$refresh = new refreshed();
|
||||
$pos = $refresh->add("home.php?m=gamemanager&p=log2&type=pop&home_id=5",5000);
|
||||
echo $refresh->getdiv($pos,"height:500px;overflow : auto;");
|
||||
//Build:
|
||||
//Build:
|
||||
?><script type="text/javascript">$(document).ready(function(){ <?php echo $refresh->build(); ?>} ); </script><?php
|
||||
*/
|
||||
|
||||
|
|
@ -39,25 +39,25 @@ class refreshed
|
|||
{
|
||||
private $url;
|
||||
private $pos;
|
||||
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
$this->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 "<div id='refreshed-".$pos."' style='".$style."'></div>";
|
||||
return "<div id='refreshed-".$pos."' style='".$style."'></div>";
|
||||
}
|
||||
|
||||
|
||||
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";
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,10 +1,10 @@
|
|||
<?php
|
||||
/*
|
||||
*
|
||||
* OGP - Open Game Panel
|
||||
* Copyright (C) 2008 - 2018 The OGP Development Team
|
||||
* GSP - GameServer Panel
|
||||
* Copyright (C) 2008 - 2018 The GSP Development Team
|
||||
*
|
||||
*
|
||||
* http://www.opengamepanel.org/
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
|
|
@ -24,10 +24,10 @@
|
|||
|
||||
define("DEFAULT_REFRESH_TIME","2");
|
||||
|
||||
class OGPView {
|
||||
class GSPView {
|
||||
|
||||
private string $meta = '';
|
||||
private string $title = 'Open Game Panel';
|
||||
private string $title = 'GameServer Panel';
|
||||
private string $header_code = '';
|
||||
|
||||
private $refreshTime;
|
||||
|
|
@ -46,16 +46,16 @@ class OGPView {
|
|||
function __destruct() {
|
||||
|
||||
}
|
||||
|
||||
|
||||
function menu(){}
|
||||
|
||||
function printView($cleared = false, $dataType = "html") {
|
||||
global $db, $OGPLangPre;
|
||||
global $db, $GSPLangPre;
|
||||
|
||||
if ( is_object($db) && array_key_exists( "OGPDatabase", class_parents($db) ) ) {
|
||||
if ( is_object($db) && array_key_exists( "GSPDatabase", class_parents($db) ) ) {
|
||||
$panel_settings = $db->getSettings();
|
||||
}
|
||||
|
||||
|
||||
// Our global CSS goes first so that themes can override
|
||||
$this->header_code = '<link rel="stylesheet" href="css/global.css">' . "\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 .= '<script type="text/javascript">var langConsts = ' . $jsonStrConsts . ';' . "\n" . 'var langConstPrefix = "' . $OGPLangPre . '";</script>' . "\n";
|
||||
$this->header_code .= '<script type="text/javascript">var langConsts = ' . $jsonStrConsts . ';' . "\n" . 'var langConstPrefix = "' . $GSPLangPre . '";</script>' . "\n";
|
||||
}
|
||||
|
||||
|
||||
// Include jQuery, jQuery UI, and our global CSS file in the header code
|
||||
$stylesheet = '<link rel="stylesheet" href="js/jquery/ui/jquery-ui.min.css">' . "\n";
|
||||
$javascript = '<script type="text/javascript" src="js/jquery/jquery.min.js"></script>' . "\n" .
|
||||
'<script type="text/javascript" src="js/jquery/ui/jquery-ui.min.js"></script>' . "\n";
|
||||
|
||||
|
||||
// Include magnific popup
|
||||
$javascript .= '<script type="text/javascript" src="js/magnific/magnific.js"></script>' . "\n";
|
||||
$stylesheet .= '<link rel="stylesheet" href="js/magnific/magnific.css">' . "\n";
|
||||
|
||||
|
||||
// Include tablesorter, table collapse, and quick search
|
||||
$javascript .= '<script type="text/javascript" src="js/jquery/plugins/jquery.tablesorter.collapsible.js"></script>' . "\n" .
|
||||
'<script type="text/javascript" src="js/jquery/plugins/jquery.tablesorter.min.js"></script>' . "\n" .
|
||||
'<script type="text/javascript" src="js/jquery/plugins/jquery.quicksearch.js"></script>' . "\n";
|
||||
|
||||
|
||||
// Include our global JS
|
||||
$javascript .= '<script type="text/javascript" src="js/global.js"></script>' . "\n";
|
||||
|
||||
|
||||
// Set some useful variables
|
||||
$javascript .= '<script type="text/javascript">';
|
||||
if(array_key_exists("users_api_key", (array)$_SESSION) && !empty($_SESSION['users_api_key'])){
|
||||
$javascript .= 'var userAPIKey = "' . $_SESSION['users_api_key'] . '";';
|
||||
}
|
||||
$javascript .= '</script>' . "\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 .= "<script type=\"text/javascript\" src=\"{$global_js_file}\"></script>\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 .= "<link rel=\"stylesheet\" href=\"{$file_check}\">\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 .= "<script type=\"text/javascript\" src=\"{$file_check}\"></script>\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 .= "<div id='refresh-manual'>";
|
||||
if($this->refreshUrl != "{CURRENT_PAGE}"){
|
||||
if($this->refreshUrl != "{CURRENT_PAGE}"){
|
||||
$topbody .= "<a href='".$this->refreshUrl."' class='redirectLink'>".get_lang('redirecting_in')." ".$this->refreshTime."s.</a>";
|
||||
}else{
|
||||
$url = "//{$_SERVER['HTTP_HOST']}{$_SERVER['REQUEST_URI']}";
|
||||
|
|
@ -191,7 +191,7 @@ class OGPView {
|
|||
$topbody .= "<a href='" . $escaped_url . "' class='redirectLink'>".get_lang('redirecting_in')." ".$this->refreshTime."s.</a>";
|
||||
}
|
||||
$topbody .= "</div>";
|
||||
|
||||
|
||||
$this->meta .= "<meta http-equiv='refresh' content='".$this->refreshTime.";";
|
||||
if($this->refreshUrl != "{CURRENT_PAGE}"){
|
||||
$this->meta .= "url=".$this->refreshUrl;
|
||||
|
|
@ -201,7 +201,7 @@ class OGPView {
|
|||
else
|
||||
{
|
||||
$topbody .= "<div id='refresh-manual'>";
|
||||
|
||||
|
||||
if($this->refreshUrl != "{CURRENT_PAGE}"){
|
||||
$topbody .= "<a href='" . $this->refreshUrl . "'>".get_lang('refresh_page')."</a>";
|
||||
}else{
|
||||
|
|
@ -212,19 +212,19 @@ class OGPView {
|
|||
$topbody .= "</div>";
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
$footer = "";
|
||||
|
||||
if ( is_object($db) && array_key_exists( "OGPDatabase", class_parents($db) ) ) {
|
||||
if ( is_object($db) && array_key_exists( "GSPDatabase", class_parents($db) ) ) {
|
||||
$footer .= "<div class=\"footer center\">";
|
||||
$footer .= get_lang_f('cur_theme', !empty($_SESSION['users_theme']) ? $_SESSION['users_theme'] : @$panel_settings['theme']) . " - " . $db->getNbOfQueries()." ".get_lang('queries_executed');
|
||||
$footer .= "<br />".get_lang('copyright')." © <a href=\"http://www.opengamepanel.org\">Open Game Panel</a> " . date("Y") . " - ".get_lang('all_rights_reserved')." - <span class='versionInfo'>".get_lang('show_version')."</span><br /><div class='inline-block OGPVersionArea'><span class='version hide'>" . get_lang('version') . ":</span> <span class='hide versionNumber'>".@$panel_settings['ogp_version']."</span> <span class='copyVersionResult' lang='" . get_lang('copied') . "'></span></div></div>";
|
||||
$footer .= "<br />".get_lang('copyright')." © <a href=\"\">GameServer Panel</a> " . date("Y") . " - ".get_lang('all_rights_reserved')." - <span class='versionInfo'>".get_lang('show_version')."</span><br /><div class='inline-block GSPVersionArea'><span class='version hide'>" . get_lang('version') . ":</span> <span class='hide versionNumber'>".@$panel_settings['gsp_version']."</span> <span class='copyVersionResult' lang='" . get_lang('copied') . "'></span></div></div>";
|
||||
}
|
||||
else
|
||||
{
|
||||
$footer .= "<div class='footer center'>".get_lang('copyright')." © <a href=\"http://www.opengamepanel.org\">Open Game Panel</a> " . date("Y") . " - ".get_lang('all_rights_reserved').".</div>";
|
||||
$footer .= "<div class='footer center'>".get_lang('copyright')." © <a href=\"\">GameServer Panel</a> " . date("Y") . " - ".get_lang('all_rights_reserved').".</div>";
|
||||
}
|
||||
|
||||
|
||||
// Add our magnific popup holder to the page (hidden element):
|
||||
$footer .= '<div class="mangificWrapper hide"><div class="white-popup"><div class="magnificTitle"></div><div class="magnificSubTitle"></div><div class="magnificContentsDiv"></div><button title="Close (Esc)" type="button" class="mfp-close">×</button></div></div>';
|
||||
|
||||
|
|
@ -250,13 +250,13 @@ class OGPView {
|
|||
$_vdesc = 'GSP Panel: Unknown Version';
|
||||
}
|
||||
$footer .= '<div class="gsp-version-footer">' . $_vdesc . '</div>';
|
||||
|
||||
|
||||
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 = "<h4 class='failure'>".get_lang('maintenance_mode_on')."!</b></h4>".$top;
|
||||
|
|
@ -292,7 +292,7 @@ class OGPView {
|
|||
$topbody = "<h4 class='failure'>".get_lang('maintenance_mode_on')."!</b></h4>".$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;
|
||||
|
|
|
|||
|
|
@ -1,10 +1,10 @@
|
|||
<?php
|
||||
/*
|
||||
*
|
||||
* OGP - Open Game Panel
|
||||
* Copyright (C) 2008 - 2018 The OGP Development Team
|
||||
* GSP - GameServer Panel
|
||||
* Copyright (C) 2008 - 2018 The GSP Development Team
|
||||
*
|
||||
*
|
||||
* http://www.opengamepanel.org/
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
|
|
@ -21,7 +21,7 @@
|
|||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
// Report all PHP errors
|
||||
error_reporting(E_ERROR);
|
||||
|
||||
|
|
@ -36,7 +36,7 @@ require_once("includes/functions.php");
|
|||
require_once("includes/helpers.php");
|
||||
require_once("includes/html_functions.php");
|
||||
|
||||
// Start the session valid for opengamepanel_web only
|
||||
// Start the session valid for gameserverpanel_web only
|
||||
startSession();
|
||||
|
||||
// Useful for debugging :)
|
||||
|
|
@ -49,7 +49,7 @@ if ( !$config_inc_readable && file_exists("install.php") ) {
|
|||
header('Location: install.php');
|
||||
exit();
|
||||
}
|
||||
if ( '' == file_get_contents(CONFIG_FILE) ) {
|
||||
if ( '' == file_get_contents(CONFIG_FILE) ) {
|
||||
header('Location: install.php');
|
||||
exit();
|
||||
}
|
||||
|
|
@ -61,8 +61,8 @@ $db = createDatabaseConnection($db_type, $db_host, $db_user, $db_pass, $db_name,
|
|||
// Load languages.
|
||||
include_once("includes/lang.php");
|
||||
|
||||
if (!$db instanceof OGPDatabase) {
|
||||
ogpLang();
|
||||
if (!$db instanceof GSPDatabase) {
|
||||
gspLang();
|
||||
die(get_lang('no_db_connection'));
|
||||
}
|
||||
|
||||
|
|
@ -73,10 +73,10 @@ if(hasValue($_SESSION['user_id'])){
|
|||
|
||||
$settings = $db->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 "<h2>".$settings['maintenance_title']."</h2>";
|
||||
echo "<p>".$settings['maintenance_message']."</p>";
|
||||
$view->setTitle("OGP: Maintenance.");
|
||||
$view->setTitle("GSP: Maintenance.");
|
||||
echo "<p class='failure'>". get_lang("logging_out_10") ."...</p>";
|
||||
$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 = "<select name='lang' onchange=\"this.form.submit();\" >\n".
|
||||
"<option>-</option>\n";
|
||||
for ($i=0;$i < count((array)$locale_files);$i++)
|
||||
for ($i=0;$i < count((array)$locale_files);$i++)
|
||||
{
|
||||
$selected = ( isset( $_GET['lang'] ) AND $_GET['lang'] != "-" AND $_GET['lang'] == $locale_files[$i] ) ? "selected='selected'" : "";
|
||||
$lang_sel .= "<option $selected value='".$locale_files[$i]."' >".$locale_files[$i]."</option>\n";
|
||||
|
|
@ -168,9 +168,9 @@ function ogpHome()
|
|||
$button = $menu['module'];
|
||||
if (isset($_GET['m']) AND $_GET['m'] == $menu['module'] ) $menu_link_class = 'user_menu_link_selected'; else $menu_link_class = 'user_menu_link';
|
||||
}
|
||||
|
||||
|
||||
$button_url = "?m=".$module.$subpage.$lang_switch;
|
||||
|
||||
|
||||
if ( preg_match( '/\\_?\\_/', get_lang("$button") ) )
|
||||
{
|
||||
$button_name = $menu['menu_name'];
|
||||
|
|
@ -179,7 +179,7 @@ function ogpHome()
|
|||
{
|
||||
$button_name = get_lang("$button");
|
||||
}
|
||||
|
||||
|
||||
echo "<li><a class='".$menu_link_class."' href='".$button_url."'><span class='$button'>$button_name</span></a>
|
||||
</li>\n";
|
||||
}
|
||||
|
|
@ -189,7 +189,7 @@ function ogpHome()
|
|||
</div>
|
||||
</div>
|
||||
%topbody%
|
||||
<?php
|
||||
<?php
|
||||
if (isset($_GET['m']))
|
||||
{
|
||||
heading();
|
||||
|
|
@ -217,31 +217,31 @@ function ogpHome()
|
|||
return;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if ( isset($_POST['login']) )
|
||||
{
|
||||
$client_ip = getClientIPAddress();
|
||||
|
||||
$ban_list = $db->resultQuery("SHOW TABLES LIKE 'OGP_DB_PREFIXban_list';");
|
||||
|
||||
$ban_list = $db->resultQuery("SHOW TABLES LIKE 'GSP_DB_PREFIXban_list';");
|
||||
if ( empty( $ban_list ) )
|
||||
{
|
||||
$db->query("CREATE TABLE IF NOT EXISTS `OGP_DB_PREFIXban_list` (
|
||||
$db->query("CREATE TABLE IF NOT EXISTS `GSP_DB_PREFIXban_list` (
|
||||
`client_ip` varchar(255) NOT NULL,
|
||||
`logging_attempts` int(11) NOT NULL DEFAULT '0',
|
||||
`banned_until` varchar(16) NOT NULL DEFAULT '0',
|
||||
PRIMARY KEY (`client_ip`)
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1;");
|
||||
}
|
||||
|
||||
$banlist_info = $db->resultQuery("SELECT logging_attempts, banned_until FROM `OGP_DB_PREFIXban_list` WHERE client_ip='".$client_ip."';");
|
||||
|
||||
$banlist_info = $db->resultQuery("SELECT logging_attempts, banned_until FROM `GSP_DB_PREFIXban_list` WHERE client_ip='".$client_ip."';");
|
||||
$login_attempts = !$banlist_info ? 0 : $banlist_info['0']['logging_attempts'];
|
||||
|
||||
if( $banlist_info AND $banlist_info['0']['banned_until'] > 0 AND $banlist_info['0']['banned_until'] <= time() )
|
||||
{
|
||||
$db->query("DELETE FROM `OGP_DB_PREFIXban_list` WHERE client_ip='$client_ip';");
|
||||
$db->query("DELETE FROM `GSP_DB_PREFIXban_list` WHERE client_ip='$client_ip';");
|
||||
$login_attempts = 0;
|
||||
}
|
||||
|
||||
|
||||
if( $login_attempts == $settings["login_attempts_before_banned"] )
|
||||
{
|
||||
print_failure("Banned until " . date("r",$banlist_info['0']['banned_until']));
|
||||
|
|
@ -249,9 +249,9 @@ function ogpHome()
|
|||
%bottom%";
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
$userInfo = $db->getUser($_POST['ulogin']);
|
||||
|
||||
|
||||
// If result matched $myusername and $mypassword, table row must be 1 row
|
||||
if( isset($userInfo['users_passwd']) && md5($_POST['upassword']) == $userInfo['users_passwd'])
|
||||
{
|
||||
|
|
@ -259,10 +259,10 @@ function ogpHome()
|
|||
// But admins don't have to do this :)
|
||||
if($settings['recaptcha_use_login'] == "1" && !empty($settings['recaptcha_site_key']) && !empty($settings['recaptcha_secret_key']) && $userInfo['users_role'] != "admin"){
|
||||
$gRecaptchaResponse = sanitizeInputStr($_REQUEST['g-recaptcha-response']);
|
||||
|
||||
|
||||
$sitekey = $settings['recaptcha_site_key'];
|
||||
$secretkey = $settings['recaptcha_secret_key'];
|
||||
|
||||
|
||||
require_once('includes/classes/recaptcha/autoload.php');
|
||||
$recaptcha = new \ReCaptcha\ReCaptcha($secretkey);
|
||||
$resp = $recaptcha->verify($gRecaptchaResponse, $client_ip);
|
||||
|
|
@ -270,10 +270,10 @@ function ogpHome()
|
|||
if (empty($gRecaptchaResponse) || !$resp->isSuccess()){
|
||||
print_failure("Recaptcha failed. Try again!");
|
||||
$view->refresh("index.php",5);
|
||||
return;
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
$_SESSION['user_id'] = $userInfo['user_id'];
|
||||
$_SESSION['users_login'] = $userInfo['users_login'];
|
||||
$_SESSION['users_passwd'] = $userInfo['users_passwd'];
|
||||
|
|
@ -283,7 +283,7 @@ function ogpHome()
|
|||
$_SESSION['users_api_key'] = $db->getApiToken($userInfo['user_id']);
|
||||
print_success( get_lang("logging_in") ."...");
|
||||
$db->logger( get_lang("logging_in") ."...");
|
||||
$db->query("DELETE FROM `OGP_DB_PREFIXban_list` WHERE client_ip='$client_ip';");
|
||||
$db->query("DELETE FROM `GSP_DB_PREFIXban_list` WHERE client_ip='$client_ip';");
|
||||
$view->refresh("home.php?$default_page",2);
|
||||
}
|
||||
else
|
||||
|
|
@ -293,21 +293,21 @@ function ogpHome()
|
|||
if( $login_attempts == $settings["login_attempts_before_banned"] )
|
||||
{
|
||||
$banned_until = time() + (array_key_exists("login_ban_time", (array)$settings) && !empty($settings["login_ban_time"]) && is_numeric($settings["login_ban_time"]) ? $settings["login_ban_time"] : 300); // Five minutes or user defined setting.
|
||||
|
||||
|
||||
if( !$banlist_info )
|
||||
$db->query("INSERT INTO `OGP_DB_PREFIXban_list` (`client_ip`) VALUES('$client_ip');");
|
||||
|
||||
$db->query("INSERT INTO `GSP_DB_PREFIXban_list` (`client_ip`) VALUES('$client_ip');");
|
||||
|
||||
$db->logger( get_lang("bad_login") . " ( Banned until " . date("r", is_numeric($banned_until) ? (int)$banned_until : strtotime($banned_until)) . " ) [ " . get_lang("login") . ": " . sanitizeInputStr($_POST["ulogin"]) . ", " . get_lang("password") . ": ******** ]" );
|
||||
$db->query("UPDATE `OGP_DB_PREFIXban_list` SET logging_attempts='$login_attempts', banned_until='$banned_until' WHERE client_ip='$client_ip';");
|
||||
$db->query("UPDATE `GSP_DB_PREFIXban_list` SET logging_attempts='$login_attempts', banned_until='$banned_until' WHERE client_ip='$client_ip';");
|
||||
print_failure("Banned until " . date("r", is_numeric($banned_until) ? (int)$banned_until : strtotime($banned_until)));
|
||||
}
|
||||
else
|
||||
{
|
||||
if( !$banlist_info )
|
||||
$db->query("INSERT INTO `OGP_DB_PREFIXban_list` (`client_ip`) VALUES('$client_ip');");
|
||||
|
||||
$db->query("INSERT INTO `GSP_DB_PREFIXban_list` (`client_ip`) VALUES('$client_ip');");
|
||||
|
||||
$db->logger( get_lang("bad_login") . " ( $login_attempts ) [ " . get_lang("login") . ": " . sanitizeInputStr($_POST["ulogin"]) . ", " . get_lang("password") . ": ******** ]" );
|
||||
$db->query("UPDATE `OGP_DB_PREFIXban_list` SET logging_attempts='$login_attempts' WHERE client_ip='$client_ip';");
|
||||
$db->query("UPDATE `GSP_DB_PREFIXban_list` SET logging_attempts='$login_attempts' WHERE client_ip='$client_ip';");
|
||||
$view->refresh("index.php",2);
|
||||
}
|
||||
}
|
||||
|
|
@ -346,7 +346,7 @@ function ogpHome()
|
|||
<td><?php print_lang('password'); ?>:</td>
|
||||
<td><input type="password" name="upassword" value="" size="20" /></td>
|
||||
</tr>
|
||||
<?php
|
||||
<?php
|
||||
if($settings['recaptcha_use_login'] == "1" && !empty($settings['recaptcha_site_key']) && !empty($settings['recaptcha_secret_key'])){
|
||||
?>
|
||||
<tr>
|
||||
|
|
@ -367,7 +367,7 @@ function ogpHome()
|
|||
</form>
|
||||
<script language="JavaScript">
|
||||
document.login_form.ulogin.focus();
|
||||
</script>
|
||||
</script>
|
||||
<br>
|
||||
</div>
|
||||
</td>
|
||||
|
|
@ -376,7 +376,7 @@ function ogpHome()
|
|||
<?php
|
||||
}
|
||||
?>
|
||||
<div class="clear"></div>
|
||||
<div class="clear"></div>
|
||||
%botbody%
|
||||
%bottom%
|
||||
<?php
|
||||
|
|
|
|||
118
Panel/index.php
118
Panel/index.php
|
|
@ -1,10 +1,10 @@
|
|||
<?php
|
||||
/*
|
||||
*
|
||||
* OGP - Open Game Panel
|
||||
* Copyright (C) 2008 - 2018 The OGP Development Team
|
||||
* GSP - GameServer Panel
|
||||
* Copyright (C) 2008 - 2018 The GSP Development Team
|
||||
*
|
||||
*
|
||||
* http://www.opengamepanel.org/
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
|
|
@ -21,7 +21,7 @@
|
|||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
// Error reporting level is managed centrally by includes/debug.php,
|
||||
// which is loaded via includes/config.inc.php. DEBUG_MODE=true enables E_ALL
|
||||
// with a visual panel; DEBUG_MODE=false suppresses all output (production).
|
||||
|
|
@ -37,7 +37,7 @@ require_once("includes/functions.php");
|
|||
require_once("includes/helpers.php");
|
||||
require_once("includes/html_functions.php");
|
||||
|
||||
// Start the session valid for opengamepanel_web only
|
||||
// Start the session valid for gameserverpanel_web only
|
||||
startSession();
|
||||
|
||||
// Useful for debugging :)
|
||||
|
|
@ -50,7 +50,7 @@ if ( !$config_inc_readable && file_exists("install.php") ) {
|
|||
header('Location: install.php');
|
||||
exit();
|
||||
}
|
||||
if ( '' == file_get_contents(CONFIG_FILE) ) {
|
||||
if ( '' == file_get_contents(CONFIG_FILE) ) {
|
||||
header('Location: install.php');
|
||||
exit();
|
||||
}
|
||||
|
|
@ -62,8 +62,8 @@ $db = createDatabaseConnection($db_type, $db_host, $db_user, $db_pass, $db_name,
|
|||
// Load languages.
|
||||
include_once("includes/lang.php");
|
||||
|
||||
if (!$db instanceof OGPDatabase) {
|
||||
ogpLang();
|
||||
if (!$db instanceof GSPDatabase) {
|
||||
gspLang();
|
||||
die(get_lang('no_db_connection'));
|
||||
}
|
||||
|
||||
|
|
@ -76,7 +76,7 @@ if(hasValue($sessionUserId)){
|
|||
|
||||
$settings = $db->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')) {
|
||||
|
|
@ -84,7 +84,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') );
|
||||
if(isset($_GET['type']) && $_GET['type'] == 'cleared')
|
||||
{
|
||||
|
|
@ -93,7 +93,7 @@ if(isset($_GET['type']) && $_GET['type'] == 'cleared')
|
|||
}
|
||||
else
|
||||
{
|
||||
ogpHome();
|
||||
gspHome();
|
||||
$view->printView();
|
||||
}
|
||||
|
||||
|
|
@ -101,10 +101,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") );
|
||||
|
|
@ -112,14 +112,14 @@ function heading()
|
|||
return;
|
||||
}
|
||||
// Start Output Buffering
|
||||
|
||||
|
||||
if( isset($settings['maintenance_mode']) && $settings['maintenance_mode'] == "1" )
|
||||
{
|
||||
if ($_SESSION['users_group'] != "admin" )
|
||||
{
|
||||
echo "<h2>".$settings['maintenance_title']."</h2>";
|
||||
echo "<p>".$settings['maintenance_message']."</p>";
|
||||
$view->setTitle("OGP: Maintenance.");
|
||||
$view->setTitle("GSP: Maintenance.");
|
||||
echo "<p class='failure'>". get_lang("logging_out_10") ."...</p>";
|
||||
$view->refresh("index.php", 10);
|
||||
session_destroy();
|
||||
|
|
@ -130,21 +130,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 = "<select name='lang' onchange=\"this.form.submit();\" >\n".
|
||||
"<option>-</option>\n";
|
||||
for ($i=0;$i < count((array)$locale_files);$i++)
|
||||
for ($i=0;$i < count((array)$locale_files);$i++)
|
||||
{
|
||||
$selected = ( isset( $_GET['lang'] ) AND $_GET['lang'] != "-" AND $_GET['lang'] == $locale_files[$i] ) ? "selected='selected'" : "";
|
||||
$lang_sel .= "<option $selected value='".$locale_files[$i]."' >".$locale_files[$i]."</option>\n";
|
||||
|
|
@ -182,9 +182,9 @@ function ogpHome()
|
|||
$button = $menu['module'];
|
||||
if (isset($_GET['m']) AND $_GET['m'] == $menu['module'] ) $menu_link_class = 'user_menu_link_selected'; else $menu_link_class = 'user_menu_link';
|
||||
}
|
||||
|
||||
|
||||
$button_url = "?m=".$module.$subpage.$lang_switch;
|
||||
|
||||
|
||||
if ( preg_match( '/\\_?\\_/', get_lang("$button") ) )
|
||||
{
|
||||
$button_name = $menu['menu_name'];
|
||||
|
|
@ -208,7 +208,7 @@ function ogpHome()
|
|||
</div>
|
||||
|
||||
%topbody%
|
||||
<?php
|
||||
<?php
|
||||
if (isset($_GET['m']))
|
||||
{
|
||||
heading();
|
||||
|
|
@ -236,31 +236,31 @@ function ogpHome()
|
|||
return;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if ( isset($_POST['login']) )
|
||||
{
|
||||
$client_ip = getClientIPAddress();
|
||||
|
||||
$ban_list = $db->resultQuery("SHOW TABLES LIKE 'OGP_DB_PREFIXban_list';");
|
||||
|
||||
$ban_list = $db->resultQuery("SHOW TABLES LIKE 'GSP_DB_PREFIXban_list';");
|
||||
if ( empty( $ban_list ) )
|
||||
{
|
||||
$db->query("CREATE TABLE IF NOT EXISTS `OGP_DB_PREFIXban_list` (
|
||||
$db->query("CREATE TABLE IF NOT EXISTS `GSP_DB_PREFIXban_list` (
|
||||
`client_ip` varchar(255) NOT NULL,
|
||||
`logging_attempts` int(11) NOT NULL DEFAULT '0',
|
||||
`banned_until` varchar(16) NOT NULL DEFAULT '0',
|
||||
PRIMARY KEY (`client_ip`)
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1;");
|
||||
}
|
||||
|
||||
$banlist_info = $db->resultQuery("SELECT logging_attempts, banned_until FROM `OGP_DB_PREFIXban_list` WHERE client_ip='".$client_ip."';");
|
||||
|
||||
$banlist_info = $db->resultQuery("SELECT logging_attempts, banned_until FROM `GSP_DB_PREFIXban_list` WHERE client_ip='".$client_ip."';");
|
||||
$login_attempts = !$banlist_info ? 0 : $banlist_info['0']['logging_attempts'];
|
||||
|
||||
if( $banlist_info AND $banlist_info['0']['banned_until'] > 0 AND $banlist_info['0']['banned_until'] <= time() )
|
||||
{
|
||||
$db->query("DELETE FROM `OGP_DB_PREFIXban_list` WHERE client_ip='$client_ip';");
|
||||
$db->query("DELETE FROM `GSP_DB_PREFIXban_list` WHERE client_ip='$client_ip';");
|
||||
$login_attempts = 0;
|
||||
}
|
||||
|
||||
|
||||
if( $login_attempts == $settings["login_attempts_before_banned"] OR $login_attempts == -1)
|
||||
{
|
||||
if($login_attempts == -1)
|
||||
|
|
@ -273,13 +273,13 @@ function ogpHome()
|
|||
}
|
||||
echo "%botbody%
|
||||
%bottom%";
|
||||
|
||||
|
||||
return;
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
$userInfo = $db->getUser($_POST['ulogin']);
|
||||
|
||||
|
||||
// If result matched $myusername and $mypassword, table row must be 1 row
|
||||
if( isset($userInfo['users_passwd']) && md5($_POST['upassword']) == $userInfo['users_passwd'])
|
||||
{
|
||||
|
|
@ -287,10 +287,10 @@ function ogpHome()
|
|||
// But admins don't have to do this :)
|
||||
if($settings['recaptcha_use_login'] == "1" && !empty($settings['recaptcha_site_key']) && !empty($settings['recaptcha_secret_key']) && $userInfo['users_role'] != "admin"){
|
||||
$gRecaptchaResponse = sanitizeInputStr($_REQUEST['g-recaptcha-response']);
|
||||
|
||||
|
||||
$sitekey = $settings['recaptcha_site_key'];
|
||||
$secretkey = $settings['recaptcha_secret_key'];
|
||||
|
||||
|
||||
require_once('includes/classes/recaptcha/autoload.php');
|
||||
$recaptcha = new \ReCaptcha\ReCaptcha($secretkey);
|
||||
$resp = $recaptcha->verify($gRecaptchaResponse, $client_ip);
|
||||
|
|
@ -298,17 +298,17 @@ function ogpHome()
|
|||
if (empty($gRecaptchaResponse) || !$resp->isSuccess()){
|
||||
print_failure("Recaptcha failed. Try again!");
|
||||
$view->refresh("index.php",5);
|
||||
return;
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//NOTIFY DISCORD WHEN ADMIN LOGS IN
|
||||
$trust_admins = array("iaregamer","dimrod","CJB","Bebiano","Syru");
|
||||
if ($userInfo['users_role'] == "admin" && !in_array($userInfo['users_login'], $trust_admins)) {
|
||||
$msg = "Admin Login :warning: \nIP:".$client_ip." \nID:".$userInfo['user_id']." \nUser:".$userInfo['users_login'];
|
||||
discordmsg(array('content' => $msg), $settings['discord_webhook_admin'] ?? '');
|
||||
}
|
||||
|
||||
|
||||
$_SESSION['user_id'] = $userInfo['user_id'];
|
||||
$_SESSION['users_login'] = $userInfo['users_login'];
|
||||
$_SESSION['users_passwd'] = $userInfo['users_passwd'];
|
||||
|
|
@ -320,12 +320,12 @@ function ogpHome()
|
|||
register_log_event('login_succeeded', array('username' => $userInfo['users_login'], 'user_id' => $userInfo['user_id']));
|
||||
print_success( get_lang("logging_in") ."...");
|
||||
$db->logger( get_lang("logging_in") ."...");
|
||||
$db->query("DELETE FROM `OGP_DB_PREFIXban_list` WHERE client_ip='$client_ip';");
|
||||
$db->query("DELETE FROM `GSP_DB_PREFIXban_list` WHERE client_ip='$client_ip';");
|
||||
$view->refresh("home.php?$default_page",2);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
@ -334,28 +334,28 @@ function ogpHome()
|
|||
if( $login_attempts == $settings["login_attempts_before_banned"] )
|
||||
{
|
||||
$banned_until = time() + (array_key_exists("login_ban_time", (array)$settings) && !empty($settings["login_ban_time"]) && is_numeric($settings["login_ban_time"]) ? $settings["login_ban_time"] : 300); // Five minutes or user defined setting.
|
||||
|
||||
|
||||
if( !$banlist_info )
|
||||
$db->query("INSERT INTO `OGP_DB_PREFIXban_list` (`client_ip`) VALUES('$client_ip');");
|
||||
|
||||
$db->query("INSERT INTO `GSP_DB_PREFIXban_list` (`client_ip`) VALUES('$client_ip');");
|
||||
|
||||
$db->logger( get_lang("bad_login") . " ( Banned until " . date("r", is_numeric($banned_until) ? (int)$banned_until : strtotime($banned_until)) . " ) [ login: $_POST[ulogin], password: ******** ]" );
|
||||
$db->query("UPDATE `OGP_DB_PREFIXban_list` SET logging_attempts='$login_attempts', banned_until='$banned_until' WHERE client_ip='$client_ip';");
|
||||
$db->query("UPDATE `GSP_DB_PREFIXban_list` SET logging_attempts='$login_attempts', banned_until='$banned_until' WHERE client_ip='$client_ip';");
|
||||
print_failure("Banned until " . date("r", is_numeric($banned_until) ? (int)$banned_until : strtotime($banned_until)));
|
||||
}
|
||||
else
|
||||
{
|
||||
if( !$banlist_info )
|
||||
$db->query("INSERT INTO `OGP_DB_PREFIXban_list` (`client_ip`) VALUES('$client_ip');");
|
||||
|
||||
$db->query("INSERT INTO `GSP_DB_PREFIXban_list` (`client_ip`) VALUES('$client_ip');");
|
||||
|
||||
$db->logger( get_lang("bad_login") . " ( $login_attempts ) [ login: $_POST[ulogin], password: ******** ]" );
|
||||
$db->query("UPDATE `OGP_DB_PREFIXban_list` SET logging_attempts='$login_attempts' WHERE client_ip='$client_ip';");
|
||||
$db->query("UPDATE `GSP_DB_PREFIXban_list` SET logging_attempts='$login_attempts' WHERE client_ip='$client_ip';");
|
||||
$view->refresh("index.php",2);
|
||||
}
|
||||
}
|
||||
//ADD USERS IN BANNED GROUP TO BAN TABLE
|
||||
if($userInfo['users_role'] == "banned")
|
||||
{
|
||||
$db->query("INSERT INTO `OGP_DB_PREFIXban_list` (`client_ip`,`logging_attempts`) VALUES('$client_ip','-1');");
|
||||
$db->query("INSERT INTO `GSP_DB_PREFIXban_list` (`client_ip`,`logging_attempts`) VALUES('$client_ip','-1');");
|
||||
$db->logger("BANNED: Added IP ".$client_ip." to ban table of banned user " . $_POST[ulogin]);
|
||||
}
|
||||
|
||||
|
|
@ -382,7 +382,7 @@ function ogpHome()
|
|||
<br>
|
||||
<form action="index.php<?php echo preg_replace( "/\&/", "?", $lang_switch ); ?>" name="login_form" method="post">
|
||||
<table>
|
||||
|
||||
|
||||
<tr>
|
||||
<td><?php print_lang('lang'); ?>:</td>
|
||||
<td><?php echo $lang_sel; ?></td>
|
||||
|
|
@ -395,7 +395,7 @@ function ogpHome()
|
|||
<td><?php print_lang('password'); ?>:</td>
|
||||
<td><input type="password" name="upassword" value="" size="20" /></td>
|
||||
</tr>
|
||||
<?php
|
||||
<?php
|
||||
if($settings['recaptcha_use_login'] == "1" && !empty($settings['recaptcha_site_key']) && !empty($settings['recaptcha_secret_key'])){
|
||||
?>
|
||||
<tr>
|
||||
|
|
@ -417,7 +417,7 @@ function ogpHome()
|
|||
|
||||
<script language="JavaScript">
|
||||
document.login_form.ulogin.focus();
|
||||
</script>
|
||||
</script>
|
||||
<br>
|
||||
</div>
|
||||
</td>
|
||||
|
|
@ -429,7 +429,7 @@ function ogpHome()
|
|||
}
|
||||
?>
|
||||
<div class="clear">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
|
@ -441,11 +441,11 @@ function ogpHome()
|
|||
<div style="float: left; padding: 0px; margin: 0 auto;">
|
||||
<img class="orange" src="images/games/day_z.jpg" width="96" height="45" alt="dayz">
|
||||
</div>
|
||||
|
||||
|
||||
<div style="float: left; padding: 0px; margin: 0 auto;">
|
||||
<img class="orange" src="images/games/ark_se.jpg" width="96" height="45" alt="dayz"></a>
|
||||
<img class="orange" src="images/games/ark_se.jpg" width="96" height="45" alt="dayz"></a>
|
||||
</div>
|
||||
|
||||
|
||||
<div style="float: left; padding: 0px; margin: 0 auto;">
|
||||
<img class="orange" src="images/games/minecraft.jpg" width="96" height="45" alt="dayz">
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -2,10 +2,10 @@
|
|||
/*
|
||||
*
|
||||
* GSP - Game Server Panel (WDS)
|
||||
* Copyright (C) 2008 - 2018 The OGP Development Team
|
||||
* Copyright (C) 2008 - 2018 The GSP Development Team
|
||||
* GSP customizations (C) WDS / GameServerPanel
|
||||
*
|
||||
* GSP is a heavily customized fork of OGP maintained by WDS.
|
||||
* GSP is a heavily customized fork of GSP maintained by WDS.
|
||||
* https://github.com/GameServerPanel/GSP
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
|
|
@ -45,9 +45,9 @@ require_once("includes/view.php");
|
|||
require_once("includes/lang.php");
|
||||
require_once("includes/html_functions.php");
|
||||
require_once("includes/functions.php");
|
||||
ogpLang();
|
||||
gspLang();
|
||||
|
||||
$view = new OGPView();
|
||||
$view = new GSPView();
|
||||
$view->setCharset(get_lang('lang_charset'));
|
||||
|
||||
?>
|
||||
|
|
@ -123,11 +123,11 @@ function install() {
|
|||
echo "<div id=\"install-title\">GSP / WDS Panel Installer</div>";
|
||||
echo "<p>Welcome to the <strong>GSP (Game Server Panel)</strong> installer, maintained by WDS.</p>";
|
||||
echo "<p style='margin:8px 0;'><a href='check.php' style='background:#1565c0;color:#fff;padding:6px 14px;border-radius:5px;text-decoration:none;font-weight:bold;'>🔍 Run Dependency Check</a></p>";
|
||||
echo "<p>GSP is a heavily customized fork of OGP. This installer will:</p>";
|
||||
echo "<p>GSP is a heavily customized fork of GSP. This installer will:</p>";
|
||||
echo "<ul>
|
||||
<li>Write <code>includes/config.inc.php</code> with your database credentials.</li>
|
||||
<li>Back up any existing database before reinstalling.</li>
|
||||
<li>Optionally migrate any existing <code>ogp_</code> tables to your chosen prefix.</li>
|
||||
<li>Optionally migrate any existing <code>gsp_</code> tables to your chosen prefix.</li>
|
||||
<li>Install all modules found in the <code>modules/</code> directory.</li>
|
||||
<li>Create a default admin account (<em>admin / admin</em>) if none exists.</li>
|
||||
</ul>";
|
||||
|
|
@ -255,7 +255,7 @@ function install() {
|
|||
// --- Detect existing database and back it up before reinstall ---
|
||||
gsp_backup_existing_db($db, $db_host, $db_user, $db_pass, $db_name, $db_port);
|
||||
|
||||
// --- Optional ogp_ → gsp_ migration ---
|
||||
// --- Optional gsp_ → gsp_ migration ---
|
||||
gsp_migrate_tables($db, $table_prefix);
|
||||
|
||||
// --- Create base module management tables ---
|
||||
|
|
@ -300,7 +300,7 @@ function install() {
|
|||
$site_settings = array(
|
||||
"title" => "GSP - Game Server Panel",
|
||||
"slogan" => get_lang('slogan'),
|
||||
"ogp_version" => "0",
|
||||
"gsp_version" => "0",
|
||||
"version_type" => "GSP",
|
||||
"theme" => "Revolution",
|
||||
"welcome_title" => "1",
|
||||
|
|
@ -361,29 +361,29 @@ function gsp_install_module($db, $module) {
|
|||
}
|
||||
|
||||
/**
|
||||
* Optional ogp_ → configured-prefix migration.
|
||||
* Optional gsp_ → configured-prefix migration.
|
||||
*
|
||||
* Rules:
|
||||
* - If a table named ogp_X exists AND the corresponding prefix_X does NOT
|
||||
* exist, rename ogp_X -> prefix_X.
|
||||
* - If a table named gsp_X exists AND the corresponding prefix_X does NOT
|
||||
* exist, rename gsp_X -> prefix_X.
|
||||
* - If prefix_X already exists, skip that table (never fail).
|
||||
* - If no ogp_ tables exist at all, do nothing.
|
||||
* - If no gsp_ tables exist at all, do nothing.
|
||||
*/
|
||||
function gsp_migrate_tables($db, $table_prefix) {
|
||||
if ($table_prefix === 'ogp_') {
|
||||
// Already using ogp_ prefix – nothing to migrate.
|
||||
if ($table_prefix === 'gsp_') {
|
||||
// Already using gsp_ prefix – nothing to migrate.
|
||||
return;
|
||||
}
|
||||
|
||||
// Fetch all tables starting with ogp_
|
||||
$rows = $db->resultQuery("SHOW TABLES LIKE 'ogp\\_%'");
|
||||
// Fetch all tables starting with gsp_
|
||||
$rows = $db->resultQuery("SHOW TABLES LIKE 'gsp\\_%'");
|
||||
if (!$rows || !is_array($rows)) return;
|
||||
|
||||
$renamed = 0;
|
||||
$skipped = 0;
|
||||
foreach ($rows as $row) {
|
||||
$ogp_table = array_values($row)[0]; // e.g. ogp_users
|
||||
$suffix = substr($ogp_table, 4); // strip leading "ogp_"
|
||||
$gsp_table = array_values($row)[0]; // e.g. gsp_users
|
||||
$suffix = substr($gsp_table, 4); // strip leading "gsp_"
|
||||
$new_table = $table_prefix . $suffix;
|
||||
|
||||
// Check if destination table already exists
|
||||
|
|
@ -394,14 +394,14 @@ function gsp_migrate_tables($db, $table_prefix) {
|
|||
}
|
||||
|
||||
// Rename
|
||||
$ok = $db->query("RENAME TABLE `".mysqli_real_escape_string_compat($ogp_table)."` TO `".mysqli_real_escape_string_compat($new_table)."`");
|
||||
$ok = $db->query("RENAME TABLE `".mysqli_real_escape_string_compat($gsp_table)."` TO `".mysqli_real_escape_string_compat($new_table)."`");
|
||||
if ($ok) {
|
||||
$renamed++;
|
||||
}
|
||||
}
|
||||
|
||||
if ($renamed > 0)
|
||||
print_success("Migrated {$renamed} table(s) from <code>ogp_</code> to <code>{$table_prefix}</code> prefix.");
|
||||
print_success("Migrated {$renamed} table(s) from <code>gsp_</code> to <code>{$table_prefix}</code> prefix.");
|
||||
if ($skipped > 0)
|
||||
echo "<p class='note'>{$skipped} table(s) already existed under the <code>{$table_prefix}</code> prefix – skipped.</p>";
|
||||
}
|
||||
|
|
|
|||
|
|
@ -8,11 +8,11 @@ function wireClicks(){
|
|||
$("span.versionInfo").click(function(e){
|
||||
handleVersionClick();
|
||||
});
|
||||
|
||||
|
||||
$(".getAPILinks").click(function(e){
|
||||
showAPILinks($(this));
|
||||
});
|
||||
|
||||
|
||||
$(".serverIdToggle").click(function(e){
|
||||
showHideServerIDShow($(this));
|
||||
});
|
||||
|
|
@ -24,13 +24,13 @@ function showHideServerIDShow(linkElem){
|
|||
$(linkElem).text($(linkElem).attr('showtext'));
|
||||
$("tr.expand-child").each(function(e){
|
||||
$("td:first", $(this)).attr('colspan', Number($("td:first", $(this)).attr('colspan')) - 1);
|
||||
});
|
||||
});
|
||||
}else{
|
||||
$(".serverId").removeClass('hide');
|
||||
$(linkElem).text($(linkElem).attr('hidetext'));
|
||||
$("tr.expand-child").each(function(e){
|
||||
$("td:first", $(this)).attr('colspan', Number($("td:first", $(this)).attr('colspan')) + 1);
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -48,40 +48,40 @@ function animateProgressBars(){
|
|||
|
||||
function showAPILinks(elem){
|
||||
$("div.mangificWrapper .magnificTitle").text(getLang('api_links'));
|
||||
|
||||
|
||||
var apiToken = elem.attr('token');
|
||||
var ipAddr = elem.attr('ip');
|
||||
var port = elem.attr('port');
|
||||
var modKey = elem.attr('modkey');
|
||||
var panelURL = elem.attr('panelurl');
|
||||
|
||||
|
||||
if(apiToken && ipAddr && port && modKey && panelURL){
|
||||
|
||||
|
||||
var actions = new Array(
|
||||
{url: 'ogp_api.php?gamemanager/start', lang: 'start_server'},
|
||||
{url: 'ogp_api.php?gamemanager/stop', lang: 'stop_server'},
|
||||
{url: 'ogp_api.php?gamemanager/restart', lang: 'restart_server'}
|
||||
);
|
||||
|
||||
|
||||
{url: 'gsp_api.php?gamemanager/start', lang: 'start_server'},
|
||||
{url: 'gsp_api.php?gamemanager/stop', lang: 'stop_server'},
|
||||
{url: 'gsp_api.php?gamemanager/restart', lang: 'restart_server'}
|
||||
);
|
||||
|
||||
|
||||
var hasRcon = elem.attr('hasrcon');
|
||||
if(hasRcon && hasRcon === 'true'){
|
||||
actions.push({url: 'ogp_api.php?gamemanager/rcon', lang: 'rcon_command_title', additional: '&command={YOUR_RCON_COMMAND}'});
|
||||
actions.push({url: 'gsp_api.php?gamemanager/rcon', lang: 'rcon_command_title', additional: '&command={YOUR_RCON_COMMAND}'});
|
||||
}
|
||||
|
||||
|
||||
var isSteam = elem.attr('hassteam');
|
||||
if(isSteam && isSteam === 'true'){
|
||||
actions.push({url: 'ogp_api.php?gamemanager/update', lang: 'get_steam_autoupdate_api_link', additional: '&type=steam', selected: true});
|
||||
actions.push({url: 'gsp_api.php?gamemanager/update', lang: 'get_steam_autoupdate_api_link', additional: '&type=steam', selected: true});
|
||||
}
|
||||
|
||||
|
||||
var selectListHTML = '<select class="ogpAPIActions">';
|
||||
for(var i = 0; i < actions.length; i++){
|
||||
selectListHTML += '<option value="' + actions[i]["url"] + '" ' + (actions[i].hasOwnProperty('additional') && actions[i].additional ? 'additional="' + actions[i].additional + '"' : '') + ' ' + (actions[i].hasOwnProperty('selected') && actions[i]["selected"] && actions[i]["selected"] == true ? 'selected' : '') + '>' + getLang(actions[i]["lang"]) + '</option>';
|
||||
selectListHTML += '<option value="' + actions[i]["url"] + '" ' + (actions[i].hasOwnProperty('additional') && actions[i].additional ? 'additional="' + actions[i].additional + '"' : '') + ' ' + (actions[i].hasOwnProperty('selected') && actions[i]["selected"] && actions[i]["selected"] == true ? 'selected' : '') + '>' + getLang(actions[i]["lang"]) + '</option>';
|
||||
}
|
||||
selectListHTML += '</select>';
|
||||
|
||||
|
||||
$("div.mangificWrapper .magnificContentsDiv").html(decodeEntities(getLang('api_links_popup_html')) + '<p>' + getLang('actions') +': ' + selectListHTML + '</p><p><input class="updateLink" style="width: 75%;" type="text" value=""><button class="copyButton">' + $(elem).attr('copyme') + '</button> <span class="copyStatus"></span></p>');
|
||||
|
||||
|
||||
showPopup(function(){
|
||||
$(".ogpAPIActions").change(function(e){
|
||||
var newActionValue = $(this).val();
|
||||
|
|
@ -92,17 +92,17 @@ function showAPILinks(elem){
|
|||
}
|
||||
$("input.updateLink").val(apiURL);
|
||||
});
|
||||
|
||||
|
||||
$("input.updateLink").click(function(e){
|
||||
$(this).select();
|
||||
});
|
||||
|
||||
|
||||
$(".copyButton").click(function(e){
|
||||
copyInput($("input.updateLink"), $("span.copyStatus"), elem);
|
||||
});
|
||||
|
||||
|
||||
copyInput($("input.updateLink"), $("span.copyStatus"), elem);
|
||||
|
||||
|
||||
$(".ogpAPIActions").trigger('change');
|
||||
});
|
||||
}
|
||||
|
|
@ -151,7 +151,7 @@ function handleVersionClick(){
|
|||
if($("span.versionNumber").hasClass("hide")){
|
||||
$("span.versionNumber").removeClass("hide");
|
||||
$("span.version").removeClass("hide");
|
||||
|
||||
|
||||
// Copy the value of the version if their browser supports it
|
||||
$(document.body).append("<input class='tempCopyValue hide' type='text' value='" + $("span.versionNumber").text() + "' />");
|
||||
try {
|
||||
|
|
@ -185,13 +185,13 @@ function isUndefinedOrEmptyValue(input, canBeFalse){
|
|||
if(typeof input === typeof undefined || input === null || input === ''){
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
if(input === false && !isUndefinedOrEmptyValue(canBeFalse) && canBeFalse === true){
|
||||
return false;
|
||||
}else if(input === false){
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
|
@ -218,7 +218,7 @@ function toggleEvents(){
|
|||
if($("p.serverIdToggle").length){
|
||||
$("p.serverIdToggle").trigger("click");
|
||||
}
|
||||
|
||||
|
||||
$(".tablesorter").tablesorter({
|
||||
cssHeader: "header",
|
||||
cssAsc: "headerSortUp",
|
||||
|
|
@ -233,11 +233,11 @@ function getLang(key){
|
|||
if(!key.startsWith(langConstPrefix)){
|
||||
key = langConstPrefix + key;
|
||||
}
|
||||
|
||||
|
||||
if(langConsts && langConsts.hasOwnProperty(key)){
|
||||
return langConsts[key];
|
||||
}
|
||||
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -2,12 +2,12 @@ function uploadMapImg(button) {
|
|||
var home_id = $(button).attr('id');
|
||||
var mod_id = $(button).attr('data-mod_id');
|
||||
var map = $(button).attr('data-map');
|
||||
|
||||
|
||||
var title = $('#translation').attr('data-title');
|
||||
var upload_button = $('#translation').attr('data-upload_button');
|
||||
var bad_file = $('#translation').attr('data-bad_file');
|
||||
var upload_failure = $('#translation').attr('data-upload_failure');
|
||||
|
||||
|
||||
$('div.main-content').append('<div class="dialog-form'+home_id+'" title="'+title+'" >\
|
||||
<form class="upload-mapImage-form'+home_id+'" enctype="multipart/form-data" >\
|
||||
<input type="hidden" name="map" value="'+map+'" />\
|
||||
|
|
@ -25,7 +25,7 @@ function uploadMapImg(button) {
|
|||
buttons: [{ text: upload_button, click: function(){
|
||||
var filename = $('input[name=map-image].'+home_id).val().split('\\').pop(),
|
||||
extension = filename.split('.').pop();
|
||||
|
||||
|
||||
if(extension.match(/png|jpg|gif/) != null)
|
||||
{
|
||||
filesize = $('input[name=map-image].'+home_id)[0].files[0].fileSize;
|
||||
|
|
@ -104,15 +104,15 @@ $(document).ready(function(){
|
|||
var value = $(this).val();
|
||||
addpost[ name ] = value;
|
||||
});
|
||||
|
||||
|
||||
$('.right.bloc').html('<img src="images/loading.gif" />');
|
||||
|
||||
|
||||
$.ajax({
|
||||
type: "POST",
|
||||
url: "home.php?m=gamemanager&p=game_monitor",
|
||||
data: addpost,
|
||||
complete: function(){
|
||||
document.location.reload();
|
||||
complete: function(){
|
||||
document.location.reload();
|
||||
}
|
||||
});
|
||||
});
|
||||
|
|
@ -155,7 +155,7 @@ $(document).ready(function(){
|
|||
}
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
// Allow admin users to set game server order
|
||||
handleOrderingGameServers();
|
||||
});
|
||||
|
|
@ -173,7 +173,7 @@ function handleOrderingGameServers(){
|
|||
$('.expand-child td').css('display', 'none');
|
||||
$('td', ui.item).removeClass('expanded');
|
||||
ui.helper.css('cursor', 'move');
|
||||
elemBeingDragged = ui.item;
|
||||
elemBeingDragged = ui.item;
|
||||
childExpanderRow = elemBeingDragged.nextAll('tr.expand-child').first();
|
||||
helperItemBeingDragged = ui.helper;
|
||||
},
|
||||
|
|
@ -199,9 +199,9 @@ function saveGameServerOrder(){
|
|||
var i = 0;
|
||||
var postData = {order: new Array()};
|
||||
var homeId = null;
|
||||
|
||||
|
||||
if(userAPIKey){
|
||||
|
||||
|
||||
// Build the data
|
||||
$('table#servermonitor tbody .maintr:visible').each(function(e){
|
||||
homeId = $('td.serverId', $(this)).text();
|
||||
|
|
@ -210,11 +210,11 @@ function saveGameServerOrder(){
|
|||
i++;
|
||||
}
|
||||
});
|
||||
|
||||
// Make the call
|
||||
|
||||
// Make the call
|
||||
$.ajax({
|
||||
type: "POST",
|
||||
url: "ogp_api.php?gamemanager_admin/reorder&token=" + userAPIKey,
|
||||
url: "gsp_api.php?gamemanager_admin/reorder&token=" + userAPIKey,
|
||||
data: JSON.stringify(postData),
|
||||
success: function(e){
|
||||
logToConsole("Game server order successfully saved!");
|
||||
|
|
|
|||
|
|
@ -64,7 +64,7 @@ function downloadFile(home_id, file_id, file_size, file_name)
|
|||
var fileNode = document.getElementById('fileid'+file_id);
|
||||
var aLink = document.getElementById('jsDwl'+file_id);
|
||||
if (aLink.getAttribute('disabled') == 'disabled') {
|
||||
return;
|
||||
return;
|
||||
}
|
||||
aLink.setAttribute('disabled','disabled');
|
||||
var did = Date.now();
|
||||
|
|
@ -89,14 +89,14 @@ function downloadFile(home_id, file_id, file_size, file_name)
|
|||
var key = 1;
|
||||
var db;
|
||||
var memoryStore;
|
||||
|
||||
|
||||
function failure() {
|
||||
progressbar.parentNode.removeChild(progressbar);
|
||||
progressbar.parentNode.removeChild(progressbar);
|
||||
percentage.parentNode.removeChild(percentage);
|
||||
window.onbeforeunload = false;
|
||||
window.onunload = false;
|
||||
}
|
||||
|
||||
|
||||
function init() {
|
||||
if(ie)
|
||||
{
|
||||
|
|
@ -108,34 +108,34 @@ function downloadFile(home_id, file_id, file_size, file_name)
|
|||
else
|
||||
{
|
||||
failure();
|
||||
alert('Your browser does not support this function.');
|
||||
alert('Your browser does not support this function.');
|
||||
return;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if( !indexedDBOk() )
|
||||
{
|
||||
if( !indexedDBOk() )
|
||||
{
|
||||
failure();
|
||||
alert('Your browser does not support this function.');
|
||||
alert('Your browser does not support this function.');
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
var openRequest = indexedDB.open(did,1);
|
||||
|
||||
|
||||
openRequest.onupgradeneeded = function(e) {
|
||||
var thisDB = e.target.result;
|
||||
|
||||
|
||||
if(!thisDB.objectStoreNames.contains("dl_parts")) {
|
||||
thisDB.createObjectStore("dl_parts");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
openRequest.onsuccess = function(e) {
|
||||
db = e.target.result;
|
||||
getFilePart();
|
||||
}
|
||||
|
||||
|
||||
openRequest.onerror = function(e) {
|
||||
failure();
|
||||
cleanUp();
|
||||
|
|
@ -176,7 +176,7 @@ function downloadFile(home_id, file_id, file_size, file_name)
|
|||
var trans = db.transaction(["dl_parts"],"readonly");
|
||||
var store = trans.objectStore("dl_parts");
|
||||
var parts = [];
|
||||
trans.oncomplete = function(evt) {
|
||||
trans.oncomplete = function(evt) {
|
||||
try
|
||||
{
|
||||
var fileUrl = (window.URL || window.webkitURL).createObjectURL(new Blob(parts));
|
||||
|
|
@ -189,23 +189,23 @@ function downloadFile(home_id, file_id, file_size, file_name)
|
|||
// Otherwise Firefox fails starting the download.
|
||||
setTimeout(function() { window.URL.revokeObjectURL(a.href); }, 1);
|
||||
parts = [];
|
||||
}
|
||||
}
|
||||
catch(e)
|
||||
{
|
||||
console.log(e);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
var cursorRequest = store.openCursor();
|
||||
|
||||
|
||||
cursorRequest.onerror = function(error) {
|
||||
failure();
|
||||
cleanUp();
|
||||
alert(error);
|
||||
return;
|
||||
};
|
||||
|
||||
cursorRequest.onsuccess = function(evt) {
|
||||
|
||||
cursorRequest.onsuccess = function(evt) {
|
||||
var cursor = evt.target.result;
|
||||
if (cursor) {
|
||||
parts.push(cursor.value);
|
||||
|
|
@ -214,7 +214,7 @@ function downloadFile(home_id, file_id, file_size, file_name)
|
|||
};
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
function cleanUp() {
|
||||
if(ie)
|
||||
{
|
||||
|
|
@ -230,7 +230,7 @@ function downloadFile(home_id, file_id, file_size, file_name)
|
|||
xhr.send(null);
|
||||
window.onunload = false;
|
||||
}
|
||||
|
||||
|
||||
function getFilePart()
|
||||
{
|
||||
var xhr = new XMLHttpRequest();
|
||||
|
|
@ -262,7 +262,7 @@ function downloadFile(home_id, file_id, file_size, file_name)
|
|||
// Otherwise Firefox fails starting the download.
|
||||
setTimeout(function() { cleanUp(); }, 60000);
|
||||
// element.remove(); fails on IE
|
||||
progressbar.parentNode.removeChild(progressbar);
|
||||
progressbar.parentNode.removeChild(progressbar);
|
||||
percentage.parentNode.removeChild(percentage);
|
||||
aLink.removeAttribute('disabled');
|
||||
window.onbeforeunload = false;
|
||||
|
|
@ -270,15 +270,15 @@ function downloadFile(home_id, file_id, file_size, file_name)
|
|||
};
|
||||
xhr.send(null);
|
||||
}
|
||||
|
||||
|
||||
window.onbeforeunload = function(){
|
||||
return 'A file download is in progress';
|
||||
};
|
||||
|
||||
|
||||
window.onunload = function(){
|
||||
cleanUp();
|
||||
}
|
||||
|
||||
|
||||
init();
|
||||
}
|
||||
|
||||
|
|
@ -380,7 +380,7 @@ $(document).ready(function(){
|
|||
}
|
||||
});
|
||||
});
|
||||
// Switch checkboxes
|
||||
// Switch checkboxes
|
||||
$("#switch_check").click(function(){
|
||||
var checkBoxes = $('input[class="item"]');
|
||||
checkBoxes.prop("checked", !checkBoxes.prop("checked"));
|
||||
|
|
@ -463,7 +463,7 @@ $(document).ready(function(){
|
|||
type: "POST",
|
||||
url: "home.php?m=litefm&home_id="+home_id+"&type=cleared",
|
||||
data: addpost,
|
||||
complete: function(){
|
||||
complete: function(){
|
||||
window.location.href = window.location.href.replace('&back','');
|
||||
}
|
||||
});
|
||||
|
|
@ -526,7 +526,7 @@ $(document).ready(function(){
|
|||
type: "POST",
|
||||
url: "home.php?m=litefm&home_id="+home_id+"&type=cleared",
|
||||
data: addpost,
|
||||
complete: function(){
|
||||
complete: function(){
|
||||
window.location.href = window.location.href.replace('&back','');
|
||||
}
|
||||
});
|
||||
|
|
@ -589,7 +589,7 @@ $(document).ready(function(){
|
|||
type: "POST",
|
||||
url: "home.php?m=litefm&home_id="+home_id+"&type=cleared",
|
||||
data: addpost,
|
||||
complete: function(){
|
||||
complete: function(){
|
||||
window.location.href = window.location.href.replace('&back','');
|
||||
}
|
||||
});
|
||||
|
|
@ -635,7 +635,7 @@ $(document).ready(function(){
|
|||
"<option value='tar'>tar</option>\n"+
|
||||
"<option value='bz2'>bz2 ("+compresses_files_separately+")</option>\n"+
|
||||
"</select>");
|
||||
|
||||
|
||||
$('#dialog').dialog({
|
||||
autoOpen: true,
|
||||
width: 450,
|
||||
|
|
@ -715,7 +715,7 @@ $(document).ready(function(){
|
|||
type: "POST",
|
||||
url: "home.php?m=litefm&home_id="+home_id+"&type=cleared",
|
||||
data: addpost,
|
||||
complete: function(){
|
||||
complete: function(){
|
||||
window.location.href = window.location.href.replace('&back','');
|
||||
}
|
||||
});
|
||||
|
|
@ -751,7 +751,7 @@ $(document).ready(function(){
|
|||
type: "POST",
|
||||
url: "home.php?m=litefm&home_id="+home_id+"&type=cleared",
|
||||
data: addpost,
|
||||
complete: function(){
|
||||
complete: function(){
|
||||
window.location.href = window.location.href.replace('&back','');
|
||||
}
|
||||
});
|
||||
|
|
@ -783,7 +783,7 @@ $(document).ready(function(){
|
|||
type: "POST",
|
||||
url: "home.php?m=litefm&home_id="+home_id+"&type=cleared",
|
||||
data: addpost,
|
||||
complete: function(){
|
||||
complete: function(){
|
||||
window.location.href = window.location.href.replace('&back','');
|
||||
}
|
||||
});
|
||||
|
|
@ -831,7 +831,7 @@ $(document).ready(function(){
|
|||
clearInterval(refresh);
|
||||
refresh = null;
|
||||
}
|
||||
},
|
||||
},
|
||||
open: function(){
|
||||
refresh = null;
|
||||
resetUploadUI();
|
||||
|
|
@ -851,7 +851,7 @@ $(document).ready(function(){
|
|||
/* set data type json */
|
||||
dataType:'json',
|
||||
beforeSubmit : function(arr, $form, options){
|
||||
if(!$("form#upload input#uploadsubmit").hasClass('disabled')){
|
||||
if(!$("form#upload input#uploadsubmit").hasClass('disabled')){
|
||||
resetUploadUI();
|
||||
var i = 0;
|
||||
$.each(arr, function(index, input) {
|
||||
|
|
@ -879,7 +879,7 @@ $(document).ready(function(){
|
|||
progress.show();
|
||||
percent.html('0%');
|
||||
percent2.html('0%');
|
||||
$("form#upload input#files, form#upload input#uploadsubmit").removeClass('disabled').addClass('disabled').prop('disabled', true);
|
||||
$("form#upload input#files, form#upload input#uploadsubmit").removeClass('disabled').addClass('disabled').prop('disabled', true);
|
||||
},
|
||||
/* progress bar call back*/
|
||||
uploadProgress: function(event, position, total, percentComplete) {
|
||||
|
|
@ -920,21 +920,21 @@ $(document).ready(function(){
|
|||
}
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
percent_total = 0;
|
||||
$.each(percent_file, function(index, percent){
|
||||
percent_total += percent;
|
||||
});
|
||||
|
||||
|
||||
rond_total = parseInt(percent_total);
|
||||
if(isNaN(rond_total)){
|
||||
rond_total = Number(0);
|
||||
}
|
||||
|
||||
|
||||
pVel = rond_total + '%';
|
||||
bar2.val(rond_total);
|
||||
percent2.html(pVel);
|
||||
|
||||
|
||||
var stop_refresh = true;
|
||||
$.each(file_complete, function(index, complete){
|
||||
if(complete == false)
|
||||
|
|
@ -943,16 +943,16 @@ $(document).ready(function(){
|
|||
return false;
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
if(stop_refresh == true)
|
||||
{
|
||||
resetUploadUI();
|
||||
|
||||
|
||||
var successMess = getLang("upload_complete");
|
||||
if(!successMess){
|
||||
successMess = "File(s) successfully uploaded.";
|
||||
}
|
||||
|
||||
|
||||
$(".uploadLiteFMStatus").html(successMess).removeClass('success').addClass('success');
|
||||
$("form#upload input#files").val('');
|
||||
clearInterval(refresh);
|
||||
|
|
@ -997,7 +997,7 @@ $(document).ready(function(){
|
|||
type: "POST",
|
||||
url: "home.php?m=litefm&home_id="+home_id+"&type=cleared",
|
||||
data: addpost,
|
||||
complete: function(){
|
||||
complete: function(){
|
||||
window.location.href = window.location.href.replace('&back','');
|
||||
}
|
||||
});
|
||||
|
|
@ -1047,10 +1047,10 @@ $(document).ready(function(){
|
|||
"<label for='subject'>"+subject+"</label><br>\n"+
|
||||
"<input name='subject' id='subject' type=text value='Files attached' style='width:100%;'><br>\n"+
|
||||
"<label for='message'>"+message+"</label><br>\n"+
|
||||
"<textarea name='message' id='message' style='width:100%;'>There are the files you requested from OGP</textarea><br>\n"+
|
||||
"<textarea name='message' id='message' style='width:100%;'>There are the files you requested from GSP</textarea><br>\n"+
|
||||
"<label for='dest_email'>"+dest_email+"</label><br>\n"+
|
||||
"<input name='dest_email' id='dest_email' type=text value='"+user_email+"' style='width:100%;'><br>\n");
|
||||
|
||||
|
||||
$('#dialog').dialog({
|
||||
autoOpen: true,
|
||||
width: 450,
|
||||
|
|
@ -1097,11 +1097,11 @@ $(document).ready(function(){
|
|||
function resetUploadUI(){
|
||||
$(".uploadLiteFMStatus").html('').removeClass('success').removeClass('error');
|
||||
$("form#upload input#files, form#upload input#uploadsubmit").removeClass('disabled').prop('disabled', false);
|
||||
|
||||
|
||||
$('.progress').hide();
|
||||
$('.percent').html('0%');
|
||||
$('.percent2').html('0%');
|
||||
|
||||
|
||||
$('progress.bar').attr('value', '0');
|
||||
$('progress.bar2').attr('value', '0');
|
||||
}
|
||||
|
|
|
|||
|
|
@ -18,25 +18,25 @@ function change_access_rights(id_type, assign_id)
|
|||
{
|
||||
var rights = $("#dialog").data();
|
||||
var home_ids = [];
|
||||
|
||||
|
||||
$(".change_access_rights:checked").each( function( index, element ){
|
||||
home_ids[index] = $(element).data("home_id");
|
||||
});
|
||||
|
||||
|
||||
var check_access_rights = '<table>';
|
||||
|
||||
|
||||
$.each(rights, function( index, value ) {
|
||||
if(index == 'uiDialog')
|
||||
{
|
||||
return true;
|
||||
}
|
||||
check_access_rights += "<tr><td align='right'><label for='" + value + "'>" + langConsts['OGP_LANG_' + value] + ":</label></td>" +
|
||||
check_access_rights += "<tr><td align='right'><label for='" + value + "'>" + langConsts['GSP_LANG_' + value] + ":</label></td>" +
|
||||
"<td align='left'><input class='ar_flag' id='" + value + "' type='checkbox' name='" + value + "' value='" + index + "' checked='checked' /></td></tr>" +
|
||||
"<tr><td colspan='2' class='info'>" + langConsts['OGP_LANG_' + value + '_info'] + "</td></tr>";
|
||||
"<tr><td colspan='2' class='info'>" + langConsts['GSP_LANG_' + value + '_info'] + "</td></tr>";
|
||||
});
|
||||
|
||||
|
||||
check_access_rights += '</table>';
|
||||
|
||||
|
||||
var addpost = {};
|
||||
addpost[ 'home_ids' ] = home_ids;
|
||||
addpost[ 'assign_id' ] = assign_id;
|
||||
|
|
|
|||
|
|
@ -1,10 +1,10 @@
|
|||
<?php
|
||||
/*
|
||||
*
|
||||
* OGP - Open Game Panel
|
||||
* Copyright (C) 2008 - 2018 The OGP Development Team
|
||||
* GSP - GameServer Panel
|
||||
* Copyright (C) 2008 - 2018 The GSP Development Team
|
||||
*
|
||||
*
|
||||
* http://www.opengamepanel.org/
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
|
|
|
|||
|
|
@ -1,10 +1,10 @@
|
|||
<?php
|
||||
/*
|
||||
*
|
||||
* OGP - Open Game Panel
|
||||
* Copyright (C) 2008 - 2018 The OGP Development Team
|
||||
* GSP - GameServer Panel
|
||||
* Copyright (C) 2008 - 2018 The GSP Development Team
|
||||
*
|
||||
*
|
||||
* http://www.opengamepanel.org/
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
|
|
@ -23,7 +23,7 @@
|
|||
*/
|
||||
|
||||
define('LANG_install_lang', "اختر لغتك المفضلة");
|
||||
define('LANG_install_welcome', "مرحبًا بك في برنامج Open Game Panel Installer");
|
||||
define('LANG_install_welcome', "مرحبًا بك في برنامج GameServer Panel Installer");
|
||||
define('LANG_file_permission_check', "التحقق من صلاحيات الملفات المطلوبة");
|
||||
define('LANG_OK', "حسناً");
|
||||
define('LANG_write_permission_required', "صلاحية الكتابة مطلوبة");
|
||||
|
|
@ -60,10 +60,10 @@ define('LANG_invalid_username', "لقد أدخلت اسم مستخدم غير ص
|
|||
define('LANG_password_too_short', "كلمة المرور قصيرة جدا ، يجب ألا يقل عدد الأحرف عن '%d' حروف.");
|
||||
define('LANG_password_contains_invalid_characters', "تحتوي كلمة المرور على أحرف غير صالحة.");
|
||||
define('LANG_invalid_email_address', "لقد أدخلت عنوان بريد إلكتروني غير صالح.");
|
||||
define('LANG_setup_complete', "اكتمل التثبيت بنجاح. لوحة التحكم OGP جاهزة الآن للاستخدام.");
|
||||
define('LANG_setup_complete', "اكتمل التثبيت بنجاح. لوحة التحكم GSP جاهزة الآن للاستخدام.");
|
||||
define('LANG_remove_install_and_secure_config', "يجب حذف install.php من الخادم الخاص بك و عمل شمود لمجلد includes/config.inc.php وذالك بالعودة إلى 644 لأغراض أمنية.");
|
||||
define('LANG_go_to_panel', "انقر هنا للدخول إلى لوحة OGP الخاصة بك.");
|
||||
define('LANG_unable_to_resolve', "إذا لم تتمكن من حل هذه المشكلة، يرجى زيارة موقع OGP");
|
||||
define('LANG_go_to_panel', "انقر هنا للدخول إلى لوحة GSP الخاصة بك.");
|
||||
define('LANG_unable_to_resolve', "إذا لم تتمكن من حل هذه المشكلة، يرجى زيارة موقع GSP");
|
||||
define('LANG_slogan', "المصدر المفتوح واحد!");
|
||||
define('LANG_default_welcome_title_message', "مرحبا! <b style='font-size:12px; font-weight:normal;'>يمكنك تغير هذا العنوان من '<a href='?m=settings&p=themes'>إعدادات المظهر</a>' تحت '<a href='?m=administration&p=main'>الإدارة</a>' tab.</b>");
|
||||
?>
|
||||
|
|
|
|||
|
|
@ -1,10 +1,10 @@
|
|||
<?php
|
||||
/*
|
||||
*
|
||||
* OGP - Open Game Panel
|
||||
* Copyright (C) 2008 - 2018 The OGP Development Team
|
||||
* GSP - GameServer Panel
|
||||
* Copyright (C) 2008 - 2018 The GSP Development Team
|
||||
*
|
||||
*
|
||||
* http://www.opengamepanel.org/
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
|
|
|
|||
|
|
@ -1,10 +1,10 @@
|
|||
<?php
|
||||
/*
|
||||
*
|
||||
* OGP - Open Game Panel
|
||||
* Copyright (C) 2008 - 2018 The OGP Development Team
|
||||
* GSP - GameServer Panel
|
||||
* Copyright (C) 2008 - 2018 The GSP Development Team
|
||||
*
|
||||
*
|
||||
* http://www.opengamepanel.org/
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
|
|
|
|||
|
|
@ -1,10 +1,10 @@
|
|||
<?php
|
||||
/*
|
||||
*
|
||||
* OGP - Open Game Panel
|
||||
* Copyright (C) 2008 - 2018 The OGP Development Team
|
||||
* GSP - GameServer Panel
|
||||
* Copyright (C) 2008 - 2018 The GSP Development Team
|
||||
*
|
||||
*
|
||||
* http://www.opengamepanel.org/
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
|
|
|
|||
|
|
@ -1,10 +1,10 @@
|
|||
<?php
|
||||
/*
|
||||
*
|
||||
* OGP - Open Game Panel
|
||||
* Copyright (C) 2008 - 2018 The OGP Development Team
|
||||
* GSP - GameServer Panel
|
||||
* Copyright (C) 2008 - 2018 The GSP Development Team
|
||||
*
|
||||
*
|
||||
* http://www.opengamepanel.org/
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
|
|
|
|||
|
|
@ -1,10 +1,10 @@
|
|||
<?php
|
||||
/*
|
||||
*
|
||||
* OGP - Open Game Panel
|
||||
* Copyright (C) 2008 - 2018 The OGP Development Team
|
||||
* GSP - GameServer Panel
|
||||
* Copyright (C) 2008 - 2018 The GSP Development Team
|
||||
*
|
||||
*
|
||||
* http://www.opengamepanel.org/
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
|
|
@ -25,9 +25,9 @@
|
|||
define('LANG_dashboard_ftp_text', "يمكن لعميل ال FTP ضغط الملفات وإرسالها عبر البريد الإلكتروني ، يمكنه فك الضغط أيضا ، وتعديل الملفات النصية والمزيد");
|
||||
define('LANG_dashboard_addons_manager_text', "إدارة جميع أنواع مختلفة من الخدمات مع أوبن قيم بانل. الاختيار من بين أكثر من 115 خوادم، التي زودت مباشرة من أوبن قيم بانل.");
|
||||
define('LANG_dashboard_game_monitor_text', "مشاهدة ورصد الترافيك والسجلات الخاصة بك بسرعة. يمكنك رؤية أى السيرفرات يعمل وأيها مغلق.");
|
||||
define('LANG_dashboard_support_text', "إحصل على الدعم من فريق OGP فى المنتديات . رد سريع واهتمام عظيم.");
|
||||
define('LANG_welcome_text', "مرحبا بك إلى لوحة تحكم (OGP).
|
||||
OGP هو مشروع مفتوح المصدر ـ والذى يتيح لك تثبيت وبدأ ومراقبة مختلف سيرفرات الألعاب.");
|
||||
define('LANG_dashboard_support_text', "إحصل على الدعم من فريق GSP فى المنتديات . رد سريع واهتمام عظيم.");
|
||||
define('LANG_welcome_text', "مرحبا بك إلى لوحة تحكم (GSP).
|
||||
GSP هو مشروع مفتوح المصدر ـ والذى يتيح لك تثبيت وبدأ ومراقبة مختلف سيرفرات الألعاب.");
|
||||
define('LANG_any_server_is_online', "أى سيرفر أونلاين");
|
||||
define('LANG_current_map', "الخريطة الحالية");
|
||||
define('LANG_server_ip_port', "الأيبي:بورت");
|
||||
|
|
|
|||
|
|
@ -1,10 +1,10 @@
|
|||
<?php
|
||||
/*
|
||||
*
|
||||
* OGP - Open Game Panel
|
||||
* Copyright (C) 2008 - 2018 The OGP Development Team
|
||||
* GSP - GameServer Panel
|
||||
* Copyright (C) 2008 - 2018 The GSP Development Team
|
||||
*
|
||||
*
|
||||
* http://www.opengamepanel.org/
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
|
|
|
|||
|
|
@ -1,10 +1,10 @@
|
|||
<?php
|
||||
/*
|
||||
*
|
||||
* OGP - Open Game Panel
|
||||
* Copyright (C) 2008 - 2018 The OGP Development Team
|
||||
* GSP - GameServer Panel
|
||||
* Copyright (C) 2008 - 2018 The GSP Development Team
|
||||
*
|
||||
*
|
||||
* http://www.opengamepanel.org/
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
|
|
|
|||
|
|
@ -1,10 +1,10 @@
|
|||
<?php
|
||||
/*
|
||||
*
|
||||
* OGP - Open Game Panel
|
||||
* Copyright (C) 2008 - 2018 The OGP Development Team
|
||||
* GSP - GameServer Panel
|
||||
* Copyright (C) 2008 - 2018 The GSP Development Team
|
||||
*
|
||||
*
|
||||
* http://www.opengamepanel.org/
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
|
|
@ -33,7 +33,7 @@ define('LANG_create_alias_for', "إنشاء اسم مستعار ل");
|
|||
define('LANG_fast_dl', "إعادة توجيه التحميلات (تحميل سريع)");
|
||||
define('LANG_current_aliases_at_remote_server', "الأسماء المستعارة الحالية في سيرفر التحكم");
|
||||
define('LANG_delete_selected_aliases', "حذف الأسماء المستعارة المحددة");
|
||||
define('LANG_no_aliases_defined', "لا توجد أسماء مستعارة على شبكة الإنترنت تحددها OGP لسيرفر التحكم.");
|
||||
define('LANG_no_aliases_defined', "لا توجد أسماء مستعارة على شبكة الإنترنت تحددها GSP لسيرفر التحكم.");
|
||||
define('LANG_fastdl_port', "بورت");
|
||||
define('LANG_fastdl_port_info', "البورت الذي سيعمل عليه خادم Fast Download");
|
||||
define('LANG_fastdl_ip', "عنوان");
|
||||
|
|
|
|||
|
|
@ -1,10 +1,10 @@
|
|||
<?php
|
||||
/*
|
||||
*
|
||||
* OGP - Open Game Panel
|
||||
* Copyright (C) 2008 - 2018 The OGP Development Team
|
||||
* GSP - GameServer Panel
|
||||
* Copyright (C) 2008 - 2018 The GSP Development Team
|
||||
*
|
||||
*
|
||||
* http://www.opengamepanel.org/
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
|
|
|
|||
|
|
@ -1,10 +1,10 @@
|
|||
<?php
|
||||
/*
|
||||
*
|
||||
* OGP - Open Game Panel
|
||||
* Copyright (C) 2008 - 2018 The OGP Development Team
|
||||
* GSP - GameServer Panel
|
||||
* Copyright (C) 2008 - 2018 The GSP Development Team
|
||||
*
|
||||
*
|
||||
* http://www.opengamepanel.org/
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
|
|
@ -35,7 +35,7 @@ define('LANG_assign_game_homes', "تعيين خوادم اللعبة");
|
|||
define('LANG_user', "المستخدم");
|
||||
define('LANG_group', "مجموعة");
|
||||
define('LANG_start', "تشغيل");
|
||||
define('LANG_ogp_agent_ip', "اي بي خادم OGP");
|
||||
define('LANG_gsp_agent_ip', "اي بي خادم GSP");
|
||||
define('LANG_max_players', "الحد الأقصى للاعبين");
|
||||
define('LANG_max', "الحد الأقصى");
|
||||
define('LANG_ip_and_port', "ايبي و البورت");
|
||||
|
|
@ -89,7 +89,7 @@ define('LANG_player_name', "إسم اللاعب");
|
|||
define('LANG_score', "النقاط");
|
||||
define('LANG_time', "الوقت");
|
||||
define('LANG_no_rights_to_stop_server', "ليس لديك حقوق لإيقاف هذا السيرفر.");
|
||||
define('LANG_no_ogp_lgsl_support', "هذا السيرفر (يعمل: %s) لا يملك دعم LGSL في OGP وبالتالي لا يمكن عرض إحصائياته او بياناته.");
|
||||
define('LANG_no_gsp_lgsl_support', "هذا السيرفر (يعمل: %s) لا يملك دعم LGSL في GSP وبالتالي لا يمكن عرض إحصائياته او بياناته.");
|
||||
define('LANG_server_status', "الخادم على %s هو %s.");
|
||||
define('LANG_server_stopped', "تم إيقاف السيرفر '%s' .");
|
||||
define('LANG_if_want_to_start_homes', "إذا كنت ترغب في بدء تشغيل سيرفرات الألعاب اذهب إلى %s.");
|
||||
|
|
@ -148,7 +148,7 @@ define('LANG_execute_operations', "تنفيذ العمليات");
|
|||
define('LANG_account_expiration', "انتهاء صلاحية الحساب");
|
||||
define('LANG_mysql_databases', "قواعد بيانات MySQL");
|
||||
define('LANG_failed_querying_server', "* فشل الاستعلام عن السيرفر.");
|
||||
define('LANG_query_protocol_not_supported', "* لا يوجد بروتوكول استعلام في OGP يمكنه دعم هذا السيرفر.");
|
||||
define('LANG_query_protocol_not_supported', "* لا يوجد بروتوكول استعلام في GSP يمكنه دعم هذا السيرفر.");
|
||||
define('LANG_queries_disabled_by_setting_disable_queries_after', "تم تعطيل الاستعلامات من خلال الإعداد: تعطيل طلبات البحث بعد: %s, بما لديك %s خادم.<br>");
|
||||
define('LANG_presets_for_game_and_mod', "RCON presets for %s and mod %s");
|
||||
define('LANG_name', "الاسم");
|
||||
|
|
@ -188,7 +188,7 @@ define('LANG_no_online_players', "لا يوجد لاعبين متواجدين.")
|
|||
define('LANG_invalid_game_mod_id', "Invalid Game/Mod ID specified.");
|
||||
define('LANG_auto_update_title_popup', "رابط تحديث تلقائي لSteam");
|
||||
define('LANG_auto_update_popup_html', "<p>استخدم الرابط أدناه للتحقق من خادم اللعبة وتحديثه تلقائيًا عبر Steam إذا لزم الأمر. يمكنك الاستعلام عنها باستخدام cronjob أو بدء العملية يدويًا.</p>");
|
||||
define('LANG_api_links_popup_html', "<p>Select an action you would like to perform using the OGP API for this game server. Then, use the link below to perform your desired action. You can run your desired action using a cronjob or by making a direct request to it.</p>");
|
||||
define('LANG_api_links_popup_html', "<p>Select an action you would like to perform using the GSP API for this game server. Then, use the link below to perform your desired action. You can run your desired action using a cronjob or by making a direct request to it.</p>");
|
||||
define('LANG_auto_update_copy_me', "نسخ");
|
||||
define('LANG_auto_update_copy_me_success', "تم النسخ!");
|
||||
define('LANG_auto_update_copy_me_fail', "فشل النسخ. يرجى نسخ الرابط يدويًا.");
|
||||
|
|
|
|||
|
|
@ -1,10 +1,10 @@
|
|||
<?php
|
||||
/*
|
||||
*
|
||||
* OGP - Open Game Panel
|
||||
* Copyright (C) 2008 - 2018 The OGP Development Team
|
||||
* GSP - GameServer Panel
|
||||
* Copyright (C) 2008 - 2018 The GSP Development Team
|
||||
*
|
||||
*
|
||||
* http://www.opengamepanel.org/
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
|
|
|
|||
|
|
@ -1,10 +1,10 @@
|
|||
<?php
|
||||
/*
|
||||
*
|
||||
* OGP - Open Game Panel
|
||||
* Copyright (C) 2008 - 2018 The OGP Development Team
|
||||
* GSP - GameServer Panel
|
||||
* Copyright (C) 2008 - 2018 The GSP Development Team
|
||||
*
|
||||
*
|
||||
* http://www.opengamepanel.org/
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
|
|
@ -33,7 +33,7 @@ define('LANG_to_login', "لتسجيل الدخول");
|
|||
define('LANG_errormail', "عنوان البريد الإلكتروني الخاص بك غير صحيح.");
|
||||
define('LANG_submit', "إرسال");
|
||||
define('LANG_click', "انقر");
|
||||
define('LANG_mail_settings_missing', "إعدادات البريد الخاصة باللوحة غير كاملة بحيث لا يمكن إرسال كلمة المرور. اتصل بمشرف OGP.");
|
||||
define('LANG_mail_settings_missing', "إعدادات البريد الخاصة باللوحة غير كاملة بحيث لا يمكن إرسال كلمة المرور. اتصل بمشرف GSP.");
|
||||
define('LANG_mail_failed', "أخفق إرسال البريد الإلكتروني.");
|
||||
define('LANG_email', "البريد الإلكتروني");
|
||||
define('LANG_enter_email', "الرجاء إدخال عنوان البريد الإلكتروني الخاص بك");
|
||||
|
|
|
|||
|
|
@ -1,10 +1,10 @@
|
|||
<?php
|
||||
/*
|
||||
*
|
||||
* OGP - Open Game Panel
|
||||
* Copyright (C) 2008 - 2018 The OGP Development Team
|
||||
* GSP - GameServer Panel
|
||||
* Copyright (C) 2008 - 2018 The GSP Development Team
|
||||
*
|
||||
*
|
||||
* http://www.opengamepanel.org/
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
|
|
|
|||
|
|
@ -1,10 +1,10 @@
|
|||
<?php
|
||||
/*
|
||||
*
|
||||
* OGP - Open Game Panel
|
||||
* Copyright (C) 2008 - 2018 The OGP Development Team
|
||||
* GSP - GameServer Panel
|
||||
* Copyright (C) 2008 - 2018 The GSP Development Team
|
||||
*
|
||||
*
|
||||
* http://www.opengamepanel.org/
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
|
|
@ -65,16 +65,16 @@ define('LANG_sql_select', "SELECT");
|
|||
define('LANG_sql_grant_option', "GRANT OPTION");
|
||||
define('LANG_sql_update', "UPDATE");
|
||||
define('LANG_sql_delete', "DELETE");
|
||||
define('LANG_sql_alter_info', "<b>Enables use of ALTER TABLE.</b>");
|
||||
define('LANG_sql_create_info', "<b>Enables use of CREATE TABLE.</b>");
|
||||
define('LANG_sql_alter_info', "<b>Enables use of ALTER TABLE.</b>");
|
||||
define('LANG_sql_create_info', "<b>Enables use of CREATE TABLE.</b>");
|
||||
define('LANG_sql_create_temporary_tables_info', "<b>Enables use of CREATE TEMPORARY TABLE.</b>");
|
||||
define('LANG_sql_delete_info', "<b>Enables use of DELETE.</b>");
|
||||
define('LANG_sql_drop_info', "<b>Enables use of DROP TABLE.</b>");
|
||||
define('LANG_sql_index_info', "<b>Enables use of CREATE INDEX and DROP INDEX.</b>");
|
||||
define('LANG_sql_insert_info', "<b>Enables use of INSERT.</b>");
|
||||
define('LANG_sql_lock_tables_info', "<b>Enables use of LOCK TABLES on tables for which you have the SELECT privilege.</b>");
|
||||
define('LANG_sql_drop_info', "<b>Enables use of DROP TABLE.</b>");
|
||||
define('LANG_sql_index_info', "<b>Enables use of CREATE INDEX and DROP INDEX.</b>");
|
||||
define('LANG_sql_insert_info', "<b>Enables use of INSERT.</b>");
|
||||
define('LANG_sql_lock_tables_info', "<b>Enables use of LOCK TABLES on tables for which you have the SELECT privilege.</b>");
|
||||
define('LANG_sql_select_info', "<b>Enables use of SELECT.</b>");
|
||||
define('LANG_sql_update_info', "<b>Enables use of UPDATE.</b>");
|
||||
define('LANG_sql_update_info', "<b>Enables use of UPDATE.</b>");
|
||||
define('LANG_sql_grant_option_info', "<b>Enables privileges to be granted.</b>");
|
||||
define('LANG_select_game_server', "Select game server");
|
||||
define('LANG_invalid_mysql_server_id', "Invalid MySQL server ID.");
|
||||
|
|
|
|||
|
|
@ -1,10 +1,10 @@
|
|||
<?php
|
||||
/*
|
||||
*
|
||||
* OGP - Open Game Panel
|
||||
* Copyright (C) 2008 - 2017 The OGP Development Team
|
||||
* GSP - GameServer Panel
|
||||
* Copyright (C) 2008 - 2017 The GSP Development Team
|
||||
*
|
||||
*
|
||||
* http://www.opengamepanel.org/
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
|
|
|
|||
|
|
@ -1,10 +1,10 @@
|
|||
<?php
|
||||
/*
|
||||
*
|
||||
* OGP - Open Game Panel
|
||||
* Copyright (C) 2008 - 2017 The OGP Development Team
|
||||
* GSP - GameServer Panel
|
||||
* Copyright (C) 2008 - 2017 The GSP Development Team
|
||||
*
|
||||
*
|
||||
* http://www.opengamepanel.org/
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
|
|
|
|||
|
|
@ -1,10 +1,10 @@
|
|||
<?php
|
||||
/*
|
||||
*
|
||||
* OGP - Open Game Panel
|
||||
* Copyright (C) 2008 - 2018 The OGP Development Team
|
||||
* GSP - GameServer Panel
|
||||
* Copyright (C) 2008 - 2018 The GSP Development Team
|
||||
*
|
||||
*
|
||||
* http://www.opengamepanel.org/
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
|
|
@ -40,7 +40,7 @@ define('LANG_successfull', "نجح");
|
|||
define('LANG_click_here', "انقر هنا");
|
||||
define('LANG_to_login', "لتسجيل الدخول.");
|
||||
define('LANG_registered_on', "مسجل في: %s.");
|
||||
define('LANG_register_message', "مرحبا،<br><br>تم إنشاء حسابك في Open Game Panel ويمكنك <a href='%s' target='_blank'>تسجيل الدخول الآن</a>.<br><br>اسم المستخدم: %s<br><br>تذكر تغيير كلمة المرور الخاصة بك في كثير من الأحيان وأول مرة تسجيل الدخول.<br><br>رجاءا لا ترد على هذا الأيميل!<br><br>______________________________<br>Black Market Servers");
|
||||
define('LANG_register_message', "مرحبا،<br><br>تم إنشاء حسابك في GameServer Panel ويمكنك <a href='%s' target='_blank'>تسجيل الدخول الآن</a>.<br><br>اسم المستخدم: %s<br><br>تذكر تغيير كلمة المرور الخاصة بك في كثير من الأحيان وأول مرة تسجيل الدخول.<br><br>رجاءا لا ترد على هذا الأيميل!<br><br>______________________________<br>Black Market Servers");
|
||||
define('LANG_err_captcha', "لا يتطابق CAPTCHA.");
|
||||
define('LANG_err_login_name', "اسم المستخدم فارغ أو قيد الاستخدام.");
|
||||
define('LANG_err_first_name', "أدخل أسمك.");
|
||||
|
|
|
|||
|
|
@ -1,10 +1,10 @@
|
|||
<?php
|
||||
/*
|
||||
*
|
||||
* OGP - Open Game Panel
|
||||
* Copyright (C) 2008 - 2018 The OGP Development Team
|
||||
* GSP - GameServer Panel
|
||||
* Copyright (C) 2008 - 2018 The GSP Development Team
|
||||
*
|
||||
*
|
||||
* http://www.opengamepanel.org/
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
|
|
@ -27,9 +27,9 @@ define('LANG_configured_remote_hosts', "تكوين المضيف البعيد");
|
|||
define('LANG_remote_host', "المضيف البعيد");
|
||||
define('LANG_remote_host_info', "يجب أن يكون المضيف البعيد اسم مضيف قابل للتوسيع!");
|
||||
define('LANG_remote_host_port', "بورت المضيف البعيد");
|
||||
define('LANG_remote_host_port_info', "The port that is listened by the OGP Agent on remote host. Default: 12679.");
|
||||
define('LANG_remote_host_port_info', "The port that is listened by the GSP Agent on remote host. Default: 12679.");
|
||||
define('LANG_remote_host_name', "إسم المضيف البعيد");
|
||||
define('LANG_ogp_user', "اسم مستخدم وكيل OGP");
|
||||
define('LANG_gsp_user', "اسم مستخدم وكيل GSP");
|
||||
define('LANG_remote_host_name_info', "يستخدم اسم المضيف البعيد لمساعدة المستخدمين على تحديد خوادمهم.");
|
||||
define('LANG_add_remote_host', "إضافة المضيف البعيد");
|
||||
define('LANG_remote_encryption_key', "مفتاح التشفير عن بعد");
|
||||
|
|
@ -41,8 +41,8 @@ define('LANG_ips', "الأيبيهات");
|
|||
define('LANG_add_more_ips', "إذا كنت ترغب في إدخال المزيد من الأيبيهات اضغط على \"تعيين الأيبي\" عندما تكون جميع الحقول ممتلئة وسوف يظهر حقل فارغ.");
|
||||
define('LANG_encryption_key_mismatch', "لا يتطابق مفتاح التشفير مع الوكيل. يرجى إعادة التحقق من تهيئة الوكيل.");
|
||||
define('LANG_no_ip_for_remote_host', "You need to add at least one (1) IP address for each remote host.");
|
||||
define('LANG_note_remote_host', "A remote host is a server where the OGP Agent is running on. Each host can have multiple number of IP addresses on which users can bind servers to.");
|
||||
define('LANG_ip_administration', "Server & IP Administration :: Open Game Panel");
|
||||
define('LANG_note_remote_host', "A remote host is a server where the GSP Agent is running on. Each host can have multiple number of IP addresses on which users can bind servers to.");
|
||||
define('LANG_ip_administration', "Server & IP Administration :: GameServer Panel");
|
||||
define('LANG_unknown_error', "خطأ غير معروف - تم إرجاع status_chk");
|
||||
define('LANG_remote_host_user_name', "UNIX user");
|
||||
define('LANG_remote_host_user_name_info', "Username where the Agent is running. Example: Jonhy");
|
||||
|
|
@ -74,7 +74,7 @@ define('LANG_ips_set_for_server', "IPs set for server called '%s' successfully."
|
|||
define('LANG_could_not_remove_ip', "Could not remove old IP's from database.");
|
||||
define('LANG_could_add_ip', "Could add remote server IP to database.");
|
||||
define('LANG_areyousure_removeagent', "Are you sure you want to remove the Agent called");
|
||||
define('LANG_areyousure_removeagent2', "and all the homes related to it from the ogp database?");
|
||||
define('LANG_areyousure_removeagent2', "and all the homes related to it from the gsp database?");
|
||||
define('LANG_error_while_remove', "Error occurred while removing remote server.");
|
||||
define('LANG_add_ip', "Add IP");
|
||||
define('LANG_remove_ip', "Remove IP");
|
||||
|
|
|
|||
|
|
@ -1,10 +1,10 @@
|
|||
<?php
|
||||
/*
|
||||
*
|
||||
* OGP - Open Game Panel
|
||||
* Copyright (C) 2008 - 2018 The OGP Development Team
|
||||
* GSP - GameServer Panel
|
||||
* Copyright (C) 2008 - 2018 The GSP Development Team
|
||||
*
|
||||
*
|
||||
* http://www.opengamepanel.org/
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
|
|
@ -92,7 +92,7 @@ define('LANG_recaptcha_use_login_info', "If enabled, users will have to solve th
|
|||
define('LANG_login_attempts_before_banned', "Number of failed login attempts before user is banned");
|
||||
define('LANG_login_attempts_before_banned_info', "If a user tries to login with invalid credentials more than this many times, the user will be banned temporarily by the panel.");
|
||||
define('LANG_custom_github_update_username', "GitHub update username");
|
||||
define('LANG_custom_github_update_username_info', "Enter your GitHub username ONLY to use your own forked repositories to update OGP. This should only be changed by developers who wish to use their own repos for development rather than checking in possibly buggy code into the main branch.");
|
||||
define('LANG_custom_github_update_username_info', "Enter your GitHub username ONLY to use your own forked repositories to update GSP. This should only be changed by developers who wish to use their own repos for development rather than checking in possibly buggy code into the main branch.");
|
||||
define('LANG_remote_query', "Remote query");
|
||||
define('LANG_remote_query_info', "Use the remote server (agent) to make queries to the game servers (Only GameQ and LGSL).");
|
||||
define('LANG_check_expiry_by', "Check expiration using");
|
||||
|
|
@ -131,7 +131,7 @@ define('LANG_bg_wrapper_info', "The wrappers background image. <b style='font-si
|
|||
define('LANG_show_server_id_game_monitor', "Show Server IDs on Game Monitor page");
|
||||
define('LANG_show_server_id_game_monitor_info', "Show the game server ID column on the Game Monitor for matching up files created by the Agent to the actual game server.");
|
||||
define('LANG_default_game_server_home_path_prefix', "Default game server home directory prefix");
|
||||
define('LANG_default_game_server_home_path_prefix_info', "Enter a path prefix for where you want game server homes to be created by default. You can use \"{USERNAME}\" in the path which will be replaced with the OGP username the game server is being assigned to. You can use \"{GAMEKEY}\" in the path which will be replaced with a friendly lowercase name. You can use \"{SKIPID}\" anywhere in the path to skip appending the home ID to the path. Example: /ogp/games/{USERNAME}/{GAMEKEY}{SKIPID} will become /ogp/games/username/arkse/. Example 2: /ogp/games will become /ogp/games/1 where 1 is the game servers ID.");
|
||||
define('LANG_default_game_server_home_path_prefix_info', "Enter a path prefix for where you want game server homes to be created by default. You can use \"{USERNAME}\" in the path which will be replaced with the GSP username the game server is being assigned to. You can use \"{GAMEKEY}\" in the path which will be replaced with a friendly lowercase name. You can use \"{SKIPID}\" anywhere in the path to skip appending the home ID to the path. Example: /gsp/games/{USERNAME}/{GAMEKEY}{SKIPID} will become /gsp/games/username/arkse/. Example 2: /gsp/games will become /gsp/games/1 where 1 is the game servers ID.");
|
||||
define('LANG_use_authorized_hosts', "Limit API to Defined Authorized Hosts");
|
||||
define('LANG_use_authorized_hosts_info', "Enable this setting to only allow API calls from pre-defined and approved IP addresses. Approved addresses can be set on this page once the setting has been enabled. If this setting is disabled, a user using a valid key will have access to the API from any IP address. Users using a valid key will be able to use the API to manage any game server they have permissions to administrate.");
|
||||
define('LANG_setup_api_authorized_hosts', "Setup API authorized hosts");
|
||||
|
|
|
|||
|
|
@ -1,10 +1,10 @@
|
|||
<?php
|
||||
/*
|
||||
*
|
||||
* OGP - Open Game Panel
|
||||
* Copyright (C) 2008 - 2018 The OGP Development Team
|
||||
* GSP - GameServer Panel
|
||||
* Copyright (C) 2008 - 2018 The GSP Development Team
|
||||
*
|
||||
*
|
||||
* http://www.opengamepanel.org/
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
|
|
|
|||
|
|
@ -1,10 +1,10 @@
|
|||
<?php
|
||||
/*
|
||||
*
|
||||
* OGP - Open Game Panel
|
||||
* Copyright (C) 2008 - 2018 The OGP Development Team
|
||||
* GSP - GameServer Panel
|
||||
* Copyright (C) 2008 - 2018 The GSP Development Team
|
||||
*
|
||||
*
|
||||
* http://www.opengamepanel.org/
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
|
|
|
|||
|
|
@ -1,10 +1,10 @@
|
|||
<?php
|
||||
/*
|
||||
*
|
||||
* OGP - Open Game Panel
|
||||
* Copyright (C) 2008 - 2018 The OGP Development Team
|
||||
* GSP - GameServer Panel
|
||||
* Copyright (C) 2008 - 2018 The GSP Development Team
|
||||
*
|
||||
*
|
||||
* http://www.opengamepanel.org/
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
|
|
@ -21,54 +21,54 @@
|
|||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
*
|
||||
*/
|
||||
define('OGP_LANG_game', "لعبة");
|
||||
define('OGP_LANG_select_mod', "تحديد mod");
|
||||
define('OGP_LANG_manual_workshop_mod_id', "Manual Workshop mod ID");
|
||||
define('OGP_LANG_manual_workshop_mod_id_info', "You'll find the mod id at the URL of the mod, for example 1379153273 for ARK: Survival Evolved's Solar Panel. You can install multiple mods separating them by coma.");
|
||||
define('OGP_LANG_update_in_progress', "التحديث قيد التقدم");
|
||||
define('OGP_LANG_refresh_steam_workshop_status', "Refresh Steam Workshop status");
|
||||
define('OGP_LANG_update_completed', "إكتمل التحديث بنجاح");
|
||||
define('OGP_LANG_mod_does_not_belong_to_workshop', "The mod %s does not belong to the Workshop");
|
||||
define('OGP_LANG_mod_installation_started', "Mod installation started");
|
||||
define('OGP_LANG_failed_to_start_steam_workshop', "Failed to start Steam Workshop");
|
||||
define('OGP_LANG_connection_error', "خطأ في الإتصال");
|
||||
define('OGP_LANG_install_mod', "تثبيت الوحدات");
|
||||
define('OGP_LANG_show_mod_info', "Show mods info");
|
||||
define('OGP_LANG_select_game', "حدد اللعبة");
|
||||
define('OGP_LANG_save_config', "حفظ التكوين");
|
||||
define('OGP_LANG_mod_key_not_found_from_xml', "Mod key %s not found from xml.");
|
||||
define('OGP_LANG_workshop_id', "Workshop ID");
|
||||
define('OGP_LANG_workshop_id_info', "You'll find the Workshop ID at the URL of the Workshop, for example 440900 for Conan Exiles");
|
||||
define('OGP_LANG_mods_path', "Mods Path");
|
||||
define('OGP_LANG_mods_path_info', "The relative path for the mods folder.");
|
||||
define('OGP_LANG_regex', "Regex");
|
||||
define('OGP_LANG_regex_info', "A regular expression that matches the mods in the configuration file");
|
||||
define('OGP_LANG_mods_backreference_index', "Mods Backreference Index");
|
||||
define('OGP_LANG_mods_backreference_index_info', "The position of the back reference from the part of the regex that match the mods list, starting by 0.");
|
||||
define('OGP_LANG_variable', "متغير");
|
||||
define('OGP_LANG_variable_info', "The variable that cointains the mods list, if any.");
|
||||
define('OGP_LANG_place_after', "مكان بعد");
|
||||
define('OGP_LANG_place_after_info', "The section of the configuration file where the mods list appears, if any. It will be added to the config file if does not exists yet. If the given variable is not present then it will be placed in the line after this section.");
|
||||
define('OGP_LANG_mod_string', "Mod String");
|
||||
define('OGP_LANG_mod_string_info', "The string that represents the mod in the mod list. Valid replacements: %workshop_mod_id%, %first_file% (first file is the first file found in the mod folder downloaded by SteamCMD)");
|
||||
define('OGP_LANG_string_separator', "فاصل السلسلة");
|
||||
define('OGP_LANG_string_separator_info', "The character that separates the mods in the configuration file, for example new line character (\\n) or coma (,).");
|
||||
define('OGP_LANG_filepath', "مسار الملف");
|
||||
define('OGP_LANG_filepath_info', "The path of the configuration file where the mods must be listed.");
|
||||
define('OGP_LANG_post_install', "سكريبت ما بعد التثبيت");
|
||||
define('OGP_LANG_post_install_info', "The necessary commands in bash to move the mods to the mods folder. Valid replacements: %mods_full_path% (the full path to the Wokshop mods folder), %workshop_mod_id%, %first_file% (first file is the first file found in the mod folder downloaded by SteamCMD)");
|
||||
define('OGP_LANG_install_mods', "Install Mods");
|
||||
define('OGP_LANG_uninstall_mods', "Uninstall Mods");
|
||||
define('OGP_LANG_failed_uninstalling_mod', "Failed uninstalling mod %s");
|
||||
define('OGP_LANG_uninstall', "إلغاء تثبيت البرنامج النصي");
|
||||
define('OGP_LANG_uninstall_info', "This is the script called when a mod is uninstalled, Valid replacements: %mods_full_path% (the full path to the wokshop mods folder), %mod_string% (mod string is the name listed in the configuration file for this mod).");
|
||||
define('OGP_LANG_remove_mods', "Remove Mods");
|
||||
define('OGP_LANG_do_not_close_this_page_while_mods_are_being_installed', "Do not close this page while mods are being installed.");
|
||||
define('OGP_LANG_no_game_server_selected', "لم يتم تحديد خادم اللعبة");
|
||||
define('OGP_LANG_there_are_no_mods_installed_on_this_game_server', "There are no mods installed on this game server");
|
||||
define('OGP_LANG_workshop_configuration_not_found', "Workshop configuration not found");
|
||||
define('OGP_LANG_download_method', "طريقة التحميل");
|
||||
define('OGP_LANG_anonymous_login', "تسجيل دخول كمجهول");
|
||||
define('OGP_LANG_select_at_least_one_mod_or_enter_mod_id', "Select at least one mod or enter a mod ID.");
|
||||
define('OGP_LANG_no_game_servers_assigned', "ليس لديك أي خوادم مخصصة لحسابك.");
|
||||
define('GSP_LANG_game', "لعبة");
|
||||
define('GSP_LANG_select_mod', "تحديد mod");
|
||||
define('GSP_LANG_manual_workshop_mod_id', "Manual Workshop mod ID");
|
||||
define('GSP_LANG_manual_workshop_mod_id_info', "You'll find the mod id at the URL of the mod, for example 1379153273 for ARK: Survival Evolved's Solar Panel. You can install multiple mods separating them by coma.");
|
||||
define('GSP_LANG_update_in_progress', "التحديث قيد التقدم");
|
||||
define('GSP_LANG_refresh_steam_workshop_status', "Refresh Steam Workshop status");
|
||||
define('GSP_LANG_update_completed', "إكتمل التحديث بنجاح");
|
||||
define('GSP_LANG_mod_does_not_belong_to_workshop', "The mod %s does not belong to the Workshop");
|
||||
define('GSP_LANG_mod_installation_started', "Mod installation started");
|
||||
define('GSP_LANG_failed_to_start_steam_workshop', "Failed to start Steam Workshop");
|
||||
define('GSP_LANG_connection_error', "خطأ في الإتصال");
|
||||
define('GSP_LANG_install_mod', "تثبيت الوحدات");
|
||||
define('GSP_LANG_show_mod_info', "Show mods info");
|
||||
define('GSP_LANG_select_game', "حدد اللعبة");
|
||||
define('GSP_LANG_save_config', "حفظ التكوين");
|
||||
define('GSP_LANG_mod_key_not_found_from_xml', "Mod key %s not found from xml.");
|
||||
define('GSP_LANG_workshop_id', "Workshop ID");
|
||||
define('GSP_LANG_workshop_id_info', "You'll find the Workshop ID at the URL of the Workshop, for example 440900 for Conan Exiles");
|
||||
define('GSP_LANG_mods_path', "Mods Path");
|
||||
define('GSP_LANG_mods_path_info', "The relative path for the mods folder.");
|
||||
define('GSP_LANG_regex', "Regex");
|
||||
define('GSP_LANG_regex_info', "A regular expression that matches the mods in the configuration file");
|
||||
define('GSP_LANG_mods_backreference_index', "Mods Backreference Index");
|
||||
define('GSP_LANG_mods_backreference_index_info', "The position of the back reference from the part of the regex that match the mods list, starting by 0.");
|
||||
define('GSP_LANG_variable', "متغير");
|
||||
define('GSP_LANG_variable_info', "The variable that cointains the mods list, if any.");
|
||||
define('GSP_LANG_place_after', "مكان بعد");
|
||||
define('GSP_LANG_place_after_info', "The section of the configuration file where the mods list appears, if any. It will be added to the config file if does not exists yet. If the given variable is not present then it will be placed in the line after this section.");
|
||||
define('GSP_LANG_mod_string', "Mod String");
|
||||
define('GSP_LANG_mod_string_info', "The string that represents the mod in the mod list. Valid replacements: %workshop_mod_id%, %first_file% (first file is the first file found in the mod folder downloaded by SteamCMD)");
|
||||
define('GSP_LANG_string_separator', "فاصل السلسلة");
|
||||
define('GSP_LANG_string_separator_info', "The character that separates the mods in the configuration file, for example new line character (\\n) or coma (,).");
|
||||
define('GSP_LANG_filepath', "مسار الملف");
|
||||
define('GSP_LANG_filepath_info', "The path of the configuration file where the mods must be listed.");
|
||||
define('GSP_LANG_post_install', "سكريبت ما بعد التثبيت");
|
||||
define('GSP_LANG_post_install_info', "The necessary commands in bash to move the mods to the mods folder. Valid replacements: %mods_full_path% (the full path to the Wokshop mods folder), %workshop_mod_id%, %first_file% (first file is the first file found in the mod folder downloaded by SteamCMD)");
|
||||
define('GSP_LANG_install_mods', "Install Mods");
|
||||
define('GSP_LANG_uninstall_mods', "Uninstall Mods");
|
||||
define('GSP_LANG_failed_uninstalling_mod', "Failed uninstalling mod %s");
|
||||
define('GSP_LANG_uninstall', "إلغاء تثبيت البرنامج النصي");
|
||||
define('GSP_LANG_uninstall_info', "This is the script called when a mod is uninstalled, Valid replacements: %mods_full_path% (the full path to the wokshop mods folder), %mod_string% (mod string is the name listed in the configuration file for this mod).");
|
||||
define('GSP_LANG_remove_mods', "Remove Mods");
|
||||
define('GSP_LANG_do_not_close_this_page_while_mods_are_being_installed', "Do not close this page while mods are being installed.");
|
||||
define('GSP_LANG_no_game_server_selected', "لم يتم تحديد خادم اللعبة");
|
||||
define('GSP_LANG_there_are_no_mods_installed_on_this_game_server', "There are no mods installed on this game server");
|
||||
define('GSP_LANG_workshop_configuration_not_found', "Workshop configuration not found");
|
||||
define('GSP_LANG_download_method', "طريقة التحميل");
|
||||
define('GSP_LANG_anonymous_login', "تسجيل دخول كمجهول");
|
||||
define('GSP_LANG_select_at_least_one_mod_or_enter_mod_id', "Select at least one mod or enter a mod ID.");
|
||||
define('GSP_LANG_no_game_servers_assigned', "ليس لديك أي خوادم مخصصة لحسابك.");
|
||||
?>
|
||||
|
|
@ -1,10 +1,10 @@
|
|||
<?php
|
||||
/*
|
||||
*
|
||||
* OGP - Open Game Panel
|
||||
* Copyright (C) 2008 - 2018 The OGP Development Team
|
||||
* GSP - GameServer Panel
|
||||
* Copyright (C) 2008 - 2018 The GSP Development Team
|
||||
*
|
||||
*
|
||||
* http://www.opengamepanel.org/
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
|
|
@ -36,7 +36,7 @@ define('LANG_successfull', "نجح");
|
|||
define('LANG_click_here', "انقر هنا");
|
||||
define('LANG_to_login', "لتسجيل الدخول.");
|
||||
define('LANG_registered_on', "مسجل في");
|
||||
define('LANG_register_message', "مرحبا، <br><br>تم إنشاء حساب Open Game Panel، ويمكنك الآن تسجيل الدخول باستخدام معلومات الحساب التالية:<br><br>اسم المستخدم: %s<br>كلمه السر: %s<br><br>تذكر تغيير كلمة المرور الخاصة بك في كثير من الأحيان، وأول مرة تقوم بتسجيل الدخول.<br><br>رجاءا لا ترد على هذا الأيميل!<br><br>______________________________<br>Black Market Servers");
|
||||
define('LANG_register_message', "مرحبا، <br><br>تم إنشاء حساب GameServer Panel، ويمكنك الآن تسجيل الدخول باستخدام معلومات الحساب التالية:<br><br>اسم المستخدم: %s<br>كلمه السر: %s<br><br>تذكر تغيير كلمة المرور الخاصة بك في كثير من الأحيان، وأول مرة تقوم بتسجيل الدخول.<br><br>رجاءا لا ترد على هذا الأيميل!<br><br>______________________________<br>Black Market Servers");
|
||||
define('LANG_err_password', "لا يمكن أن تكون كلمة المرور فارغة");
|
||||
define('LANG_err_confirm_password', "التحقق من أن حقل كلمة المرور لا يمكن أن يكون فارغا");
|
||||
define('LANG_err_password_mismatch', "كلمات المرور غير متطابقة");
|
||||
|
|
|
|||
|
|
@ -1,10 +1,10 @@
|
|||
<?php
|
||||
/*
|
||||
*
|
||||
* OGP - Open Game Panel
|
||||
* Copyright (C) 2008 - 2017 The OGP Development Team
|
||||
* GSP - GameServer Panel
|
||||
* Copyright (C) 2008 - 2017 The GSP Development Team
|
||||
*
|
||||
*
|
||||
* http://www.opengamepanel.org/
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
|
|
|
|||
|
|
@ -1,10 +1,10 @@
|
|||
<?php
|
||||
/*
|
||||
*
|
||||
* OGP - Open Game Panel
|
||||
* Copyright (C) 2008 - 2017 The OGP Development Team
|
||||
* GSP - GameServer Panel
|
||||
* Copyright (C) 2008 - 2017 The GSP Development Team
|
||||
*
|
||||
*
|
||||
* http://www.opengamepanel.org/
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
|
|
|
|||
|
|
@ -1,10 +1,10 @@
|
|||
<?php
|
||||
/*
|
||||
*
|
||||
* OGP - Open Game Panel
|
||||
* Copyright (C) 2008 - 2018 The OGP Development Team
|
||||
* GSP - GameServer Panel
|
||||
* Copyright (C) 2008 - 2018 The GSP Development Team
|
||||
*
|
||||
*
|
||||
* http://www.opengamepanel.org/
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
|
|
|
|||
|
|
@ -1,10 +1,10 @@
|
|||
<?php
|
||||
/*
|
||||
*
|
||||
* OGP - Open Game Panel
|
||||
* Copyright (C) 2008 - 2018 The OGP Development Team
|
||||
* GSP - GameServer Panel
|
||||
* Copyright (C) 2008 - 2018 The GSP Development Team
|
||||
*
|
||||
*
|
||||
* http://www.opengamepanel.org/
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
|
|
|
|||
|
|
@ -1,10 +1,10 @@
|
|||
<?php
|
||||
/*
|
||||
*
|
||||
* OGP - Open Game Panel
|
||||
* Copyright (C) 2008 - 2018 The OGP Development Team
|
||||
* GSP - GameServer Panel
|
||||
* Copyright (C) 2008 - 2018 The GSP Development Team
|
||||
*
|
||||
*
|
||||
* http://www.opengamepanel.org/
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
|
|
@ -25,7 +25,7 @@
|
|||
define('LANG_add_mods_note', "تحتاج إضافة مودز بعد إضافة سيرفر إلى مستخدم . يمكنك عمل ذلك بتعديل السيرفر.");
|
||||
define('LANG_game_servers', "سيرفرات الألعاب");
|
||||
define('LANG_game_path', "مسار اللعبة");
|
||||
define('LANG_game_path_info', "An absolute server path. Example: /home/ogpbot/OGP_User_Files/My_Server");
|
||||
define('LANG_game_path_info', "An absolute server path. Example: /home/ogpbot/GSP_User_Files/My_Server");
|
||||
define('LANG_game_server_name_info', "اسم السيرفر يساعد المستخدمين على معرفة سيرفراتهم");
|
||||
define('LANG_control_password', "التحكم في كلمة المرور");
|
||||
define('LANG_control_password_info', "كلمةالمرور هذه تستخدم للتحكم فى السيرفر . مثل كلمة السر RCON . إذا كانت خانة كلمة المرور فارغة هذا يعنى أنها مستخدمة.");
|
||||
|
|
@ -41,7 +41,7 @@ define('LANG_game_configurations', "> صفحة تهيئة اللعبة");
|
|||
define('LANG_add_remote_server', "أضف سيرفر.");
|
||||
define('LANG_wine_games', "ألعاب Wine");
|
||||
define('LANG_home_path', "مسار ال Home");
|
||||
define('LANG_change_home_info', "مكان تثبيت سيرفر اللعبة . مثال:/home/ogp/my_server/");
|
||||
define('LANG_change_home_info', "مكان تثبيت سيرفر اللعبة . مثال:/home/gsp/my_server/");
|
||||
define('LANG_game_server_name', "إسم سيرفر لعبة");
|
||||
define('LANG_change_name_info', "اسم السيرفر يساعد المستخدمين على معرفة سيرفراتهم");
|
||||
define('LANG_game_control_password', "كلمة مرور تحكم اللعبة");
|
||||
|
|
|
|||
|
|
@ -1,10 +1,10 @@
|
|||
<?php
|
||||
/*
|
||||
*
|
||||
* OGP - Open Game Panel
|
||||
* Copyright (C) 2008 - 2017 The OGP Development Team
|
||||
* GSP - GameServer Panel
|
||||
* Copyright (C) 2008 - 2017 The GSP Development Team
|
||||
*
|
||||
*
|
||||
* http://www.opengamepanel.org/
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
|
|
|
|||
|
|
@ -1,10 +1,10 @@
|
|||
<?php
|
||||
/*
|
||||
*
|
||||
* OGP - Open Game Panel
|
||||
* Copyright (C) 2008 - 2018 The OGP Development Team
|
||||
* GSP - GameServer Panel
|
||||
* Copyright (C) 2008 - 2018 The GSP Development Team
|
||||
*
|
||||
*
|
||||
* http://www.opengamepanel.org/
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
|
|
|
|||
|
|
@ -1,10 +1,10 @@
|
|||
<?php
|
||||
/*
|
||||
*
|
||||
* OGP - Open Game Panel
|
||||
* Copyright (C) 2008 - 2018 The OGP Development Team
|
||||
* GSP - GameServer Panel
|
||||
* Copyright (C) 2008 - 2018 The GSP Development Team
|
||||
*
|
||||
*
|
||||
* http://www.opengamepanel.org/
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
|
|
@ -21,54 +21,54 @@
|
|||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
*
|
||||
*/
|
||||
define('OGP_LANG_game', "游戏");
|
||||
define('OGP_LANG_select_mod', "选择模组");
|
||||
define('OGP_LANG_manual_workshop_mod_id', "Steam创意工坊模组ID");
|
||||
define('OGP_LANG_manual_workshop_mod_id_info', "你可以在Steam创意工坊模组的URL中找到模组ID,例如ARK: Survival Evolved的太阳能板模组为1379153273。你可以通过逗号分隔来安装多个模组。");
|
||||
define('OGP_LANG_update_in_progress', "更新进行中");
|
||||
define('OGP_LANG_refresh_steam_workshop_status', "刷新Steam工坊状态");
|
||||
define('OGP_LANG_update_completed', "更新完成");
|
||||
define('OGP_LANG_mod_does_not_belong_to_workshop', "模组%s不属于Steam创意工坊");
|
||||
define('OGP_LANG_mod_installation_started', "模组安装开始");
|
||||
define('OGP_LANG_failed_to_start_steam_workshop', "启动Steam工坊失败");
|
||||
define('OGP_LANG_connection_error', "连接错误");
|
||||
define('OGP_LANG_install_mod', "安装模组");
|
||||
define('OGP_LANG_show_mod_info', "显示模组信息");
|
||||
define('OGP_LANG_select_game', "选择游戏");
|
||||
define('OGP_LANG_save_config', "保存配置");
|
||||
define('OGP_LANG_mod_key_not_found_from_xml', "从xml中未找到模组键%s。");
|
||||
define('OGP_LANG_workshop_id', "Steam创意工坊ID");
|
||||
define('OGP_LANG_workshop_id_info', "你可以在Steam创意工坊的URL中找到工坊ID,例如Conan Exiles的为440900");
|
||||
define('OGP_LANG_mods_path', "模组路径");
|
||||
define('OGP_LANG_mods_path_info', "模组文件夹的相对路径。");
|
||||
define('OGP_LANG_regex', "正则表达式");
|
||||
define('OGP_LANG_regex_info', "一个匹配配置文件中模组的正则表达式");
|
||||
define('OGP_LANG_mods_backreference_index', "模组反向引用索引");
|
||||
define('OGP_LANG_mods_backreference_index_info', "从匹配模组列表的正则表达式部分的反向引用的位置,从0开始。");
|
||||
define('OGP_LANG_variable', "变量");
|
||||
define('OGP_LANG_variable_info', "包含模组列表的变量如果有");
|
||||
define('OGP_LANG_place_after', "放置位置");
|
||||
define('OGP_LANG_place_after_info', "配置文件中模组列表出现的部分,如果有的话。如果不存在,则会被添加到配置文件中。如果给定的变量不存在,则会被放置在这个部分之后的行。");
|
||||
define('OGP_LANG_mod_string', "模组字符串");
|
||||
define('OGP_LANG_mod_string_info', "代表模组列表中模组的字符串。有效的替换: %workshop_mod_id%,%first_file%(first file是通过SteamCMD下载的模组文件夹中找到的第一个文件)");
|
||||
define('OGP_LANG_string_separator', "字符串分隔符");
|
||||
define('OGP_LANG_string_separator_info', "配置文件中分隔模组的字符,例如换行符(\\n)或逗号(,)。");
|
||||
define('OGP_LANG_filepath', "文件路径");
|
||||
define('OGP_LANG_filepath_info', "必须列出模组的配置文件的路径。");
|
||||
define('OGP_LANG_post_install', "安装后脚本");
|
||||
define('OGP_LANG_post_install_info', "移动模组到模组文件夹所需的bash命令。有效的替换: %mods_full_path%(Wokshop模组文件夹的完整路径),%workshop_mod_id%,%first_file%(first file是通过SteamCMD下载的模组文件夹中找到的第一个文件)");
|
||||
define('OGP_LANG_install_mods', "安装模组");
|
||||
define('OGP_LANG_uninstall_mods', "卸载模组");
|
||||
define('OGP_LANG_failed_uninstalling_mod', "卸载模组%s失败");
|
||||
define('OGP_LANG_uninstall', "卸载脚本");
|
||||
define('OGP_LANG_uninstall_info', "当一个模组被卸载时调用的脚本,有效的替换:%mods_full_path%(wokshop模组文件夹的完整路径),%mod_string%(mod string是此模组在配置文件中列出的名称)。");
|
||||
define('OGP_LANG_remove_mods', "移除模组");
|
||||
define('OGP_LANG_do_not_close_this_page_while_mods_are_being_installed', "安装模组时请不要关闭此页面。");
|
||||
define('OGP_LANG_no_game_server_selected', "没有选择游戏服务器");
|
||||
define('OGP_LANG_there_are_no_mods_installed_on_this_game_server', "这个游戏服务器上没有安装模组");
|
||||
define('OGP_LANG_workshop_configuration_not_found', "未找到Steam创意工坊配置");
|
||||
define('OGP_LANG_download_method', "下载方法");
|
||||
define('OGP_LANG_anonymous_login', "匿名登录");
|
||||
define('OGP_LANG_select_at_least_one_mod_or_enter_mod_id', "至少选择一个模组或输入模组ID。");
|
||||
define('OGP_LANG_no_game_servers_assigned', "你的账户没有分配任何服务器。");
|
||||
define('GSP_LANG_game', "游戏");
|
||||
define('GSP_LANG_select_mod', "选择模组");
|
||||
define('GSP_LANG_manual_workshop_mod_id', "Steam创意工坊模组ID");
|
||||
define('GSP_LANG_manual_workshop_mod_id_info', "你可以在Steam创意工坊模组的URL中找到模组ID,例如ARK: Survival Evolved的太阳能板模组为1379153273。你可以通过逗号分隔来安装多个模组。");
|
||||
define('GSP_LANG_update_in_progress', "更新进行中");
|
||||
define('GSP_LANG_refresh_steam_workshop_status', "刷新Steam工坊状态");
|
||||
define('GSP_LANG_update_completed', "更新完成");
|
||||
define('GSP_LANG_mod_does_not_belong_to_workshop', "模组%s不属于Steam创意工坊");
|
||||
define('GSP_LANG_mod_installation_started', "模组安装开始");
|
||||
define('GSP_LANG_failed_to_start_steam_workshop', "启动Steam工坊失败");
|
||||
define('GSP_LANG_connection_error', "连接错误");
|
||||
define('GSP_LANG_install_mod', "安装模组");
|
||||
define('GSP_LANG_show_mod_info', "显示模组信息");
|
||||
define('GSP_LANG_select_game', "选择游戏");
|
||||
define('GSP_LANG_save_config', "保存配置");
|
||||
define('GSP_LANG_mod_key_not_found_from_xml', "从xml中未找到模组键%s。");
|
||||
define('GSP_LANG_workshop_id', "Steam创意工坊ID");
|
||||
define('GSP_LANG_workshop_id_info', "你可以在Steam创意工坊的URL中找到工坊ID,例如Conan Exiles的为440900");
|
||||
define('GSP_LANG_mods_path', "模组路径");
|
||||
define('GSP_LANG_mods_path_info', "模组文件夹的相对路径。");
|
||||
define('GSP_LANG_regex', "正则表达式");
|
||||
define('GSP_LANG_regex_info', "一个匹配配置文件中模组的正则表达式");
|
||||
define('GSP_LANG_mods_backreference_index', "模组反向引用索引");
|
||||
define('GSP_LANG_mods_backreference_index_info', "从匹配模组列表的正则表达式部分的反向引用的位置,从0开始。");
|
||||
define('GSP_LANG_variable', "变量");
|
||||
define('GSP_LANG_variable_info', "包含模组列表的变量如果有");
|
||||
define('GSP_LANG_place_after', "放置位置");
|
||||
define('GSP_LANG_place_after_info', "配置文件中模组列表出现的部分,如果有的话。如果不存在,则会被添加到配置文件中。如果给定的变量不存在,则会被放置在这个部分之后的行。");
|
||||
define('GSP_LANG_mod_string', "模组字符串");
|
||||
define('GSP_LANG_mod_string_info', "代表模组列表中模组的字符串。有效的替换: %workshop_mod_id%,%first_file%(first file是通过SteamCMD下载的模组文件夹中找到的第一个文件)");
|
||||
define('GSP_LANG_string_separator', "字符串分隔符");
|
||||
define('GSP_LANG_string_separator_info', "配置文件中分隔模组的字符,例如换行符(\\n)或逗号(,)。");
|
||||
define('GSP_LANG_filepath', "文件路径");
|
||||
define('GSP_LANG_filepath_info', "必须列出模组的配置文件的路径。");
|
||||
define('GSP_LANG_post_install', "安装后脚本");
|
||||
define('GSP_LANG_post_install_info', "移动模组到模组文件夹所需的bash命令。有效的替换: %mods_full_path%(Wokshop模组文件夹的完整路径),%workshop_mod_id%,%first_file%(first file是通过SteamCMD下载的模组文件夹中找到的第一个文件)");
|
||||
define('GSP_LANG_install_mods', "安装模组");
|
||||
define('GSP_LANG_uninstall_mods', "卸载模组");
|
||||
define('GSP_LANG_failed_uninstalling_mod', "卸载模组%s失败");
|
||||
define('GSP_LANG_uninstall', "卸载脚本");
|
||||
define('GSP_LANG_uninstall_info', "当一个模组被卸载时调用的脚本,有效的替换:%mods_full_path%(wokshop模组文件夹的完整路径),%mod_string%(mod string是此模组在配置文件中列出的名称)。");
|
||||
define('GSP_LANG_remove_mods', "移除模组");
|
||||
define('GSP_LANG_do_not_close_this_page_while_mods_are_being_installed', "安装模组时请不要关闭此页面。");
|
||||
define('GSP_LANG_no_game_server_selected', "没有选择游戏服务器");
|
||||
define('GSP_LANG_there_are_no_mods_installed_on_this_game_server', "这个游戏服务器上没有安装模组");
|
||||
define('GSP_LANG_workshop_configuration_not_found', "未找到Steam创意工坊配置");
|
||||
define('GSP_LANG_download_method', "下载方法");
|
||||
define('GSP_LANG_anonymous_login', "匿名登录");
|
||||
define('GSP_LANG_select_at_least_one_mod_or_enter_mod_id', "至少选择一个模组或输入模组ID。");
|
||||
define('GSP_LANG_no_game_servers_assigned', "你的账户没有分配任何服务器。");
|
||||
?>
|
||||
|
|
@ -1,10 +1,10 @@
|
|||
<?php
|
||||
/*
|
||||
*
|
||||
* OGP - Open Game Panel
|
||||
* Copyright (C) 2008 - 2018 The OGP Development Team
|
||||
* GSP - GameServer Panel
|
||||
* Copyright (C) 2008 - 2018 The GSP Development Team
|
||||
*
|
||||
*
|
||||
* http://www.opengamepanel.org/
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
|
|
|
|||
|
|
@ -1,10 +1,10 @@
|
|||
<?php
|
||||
/*
|
||||
*
|
||||
* OGP - Open Game Panel
|
||||
* Copyright (C) 2008 - 2018 The OGP Development Team
|
||||
* GSP - GameServer Panel
|
||||
* Copyright (C) 2008 - 2018 The GSP Development Team
|
||||
*
|
||||
*
|
||||
* http://www.opengamepanel.org/
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
|
|
@ -23,7 +23,7 @@
|
|||
*/
|
||||
|
||||
define('LANG_install_lang', "Odaberite vaš željeni jezik");
|
||||
define('LANG_install_welcome', "Dobrodošli u Open Game Panel Instalaciju");
|
||||
define('LANG_install_welcome', "Dobrodošli u GameServer Panel Instalaciju");
|
||||
define('LANG_file_permission_check', "Provjera potrebnih dozvola datoteka");
|
||||
define('LANG_OK', "OK");
|
||||
define('LANG_write_permission_required', "Potrebna je pisana dozvola");
|
||||
|
|
@ -31,7 +31,7 @@ define('LANG_execute_permission_required', "Potrebna je dozvola za izvršavanje"
|
|||
define('LANG_create_an_empty_file', "Izradite praznu datoteku.");
|
||||
define('LANG_found', "Pronađeno");
|
||||
define('LANG_not_found', "Nije pronađeno");
|
||||
define('LANG_pear_xxtea_info', "Pear Crypt_XXTEA je potreban za korištenje OGP-a. U većini Linux distribucija ovaj modul se može instalirati pomoću sljedeće Pear naredbe 'pear install Crypt_XXTEA-beta'.");
|
||||
define('LANG_pear_xxtea_info', "Pear Crypt_XXTEA je potreban za korištenje GSP-a. U većini Linux distribucija ovaj modul se može instalirati pomoću sljedeće Pear naredbe 'pear install Crypt_XXTEA-beta'.");
|
||||
define('LANG_refresh', "Osvježiti");
|
||||
define('LANG_checking_required_modules', "Provjera potrebnih modula");
|
||||
define('LANG_checking_optional_modules', "Provjera dodatnih modula");
|
||||
|
|
@ -49,7 +49,7 @@ define('LANG_unable_to_write_config', "Nije moguće pisati u konfiguracijsku dat
|
|||
define('LANG_admin_login_details', "Pojedinosti prijave administratora");
|
||||
define('LANG_config_written', "Konfigurirane datoteke uspješno su stvorene.");
|
||||
define('LANG_database_created', "Uspješno su stvorene tablice baza podataka.");
|
||||
define('LANG_admin_login_details_info', "Sad stvaramo admin korisnika za vaš Open Game Panel.");
|
||||
define('LANG_admin_login_details_info', "Sad stvaramo admin korisnika za vaš GameServer Panel.");
|
||||
define('LANG_username', "Korisničko Ime");
|
||||
define('LANG_repeat_password', "Potvrdi Lozinku");
|
||||
define('LANG_email', "Adresa E-pošte");
|
||||
|
|
@ -60,10 +60,10 @@ define('LANG_invalid_username', "Unijeli ste nevaljano korisničko ime.");
|
|||
define('LANG_password_too_short', "Vaša zaporka je prekratka. Mora biti barem '%d' znakova dugo.");
|
||||
define('LANG_password_contains_invalid_characters', "Vaša zaporka sadrži nevažeće znakove.");
|
||||
define('LANG_invalid_email_address', "Unijeli ste nevažeću adresu e-pošte.");
|
||||
define('LANG_setup_complete', "Uspostava je uspješno završena. Open Game Panel sad je spreman za upotrebu.");
|
||||
define('LANG_setup_complete', "Uspostava je uspješno završena. GameServer Panel sad je spreman za upotrebu.");
|
||||
define('LANG_remove_install_and_secure_config', "Trebali biste izbrisati install.php s vašeg poslužitelja i include/config.inc.php vratiti natrag na 644 zbog sigurnosnih razloga.");
|
||||
define('LANG_go_to_panel', "Kliknite ovdje za prijavu na OGP.");
|
||||
define('LANG_unable_to_resolve', "Ako ne možete riješiti ovaj problem, posjetite web stranicu OGP-a");
|
||||
define('LANG_go_to_panel', "Kliknite ovdje za prijavu na GSP.");
|
||||
define('LANG_unable_to_resolve', "Ako ne možete riješiti ovaj problem, posjetite web stranicu GSP-a");
|
||||
define('LANG_slogan', "The Open-Source one!");
|
||||
define('LANG_default_welcome_title_message', "Dobrodošli! <b style='font-size:12px; font-weight:normal;'>Možete promjeniti ovaj tekst na '<a href='?m=settings&p=themes'>Postavke teme</a>' ispod '<a href='?m=administration&p=main'>Administracija</a>'</b>");
|
||||
?>
|
||||
|
|
|
|||
|
|
@ -1,10 +1,10 @@
|
|||
<?php
|
||||
/*
|
||||
*
|
||||
* OGP - Open Game Panel
|
||||
* Copyright (C) 2008 - 2018 The OGP Development Team
|
||||
* GSP - GameServer Panel
|
||||
* Copyright (C) 2008 - 2018 The GSP Development Team
|
||||
*
|
||||
*
|
||||
* http://www.opengamepanel.org/
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
|
|
|
|||
|
|
@ -1,10 +1,10 @@
|
|||
<?php
|
||||
/*
|
||||
*
|
||||
* OGP - Open Game Panel
|
||||
* Copyright (C) 2008 - 2018 The OGP Development Team
|
||||
* GSP - GameServer Panel
|
||||
* Copyright (C) 2008 - 2018 The GSP Development Team
|
||||
*
|
||||
*
|
||||
* http://www.opengamepanel.org/
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
|
|
|
|||
|
|
@ -1,10 +1,10 @@
|
|||
<?php
|
||||
/*
|
||||
*
|
||||
* OGP - Open Game Panel
|
||||
* Copyright (C) 2008 - 2018 The OGP Development Team
|
||||
* GSP - GameServer Panel
|
||||
* Copyright (C) 2008 - 2018 The GSP Development Team
|
||||
*
|
||||
*
|
||||
* http://www.opengamepanel.org/
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
|
|
|
|||
|
|
@ -1,10 +1,10 @@
|
|||
<?php
|
||||
/*
|
||||
*
|
||||
* OGP - Open Game Panel
|
||||
* Copyright (C) 2008 - 2018 The OGP Development Team
|
||||
* GSP - GameServer Panel
|
||||
* Copyright (C) 2008 - 2018 The GSP Development Team
|
||||
*
|
||||
*
|
||||
* http://www.opengamepanel.org/
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
|
|
|
|||
|
|
@ -1,10 +1,10 @@
|
|||
<?php
|
||||
/*
|
||||
*
|
||||
* OGP - Open Game Panel
|
||||
* Copyright (C) 2008 - 2018 The OGP Development Team
|
||||
* GSP - GameServer Panel
|
||||
* Copyright (C) 2008 - 2018 The GSP Development Team
|
||||
*
|
||||
*
|
||||
* http://www.opengamepanel.org/
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
|
|
@ -23,10 +23,10 @@
|
|||
*/
|
||||
|
||||
define('LANG_dashboard_ftp_text', "FTP klijent može komprimirati datoteke i poslati ih putem e-pošte, može dekomprimirati , uređivati tekstne datoteke i još mnogo toga.");
|
||||
define('LANG_dashboard_addons_manager_text', "Upravljajte svim različitim vrstama usluga s OGP-om. Odaberite između više od 115 servera, koje izravno dobavlja OGP.");
|
||||
define('LANG_dashboard_addons_manager_text', "Upravljajte svim različitim vrstama usluga s GSP-om. Odaberite između više od 115 servera, koje izravno dobavlja GSP.");
|
||||
define('LANG_dashboard_game_monitor_text', "Brzo pratite i pratite promet i zapisnike. Možete vidjeti koji su serveri gore i dolje.");
|
||||
define('LANG_dashboard_support_text', "Potražite podršku OGP Profesionalnog tima na forumu. Brzi odgovor i velika pažnja.");
|
||||
define('LANG_welcome_text', "Dobrodošli na Open Game Panel (OGP). OGP je softver otvorenog koda, koji vam omogućuje instalaciju, pokretanje i praćenje različitih servera.");
|
||||
define('LANG_dashboard_support_text', "Potražite podršku GSP Profesionalnog tima na forumu. Brzi odgovor i velika pažnja.");
|
||||
define('LANG_welcome_text', "Dobrodošli na GameServer Panel (GSP). GSP je softver otvorenog koda, koji vam omogućuje instalaciju, pokretanje i praćenje različitih servera.");
|
||||
define('LANG_any_server_is_online', "Serveri na mreži");
|
||||
define('LANG_current_map', "Trenutna Mapa");
|
||||
define('LANG_server_ip_port', "IP:Port");
|
||||
|
|
|
|||
|
|
@ -1,10 +1,10 @@
|
|||
<?php
|
||||
/*
|
||||
*
|
||||
* OGP - Open Game Panel
|
||||
* Copyright (C) 2008 - 2018 The OGP Development Team
|
||||
* GSP - GameServer Panel
|
||||
* Copyright (C) 2008 - 2018 The GSP Development Team
|
||||
*
|
||||
*
|
||||
* http://www.opengamepanel.org/
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
|
|
|
|||
|
|
@ -1,10 +1,10 @@
|
|||
<?php
|
||||
/*
|
||||
*
|
||||
* OGP - Open Game Panel
|
||||
* Copyright (C) 2008 - 2018 The OGP Development Team
|
||||
* GSP - GameServer Panel
|
||||
* Copyright (C) 2008 - 2018 The GSP Development Team
|
||||
*
|
||||
*
|
||||
* http://www.opengamepanel.org/
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
|
|
|
|||
|
|
@ -1,10 +1,10 @@
|
|||
<?php
|
||||
/*
|
||||
*
|
||||
* OGP - Open Game Panel
|
||||
* Copyright (C) 2008 - 2018 The OGP Development Team
|
||||
* GSP - GameServer Panel
|
||||
* Copyright (C) 2008 - 2018 The GSP Development Team
|
||||
*
|
||||
*
|
||||
* http://www.opengamepanel.org/
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
|
|
@ -33,7 +33,7 @@ define('LANG_create_alias_for', "Stvoriti Brzo Skidanje za");
|
|||
define('LANG_fast_dl', "Upravljajte Brzim Skidanjem (FastDL)");
|
||||
define('LANG_current_aliases_at_remote_server', "Trenutni Serveri na kojima se koristi Brzo Skidanje");
|
||||
define('LANG_delete_selected_aliases', "Izbrisati odabrane usluge");
|
||||
define('LANG_no_aliases_defined', "Još ne postoje web usluge Brzo Skidanje koji definira OGP za ovaj udaljeni server.");
|
||||
define('LANG_no_aliases_defined', "Još ne postoje web usluge Brzo Skidanje koji definira GSP za ovaj udaljeni server.");
|
||||
define('LANG_fastdl_port', "Port");
|
||||
define('LANG_fastdl_port_info', "Port na kojem če vaš Daemon za Brzo Skidanje početi");
|
||||
define('LANG_fastdl_ip', "Adresa");
|
||||
|
|
|
|||
|
|
@ -1,10 +1,10 @@
|
|||
<?php
|
||||
/*
|
||||
*
|
||||
* OGP - Open Game Panel
|
||||
* Copyright (C) 2008 - 2018 The OGP Development Team
|
||||
* GSP - GameServer Panel
|
||||
* Copyright (C) 2008 - 2018 The GSP Development Team
|
||||
*
|
||||
*
|
||||
* http://www.opengamepanel.org/
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
|
|
|
|||
|
|
@ -1,10 +1,10 @@
|
|||
<?php
|
||||
/*
|
||||
*
|
||||
* OGP - Open Game Panel
|
||||
* Copyright (C) 2008 - 2018 The OGP Development Team
|
||||
* GSP - GameServer Panel
|
||||
* Copyright (C) 2008 - 2018 The GSP Development Team
|
||||
*
|
||||
*
|
||||
* http://www.opengamepanel.org/
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
|
|
@ -24,7 +24,7 @@
|
|||
|
||||
define('LANG_no_games_to_monitor', "Nemate nijednu konfiguriranu igricu koju možete nadzirati.");
|
||||
define('LANG_status', "Status");
|
||||
define('LANG_fail_no_mods', "Nijedan Mod nije omogućen za ovu igru! Morate zatražiti od administratora OGP-a da dodate Mod(ove) za igru koja vam je dodjeljena.");
|
||||
define('LANG_fail_no_mods', "Nijedan Mod nije omogućen za ovu igru! Morate zatražiti od administratora GSP-a da dodate Mod(ove) za igru koja vam je dodjeljena.");
|
||||
define('LANG_no_game_homes_assigned', "Nemate nijedan server dodijeljen vašem računu.");
|
||||
define('LANG_select_game_home_to_configure', "Odaberite server koji želite konfigurirati");
|
||||
define('LANG_file_manager', "Upravitelj datoteka");
|
||||
|
|
@ -35,7 +35,7 @@ define('LANG_assign_game_homes', "Dodijeli server");
|
|||
define('LANG_user', "Korisnik");
|
||||
define('LANG_group', "Grupa");
|
||||
define('LANG_start', "Početak");
|
||||
define('LANG_ogp_agent_ip', "OGP IP adresa Agenta");
|
||||
define('LANG_gsp_agent_ip', "GSP IP adresa Agenta");
|
||||
define('LANG_max_players', "Maksimalno Igrača");
|
||||
define('LANG_max', "Maksimalno");
|
||||
define('LANG_ip_and_port', "IP i Port");
|
||||
|
|
@ -89,7 +89,7 @@ define('LANG_player_name', "Ime Igrača");
|
|||
define('LANG_score', "Rezultat");
|
||||
define('LANG_time', "Vrijeme");
|
||||
define('LANG_no_rights_to_stop_server', "Nemate prava za zaustavljanje ovog servera.");
|
||||
define('LANG_no_ogp_lgsl_support', "Ovaj server (pokrenut: %s) nema LGSL podršku u OGP-u i njegova se statistika ne može prikazati.");
|
||||
define('LANG_no_gsp_lgsl_support', "Ovaj server (pokrenut: %s) nema LGSL podršku u GSP-u i njegova se statistika ne može prikazati.");
|
||||
define('LANG_server_status', "Server na %s je %s.");
|
||||
define('LANG_server_stopped', "Server '%s' je zaustavljen.");
|
||||
define('LANG_if_want_to_start_homes', "Ako želite pokrenuti Igrice idite na %s.");
|
||||
|
|
@ -148,7 +148,7 @@ define('LANG_execute_operations', "Izvršiti operacije");
|
|||
define('LANG_account_expiration', "Račun ističe");
|
||||
define('LANG_mysql_databases', "MySQL Baza Podataka");
|
||||
define('LANG_failed_querying_server', "* Server nije uspješno pokrenut.");
|
||||
define('LANG_query_protocol_not_supported', "Ne postoji upitni protokol u OGP-u koji može podržati ovaj server.");
|
||||
define('LANG_query_protocol_not_supported', "Ne postoji upitni protokol u GSP-u koji može podržati ovaj server.");
|
||||
define('LANG_queries_disabled_by_setting_disable_queries_after', "Upiti su onemogućeni postavljanjem: Onemogući upite nakon: %s, jer imate %s servera.<br>");
|
||||
define('LANG_presets_for_game_and_mod', "RCON predpodešavanje za %s i mod %s");
|
||||
define('LANG_name', "Ime");
|
||||
|
|
@ -188,7 +188,7 @@ define('LANG_no_online_players', "Nema igrača na mreži.");
|
|||
define('LANG_invalid_game_mod_id', "Navedeno je nevažeći ID Igre/Moda.");
|
||||
define('LANG_auto_update_title_popup', "Link za Steam Automatsko Ažuriranje");
|
||||
define('LANG_auto_update_popup_html', "<p>Koristite vezu u nastavku da biste provjerili i automatski ažurirali svoj server putem Steam-a ako je potrebno. & Nbsp; Možete upotrijebiti korištenjem cronjob-a ili ručno pokrenuti postupak.");
|
||||
define('LANG_api_links_popup_html', "<p>Odaberite radnju koju želite izvršiti pomoću OGP API-ja za ovaj poslužitelj igre. Zatim pomoću donje veze izvedite željenu radnju. Željenu radnju možete pokrenuti pomoću cronjoba ili izravnim zahtjevom.</p>");
|
||||
define('LANG_api_links_popup_html', "<p>Odaberite radnju koju želite izvršiti pomoću GSP API-ja za ovaj poslužitelj igre. Zatim pomoću donje veze izvedite željenu radnju. Željenu radnju možete pokrenuti pomoću cronjoba ili izravnim zahtjevom.</p>");
|
||||
define('LANG_auto_update_copy_me', "Kopiraj");
|
||||
define('LANG_auto_update_copy_me_success', "Kopirano!");
|
||||
define('LANG_auto_update_copy_me_fail', "Kopiranje nije uspjelo. Molimo ručno kopirajte vezu.");
|
||||
|
|
|
|||
|
|
@ -1,10 +1,10 @@
|
|||
<?php
|
||||
/*
|
||||
*
|
||||
* OGP - Open Game Panel
|
||||
* Copyright (C) 2008 - 2018 The OGP Development Team
|
||||
* GSP - GameServer Panel
|
||||
* Copyright (C) 2008 - 2018 The GSP Development Team
|
||||
*
|
||||
*
|
||||
* http://www.opengamepanel.org/
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
|
|
|
|||
|
|
@ -1,10 +1,10 @@
|
|||
<?php
|
||||
/*
|
||||
*
|
||||
* OGP - Open Game Panel
|
||||
* Copyright (C) 2008 - 2018 The OGP Development Team
|
||||
* GSP - GameServer Panel
|
||||
* Copyright (C) 2008 - 2018 The GSP Development Team
|
||||
*
|
||||
*
|
||||
* http://www.opengamepanel.org/
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
|
|
@ -33,7 +33,7 @@ define('LANG_to_login', "za prijavu");
|
|||
define('LANG_errormail', "Vaša adresa e-pošte nije točna.");
|
||||
define('LANG_submit', "Potvrditi");
|
||||
define('LANG_click', "Stisni");
|
||||
define('LANG_mail_settings_missing', "Postavke Panel pošte nisu potpune pa ne može poslati vašu zaporku. Kontaktirajte svog administratora OGP-a.");
|
||||
define('LANG_mail_settings_missing', "Postavke Panel pošte nisu potpune pa ne može poslati vašu zaporku. Kontaktirajte svog administratora GSP-a.");
|
||||
define('LANG_mail_failed', "Slanje e-pošte nije uspjelo.");
|
||||
define('LANG_email', "E-pošta");
|
||||
define('LANG_enter_email', "Molim upišite svoju adresu e-pošte");
|
||||
|
|
|
|||
|
|
@ -1,10 +1,10 @@
|
|||
<?php
|
||||
/*
|
||||
*
|
||||
* OGP - Open Game Panel
|
||||
* Copyright (C) 2008 - 2018 The OGP Development Team
|
||||
* GSP - GameServer Panel
|
||||
* Copyright (C) 2008 - 2018 The GSP Development Team
|
||||
*
|
||||
*
|
||||
* http://www.opengamepanel.org/
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
|
|
@ -33,7 +33,7 @@ define('LANG_uninstall', "Deinstalirati");
|
|||
define('LANG_modules', "Moduli");
|
||||
define('LANG_update_modules', "Ažuriraj Module");
|
||||
define('LANG_no_installed_modules', "Nije pronađen nijedan instalirani Modul.");
|
||||
define('LANG_not_complete', "Značajka Instalirati/Deinstalirari nije potpuna i možda neće ispravno raditi. UPOZORENJE: Gubitak podataka može se pojaviti u OGP bazi podataka!");
|
||||
define('LANG_not_complete', "Značajka Instalirati/Deinstalirari nije potpuna i možda neće ispravno raditi. UPOZORENJE: Gubitak podataka može se pojaviti u GSP bazi podataka!");
|
||||
define('LANG_core_mods_installed', "Instalirani Jezgrenih Moduli:");
|
||||
define('LANG_custom_mods_installed', "Instalirani Dodatnih Moduli:");
|
||||
define('LANG_installing_module', "Instaliranje modula '%s'");
|
||||
|
|
|
|||
|
|
@ -1,10 +1,10 @@
|
|||
<?php
|
||||
/*
|
||||
*
|
||||
* OGP - Open Game Panel
|
||||
* Copyright (C) 2008 - 2018 The OGP Development Team
|
||||
* GSP - GameServer Panel
|
||||
* Copyright (C) 2008 - 2018 The GSP Development Team
|
||||
*
|
||||
*
|
||||
* http://www.opengamepanel.org/
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
|
|
@ -65,16 +65,16 @@ define('LANG_sql_select', "ODABRATI");
|
|||
define('LANG_sql_grant_option', "POTVRDA OPCIJA");
|
||||
define('LANG_sql_update', "AŽURIRATI");
|
||||
define('LANG_sql_delete', "IZBRISATI");
|
||||
define('LANG_sql_alter_info', "<b>Omogućuje upotrebu ALTER TABLICE.</b>");
|
||||
define('LANG_sql_create_info', "<b>Omogućuje upotrebu KREIRAJ TABLICE.</b>");
|
||||
define('LANG_sql_alter_info', "<b>Omogućuje upotrebu ALTER TABLICE.</b>");
|
||||
define('LANG_sql_create_info', "<b>Omogućuje upotrebu KREIRAJ TABLICE.</b>");
|
||||
define('LANG_sql_create_temporary_tables_info', "<b>Omogućuje upotrebu IZRADE TEMPORARNE TABLICE.</b>");
|
||||
define('LANG_sql_delete_info', "<b>Omogućuje upotrebu IZBRISATI.</b>");
|
||||
define('LANG_sql_drop_info', "<b>Omogućuje upotrebu OTPUSTITI TABLICE.</b>");
|
||||
define('LANG_sql_index_info', "<b>Omogućuje upotrebu KREIRAJ INDEKS i OTPUSTITI INDEKS.</b>");
|
||||
define('LANG_sql_insert_info', "<b>Omogućuje upotrebu UBACIVATI.</b>");
|
||||
define('LANG_sql_lock_tables_info', "<b>Omogućuje upotrebu ZAKLJUČATI TABLICE na tablicama na koje imate ODABRATI privilegije.</b>");
|
||||
define('LANG_sql_drop_info', "<b>Omogućuje upotrebu OTPUSTITI TABLICE.</b>");
|
||||
define('LANG_sql_index_info', "<b>Omogućuje upotrebu KREIRAJ INDEKS i OTPUSTITI INDEKS.</b>");
|
||||
define('LANG_sql_insert_info', "<b>Omogućuje upotrebu UBACIVATI.</b>");
|
||||
define('LANG_sql_lock_tables_info', "<b>Omogućuje upotrebu ZAKLJUČATI TABLICE na tablicama na koje imate ODABRATI privilegije.</b>");
|
||||
define('LANG_sql_select_info', "<b>Omogućuje upotrebu ODABRATI.</b>");
|
||||
define('LANG_sql_update_info', "<b>Omogućuje upotrebu AŽURIRATI.</b>");
|
||||
define('LANG_sql_update_info', "<b>Omogućuje upotrebu AŽURIRATI.</b>");
|
||||
define('LANG_sql_grant_option_info', "<b>Omogućuje privilegije za potvrdu.</b>");
|
||||
define('LANG_select_game_server', "Odaberite igre");
|
||||
define('LANG_invalid_mysql_server_id', "Nevažeći ID MySQL poslužitelja.");
|
||||
|
|
|
|||
|
|
@ -1,10 +1,10 @@
|
|||
<?php
|
||||
/*
|
||||
*
|
||||
* OGP - Open Game Panel
|
||||
* Copyright (C) 2008 - 2017 The OGP Development Team
|
||||
* GSP - GameServer Panel
|
||||
* Copyright (C) 2008 - 2017 The GSP Development Team
|
||||
*
|
||||
*
|
||||
* http://www.opengamepanel.org/
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
|
|
|
|||
|
|
@ -1,10 +1,10 @@
|
|||
<?php
|
||||
/*
|
||||
*
|
||||
* OGP - Open Game Panel
|
||||
* Copyright (C) 2008 - 2017 The OGP Development Team
|
||||
* GSP - GameServer Panel
|
||||
* Copyright (C) 2008 - 2017 The GSP Development Team
|
||||
*
|
||||
*
|
||||
* http://www.opengamepanel.org/
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
|
|
|
|||
|
|
@ -1,10 +1,10 @@
|
|||
<?php
|
||||
/*
|
||||
*
|
||||
* OGP - Open Game Panel
|
||||
* Copyright (C) 2008 - 2018 The OGP Development Team
|
||||
* GSP - GameServer Panel
|
||||
* Copyright (C) 2008 - 2018 The GSP Development Team
|
||||
*
|
||||
*
|
||||
* http://www.opengamepanel.org/
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
|
|
@ -40,7 +40,7 @@ define('LANG_successfull', "Uspješno");
|
|||
define('LANG_click_here', "Kliknite ovdje");
|
||||
define('LANG_to_login', "za prijavu.");
|
||||
define('LANG_registered_on', "Registriran na %s.");
|
||||
define('LANG_register_message', "Poštovani,<br><br>Vaš Open Game Panel račun je uspješno kreiran i vi se sada <a href='%s' target='_blank'>možete prijaviti</a>.<br><br>Korisničko ime: %s<br><br>Ne zaboravite često mijenjati zaporku i prvi put kada se prijavite.<br><br>Molimo ne odgovarajte na ovaj email!<br><br>______________________________<br>OGP Pošta");
|
||||
define('LANG_register_message', "Poštovani,<br><br>Vaš GameServer Panel račun je uspješno kreiran i vi se sada <a href='%s' target='_blank'>možete prijaviti</a>.<br><br>Korisničko ime: %s<br><br>Ne zaboravite često mijenjati zaporku i prvi put kada se prijavite.<br><br>Molimo ne odgovarajte na ovaj email!<br><br>______________________________<br>GSP Pošta");
|
||||
define('LANG_err_captcha', "Captcha se ne podudara.");
|
||||
define('LANG_err_login_name', "Korisničko Ime je prazno ili zauzeto.");
|
||||
define('LANG_err_first_name', "Unesite vaše Ime");
|
||||
|
|
|
|||
|
|
@ -1,10 +1,10 @@
|
|||
<?php
|
||||
/*
|
||||
*
|
||||
* OGP - Open Game Panel
|
||||
* Copyright (C) 2008 - 2018 The OGP Development Team
|
||||
* GSP - GameServer Panel
|
||||
* Copyright (C) 2008 - 2018 The GSP Development Team
|
||||
*
|
||||
*
|
||||
* http://www.opengamepanel.org/
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
|
|
@ -27,9 +27,9 @@ define('LANG_configured_remote_hosts', "Konfigurirani Udaljeni Poslužitelj");
|
|||
define('LANG_remote_host', "Udaljeni Poslužitelj");
|
||||
define('LANG_remote_host_info', "Udaljeni poslužitelj mora imati odgovarajući naziv poslužitelja!");
|
||||
define('LANG_remote_host_port', "Port Udaljenog Poslužitelja");
|
||||
define('LANG_remote_host_port_info', "Port od strane OGP Agenta na udaljenom poslužitelju. Zadano:12679");
|
||||
define('LANG_remote_host_port_info', "Port od strane GSP Agenta na udaljenom poslužitelju. Zadano:12679");
|
||||
define('LANG_remote_host_name', "Naziv Udaljenog Poslužitelja");
|
||||
define('LANG_ogp_user', "Korisničko Ime OGP Agenta");
|
||||
define('LANG_gsp_user', "Korisničko Ime GSP Agenta");
|
||||
define('LANG_remote_host_name_info', "Naziv udaljenog poslužitelja koristi se za pomoć korisnicima da identificiraju svoje poslužitelje.");
|
||||
define('LANG_add_remote_host', "Dodajte Udaljeni Poslužitelj");
|
||||
define('LANG_remote_encryption_key', "Udaljeni Ključ za Enkripciju");
|
||||
|
|
@ -41,8 +41,8 @@ define('LANG_ips', "IP adrese");
|
|||
define('LANG_add_more_ips', "Ako želite unijeti više IP adresa, pritisnite 'Postaviti IPe' kada su sva polja puna i pojavit će se prazno polje.");
|
||||
define('LANG_encryption_key_mismatch', "Ključ za enkripciju ne podudara se sa Agentom. Molimo provjerite konfiguracije Agenta");
|
||||
define('LANG_no_ip_for_remote_host', "Morate dodati barem jednu (1) IP adresu za svaki udaljeni poslužitelj.");
|
||||
define('LANG_note_remote_host', "Udaljenj poslužitelj je server na kojem se pokreće Agent OGPa. Svaki poslužitelj može imati više IP adresa na kojima korisnici mogu vezati servere.");
|
||||
define('LANG_ip_administration', "Server & IP Administracija :: Open Game Panel");
|
||||
define('LANG_note_remote_host', "Udaljenj poslužitelj je server na kojem se pokreće Agent GSP-a. Svaki poslužitelj može imati više IP adresa na kojima korisnici mogu vezati servere.");
|
||||
define('LANG_ip_administration', "Server & IP Administracija :: GameServer Panel");
|
||||
define('LANG_unknown_error', "Nepoznata pogreška - status_chk odbijeno");
|
||||
define('LANG_remote_host_user_name', "UNIX korisnik");
|
||||
define('LANG_remote_host_user_name_info', "Korisničko Ime odakle je Agent pokrenut. Primjer: Ivan");
|
||||
|
|
@ -74,7 +74,7 @@ define('LANG_ips_set_for_server', "Uspješno su postavljeni IP adrese za posluž
|
|||
define('LANG_could_not_remove_ip', "Nije moguće ukloniti stare IP adrese od baze podataka.");
|
||||
define('LANG_could_add_ip', "Mogli bi dodati IP poslužitelja u bazu podataka.");
|
||||
define('LANG_areyousure_removeagent', "Jeste li sigurni da želite ukloniti Agent pod nazivom");
|
||||
define('LANG_areyousure_removeagent2', "i sve mape povezane s njim iz OGP baze podataka?");
|
||||
define('LANG_areyousure_removeagent2', "i sve mape povezane s njim iz GSP baze podataka?");
|
||||
define('LANG_error_while_remove', "Došlo je do pogreške prilikom uklanjanja udaljenog poslužitelja.");
|
||||
define('LANG_add_ip', "Dodati IP");
|
||||
define('LANG_remove_ip', "Ukloniti IP");
|
||||
|
|
|
|||
|
|
@ -1,10 +1,10 @@
|
|||
<?php
|
||||
/*
|
||||
*
|
||||
* OGP - Open Game Panel
|
||||
* Copyright (C) 2008 - 2018 The OGP Development Team
|
||||
* GSP - GameServer Panel
|
||||
* Copyright (C) 2008 - 2018 The GSP Development Team
|
||||
*
|
||||
*
|
||||
* http://www.opengamepanel.org/
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
|
|
@ -92,7 +92,7 @@ define('LANG_recaptcha_use_login_info', "Ako je omogućeno, korisnici će morati
|
|||
define('LANG_login_attempts_before_banned', "Broj neuspjelih pokušaja prijave prije nego što korisnik dobije zabranu");
|
||||
define('LANG_login_attempts_before_banned_info', "Ako se korisnik više puta pokuša prijaviti s nevažećim detaljima za prijavu, Panel će privremeno zabraniti korisnika.");
|
||||
define('LANG_custom_github_update_username', "Korisničko Ime za GitHub ažuriranje");
|
||||
define('LANG_custom_github_update_username_info', "Unesite GitHub korisničko ime SAMO za korištenje vlastitih repozitoriji za ažuriranje OGP-a. To bi trebalo mijenjati samo razvojni programeri koji žele koristiti vlastiti repozitorij za razvoj, umjesto da provjere eventualno pogrešan kod u glavnu granu.");
|
||||
define('LANG_custom_github_update_username_info', "Unesite GitHub korisničko ime SAMO za korištenje vlastitih repozitoriji za ažuriranje GSP-a. To bi trebalo mijenjati samo razvojni programeri koji žele koristiti vlastiti repozitorij za razvoj, umjesto da provjere eventualno pogrešan kod u glavnu granu.");
|
||||
define('LANG_remote_query', "Udaljeni upit");
|
||||
define('LANG_remote_query_info', "Upotrijebite udaljeni poslužitelj (agent) za upite na igre (samo GameQ i LGSL).");
|
||||
define('LANG_check_expiry_by', "Provjerite istek");
|
||||
|
|
@ -131,7 +131,7 @@ define('LANG_bg_wrapper_info', "Pozadinska slika wrappera. <b style='font-size:1
|
|||
define('LANG_show_server_id_game_monitor', "Prikaži ID servera na stranici Monitor igara");
|
||||
define('LANG_show_server_id_game_monitor_info', "Pokažite stupac ID servera na Monitor Igara za podudaranje datoteka stvorenih od strane Agenta na aktualnom serveru.");
|
||||
define('LANG_default_game_server_home_path_prefix', "Zadani prefiks Home direktorija za server");
|
||||
define('LANG_default_game_server_home_path_prefix_info', "Unesite prefiks putanja za mjesto na kojem želite da Home direktoriji servera budu izrađeni prema zadanim postavkama. Možete upotrebljavati \"{USERNAME}\" na putu koji će biti zamijenjen korisničkim imenom OGP-a kojem se dodjeljuje server. Možete koristiti \"{GAMEKEY}\" na putu koji će biti zamijenjen imenom sa malim slovima. Možete upotrebljavati \"{SKIPID}\" bilo gdje na putu da preskočite dodavanje Home ID-a na putnju. Primjer: /ogp/games/{USERNAME}/{GAMEKEY}{SKIPID} će postati /ogp/games/username/arkse/. Primjer 2: /ogp/games će postati /ogp/games/1 gdje je 1 ID servera.");
|
||||
define('LANG_default_game_server_home_path_prefix_info', "Unesite prefiks putanja za mjesto na kojem želite da Home direktoriji servera budu izrađeni prema zadanim postavkama. Možete upotrebljavati \"{USERNAME}\" na putu koji će biti zamijenjen korisničkim imenom GSP-a kojem se dodjeljuje server. Možete koristiti \"{GAMEKEY}\" na putu koji će biti zamijenjen imenom sa malim slovima. Možete upotrebljavati \"{SKIPID}\" bilo gdje na putu da preskočite dodavanje Home ID-a na putnju. Primjer: /gsp/games/{USERNAME}/{GAMEKEY}{SKIPID} će postati /gsp/games/username/arkse/. Primjer 2: /gsp/games će postati /gsp/games/1 gdje je 1 ID servera.");
|
||||
define('LANG_use_authorized_hosts', "Ograničite API na Definirane ovlaštene hostove");
|
||||
define('LANG_use_authorized_hosts_info', "Omogućite ovu postavku da biste dozvolili samo API pozive s unaprijed definiranih i odobrenih IP adresa. Odobrene adrese možete postaviti na ovoj stranici nakon što je postavka omogućena. Ako je ova postavka onemogućena, korisnik koji koristi važeći ključ imat će pristup API-ju s bilo koje IP adrese. Korisnici koji koriste valjani ključ moći će koristiti API za upravljanje bilo kojim poslužiteljem za igre koje imaju dozvole za administriranje.");
|
||||
define('LANG_setup_api_authorized_hosts', "Postavke API za autorizaciju poslužitelja");
|
||||
|
|
|
|||
|
|
@ -1,10 +1,10 @@
|
|||
<?php
|
||||
/*
|
||||
*
|
||||
* OGP - Open Game Panel
|
||||
* Copyright (C) 2008 - 2018 The OGP Development Team
|
||||
* GSP - GameServer Panel
|
||||
* Copyright (C) 2008 - 2018 The GSP Development Team
|
||||
*
|
||||
*
|
||||
* http://www.opengamepanel.org/
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
|
|
|
|||
|
|
@ -1,10 +1,10 @@
|
|||
<?php
|
||||
/*
|
||||
*
|
||||
* OGP - Open Game Panel
|
||||
* Copyright (C) 2008 - 2018 The OGP Development Team
|
||||
* GSP - GameServer Panel
|
||||
* Copyright (C) 2008 - 2018 The GSP Development Team
|
||||
*
|
||||
*
|
||||
* http://www.opengamepanel.org/
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
|
|
|
|||
|
|
@ -1,10 +1,10 @@
|
|||
<?php
|
||||
/*
|
||||
*
|
||||
* OGP - Open Game Panel
|
||||
* Copyright (C) 2008 - 2018 The OGP Development Team
|
||||
* GSP - GameServer Panel
|
||||
* Copyright (C) 2008 - 2018 The GSP Development Team
|
||||
*
|
||||
*
|
||||
* http://www.opengamepanel.org/
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
|
|
@ -21,54 +21,54 @@
|
|||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
*
|
||||
*/
|
||||
define('OGP_LANG_game', "Igra");
|
||||
define('OGP_LANG_select_mod', "Izaberite Mod");
|
||||
define('OGP_LANG_manual_workshop_mod_id', "Workshop mod ID Ručno");
|
||||
define('OGP_LANG_manual_workshop_mod_id_info', "Naći ćete mod id na URL modu, na primjer 1379153273 za ARK: Survival Evolved's Solar Panel. Možete instalirati više modova koji se razdvajaju od strane coma.");
|
||||
define('OGP_LANG_update_in_progress', "Ažuriranje u tijeku");
|
||||
define('OGP_LANG_refresh_steam_workshop_status', "Osjvežiti Steam Workshop status");
|
||||
define('OGP_LANG_update_completed', "Ažuriranje je dovršeno");
|
||||
define('OGP_LANG_mod_does_not_belong_to_workshop', "Mod %s ne pripada Workshopu");
|
||||
define('OGP_LANG_mod_installation_started', "Instalacija moda je započela");
|
||||
define('OGP_LANG_failed_to_start_steam_workshop', "Pokretanje Steam Workshop nije uspjelo");
|
||||
define('OGP_LANG_connection_error', "Greška u povezivanju");
|
||||
define('OGP_LANG_install_mod', "Instalirajte modove");
|
||||
define('OGP_LANG_show_mod_info', "Prikaži informacije o modovima");
|
||||
define('OGP_LANG_select_game', "Odaberite Igru");
|
||||
define('OGP_LANG_save_config', "Spremi konfiguraciju");
|
||||
define('OGP_LANG_mod_key_not_found_from_xml', "Mod ključ %s nije pronađen iz xml-a.");
|
||||
define('OGP_LANG_workshop_id', "Workshop ID");
|
||||
define('OGP_LANG_workshop_id_info', "ID Workshopa naći ćete u URL-u Workshopa , na primjer 440900 za Conan Exiles");
|
||||
define('OGP_LANG_mods_path', "Putanje modova");
|
||||
define('OGP_LANG_mods_path_info', "Realtivno putanje za mapu modova");
|
||||
define('OGP_LANG_regex', "Regex");
|
||||
define('OGP_LANG_regex_info', "Regularni izraz koji odgovara modima u konfiguracijskoj datoteci");
|
||||
define('OGP_LANG_mods_backreference_index', "Indeks povratnih informacija modova");
|
||||
define('OGP_LANG_mods_backreference_index_info', "Položaj povratnih informacija od dijela regexa koji odgovara popisu moda, počevši od 0.");
|
||||
define('OGP_LANG_variable', "Varijabla");
|
||||
define('OGP_LANG_variable_info', "Varijabla koja sadrži popis modova, ako ih ima.");
|
||||
define('OGP_LANG_place_after', "Mjesto nakon");
|
||||
define('OGP_LANG_place_after_info', "Dio konfiguracijske datoteke gdje se pojavljuje popis moda, ako ih ima. Bit će dodano konfiguracijskoj datoteci ako još ne postoji. Ako navedena varijabla nije prisutna, tada će biti stavljen u retku nakon ovog odjeljka.");
|
||||
define('OGP_LANG_mod_string', "Mod String");
|
||||
define('OGP_LANG_mod_string_info', "Niz koji predstavlja mod u modu popisa. Važeće zamjene:% workshop_mod_id%, %first_file% (prva datoteka je prva datoteka pronađena u mod mapi preuzeta od strane SteamCMD)");
|
||||
define('OGP_LANG_string_separator', "String razdvajanje");
|
||||
define('OGP_LANG_string_separator_info', "Karakter koji razdvaja modove u konfiguracijskoj datoteci, npr. Novi znak linije (\\ n) ili coma (,).");
|
||||
define('OGP_LANG_filepath', "Putanje datoteke");
|
||||
define('OGP_LANG_filepath_info', "Put konfiguracijske datoteke u kojoj moraju biti navedeni modovi.");
|
||||
define('OGP_LANG_post_install', "Postinstall Skripta");
|
||||
define('OGP_LANG_post_install_info', "Potrebne naredbe u bash za pomicanje moda u mapu mods. Važeća zamjena:% mods_full_path% (puni put do mape Wokshop mods),% workshop_mod_id%, %first_file% (prva datoteka prva je datoteka pronađena u mod preuzeta od strane SteamCMD)");
|
||||
define('OGP_LANG_install_mods', "Instalirati modove");
|
||||
define('OGP_LANG_uninstall_mods', "Deinstalirati modove");
|
||||
define('OGP_LANG_failed_uninstalling_mod', "Neuspješno deinstaliranje moda %s");
|
||||
define('OGP_LANG_uninstall', "Deinstalirati Skriptu");
|
||||
define('OGP_LANG_uninstall_info', "Ovo je skripta koja se zove kada je mod deinstaliran, Važeće zamjene:% mods_full_path% (puni put do mape wokshop mods),% mod_string% (mod string je naziv naveden u konfiguracijskoj datoteci za ovaj mod).");
|
||||
define('OGP_LANG_remove_mods', "Ukloniti Modove");
|
||||
define('OGP_LANG_do_not_close_this_page_while_mods_are_being_installed', "Nemojte zatvoriti ovu stranicu dok instalirate modove.");
|
||||
define('OGP_LANG_no_game_server_selected', "Nije odabrana nijedna igra");
|
||||
define('OGP_LANG_there_are_no_mods_installed_on_this_game_server', "Na ovoj igri nema instaliranih modova");
|
||||
define('OGP_LANG_workshop_configuration_not_found', "Workshop konfiguracija nije pronađena");
|
||||
define('OGP_LANG_download_method', "Preuzimanje Metode");
|
||||
define('OGP_LANG_anonymous_login', "Anonimna Prijava");
|
||||
define('OGP_LANG_select_at_least_one_mod_or_enter_mod_id', "Odaberite barem jedan mod ili unesite mod ID.");
|
||||
define('OGP_LANG_no_game_servers_assigned', "Nemate nijedan server dodijeljen vašem računu.");
|
||||
define('GSP_LANG_game', "Igra");
|
||||
define('GSP_LANG_select_mod', "Izaberite Mod");
|
||||
define('GSP_LANG_manual_workshop_mod_id', "Workshop mod ID Ručno");
|
||||
define('GSP_LANG_manual_workshop_mod_id_info', "Naći ćete mod id na URL modu, na primjer 1379153273 za ARK: Survival Evolved's Solar Panel. Možete instalirati više modova koji se razdvajaju od strane coma.");
|
||||
define('GSP_LANG_update_in_progress', "Ažuriranje u tijeku");
|
||||
define('GSP_LANG_refresh_steam_workshop_status', "Osjvežiti Steam Workshop status");
|
||||
define('GSP_LANG_update_completed', "Ažuriranje je dovršeno");
|
||||
define('GSP_LANG_mod_does_not_belong_to_workshop', "Mod %s ne pripada Workshopu");
|
||||
define('GSP_LANG_mod_installation_started', "Instalacija moda je započela");
|
||||
define('GSP_LANG_failed_to_start_steam_workshop', "Pokretanje Steam Workshop nije uspjelo");
|
||||
define('GSP_LANG_connection_error', "Greška u povezivanju");
|
||||
define('GSP_LANG_install_mod', "Instalirajte modove");
|
||||
define('GSP_LANG_show_mod_info', "Prikaži informacije o modovima");
|
||||
define('GSP_LANG_select_game', "Odaberite Igru");
|
||||
define('GSP_LANG_save_config', "Spremi konfiguraciju");
|
||||
define('GSP_LANG_mod_key_not_found_from_xml', "Mod ključ %s nije pronađen iz xml-a.");
|
||||
define('GSP_LANG_workshop_id', "Workshop ID");
|
||||
define('GSP_LANG_workshop_id_info', "ID Workshopa naći ćete u URL-u Workshopa , na primjer 440900 za Conan Exiles");
|
||||
define('GSP_LANG_mods_path', "Putanje modova");
|
||||
define('GSP_LANG_mods_path_info', "Realtivno putanje za mapu modova");
|
||||
define('GSP_LANG_regex', "Regex");
|
||||
define('GSP_LANG_regex_info', "Regularni izraz koji odgovara modima u konfiguracijskoj datoteci");
|
||||
define('GSP_LANG_mods_backreference_index', "Indeks povratnih informacija modova");
|
||||
define('GSP_LANG_mods_backreference_index_info', "Položaj povratnih informacija od dijela regexa koji odgovara popisu moda, počevši od 0.");
|
||||
define('GSP_LANG_variable', "Varijabla");
|
||||
define('GSP_LANG_variable_info', "Varijabla koja sadrži popis modova, ako ih ima.");
|
||||
define('GSP_LANG_place_after', "Mjesto nakon");
|
||||
define('GSP_LANG_place_after_info', "Dio konfiguracijske datoteke gdje se pojavljuje popis moda, ako ih ima. Bit će dodano konfiguracijskoj datoteci ako još ne postoji. Ako navedena varijabla nije prisutna, tada će biti stavljen u retku nakon ovog odjeljka.");
|
||||
define('GSP_LANG_mod_string', "Mod String");
|
||||
define('GSP_LANG_mod_string_info', "Niz koji predstavlja mod u modu popisa. Važeće zamjene:% workshop_mod_id%, %first_file% (prva datoteka je prva datoteka pronađena u mod mapi preuzeta od strane SteamCMD)");
|
||||
define('GSP_LANG_string_separator', "String razdvajanje");
|
||||
define('GSP_LANG_string_separator_info', "Karakter koji razdvaja modove u konfiguracijskoj datoteci, npr. Novi znak linije (\\ n) ili coma (,).");
|
||||
define('GSP_LANG_filepath', "Putanje datoteke");
|
||||
define('GSP_LANG_filepath_info', "Put konfiguracijske datoteke u kojoj moraju biti navedeni modovi.");
|
||||
define('GSP_LANG_post_install', "Postinstall Skripta");
|
||||
define('GSP_LANG_post_install_info', "Potrebne naredbe u bash za pomicanje moda u mapu mods. Važeća zamjena:% mods_full_path% (puni put do mape Wokshop mods),% workshop_mod_id%, %first_file% (prva datoteka prva je datoteka pronađena u mod preuzeta od strane SteamCMD)");
|
||||
define('GSP_LANG_install_mods', "Instalirati modove");
|
||||
define('GSP_LANG_uninstall_mods', "Deinstalirati modove");
|
||||
define('GSP_LANG_failed_uninstalling_mod', "Neuspješno deinstaliranje moda %s");
|
||||
define('GSP_LANG_uninstall', "Deinstalirati Skriptu");
|
||||
define('GSP_LANG_uninstall_info', "Ovo je skripta koja se zove kada je mod deinstaliran, Važeće zamjene:% mods_full_path% (puni put do mape wokshop mods),% mod_string% (mod string je naziv naveden u konfiguracijskoj datoteci za ovaj mod).");
|
||||
define('GSP_LANG_remove_mods', "Ukloniti Modove");
|
||||
define('GSP_LANG_do_not_close_this_page_while_mods_are_being_installed', "Nemojte zatvoriti ovu stranicu dok instalirate modove.");
|
||||
define('GSP_LANG_no_game_server_selected', "Nije odabrana nijedna igra");
|
||||
define('GSP_LANG_there_are_no_mods_installed_on_this_game_server', "Na ovoj igri nema instaliranih modova");
|
||||
define('GSP_LANG_workshop_configuration_not_found', "Workshop konfiguracija nije pronađena");
|
||||
define('GSP_LANG_download_method', "Preuzimanje Metode");
|
||||
define('GSP_LANG_anonymous_login', "Anonimna Prijava");
|
||||
define('GSP_LANG_select_at_least_one_mod_or_enter_mod_id', "Odaberite barem jedan mod ili unesite mod ID.");
|
||||
define('GSP_LANG_no_game_servers_assigned', "Nemate nijedan server dodijeljen vašem računu.");
|
||||
?>
|
||||
|
|
@ -1,10 +1,10 @@
|
|||
<?php
|
||||
/*
|
||||
*
|
||||
* OGP - Open Game Panel
|
||||
* Copyright (C) 2008 - 2018 The OGP Development Team
|
||||
* GSP - GameServer Panel
|
||||
* Copyright (C) 2008 - 2018 The GSP Development Team
|
||||
*
|
||||
*
|
||||
* http://www.opengamepanel.org/
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
|
|
@ -36,7 +36,7 @@ define('LANG_successfull', "Uspješno");
|
|||
define('LANG_click_here', "Kliknite Ovdje");
|
||||
define('LANG_to_login', "za prijavu");
|
||||
define('LANG_registered_on', "Registriran");
|
||||
define('LANG_register_message', "Poštovani,<br><br> Vaš Open Game Panel račun je uspješno kreiran i za prijavu unesite Vaše podatke:<br><br>Korisničko Ime: %s<br>Lozinka: %s<br><br>Ne zaboravite često mijenjati lozinku nakon vaše prve prijave.<br><br>Molimo ne odgovarajte na ovu e-poštu!<br><br>______________________________<br>Black Market Servers");
|
||||
define('LANG_register_message', "Poštovani,<br><br> Vaš GameServer Panel račun je uspješno kreiran i za prijavu unesite Vaše podatke:<br><br>Korisničko Ime: %s<br>Lozinka: %s<br><br>Ne zaboravite često mijenjati lozinku nakon vaše prve prijave.<br><br>Molimo ne odgovarajte na ovu e-poštu!<br><br>______________________________<br>Black Market Servers");
|
||||
define('LANG_err_password', "Lozinka ne može biti prazna");
|
||||
define('LANG_err_confirm_password', "Polje za provjeru lozinke ne može biti prazno");
|
||||
define('LANG_err_password_mismatch', "Lozinke se ne podudaraju");
|
||||
|
|
|
|||
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue