mirror of
https://github.com/slawkens/myaac.git
synced 2025-09-14 20:43:34 +02:00
Compare commits
38 Commits
feature/do
...
v1.0.1
Author | SHA1 | Date | |
---|---|---|---|
![]() |
b5b2e3fd78 | ||
![]() |
030d15f0cd | ||
![]() |
b6b7592226 | ||
![]() |
fb10741a02 | ||
![]() |
5e9c868dfa | ||
![]() |
0904b1bb87 | ||
![]() |
faa60f5e9a | ||
![]() |
620e0f62e4 | ||
![]() |
2ae2ec3353 | ||
![]() |
b323d9cee1 | ||
![]() |
4f1d1d8043 | ||
![]() |
8e5a3afc6e | ||
![]() |
a7311301e2 | ||
![]() |
ac10236154 | ||
![]() |
dc95bc4bad | ||
![]() |
0dc7da472f | ||
![]() |
43421e56ea | ||
![]() |
544d006b6f | ||
![]() |
085ebbcfde | ||
![]() |
77a2c1cec3 | ||
![]() |
e918591666 | ||
![]() |
175c2a1f89 | ||
![]() |
3b5be1a8db | ||
![]() |
c769962e39 | ||
![]() |
35dfaa28ed | ||
![]() |
8e501c0e9c | ||
![]() |
c52ca27126 | ||
![]() |
41a3cb6f42 | ||
![]() |
eb4b3ada49 | ||
![]() |
68bdec7c18 | ||
![]() |
8a612429b2 | ||
![]() |
16671ea40b | ||
![]() |
8fb643596f | ||
![]() |
c2b7286d20 | ||
![]() |
d6c40c836a | ||
![]() |
99262c3ebd | ||
![]() |
b8396d4c84 | ||
![]() |
b0c8cf2ecd |
@@ -1,65 +0,0 @@
|
|||||||
Thumbs.db
|
|
||||||
.DS_Store
|
|
||||||
.idea
|
|
||||||
|
|
||||||
#
|
|
||||||
/.htaccess
|
|
||||||
|
|
||||||
# composer
|
|
||||||
composer.phar
|
|
||||||
vendor
|
|
||||||
|
|
||||||
# npm
|
|
||||||
node_modules
|
|
||||||
tools/ext
|
|
||||||
|
|
||||||
# cypress
|
|
||||||
cypress.env.json
|
|
||||||
cypress/e2e/2-advanced-examples
|
|
||||||
cypress/screenshots
|
|
||||||
|
|
||||||
# created by release.sh
|
|
||||||
releases
|
|
||||||
tmp
|
|
||||||
|
|
||||||
config.local.php
|
|
||||||
!docker/config.local.php
|
|
||||||
|
|
||||||
# all custom templates
|
|
||||||
templates/*
|
|
||||||
!templates/tibiacom
|
|
||||||
!templates/kathrine
|
|
||||||
|
|
||||||
# guild images
|
|
||||||
images/guilds/*
|
|
||||||
!images/guilds/default.gif
|
|
||||||
|
|
||||||
# editor images
|
|
||||||
images/editor/*
|
|
||||||
!images/editor/index.html
|
|
||||||
|
|
||||||
# gallery images
|
|
||||||
images/gallery/*
|
|
||||||
!images/gallery/index.html
|
|
||||||
!images/gallery/demon.jpg
|
|
||||||
!images/gallery/demon_thumb.gif
|
|
||||||
|
|
||||||
# cache
|
|
||||||
system/cache/*
|
|
||||||
!system/cache/index.html
|
|
||||||
!system/cache/twig/index.html
|
|
||||||
!system/cache/signatures/index.html
|
|
||||||
!system/cache/plugins/index.html
|
|
||||||
!system/cache/persistent/index.html
|
|
||||||
|
|
||||||
# logs
|
|
||||||
system/logs/*
|
|
||||||
!system/logs/index.html
|
|
||||||
|
|
||||||
# data
|
|
||||||
system/data/*
|
|
||||||
!system/data/index.html
|
|
||||||
|
|
||||||
# php sessions
|
|
||||||
system/php_sessions/*
|
|
||||||
!system/php_sessions/index.html
|
|
6
.github/workflows/cypress.yml
vendored
6
.github/workflows/cypress.yml
vendored
@@ -1,9 +1,9 @@
|
|||||||
name: Cypress
|
name: Cypress
|
||||||
on:
|
on:
|
||||||
pull_request:
|
pull_request:
|
||||||
branches: [develop]
|
branches: [master]
|
||||||
push:
|
push:
|
||||||
branches: [develop]
|
branches: [master]
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
cypress:
|
cypress:
|
||||||
@@ -35,7 +35,7 @@ jobs:
|
|||||||
- name: Checkout MyAAC
|
- name: Checkout MyAAC
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v4
|
||||||
with:
|
with:
|
||||||
ref: develop
|
ref: master
|
||||||
|
|
||||||
- uses: actions/setup-node@v4
|
- uses: actions/setup-node@v4
|
||||||
with:
|
with:
|
||||||
|
4
.github/workflows/phplint.yml
vendored
4
.github/workflows/phplint.yml
vendored
@@ -1,9 +1,9 @@
|
|||||||
name: PHP Linting
|
name: PHP Linting
|
||||||
on:
|
on:
|
||||||
pull_request:
|
pull_request:
|
||||||
branches: [develop]
|
branches: [master]
|
||||||
push:
|
push:
|
||||||
branches: [develop]
|
branches: [master]
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
phplint:
|
phplint:
|
||||||
|
4
.github/workflows/phpstan.yml
vendored
4
.github/workflows/phpstan.yml
vendored
@@ -2,9 +2,9 @@ name: "PHPStan"
|
|||||||
|
|
||||||
on:
|
on:
|
||||||
pull_request:
|
pull_request:
|
||||||
branches: [develop]
|
branches: [master]
|
||||||
push:
|
push:
|
||||||
branches: [develop]
|
branches: [master]
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
tests:
|
tests:
|
||||||
|
1
.gitignore
vendored
1
.gitignore
vendored
@@ -23,7 +23,6 @@ releases
|
|||||||
tmp
|
tmp
|
||||||
|
|
||||||
config.local.php
|
config.local.php
|
||||||
!docker/config.local.php
|
|
||||||
|
|
||||||
# all custom templates
|
# all custom templates
|
||||||
templates/*
|
templates/*
|
||||||
|
55
CHANGELOG.md
55
CHANGELOG.md
@@ -1,5 +1,58 @@
|
|||||||
# Changelog
|
# Changelog
|
||||||
|
|
||||||
|
## [1.0.1 - 14.01.2025]
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
* tibiacom account & news menu links not auto expanding
|
||||||
|
|
||||||
|
### Updated (Thanks dependabot)
|
||||||
|
* twig from ^2.0 to ^3.11
|
||||||
|
* tinymce from ^6.8.3 to ^7.2.0
|
||||||
|
* cypress from ^12.12.0 to ^13.17.0
|
||||||
|
* nesbot/carbon from 2.72.5 to 2.72.6
|
||||||
|
|
||||||
|
## [1.0 - 12.01.2025]
|
||||||
|
|
||||||
|
First stable release in the v1.0 series.
|
||||||
|
|
||||||
|
Minimum PHP 8.1 is required.
|
||||||
|
|
||||||
|
Changes since RC.2:
|
||||||
|
|
||||||
|
### Added
|
||||||
|
* feature: migrations up/down. Allows to downgrade/upgrade database to specified version (https://github.com/slawkens/myaac/commit/3f6ff3a3326b0475d28d11ffd7fff51f362d799f)
|
||||||
|
* new hooks for news management (https://github.com/slawkens/myaac/commit/011a85d8ae34283ded6999882833f9d4797028ec, https://github.com/slawkens/myaac/commit/36bd3eb846e829b45313e10f7568dc4e95841143)
|
||||||
|
* None Vocation to highscores (can be changed to RookStayer in Admin Panel) (https://github.com/slawkens/myaac/commit/a4a248099521bb5b8b2aa5bd592138debd2f19d5)
|
||||||
|
* support for button_color (green, red, blue) (https://github.com/slawkens/myaac/commit/d8b6b749ee62e88b6af4a05d3d7557f90b94d94e)
|
||||||
|
* add $whoopsHandler as variable, can be used by plugins (https://github.com/slawkens/myaac/commit/b0c8cf2ecda23045d725aaf43cfb3852ed766a4b)
|
||||||
|
* PlayerModel->outfit_url attribute (https://github.com/slawkens/myaac/commit/3b5be1a8db5dceecaa388e2925a5536d13b38881)
|
||||||
|
* support for selecting plugin themes in Admin menus.php (https://github.com/slawkens/myaac/commit/77a2c1cec343ffe4be5c2c2503ee81bc32a14ca1)
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
* schema: Change character set to utf8mb4 (support for Emojis in Menus/Pages/News/Forum etc.) (https://github.com/slawkens/myaac/commit/27c44f1bdfb6234cf0c9d5b4b491123bb205b08f)
|
||||||
|
* prefer get_browser_real_ip() over REMOTE_ADDR (https://github.com/slawkens/myaac/commit/941846605c00cee83168d2f916410b8ba8d4b7b9)
|
||||||
|
* automatically set selected current one on highscores filters (https://github.com/slawkens/myaac/commit/e96227fbe41ae281783b2d49edb169a603601813)
|
||||||
|
* rewrite towns loading code, removed OTBM loader (was too slow) (https://github.com/slawkens/myaac/commit/c980a0914632e7b27f718464f669a200707d217e)
|
||||||
|
* allow OTS_Player to be passed as object to getPlayerLink (https://github.com/slawkens/myaac/commit/84d37c5a8f2c4535a41c8aa8264752969d3f3a3d)
|
||||||
|
* do not clear menus by default on install (https://github.com/slawkens/myaac/commit/12d8faa3eda5e798f97b71e941c035187daad96e)
|
||||||
|
* display warning in admin panel - plugins - if zip extension is not installed (https://github.com/slawkens/myaac/commit/e3ffe5d9e11d78ab064a370d8541bac351c9bcd9)
|
||||||
|
* set default_socket_timeout for ipinfo.io checkup to 5 seconds (https://github.com/slawkens/myaac/commit/783d96fc6568a607d3198b832fed3a0dd06c4ebb)
|
||||||
|
* refactor getTopPlayers function (support for balance) (https://github.com/slawkens/myaac/commit/c769962e39fe8dfb72ecd5be1864e145696be794)
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
* XSS in forum (https://github.com/slawkens/myaac/commit/c2b7286d20d4b579171540f7a774e8a0995d5e8f, https://github.com/slawkens/myaac/commit/8fb643596f9586005976e7bdb484a541a9d8715e)
|
||||||
|
* price deducted when changing sex (https://github.com/slawkens/myaac/commit/16671ea40b72dcf74037c359ad572f9eb825edf9)
|
||||||
|
* move_thread by unauthorized user (https://github.com/slawkens/myaac/commit/d6c40c836a53cb1710f911f77f45f28b54ea1b54, thanks @anyeor)
|
||||||
|
* TFS 1.4.2 where conditions is NULL (https://github.com/slawkens/myaac/commit/b8396d4c8482e951da538b13f2296123732c4545)
|
||||||
|
* do not show forum new thread show button if not logged in (https://github.com/slawkens/myaac/commit/507402171ba3b6e7ee184bd7fa73e0d55e0cad7a, @anyeor)
|
||||||
|
* login if limiter is disabled (https://github.com/slawkens/myaac/commit/a0f1971583f0f790013e2145fb5ac573c59fbdef)
|
||||||
|
* fixes to installMenus function (https://github.com/slawkens/myaac/commit/a2fadc5945fe0a5e39f740827f6ffbda1bb501e2)
|
||||||
|
* many PHP exceptions in different places
|
||||||
|
* fixes to tibiacom menus ActiveSubmenuItem
|
||||||
|
|
||||||
|
### Removed
|
||||||
|
* bugtracker SQL table code as the page has been removed/moved to plugins (https://github.com/slawkens/myaac/commit/5782772b901b05fb814bc718d062f6e2cd71df8c)
|
||||||
|
|
||||||
## [1.0-RC.2 - 25.10.2024]
|
## [1.0-RC.2 - 25.10.2024]
|
||||||
|
|
||||||
Still waiting for your reports about bugs found in this release. We are very close to stable release.
|
Still waiting for your reports about bugs found in this release. We are very close to stable release.
|
||||||
@@ -116,4 +169,4 @@ Minimum PHP version for this release is 8.1.
|
|||||||
* change_password email to be more informal
|
* change_password email to be more informal
|
||||||
|
|
||||||
### Fixed
|
### Fixed
|
||||||
* hundrets of bug fixes, mostly patched from 0.8, so it makes no sense writing them again here
|
* hundreds of bug fixes, mostly patched from 0.8, so it makes no sense writing them again here
|
||||||
|
@@ -10,6 +10,7 @@
|
|||||||
|
|
||||||
use MyAAC\Cache\Cache;
|
use MyAAC\Cache\Cache;
|
||||||
use MyAAC\Models\Menu;
|
use MyAAC\Models\Menu;
|
||||||
|
use MyAAC\Plugins;
|
||||||
|
|
||||||
defined('MYAAC') or die('Direct access not allowed!');
|
defined('MYAAC') or die('Direct access not allowed!');
|
||||||
$title = 'Menus';
|
$title = 'Menus';
|
||||||
@@ -21,6 +22,8 @@ if (!hasFlag(FLAG_CONTENT_MENUS) && !superAdmin()) {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$pluginThemes = Plugins::getThemes();
|
||||||
|
|
||||||
if (isset($_POST['template'])) {
|
if (isset($_POST['template'])) {
|
||||||
$template = $_POST['template'];
|
$template = $_POST['template'];
|
||||||
|
|
||||||
@@ -64,9 +67,16 @@ if (isset($_POST['template'])) {
|
|||||||
success('Saved at ' . date('H:i'));
|
success('Saved at ' . date('H:i'));
|
||||||
}
|
}
|
||||||
|
|
||||||
$file = TEMPLATES . $template . '/config.php';
|
$path = TEMPLATES . $template;
|
||||||
if (file_exists($file)) {
|
|
||||||
require_once $file;
|
if (isset($pluginThemes[$template])) {
|
||||||
|
$path = BASE . $pluginThemes[$template];
|
||||||
|
}
|
||||||
|
|
||||||
|
$path .= '/config.php';
|
||||||
|
|
||||||
|
if (file_exists($path)) {
|
||||||
|
require_once $path;
|
||||||
} else {
|
} else {
|
||||||
echo 'Cannot find template config.php file.';
|
echo 'Cannot find template config.php file.';
|
||||||
return;
|
return;
|
||||||
@@ -169,8 +179,13 @@ if (isset($_POST['template'])) {
|
|||||||
} else {
|
} else {
|
||||||
$templates = Menu::select('template')->distinct()->get()->toArray();
|
$templates = Menu::select('template')->distinct()->get()->toArray();
|
||||||
foreach ($templates as $key => $value) {
|
foreach ($templates as $key => $value) {
|
||||||
$file = TEMPLATES . $value['template'] . '/config.php';
|
$path = TEMPLATES . $value['template'];
|
||||||
if (!file_exists($file)) {
|
|
||||||
|
if (isset($pluginThemes[$value['template']])) {
|
||||||
|
$path = BASE . $pluginThemes[$value['template']];
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!file_exists($path . '/config.php')) {
|
||||||
unset($templates[$key]);
|
unset($templates[$key]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -26,8 +26,8 @@
|
|||||||
if (version_compare(phpversion(), '8.1', '<')) die('PHP version 8.1 or higher is required.');
|
if (version_compare(phpversion(), '8.1', '<')) die('PHP version 8.1 or higher is required.');
|
||||||
|
|
||||||
const MYAAC = true;
|
const MYAAC = true;
|
||||||
const MYAAC_VERSION = '1.0-RC.2';
|
const MYAAC_VERSION = '1.0.1';
|
||||||
const DATABASE_VERSION = 41;
|
const DATABASE_VERSION = 42;
|
||||||
const TABLE_PREFIX = 'myaac_';
|
const TABLE_PREFIX = 'myaac_';
|
||||||
define('START_TIME', microtime(true));
|
define('START_TIME', microtime(true));
|
||||||
define('MYAAC_OS', stripos(PHP_OS, 'WIN') === 0 ? 'WINDOWS' : (strtoupper(PHP_OS) === 'DARWIN' ? 'MAC' : 'LINUX'));
|
define('MYAAC_OS', stripos(PHP_OS, 'WIN') === 0 ? 'WINDOWS' : (strtoupper(PHP_OS) === 'DARWIN' ? 'MAC' : 'LINUX'));
|
||||||
|
@@ -8,7 +8,7 @@
|
|||||||
"ext-dom": "*",
|
"ext-dom": "*",
|
||||||
"phpmailer/phpmailer": "^6.1",
|
"phpmailer/phpmailer": "^6.1",
|
||||||
"composer/semver": "^3.2",
|
"composer/semver": "^3.2",
|
||||||
"twig/twig": "^2.0",
|
"twig/twig": "^3.11",
|
||||||
"erusev/parsedown": "^1.7",
|
"erusev/parsedown": "^1.7",
|
||||||
"nikic/fast-route": "^1.3",
|
"nikic/fast-route": "^1.3",
|
||||||
"matomo/device-detector": "^6.0",
|
"matomo/device-detector": "^6.0",
|
||||||
|
297
composer.lock
generated
297
composer.lock
generated
@@ -4,7 +4,7 @@
|
|||||||
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
||||||
"This file is @generated automatically"
|
"This file is @generated automatically"
|
||||||
],
|
],
|
||||||
"content-hash": "27c63d07ab6337cd8bb5b59f2b2e08d8",
|
"content-hash": "be4d1489a53a9cd8eec6bcaa7a096f30",
|
||||||
"packages": [
|
"packages": [
|
||||||
{
|
{
|
||||||
"name": "brick/math",
|
"name": "brick/math",
|
||||||
@@ -885,16 +885,16 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "matomo/device-detector",
|
"name": "matomo/device-detector",
|
||||||
"version": "6.4.1",
|
"version": "6.4.2",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/matomo-org/device-detector.git",
|
"url": "https://github.com/matomo-org/device-detector.git",
|
||||||
"reference": "0d364e0dd6c177da3c24cd4049178026324fd7ac"
|
"reference": "806e52d214b05ddead1a1d4304c7592f61f95976"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/matomo-org/device-detector/zipball/0d364e0dd6c177da3c24cd4049178026324fd7ac",
|
"url": "https://api.github.com/repos/matomo-org/device-detector/zipball/806e52d214b05ddead1a1d4304c7592f61f95976",
|
||||||
"reference": "0d364e0dd6c177da3c24cd4049178026324fd7ac",
|
"reference": "806e52d214b05ddead1a1d4304c7592f61f95976",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
@@ -950,20 +950,20 @@
|
|||||||
"source": "https://github.com/matomo-org/matomo",
|
"source": "https://github.com/matomo-org/matomo",
|
||||||
"wiki": "https://dev.matomo.org/"
|
"wiki": "https://dev.matomo.org/"
|
||||||
},
|
},
|
||||||
"time": "2024-09-24T13:50:04+00:00"
|
"time": "2024-12-16T16:38:01+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "maximebf/debugbar",
|
"name": "maximebf/debugbar",
|
||||||
"version": "v1.23.3",
|
"version": "v1.23.5",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/maximebf/php-debugbar.git",
|
"url": "https://github.com/php-debugbar/php-debugbar.git",
|
||||||
"reference": "687400043d77943ef95e8417cb44e1673ee57844"
|
"reference": "eeabd61a1f19ba5dcd5ac4585a477130ee03ce25"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/maximebf/php-debugbar/zipball/687400043d77943ef95e8417cb44e1673ee57844",
|
"url": "https://api.github.com/repos/php-debugbar/php-debugbar/zipball/eeabd61a1f19ba5dcd5ac4585a477130ee03ce25",
|
||||||
"reference": "687400043d77943ef95e8417cb44e1673ee57844",
|
"reference": "eeabd61a1f19ba5dcd5ac4585a477130ee03ce25",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
@@ -1015,10 +1015,10 @@
|
|||||||
"debugbar"
|
"debugbar"
|
||||||
],
|
],
|
||||||
"support": {
|
"support": {
|
||||||
"issues": "https://github.com/maximebf/php-debugbar/issues",
|
"issues": "https://github.com/php-debugbar/php-debugbar/issues",
|
||||||
"source": "https://github.com/maximebf/php-debugbar/tree/v1.23.3"
|
"source": "https://github.com/php-debugbar/php-debugbar/tree/v1.23.5"
|
||||||
},
|
},
|
||||||
"time": "2024-10-29T12:24:25+00:00"
|
"time": "2024-12-15T19:20:42+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "mustangostang/spyc",
|
"name": "mustangostang/spyc",
|
||||||
@@ -1076,16 +1076,16 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "nesbot/carbon",
|
"name": "nesbot/carbon",
|
||||||
"version": "2.72.5",
|
"version": "2.72.6",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/briannesbitt/Carbon.git",
|
"url": "https://github.com/CarbonPHP/carbon.git",
|
||||||
"reference": "afd46589c216118ecd48ff2b95d77596af1e57ed"
|
"reference": "1e9d50601e7035a4c61441a208cb5bed73e108c5"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/afd46589c216118ecd48ff2b95d77596af1e57ed",
|
"url": "https://api.github.com/repos/CarbonPHP/carbon/zipball/1e9d50601e7035a4c61441a208cb5bed73e108c5",
|
||||||
"reference": "afd46589c216118ecd48ff2b95d77596af1e57ed",
|
"reference": "1e9d50601e7035a4c61441a208cb5bed73e108c5",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
@@ -1105,7 +1105,7 @@
|
|||||||
"doctrine/orm": "^2.7 || ^3.0",
|
"doctrine/orm": "^2.7 || ^3.0",
|
||||||
"friendsofphp/php-cs-fixer": "^3.0",
|
"friendsofphp/php-cs-fixer": "^3.0",
|
||||||
"kylekatarnls/multi-tester": "^2.0",
|
"kylekatarnls/multi-tester": "^2.0",
|
||||||
"ondrejmirtes/better-reflection": "*",
|
"ondrejmirtes/better-reflection": "<6",
|
||||||
"phpmd/phpmd": "^2.9",
|
"phpmd/phpmd": "^2.9",
|
||||||
"phpstan/extension-installer": "^1.0",
|
"phpstan/extension-installer": "^1.0",
|
||||||
"phpstan/phpstan": "^0.12.99 || ^1.7.14",
|
"phpstan/phpstan": "^0.12.99 || ^1.7.14",
|
||||||
@@ -1118,10 +1118,6 @@
|
|||||||
],
|
],
|
||||||
"type": "library",
|
"type": "library",
|
||||||
"extra": {
|
"extra": {
|
||||||
"branch-alias": {
|
|
||||||
"dev-master": "3.x-dev",
|
|
||||||
"dev-2.x": "2.x-dev"
|
|
||||||
},
|
|
||||||
"laravel": {
|
"laravel": {
|
||||||
"providers": [
|
"providers": [
|
||||||
"Carbon\\Laravel\\ServiceProvider"
|
"Carbon\\Laravel\\ServiceProvider"
|
||||||
@@ -1131,6 +1127,10 @@
|
|||||||
"includes": [
|
"includes": [
|
||||||
"extension.neon"
|
"extension.neon"
|
||||||
]
|
]
|
||||||
|
},
|
||||||
|
"branch-alias": {
|
||||||
|
"dev-2.x": "2.x-dev",
|
||||||
|
"dev-master": "3.x-dev"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"autoload": {
|
"autoload": {
|
||||||
@@ -1179,7 +1179,7 @@
|
|||||||
"type": "tidelift"
|
"type": "tidelift"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"time": "2024-06-03T19:18:41+00:00"
|
"time": "2024-12-27T09:28:11+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "nikic/fast-route",
|
"name": "nikic/fast-route",
|
||||||
@@ -1575,16 +1575,16 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "symfony/console",
|
"name": "symfony/console",
|
||||||
"version": "v6.4.15",
|
"version": "v6.4.17",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/symfony/console.git",
|
"url": "https://github.com/symfony/console.git",
|
||||||
"reference": "f1fc6f47283e27336e7cebb9e8946c8de7bff9bd"
|
"reference": "799445db3f15768ecc382ac5699e6da0520a0a04"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/symfony/console/zipball/f1fc6f47283e27336e7cebb9e8946c8de7bff9bd",
|
"url": "https://api.github.com/repos/symfony/console/zipball/799445db3f15768ecc382ac5699e6da0520a0a04",
|
||||||
"reference": "f1fc6f47283e27336e7cebb9e8946c8de7bff9bd",
|
"reference": "799445db3f15768ecc382ac5699e6da0520a0a04",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
@@ -1649,7 +1649,7 @@
|
|||||||
"terminal"
|
"terminal"
|
||||||
],
|
],
|
||||||
"support": {
|
"support": {
|
||||||
"source": "https://github.com/symfony/console/tree/v6.4.15"
|
"source": "https://github.com/symfony/console/tree/v6.4.17"
|
||||||
},
|
},
|
||||||
"funding": [
|
"funding": [
|
||||||
{
|
{
|
||||||
@@ -1665,7 +1665,7 @@
|
|||||||
"type": "tidelift"
|
"type": "tidelift"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"time": "2024-11-06T14:19:14+00:00"
|
"time": "2024-12-07T12:07:30+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "symfony/deprecation-contracts",
|
"name": "symfony/deprecation-contracts",
|
||||||
@@ -1686,12 +1686,12 @@
|
|||||||
},
|
},
|
||||||
"type": "library",
|
"type": "library",
|
||||||
"extra": {
|
"extra": {
|
||||||
|
"thanks": {
|
||||||
|
"url": "https://github.com/symfony/contracts",
|
||||||
|
"name": "symfony/contracts"
|
||||||
|
},
|
||||||
"branch-alias": {
|
"branch-alias": {
|
||||||
"dev-main": "3.5-dev"
|
"dev-main": "3.5-dev"
|
||||||
},
|
|
||||||
"thanks": {
|
|
||||||
"name": "symfony/contracts",
|
|
||||||
"url": "https://github.com/symfony/contracts"
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"autoload": {
|
"autoload": {
|
||||||
@@ -1760,8 +1760,8 @@
|
|||||||
"type": "library",
|
"type": "library",
|
||||||
"extra": {
|
"extra": {
|
||||||
"thanks": {
|
"thanks": {
|
||||||
"name": "symfony/polyfill",
|
"url": "https://github.com/symfony/polyfill",
|
||||||
"url": "https://github.com/symfony/polyfill"
|
"name": "symfony/polyfill"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"autoload": {
|
"autoload": {
|
||||||
@@ -1836,8 +1836,8 @@
|
|||||||
"type": "library",
|
"type": "library",
|
||||||
"extra": {
|
"extra": {
|
||||||
"thanks": {
|
"thanks": {
|
||||||
"name": "symfony/polyfill",
|
"url": "https://github.com/symfony/polyfill",
|
||||||
"url": "https://github.com/symfony/polyfill"
|
"name": "symfony/polyfill"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"autoload": {
|
"autoload": {
|
||||||
@@ -1914,8 +1914,8 @@
|
|||||||
"type": "library",
|
"type": "library",
|
||||||
"extra": {
|
"extra": {
|
||||||
"thanks": {
|
"thanks": {
|
||||||
"name": "symfony/polyfill",
|
"url": "https://github.com/symfony/polyfill",
|
||||||
"url": "https://github.com/symfony/polyfill"
|
"name": "symfony/polyfill"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"autoload": {
|
"autoload": {
|
||||||
@@ -1998,8 +1998,8 @@
|
|||||||
"type": "library",
|
"type": "library",
|
||||||
"extra": {
|
"extra": {
|
||||||
"thanks": {
|
"thanks": {
|
||||||
"name": "symfony/polyfill",
|
"url": "https://github.com/symfony/polyfill",
|
||||||
"url": "https://github.com/symfony/polyfill"
|
"name": "symfony/polyfill"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"autoload": {
|
"autoload": {
|
||||||
@@ -2052,71 +2052,6 @@
|
|||||||
],
|
],
|
||||||
"time": "2024-09-09T11:45:10+00:00"
|
"time": "2024-09-09T11:45:10+00:00"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "symfony/polyfill-php72",
|
|
||||||
"version": "v1.31.0",
|
|
||||||
"source": {
|
|
||||||
"type": "git",
|
|
||||||
"url": "https://github.com/symfony/polyfill-php72.git",
|
|
||||||
"reference": "fa2ae56c44f03bed91a39bfc9822e31e7c5c38ce"
|
|
||||||
},
|
|
||||||
"dist": {
|
|
||||||
"type": "zip",
|
|
||||||
"url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/fa2ae56c44f03bed91a39bfc9822e31e7c5c38ce",
|
|
||||||
"reference": "fa2ae56c44f03bed91a39bfc9822e31e7c5c38ce",
|
|
||||||
"shasum": ""
|
|
||||||
},
|
|
||||||
"require": {
|
|
||||||
"php": ">=7.2"
|
|
||||||
},
|
|
||||||
"type": "metapackage",
|
|
||||||
"extra": {
|
|
||||||
"thanks": {
|
|
||||||
"name": "symfony/polyfill",
|
|
||||||
"url": "https://github.com/symfony/polyfill"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"notification-url": "https://packagist.org/downloads/",
|
|
||||||
"license": [
|
|
||||||
"MIT"
|
|
||||||
],
|
|
||||||
"authors": [
|
|
||||||
{
|
|
||||||
"name": "Nicolas Grekas",
|
|
||||||
"email": "p@tchwork.com"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Symfony Community",
|
|
||||||
"homepage": "https://symfony.com/contributors"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"description": "Symfony polyfill backporting some PHP 7.2+ features to lower PHP versions",
|
|
||||||
"homepage": "https://symfony.com",
|
|
||||||
"keywords": [
|
|
||||||
"compatibility",
|
|
||||||
"polyfill",
|
|
||||||
"portable",
|
|
||||||
"shim"
|
|
||||||
],
|
|
||||||
"support": {
|
|
||||||
"source": "https://github.com/symfony/polyfill-php72/tree/v1.31.0"
|
|
||||||
},
|
|
||||||
"funding": [
|
|
||||||
{
|
|
||||||
"url": "https://symfony.com/sponsor",
|
|
||||||
"type": "custom"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"url": "https://github.com/fabpot",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
|
|
||||||
"type": "tidelift"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"time": "2024-09-09T11:45:10+00:00"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "symfony/polyfill-php80",
|
"name": "symfony/polyfill-php80",
|
||||||
"version": "v1.31.0",
|
"version": "v1.31.0",
|
||||||
@@ -2137,8 +2072,8 @@
|
|||||||
"type": "library",
|
"type": "library",
|
||||||
"extra": {
|
"extra": {
|
||||||
"thanks": {
|
"thanks": {
|
||||||
"name": "symfony/polyfill",
|
"url": "https://github.com/symfony/polyfill",
|
||||||
"url": "https://github.com/symfony/polyfill"
|
"name": "symfony/polyfill"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"autoload": {
|
"autoload": {
|
||||||
@@ -2197,6 +2132,82 @@
|
|||||||
],
|
],
|
||||||
"time": "2024-09-09T11:45:10+00:00"
|
"time": "2024-09-09T11:45:10+00:00"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"name": "symfony/polyfill-php81",
|
||||||
|
"version": "v1.31.0",
|
||||||
|
"source": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/symfony/polyfill-php81.git",
|
||||||
|
"reference": "4a4cfc2d253c21a5ad0e53071df248ed48c6ce5c"
|
||||||
|
},
|
||||||
|
"dist": {
|
||||||
|
"type": "zip",
|
||||||
|
"url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/4a4cfc2d253c21a5ad0e53071df248ed48c6ce5c",
|
||||||
|
"reference": "4a4cfc2d253c21a5ad0e53071df248ed48c6ce5c",
|
||||||
|
"shasum": ""
|
||||||
|
},
|
||||||
|
"require": {
|
||||||
|
"php": ">=7.2"
|
||||||
|
},
|
||||||
|
"type": "library",
|
||||||
|
"extra": {
|
||||||
|
"thanks": {
|
||||||
|
"url": "https://github.com/symfony/polyfill",
|
||||||
|
"name": "symfony/polyfill"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"autoload": {
|
||||||
|
"files": [
|
||||||
|
"bootstrap.php"
|
||||||
|
],
|
||||||
|
"psr-4": {
|
||||||
|
"Symfony\\Polyfill\\Php81\\": ""
|
||||||
|
},
|
||||||
|
"classmap": [
|
||||||
|
"Resources/stubs"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"notification-url": "https://packagist.org/downloads/",
|
||||||
|
"license": [
|
||||||
|
"MIT"
|
||||||
|
],
|
||||||
|
"authors": [
|
||||||
|
{
|
||||||
|
"name": "Nicolas Grekas",
|
||||||
|
"email": "p@tchwork.com"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Symfony Community",
|
||||||
|
"homepage": "https://symfony.com/contributors"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"description": "Symfony polyfill backporting some PHP 8.1+ features to lower PHP versions",
|
||||||
|
"homepage": "https://symfony.com",
|
||||||
|
"keywords": [
|
||||||
|
"compatibility",
|
||||||
|
"polyfill",
|
||||||
|
"portable",
|
||||||
|
"shim"
|
||||||
|
],
|
||||||
|
"support": {
|
||||||
|
"source": "https://github.com/symfony/polyfill-php81/tree/v1.31.0"
|
||||||
|
},
|
||||||
|
"funding": [
|
||||||
|
{
|
||||||
|
"url": "https://symfony.com/sponsor",
|
||||||
|
"type": "custom"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"url": "https://github.com/fabpot",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
|
||||||
|
"type": "tidelift"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"time": "2024-09-09T11:45:10+00:00"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "symfony/service-contracts",
|
"name": "symfony/service-contracts",
|
||||||
"version": "v3.5.1",
|
"version": "v3.5.1",
|
||||||
@@ -2221,12 +2232,12 @@
|
|||||||
},
|
},
|
||||||
"type": "library",
|
"type": "library",
|
||||||
"extra": {
|
"extra": {
|
||||||
|
"thanks": {
|
||||||
|
"url": "https://github.com/symfony/contracts",
|
||||||
|
"name": "symfony/contracts"
|
||||||
|
},
|
||||||
"branch-alias": {
|
"branch-alias": {
|
||||||
"dev-main": "3.5-dev"
|
"dev-main": "3.5-dev"
|
||||||
},
|
|
||||||
"thanks": {
|
|
||||||
"name": "symfony/contracts",
|
|
||||||
"url": "https://github.com/symfony/contracts"
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"autoload": {
|
"autoload": {
|
||||||
@@ -2480,12 +2491,12 @@
|
|||||||
},
|
},
|
||||||
"type": "library",
|
"type": "library",
|
||||||
"extra": {
|
"extra": {
|
||||||
|
"thanks": {
|
||||||
|
"url": "https://github.com/symfony/contracts",
|
||||||
|
"name": "symfony/contracts"
|
||||||
|
},
|
||||||
"branch-alias": {
|
"branch-alias": {
|
||||||
"dev-main": "3.5-dev"
|
"dev-main": "3.5-dev"
|
||||||
},
|
|
||||||
"thanks": {
|
|
||||||
"name": "symfony/contracts",
|
|
||||||
"url": "https://github.com/symfony/contracts"
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"autoload": {
|
"autoload": {
|
||||||
@@ -2626,38 +2637,38 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "twig/twig",
|
"name": "twig/twig",
|
||||||
"version": "v2.16.1",
|
"version": "v3.18.0",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/twigphp/Twig.git",
|
"url": "https://github.com/twigphp/Twig.git",
|
||||||
"reference": "19185947ec75d433a3ac650af32fc05649b95ee1"
|
"reference": "acffa88cc2b40dbe42eaf3a5025d6c0d4600cc50"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/twigphp/Twig/zipball/19185947ec75d433a3ac650af32fc05649b95ee1",
|
"url": "https://api.github.com/repos/twigphp/Twig/zipball/acffa88cc2b40dbe42eaf3a5025d6c0d4600cc50",
|
||||||
"reference": "19185947ec75d433a3ac650af32fc05649b95ee1",
|
"reference": "acffa88cc2b40dbe42eaf3a5025d6c0d4600cc50",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
"php": ">=7.1.3",
|
"php": ">=8.0.2",
|
||||||
|
"symfony/deprecation-contracts": "^2.5|^3",
|
||||||
"symfony/polyfill-ctype": "^1.8",
|
"symfony/polyfill-ctype": "^1.8",
|
||||||
"symfony/polyfill-mbstring": "^1.3",
|
"symfony/polyfill-mbstring": "^1.3",
|
||||||
"symfony/polyfill-php72": "^1.8"
|
"symfony/polyfill-php81": "^1.29"
|
||||||
},
|
},
|
||||||
"require-dev": {
|
"require-dev": {
|
||||||
"psr/container": "^1.0",
|
"phpstan/phpstan": "^2.0",
|
||||||
"symfony/phpunit-bridge": "^5.4.9|^6.3"
|
"psr/container": "^1.0|^2.0",
|
||||||
|
"symfony/phpunit-bridge": "^5.4.9|^6.4|^7.0"
|
||||||
},
|
},
|
||||||
"type": "library",
|
"type": "library",
|
||||||
"extra": {
|
|
||||||
"branch-alias": {
|
|
||||||
"dev-master": "2.16-dev"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"autoload": {
|
"autoload": {
|
||||||
"psr-0": {
|
"files": [
|
||||||
"Twig_": "lib/"
|
"src/Resources/core.php",
|
||||||
},
|
"src/Resources/debug.php",
|
||||||
|
"src/Resources/escaper.php",
|
||||||
|
"src/Resources/string_loader.php"
|
||||||
|
],
|
||||||
"psr-4": {
|
"psr-4": {
|
||||||
"Twig\\": "src/"
|
"Twig\\": "src/"
|
||||||
}
|
}
|
||||||
@@ -2690,7 +2701,7 @@
|
|||||||
],
|
],
|
||||||
"support": {
|
"support": {
|
||||||
"issues": "https://github.com/twigphp/Twig/issues",
|
"issues": "https://github.com/twigphp/Twig/issues",
|
||||||
"source": "https://github.com/twigphp/Twig/tree/v2.16.1"
|
"source": "https://github.com/twigphp/Twig/tree/v3.18.0"
|
||||||
},
|
},
|
||||||
"funding": [
|
"funding": [
|
||||||
{
|
{
|
||||||
@@ -2702,7 +2713,7 @@
|
|||||||
"type": "tidelift"
|
"type": "tidelift"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"time": "2024-09-09T17:53:56+00:00"
|
"time": "2024-12-29T10:51:50+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "voku/portable-ascii",
|
"name": "voku/portable-ascii",
|
||||||
@@ -2840,16 +2851,16 @@
|
|||||||
"packages-dev": [
|
"packages-dev": [
|
||||||
{
|
{
|
||||||
"name": "phpstan/phpstan",
|
"name": "phpstan/phpstan",
|
||||||
"version": "1.12.12",
|
"version": "1.12.15",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/phpstan/phpstan.git",
|
"url": "https://github.com/phpstan/phpstan.git",
|
||||||
"reference": "b5ae1b88f471d3fd4ba1aa0046234b5ca3776dd0"
|
"reference": "c91d4e8bc056f46cf653656e6f71004b254574d1"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/phpstan/phpstan/zipball/b5ae1b88f471d3fd4ba1aa0046234b5ca3776dd0",
|
"url": "https://api.github.com/repos/phpstan/phpstan/zipball/c91d4e8bc056f46cf653656e6f71004b254574d1",
|
||||||
"reference": "b5ae1b88f471d3fd4ba1aa0046234b5ca3776dd0",
|
"reference": "c91d4e8bc056f46cf653656e6f71004b254574d1",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
@@ -2894,12 +2905,12 @@
|
|||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"time": "2024-11-28T22:13:23+00:00"
|
"time": "2025-01-05T16:40:22+00:00"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"aliases": [],
|
"aliases": [],
|
||||||
"minimum-stability": "stable",
|
"minimum-stability": "stable",
|
||||||
"stability-flags": [],
|
"stability-flags": {},
|
||||||
"prefer-stable": false,
|
"prefer-stable": false,
|
||||||
"prefer-lowest": false,
|
"prefer-lowest": false,
|
||||||
"platform": {
|
"platform": {
|
||||||
@@ -2910,6 +2921,6 @@
|
|||||||
"ext-xml": "*",
|
"ext-xml": "*",
|
||||||
"ext-dom": "*"
|
"ext-dom": "*"
|
||||||
},
|
},
|
||||||
"platform-dev": [],
|
"platform-dev": {},
|
||||||
"plugin-api-version": "2.6.0"
|
"plugin-api-version": "2.6.0"
|
||||||
}
|
}
|
||||||
|
@@ -116,9 +116,9 @@ describe('Check Public Pages', () => {
|
|||||||
})
|
})
|
||||||
|
|
||||||
// library
|
// library
|
||||||
it('Go to creatures page', () => {
|
it('Go to monsters page', () => {
|
||||||
cy.visit({
|
cy.visit({
|
||||||
url: Cypress.env('URL') + '/creatures',
|
url: Cypress.env('URL') + '/monsters',
|
||||||
method: 'GET',
|
method: 'GET',
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
@@ -4,7 +4,7 @@ const YOU_ARE_NOT_LOGGEDIN = 'You are not logged in.';
|
|||||||
describe('Check Protected Pages', () => {
|
describe('Check Protected Pages', () => {
|
||||||
|
|
||||||
// character actions
|
// character actions
|
||||||
it('Go to accouht character creation page', () => {
|
it('Go to account character creation page', () => {
|
||||||
cy.visit({
|
cy.visit({
|
||||||
url: Cypress.env('URL') + '/account/character/create',
|
url: Cypress.env('URL') + '/account/character/create',
|
||||||
method: 'GET',
|
method: 'GET',
|
||||||
@@ -12,7 +12,7 @@ describe('Check Protected Pages', () => {
|
|||||||
cy.contains(REQUIRED_LOGIN_MESSAGE)
|
cy.contains(REQUIRED_LOGIN_MESSAGE)
|
||||||
})
|
})
|
||||||
|
|
||||||
it('Go to accouht character deletion page', () => {
|
it('Go to account character deletion page', () => {
|
||||||
cy.visit({
|
cy.visit({
|
||||||
url: Cypress.env('URL') + '/account/character/delete',
|
url: Cypress.env('URL') + '/account/character/delete',
|
||||||
method: 'GET',
|
method: 'GET',
|
||||||
@@ -21,7 +21,7 @@ describe('Check Protected Pages', () => {
|
|||||||
})
|
})
|
||||||
|
|
||||||
// account actions
|
// account actions
|
||||||
it('Go to accouht email change page', () => {
|
it('Go to account email change page', () => {
|
||||||
cy.visit({
|
cy.visit({
|
||||||
url: Cypress.env('URL') + '/account/email',
|
url: Cypress.env('URL') + '/account/email',
|
||||||
method: 'GET',
|
method: 'GET',
|
||||||
@@ -29,7 +29,7 @@ describe('Check Protected Pages', () => {
|
|||||||
cy.contains(REQUIRED_LOGIN_MESSAGE)
|
cy.contains(REQUIRED_LOGIN_MESSAGE)
|
||||||
})
|
})
|
||||||
|
|
||||||
it('Go to accouht password change page', () => {
|
it('Go to account password change page', () => {
|
||||||
cy.visit({
|
cy.visit({
|
||||||
url: Cypress.env('URL') + '/account/password',
|
url: Cypress.env('URL') + '/account/password',
|
||||||
method: 'GET',
|
method: 'GET',
|
||||||
@@ -37,7 +37,7 @@ describe('Check Protected Pages', () => {
|
|||||||
cy.contains(REQUIRED_LOGIN_MESSAGE)
|
cy.contains(REQUIRED_LOGIN_MESSAGE)
|
||||||
})
|
})
|
||||||
|
|
||||||
it('Go to accouht info change page', () => {
|
it('Go to account info change page', () => {
|
||||||
cy.visit({
|
cy.visit({
|
||||||
url: Cypress.env('URL') + '/account/info',
|
url: Cypress.env('URL') + '/account/info',
|
||||||
method: 'GET',
|
method: 'GET',
|
||||||
@@ -45,7 +45,7 @@ describe('Check Protected Pages', () => {
|
|||||||
cy.contains(REQUIRED_LOGIN_MESSAGE)
|
cy.contains(REQUIRED_LOGIN_MESSAGE)
|
||||||
})
|
})
|
||||||
|
|
||||||
it('Go to accouht logout change page', () => {
|
it('Go to account logout change page', () => {
|
||||||
cy.visit({
|
cy.visit({
|
||||||
url: Cypress.env('URL') + '/account/logout',
|
url: Cypress.env('URL') + '/account/logout',
|
||||||
method: 'GET',
|
method: 'GET',
|
||||||
|
@@ -1,40 +0,0 @@
|
|||||||
services:
|
|
||||||
web:
|
|
||||||
ports:
|
|
||||||
- 8001:80
|
|
||||||
build:
|
|
||||||
args:
|
|
||||||
user: www-data
|
|
||||||
uid: 33
|
|
||||||
context: ./
|
|
||||||
dockerfile: ./docker/Dockerfile
|
|
||||||
restart: unless-stopped
|
|
||||||
working_dir: /var/www/html
|
|
||||||
depends_on:
|
|
||||||
- db
|
|
||||||
#volumes:
|
|
||||||
# - ./:/var/www/html
|
|
||||||
|
|
||||||
db:
|
|
||||||
image: mysql:8.0
|
|
||||||
restart: unless-stopped # always?
|
|
||||||
environment:
|
|
||||||
MYSQL_RANDOM_ROOT_PASSWORD: "yes"
|
|
||||||
MYSQL_DATABASE: myaac
|
|
||||||
#MYSQL_ROOT_PASSWORD: root
|
|
||||||
MYSQL_PASSWORD: myaac
|
|
||||||
MYSQL_USER: myaac
|
|
||||||
ports:
|
|
||||||
- 8003:3306
|
|
||||||
volumes:
|
|
||||||
- ./docker/tfs_schema.sql:/docker-entrypoint-initdb.d/tfs_schema.sql
|
|
||||||
- db:/var/lib/mysql
|
|
||||||
|
|
||||||
phpmyadmin:
|
|
||||||
image: phpmyadmin
|
|
||||||
restart: always
|
|
||||||
ports:
|
|
||||||
- 8002:80
|
|
||||||
|
|
||||||
volumes:
|
|
||||||
db:
|
|
@@ -1,56 +0,0 @@
|
|||||||
FROM php:8.2-apache
|
|
||||||
|
|
||||||
ARG APCU_VERSION=5.1.22
|
|
||||||
|
|
||||||
# Arguments defined in docker-compose.yml
|
|
||||||
ARG user
|
|
||||||
ARG uid
|
|
||||||
|
|
||||||
# Install system dependencies
|
|
||||||
RUN apt-get update && apt-get install -y \
|
|
||||||
git \
|
|
||||||
curl \
|
|
||||||
libpng-dev \
|
|
||||||
libonig-dev \
|
|
||||||
libxml2-dev \
|
|
||||||
libzip-dev \
|
|
||||||
zip \
|
|
||||||
unzip \
|
|
||||||
nano \
|
|
||||||
vim
|
|
||||||
|
|
||||||
RUN apt-get install -y nodejs npm
|
|
||||||
|
|
||||||
# Clear cache
|
|
||||||
RUN apt-get clean && rm -rf /var/lib/apt/lists/*
|
|
||||||
|
|
||||||
# Install PHP extensions
|
|
||||||
RUN docker-php-ext-install pdo pdo_mysql gd zip opcache
|
|
||||||
RUN docker-php-ext-configure opcache --enable-opcache
|
|
||||||
RUN pecl install apcu-${APCU_VERSION} && docker-php-ext-enable apcu
|
|
||||||
|
|
||||||
# Get latest Composer
|
|
||||||
COPY --from=composer:latest /usr/bin/composer /usr/bin/composer
|
|
||||||
|
|
||||||
# Create system user to run Composer Commands
|
|
||||||
#RUN useradd -G www-data,root -u $uid -d /home/$user $user
|
|
||||||
RUN mkdir -p /home/$user/.composer && \
|
|
||||||
chown -R $user:$user /home/$user
|
|
||||||
|
|
||||||
RUN chown -R www-data.www-data /var/www
|
|
||||||
|
|
||||||
USER $user
|
|
||||||
|
|
||||||
WORKDIR /home/$user
|
|
||||||
RUN git clone https://github.com/otland/forgottenserver.git
|
|
||||||
|
|
||||||
COPY --chown=www-data:www-data docker/config.lua /home/$user/forgottenserver
|
|
||||||
COPY --chown=www-data:www-data docker/config.local.php /var/www/html
|
|
||||||
|
|
||||||
#WORKDIR /home/$user/forgottenserver
|
|
||||||
|
|
||||||
WORKDIR /var/www/html
|
|
||||||
|
|
||||||
COPY --chown=www-data:www-data . .
|
|
||||||
RUN composer install
|
|
||||||
RUN npm install
|
|
@@ -1,4 +0,0 @@
|
|||||||
<?php
|
|
||||||
$config['installed'] = false;
|
|
||||||
$config['server_path'] = '/home/www-data/forgottenserver';
|
|
||||||
$config['install_ignore_ip_check'] = true;
|
|
@@ -1,12 +0,0 @@
|
|||||||
serverName = "Forgotten"
|
|
||||||
mysqlHost = "db"
|
|
||||||
mysqlUser = "myaac"
|
|
||||||
mysqlPass = "myaac"
|
|
||||||
mysqlDatabase = "myaac"
|
|
||||||
mysqlPort = 3306
|
|
||||||
mysqlSock = ""
|
|
||||||
|
|
||||||
ip = "192.168.176.1"
|
|
||||||
statusPort = 7171
|
|
||||||
statusTimeout = 2000
|
|
||||||
|
|
@@ -1,384 +0,0 @@
|
|||||||
CREATE TABLE IF NOT EXISTS `accounts` (
|
|
||||||
`id` int NOT NULL AUTO_INCREMENT,
|
|
||||||
`name` varchar(32) NOT NULL,
|
|
||||||
`password` char(40) NOT NULL,
|
|
||||||
`secret` char(16) DEFAULT NULL,
|
|
||||||
`type` int NOT NULL DEFAULT '1',
|
|
||||||
`premium_ends_at` int unsigned NOT NULL DEFAULT '0',
|
|
||||||
`email` varchar(255) NOT NULL DEFAULT '',
|
|
||||||
`creation` int NOT NULL DEFAULT '0',
|
|
||||||
PRIMARY KEY (`id`),
|
|
||||||
UNIQUE KEY `name` (`name`)
|
|
||||||
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8;
|
|
||||||
|
|
||||||
CREATE TABLE IF NOT EXISTS `players` (
|
|
||||||
`id` int NOT NULL AUTO_INCREMENT,
|
|
||||||
`name` varchar(255) NOT NULL,
|
|
||||||
`group_id` int NOT NULL DEFAULT '1',
|
|
||||||
`account_id` int NOT NULL DEFAULT '0',
|
|
||||||
`level` int NOT NULL DEFAULT '1',
|
|
||||||
`vocation` int NOT NULL DEFAULT '0',
|
|
||||||
`health` int NOT NULL DEFAULT '150',
|
|
||||||
`healthmax` int NOT NULL DEFAULT '150',
|
|
||||||
`experience` bigint unsigned NOT NULL DEFAULT '0',
|
|
||||||
`lookbody` int NOT NULL DEFAULT '0',
|
|
||||||
`lookfeet` int NOT NULL DEFAULT '0',
|
|
||||||
`lookhead` int NOT NULL DEFAULT '0',
|
|
||||||
`looklegs` int NOT NULL DEFAULT '0',
|
|
||||||
`looktype` int NOT NULL DEFAULT '136',
|
|
||||||
`lookaddons` int NOT NULL DEFAULT '0',
|
|
||||||
`lookmount` int NOT NULL DEFAULT '0',
|
|
||||||
`lookmounthead` int NOT NULL DEFAULT '0',
|
|
||||||
`lookmountbody` int NOT NULL DEFAULT '0',
|
|
||||||
`lookmountlegs` int NOT NULL DEFAULT '0',
|
|
||||||
`lookmountfeet` int NOT NULL DEFAULT '0',
|
|
||||||
`randomizemount` tinyint NOT NULL DEFAULT '0',
|
|
||||||
`direction` tinyint unsigned NOT NULL DEFAULT '2',
|
|
||||||
`maglevel` int NOT NULL DEFAULT '0',
|
|
||||||
`mana` int NOT NULL DEFAULT '0',
|
|
||||||
`manamax` int NOT NULL DEFAULT '0',
|
|
||||||
`manaspent` bigint unsigned NOT NULL DEFAULT '0',
|
|
||||||
`soul` int unsigned NOT NULL DEFAULT '0',
|
|
||||||
`town_id` int NOT NULL DEFAULT '1',
|
|
||||||
`posx` int NOT NULL DEFAULT '0',
|
|
||||||
`posy` int NOT NULL DEFAULT '0',
|
|
||||||
`posz` int NOT NULL DEFAULT '0',
|
|
||||||
`conditions` blob DEFAULT NULL,
|
|
||||||
`cap` int NOT NULL DEFAULT '400',
|
|
||||||
`sex` int NOT NULL DEFAULT '0',
|
|
||||||
`lastlogin` bigint unsigned NOT NULL DEFAULT '0',
|
|
||||||
`lastip` varbinary(16) NOT NULL DEFAULT '0',
|
|
||||||
`save` tinyint NOT NULL DEFAULT '1',
|
|
||||||
`skull` tinyint NOT NULL DEFAULT '0',
|
|
||||||
`skulltime` bigint NOT NULL DEFAULT '0',
|
|
||||||
`lastlogout` bigint unsigned NOT NULL DEFAULT '0',
|
|
||||||
`blessings` tinyint NOT NULL DEFAULT '0',
|
|
||||||
`onlinetime` bigint NOT NULL DEFAULT '0',
|
|
||||||
`deletion` bigint NOT NULL DEFAULT '0',
|
|
||||||
`balance` bigint unsigned NOT NULL DEFAULT '0',
|
|
||||||
`offlinetraining_time` smallint unsigned NOT NULL DEFAULT '43200',
|
|
||||||
`offlinetraining_skill` int NOT NULL DEFAULT '-1',
|
|
||||||
`stamina` smallint unsigned NOT NULL DEFAULT '2520',
|
|
||||||
`skill_fist` int unsigned NOT NULL DEFAULT 10,
|
|
||||||
`skill_fist_tries` bigint unsigned NOT NULL DEFAULT 0,
|
|
||||||
`skill_club` int unsigned NOT NULL DEFAULT 10,
|
|
||||||
`skill_club_tries` bigint unsigned NOT NULL DEFAULT 0,
|
|
||||||
`skill_sword` int unsigned NOT NULL DEFAULT 10,
|
|
||||||
`skill_sword_tries` bigint unsigned NOT NULL DEFAULT 0,
|
|
||||||
`skill_axe` int unsigned NOT NULL DEFAULT 10,
|
|
||||||
`skill_axe_tries` bigint unsigned NOT NULL DEFAULT 0,
|
|
||||||
`skill_dist` int unsigned NOT NULL DEFAULT 10,
|
|
||||||
`skill_dist_tries` bigint unsigned NOT NULL DEFAULT 0,
|
|
||||||
`skill_shielding` int unsigned NOT NULL DEFAULT 10,
|
|
||||||
`skill_shielding_tries` bigint unsigned NOT NULL DEFAULT 0,
|
|
||||||
`skill_fishing` int unsigned NOT NULL DEFAULT 10,
|
|
||||||
`skill_fishing_tries` bigint unsigned NOT NULL DEFAULT 0,
|
|
||||||
PRIMARY KEY (`id`),
|
|
||||||
UNIQUE KEY `name` (`name`),
|
|
||||||
FOREIGN KEY (`account_id`) REFERENCES `accounts` (`id`) ON DELETE CASCADE,
|
|
||||||
KEY `vocation` (`vocation`)
|
|
||||||
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8;
|
|
||||||
|
|
||||||
CREATE TABLE IF NOT EXISTS `account_bans` (
|
|
||||||
`account_id` int NOT NULL,
|
|
||||||
`reason` varchar(255) NOT NULL,
|
|
||||||
`banned_at` bigint NOT NULL,
|
|
||||||
`expires_at` bigint NOT NULL,
|
|
||||||
`banned_by` int NOT NULL,
|
|
||||||
PRIMARY KEY (`account_id`),
|
|
||||||
FOREIGN KEY (`account_id`) REFERENCES `accounts` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
|
|
||||||
FOREIGN KEY (`banned_by`) REFERENCES `players` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
|
|
||||||
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8;
|
|
||||||
|
|
||||||
CREATE TABLE IF NOT EXISTS `account_ban_history` (
|
|
||||||
`id` int unsigned NOT NULL AUTO_INCREMENT,
|
|
||||||
`account_id` int NOT NULL,
|
|
||||||
`reason` varchar(255) NOT NULL,
|
|
||||||
`banned_at` bigint NOT NULL,
|
|
||||||
`expired_at` bigint NOT NULL,
|
|
||||||
`banned_by` int NOT NULL,
|
|
||||||
PRIMARY KEY (`id`),
|
|
||||||
FOREIGN KEY (`account_id`) REFERENCES `accounts` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
|
|
||||||
FOREIGN KEY (`banned_by`) REFERENCES `players` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
|
|
||||||
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8;
|
|
||||||
|
|
||||||
CREATE TABLE IF NOT EXISTS `account_storage` (
|
|
||||||
`account_id` int NOT NULL,
|
|
||||||
`key` int unsigned NOT NULL,
|
|
||||||
`value` int NOT NULL,
|
|
||||||
PRIMARY KEY (`account_id`, `key`),
|
|
||||||
FOREIGN KEY (`account_id`) REFERENCES `accounts`(`id`) ON DELETE CASCADE
|
|
||||||
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8;
|
|
||||||
|
|
||||||
CREATE TABLE IF NOT EXISTS `ip_bans` (
|
|
||||||
`ip` varbinary(16) NOT NULL,
|
|
||||||
`reason` varchar(255) NOT NULL,
|
|
||||||
`banned_at` bigint NOT NULL,
|
|
||||||
`expires_at` bigint NOT NULL,
|
|
||||||
`banned_by` int NOT NULL,
|
|
||||||
PRIMARY KEY (`ip`),
|
|
||||||
FOREIGN KEY (`banned_by`) REFERENCES `players` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
|
|
||||||
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8;
|
|
||||||
|
|
||||||
CREATE TABLE IF NOT EXISTS `player_namelocks` (
|
|
||||||
`player_id` int NOT NULL,
|
|
||||||
`reason` varchar(255) NOT NULL,
|
|
||||||
`namelocked_at` bigint NOT NULL,
|
|
||||||
`namelocked_by` int NOT NULL,
|
|
||||||
PRIMARY KEY (`player_id`),
|
|
||||||
FOREIGN KEY (`player_id`) REFERENCES `players` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
|
|
||||||
FOREIGN KEY (`namelocked_by`) REFERENCES `players` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
|
|
||||||
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8;
|
|
||||||
|
|
||||||
CREATE TABLE IF NOT EXISTS `account_viplist` (
|
|
||||||
`account_id` int NOT NULL COMMENT 'id of account whose viplist entry it is',
|
|
||||||
`player_id` int NOT NULL COMMENT 'id of target player of viplist entry',
|
|
||||||
`description` varchar(128) NOT NULL DEFAULT '',
|
|
||||||
`icon` tinyint unsigned NOT NULL DEFAULT '0',
|
|
||||||
`notify` tinyint NOT NULL DEFAULT '0',
|
|
||||||
UNIQUE KEY `account_player_index` (`account_id`,`player_id`),
|
|
||||||
FOREIGN KEY (`account_id`) REFERENCES `accounts` (`id`) ON DELETE CASCADE,
|
|
||||||
FOREIGN KEY (`player_id`) REFERENCES `players` (`id`) ON DELETE CASCADE
|
|
||||||
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8;
|
|
||||||
|
|
||||||
CREATE TABLE IF NOT EXISTS `guilds` (
|
|
||||||
`id` int NOT NULL AUTO_INCREMENT,
|
|
||||||
`name` varchar(255) NOT NULL,
|
|
||||||
`ownerid` int NOT NULL,
|
|
||||||
`creationdata` int NOT NULL,
|
|
||||||
`motd` varchar(255) NOT NULL DEFAULT '',
|
|
||||||
PRIMARY KEY (`id`),
|
|
||||||
UNIQUE KEY (`name`),
|
|
||||||
UNIQUE KEY (`ownerid`),
|
|
||||||
FOREIGN KEY (`ownerid`) REFERENCES `players`(`id`) ON DELETE CASCADE
|
|
||||||
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8;
|
|
||||||
|
|
||||||
CREATE TABLE IF NOT EXISTS `guild_invites` (
|
|
||||||
`player_id` int NOT NULL DEFAULT '0',
|
|
||||||
`guild_id` int NOT NULL DEFAULT '0',
|
|
||||||
PRIMARY KEY (`player_id`,`guild_id`),
|
|
||||||
FOREIGN KEY (`player_id`) REFERENCES `players` (`id`) ON DELETE CASCADE,
|
|
||||||
FOREIGN KEY (`guild_id`) REFERENCES `guilds` (`id`) ON DELETE CASCADE
|
|
||||||
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8;
|
|
||||||
|
|
||||||
CREATE TABLE IF NOT EXISTS `guild_ranks` (
|
|
||||||
`id` int NOT NULL AUTO_INCREMENT,
|
|
||||||
`guild_id` int NOT NULL COMMENT 'guild',
|
|
||||||
`name` varchar(255) NOT NULL COMMENT 'rank name',
|
|
||||||
`level` int NOT NULL COMMENT 'rank level - leader, vice, member, maybe something else',
|
|
||||||
PRIMARY KEY (`id`),
|
|
||||||
FOREIGN KEY (`guild_id`) REFERENCES `guilds` (`id`) ON DELETE CASCADE
|
|
||||||
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8;
|
|
||||||
|
|
||||||
CREATE TABLE IF NOT EXISTS `guild_membership` (
|
|
||||||
`player_id` int NOT NULL,
|
|
||||||
`guild_id` int NOT NULL,
|
|
||||||
`rank_id` int NOT NULL,
|
|
||||||
`nick` varchar(15) NOT NULL DEFAULT '',
|
|
||||||
PRIMARY KEY (`player_id`),
|
|
||||||
FOREIGN KEY (`player_id`) REFERENCES `players` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
|
|
||||||
FOREIGN KEY (`guild_id`) REFERENCES `guilds` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
|
|
||||||
FOREIGN KEY (`rank_id`) REFERENCES `guild_ranks` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
|
|
||||||
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8;
|
|
||||||
|
|
||||||
CREATE TABLE IF NOT EXISTS `guild_wars` (
|
|
||||||
`id` int NOT NULL AUTO_INCREMENT,
|
|
||||||
`guild1` int NOT NULL DEFAULT '0',
|
|
||||||
`guild2` int NOT NULL DEFAULT '0',
|
|
||||||
`name1` varchar(255) NOT NULL,
|
|
||||||
`name2` varchar(255) NOT NULL,
|
|
||||||
`status` tinyint NOT NULL DEFAULT '0',
|
|
||||||
`started` bigint NOT NULL DEFAULT '0',
|
|
||||||
`ended` bigint NOT NULL DEFAULT '0',
|
|
||||||
PRIMARY KEY (`id`),
|
|
||||||
KEY `guild1` (`guild1`),
|
|
||||||
KEY `guild2` (`guild2`)
|
|
||||||
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8;
|
|
||||||
|
|
||||||
CREATE TABLE IF NOT EXISTS `guildwar_kills` (
|
|
||||||
`id` int NOT NULL AUTO_INCREMENT,
|
|
||||||
`killer` varchar(50) NOT NULL,
|
|
||||||
`target` varchar(50) NOT NULL,
|
|
||||||
`killerguild` int NOT NULL DEFAULT '0',
|
|
||||||
`targetguild` int NOT NULL DEFAULT '0',
|
|
||||||
`warid` int NOT NULL DEFAULT '0',
|
|
||||||
`time` bigint NOT NULL,
|
|
||||||
PRIMARY KEY (`id`),
|
|
||||||
FOREIGN KEY (`warid`) REFERENCES `guild_wars` (`id`) ON DELETE CASCADE
|
|
||||||
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8;
|
|
||||||
|
|
||||||
CREATE TABLE IF NOT EXISTS `houses` (
|
|
||||||
`id` int NOT NULL AUTO_INCREMENT,
|
|
||||||
`owner` int NOT NULL,
|
|
||||||
`paid` int unsigned NOT NULL DEFAULT '0',
|
|
||||||
`warnings` int NOT NULL DEFAULT '0',
|
|
||||||
`name` varchar(255) NOT NULL,
|
|
||||||
`rent` int NOT NULL DEFAULT '0',
|
|
||||||
`town_id` int NOT NULL DEFAULT '0',
|
|
||||||
`bid` int NOT NULL DEFAULT '0',
|
|
||||||
`bid_end` int NOT NULL DEFAULT '0',
|
|
||||||
`last_bid` int NOT NULL DEFAULT '0',
|
|
||||||
`highest_bidder` int NOT NULL DEFAULT '0',
|
|
||||||
`size` int NOT NULL DEFAULT '0',
|
|
||||||
`beds` int NOT NULL DEFAULT '0',
|
|
||||||
PRIMARY KEY (`id`),
|
|
||||||
KEY `owner` (`owner`),
|
|
||||||
KEY `town_id` (`town_id`)
|
|
||||||
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8;
|
|
||||||
|
|
||||||
CREATE TABLE IF NOT EXISTS `house_lists` (
|
|
||||||
`house_id` int NOT NULL,
|
|
||||||
`listid` int NOT NULL,
|
|
||||||
`list` text NOT NULL,
|
|
||||||
FOREIGN KEY (`house_id`) REFERENCES `houses` (`id`) ON DELETE CASCADE
|
|
||||||
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8;
|
|
||||||
|
|
||||||
CREATE TABLE IF NOT EXISTS `market_history` (
|
|
||||||
`id` int unsigned NOT NULL AUTO_INCREMENT,
|
|
||||||
`player_id` int NOT NULL,
|
|
||||||
`sale` tinyint NOT NULL DEFAULT '0',
|
|
||||||
`itemtype` smallint unsigned NOT NULL,
|
|
||||||
`amount` smallint unsigned NOT NULL,
|
|
||||||
`price` bigint unsigned NOT NULL DEFAULT '0',
|
|
||||||
`expires_at` bigint unsigned NOT NULL,
|
|
||||||
`inserted` bigint unsigned NOT NULL,
|
|
||||||
`state` tinyint unsigned NOT NULL,
|
|
||||||
PRIMARY KEY (`id`),
|
|
||||||
KEY `player_id` (`player_id`, `sale`),
|
|
||||||
FOREIGN KEY (`player_id`) REFERENCES `players`(`id`) ON DELETE CASCADE
|
|
||||||
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8;
|
|
||||||
|
|
||||||
CREATE TABLE IF NOT EXISTS `market_offers` (
|
|
||||||
`id` int unsigned NOT NULL AUTO_INCREMENT,
|
|
||||||
`player_id` int NOT NULL,
|
|
||||||
`sale` tinyint NOT NULL DEFAULT '0',
|
|
||||||
`itemtype` smallint unsigned NOT NULL,
|
|
||||||
`amount` smallint unsigned NOT NULL,
|
|
||||||
`created` bigint unsigned NOT NULL,
|
|
||||||
`anonymous` tinyint NOT NULL DEFAULT '0',
|
|
||||||
`price` bigint unsigned NOT NULL DEFAULT '0',
|
|
||||||
PRIMARY KEY (`id`),
|
|
||||||
KEY `sale` (`sale`,`itemtype`),
|
|
||||||
KEY `created` (`created`),
|
|
||||||
FOREIGN KEY (`player_id`) REFERENCES `players`(`id`) ON DELETE CASCADE
|
|
||||||
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8;
|
|
||||||
|
|
||||||
CREATE TABLE IF NOT EXISTS `players_online` (
|
|
||||||
`player_id` int NOT NULL,
|
|
||||||
PRIMARY KEY (`player_id`)
|
|
||||||
) ENGINE=MEMORY DEFAULT CHARACTER SET=utf8;
|
|
||||||
|
|
||||||
CREATE TABLE IF NOT EXISTS `player_deaths` (
|
|
||||||
`player_id` int NOT NULL,
|
|
||||||
`time` bigint unsigned NOT NULL DEFAULT '0',
|
|
||||||
`level` int NOT NULL DEFAULT '1',
|
|
||||||
`killed_by` varchar(255) NOT NULL,
|
|
||||||
`is_player` tinyint NOT NULL DEFAULT '1',
|
|
||||||
`mostdamage_by` varchar(100) NOT NULL,
|
|
||||||
`mostdamage_is_player` tinyint NOT NULL DEFAULT '0',
|
|
||||||
`unjustified` tinyint NOT NULL DEFAULT '0',
|
|
||||||
`mostdamage_unjustified` tinyint NOT NULL DEFAULT '0',
|
|
||||||
FOREIGN KEY (`player_id`) REFERENCES `players`(`id`) ON DELETE CASCADE,
|
|
||||||
KEY `killed_by` (`killed_by`),
|
|
||||||
KEY `mostdamage_by` (`mostdamage_by`)
|
|
||||||
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8;
|
|
||||||
|
|
||||||
CREATE TABLE IF NOT EXISTS `player_depotitems` (
|
|
||||||
`player_id` int NOT NULL,
|
|
||||||
`sid` int NOT NULL COMMENT 'any given range eg 0-100 will be reserved for depot lockers and all > 100 will be then normal items inside depots',
|
|
||||||
`pid` int NOT NULL DEFAULT '0',
|
|
||||||
`itemtype` smallint unsigned NOT NULL,
|
|
||||||
`count` smallint NOT NULL DEFAULT '0',
|
|
||||||
`attributes` blob NOT NULL,
|
|
||||||
UNIQUE KEY `player_id_2` (`player_id`, `sid`),
|
|
||||||
FOREIGN KEY (`player_id`) REFERENCES `players`(`id`) ON DELETE CASCADE
|
|
||||||
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8;
|
|
||||||
|
|
||||||
CREATE TABLE IF NOT EXISTS `player_inboxitems` (
|
|
||||||
`player_id` int NOT NULL,
|
|
||||||
`sid` int NOT NULL,
|
|
||||||
`pid` int NOT NULL DEFAULT '0',
|
|
||||||
`itemtype` smallint unsigned NOT NULL,
|
|
||||||
`count` smallint NOT NULL DEFAULT '0',
|
|
||||||
`attributes` blob NOT NULL,
|
|
||||||
UNIQUE KEY `player_id_2` (`player_id`, `sid`),
|
|
||||||
FOREIGN KEY (`player_id`) REFERENCES `players`(`id`) ON DELETE CASCADE
|
|
||||||
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8;
|
|
||||||
|
|
||||||
CREATE TABLE IF NOT EXISTS `player_storeinboxitems` (
|
|
||||||
`player_id` int NOT NULL,
|
|
||||||
`sid` int NOT NULL,
|
|
||||||
`pid` int NOT NULL DEFAULT '0',
|
|
||||||
`itemtype` smallint unsigned NOT NULL,
|
|
||||||
`count` smallint NOT NULL DEFAULT '0',
|
|
||||||
`attributes` blob NOT NULL,
|
|
||||||
UNIQUE KEY `player_id_2` (`player_id`, `sid`),
|
|
||||||
FOREIGN KEY (`player_id`) REFERENCES `players`(`id`) ON DELETE CASCADE
|
|
||||||
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8;
|
|
||||||
|
|
||||||
CREATE TABLE IF NOT EXISTS `player_items` (
|
|
||||||
`player_id` int NOT NULL DEFAULT '0',
|
|
||||||
`pid` int NOT NULL DEFAULT '0',
|
|
||||||
`sid` int NOT NULL DEFAULT '0',
|
|
||||||
`itemtype` smallint unsigned NOT NULL DEFAULT '0',
|
|
||||||
`count` smallint NOT NULL DEFAULT '0',
|
|
||||||
`attributes` blob NOT NULL,
|
|
||||||
FOREIGN KEY (`player_id`) REFERENCES `players`(`id`) ON DELETE CASCADE,
|
|
||||||
KEY `sid` (`sid`)
|
|
||||||
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8;
|
|
||||||
|
|
||||||
CREATE TABLE IF NOT EXISTS `player_spells` (
|
|
||||||
`player_id` int NOT NULL,
|
|
||||||
`name` varchar(255) NOT NULL,
|
|
||||||
FOREIGN KEY (`player_id`) REFERENCES `players`(`id`) ON DELETE CASCADE
|
|
||||||
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8;
|
|
||||||
|
|
||||||
CREATE TABLE IF NOT EXISTS `player_storage` (
|
|
||||||
`player_id` int NOT NULL DEFAULT '0',
|
|
||||||
`key` int unsigned NOT NULL DEFAULT '0',
|
|
||||||
`value` int NOT NULL DEFAULT '0',
|
|
||||||
PRIMARY KEY (`player_id`,`key`),
|
|
||||||
FOREIGN KEY (`player_id`) REFERENCES `players`(`id`) ON DELETE CASCADE
|
|
||||||
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8;
|
|
||||||
|
|
||||||
CREATE TABLE IF NOT EXISTS `server_config` (
|
|
||||||
`config` varchar(50) NOT NULL,
|
|
||||||
`value` varchar(256) NOT NULL DEFAULT '',
|
|
||||||
PRIMARY KEY `config` (`config`)
|
|
||||||
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8;
|
|
||||||
|
|
||||||
CREATE TABLE IF NOT EXISTS `tile_store` (
|
|
||||||
`house_id` int NOT NULL,
|
|
||||||
`data` longblob NOT NULL,
|
|
||||||
FOREIGN KEY (`house_id`) REFERENCES `houses` (`id`) ON DELETE CASCADE
|
|
||||||
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8;
|
|
||||||
|
|
||||||
CREATE TABLE IF NOT EXISTS `towns` (
|
|
||||||
`id` int NOT NULL AUTO_INCREMENT,
|
|
||||||
`name` varchar(255) NOT NULL,
|
|
||||||
`posx` int NOT NULL DEFAULT '0',
|
|
||||||
`posy` int NOT NULL DEFAULT '0',
|
|
||||||
`posz` int NOT NULL DEFAULT '0',
|
|
||||||
PRIMARY KEY (`id`),
|
|
||||||
UNIQUE KEY `name` (`name`)
|
|
||||||
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8;
|
|
||||||
|
|
||||||
INSERT INTO `server_config` (`config`, `value`) VALUES ('db_version', '35'), ('players_record', '0');
|
|
||||||
|
|
||||||
DROP TRIGGER IF EXISTS `ondelete_players`;
|
|
||||||
DROP TRIGGER IF EXISTS `oncreate_guilds`;
|
|
||||||
|
|
||||||
DELIMITER //
|
|
||||||
CREATE TRIGGER `ondelete_players` BEFORE DELETE ON `players`
|
|
||||||
FOR EACH ROW BEGIN
|
|
||||||
UPDATE `houses` SET `owner` = 0 WHERE `owner` = OLD.`id`;
|
|
||||||
END
|
|
||||||
//
|
|
||||||
CREATE TRIGGER `oncreate_guilds` AFTER INSERT ON `guilds`
|
|
||||||
FOR EACH ROW BEGIN
|
|
||||||
INSERT INTO `guild_ranks` (`name`, `level`, `guild_id`) VALUES ('the Leader', 3, NEW.`id`);
|
|
||||||
INSERT INTO `guild_ranks` (`name`, `level`, `guild_id`) VALUES ('a Vice-Leader', 2, NEW.`id`);
|
|
||||||
INSERT INTO `guild_ranks` (`name`, `level`, `guild_id`) VALUES ('a Member', 1, NEW.`id`);
|
|
||||||
END
|
|
||||||
//
|
|
||||||
DELIMITER ;
|
|
@@ -134,7 +134,7 @@ if(setting('core.anonymous_usage_statistics')) {
|
|||||||
if(fetchDatabaseConfig('last_usage_report', $value)) {
|
if(fetchDatabaseConfig('last_usage_report', $value)) {
|
||||||
$should_report = time() > (int)$value + $report_time;
|
$should_report = time() > (int)$value + $report_time;
|
||||||
if($cache->enabled()) {
|
if($cache->enabled()) {
|
||||||
$cache->set('last_usage_report', $value);
|
$cache->set('last_usage_report', $value, 60 * 60);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
@@ -148,7 +148,7 @@ if(setting('core.anonymous_usage_statistics')) {
|
|||||||
|
|
||||||
updateDatabaseConfig('last_usage_report', time());
|
updateDatabaseConfig('last_usage_report', time());
|
||||||
if($cache->enabled()) {
|
if($cache->enabled()) {
|
||||||
$cache->set('last_usage_report', time());
|
$cache->set('last_usage_report', time(), 60 * 60);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
SET @myaac_database_version = 41;
|
SET @myaac_database_version = 42;
|
||||||
|
|
||||||
CREATE TABLE `myaac_account_actions`
|
CREATE TABLE `myaac_account_actions`
|
||||||
(
|
(
|
||||||
@@ -91,7 +91,7 @@ CREATE TABLE `myaac_forum`
|
|||||||
`post_date` int(20) NOT NULL default '0',
|
`post_date` int(20) NOT NULL default '0',
|
||||||
`last_edit_aid` int(20) NOT NULL default '0',
|
`last_edit_aid` int(20) NOT NULL default '0',
|
||||||
`edit_date` int(20) NOT NULL default '0',
|
`edit_date` int(20) NOT NULL default '0',
|
||||||
`post_ip` varchar(32) NOT NULL default '0.0.0.0',
|
`post_ip` varchar(45) NOT NULL default '0.0.0.0',
|
||||||
`sticked` tinyint(1) NOT NULL DEFAULT '0',
|
`sticked` tinyint(1) NOT NULL DEFAULT '0',
|
||||||
`closed` tinyint(1) NOT NULL DEFAULT '0',
|
`closed` tinyint(1) NOT NULL DEFAULT '0',
|
||||||
PRIMARY KEY (`id`),
|
PRIMARY KEY (`id`),
|
||||||
|
@@ -195,7 +195,7 @@ if(is_writable(CACHE) && (MYAAC_OS != 'WINDOWS' || win_is_writable(CACHE))) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!$allow && !config('install_ignore_ip_check'))
|
if(!$allow)
|
||||||
{
|
{
|
||||||
$content = warning('In file <b>install/ip.txt</b> must be your IP!<br/>
|
$content = warning('In file <b>install/ip.txt</b> must be your IP!<br/>
|
||||||
In file is:<br /><b>' . nl2br($file_content) . '</b><br/>
|
In file is:<br /><b>' . nl2br($file_content) . '</b><br/>
|
||||||
|
@@ -11,7 +11,6 @@ foreach($config['clients'] as $client) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
$twig->display('install.config.html.twig', array(
|
$twig->display('install.config.html.twig', array(
|
||||||
'config' => $config,
|
|
||||||
'clients' => $clients,
|
'clients' => $clients,
|
||||||
'timezones' => DateTimeZone::listIdentifiers(),
|
'timezones' => DateTimeZone::listIdentifiers(),
|
||||||
'locale' => $locale,
|
'locale' => $locale,
|
||||||
|
@@ -41,9 +41,6 @@ if(!$error) {
|
|||||||
$configToSave['cache_engine'] = 'auto';
|
$configToSave['cache_engine'] = 'auto';
|
||||||
$configToSave['cache_prefix'] = 'myaac_' . generateRandomString(8, true, false, true);
|
$configToSave['cache_prefix'] = 'myaac_' . generateRandomString(8, true, false, true);
|
||||||
$configToSave['database_auto_migrate'] = true;
|
$configToSave['database_auto_migrate'] = true;
|
||||||
if (isset($config['install_ignore_ip_check'])) {
|
|
||||||
$configToSave['install_ignore_ip_check'] = $config['install_ignore_ip_check'];
|
|
||||||
}
|
|
||||||
|
|
||||||
if(!$error) {
|
if(!$error) {
|
||||||
$content = '';
|
$content = '';
|
||||||
@@ -80,7 +77,7 @@ if(!$error) {
|
|||||||
$_SESSION['config_content'] = $content;
|
$_SESSION['config_content'] = $content;
|
||||||
unset($_SESSION['saved']);
|
unset($_SESSION['saved']);
|
||||||
|
|
||||||
$locale['step_database_error_file'] = str_replace('$FILE$', '<b>' . BASE . 'config.local.php</b>', $locale['step_database_error_file']);
|
$locale['step_database_error_file'] = str_replace('$FILE$', '<b>' . BASE . 'config.php</b>', $locale['step_database_error_file']);
|
||||||
error($locale['step_database_error_file'] . '<br/>
|
error($locale['step_database_error_file'] . '<br/>
|
||||||
<textarea cols="70" rows="10">' . $content . '</textarea>');
|
<textarea cols="70" rows="10">' . $content . '</textarea>');
|
||||||
}
|
}
|
||||||
|
@@ -12,10 +12,6 @@ server {
|
|||||||
deny all;
|
deny all;
|
||||||
}
|
}
|
||||||
|
|
||||||
location /vendor {
|
|
||||||
deny all;
|
|
||||||
}
|
|
||||||
|
|
||||||
# block .htaccess, CHANGELOG.md, composer.json etc.
|
# block .htaccess, CHANGELOG.md, composer.json etc.
|
||||||
# this is to prevent finding software versions
|
# this is to prevent finding software versions
|
||||||
location ~\.(ht|md|json|dist)$ {
|
location ~\.(ht|md|json|dist)$ {
|
||||||
@@ -28,7 +24,7 @@ server {
|
|||||||
}
|
}
|
||||||
|
|
||||||
location / {
|
location / {
|
||||||
try_files $uri $uri/ /index.php?$query_string;;
|
try_files $uri $uri/ /index.php?$query_string;
|
||||||
}
|
}
|
||||||
|
|
||||||
location ~ \.php$ {
|
location ~ \.php$ {
|
||||||
|
901
package-lock.json
generated
901
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@@ -4,7 +4,7 @@
|
|||||||
"postinstall": "node ./npm-post-install.js"
|
"postinstall": "node ./npm-post-install.js"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"cypress": "^12.12.0"
|
"cypress": "^13.17.0"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@tinymce/tinymce-jquery": "^2.1.0",
|
"@tinymce/tinymce-jquery": "^2.1.0",
|
||||||
@@ -12,6 +12,6 @@
|
|||||||
"fs-extra": "^11.2.0",
|
"fs-extra": "^11.2.0",
|
||||||
"jquery": "^3.7.1",
|
"jquery": "^3.7.1",
|
||||||
"jquery-ui": "^1.13.2",
|
"jquery-ui": "^1.13.2",
|
||||||
"tinymce": "^6.8.3"
|
"tinymce": "^7.2.0"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -22,7 +22,7 @@ if [ $1 = "prepare" ]; then
|
|||||||
mkdir -p tmp
|
mkdir -p tmp
|
||||||
|
|
||||||
# get myaac from git archive
|
# get myaac from git archive
|
||||||
git archive --format zip --output tmp/myaac.zip develop
|
git archive --format zip --output tmp/myaac.zip master
|
||||||
|
|
||||||
cd tmp/ || exit
|
cd tmp/ || exit
|
||||||
|
|
||||||
|
@@ -9,16 +9,16 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
use MyAAC\Exceptions\SensitiveException;
|
use MyAAC\Exceptions\SensitiveException;
|
||||||
|
use Whoops\Handler\PlainTextHandler;
|
||||||
|
use Whoops\Handler\PrettyPageHandler;
|
||||||
|
use Whoops\Run;
|
||||||
|
|
||||||
if (class_exists(\Whoops\Run::class)) {
|
if (class_exists(Run::class)) {
|
||||||
$whoops = new \Whoops\Run;
|
$whoops = new Run;
|
||||||
if(IS_CLI) {
|
|
||||||
$whoops->pushHandler(new \Whoops\Handler\PlainTextHandler);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
$whoops->pushHandler(new \Whoops\Handler\PrettyPageHandler);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
$whoopsHandler = IS_CLI ? (new PlainTextHandler()) : (new PrettyPageHandler());
|
||||||
|
|
||||||
|
$whoops->pushHandler($whoopsHandler);
|
||||||
$whoops->register();
|
$whoops->register();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@@ -589,24 +589,12 @@ function template_form()
|
|||||||
{
|
{
|
||||||
global $template_name;
|
global $template_name;
|
||||||
|
|
||||||
$cache = Cache::getInstance();
|
$templates = Cache::remember('templates', 5 * 60, function() {
|
||||||
if($cache->enabled())
|
return get_templates();
|
||||||
{
|
});
|
||||||
$tmp = '';
|
|
||||||
if($cache->fetch('templates', $tmp)) {
|
|
||||||
$templates = unserialize($tmp);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
$templates = get_templates();
|
|
||||||
$cache->set('templates', serialize($templates), 30);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
$templates = get_templates();
|
|
||||||
|
|
||||||
$options = '';
|
$options = '';
|
||||||
foreach($templates as $key => $value)
|
foreach($templates as $value)
|
||||||
$options .= '<option ' . ($template_name == $value ? 'SELECTED' : '') . '>' . $value . '</option>';
|
$options .= '<option ' . ($template_name == $value ? 'SELECTED' : '') . '>' . $value . '</option>';
|
||||||
|
|
||||||
global $twig;
|
global $twig;
|
||||||
@@ -1102,20 +1090,16 @@ function csrfProtect(): void
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function getTopPlayers($limit = 5) {
|
function getTopPlayers($limit = 5, $skill = 'level') {
|
||||||
global $db;
|
global $db;
|
||||||
|
|
||||||
$cache = Cache::getInstance();
|
if ($skill === 'level') {
|
||||||
if($cache->enabled()) {
|
$skill = 'experience';
|
||||||
$tmp = '';
|
|
||||||
if($cache->fetch('top_' . $limit . '_level', $tmp)) {
|
|
||||||
$players = unserialize($tmp);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!isset($players)) {
|
return Cache::remember("top_{$limit}_{$skill}", 2 * 60, function () use ($db, $limit, $skill) {
|
||||||
$columns = [
|
$columns = [
|
||||||
'id', 'name', 'level', 'vocation', 'experience',
|
'id', 'name', 'level', 'vocation', 'experience', 'balance',
|
||||||
'looktype', 'lookhead', 'lookbody', 'looklegs', 'lookfeet'
|
'looktype', 'lookhead', 'lookbody', 'looklegs', 'lookfeet'
|
||||||
];
|
];
|
||||||
|
|
||||||
@@ -1127,32 +1111,27 @@ function getTopPlayers($limit = 5) {
|
|||||||
$columns[] = 'online';
|
$columns[] = 'online';
|
||||||
}
|
}
|
||||||
|
|
||||||
$players = Player::query()
|
return Player::query()
|
||||||
->select($columns)
|
->select($columns)
|
||||||
->withOnlineStatus()
|
->withOnlineStatus()
|
||||||
->notDeleted()
|
->notDeleted()
|
||||||
->where('group_id', '<', setting('core.highscores_groups_hidden'))
|
->where('group_id', '<', setting('core.highscores_groups_hidden'))
|
||||||
->whereNotIn('id', setting('core.highscores_ids_hidden'))
|
->whereNotIn('id', setting('core.highscores_ids_hidden'))
|
||||||
->where('account_id', '!=', 1)
|
->where('account_id', '!=', 1)
|
||||||
->orderByDesc('experience')
|
->orderByDesc($skill)
|
||||||
->limit($limit)
|
->limit($limit)
|
||||||
->get()
|
->get()
|
||||||
->map(function ($e, $i) {
|
->map(function ($e, $i) {
|
||||||
$row = $e->toArray();
|
$row = $e->toArray();
|
||||||
$row['online'] = $e->online_status;
|
$row['online'] = $e->online_status;
|
||||||
$row['rank'] = $i + 1;
|
$row['rank'] = $i + 1;
|
||||||
|
$row['outfit_url'] = $e->outfit_url;
|
||||||
|
|
||||||
unset($row['online_table']);
|
unset($row['online_table']);
|
||||||
|
|
||||||
return $row;
|
return $row;
|
||||||
})->toArray();
|
})->toArray();
|
||||||
|
});
|
||||||
if($cache->enabled()) {
|
|
||||||
$cache->set('top_' . $limit . '_level', serialize($players), 120);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return $players;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function deleteDirectory($dir, $ignore = array(), $contentOnly = false) {
|
function deleteDirectory($dir, $ignore = array(), $contentOnly = false) {
|
||||||
|
@@ -96,8 +96,8 @@ if($config_lua_reload) {
|
|||||||
|
|
||||||
// cache config
|
// cache config
|
||||||
if($cache->enabled()) {
|
if($cache->enabled()) {
|
||||||
$cache->set('config_lua', serialize($config['lua']), 120);
|
$cache->set('config_lua', serialize($config['lua']), 2 * 60);
|
||||||
$cache->set('server_path', $config['server_path']);
|
$cache->set('server_path', $config['server_path'], 10 * 60);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
unset($tmp);
|
unset($tmp);
|
||||||
|
@@ -1752,11 +1752,6 @@ class OTS_Player extends OTS_Row_DAO
|
|||||||
*/
|
*/
|
||||||
public function getConditions()
|
public function getConditions()
|
||||||
{
|
{
|
||||||
if( !isset($this->data['conditions']) )
|
|
||||||
{
|
|
||||||
throw new E_OTS_NotLoaded();
|
|
||||||
}
|
|
||||||
|
|
||||||
return $this->data['conditions'];
|
return $this->data['conditions'];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -8,7 +8,7 @@
|
|||||||
// the size of ipv6 can be maximal 45 chars
|
// the size of ipv6 can be maximal 45 chars
|
||||||
|
|
||||||
$up = function () use ($db) {
|
$up = function () use ($db) {
|
||||||
$db->modifyColumn(TABLE_PREFIX . 'visitors', 'ip', 'VARCHAR(15) NOT NULL');
|
$db->modifyColumn(TABLE_PREFIX . 'visitors', 'ip', 'VARCHAR(45) NOT NULL');
|
||||||
};
|
};
|
||||||
|
|
||||||
$down = function () {
|
$down = function () {
|
||||||
|
15
system/migrations/42.php
Normal file
15
system/migrations/42.php
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* @var OTS_DB_MySQL $db
|
||||||
|
*/
|
||||||
|
|
||||||
|
// 2025-09-01
|
||||||
|
// resize forum.post_ip to support ipv6
|
||||||
|
$up = function () use ($db) {
|
||||||
|
$db->modifyColumn(TABLE_PREFIX . 'forum', 'post_ip', "varchar(45) NOT NULL default '0.0.0.0'");
|
||||||
|
};
|
||||||
|
|
||||||
|
$down = function () {
|
||||||
|
// there is no downgrade for this
|
||||||
|
};
|
||||||
|
|
@@ -66,7 +66,7 @@ else
|
|||||||
$new_sex_str = $config['genders'][$new_sex];
|
$new_sex_str = $config['genders'][$new_sex];
|
||||||
|
|
||||||
$player->save();
|
$player->save();
|
||||||
$account_logged->setCustomField(setting('core.donate_column'), $points - setting('core.account_change_character_name_price'));
|
$account_logged->setCustomField(setting('core.donate_column'), $points - setting('core.account_change_character_sex_price'));
|
||||||
$account_logged->logAction('Changed sex on character <b>' . $player->getName() . '</b> from <b>' . $old_sex_str . '</b> to <b>' . $new_sex_str . '</b>.');
|
$account_logged->logAction('Changed sex on character <b>' . $player->getName() . '</b> from <b>' . $old_sex_str . '</b> to <b>' . $new_sex_str . '</b>.');
|
||||||
$twig->display('success.html.twig', array(
|
$twig->display('success.html.twig', array(
|
||||||
'title' => 'Character Sex Changed',
|
'title' => 'Character Sex Changed',
|
||||||
|
@@ -35,7 +35,7 @@ if(Forum::canPost($account_logged))
|
|||||||
$thread = $db->query("SELECT `author_guid`, `author_aid`, `first_post`, `post_topic`, `post_date`, `post_text`, `post_smile`, `post_html`, `id`, `section` FROM `" . FORUM_TABLE_PREFIX . "forum` WHERE `id` = ".$post_id." LIMIT 1")->fetch();
|
$thread = $db->query("SELECT `author_guid`, `author_aid`, `first_post`, `post_topic`, `post_date`, `post_text`, `post_smile`, `post_html`, `id`, `section` FROM `" . FORUM_TABLE_PREFIX . "forum` WHERE `id` = ".$post_id." LIMIT 1")->fetch();
|
||||||
if(isset($thread['id'])) {
|
if(isset($thread['id'])) {
|
||||||
$first_post = $db->query("SELECT `" . FORUM_TABLE_PREFIX . "forum`.`author_guid`, `" . FORUM_TABLE_PREFIX . "forum`.`author_aid`, `" . FORUM_TABLE_PREFIX . "forum`.`first_post`, `" . FORUM_TABLE_PREFIX . "forum`.`post_topic`, `" . FORUM_TABLE_PREFIX . "forum`.`post_text`, `" . FORUM_TABLE_PREFIX . "forum`.`post_smile`, `" . FORUM_TABLE_PREFIX . "forum`.`id`, `" . FORUM_TABLE_PREFIX . "forum`.`section` FROM `" . FORUM_TABLE_PREFIX . "forum` WHERE `" . FORUM_TABLE_PREFIX . "forum`.`id` = ".(int) $thread['first_post']." LIMIT 1")->fetch();
|
$first_post = $db->query("SELECT `" . FORUM_TABLE_PREFIX . "forum`.`author_guid`, `" . FORUM_TABLE_PREFIX . "forum`.`author_aid`, `" . FORUM_TABLE_PREFIX . "forum`.`first_post`, `" . FORUM_TABLE_PREFIX . "forum`.`post_topic`, `" . FORUM_TABLE_PREFIX . "forum`.`post_text`, `" . FORUM_TABLE_PREFIX . "forum`.`post_smile`, `" . FORUM_TABLE_PREFIX . "forum`.`id`, `" . FORUM_TABLE_PREFIX . "forum`.`section` FROM `" . FORUM_TABLE_PREFIX . "forum` WHERE `" . FORUM_TABLE_PREFIX . "forum`.`id` = ".(int) $thread['first_post']." LIMIT 1")->fetch();
|
||||||
echo '<a href="' . getLink('forum') . '">Boards</a> >> <a href="' . getForumBoardLink($thread['section']) . '">'.$sections[$thread['section']]['name'].'</a> >> <a href="' . getForumThreadLink($thread['first_post']) . '">'.$first_post['post_topic'].'</a> >> <b>Edit post</b>';
|
echo '<a href="' . getLink('forum') . '">Boards</a> >> <a href="' . getForumBoardLink($thread['section']) . '">'.$sections[$thread['section']]['name'].'</a> >> <a href="' . getForumThreadLink($thread['first_post']) . '">'.htmlspecialchars($first_post['post_topic']).'</a> >> <b>Edit post</b>';
|
||||||
|
|
||||||
if(Forum::hasAccess($thread['section'] && ($account_logged->getId() == $thread['author_aid'] || Forum::isModerator()))) {
|
if(Forum::hasAccess($thread['section'] && ($account_logged->getId() == $thread['author_aid'] || Forum::isModerator()))) {
|
||||||
$char_id = $post_topic = $text = $smile = $html = null;
|
$char_id = $post_topic = $text = $smile = $html = null;
|
||||||
|
@@ -25,6 +25,7 @@ if(!$logged) {
|
|||||||
|
|
||||||
if(!Forum::isModerator()) {
|
if(!Forum::isModerator()) {
|
||||||
echo 'You are not logged in or you are not moderator.';
|
echo 'You are not logged in or you are not moderator.';
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
$save = isset($_REQUEST['save']) && (int)$_REQUEST['save'] == 1;
|
$save = isset($_REQUEST['save']) && (int)$_REQUEST['save'] == 1;
|
||||||
|
@@ -40,7 +40,7 @@ if(Forum::canPost($account_logged)) {
|
|||||||
$thread = $db->query("SELECT `" . FORUM_TABLE_PREFIX . "forum`.`post_topic`, `" . FORUM_TABLE_PREFIX . "forum`.`id`, `" . FORUM_TABLE_PREFIX . "forum`.`section` FROM `" . FORUM_TABLE_PREFIX . "forum` WHERE `" . FORUM_TABLE_PREFIX . "forum`.`id` = ".(int) $thread_id." AND `" . FORUM_TABLE_PREFIX . "forum`.`first_post` = ".$thread_id." LIMIT 1")->fetch();
|
$thread = $db->query("SELECT `" . FORUM_TABLE_PREFIX . "forum`.`post_topic`, `" . FORUM_TABLE_PREFIX . "forum`.`id`, `" . FORUM_TABLE_PREFIX . "forum`.`section` FROM `" . FORUM_TABLE_PREFIX . "forum` WHERE `" . FORUM_TABLE_PREFIX . "forum`.`id` = ".(int) $thread_id." AND `" . FORUM_TABLE_PREFIX . "forum`.`first_post` = ".$thread_id." LIMIT 1")->fetch();
|
||||||
|
|
||||||
if(isset($thread['id']) && Forum::hasAccess($thread['section'])) {
|
if(isset($thread['id']) && Forum::hasAccess($thread['section'])) {
|
||||||
echo '<a href="' . getLink('forum') . '">Boards</a> >> <a href="' . getForumBoardLink($thread['section']) . '">'.$sections[$thread['section']]['name'].'</a> >> <a href="' . getForumThreadLink($thread_id) . '">'.$thread['post_topic'].'</a> >> <b>Post new reply</b><br /><h3>'.$thread['post_topic'].'</h3>';
|
echo '<a href="' . getLink('forum') . '">Boards</a> >> <a href="' . getForumBoardLink($thread['section']) . '">'.$sections[$thread['section']]['name'].'</a> >> <a href="' . getForumThreadLink($thread_id) . '">'.htmlspecialchars($thread['post_topic']).'</a> >> <b>Post new reply</b><br /><h3>'.htmlspecialchars($thread['post_topic']).'</h3>';
|
||||||
|
|
||||||
$quote = isset($_REQUEST['quote']) ? (int) $_REQUEST['quote'] : NULL;
|
$quote = isset($_REQUEST['quote']) ? (int) $_REQUEST['quote'] : NULL;
|
||||||
$text = isset($_REQUEST['text']) ? stripslashes(trim($_REQUEST['text'])) : NULL;
|
$text = isset($_REQUEST['text']) ? stripslashes(trim($_REQUEST['text'])) : NULL;
|
||||||
|
@@ -95,7 +95,23 @@ if(Forum::canPost($account_logged)) {
|
|||||||
if (count($errors) == 0) {
|
if (count($errors) == 0) {
|
||||||
$saved = true;
|
$saved = true;
|
||||||
|
|
||||||
$db->query("INSERT INTO `" . FORUM_TABLE_PREFIX . "forum` (`first_post` ,`last_post` ,`section` ,`replies` ,`views` ,`author_aid` ,`author_guid` ,`post_text` ,`post_topic` ,`post_smile`, `post_html` ,`post_date` ,`last_edit_aid` ,`edit_date`, `post_ip`) VALUES ('0', '" . time() . "', '" . (int)$section_id . "', '0', '0', '" . $account_logged->getId() . "', '" . $char_id . "', " . $db->quote($text) . ", " . $db->quote($post_topic) . ", '" . $smile . "', '" . $html . "', '" . time() . "', '0', '0', '" . get_browser_real_ip() . "')");
|
$db->insert(FORUM_TABLE_PREFIX . 'forum', [
|
||||||
|
'first_post' => 0,
|
||||||
|
'last_post' => time(),
|
||||||
|
'section' => $section_id,
|
||||||
|
'replies' => 0,
|
||||||
|
'views' => 0,
|
||||||
|
'author_aid' => $account_logged->getId(),
|
||||||
|
'author_guid' => $char_id,
|
||||||
|
'post_text' => $text,
|
||||||
|
'post_topic' => $post_topic,
|
||||||
|
'post_smile' => $smile,
|
||||||
|
'post_html' => $html,
|
||||||
|
'post_date' => time(),
|
||||||
|
'last_edit_aid' => 0,
|
||||||
|
'edit_date' => 0,
|
||||||
|
'post_ip' => get_browser_real_ip(),
|
||||||
|
]);
|
||||||
|
|
||||||
$thread_id = $db->lastInsertId();
|
$thread_id = $db->lastInsertId();
|
||||||
|
|
||||||
|
@@ -68,7 +68,7 @@ if(isset($last_threads[0])) {
|
|||||||
echo '<tr bgcolor="' . getStyle($number_of_rows++) . '"><td>';
|
echo '<tr bgcolor="' . getStyle($number_of_rows++) . '"><td>';
|
||||||
if(Forum::isModerator()) {
|
if(Forum::isModerator()) {
|
||||||
echo '<a href="' . getLink('forum') . '?action=move_thread&id='.$thread['id'].'"\')"><span style="color:darkgreen">[MOVE]</span></a>';
|
echo '<a href="' . getLink('forum') . '?action=move_thread&id='.$thread['id'].'"\')"><span style="color:darkgreen">[MOVE]</span></a>';
|
||||||
echo '<a href="' . getLink('forum') . '?action=remove_post&id='.$thread['id'].'" onclick="return confirm(\'Are you sure you want remove thread > '.$thread['post_topic'].' <?\')"><span style="color: red">[REMOVE]</span></a> ';
|
echo '<a href="' . getLink('forum') . '?action=remove_post&id='.$thread['id'].'" onclick="return confirm(\'Are you sure you want remove thread > '.htmlspecialchars($thread['post_topic']).' <?\')"><span style="color: red">[REMOVE]</span></a> ';
|
||||||
}
|
}
|
||||||
|
|
||||||
$player->load($thread['player_id']);
|
$player->load($thread['player_id']);
|
||||||
@@ -79,7 +79,7 @@ if(isset($last_threads[0])) {
|
|||||||
$player_account = $player->getAccount();
|
$player_account = $player->getAccount();
|
||||||
$canEditForum = $player_account->hasFlag(FLAG_CONTENT_FORUM) || $player_account->isAdmin();
|
$canEditForum = $player_account->hasFlag(FLAG_CONTENT_FORUM) || $player_account->isAdmin();
|
||||||
|
|
||||||
echo '<a href="' . getForumThreadLink($thread['id']) . '">'.($canEditForum ? $thread['post_topic'] : htmlspecialchars($thread['post_topic'])) . '</a><br /><small>'.($canEditForum ? substr(strip_tags($thread['post_text']), 0, 50) : htmlspecialchars(substr($thread['post_text'], 0, 50))).'...</small></td><td>' . getPlayerLink($thread['name']) . '</td><td>'.(int) $thread['replies'].'</td><td>'.(int) $thread['views'].'</td><td>';
|
echo '<a href="' . getForumThreadLink($thread['id']) . '">'.htmlspecialchars($thread['post_topic']). '</a><br /><small>'.($canEditForum ? substr(strip_tags($thread['post_text']), 0, 50) : htmlspecialchars(substr($thread['post_text'], 0, 50))).'...</small></td><td>' . getPlayerLink($thread['name']) . '</td><td>'.(int) $thread['replies'].'</td><td>'.(int) $thread['views'].'</td><td>';
|
||||||
if($thread['last_post'] > 0) {
|
if($thread['last_post'] > 0) {
|
||||||
$last_post = $db->query("SELECT `players`.`name`, `" . FORUM_TABLE_PREFIX . "forum`.`post_date` FROM `players`, `" . FORUM_TABLE_PREFIX . "forum` WHERE `" . FORUM_TABLE_PREFIX . "forum`.`first_post` = ".(int) $thread['id']." AND `players`.`id` = `" . FORUM_TABLE_PREFIX . "forum`.`author_guid` ORDER BY `post_date` DESC LIMIT 1")->fetch();
|
$last_post = $db->query("SELECT `players`.`name`, `" . FORUM_TABLE_PREFIX . "forum`.`post_date` FROM `players`, `" . FORUM_TABLE_PREFIX . "forum` WHERE `" . FORUM_TABLE_PREFIX . "forum`.`first_post` = ".(int) $thread['id']." AND `players`.`id` = `" . FORUM_TABLE_PREFIX . "forum`.`author_guid` ORDER BY `post_date` DESC LIMIT 1")->fetch();
|
||||||
if(isset($last_post['name']))
|
if(isset($last_post['name']))
|
||||||
|
@@ -207,6 +207,7 @@ if (empty($highscores)) {
|
|||||||
$tmp = $row->toArray();
|
$tmp = $row->toArray();
|
||||||
$tmp['online'] = $row->online_status;
|
$tmp['online'] = $row->online_status;
|
||||||
$tmp['vocation'] = $row->vocation_name;
|
$tmp['vocation'] = $row->vocation_name;
|
||||||
|
$tmp['outfit_url'] = $row->outfit_url; // @phpstan-ignore-line
|
||||||
unset($tmp['online_table']);
|
unset($tmp['online_table']);
|
||||||
|
|
||||||
return $tmp;
|
return $tmp;
|
||||||
@@ -240,7 +241,7 @@ foreach($highscores as $id => &$player)
|
|||||||
$player['link'] = getPlayerLink($player['name'], false);
|
$player['link'] = getPlayerLink($player['name'], false);
|
||||||
$player['flag'] = getFlagImage($player['country']);
|
$player['flag'] = getFlagImage($player['country']);
|
||||||
if($settingHighscoresOutfit) {
|
if($settingHighscoresOutfit) {
|
||||||
$player['outfit'] = '<img style="position:absolute;margin-top:' . (in_array($player['looktype'], setting('core.outfit_images_wrong_looktypes')) ? '-15px;margin-left:5px' : '-45px;margin-left:-25px') . ';" src="' . setting('core.outfit_images_url') . '?id=' . $player['looktype'] . ($outfit_addons ? '&addons=' . $player['lookaddons'] : '') . '&head=' . $player['lookhead'] . '&body=' . $player['lookbody'] . '&legs=' . $player['looklegs'] . '&feet=' . $player['lookfeet'] . '" alt="" />';
|
$player['outfit'] = '<img style="position:absolute;margin-top:' . (in_array($player['looktype'], setting('core.outfit_images_wrong_looktypes')) ? '-15px;margin-left:5px' : '-45px;margin-left:-25px') . ';" src="' . $player['outfit_url'] . '" alt="" />';
|
||||||
}
|
}
|
||||||
$player['rank'] = $offset + $i;
|
$player['rank'] = $offset + $i;
|
||||||
}
|
}
|
||||||
|
@@ -88,7 +88,7 @@ if(isset($_GET['archive']))
|
|||||||
foreach($news_DB as $news)
|
foreach($news_DB as $news)
|
||||||
{
|
{
|
||||||
$newses[] = array(
|
$newses[] = array(
|
||||||
'link' => getLink('news') . '/' . $news['id'],
|
'link' => getLink('news/archive') . '/' . $news['id'],
|
||||||
'icon_id' => $categories[$news['category']]['icon_id'],
|
'icon_id' => $categories[$news['category']]['icon_id'],
|
||||||
'title' => stripslashes($news['title']),
|
'title' => stripslashes($news['title']),
|
||||||
'date' => $news['date']
|
'date' => $news['date']
|
||||||
|
@@ -11,8 +11,14 @@
|
|||||||
* - for number: min, max, step
|
* - for number: min, max, step
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
use MyAAC\Cache;
|
||||||
use MyAAC\Settings;
|
use MyAAC\Settings;
|
||||||
|
|
||||||
|
$templates = Cache::remember('templates', 5 * 60, function () {
|
||||||
|
return get_templates();
|
||||||
|
});
|
||||||
|
$defaultTemplate = in_array('kathrine', $templates) ? 'kathrine' : $templates[0];
|
||||||
|
|
||||||
return [
|
return [
|
||||||
'name' => 'MyAAC',
|
'name' => 'MyAAC',
|
||||||
'settings' => [
|
'settings' => [
|
||||||
@@ -88,7 +94,7 @@ return [
|
|||||||
'type' => 'options',
|
'type' => 'options',
|
||||||
'options' => '$templates',
|
'options' => '$templates',
|
||||||
'desc' => 'Name of the template used by website',
|
'desc' => 'Name of the template used by website',
|
||||||
'default' => 'kathrine',
|
'default' => $defaultTemplate,
|
||||||
],
|
],
|
||||||
'template_allow_change' => [
|
'template_allow_change' => [
|
||||||
'name' => 'Template Allow Change',
|
'name' => 'Template Allow Change',
|
||||||
|
@@ -105,9 +105,6 @@ class CreateCharacter
|
|||||||
* @param array $errors
|
* @param array $errors
|
||||||
* @return bool
|
* @return bool
|
||||||
* @throws \E_OTS_NotLoaded
|
* @throws \E_OTS_NotLoaded
|
||||||
* @throws \Twig_Error_Loader
|
|
||||||
* @throws \Twig_Error_Runtime
|
|
||||||
* @throws \Twig_Error_Syntax
|
|
||||||
*/
|
*/
|
||||||
public function doCreate($name, $sex, $vocation, $town, $account, &$errors)
|
public function doCreate($name, $sex, $vocation, $town, $account, &$errors)
|
||||||
{
|
{
|
||||||
|
@@ -82,7 +82,9 @@ class DataLoader
|
|||||||
self::$startTime = microtime(true);
|
self::$startTime = microtime(true);
|
||||||
|
|
||||||
$cache = Cache::getInstance();
|
$cache = Cache::getInstance();
|
||||||
$cache->delete('towns'); // will be reloaded after next page load
|
if ($cache->enabled()) {
|
||||||
|
$cache->delete('towns'); // will be reloaded after next page load
|
||||||
|
}
|
||||||
|
|
||||||
global $db;
|
global $db;
|
||||||
if ($db->hasTable('towns') && Town::count() > 0) {
|
if ($db->hasTable('towns') && Town::count() > 0) {
|
||||||
|
@@ -8,6 +8,13 @@ use Illuminate\Database\Eloquent\Relations\HasOne;
|
|||||||
* @property int $level
|
* @property int $level
|
||||||
* @property int $vocation
|
* @property int $vocation
|
||||||
* @property int $online
|
* @property int $online
|
||||||
|
* @property int $looktype
|
||||||
|
* @property int $lookhead
|
||||||
|
* @property int $lookbody
|
||||||
|
* @property int $looklegs
|
||||||
|
* @property int $lookfeet
|
||||||
|
* @property int $lookaddons
|
||||||
|
* @property string $outfit_url
|
||||||
* @property hasOne $onlineTable
|
* @property hasOne $onlineTable
|
||||||
*/
|
*/
|
||||||
class Player extends Model {
|
class Player extends Model {
|
||||||
@@ -80,6 +87,10 @@ class Player extends Model {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function getOutfitUrlAttribute() {
|
||||||
|
return setting('core.outfit_images_url') . '?id=' . $this->looktype . (!empty($this->lookaddons) ? '&addons=' . $this->lookaddons : '') . '&head=' . $this->lookhead . '&body=' . $this->lookbody . '&legs=' . $this->looklegs . '&feet=' . $this->lookfeet;
|
||||||
|
}
|
||||||
|
|
||||||
public function getOnlineStatusAttribute()
|
public function getOnlineStatusAttribute()
|
||||||
{
|
{
|
||||||
global $db;
|
global $db;
|
||||||
|
@@ -95,7 +95,7 @@ else {
|
|||||||
unset($file);
|
unset($file);
|
||||||
|
|
||||||
if ($cache->enabled()) {
|
if ($cache->enabled()) {
|
||||||
$cache->set('template_ini_' . $template_name, serialize($template_ini));
|
$cache->set('template_ini_' . $template_name, serialize($template_ini), 10 * 60);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -138,29 +138,19 @@ if($twig_loader) {
|
|||||||
$twig_loader->prependPath(BASE . $template_path);
|
$twig_loader->prependPath(BASE . $template_path);
|
||||||
}
|
}
|
||||||
|
|
||||||
function get_template_menus() {
|
function get_template_menus(): array
|
||||||
|
{
|
||||||
global $template_name;
|
global $template_name;
|
||||||
|
|
||||||
$cache = Cache::getInstance();
|
$result = Cache::remember('template_menus', 10 * 60, function () use ($template_name) {
|
||||||
if ($cache->enabled()) {
|
|
||||||
$tmp = '';
|
|
||||||
if ($cache->fetch('template_menus', $tmp)) {
|
|
||||||
$result = unserialize($tmp);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!isset($result)) {
|
|
||||||
|
|
||||||
$result = Menu::select(['name', 'link', 'blank', 'color', 'category'])
|
$result = Menu::select(['name', 'link', 'blank', 'color', 'category'])
|
||||||
->where('template', $template_name)
|
->where('template', $template_name)
|
||||||
->orderBy('category')
|
->orderBy('category')
|
||||||
->orderBy('ordering')
|
->orderBy('ordering')
|
||||||
->get();
|
->get();
|
||||||
|
|
||||||
if ($cache->enabled()) {
|
return $result->toArray();
|
||||||
$cache->set('template_menus', serialize($result->toArray()), 600);
|
});
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
$menus = array();
|
$menus = array();
|
||||||
foreach($result as $menu) {
|
foreach($result as $menu) {
|
||||||
|
@@ -50,7 +50,7 @@
|
|||||||
<table width="100%">
|
<table width="100%">
|
||||||
<tr bgcolor="{{ config.vdarkborder }}">
|
<tr bgcolor="{{ config.vdarkborder }}">
|
||||||
<td colspan="2">
|
<td colspan="2">
|
||||||
<span style="color: white"><b>Last 5 posts from thread: {{ topic|raw }}</b></span>
|
<span style="color: white"><b>Last 5 posts from thread: {{ topic }}</b></span>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
{% set i = 0 %}
|
{% set i = 0 %}
|
||||||
|
@@ -79,57 +79,59 @@
|
|||||||
</tr>
|
</tr>
|
||||||
|
|
||||||
{% set showedRank, i = false, 0 %}
|
{% set showedRank, i = false, 0 %}
|
||||||
{% for rank in guild_members if rank.members|length > 0 %}
|
{% for rank in guild_members %}
|
||||||
{% set rankStyle, i = getStyle(i), i + 1 %}
|
{% if rank.members|length > 0 %}
|
||||||
|
{% set rankStyle, i = getStyle(i), i + 1 %}
|
||||||
|
|
||||||
{% for player in rank.members %}
|
{% for player in rank.members %}
|
||||||
<tr bgcolor="{{ rankStyle }}">
|
<tr bgcolor="{{ rankStyle }}">
|
||||||
<td>
|
<td>
|
||||||
{% if not showedRank %}{{ rank.rank_name }}{% endif %}
|
{% if not showedRank %}{{ rank.rank_name }}{% endif %}
|
||||||
{% set showedRank = true %}
|
{% set showedRank = true %}
|
||||||
</td>
|
</td>
|
||||||
|
|
||||||
<td>
|
<td>
|
||||||
{% set playerName = player.getName() %}
|
{% set playerName = player.getName() %}
|
||||||
<form action="{{ getLink('guilds') }}?action=change_nick&name={{ playerName }}&guild={{ guild_name }}" method="post">
|
<form action="{{ getLink('guilds') }}?action=change_nick&name={{ playerName }}&guild={{ guild_name }}" method="post">
|
||||||
{{ csrf() }}
|
{{ csrf() }}
|
||||||
{{ getPlayerLink(playerName, true)|raw }}
|
{{ getPlayerLink(playerName, true)|raw }}
|
||||||
|
|
||||||
{% set showGuildNick = false %}
|
{% set showGuildNick = false %}
|
||||||
{% if player.getGuildNick() is not empty %}
|
{% if player.getGuildNick() is not empty %}
|
||||||
{% set showGuildNick = true %}
|
{% set showGuildNick = true %}
|
||||||
{% set guildNickRaw = player.getGuildNick()|raw %}
|
{% set guildNickRaw = player.getGuildNick()|raw %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
{% if logged %}
|
{% if logged %}
|
||||||
{% if player.getId() in players_from_account_ids %}
|
{% if player.getId() in players_from_account_ids %}
|
||||||
(<input type="text" name="nick" value="{{ guildNickRaw }}"><input type="submit" value="Change">)
|
(<input type="text" name="nick" value="{{ guildNickRaw }}"><input type="submit" value="Change">)
|
||||||
|
{% else %}
|
||||||
|
{% if showGuildNick %} ({{ guildNickRaw }}){% endif %}
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
{% if level_in_guild > rank.rank_level or isLeader %}
|
||||||
|
{% if guildOwnerName != playerName %}
|
||||||
|
<span style="font-size: 10px; float: right">
|
||||||
|
{<a href="{{ getLink('guilds') }}?action=kick_player&guild={{ guild_name|url_encode }}&name={{ playerName|url_encode }}">KICK</a>}
|
||||||
|
</span>
|
||||||
|
{% endif %}
|
||||||
|
{% endif %}
|
||||||
{% else %}
|
{% else %}
|
||||||
{% if showGuildNick %} ({{ guildNickRaw }}){% endif %}
|
{% if showGuildNick %} ({{ guildNickRaw }}){% endif %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
</form>
|
||||||
|
</td>
|
||||||
|
|
||||||
{% if level_in_guild > rank.rank_level or isLeader %}
|
<td>{{ player.getVocationName() }}</td>
|
||||||
{% if guildOwnerName != playerName %}
|
<td>{{ player.getLevel() }}</td>
|
||||||
<span style="font-size: 10px; float: right">
|
<td>
|
||||||
{<a href="{{ getLink('guilds') }}?action=kick_player&guild={{ guild_name|url_encode }}&name={{ playerName|url_encode }}">KICK</a>}
|
<span style="color: {% if player.isOnline() %} green;"><b>Online{% else %} red;"><b>Offline{% endif %}</b></span>
|
||||||
</span>
|
</td>
|
||||||
{% endif %}
|
</tr>
|
||||||
{% endif %}
|
{% endfor %}
|
||||||
{% else %}
|
|
||||||
{% if showGuildNick %} ({{ guildNickRaw }}){% endif %}
|
|
||||||
{% endif %}
|
|
||||||
</form>
|
|
||||||
</td>
|
|
||||||
|
|
||||||
<td>{{ player.getVocationName() }}</td>
|
{% set showedRank = false %}
|
||||||
<td>{{ player.getLevel() }}</td>
|
{% endif %}
|
||||||
<td>
|
|
||||||
<span style="color: {% if player.isOnline() %} green;"><b>Online{% else %} red;"><b>Offline{% endif %}</b></span>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
{% endfor %}
|
|
||||||
|
|
||||||
{% set showedRank = false %}
|
|
||||||
{% else %}
|
{% else %}
|
||||||
<tr bgcolor="{{ getStyle(i) }}">
|
<tr bgcolor="{{ getStyle(i) }}">
|
||||||
<td colspan="5">No guild members found.</td>
|
<td colspan="5">No guild members found.</td>
|
||||||
@@ -162,7 +164,7 @@
|
|||||||
</tr>
|
</tr>
|
||||||
|
|
||||||
{% set i = 0 %}
|
{% set i = 0 %}
|
||||||
{% for invited_player in invited_list if invited_list|length > 0 %}
|
{% for invited_player in invited_list %}
|
||||||
{% if invited_player.isLoaded() %}
|
{% if invited_player.isLoaded() %}
|
||||||
<tr bgcolor="{{ getStyle(i) }}">
|
<tr bgcolor="{{ getStyle(i) }}">
|
||||||
{% set i = i + 1 %}
|
{% set i = i + 1 %}
|
||||||
|
@@ -85,17 +85,19 @@ the search criteria and start a new search.
|
|||||||
<tr bgcolor="{{ config.darkborder }}">
|
<tr bgcolor="{{ config.darkborder }}">
|
||||||
<td valign="top" rowspan="2">
|
<td valign="top" rowspan="2">
|
||||||
{% set checked = false %}
|
{% set checked = false %}
|
||||||
{% for id, name in config.towns if id > 0 %}
|
{% for id, name in config.towns %}
|
||||||
{% if ((townId is empty and name is not empty) or id == townId) and not checked %}
|
{% if id > 0 %}
|
||||||
{% set variable = "checked" %}
|
{% if ((townId is empty and name is not empty) or id == townId) and not checked %}
|
||||||
{% set checked = true %}
|
{% set variable = "checked" %}
|
||||||
{% else %}
|
{% set checked = true %}
|
||||||
{% set variable = "" %}
|
{% else %}
|
||||||
{% endif %}
|
{% set variable = "" %}
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
<input type="radio" name="town" id="town_{{ id }}" value="{{ id }}"{% if variable is defined %} {{ variable }}{% endif %}>
|
<input type="radio" name="town" id="town_{{ id }}" value="{{ id }}"{% if variable is defined %} {{ variable }}{% endif %}>
|
||||||
<label for="town_{{ id }}"> {{ name }}</label>
|
<label for="town_{{ id }}"> {{ name }}</label>
|
||||||
<br>
|
<br>
|
||||||
|
{% endif %}
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</td>
|
</td>
|
||||||
|
|
||||||
|
@@ -10,13 +10,9 @@
|
|||||||
<input type="hidden" name="step" id="step" value="database" />
|
<input type="hidden" name="step" id="step" value="database" />
|
||||||
|
|
||||||
{% for value in ['server_path'] %}
|
{% for value in ['server_path'] %}
|
||||||
{% if value == 'server_path' and config.server_path is not null %}
|
|
||||||
{% set server_path = { 'var_server_path': config.server_path } %}
|
|
||||||
{% set session = session | merge (server_path) %}
|
|
||||||
{% endif %}
|
|
||||||
<div class="form-group mb-2">
|
<div class="form-group mb-2">
|
||||||
<label for="vars_{{ value }}">{{ locale['step_config_' ~ value] }}</label>
|
<label for="vars_{{ value }}">{{ locale['step_config_' ~ value] }}</label>
|
||||||
<input class="form-control" type="text" name="vars[{{ value }}]" id="vars_{{ value }}"{% if session['var_' ~ value] is not null %} value="{{ session['var_' ~ value] }}"{% endif %}/>
|
<input class="form-control" type="{% if value == 'mail_admin' %}email{% else %}text{% endif %}" name="vars[{{ value }}]" id="vars_{{ value }}"{% if session['var_' ~ value] is not null %} value="{{ session['var_' ~ value] }}"{% endif %}/>
|
||||||
<small class="form-text text-muted">{{ locale['step_config_' ~ value ~ '_desc'] }}</small>
|
<small class="form-text text-muted">{{ locale['step_config_' ~ value ~ '_desc'] }}</small>
|
||||||
</div>
|
</div>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
|
@@ -26,7 +26,7 @@ return [
|
|||||||
'Team' => 'team',
|
'Team' => 'team',
|
||||||
],
|
],
|
||||||
MENU_CATEGORY_LIBRARY => [
|
MENU_CATEGORY_LIBRARY => [
|
||||||
'Monsters' => 'creatures',
|
'Monsters' => 'monsters',
|
||||||
'Spells' => 'spells',
|
'Spells' => 'spells',
|
||||||
'Server Info' => 'server-info',
|
'Server Info' => 'server-info',
|
||||||
'Commands' => 'commands',
|
'Commands' => 'commands',
|
||||||
|
@@ -35,6 +35,16 @@ if(isset($config['boxes']))
|
|||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
$tmp = str_replace('/', '_', PAGE);
|
$tmp = str_replace('/', '_', PAGE);
|
||||||
|
$exp = explode('/', PAGE);
|
||||||
|
if(PAGE !== 'account/create' && PAGE !== 'account/lost' && isset($exp[1])) {
|
||||||
|
if ($exp[0] === 'account') {
|
||||||
|
$tmp = 'account_manage';
|
||||||
|
} else if ($exp[0] === 'news' && $exp[1] === 'archive') {
|
||||||
|
$tmp = 'news_archive';
|
||||||
|
}
|
||||||
|
else
|
||||||
|
$tmp = $exp[0];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
@@ -348,7 +358,7 @@ foreach($config['menu_categories'] as $id => $cat) {
|
|||||||
}
|
}
|
||||||
$link_color = '#' . (strlen($menu['color']) == 0 ? $default_menu_color : $menu['color']);
|
$link_color = '#' . (strlen($menu['color']) == 0 ? $default_menu_color : $menu['color']);
|
||||||
?>
|
?>
|
||||||
<a href='<?php echo $menu['link_full']; ?>'<?php echo $menu['blank'] ? ' target="_blank"' : ''?>>
|
<a href='<?php echo $menu['link_full']; ?>'<?= $menu['target_blank']?>>
|
||||||
<div id='submenu_<?php echo str_replace('/', '_', $menu['link']); ?>' class='Submenuitem' onMouseOver='MouseOverSubmenuItem(this)' onMouseOut='MouseOutSubmenuItem(this)' style="color: <?php echo $link_color; ?>;">
|
<div id='submenu_<?php echo str_replace('/', '_', $menu['link']); ?>' class='Submenuitem' onMouseOver='MouseOverSubmenuItem(this)' onMouseOut='MouseOutSubmenuItem(this)' style="color: <?php echo $link_color; ?>;">
|
||||||
<div class='LeftChain' style='background-image:url(<?php echo $template_path; ?>/images/general/chain.gif);'></div>
|
<div class='LeftChain' style='background-image:url(<?php echo $template_path; ?>/images/general/chain.gif);'></div>
|
||||||
<div id='ActiveSubmenuItemIcon_<?php echo str_replace('/', '_', $menu['link']); ?>' class='ActiveSubmenuItemIcon' style='background-image:url(<?php echo $template_path; ?>/images/menu/icon-activesubmenu.gif);'></div>
|
<div id='ActiveSubmenuItemIcon_<?php echo str_replace('/', '_', $menu['link']); ?>' class='ActiveSubmenuItemIcon' style='background-image:url(<?php echo $template_path; ?>/images/menu/icon-activesubmenu.gif);'></div>
|
||||||
|
@@ -28,7 +28,7 @@ return [
|
|||||||
'Forum' => 'forum',
|
'Forum' => 'forum',
|
||||||
],
|
],
|
||||||
MENU_CATEGORY_LIBRARY => [
|
MENU_CATEGORY_LIBRARY => [
|
||||||
'Monsters' => 'creatures',
|
'Monsters' => 'monsters',
|
||||||
'Spells' => 'spells',
|
'Spells' => 'spells',
|
||||||
'Commands' => 'commands',
|
'Commands' => 'commands',
|
||||||
'Exp Stages' => 'exp-stages',
|
'Exp Stages' => 'exp-stages',
|
||||||
|
Reference in New Issue
Block a user