SkyWall CMS
A modern, secure, and multi-core World of Warcraft CMS built for private server operators.
Enterprise Security
28 security fixes including CSRF, XSS, SQL injection, and command injection prevention.
Multi-Core Support
AzerothCore, TrinityCore, cMaNGOS, and VMaNGOS with automatic detection.
Template System
Custom themes with live Monaco editor, no file editing required.
Performance
File-based caching, optimized queries, and lazy-loaded assets.
Modular Design
Shop, Forum, Armory, Vote, Bugtracker, and more out of the box.
Responsive
Beautiful dark theme that works on desktop, tablet, and mobile.
Requirements
| PHP | 7.4 or higher with PDO, pdo_mysql, OpenSSL, and cURL extensions (SOAP required for shop delivery) |
| Web Server | Apache with mod_rewrite (recommended) or Nginx |
| Database | MySQL 5.7+ or MariaDB 10.3+ |
| WoW Server | AzerothCore, TrinityCore, cMaNGOS, or VMaNGOS |
| SOAP | Enabled on worldserver for shop delivery |
Installation
SkyWall CMS features a guided installer that handles database setup, configuration, and core detection automatically.
Upload Files
Upload all CMS files to your web server's document root (e.g., /var/www/html or public_html).
Set Permissions
Ensure the following directories are writable by the web server:
chmod 775 cache/ logs/ templates/
Run the Installer
Navigate to https://yourdomain.com/install.php in your browser.
Configure Server Settings
Enter your realm name, SOAP credentials, and server status settings. The installer auto-detects your WoW core (AzerothCore, TrinityCore, cMaNGOS, or VMaNGOS).
Complete Setup
After installation, delete install.php from the server (or restrict access to it) — it is no longer needed. Visit your site and log in with an account that has GM Level 3+ to access the admin panel.
Nginx Configuration
Recommended Nginx config for clean URLs, security, and the dynamic robots.txt/sitemap.xml:
server {
listen 80;
server_name yourdomain.com;
root /var/www/html;
index index.php;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
# Dynamic robots.txt and sitemap.xml
location = /robots.txt { rewrite ^ /core/seo/robots.php last; }
location = /sitemap.xml { rewrite ^ /core/seo/sitemap.php last; }
location ~ \.php$ {
fastcgi_pass unix:/run/php/php8.1-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
# Block sensitive files and directories
location ~ /\.(env|git|htaccess) { deny all; }
location ~ \.sql$ { deny all; }
location ~ ^/(cache|logs|vendor|node_modules|dist|app)/ { deny all; }
location ~ ^/(core|modules|templates)/.*\.php$ { deny all; }
}
Apache Configuration
SkyWall includes a .htaccess file with rewrite rules. Ensure mod_rewrite is enabled:
a2enmod rewrite
systemctl restart apache2
Configuration
All settings are stored in the .env file at the project root. The installer generates this file automatically. You can edit it directly or use the Admin Panel settings pages.
Core Type
CORE_TYPE=azerothcore # azerothcore, trinitycore, cmangos, vmangos
Database Settings
DB_HOST=127.0.0.1
DB_USERNAME=root
DB_PASSWORD=your_password
DB_AUTH=acore_auth
DB_CHA=acore_characters
DB_WORLD=acore_world
DB_CMS=skywall_cms
SOAP Settings
SOAP_IP=127.0.0.1
SOAP_PORT=7878
SOAP_USER=gamemaster
SOAP_PASS=your_password
GM Levels
GM levels are defined as PHP constants in core/GmLevels.php (they are not .env values):
GM_LEVEL_PLAYER = 0
GM_LEVEL_VIP = 1
GM_LEVEL_MODERATOR = 2
GM_LEVEL_ADMIN = 3
GM_LEVEL_CONSOLE = 4
.env, clear the cache from Admin Panel to apply new settings.
Developer Build (Compiling Tailwind CSS)
SkyWall is distributed in two forms. This section explains the difference and how to rebuild the frontend stylesheet if you are a developer.
Distribution Types
| Package | Contents |
|---|---|
| Standard ZIP | Ready-to-run. Includes the compiled tailwind.css and all runtime files. No build step required. |
| Developer ZIP (optional) | Same as Standard, plus the build tooling needed to recompile the Tailwind CSS: package.json, tailwind.config.js, and the input stylesheet. |
Requirements
To compile the stylesheet yourself you need Node.js (LTS) with npm installed on your machine.
Files Involved
package.json # build scripts + tailwindcss dependency
tailwind.config.js # Tailwind config (theme colors, fonts, content paths)
templates/skywall/assets/css/tailwind-input.css # input file (@tailwind directives)
templates/skywall/assets/css/tailwind.css # compiled output (generated)
Building
Install Dependencies
npm install
Compile (production, minified)
npm run css:build
Generates templates/skywall/assets/css/tailwind.css.
Watch Mode (development)
npm run css:watch
Automatically rebuilds whenever a .php or .js file changes.
Customizing the Theme
Edit tailwind.config.js to change the brand palette and fonts:
module.exports = {
content: [
'./modules/**/*.php',
'./templates/**/*.php',
'./core/**/*.php',
'./index.php',
'./install.php',
'./core/migrate.php',
'./Router.php',
'./assets/js/**/*.js',
],
theme: {
extend: {
colors: {
'sky-gold': { DEFAULT: '#FF7E02', light: '#FFC010', deep: '#CC6502' },
'sky-void': '#07090F',
},
// ...
},
},
};
SEO, Robots.txt & Sitemap
robots.txt and sitemap.xml are generated dynamically — there are no static files to edit. The domain is detected automatically from the current request, so each installation serves its own URLs without any manual configuration.
How it works
The files are served by two small PHP scripts located in core/seo/:
core/seo/robots.php # outputs robots.txt
core/seo/sitemap.php # outputs sitemap.xml
The .htaccess rewrites the public URLs to these scripts:
RewriteRule ^robots\.txt$ core/seo/robots.php [L]
RewriteRule ^sitemap\.xml$ core/seo/sitemap.php [L]
Nginx
On Nginx (which ignores .htaccess), add the equivalent rules to your server { } block:
location = /robots.txt { rewrite ^ /core/seo/robots.php last; }
location = /sitemap.xml { rewrite ^ /core/seo/sitemap.php last; }
Admin Panel
The Admin Panel is accessible at ?page=admin and requires GM Level 3+ (configurable via GM_LEVEL_ADMIN). The sidebar is organized with 5 fixed core items at the top, followed by sortable module items.
Access Requirements
Your account must have GM Level 3+ in the account_access table. Changes take effect after logout and re-login.
Sidebar Structure
| # | Item | Sortable |
|---|---|---|
| 1 | Dashboard | Fixed |
| 2 | News | Fixed |
| 3 | Site Layout | Fixed |
| 4 | Users | Fixed |
| 5 | Modules | Fixed |
| 6+ | Shop, Vote, Forum, Bugtracker, Audit Log, Settings, etc. | Sortable |
Dashboard
The dashboard provides a real-time overview of your server and CMS activity.
Server Status
Online/offline status, player count, and uptime for auth and world servers.
Recent Purchases
Last 5 shop purchases with status (delivered/pending/failed).
Recent Registrations
Newest accounts with registration date and email.
Forum Activity
Recent forum posts and thread counts.
Shop Management
The shop system allows players to purchase items, gold, services, and more using in-site currency or real money integration.
Adding Shop Items
Navigate to Admin Panel → Shop Items → Add Item and fill in:
| Name | Display name shown to players |
| Command | SOAP command with {player} placeholder |
| Icon | FontAwesome icon class (e.g., fas fa-coins) |
| Price | Cost in donation points or currency |
| Category | Grouping: Items, Services, Gold, Mounts, etc. |
| Rarity | Visual border color: Common, Uncommon, Rare, Epic, Legendary |
| Limit | Max purchases per account (0 = unlimited) |
| Active | Toggle visibility in the shop |
Shop Activity Log
View all purchases with timestamps, buyer info, item details, and delivery status. Failed deliveries show SOAP error messages for debugging.
Donation Management
Manage donation packages, transactions and payment gateways from Admin Panel → Donations.
Packages
Create packages with a name, price, DP amount and optional bonus. For example: Supporter Pack — €10 → 1100 DP (100 bonus). The currency is global and set in Settings.
Settings
| Mode | Manual, Automatic, or Both |
| Currency | EUR, USD, GBP and more (used for packages and payments) |
| DP rate | DP awarded per 1 currency unit for custom amounts |
| Stripe keys | Secret, publishable and webhook signing secret |
| PayPal keys | Client ID, secret and webhook ID (sandbox toggle available) |
| Crypto addresses | Add one or more coin + address pairs (shown to players) |
| Notifications | Discord/Slack webhook for new manual requests |
Transactions
The transactions log lists every donation with user, package, amount, DP, gateway, reference code and proof. Manual requests (manual_pending) show Approve and Reject buttons — approving credits the DP, rejecting records an optional note shown to the player.
User Management
Manage player accounts, GM levels, bans, and character data directly from the admin panel.
Account Management
- View all registered accounts with email, registration date, and last login
- Edit GM levels via
account_access - Ban/unban accounts by username or IP
- Reset passwords (SRP6 re-encrypted automatically)
Character Management
- Search characters by name
- View character details: level, race, class, guild, location
- Transfer characters between accounts
- Rename characters
Content Management
News
Publish news articles with a rich-text editor (HTML sanitized). Articles appear on the public archive (?page=news) and in the homepage news section.
Site Layout
Manage the homepage sections (hero slider, promos, news, etc.), the navigation menu, hero buttons, and social links. Sections can be enabled/disabled and reordered via drag-and-drop.
Hero Slider Editor
The hero slider content is fully editable from Site Layout → Hero Slider: titles, subtitles and descriptions for guests and members, the background image (template path or full URL), and the Discord / register button labels. It's stored in the settings table and falls back to sensible defaults when empty.
Cache Management
SkyWall uses file-based caching for shop items, server status, and other frequently accessed data.
Clear Cache
Admin Panel → Cache Management → Clear Cache. This removes all cached files in cache/. Data will be re-cached on next request.
.htaccess file in the cache directory. It prevents direct web access to cached files.
Template System
SkyWall v3.0.0 introduces a powerful template system that allows you to create, customize, and switch themes without modifying core files.
How It Works
Each template lives in templates/{template_id}/ and contains its own views, assets, and configuration. The active template is set in Admin Panel → Settings.
Isolated Structure
Each template has its own views/ and assets/ directory.
Live Editor
Edit template files in-browser with Monaco Editor (VS Code engine).
Instant Switching
Change the active template from settings with one click.
Safe Updates
Core updates won't overwrite your custom templates.
Live Template Editor
The Template Editor provides a VS Code-like editing experience directly in your browser, powered by Monaco Editor.
Features
- Syntax highlighting for PHP, HTML, CSS, and JavaScript
- File browser sidebar with tree view of template files
- Auto-save with manual save button
- Preview button to see changes in a new tab
- Error detection with inline diagnostics
Accessing the Editor
Admin Panel → Modules → Template Editor. Select the active template and browse files in the left panel.
Template Asset Helper
Use template_asset() in your templates to reference assets from the active template directory:
// In template PHP files:
<img src="= template_asset('img/logo.png') ?>">
<link href="= template_asset('css/custom.css') ?>" rel="stylesheet">
This resolves to templates/{active}/assets/img/logo.png automatically.
Template Structure
Each template follows a consistent directory structure:
templates/
skywall/
template.php
views/
index.php
header.php
footer.php
login.php
register.php
shop.php
...
assets/
img/
logo.png
bg.jpg
css/
custom.css
js/
custom.js
template.php
Every template must have a template.php file that returns metadata:
<?php
return [
'name' => 'SkyWall Default',
'author' => 'SkyWall Team',
'version' => '3.0.0',
'description' => 'Default dark theme with gold accents',
];
Creating Custom Templates
Create Template Directory
Create a new folder in templates/ with a unique ID (lowercase, no spaces):
mkdir templates/mytheme
Add template.php
Create templates/mytheme/template.php with the metadata array shown above.
Create Required Views
Copy the default template's views/ folder as a starting point, then customize:
cp -r templates/skywall/views/ templates/mytheme/views/
Add Assets
Create templates/mytheme/assets/ with img/, css/, and js/ subdirectories.
Activate Template
Go to Admin Panel → Settings → Appearance and select your new template from the dropdown.
Module Overview
SkyWall is built with a modular architecture. Each module is self-contained with its own controllers, views, and routes.
| Module | Route | Description |
|---|---|---|
| Home | ?page=home | Homepage with slides, news, and server status |
| Auth | ?page=login | Login, registration, password recovery |
| Shop | ?page=shop | Item shop with categories and cart |
| Donations | ?page=donate | Donation packages with Stripe/PayPal/crypto |
| Forum | ?page=forum | Community forum with categories and reactions |
| News | ?page=news | Public news archive with full-article reading |
| Armory | ?page=armory | Character lookup by name or GUID |
| Rankings | ?page=rankings | Leaderboards (level, honor, kills, playtime) |
| Live Map | ?page=map | Live world map of online players |
| Vote | ?page=vote | Vote for rewards with callback support |
| Account Level | ?page=account_level | Progression ranks and shareable badges |
| Bugtracker | ?page=bugtracker | Report and track bugs |
| Status | ?page=status | Server status JSON API |
| Admin | ?page=admin | Administration panel (GM 3+) |
Shop Module
The shop is the core revenue module. Players browse items, add to cart, and purchase with points or real currency.
Features
- Category filtering and search
- Rarity-based visual styling (Common to Legendary)
- Purchase limits per account
- Automatic SOAP delivery on purchase
- Activity log with delivery status tracking
- Rate limiting (10 purchases/hour)
Cart & Checkout
Players can add multiple items to their cart. At checkout, the system processes each item sequentially via SOAP commands. If any delivery fails, the error is logged and visible in the admin activity log.
Donation Module
Let players support the server by buying Donation Points (DP) — a second currency alongside Vote Points (VP) — which they can then spend in the shop.
How it works
- You create packages (e.g. 500 DP for €5, or 1100 DP for €10 with a 100 DP bonus).
- The player picks a package on
?page=donateand chooses a payment method. - In automatic mode, the payment is handled by Stripe or PayPal and DP are credited instantly via webhook.
- In manual mode, the player sends the payment with a reference code, then submits a proof. An admin approves it and credits the DP.
Modes
| Manual only | Player pays via any method (crypto, bank transfer, PayPal manual), submits proof, admin approves. No API keys required. |
| Automatic only | Stripe Checkout and/or PayPal, credited instantly after webhook confirmation. |
| Both | Players choose between instant card/PayPal payment or manual verification. |
Payment gateways
- Stripe — Checkout Sessions with HMAC webhook signature verification and replay protection (5-minute window).
- PayPal — Orders API v2 with server-side order verification and optional webhook signature validation.
- Manual / Crypto — list your wallet addresses (BTC, ETH, …), players send a payment with a unique reference code and submit proof for review.
Webhooks
Configure these endpoints in your Stripe / PayPal dashboard:
Stripe: https://yoursite.com/index.php?page=api/donate/webhook&gateway=stripe (event: checkout.session.completed, charge.refunded)
PayPal: https://yoursite.com/index.php?page=api/donate/webhook&gateway=paypal (event: CHECKOUT.ORDER.APPROVED, PAYMENT.CAPTURE.COMPLETED, PAYMENT.CAPTURE.REFUNDED)
Security
- Idempotent crediting — a transaction can never be credited twice, even on webhook retries.
- Refunds (Stripe
charge.refunded, PayPalPAYMENT.CAPTURE.REFUNDED) automatically reverse the DP if still available. - Stripe signature (HMAC) and PayPal signature verification, plus server-side order re-checking.
- Optional Discord/Slack notification whenever a manual donation awaits review.
Forum Module
A lightweight community forum with categories, threads, posts, and reactions.
Features
- Category-based organization with icons and permissions
- Thread creation with rich text (HTML sanitized)
- Post reactions (AJAX-powered, no page reload)
- Pinned and locked threads
- Rate limiting (5 posts/hour)
- Math CAPTCHA for guests
News Module
A public news archive (?page=news) that lists every published article in a card grid, with a full-article reading modal. The homepage keeps a shorter "Latest News" teaser.
Where articles live
- Admin — write, edit, publish and delete articles (rich text, HTML sanitized, optional header image).
- Public archive —
?page=newsshows all articles, newest first. - Homepage teaser — the "Latest News" section (a carousel) is enabled/disabled from Site Layout → Page Sections.
The News module is self-contained: its admin controller, admin views (views/admin/), public archive and homepage section all live under modules/news/. Disabling the module removes the news archive, the homepage news section and the News menu item automatically.
Armory Module
A standalone character armory with a search page. Players can look up any character by name and view their full profile.
How it works
- Open
?page=armoryand search by character name - Or link directly:
?page=armory&name=Styloor?page=armory&guid=5
Features
- Character sheet: level, race, class, guild, health, resources, gold
- Equipment slots with real item icons and item-level average
- Base stats (strength, agility, stamina, intellect, spirit), armor, crit
- Talent tree distribution with spec detection
- Achievements with real names and icons (from Wowhead)
- PvP stats: arena ratings, honor kills
- Professions with progress bars
- Multi-core compatible (queries adapt to core schema)
Rankings Module
Player leaderboards driven by direct queries to the characters database, cached for 60 seconds.
Leaderboards
- World Legends — top by level and XP
- Honored Heroes — top by honor points
- Elite Killers — top by confirmed kills
- Most Dedicated — top by playtime
Hardcore Rankings
When the hardcore module is installed (hc_dead_log table present), two extra sections appear:
- HC Longevity — the highest-level hardcore characters (all-time)
- Hall of Fame (RIP) — fallen heroes with their killer
Character cards are clickable and open the armory. Rankings are automatically hidden from the profile when the module is disabled.
Live Map Module
A live world map showing online players on Azeroth, Outland and Northrend, refreshed every 30 seconds.
How it works
- Open
?page=mapand switch between the Azeroth / Outland / Northrend tabs. - Players are shown as colored dots — blue for Alliance, red for Horde.
- Hover a dot to see the player name, level and zone; click it to open their armory.
Data source
Players are read from the characters table (online = 1) with their map, zone and coordinates. Coordinates are mapped to pixels using the standard WotLK world-map bounds. Results are cached for 30 seconds to limit database load.
Map images
The three continent maps live in modules/livemap/assets/img/map/ (azeroth.jpg, outland.jpg, northrend.jpg — 966×732 px). Placeholder images are shipped by default; replace them with real map images extracted from the WoW client.
Vote System
Reward players for voting on top-listing sites. Supports multiple vote sites with callback verification.
Configuration
Add vote sites in Admin Panel with:
- Site name and URL
- Callback URL (provided by the voting site)
- Secret key for callback verification
- Reward command (SOAP command to execute on vote)
Vote Callback API
The callback endpoint at ?page=api/vote/callback accepts a GET request with the following query parameters:
?user_id=123&site_id=1&secret=your_secret_key
Returns JSON {"success": true, "message": "Vote successful"} or {"success": false, "message": "reason"}.
Account Level System
Reward player progression across all characters with 30 account-wide levels.
Features
- XP calculated from all characters (up to 12) using WotLK 3.3.5a XP table
- 30 levels with progressive XP thresholds and rank titles
- Tier system: gray, white, green, blue, purple, orange, legendary, mythic
- Shareable badges with unique 8-character codes and public URLs
- Character visibility toggle and XP details toggle
- Badges displayed in forum posts
Bugtracker Module
Allow players to report bugs and track their resolution status.
Features
- Submit bug reports with title, description, and severity
- Status tracking: Open, In Progress, Resolved, Closed
- Admin can update status and add comments
- Rate limiting (10 reports/day)
Status Module
A lightweight JSON endpoint that reports the live server state. Point any external status page, Discord bot or monitoring tool at it.
Endpoint
GET /index.php?page=status
Returns a normalized JSON object, cached for 30 seconds, with a stale-cache fallback (5 minutes) and a TCP socket check as a last resort.
{
"online": 42,
"status": "online",
"uptime": 10858,
"timestamp": 1788729931,
"fallback": false,
"stale": false
}
online— current player count (from the characters DB)status—online/offlineuptime— seconds since last restart (authuptimetable)fallback— true when the result came from the socket checkstale— true when the result came from the stale cache
SOAP Command Reference
Shop items use SOAP commands to deliver rewards. Use the {player} placeholder which is replaced with the buyer's character name at purchase time.
Send Single Item
.send mail {player} "Subject" "Body" itemId
Example: .send mail {player} "Purchase" "Enjoy!" 49284
Send Gold via Mail
.send money {player} "Subject" "Body" copper_amount
1 Gold = 10,000 copper. Example: .send money {player} "Shop" "Gold!" 100000000 = 10,000g
Set Character Level
.character level {player} #level
Example: .character level {player} 80
Send Mail (Text Only)
.send mail {player} "Subject" "Body text"
Send Multiple Items
.send items {player} "Subject" "Body" id1:count1 id2:count2
Example: .send items {player} "Bundle" "Here!" 49284:1 49623:5
Add Title
.title add {player} #titleId
Example: .title add {player} 123
{player} placeholder is replaced with the buyer's character name at purchase time. Character names are sanitized to alphabetic characters only for command injection prevention. All SOAP commands must start with a dot (.).
Security Features
SkyWall v3.0.0 includes 28 security fixes and enterprise-grade protection.
| Feature | Description |
|---|---|
| CSRF Tokens | All POST requests enforced globally via Router middleware |
| Rate Limiting | Login (5/5min), Register (3/h), Email change (5/h), Shop purchase (10/h), Forum (5–10/5min), Bugtracker comments (20/5min) |
| Session Manager | Centralized with HttpOnly, SameSite=Strict, Secure flags, and session regeneration |
| IP Spoofing Prevention | Only trusts forwarded headers behind known CDN/proxy IPs |
| .env Protection | PHP exit tag prevents direct access on Nginx/PHP-FPM |
| SRP6 Encryption | WoW-standard password hashing (binary + hex format support) |
| SQL Injection Prevention | PDO prepared statements on every query |
| XSS Protection | Output encoding + HTML sanitizer with whitelist |
| Secure Error Handling | Generic error messages in production, detailed logs only |
| Command Injection Prevention | Character names sanitized to alpha-only, commands must start with . |
| Math CAPTCHA | Context-based bot protection (no third-party dependency) |
| Directory Protection | .htaccess blocks direct access to internal PHP files (core/, modules/, templates/), SQL schema files, and sensitive directories (vendor/, cache/, logs/) |
| GM Level Constants | Named constants replace magic numbers for access control |
| Audit Trail | All admin actions logged with user, IP, and details |
API Endpoints
| Endpoint | Method | Description |
|---|---|---|
?page=status |
GET | Server status JSON (online, players, uptime) |
?page=api/vote/callback |
POST | Vote callback verification with secret auth |
?page=badge&code=XXXXXXXX |
GET | Public account level badge image |
?page=forum_react |
POST | Forum post reaction toggle (AJAX) |
?page=admin_menu_sort |
POST | Menu item reordering (AJAX) |
?page=admin_sidebar_sort |
POST | Admin sidebar reordering (AJAX) |
?page=admin_migrate_run |
POST | Run database migrations (AJAX) |
?page=admin_template_editor_get_file |
POST | Get template file content (AJAX) |
?page=admin_template_editor_save_file |
POST | Save template file content (AJAX) |
FAQ
How do I change the logo?
templates/{active}/assets/img/logo.png with your own file. Keep similar dimensions for best results. You can also upload a new logo via the Live Template Editor.
"Access Denied" on Admin Panel?
GM_LEVEL_ADMIN) in account_access. Logout and login again for session updates.
Shop items not delivering?
- Check SOAP settings in
.env(IP, port, user, pass) - Make sure SOAP is enabled in
worldserver.conf(SOAP.Enabled = 1) - Make sure the SOAP account has GM level 3+ in
account_access - Test the command manually in-game: e.g.
.send items Playername "Test" "Test" 49284:1 - Check Shop Activity in admin panel for error details
How do I add a shop item?
{player} placeholder), icon, price, category, and rarity. See the SOAP Command Reference for command examples.
How do I find WoW item IDs?
wowhead.com/wotlk/item=49284. For icons, the icon name is shown on the item page (e.g. ability_mount_spectraltiger).
Which WoW cores are supported?
Do I need to delete install.php?
.env is created, delete install.php from the server (or restrict access to it) to prevent the setup from being run again.
How do I clear the cache?
cache/ directory (except .htaccess). Shop items will be re-cached on the next request.
How do I create a custom template?
templates/ with a template.php metadata file, views/ directory, and assets/ directory. See the Creating Templates section for a step-by-step guide.
Can I reorder the admin sidebar?
Troubleshooting
Blank White Page
Enable error reporting temporarily by adding to .env:
APP_DEBUG=true
Check logs/app.log for PHP errors. Common causes: missing PHP extensions, incorrect file permissions, or syntax errors in templates.
SOAP Connection Refused
Verify:
SOAP.Enabled = 1inworldserver.conf- SOAP port matches (default: 7878)
- SOAP account exists with correct credentials
- Firewall allows connections to the SOAP port
Database Connection Failed
Check .env values for DB_HOST, DB_USERNAME, DB_PASSWORD, DB_AUTH, DB_CHA, DB_WORLD, and DB_CMS. Test the connection manually:
mysql -h 127.0.0.1 -P 3306 -u root -p
CSRF Token Mismatch
This usually means your session expired. Refresh the page and try again. If persistent, clear your browser cookies and re-login.
Template Not Loading
Verify the active template name in Admin Panel → Settings matches a folder in templates/. Ensure template.php exists in the template directory and returns a valid array.
logs/ directory for detailed error logs. Enable APP_DEBUG=true in .env for development environments.
© 2026 SkyWall CMS. All rights reserved.
Documentation v3.3.0 — • Performance optimized • Multi-core support