mirror of
https://github.com/slawkens/myaac.git
synced 2025-09-14 04:23:34 +02:00
Compare commits
3 Commits
feature/ap
...
feature/re
Author | SHA1 | Date | |
---|---|---|---|
![]() |
67f54eacbc | ||
![]() |
cde8891b9b | ||
![]() |
50a8b8169f |
6
.github/workflows/cypress.yml
vendored
6
.github/workflows/cypress.yml
vendored
@@ -1,9 +1,9 @@
|
||||
name: Cypress
|
||||
on:
|
||||
pull_request:
|
||||
branches: [main]
|
||||
branches: [develop]
|
||||
push:
|
||||
branches: [main]
|
||||
branches: [develop]
|
||||
|
||||
jobs:
|
||||
cypress:
|
||||
@@ -35,7 +35,7 @@ jobs:
|
||||
- name: Checkout MyAAC
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
ref: main
|
||||
ref: develop
|
||||
|
||||
- uses: actions/setup-node@v4
|
||||
with:
|
||||
|
4
.github/workflows/phplint.yml
vendored
4
.github/workflows/phplint.yml
vendored
@@ -1,9 +1,9 @@
|
||||
name: PHP Linting
|
||||
on:
|
||||
pull_request:
|
||||
branches: [main]
|
||||
branches: [develop]
|
||||
push:
|
||||
branches: [main]
|
||||
branches: [develop]
|
||||
|
||||
jobs:
|
||||
phplint:
|
||||
|
4
.github/workflows/phpstan.yml
vendored
4
.github/workflows/phpstan.yml
vendored
@@ -2,9 +2,9 @@ name: "PHPStan"
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
branches: [main]
|
||||
branches: [develop]
|
||||
push:
|
||||
branches: [main]
|
||||
branches: [develop]
|
||||
|
||||
jobs:
|
||||
tests:
|
||||
|
4
.gitignore
vendored
4
.gitignore
vendored
@@ -4,7 +4,6 @@ Thumbs.db
|
||||
|
||||
#
|
||||
/.htaccess
|
||||
lua
|
||||
|
||||
# composer
|
||||
composer.phar
|
||||
@@ -76,3 +75,6 @@ landing
|
||||
|
||||
# system
|
||||
system/functions_custom.php
|
||||
|
||||
# others/rest
|
||||
system/pages/downloads.php
|
||||
|
134
CHANGELOG.md
134
CHANGELOG.md
@@ -1,135 +1,6 @@
|
||||
# Changelog
|
||||
|
||||
## [1.3.1 - 19.03.2025]
|
||||
|
||||
### Fixed
|
||||
* Fixed migrate:run command (https://github.com/slawkens/myaac/commit/1a5771ad51e595fe13368a0721b059c4ecefb17d)
|
||||
|
||||
### Changed
|
||||
* Small adjustments (https://github.com/slawkens/myaac/commit/6fac883659f581baac1361826d046410156f1e58, https://github.com/slawkens/myaac/commit/4a6896b4469968b9904292734cf6c14ba5eeef14)
|
||||
|
||||
## [1.3 - 10.03.2025]
|
||||
|
||||
### Changed
|
||||
* Use latest outfit-images host from @gesior (https://github.com/slawkens/myaac/commit/529bdcf016dd0f9dffbc34d81f99a046a9ddb70d)
|
||||
* Change monster link to $_GET ?name= (https://github.com/slawkens/myaac/commit/4c5cc8b573b2b3e7ec00a22b7ede30a68083a924)
|
||||
|
||||
### Fixed
|
||||
* Fixed house links (https://github.com/slawkens/myaac/commit/887b5068ad11c4cdab614afd34525caba785ce13)
|
||||
* Fixed long title on headline.php (https://github.com/slawkens/myaac/commit/3e3f4bb5a514158ec8777684ca6c7f1c2a37bed5)
|
||||
* Fixed menu colors once again, plus add !important tag (https://github.com/slawkens/myaac/commit/aa52df6e2ec92cafc25b655ae907bf2e1746d9cc)
|
||||
* Fix: add possibility to remove all menu items in admin panel (https://github.com/slawkens/myaac/commit/00fe1adc15ea7646596d755f6e6e1f7854ffc1d5, https://github.com/slawkens/myaac/commit/9239a4f4198c3ad260802ac3b47e9c41b80b754e)
|
||||
|
||||
## [1.2 - 09.02.2025]
|
||||
|
||||
### Added
|
||||
* Twig session(key) function + reworked session functions to accept multi-array like in Laravel (https://github.com/slawkens/myaac/commit/b46ddb43d03ef7e5fc34e555e92e856bdc905691)
|
||||
* add template_name to twig variables (https://github.com/slawkens/myaac/commit/ae1161d77050bda181802b4496c9de920a7bb1bc)
|
||||
* add HOOK_INIT, executed just after $hooks are loaded (https://github.com/slawkens/myaac/commit/19686725dc810f63a07f049f82c66cf336d90ca6)
|
||||
|
||||
### Changed
|
||||
* settings: password input hide/show, enable Save button only if changes has been made, save settings in transaction (https://github.com/slawkens/myaac/commit/4fda4f643b60a151179e5dd4f04912fb2618d98f, https://github.com/slawkens/myaac/commit/28fef952f857b79d64bc7495ffa5e1999e68e192, https://github.com/slawkens/myaac/commit/4b6024dc451accadb6c469fa282a9a764c1c0a81)
|
||||
* rework menus: Different categories can have different colors + Option to reset menus (https://github.com/slawkens/myaac/commit/73de93a561f6b13111e019075724357d8a617249, https://github.com/slawkens/myaac/commit/3da3e62c5b12390d75de9b3320729bcca6e0b458)
|
||||
|
||||
### Fixed
|
||||
* highscores: Fix online status + vocation for TFS 0.x (https://github.com/slawkens/myaac/commit/ea51ad27c38be88d86514cb979bb394fcfbef1f0)
|
||||
* clear cache button in admin bar needed to be clicked twice until it worked (https://github.com/slawkens/myaac/commit/ea51ad27c38be88d86514cb979bb394fcfbef1f0)
|
||||
* HOOK_STARTUP location (https://github.com/slawkens/myaac/commit/a73fb1003ee3f812cf182d1834d65f08e6f60d1f)
|
||||
* if vocation name has more words (https://github.com/slawkens/myaac/commit/9d7fc98e1e0a96b59ecc1a7c39800a64445db364)
|
||||
|
||||
### Updated
|
||||
* Bump twig/twig from 3.18.0 to 3.19.0 (#284)
|
||||
|
||||
## [1.1 - 27.01.2025]
|
||||
|
||||
### Changed
|
||||
* adjust mailer settings descriptions to latest gmail (https://github.com/slawkens/myaac/commit/c5d5bb80671db135e6b503f53684771c7272e05d)
|
||||
* optimize $player->isOnline() function, thanks @gesior (https://github.com/slawkens/myaac/commit/10dd818b139d5e1bb1ca9ec81edfb083ba9316b4)
|
||||
* make players.comment and guilds.description VARCHAR (https://github.com/slawkens/myaac/commit/a45ceab83a74bee2b89cdb72baceda75e577e3cf)
|
||||
* add lua/ folder to .gitignore (https://github.com/slawkens/myaac/commit/07012f786b1114cb6ab2f064f82c645b136a375a)
|
||||
|
||||
### Fixed
|
||||
* general fixes in the tibiacom template menus, better support for custom menus
|
||||
* make functions_custom.php optional (https://github.com/slawkens/myaac/commit/dc2b5afd9980984e2b259c9fc99f2ade46f70a5a)
|
||||
* error in CLI, where BASE_URL is not defined (https://github.com/slawkens/myaac/commit/4d749b881582f64b5a46196dbbb5ee8097127f03)
|
||||
* hook ACCOUNT_LOGIN_BEFORE_ACCOUNT location (https://github.com/slawkens/myaac/commit/669c447fca8643ce56d9ef8c1374ec647c780998)
|
||||
|
||||
## [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]
|
||||
|
||||
Still waiting for your reports about bugs found in this release. We are very close to stable release.
|
||||
|
||||
### Added
|
||||
* feat: rate limit settings for blocking accounts login attempts (@gpedro, #266)
|
||||
* search by email in accounts editor (https://github.com/slawkens/myaac/commit/c2ec46824621468f2a1cb4046805c485ed13fea5)
|
||||
* New hooks in account manage + create (https://github.com/slawkens/myaac/commit/93641fc68ac9a5f1479329e2bd41380c19534d5d)
|
||||
|
||||
### Changed
|
||||
* chore: drop raw queries + accounts - search by email + accounts - required min size for search by account number (@gpedro, #266)
|
||||
* Use https for outfit & item images (https://github.com/slawkens/myaac/commit/71c00aa5e01fbdfd88802912e200dd1025976231)
|
||||
* Do not require players & guilds tables on install (https://github.com/slawkens/myaac/commit/779aa152fa940261c9b161533946f44e288597a2)
|
||||
* Do not create player if there is no players table in db (https://github.com/slawkens/myaac/commit/201f95caa8b70e88fa651eac8c3c3aa7cd765bd0)
|
||||
|
||||
### Fixed
|
||||
* Highscore frags fixed for TFS 0.3 (@Scrollog, #263)
|
||||
* Missing groups variable #262. thanks, @Scrollog for reporting (https://github.com/slawkens/myaac/commit/8d8bdb6dac6df21672ac77288fff2f2f8d6eb665)
|
||||
* Verified email for login.php (@gpedro, #265)
|
||||
* Warning if core.account_country is disabled (https://github.com/slawkens/myaac/commit/ab73d60c61e14a1cacdb6cfbf7f89f4bf3be0833)
|
||||
|
||||
|
||||
## [1.0-RC.1 - 23.07.2024]
|
||||
## [1.0-RC -23.07.2024]
|
||||
|
||||
Changes since 1.0-beta:
|
||||
|
||||
@@ -194,6 +65,7 @@ Minimum PHP version for this release is 8.1.
|
||||
* support for login and create account only by email (configurable)
|
||||
* with no need for account name
|
||||
* Google ReCAPTCHA v3 support (available as plugin)
|
||||
* automatically load towns names from .OTBM file
|
||||
* support for Account Number
|
||||
* suggest account number option
|
||||
* many new functions, hooks and configurables
|
||||
@@ -222,4 +94,4 @@ Minimum PHP version for this release is 8.1.
|
||||
* change_password email to be more informal
|
||||
|
||||
### Fixed
|
||||
* hundreds of bug fixes, mostly patched from 0.8, so it makes no sense writing them again here
|
||||
* hundrets of bug fixes, mostly patched from 0.8, so it makes no sense writing them again here
|
||||
|
2
CREDITS
2
CREDITS
@@ -1,3 +1,3 @@
|
||||
* Gesior.pl (2007 - 2008)
|
||||
* Slawkens (2009 - 2025)
|
||||
* Slawkens (2009 - 2023)
|
||||
* Contributors listed in CONTRIBUTORS.txt
|
||||
|
12
README.md
12
README.md
@@ -10,12 +10,12 @@ Official website: https://my-aac.org
|
||||
[](https://discord.gg/2J39Wus)
|
||||
[](https://github.com/slawkens/myaac/issues?q=is%3Aissue+is%3Aclosed)
|
||||
|
||||
| Version | Status | Branch | Requirements |
|
||||
|:--------|:-----------------------|:-------|:---------------|
|
||||
| **1.x** | **Active development** | master | **PHP >= 8.1** |
|
||||
| 0.9.x | Not developed anymore | 0.9 | PHP >= 7.2.5 |
|
||||
| 0.8.x | Active support | 0.8 | PHP >= 7.2.5 |
|
||||
| 0.7.x | End Of Life | 0.7 | PHP >= 5.3.3 |
|
||||
| Version | Status | Branch | Requirements |
|
||||
|:--------|:-----------------------|:--------|:---------------|
|
||||
| **1.x** | **Active development** | develop | **PHP >= 8.1** |
|
||||
| 0.9.x | Not developed anymore | 0.9 | PHP >= 7.2.5 |
|
||||
| 0.8.x | Active support | master | PHP >= 7.2.5 |
|
||||
| 0.7.x | End Of Life | 0.7 | PHP >= 5.3.3 |
|
||||
|
||||
### Requirements
|
||||
|
||||
|
37
aac
37
aac
@@ -3,5 +3,38 @@
|
||||
|
||||
require_once __DIR__ . '/common.php';
|
||||
|
||||
$console = new \MyAAC\App\Console();
|
||||
$console->run();
|
||||
if(!IS_CLI) {
|
||||
echo 'This script can be run only in command line mode.';
|
||||
exit(1);
|
||||
}
|
||||
|
||||
require_once SYSTEM . 'functions.php';
|
||||
require_once SYSTEM . 'init.php';
|
||||
|
||||
define('SELF_NAME', basename(__FILE__));
|
||||
|
||||
use MyAAC\Plugins;
|
||||
use Symfony\Component\Console\Application;
|
||||
|
||||
$application = new Application();
|
||||
|
||||
$commandsGlob = glob(SYSTEM . 'src/Commands/*.php');
|
||||
foreach ($commandsGlob as $item) {
|
||||
$name = pathinfo($item, PATHINFO_FILENAME);
|
||||
if ($name == 'Command') { // ignore base Command class
|
||||
continue;
|
||||
}
|
||||
|
||||
$commandPre = '\\MyAAC\Commands\\';
|
||||
$application->add(new ($commandPre . $name));
|
||||
}
|
||||
|
||||
$pluginCommands = Plugins::getCommands();
|
||||
foreach ($pluginCommands as $item) {
|
||||
$application->add(require $item);
|
||||
}
|
||||
|
||||
$application->setName('MyAAC');
|
||||
$application->setVersion(MYAAC_VERSION);
|
||||
|
||||
$application->run();
|
||||
|
@@ -1,8 +1,67 @@
|
||||
<?php
|
||||
require_once '../common.php';
|
||||
require_once SYSTEM . 'functions.php';
|
||||
|
||||
// few things we'll need
|
||||
require '../common.php';
|
||||
|
||||
const ADMIN_PANEL = true;
|
||||
const MYAAC_ADMIN = true;
|
||||
|
||||
$admin = new \MyAAC\App\Admin();
|
||||
$admin->run();
|
||||
if(file_exists(BASE . 'install') && (!isset($config['installed']) || !$config['installed']))
|
||||
{
|
||||
header('Location: ' . BASE_URL . 'install/');
|
||||
throw new RuntimeException('Setup detected that <b>install/</b> directory exists. Please visit <a href="' . BASE_URL . 'install">this</a> url to start MyAAC Installation.<br/>Delete <b>install/</b> directory if you already installed MyAAC.<br/>Remember to REFRESH this page when you\'re done!');
|
||||
}
|
||||
|
||||
$content = '';
|
||||
|
||||
// validate page
|
||||
$page = $_GET['p'] ?? '';
|
||||
if(empty($page) || preg_match("/[^a-zA-Z0-9_\-\/.]/", $page))
|
||||
$page = 'dashboard';
|
||||
|
||||
$page = strtolower($page);
|
||||
define('PAGE', $page);
|
||||
|
||||
require SYSTEM . 'functions.php';
|
||||
require SYSTEM . 'init.php';
|
||||
|
||||
require __DIR__ . '/includes/debugbar.php';
|
||||
require SYSTEM . 'status.php';
|
||||
require SYSTEM . 'login.php';
|
||||
require __DIR__ . '/includes/functions.php';
|
||||
|
||||
$twig->addGlobal('config', $config);
|
||||
$twig->addGlobal('status', $status);
|
||||
|
||||
if (ACTION == 'logout') {
|
||||
require SYSTEM . 'logout.php';
|
||||
}
|
||||
|
||||
// if we're not logged in - show login box
|
||||
if(!$logged || !admin()) {
|
||||
$page = 'login';
|
||||
}
|
||||
|
||||
// include our page
|
||||
$file = __DIR__ . '/pages/' . $page . '.php';
|
||||
if(!@file_exists($file)) {
|
||||
if (str_contains($page, 'plugins/')) {
|
||||
$file = BASE . $page;
|
||||
}
|
||||
else {
|
||||
$page = '404';
|
||||
$file = SYSTEM . 'pages/404.php';
|
||||
}
|
||||
}
|
||||
|
||||
ob_start();
|
||||
if($hooks->trigger(HOOK_ADMIN_BEFORE_PAGE)) {
|
||||
require $file;
|
||||
}
|
||||
|
||||
$content .= ob_get_contents();
|
||||
ob_end_clean();
|
||||
|
||||
// template
|
||||
$template_path = 'template/';
|
||||
require __DIR__ . '/' . $template_path . 'template.php';
|
||||
|
@@ -9,7 +9,6 @@
|
||||
*/
|
||||
|
||||
use MyAAC\Models\Account as AccountModel;
|
||||
use MyAAC\Models\AccountAction;
|
||||
use MyAAC\Models\Player;
|
||||
|
||||
defined('MYAAC') or die('Direct access not allowed!');
|
||||
@@ -24,7 +23,10 @@ $use_datatable = true;
|
||||
if (setting('core.account_country'))
|
||||
require SYSTEM . 'countries.conf.php';
|
||||
|
||||
$nameOrNumberColumn = getAccountIdentityColumn();
|
||||
$nameOrNumberColumn = 'name';
|
||||
if (USE_ACCOUNT_NUMBER) {
|
||||
$nameOrNumberColumn = 'number';
|
||||
}
|
||||
|
||||
$hasSecretColumn = $db->hasColumn('accounts', 'secret');
|
||||
$hasCoinsColumn = $db->hasColumn('accounts', 'coins');
|
||||
@@ -67,7 +69,7 @@ else if (isset($_REQUEST['search_email'])) {
|
||||
else if (isset($_REQUEST['search'])) {
|
||||
$search_account = $_REQUEST['search'];
|
||||
$min_size = 3;
|
||||
if (in_array($nameOrNumberColumn, ['id', 'number'])) {
|
||||
if ($nameOrNumberColumn == 'number') {
|
||||
$min_size = 1;
|
||||
}
|
||||
|
||||
@@ -94,7 +96,7 @@ else if (isset($_REQUEST['search'])) {
|
||||
?>
|
||||
<div class="row">
|
||||
<?php
|
||||
$groups = app()->get('groups');
|
||||
$groups = new OTS_Groups_List();
|
||||
if ($id > 0) {
|
||||
$account = new OTS_Account();
|
||||
$account->load($id);
|
||||
@@ -210,7 +212,7 @@ else if (isset($_REQUEST['search'])) {
|
||||
if(setting('core.account_country')) {
|
||||
$account->setCountry($rl_country);
|
||||
}
|
||||
|
||||
|
||||
$account->setCustomField('created', $created);
|
||||
$account->setWebFlags($web_flags);
|
||||
$account->setCustomField('web_lastlogin', $web_lastlogin);
|
||||
@@ -246,7 +248,7 @@ else if (isset($_REQUEST['search'])) {
|
||||
<thead>
|
||||
<tr>
|
||||
<th>ID</th>
|
||||
<th><?= ($nameOrNumberColumn == 'name' ? 'Name' : 'Number'); ?></th>
|
||||
<th><?= ($nameOrNumberColumn == 'number' ? 'Number' : 'Name'); ?></th>
|
||||
<?php if($hasTypeColumn || $hasGroupColumn): ?>
|
||||
<th>E-Mail</th>
|
||||
<th>Position</th>
|
||||
@@ -467,8 +469,9 @@ else if (isset($_REQUEST['search'])) {
|
||||
</thead>
|
||||
<tbody>
|
||||
<?php
|
||||
$accountActions = AccountAction::where('account_id', $account->getId())->orderByDesc('date')->get();
|
||||
$accountActions = \MyAAC\Models\AccountAction::where('account_id', $account->getId())->orderByDesc('date')->get();
|
||||
foreach ($accountActions as $i => $log):
|
||||
$log->ip = ($log->ip != 0 ? long2ip($log->ip) : inet_ntop($log->ipv6));
|
||||
?>
|
||||
<tr>
|
||||
<td><?php echo $i + 1; ?></td>
|
||||
|
@@ -110,7 +110,7 @@ if($action == 'edit' || $action == 'new') {
|
||||
$player->load($player_id);
|
||||
}
|
||||
|
||||
$account_players = accountLogged()->getPlayersList();
|
||||
$account_players = $account_logged->getPlayersList();
|
||||
$account_players->orderBy('group_id', POT::ORDER_DESC);
|
||||
$twig->display('admin.changelog.form.html.twig', array(
|
||||
'action' => $action,
|
||||
|
@@ -13,7 +13,7 @@ $title = 'Login';
|
||||
csrfProtect();
|
||||
|
||||
require PAGES . 'account/login.php';
|
||||
if (logged()) {
|
||||
if ($logged) {
|
||||
header('Location: ' . (admin() ? ADMIN_URL : BASE_URL));
|
||||
return;
|
||||
}
|
||||
|
@@ -57,14 +57,13 @@ function admin_give_coins($coins)
|
||||
|
||||
function admin_give_premdays($days)
|
||||
{
|
||||
global $freePremium;
|
||||
global $db, $freePremium;
|
||||
|
||||
if ($freePremium) {
|
||||
displayMessage('Premium days not supported. Free Premium enabled.');
|
||||
return;
|
||||
}
|
||||
|
||||
$db = app()->get('database');
|
||||
$value = $days * 86400;
|
||||
$now = time();
|
||||
// othire
|
||||
@@ -175,12 +174,10 @@ else {
|
||||
}
|
||||
|
||||
function displayMessage($message, $success = false) {
|
||||
global $hasCoinsColumn, $hasPointsColumn, $freePremium;
|
||||
global $twig, $hasCoinsColumn, $hasPointsColumn, $freePremium;
|
||||
|
||||
$success ? success($message): error($message);
|
||||
|
||||
$twig = app()->get('twig');
|
||||
|
||||
$twig->display('admin.tools.account.html.twig', array(
|
||||
'hasCoinsColumn' => $hasCoinsColumn,
|
||||
'hasPointsColumn' => $hasPointsColumn,
|
||||
|
@@ -99,9 +99,9 @@ else {
|
||||
}
|
||||
|
||||
|
||||
function displayMessage($message, $success = false)
|
||||
{
|
||||
$twig = app()->get('twig');
|
||||
function displayMessage($message, $success = false) {
|
||||
global $twig;
|
||||
|
||||
$success ? success($message): error($message);
|
||||
$twig->display('admin.tools.teleport.html.twig', array());
|
||||
}
|
||||
|
@@ -10,7 +10,6 @@
|
||||
|
||||
use MyAAC\Cache\Cache;
|
||||
use MyAAC\Models\Menu;
|
||||
use MyAAC\Plugins;
|
||||
|
||||
defined('MYAAC') or die('Direct access not allowed!');
|
||||
$title = 'Menus';
|
||||
@@ -22,16 +21,14 @@ if (!hasFlag(FLAG_CONTENT_MENUS) && !superAdmin()) {
|
||||
return;
|
||||
}
|
||||
|
||||
$pluginThemes = Plugins::getThemes();
|
||||
|
||||
if (isset($_POST['template'])) {
|
||||
$template = $_POST['template'];
|
||||
|
||||
if (isset($_POST['save'])) {
|
||||
$post_menu = $_POST['menu'] ?? [];
|
||||
$post_menu_link = $_POST['menu_link'] ?? [];
|
||||
$post_menu_blank = $_POST['menu_blank'] ?? [];
|
||||
$post_menu_color = $_POST['menu_color'] ?? [];
|
||||
if (isset($_POST['menu'])) {
|
||||
$post_menu = $_POST['menu'];
|
||||
$post_menu_link = $_POST['menu_link'];
|
||||
$post_menu_blank = $_POST['menu_blank'];
|
||||
$post_menu_color = $_POST['menu_color'];
|
||||
if (count($post_menu) != count($post_menu_link)) {
|
||||
echo 'Menu count is not equal menu links. Something went wrong when sending form.';
|
||||
return;
|
||||
@@ -59,67 +56,54 @@ if (isset($_POST['template'])) {
|
||||
}
|
||||
}
|
||||
|
||||
onTemplateMenusChange();
|
||||
$cache = Cache::getInstance();
|
||||
if ($cache->enabled()) {
|
||||
$cache->delete('template_menus');
|
||||
}
|
||||
|
||||
success('Saved at ' . date('H:i'));
|
||||
}
|
||||
|
||||
$path = TEMPLATES . $template;
|
||||
|
||||
if (isset($pluginThemes[$template])) {
|
||||
$path = BASE . $pluginThemes[$template];
|
||||
}
|
||||
|
||||
$path .= '/config.php';
|
||||
|
||||
if (file_exists($path)) {
|
||||
require_once $path;
|
||||
$file = TEMPLATES . $template . '/config.php';
|
||||
if (file_exists($file)) {
|
||||
require_once $file;
|
||||
} else {
|
||||
echo 'Cannot find template config.php file.';
|
||||
return;
|
||||
}
|
||||
|
||||
if (isset($_GET['reset_colors'])) {
|
||||
if (isset($config['menu_default_color'])) {
|
||||
Menu::where('template', $template)->update(['color' => str_replace('#', '', $config['menu_default_color'])]);
|
||||
success('Colors has been reset.');
|
||||
}
|
||||
else {
|
||||
warning('There is no default color defined, cannot reset colors.');
|
||||
}
|
||||
}
|
||||
|
||||
if (!isset($config['menu_categories'])) {
|
||||
echo "No menu categories set in template config.php.<br/>This template doesn't support dynamic menus.";
|
||||
return;
|
||||
}
|
||||
|
||||
if (isset($_GET['reset_colors'])) {
|
||||
foreach ($config['menu_categories'] as $id => $options) {
|
||||
$color = $options['default_links_color'] ?? ($config['menu_default_links_color'] ?? ($config['menu_default_color'] ?? '#ffffff'));
|
||||
Menu::where('template', $template)->where('category', $id)->update(['color' => str_replace('#', '', $color)]);
|
||||
}
|
||||
|
||||
onTemplateMenusChange();
|
||||
success('Colors has been reset at ' . date('H:i'));
|
||||
}
|
||||
|
||||
if (isset($_GET['reset_menus'])) {
|
||||
$configMenus = config('menus');
|
||||
if (isset($configMenus)) {
|
||||
Plugins::installMenus($template, config('menus'), true);
|
||||
|
||||
onTemplateMenusChange();
|
||||
success('Menus has been reset at ' . date('H:i'));
|
||||
}
|
||||
else {
|
||||
error("This template don't support reinstalling menus.");
|
||||
}
|
||||
}
|
||||
|
||||
$title = 'Menus - ' . $template;
|
||||
|
||||
$canResetColors = isset($config['menu_default_color']) || isset($config['menu_default_links_color']);
|
||||
foreach ($config['menu_categories'] as $id => $options) {
|
||||
if (isset($options['default_links_color'])) {
|
||||
$canResetColors = true;
|
||||
}
|
||||
}
|
||||
|
||||
$twig->display('admin.menus.header.html.twig', [
|
||||
'template' => $template,
|
||||
'canResetColors' => $canResetColors
|
||||
]);
|
||||
?>
|
||||
<div align="center" class="text-center">
|
||||
<p class="note">You are editing: <?= $template ?><br/><br/>
|
||||
Hint: You can drag menu items.<br/>
|
||||
Hint: Add links to external sites using: <b>http://</b> or <b>https://</b> prefix.<br/>
|
||||
Not all templates support blank and colorful links.
|
||||
</p>
|
||||
<?php if (isset($config['menu_default_color'])) {?>
|
||||
<form method="post" action="?p=menus&reset_colors" onsubmit="return confirm('Do you really want to reset colors?');">
|
||||
<?php csrf(); ?>
|
||||
<input type="hidden" name="template" value="<?php echo $template ?>"/>
|
||||
<button type="submit" class="btn btn-danger">Reset Colors to default</button>
|
||||
</form>
|
||||
<br/>
|
||||
<?php } ?>
|
||||
</div>
|
||||
<?php
|
||||
$menus = Menu::query()
|
||||
->select('name', 'link', 'blank', 'color', 'category', 'ordering')
|
||||
@@ -135,7 +119,7 @@ if (isset($_POST['template'])) {
|
||||
<form method="post" id="menus-form" action="?p=menus">
|
||||
<?php csrf(); ?>
|
||||
<input type="hidden" name="template" value="<?php echo $template ?>"/>
|
||||
<button type="submit" name="save" class="btn btn-info">Save</button><br/><br/>
|
||||
<button type="submit" class="btn btn-info">Save</button><br/><br/>
|
||||
<div class="row">
|
||||
<?php foreach ($config['menu_categories'] as $id => $cat): ?>
|
||||
<div class="col-md-12 col-lg-6">
|
||||
@@ -149,13 +133,12 @@ if (isset($_POST['template'])) {
|
||||
if (isset($menus[$id])) {
|
||||
$i = 0;
|
||||
foreach ($menus[$id] as $menu):
|
||||
$color = (empty($menu['color']) ? ($cat['default_links_color'] ?? ($config['menu_default_links_color'] ?? ($config['menu_default_color'] ?? '#ffffff'))) : '#' . $menu['color']);
|
||||
?>
|
||||
<li class="ui-state-default" id="list-<?php echo $id ?>-<?php echo $i ?>"><label>Name:</label> <input type="text" name="menu[<?php echo $id ?>][]" value="<?php echo escapeHtml($menu['name']); ?>"/>
|
||||
<label>Link:</label> <input type="text" name="menu_link[<?php echo $id ?>][]" value="<?php echo $menu['link'] ?>"/>
|
||||
<input type="hidden" name="menu_blank[<?php echo $id ?>][]" value="0"/>
|
||||
<label><input class="blank-checkbox" type="checkbox" <?php echo($menu['blank'] == 1 ? 'checked' : '') ?>/><span title="Open in New Window">New Window</span></label>
|
||||
<input class="color-picker" type="text" name="menu_color[<?php echo $id ?>][]" value="<?php echo $color; ?>"/>
|
||||
<input class="color-picker" type="text" name="menu_color[<?php echo $id ?>][]" value="<?php echo (empty($menu['color']) ? ($config['menu_default_color'] ?? '#ffffff') : $menu['color']); ?>"/>
|
||||
<a class="remove-button" id="remove-button-<?php echo $id ?>-<?php echo $i ?>"><i class="fas fa-trash"></a></i></li>
|
||||
<?php $i++; $last_id[$id] = $i;
|
||||
endforeach;
|
||||
@@ -168,7 +151,7 @@ if (isset($_POST['template'])) {
|
||||
</div>
|
||||
<div class="row pb-2">
|
||||
<div class="col-md-12">
|
||||
<button type="submit" name="save" class="btn btn-info">Save</button>
|
||||
<button type="submit" class="btn btn-info">Save</button>
|
||||
<?php
|
||||
echo '<button type="button" class="btn btn-danger float-right" value="Cancel" onclick="window.location = \'' . ADMIN_URL . '?p=menus\';"><i class="fas fa-cancel"></i> Cancel</button>';
|
||||
?>
|
||||
@@ -179,19 +162,15 @@ if (isset($_POST['template'])) {
|
||||
$twig->display('admin.menus.js.html.twig', array(
|
||||
'menus' => $menus,
|
||||
'last_id' => $last_id,
|
||||
'menu_default_color' => $config['menu_default_color'] ?? '#ffffff'
|
||||
));
|
||||
?>
|
||||
<?php
|
||||
} else {
|
||||
$templates = Menu::select('template')->distinct()->get()->toArray();
|
||||
foreach ($templates as $key => $value) {
|
||||
$path = TEMPLATES . $value['template'];
|
||||
|
||||
if (isset($pluginThemes[$value['template']])) {
|
||||
$path = BASE . $pluginThemes[$value['template']];
|
||||
}
|
||||
|
||||
if (!file_exists($path . '/config.php')) {
|
||||
$file = TEMPLATES . $value['template'] . '/config.php';
|
||||
if (!file_exists($file)) {
|
||||
unset($templates[$key]);
|
||||
}
|
||||
}
|
||||
@@ -200,11 +179,3 @@ if (isset($_POST['template'])) {
|
||||
'templates' => $templates
|
||||
));
|
||||
}
|
||||
|
||||
function onTemplateMenusChange(): void
|
||||
{
|
||||
$cache = app()->get('cache');
|
||||
if ($cache->enabled()) {
|
||||
$cache->delete('template_menus');
|
||||
}
|
||||
}
|
||||
|
@@ -7,7 +7,7 @@ defined('MYAAC') or die('Direct access not allowed!');
|
||||
$accounts = 0;
|
||||
|
||||
if ($db->hasColumn('accounts', 'created')) {
|
||||
$accounts = Account::orderByDesc('created')->limit(10)->get(['id', 'created'])->toArray();
|
||||
$accounts = Account::orderByDesc('created')->limit(10)->get(['created', (USE_ACCOUNT_NAME ? 'name' : 'id')])->toArray();
|
||||
}
|
||||
|
||||
$twig->display('created.html.twig', array(
|
||||
|
@@ -7,8 +7,6 @@ use MyAAC\Models\Monster;
|
||||
use MyAAC\Models\Player;
|
||||
|
||||
defined('MYAAC') or die('Direct access not allowed!');
|
||||
|
||||
global $eloquentConnection;
|
||||
$count = $eloquentConnection->query()
|
||||
->select([
|
||||
'total_accounts' => Account::selectRaw('COUNT(id)'),
|
||||
|
@@ -19,7 +19,7 @@
|
||||
{% set i = i + 1 %}
|
||||
<tr>
|
||||
<th>{{ i }}</th>
|
||||
<td><a href="?p=accounts&id={{ result.id }}">{{ result.id }}</a></td>
|
||||
<td><a href="?p=accounts&search_name={{ result.name }}">{{ result.name }}</a></td>
|
||||
<td>{{ result.created|date("M d Y, H:i:s") }}</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
|
@@ -26,7 +26,7 @@ if (!hasFlag(FLAG_CONTENT_PAGES) && !superAdmin()) {
|
||||
|
||||
header('X-XSS-Protection:0');
|
||||
|
||||
// some constants, used mainly by database (cannot be modified without schema changes)
|
||||
// some constants, used mainly by database (cannot by modified without schema changes)
|
||||
const NEWS_TITLE_LIMIT = 100;
|
||||
const NEWS_BODY_LIMIT = 65535; // maximum news body length
|
||||
const ARTICLE_TEXT_LIMIT = 300;
|
||||
@@ -50,7 +50,7 @@ if(!empty($action))
|
||||
if (isRequestMethod('post')) {
|
||||
if ($action == 'new') {
|
||||
if (isset($forum_section) && $forum_section != '-1') {
|
||||
$forum_add = Forum::add_thread($p_title, $body, $forum_section, $player_id, accountLogged()->getId(), $errors);
|
||||
$forum_add = Forum::add_thread($p_title, $body, $forum_section, $player_id, $account_logged->getId(), $errors);
|
||||
}
|
||||
|
||||
if (isset($p_title) && News::add($p_title, $body, $type, $category, $player_id, isset($forum_add) && $forum_add != 0 ? $forum_add : 0, $article_text, $article_image, $errors)) {
|
||||
@@ -113,7 +113,7 @@ if($action == 'edit' || $action == 'new') {
|
||||
$player->load($player_id);
|
||||
}
|
||||
|
||||
$account_players = accountLogged()->getPlayersList();
|
||||
$account_players = $account_logged->getPlayersList();
|
||||
$account_players->orderBy('group_id', POT::ORDER_DESC);
|
||||
$twig->display('admin.news.form.html.twig', array(
|
||||
'action' => $action,
|
||||
@@ -136,18 +136,9 @@ if($action == 'edit' || $action == 'new') {
|
||||
|
||||
$query = $db->query('SELECT * FROM ' . $db->tableName(TABLE_PREFIX . 'news'));
|
||||
$newses = array();
|
||||
|
||||
$cachePlayers = [];
|
||||
foreach ($query as $_news) {
|
||||
$playerId = $_news['player_id'];
|
||||
if (isset($cachePlayers[$playerId])) {
|
||||
$_player = $cachePlayers[$playerId];
|
||||
}
|
||||
else {
|
||||
$_player = new OTS_Player();
|
||||
$_player->load($playerId);
|
||||
$cachePlayers[$playerId] = $_player;
|
||||
}
|
||||
$_player = new OTS_Player();
|
||||
$_player->load($_news['player_id']);
|
||||
|
||||
$newses[$_news['type']][] = array(
|
||||
'id' => $_news['id'],
|
||||
@@ -156,7 +147,7 @@ foreach ($query as $_news) {
|
||||
'title' => $_news['title'],
|
||||
'date' => $_news['date'],
|
||||
'player_name' => $_player->isLoaded() ? $_player->getName() : '',
|
||||
'player_link' => $_player->isLoaded() ? getPlayerLink($_player, false) : '',
|
||||
'player_link' => $_player->isLoaded() ? getPlayerLink($_player->getName(), false) : '',
|
||||
);
|
||||
}
|
||||
|
||||
|
@@ -15,18 +15,21 @@ $title = 'Notepad';
|
||||
|
||||
csrfProtect();
|
||||
|
||||
/**
|
||||
* @var OTS_Account $account_logged
|
||||
*/
|
||||
$_content = '';
|
||||
$notepad = ModelsNotepad::where('account_id', accountLogged()->getId())->first();
|
||||
$notepad = ModelsNotepad::where('account_id', $account_logged->getId())->first();
|
||||
if (isset($_POST['content'])) {
|
||||
$_content = html_entity_decode(stripslashes($_POST['content']));
|
||||
if (!$notepad) {
|
||||
ModelsNotepad::create([
|
||||
'account_id' => accountLogged()->getId(),
|
||||
'account_id' => $account_logged->getId(),
|
||||
'content' => $_content
|
||||
]);
|
||||
}
|
||||
else {
|
||||
ModelsNotepad::where('account_id', accountLogged()->getId())->update(['content' => $_content]);
|
||||
ModelsNotepad::where('account_id', $account_logged->getId())->update(['content' => $_content]);
|
||||
}
|
||||
|
||||
success('Saved at ' . date('H:i'));
|
||||
|
@@ -25,7 +25,7 @@ if (!hasFlag(FLAG_CONTENT_PAGES) && !superAdmin()) {
|
||||
header('X-XSS-Protection:0');
|
||||
|
||||
$name = $p_title = null;
|
||||
$groups = app()->get('groups');
|
||||
$groups = new OTS_Groups_List();
|
||||
|
||||
$php = false;
|
||||
$enable_tinymce = true;
|
||||
|
@@ -71,7 +71,7 @@ else if (isset($_REQUEST['search'])) {
|
||||
?>
|
||||
<div class="row">
|
||||
<?php
|
||||
$groups = app()->get('groups');
|
||||
$groups = new OTS_Groups_List();
|
||||
if ($id > 0) {
|
||||
$player = new OTS_Player();
|
||||
$player->load($id);
|
||||
|
@@ -21,13 +21,7 @@ if (!getBoolean(setting('core.admin_plugins_manage_enable'))) {
|
||||
warning('Plugin installation and management is disabled in Settings.<br/>If you wish to enable, go to Settings and enable <strong>Enable Plugins Manage</strong>.');
|
||||
}
|
||||
else {
|
||||
$pluginUploadEnabled = true;
|
||||
if(!\class_exists('\ZipArchive')) {
|
||||
error('Please install PHP zip extension. Plugins upload disabled until then.');
|
||||
$pluginUploadEnabled = false;
|
||||
}
|
||||
|
||||
$twig->display('admin.plugins.form.html.twig', ['pluginUploadEnabled' => $pluginUploadEnabled]);
|
||||
$twig->display('admin.plugins.form.html.twig');
|
||||
|
||||
if (isset($_POST['uninstall'])) {
|
||||
$uninstall = $_POST['uninstall'];
|
||||
|
@@ -1,7 +1,5 @@
|
||||
<?php
|
||||
|
||||
global $menus;
|
||||
|
||||
$menus = [
|
||||
['name' => 'Dashboard', 'icon' => 'tachometer-alt', 'order' => 10, 'link' => 'dashboard'],
|
||||
['name' => 'Settings', 'icon' => 'edit', 'order' => 19, 'link' =>
|
||||
|
@@ -21,7 +21,7 @@
|
||||
</head>
|
||||
<body class="sidebar-mini ">
|
||||
<?php $hooks->trigger(HOOK_ADMIN_BODY_START); ?>
|
||||
<?php if (admin()) { ?>
|
||||
<?php if ($logged && admin()) { ?>
|
||||
<div class="wrapper">
|
||||
<nav class="main-header navbar navbar-expand navbar-white navbar-light">
|
||||
<ul class="navbar-nav">
|
||||
@@ -40,7 +40,7 @@
|
||||
</nav>
|
||||
<aside class="main-sidebar sidebar-dark-info elevation-4">
|
||||
<a href="<?php echo ADMIN_URL; ?>" class="brand-link navbar-info">
|
||||
<img src="<?php echo ADMIN_URL; ?>images/logo.png" class="brand-image img-circle elevation-3" style="opacity: .8" alt="MyAAC">
|
||||
<img src="<?php echo ADMIN_URL; ?>images/logo.png" class="brand-image img-circle elevation-3" style="opacity: .8">
|
||||
<span class="brand-text"><b>My</b>AAC</span>
|
||||
</a>
|
||||
<div class="sidebar">
|
||||
@@ -97,6 +97,20 @@
|
||||
<?php
|
||||
}
|
||||
}
|
||||
|
||||
$query = $db->query('SELECT `name`, `page`, `flags` FROM `' . TABLE_PREFIX . 'admin_menu` ORDER BY `ordering`');
|
||||
$menu_db = $query->fetchAll();
|
||||
foreach ($menu_db as $item) {
|
||||
if ($item['flags'] == 0 || hasFlag($item['flags'])) { ?>
|
||||
<li class="nav-item">
|
||||
<a class="nav-link<?php echo($page == $item['page'] ? ' active' : '') ?>" href="?p=<?php echo $item['page'] ?>">
|
||||
<i class="nav-icon fas fa-link"></i>
|
||||
<p><?php echo $item['name'] ?></p>
|
||||
</a>
|
||||
</li>
|
||||
<?php
|
||||
}
|
||||
}
|
||||
?>
|
||||
</ul>
|
||||
</nav>
|
||||
@@ -108,7 +122,7 @@
|
||||
<div class="container-fluid">
|
||||
<div class="row mb-2">
|
||||
<div class="col-sm-6">
|
||||
<h3 class="m-0 text-dark"><?php echo($title ?? ''); ?><small> - Admin Panel</small></h3>
|
||||
<h3 class="m-0 text-dark"><?php echo(isset($title) ? $title : ''); ?><small> - Admin Panel</small></h3>
|
||||
</div>
|
||||
<div class="col-sm-6">
|
||||
<div class="float-sm-right d-none d-sm-inline">
|
||||
@@ -163,14 +177,17 @@
|
||||
<div id="sidebar-overlay"></div>
|
||||
</div>
|
||||
|
||||
<?php } else if (!logged() && !admin()) {
|
||||
<?php } else if (!$logged && !admin()) {
|
||||
echo $content;
|
||||
}
|
||||
?>
|
||||
<?php
|
||||
if (admin()) {
|
||||
/**
|
||||
* @var OTS_Account $account_logged
|
||||
*/
|
||||
if ($logged && admin()) {
|
||||
$twig->display('admin-bar.html.twig', [
|
||||
'username' => USE_ACCOUNT_NAME ? accountLogged()->getName() : accountLogged()->getId()
|
||||
'username' => USE_ACCOUNT_NAME ? $account_logged->getName() : $account_logged->getId()
|
||||
]);
|
||||
}
|
||||
?>
|
||||
|
@@ -1,22 +1,15 @@
|
||||
<?php
|
||||
|
||||
use MyAAC\Services\LoginService;
|
||||
|
||||
define('MYAAC_ADMIN', true);
|
||||
|
||||
require '../../common.php';
|
||||
require SYSTEM . 'functions.php';
|
||||
require SYSTEM . 'init.php';
|
||||
require SYSTEM . 'login.php';
|
||||
|
||||
$loginService = new LoginService();
|
||||
$loginService->checkLogin();
|
||||
|
||||
if(!admin()) {
|
||||
if(!admin())
|
||||
die('Access denied.');
|
||||
}
|
||||
|
||||
if(!function_exists('phpinfo')) {
|
||||
if(!function_exists('phpinfo'))
|
||||
die('phpinfo() disabled on this web server.');
|
||||
}
|
||||
|
||||
phpinfo();
|
||||
|
@@ -24,20 +24,16 @@
|
||||
*/
|
||||
|
||||
use MyAAC\DataLoader;
|
||||
use MyAAC\Services\LoginService;
|
||||
|
||||
const MYAAC_ADMIN = true;
|
||||
|
||||
require '../../common.php';
|
||||
require SYSTEM . 'functions.php';
|
||||
require SYSTEM . 'init.php';
|
||||
require SYSTEM . 'login.php';
|
||||
|
||||
$loginService = new LoginService();
|
||||
$loginService->checkLogin();
|
||||
|
||||
if (!admin()) {
|
||||
if (!admin())
|
||||
die('Access denied.');
|
||||
}
|
||||
|
||||
ini_set('max_execution_time', 300);
|
||||
ob_implicit_flush();
|
||||
|
@@ -1,6 +1,6 @@
|
||||
<?php
|
||||
|
||||
use MyAAC\Services\LoginService;
|
||||
use MyAAC\Hooks;
|
||||
use MyAAC\Settings;
|
||||
|
||||
const MYAAC_ADMIN = true;
|
||||
@@ -8,9 +8,7 @@ const MYAAC_ADMIN = true;
|
||||
require '../../common.php';
|
||||
require SYSTEM . 'functions.php';
|
||||
require SYSTEM . 'init.php';
|
||||
|
||||
$loginService = new LoginService();
|
||||
$loginService->checkLogin();
|
||||
require SYSTEM . 'login.php';
|
||||
|
||||
if(!admin()) {
|
||||
http_response_code(500);
|
||||
@@ -29,7 +27,7 @@ if (!isset($_POST['settings'])) {
|
||||
die('Please enter settings.');
|
||||
}
|
||||
|
||||
$settings = app()->get('settings');
|
||||
$settings = Settings::getInstance();
|
||||
|
||||
$success = $settings->save($_REQUEST['plugin'], $_POST['settings']);
|
||||
|
||||
|
@@ -1,20 +1,14 @@
|
||||
<?php
|
||||
|
||||
use MyAAC\Services\LoginService;
|
||||
|
||||
define('MYAAC_ADMIN', true);
|
||||
|
||||
require '../../common.php';
|
||||
require SYSTEM . 'init.php';
|
||||
require SYSTEM . 'functions.php';
|
||||
require SYSTEM . 'status.php';
|
||||
require SYSTEM . 'login.php';
|
||||
|
||||
$loginService = new LoginService();
|
||||
$loginService->checkLogin();
|
||||
|
||||
if(!admin()) {
|
||||
if(!admin())
|
||||
die('Access denied.');
|
||||
}
|
||||
|
||||
if(!$status['online'])
|
||||
die('Offline');
|
||||
|
@@ -1,19 +1,13 @@
|
||||
<?php
|
||||
|
||||
use MyAAC\Services\LoginService;
|
||||
|
||||
define('MYAAC_ADMIN', true);
|
||||
|
||||
require '../../common.php';
|
||||
require SYSTEM . 'functions.php';
|
||||
require SYSTEM . 'init.php';
|
||||
require SYSTEM . 'login.php';
|
||||
|
||||
$loginService = new LoginService();
|
||||
$loginService->checkLogin();
|
||||
|
||||
if(!admin()) {
|
||||
if(!admin())
|
||||
die('Access denied.');
|
||||
}
|
||||
|
||||
// Don't attempt to process the upload on an OPTIONS request
|
||||
if ($_SERVER['REQUEST_METHOD'] == 'OPTIONS') {
|
||||
|
@@ -26,8 +26,8 @@
|
||||
if (version_compare(phpversion(), '8.1', '<')) die('PHP version 8.1 or higher is required.');
|
||||
|
||||
const MYAAC = true;
|
||||
const MYAAC_VERSION = '2.0-dev';
|
||||
const DATABASE_VERSION = 44;
|
||||
const MYAAC_VERSION = '1.0-RC';
|
||||
const DATABASE_VERSION = 40;
|
||||
const TABLE_PREFIX = 'myaac_';
|
||||
define('START_TIME', microtime(true));
|
||||
define('MYAAC_OS', stripos(PHP_OS, 'WIN') === 0 ? 'WINDOWS' : (strtoupper(PHP_OS) === 'DARWIN' ? 'MAC' : 'LINUX'));
|
||||
|
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"require": {
|
||||
"php": "^8.1",
|
||||
"php": "^8.0",
|
||||
"ext-pdo": "*",
|
||||
"ext-pdo_mysql": "*",
|
||||
"ext-json": "*",
|
||||
@@ -8,7 +8,7 @@
|
||||
"ext-dom": "*",
|
||||
"phpmailer/phpmailer": "^6.1",
|
||||
"composer/semver": "^3.2",
|
||||
"twig/twig": "^3.11",
|
||||
"twig/twig": "^2.0",
|
||||
"erusev/parsedown": "^1.7",
|
||||
"nikic/fast-route": "^1.3",
|
||||
"matomo/device-detector": "^6.0",
|
||||
@@ -18,7 +18,7 @@
|
||||
"symfony/string": "^6.4",
|
||||
"symfony/var-dumper": "^6.4",
|
||||
"filp/whoops": "^2.15",
|
||||
"maximebf/debugbar": "1.*"
|
||||
"maximebf/debugbar": "dev-master"
|
||||
},
|
||||
"require-dev": {
|
||||
"phpstan/phpstan": "^1.10"
|
||||
|
612
composer.lock
generated
612
composer.lock
generated
File diff suppressed because it is too large
Load Diff
@@ -116,9 +116,9 @@ describe('Check Public Pages', () => {
|
||||
})
|
||||
|
||||
// library
|
||||
it('Go to monsters page', () => {
|
||||
it('Go to creatures page', () => {
|
||||
cy.visit({
|
||||
url: Cypress.env('URL') + '/monsters',
|
||||
url: Cypress.env('URL') + '/creatures',
|
||||
method: 'GET',
|
||||
})
|
||||
})
|
||||
|
@@ -4,7 +4,7 @@ const YOU_ARE_NOT_LOGGEDIN = 'You are not logged in.';
|
||||
describe('Check Protected Pages', () => {
|
||||
|
||||
// character actions
|
||||
it('Go to account character creation page', () => {
|
||||
it('Go to accouht character creation page', () => {
|
||||
cy.visit({
|
||||
url: Cypress.env('URL') + '/account/character/create',
|
||||
method: 'GET',
|
||||
@@ -12,7 +12,7 @@ describe('Check Protected Pages', () => {
|
||||
cy.contains(REQUIRED_LOGIN_MESSAGE)
|
||||
})
|
||||
|
||||
it('Go to account character deletion page', () => {
|
||||
it('Go to accouht character deletion page', () => {
|
||||
cy.visit({
|
||||
url: Cypress.env('URL') + '/account/character/delete',
|
||||
method: 'GET',
|
||||
@@ -21,7 +21,7 @@ describe('Check Protected Pages', () => {
|
||||
})
|
||||
|
||||
// account actions
|
||||
it('Go to account email change page', () => {
|
||||
it('Go to accouht email change page', () => {
|
||||
cy.visit({
|
||||
url: Cypress.env('URL') + '/account/email',
|
||||
method: 'GET',
|
||||
@@ -29,7 +29,7 @@ describe('Check Protected Pages', () => {
|
||||
cy.contains(REQUIRED_LOGIN_MESSAGE)
|
||||
})
|
||||
|
||||
it('Go to account password change page', () => {
|
||||
it('Go to accouht password change page', () => {
|
||||
cy.visit({
|
||||
url: Cypress.env('URL') + '/account/password',
|
||||
method: 'GET',
|
||||
@@ -37,7 +37,7 @@ describe('Check Protected Pages', () => {
|
||||
cy.contains(REQUIRED_LOGIN_MESSAGE)
|
||||
})
|
||||
|
||||
it('Go to account info change page', () => {
|
||||
it('Go to accouht info change page', () => {
|
||||
cy.visit({
|
||||
url: Cypress.env('URL') + '/account/info',
|
||||
method: 'GET',
|
||||
@@ -45,7 +45,7 @@ describe('Check Protected Pages', () => {
|
||||
cy.contains(REQUIRED_LOGIN_MESSAGE)
|
||||
})
|
||||
|
||||
it('Go to account logout change page', () => {
|
||||
it('Go to accouht logout change page', () => {
|
||||
cy.visit({
|
||||
url: Cypress.env('URL') + '/account/logout',
|
||||
method: 'GET',
|
||||
|
155
index.php
155
index.php
@@ -24,7 +24,160 @@
|
||||
* @link https://my-aac.org
|
||||
*/
|
||||
|
||||
use MyAAC\UsageStatistics;
|
||||
use MyAAC\Visitors;
|
||||
|
||||
require_once 'common.php';
|
||||
require_once SYSTEM . 'functions.php';
|
||||
|
||||
app()->run();
|
||||
$uri = $_SERVER['REQUEST_URI'];
|
||||
if(false !== strpos($uri, 'index.php')) {
|
||||
$uri = str_replace_first('/index.php', '', $uri);
|
||||
}
|
||||
|
||||
if(0 === strpos($uri, '/')) {
|
||||
$uri = str_replace_first('/', '', $uri);
|
||||
}
|
||||
|
||||
if(preg_match("/^[A-Za-z0-9-_%'+\/]+\.png$/i", $uri)) {
|
||||
if (!empty(BASE_DIR)) {
|
||||
$tmp = explode('.', str_replace_first(str_replace_first('/', '', BASE_DIR) . '/', '', $uri));
|
||||
}
|
||||
else {
|
||||
$tmp = explode('.', $uri);
|
||||
}
|
||||
|
||||
$_REQUEST['name'] = urldecode($tmp[0]);
|
||||
|
||||
chdir(TOOLS . 'signature');
|
||||
include TOOLS . 'signature/index.php';
|
||||
exit();
|
||||
}
|
||||
|
||||
if(preg_match("/^(.*)\.(gif|jpg|png|jpeg|tiff|bmp|css|js|less|map|html|zip|rar|gz|ttf|woff|ico)$/i", $_SERVER['REQUEST_URI'])) {
|
||||
http_response_code(404);
|
||||
exit;
|
||||
}
|
||||
|
||||
if((!isset($config['installed']) || !$config['installed']) && file_exists(BASE . 'install'))
|
||||
{
|
||||
header('Location: ' . BASE_URL . 'install/');
|
||||
exit();
|
||||
}
|
||||
|
||||
$template_place_holders = array();
|
||||
|
||||
require_once SYSTEM . 'init.php';
|
||||
|
||||
require_once SYSTEM . 'template.php';
|
||||
require_once SYSTEM . 'login.php';
|
||||
require_once SYSTEM . 'status.php';
|
||||
|
||||
$twig->addGlobal('config', $config);
|
||||
$twig->addGlobal('status', $status);
|
||||
|
||||
// backward support for gesior
|
||||
if(setting('core.backward_support')) {
|
||||
define('INITIALIZED', true);
|
||||
$SQL = $db;
|
||||
$layout_header = template_header();
|
||||
$layout_name = $template_path;
|
||||
$news_content = '';
|
||||
$tickers_content = '';
|
||||
$main_content = '';
|
||||
|
||||
$config['access_admin_panel'] = 2;
|
||||
$group_id_of_acc_logged = 0;
|
||||
if($logged && $account_logged)
|
||||
$group_id_of_acc_logged = $account_logged->getGroupId();
|
||||
|
||||
$config['site'] = &$config;
|
||||
$config['server'] = &$config['lua'];
|
||||
$config['site']['shop_system'] = setting('core.gifts_system');
|
||||
$config['site']['gallery_page'] = true;
|
||||
|
||||
if(!isset($config['vdarkborder']))
|
||||
$config['vdarkborder'] = '#505050';
|
||||
if(!isset($config['darkborder']))
|
||||
$config['darkborder'] = '#D4C0A1';
|
||||
if(!isset($config['lightborder']))
|
||||
$config['lightborder'] = '#F1E0C6';
|
||||
|
||||
$config['site']['download_page'] = true;
|
||||
$config['site']['serverinfo_page'] = true;
|
||||
$config['site']['screenshot_page'] = true;
|
||||
|
||||
$forumSetting = setting('core.forum');
|
||||
if($forumSetting != '')
|
||||
$config['forum_link'] = (strtolower($forumSetting) === 'site' ? getLink('forum') : $forumSetting);
|
||||
|
||||
foreach($status as $key => $value)
|
||||
$config['status']['serverStatus_' . $key] = $value;
|
||||
}
|
||||
|
||||
require_once SYSTEM . 'router.php';
|
||||
|
||||
$hooks->trigger(HOOK_STARTUP);
|
||||
|
||||
// anonymous usage statistics
|
||||
// sent only when user agrees
|
||||
if(setting('core.anonymous_usage_statistics')) {
|
||||
$report_time = 30 * 24 * 60 * 60; // report one time per 30 days
|
||||
$should_report = true;
|
||||
|
||||
$value = '';
|
||||
if($cache->enabled() && $cache->fetch('last_usage_report', $value)) {
|
||||
$should_report = time() > (int)$value + $report_time;
|
||||
}
|
||||
else {
|
||||
$value = '';
|
||||
if(fetchDatabaseConfig('last_usage_report', $value)) {
|
||||
$should_report = time() > (int)$value + $report_time;
|
||||
if($cache->enabled()) {
|
||||
$cache->set('last_usage_report', $value);
|
||||
}
|
||||
}
|
||||
else {
|
||||
registerDatabaseConfig('last_usage_report', time() - ($report_time - (7 * 24 * 60 * 60))); // first report after a week
|
||||
$should_report = false;
|
||||
}
|
||||
}
|
||||
|
||||
if($should_report) {
|
||||
UsageStatistics::report();
|
||||
|
||||
updateDatabaseConfig('last_usage_report', time());
|
||||
if($cache->enabled()) {
|
||||
$cache->set('last_usage_report', time());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if(setting('core.views_counter'))
|
||||
require_once SYSTEM . 'counter.php';
|
||||
|
||||
if(setting('core.visitors_counter')) {
|
||||
$visitors = new Visitors(setting('core.visitors_counter_ttl'));
|
||||
}
|
||||
|
||||
/**
|
||||
* @var OTS_Account $account_logged
|
||||
*/
|
||||
if ($logged && admin()) {
|
||||
$content .= $twig->render('admin-bar.html.twig', [
|
||||
'username' => USE_ACCOUNT_NAME ? $account_logged->getName() : $account_logged->getId()
|
||||
]);
|
||||
}
|
||||
$title_full = (isset($title) ? $title . ' - ' : '') . $config['lua']['serverName'];
|
||||
require $template_path . '/' . $template_index;
|
||||
|
||||
echo base64_decode('PCEtLSBQb3dlcmVkIGJ5IE15QUFDIDo6IGh0dHBzOi8vd3d3Lm15LWFhYy5vcmcvIC0tPg==') . PHP_EOL;
|
||||
if(superAdmin()) {
|
||||
echo '<!-- Generated in: ' . round(microtime(true) - START_TIME, 4) . 'ms -->';
|
||||
echo PHP_EOL . '<!-- Queries done: ' . $db->queries() . ' -->';
|
||||
if(function_exists('memory_get_peak_usage')) {
|
||||
echo PHP_EOL . '<!-- Peak memory usage: ' . convert_bytes(memory_get_peak_usage(true)) . ' -->';
|
||||
}
|
||||
}
|
||||
|
||||
$hooks->trigger(HOOK_FINISH);
|
||||
|
@@ -2,9 +2,7 @@
|
||||
defined('MYAAC') or die('Direct access not allowed!');
|
||||
function query($query)
|
||||
{
|
||||
global $error;
|
||||
|
||||
$db = app()->get('database');
|
||||
global $db, $error;
|
||||
|
||||
try {
|
||||
$db->query($query);
|
||||
|
@@ -1,14 +1,14 @@
|
||||
SET @myaac_database_version = 43;
|
||||
SET @myaac_database_version = 40;
|
||||
|
||||
CREATE TABLE `myaac_account_actions`
|
||||
(
|
||||
`id` INT(11) NOT NULL AUTO_INCREMENT,
|
||||
`account_id` INT(11) NOT NULL,
|
||||
`ip` VARCHAR(45) NOT NULL DEFAULT '',
|
||||
`ip` INT(10) UNSIGNED NOT NULL DEFAULT 0,
|
||||
`ipv6` BINARY(16) NOT NULL DEFAULT 0,
|
||||
`date` INT(11) NOT NULL DEFAULT 0,
|
||||
`action` VARCHAR(255) NOT NULL DEFAULT '',
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8mb4;
|
||||
KEY (`account_id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8;
|
||||
|
||||
CREATE TABLE `myaac_admin_menu`
|
||||
(
|
||||
@@ -19,7 +19,22 @@ CREATE TABLE `myaac_admin_menu`
|
||||
`flags` INT(11) NOT NULL DEFAULT 0,
|
||||
`enabled` INT(1) NOT NULL DEFAULT 1,
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8mb4;
|
||||
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8;
|
||||
|
||||
CREATE TABLE `myaac_bugtracker`
|
||||
(
|
||||
`account` VARCHAR(255) NOT NULL,
|
||||
`type` INT(11) NOT NULL DEFAULT 0,
|
||||
`status` INT(11) NOT NULL DEFAULT 0,
|
||||
`text` text NOT NULL,
|
||||
`id` INT(11) NOT NULL DEFAULT 0,
|
||||
`subject` VARCHAR(255) NOT NULL DEFAULT '',
|
||||
`reply` INT(11) NOT NULL DEFAULT 0,
|
||||
`who` INT(11) NOT NULL DEFAULT 0,
|
||||
`uid` INT(11) NOT NULL AUTO_INCREMENT,
|
||||
`tag` INT(11) NOT NULL DEFAULT 0,
|
||||
PRIMARY KEY (`uid`)
|
||||
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8;
|
||||
|
||||
CREATE TABLE `myaac_changelog`
|
||||
(
|
||||
@@ -31,7 +46,7 @@ CREATE TABLE `myaac_changelog`
|
||||
`player_id` INT(11) NOT NULL DEFAULT 0,
|
||||
`hide` TINYINT(1) NOT NULL DEFAULT 0,
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8mb4;
|
||||
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8;
|
||||
|
||||
INSERT INTO `myaac_changelog` (`id`, `type`, `where`, `date`, `body`, `hide`) VALUES (1, 3, 2, UNIX_TIMESTAMP(), 'MyAAC installed. (:', 0);
|
||||
|
||||
@@ -42,7 +57,7 @@ CREATE TABLE `myaac_config`
|
||||
`value` VARCHAR(1000) NOT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE (`name`)
|
||||
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8mb4;
|
||||
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8;
|
||||
|
||||
INSERT INTO `myaac_config` (`name`, `value`) VALUES ('database_version', @myaac_database_version);
|
||||
|
||||
@@ -54,7 +69,7 @@ CREATE TABLE `myaac_faq`
|
||||
`ordering` INT(11) NOT NULL DEFAULT 0,
|
||||
`hide` TINYINT(1) NOT NULL DEFAULT 0,
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8mb4;
|
||||
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8;
|
||||
|
||||
CREATE TABLE `myaac_forum_boards`
|
||||
(
|
||||
@@ -67,7 +82,7 @@ CREATE TABLE `myaac_forum_boards`
|
||||
`closed` TINYINT(1) NOT NULL DEFAULT 0,
|
||||
`hide` TINYINT(1) NOT NULL DEFAULT 0,
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8mb4;
|
||||
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8;
|
||||
INSERT INTO `myaac_forum_boards` (`id`, `name`, `description`, `ordering`, `closed`) VALUES (NULL, 'News', 'News commenting', 0, 1);
|
||||
INSERT INTO `myaac_forum_boards` (`id`, `name`, `description`, `ordering`) VALUES (NULL, 'Trade', 'Trade offers.', 1);
|
||||
INSERT INTO `myaac_forum_boards` (`id`, `name`, `description`, `ordering`) VALUES (NULL, 'Quests', 'Quest making.', 2);
|
||||
@@ -91,12 +106,12 @@ CREATE TABLE `myaac_forum`
|
||||
`post_date` int(20) NOT NULL default '0',
|
||||
`last_edit_aid` int(20) NOT NULL default '0',
|
||||
`edit_date` int(20) NOT NULL default '0',
|
||||
`post_ip` varchar(45) NOT NULL default '0.0.0.0',
|
||||
`post_ip` varchar(32) NOT NULL default '0.0.0.0',
|
||||
`sticked` tinyint(1) NOT NULL DEFAULT '0',
|
||||
`closed` tinyint(1) NOT NULL DEFAULT '0',
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `section` (`section`)
|
||||
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8mb4;
|
||||
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8;
|
||||
|
||||
CREATE TABLE `myaac_menu`
|
||||
(
|
||||
@@ -110,7 +125,7 @@ CREATE TABLE `myaac_menu`
|
||||
`ordering` INT(11) NOT NULL DEFAULT 0,
|
||||
`enabled` INT(1) NOT NULL DEFAULT 1,
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8mb4;
|
||||
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8;
|
||||
|
||||
CREATE TABLE `myaac_monsters` (
|
||||
`id` int(11) NOT NULL AUTO_INCREMENT,
|
||||
@@ -143,7 +158,7 @@ CREATE TABLE `myaac_monsters` (
|
||||
`loot` text NOT NULL,
|
||||
`summons` TEXT NOT NULL,
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8mb4;
|
||||
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8;
|
||||
|
||||
CREATE TABLE `myaac_news`
|
||||
(
|
||||
@@ -161,7 +176,7 @@ CREATE TABLE `myaac_news`
|
||||
`article_image` VARCHAR(100) NOT NULL DEFAULT '',
|
||||
`hide` TINYINT(1) NOT NULL DEFAULT 0,
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8mb4;
|
||||
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8;
|
||||
|
||||
CREATE TABLE `myaac_news_categories`
|
||||
(
|
||||
@@ -171,7 +186,7 @@ CREATE TABLE `myaac_news_categories`
|
||||
`icon_id` INT(2) NOT NULL DEFAULT 0,
|
||||
`hide` TINYINT(1) NOT NULL DEFAULT 0,
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8mb4;
|
||||
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8;
|
||||
|
||||
INSERT INTO `myaac_news_categories` (`id`, `icon_id`) VALUES (NULL, 0);
|
||||
INSERT INTO `myaac_news_categories` (`id`, `icon_id`) VALUES (NULL, 1);
|
||||
@@ -187,7 +202,7 @@ CREATE TABLE `myaac_notepad`
|
||||
`content` TEXT NOT NULL,
|
||||
/*`public` TINYINT(1) NOT NULL DEFAULT 0*/
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8mb4;
|
||||
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8;
|
||||
|
||||
CREATE TABLE `myaac_pages`
|
||||
(
|
||||
@@ -203,7 +218,7 @@ CREATE TABLE `myaac_pages`
|
||||
`hide` TINYINT(1) NOT NULL DEFAULT 0,
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE (`name`)
|
||||
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8mb4;
|
||||
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8;
|
||||
|
||||
CREATE TABLE `myaac_gallery`
|
||||
(
|
||||
@@ -215,7 +230,7 @@ CREATE TABLE `myaac_gallery`
|
||||
`ordering` INT(11) NOT NULL DEFAULT 0,
|
||||
`hide` TINYINT(1) NOT NULL DEFAULT 0,
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8mb4;
|
||||
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8;
|
||||
|
||||
INSERT INTO `myaac_gallery` (`id`, `ordering`, `comment`, `image`, `thumb`, `author`) VALUES (NULL, 1, 'Demon', 'images/gallery/demon.jpg', 'images/gallery/demon_thumb.gif', 'MyAAC');
|
||||
|
||||
@@ -227,7 +242,7 @@ CREATE TABLE `myaac_settings`
|
||||
`value` TEXT NOT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `key` (`key`)
|
||||
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8mb4;
|
||||
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8;
|
||||
|
||||
CREATE TABLE `myaac_spells`
|
||||
(
|
||||
@@ -250,7 +265,7 @@ CREATE TABLE `myaac_spells`
|
||||
`hide` TINYINT(1) NOT NULL DEFAULT 0,
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE (`name`)
|
||||
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8mb4;
|
||||
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8;
|
||||
|
||||
CREATE TABLE `myaac_visitors`
|
||||
(
|
||||
@@ -259,7 +274,7 @@ CREATE TABLE `myaac_visitors`
|
||||
`page` VARCHAR(2048) NOT NULL,
|
||||
`user_agent` VARCHAR(255) NOT NULL DEFAULT '',
|
||||
UNIQUE (`ip`)
|
||||
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8mb4;
|
||||
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8;
|
||||
|
||||
CREATE TABLE `myaac_weapons`
|
||||
(
|
||||
@@ -268,4 +283,4 @@ CREATE TABLE `myaac_weapons`
|
||||
`maglevel` INT(11) NOT NULL DEFAULT 0,
|
||||
`vocations` VARCHAR(100) NOT NULL DEFAULT '',
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8mb4;
|
||||
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8;
|
||||
|
@@ -125,18 +125,7 @@ else if($step == 'finish') {
|
||||
}
|
||||
|
||||
// account check
|
||||
if(isset($_SESSION['var_account_id'])) {
|
||||
if(empty($_SESSION['var_account_id'])) {
|
||||
$errors[] = $locale['step_admin_account_id_error_empty'];
|
||||
}
|
||||
else if(!Validator::accountId($_SESSION['var_account_id'])) {
|
||||
$errors[] = $locale['step_admin_account_id_error_format'];
|
||||
}
|
||||
else if($_SESSION['var_account_id'] == $password) {
|
||||
$errors[] = $locale['step_admin_account_id_error_same'];
|
||||
}
|
||||
}
|
||||
else if(isset($_SESSION['var_account'])) {
|
||||
if(isset($_SESSION['var_account'])) {
|
||||
if(empty($_SESSION['var_account'])) {
|
||||
$errors[] = $locale['step_admin_account_error_empty'];
|
||||
}
|
||||
@@ -147,6 +136,17 @@ else if($step == 'finish') {
|
||||
$errors[] = $locale['step_admin_account_error_same'];
|
||||
}
|
||||
}
|
||||
else if(isset($_SESSION['var_account_id'])) {
|
||||
if(empty($_SESSION['var_account_id'])) {
|
||||
$errors[] = $locale['step_admin_account_id_error_empty'];
|
||||
}
|
||||
else if(!Validator::accountId($_SESSION['var_account_id'])) {
|
||||
$errors[] = $locale['step_admin_account_id_error_format'];
|
||||
}
|
||||
else if($_SESSION['var_account_id'] == $password) {
|
||||
$errors[] = $locale['step_admin_account_id_error_same'];
|
||||
}
|
||||
}
|
||||
|
||||
// password check
|
||||
if(empty($password)) {
|
||||
@@ -183,14 +183,14 @@ clearstatcache();
|
||||
if(is_writable(CACHE) && (MYAAC_OS != 'WINDOWS' || win_is_writable(CACHE))) {
|
||||
if(!file_exists(BASE . 'install/ip.txt')) {
|
||||
$content = warning('AAC installation is disabled. To enable it make file <b>ip.txt</b> in install/ directory and put there your IP.<br/>
|
||||
Your IP is:<br /><b>' . get_browser_real_ip() . '</b>', true);
|
||||
Your IP is:<br /><b>' . $_SERVER['REMOTE_ADDR'] . '</b>', true);
|
||||
}
|
||||
else {
|
||||
$file_content = trim(file_get_contents(BASE . 'install/ip.txt'));
|
||||
$allow = false;
|
||||
$listIP = preg_split('/\s+/', $file_content);
|
||||
foreach($listIP as $ip) {
|
||||
if(get_browser_real_ip() == $ip) {
|
||||
if($_SERVER['REMOTE_ADDR'] == $ip) {
|
||||
$allow = true;
|
||||
}
|
||||
}
|
||||
@@ -199,7 +199,7 @@ if(is_writable(CACHE) && (MYAAC_OS != 'WINDOWS' || win_is_writable(CACHE))) {
|
||||
{
|
||||
$content = warning('In file <b>install/ip.txt</b> must be your IP!<br/>
|
||||
In file is:<br /><b>' . nl2br($file_content) . '</b><br/>
|
||||
Your IP is:<br /><b>' . get_browser_real_ip() . '</b>', true);
|
||||
Your IP is:<br /><b>' . $_SERVER['REMOTE_ADDR'] . '</b>', true);
|
||||
}
|
||||
else {
|
||||
ob_start();
|
||||
|
@@ -40,7 +40,6 @@ if(!$error) {
|
||||
$configToSave['gzip_output'] = false;
|
||||
$configToSave['cache_engine'] = 'auto';
|
||||
$configToSave['cache_prefix'] = 'myaac_' . generateRandomString(8, true, false, true);
|
||||
$configToSave['database_auto_migrate'] = true;
|
||||
|
||||
if(!$error) {
|
||||
$content = '';
|
||||
|
@@ -12,7 +12,7 @@ if(isset($config['installed']) && $config['installed'] && !isset($_SESSION['save
|
||||
return;
|
||||
}
|
||||
|
||||
$cache = app()->get('cache');
|
||||
$cache = Cache::getInstance();
|
||||
if ($cache->enabled()) {
|
||||
// clear plugin_hooks to have fresh hooks
|
||||
$cache->delete('plugins_hooks');
|
||||
@@ -58,7 +58,7 @@ if ($db->hasTable('players')) {
|
||||
$player_used = &$player_db;
|
||||
}
|
||||
|
||||
$groups = app()->get('groups');
|
||||
$groups = new OTS_Groups_List();
|
||||
$player_used->setGroupId($groups->getHighestId());
|
||||
}
|
||||
|
||||
|
@@ -1,4 +1,3 @@
|
||||
<?php defined('MYAAC') or die('Direct access not allowed!'); ?>
|
||||
<!DOCTYPE html>
|
||||
<html dir="<?php echo $locale['direction']; ?>" lang="<?php echo $locale['lang']; ?>" xml:lang="<?php echo $locale['lang']; ?>">
|
||||
<head>
|
||||
|
@@ -156,14 +156,9 @@ if ($db->hasTable('guilds')) {
|
||||
}
|
||||
|
||||
if (!$db->hasColumn('guilds', 'description')) {
|
||||
if (query("ALTER TABLE `guilds` ADD `description` VARCHAR(5000) NOT NULL DEFAULT '';"))
|
||||
if (query("ALTER TABLE `guilds` ADD `description` TEXT NOT NULL;"))
|
||||
success($locale['step_database_adding_field'] . ' guilds.description...');
|
||||
}
|
||||
else {
|
||||
if (query("ALTER TABLE `guilds` MODIFY `description` VARCHAR(5000) NOT NULL DEFAULT '';")) {
|
||||
success($locale['step_database_modifying_field'] . ' guilds.description...');
|
||||
}
|
||||
}
|
||||
|
||||
if ($db->hasColumn('guilds', 'logo_gfx_name')) {
|
||||
if (query("ALTER TABLE `guilds` CHANGE `logo_gfx_name` `logo_name` VARCHAR( 255 ) NOT NULL DEFAULT 'default.gif';")) {
|
||||
@@ -202,14 +197,9 @@ if ($db->hasTable('players')) {
|
||||
}
|
||||
|
||||
if (!$db->hasColumn('players', 'comment')) {
|
||||
if (query("ALTER TABLE `players` ADD `comment` VARCHAR(5000) NOT NULL DEFAULT '';"))
|
||||
if (query("ALTER TABLE `players` ADD `comment` TEXT NOT NULL;"))
|
||||
success($locale['step_database_adding_field'] . ' players.comment...');
|
||||
}
|
||||
else {
|
||||
if (query("ALTER TABLE `players` MODIFY `comment` VARCHAR(5000) NOT NULL DEFAULT '';")) {
|
||||
success($locale['step_database_modifying_field'] . ' players.comment...');
|
||||
}
|
||||
}
|
||||
|
||||
if ($db->hasColumn('players', 'rank_id')) {
|
||||
if (query("ALTER TABLE players MODIFY `rank_id` INT(11) NOT NULL DEFAULT 0;"))
|
||||
|
@@ -33,9 +33,7 @@ if ($db->hasTable('players')) {
|
||||
$time = time();
|
||||
function insert_sample_if_not_exist($p)
|
||||
{
|
||||
global $success, $deleted, $time;
|
||||
|
||||
$db = app()->get('database');
|
||||
global $db, $success, $deleted, $time;
|
||||
|
||||
$query = $db->query('SELECT `id` FROM `players` WHERE `name` = ' . $db->quote($p['name']));
|
||||
if ($query->rowCount() == 0) {
|
||||
@@ -64,21 +62,16 @@ DataLoader::load();
|
||||
|
||||
// update config.highscores_ids_hidden
|
||||
require_once SYSTEM . 'migrations/20.php';
|
||||
$up();
|
||||
|
||||
// add z_polls tables
|
||||
require_once SYSTEM . 'migrations/22.php';
|
||||
$up();
|
||||
|
||||
// add myaac_pages pages
|
||||
require_once SYSTEM . 'migrations/27.php';
|
||||
$up();
|
||||
require_once SYSTEM . 'migrations/30.php';
|
||||
$up();
|
||||
|
||||
// new monster columns
|
||||
require_once SYSTEM . 'migrations/31.php';
|
||||
$up();
|
||||
|
||||
if(ModelsFAQ::count() == 0) {
|
||||
ModelsFAQ::create([
|
||||
|
@@ -12,6 +12,10 @@ server {
|
||||
deny all;
|
||||
}
|
||||
|
||||
location /vendor {
|
||||
deny all;
|
||||
}
|
||||
|
||||
# block .htaccess, CHANGELOG.md, composer.json etc.
|
||||
# this is to prevent finding software versions
|
||||
location ~\.(ht|md|json|dist)$ {
|
||||
@@ -24,7 +28,7 @@ server {
|
||||
}
|
||||
|
||||
location / {
|
||||
try_files $uri $uri/ /index.php?$query_string;
|
||||
try_files $uri $uri/ /index.php?$query_string;;
|
||||
}
|
||||
|
||||
location ~ \.php$ {
|
||||
|
905
package-lock.json
generated
905
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@@ -4,7 +4,7 @@
|
||||
"postinstall": "node ./npm-post-install.js"
|
||||
},
|
||||
"devDependencies": {
|
||||
"cypress": "^13.17.0"
|
||||
"cypress": "^12.12.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"@tinymce/tinymce-jquery": "^2.1.0",
|
||||
@@ -12,6 +12,6 @@
|
||||
"fs-extra": "^11.2.0",
|
||||
"jquery": "^3.7.1",
|
||||
"jquery-ui": "^1.13.2",
|
||||
"tinymce": "^7.2.0"
|
||||
"tinymce": "^6.8.3"
|
||||
}
|
||||
}
|
||||
|
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "create-account-hint",
|
||||
"description": "This plugin display text 'To play on Forgotten you need an account. All you have to do to create your new account is to enter an account name, password, country and your email address. Also you have to agree to the terms presented below. If you have done so, your account name will be shown on the following page and your account password will be sent to your email address along with further instructions. If you do not receive the email with your password, please check your spam filter.' on the create account page.",
|
||||
"description": "This plugin display text 'To play on Forgotten you need an account. All you have to do to create your new account is to enter an account name, password, country and your email address. Also you have to agree to the terms presented below. If you have done so, your account name will be shown on the following page and your account password will be sent to your email address along with further instructions. If you do not receive the email with your password, please check your spam filter.' on the create account page. <strong>Be careful when uninstalling this!</strong>",
|
||||
"version": "1.0",
|
||||
"author": "slawkens",
|
||||
"contact": "slawkens@gmail.com",
|
||||
|
@@ -9,4 +9,7 @@
|
||||
*/
|
||||
defined('MYAAC') or die('Direct access not allowed!');
|
||||
|
||||
$twig->display('account-create-hint/hint.html.twig');
|
||||
global $twig_loader;
|
||||
$twig_loader->prependPath(BASE . 'plugins/account-create-hint');
|
||||
|
||||
$twig->display('hint.html.twig');
|
||||
|
@@ -22,7 +22,7 @@ if [ $1 = "prepare" ]; then
|
||||
mkdir -p tmp
|
||||
|
||||
# get myaac from git archive
|
||||
git archive --format zip --output tmp/myaac.zip main
|
||||
git archive --format zip --output tmp/myaac.zip develop
|
||||
|
||||
cd tmp/ || exit
|
||||
|
||||
|
@@ -9,6 +9,72 @@
|
||||
*/
|
||||
defined('MYAAC') or die('Direct access not allowed!');
|
||||
|
||||
class Validator extends \MyAAC\Validator {}
|
||||
|
||||
function check_name($name, &$errors = '') {
|
||||
if(Validator::characterName($name))
|
||||
return true;
|
||||
|
||||
$errors = Validator::getLastError();
|
||||
return false;
|
||||
}
|
||||
|
||||
function check_account_id($id, &$errors = '') {
|
||||
if(Validator::accountId($id))
|
||||
return true;
|
||||
|
||||
$errors = Validator::getLastError();
|
||||
return false;
|
||||
}
|
||||
|
||||
function check_account_name($name, &$errors = '') {
|
||||
if(Validator::accountName($name))
|
||||
return true;
|
||||
|
||||
$errors = Validator::getLastError();
|
||||
return false;
|
||||
}
|
||||
|
||||
function check_name_new_char($name, &$errors = '') {
|
||||
if(Validator::newCharacterName($name))
|
||||
return true;
|
||||
|
||||
$errors = Validator::getLastError();
|
||||
return false;
|
||||
}
|
||||
|
||||
function check_rank_name($name, &$errors = '') {
|
||||
if(Validator::rankName($name))
|
||||
return true;
|
||||
|
||||
$errors = Validator::getLastError();
|
||||
return false;
|
||||
}
|
||||
|
||||
function check_guild_name($name, &$errors = '') {
|
||||
if(Validator::guildName($name))
|
||||
return true;
|
||||
|
||||
$errors = Validator::getLastError();
|
||||
return false;
|
||||
}
|
||||
|
||||
function news_place() {
|
||||
return tickers();
|
||||
}
|
||||
|
||||
function tableExist($table)
|
||||
{
|
||||
global $db;
|
||||
return $db->hasTable($table);
|
||||
}
|
||||
|
||||
function fieldExist($field, $table)
|
||||
{
|
||||
global $db;
|
||||
return $db->hasColumn($table, $field);
|
||||
}
|
||||
|
||||
function getCreatureImgPath($creature): string {
|
||||
return getMonsterImgPath($creature);
|
||||
}
|
||||
|
@@ -36,6 +36,3 @@ class Guild extends OTS_Guild {
|
||||
}
|
||||
class GuildRank extends OTS_GuildRank {}
|
||||
class House extends OTS_House {}
|
||||
|
||||
class Cache extends \MyAAC\Cache\Cache {}
|
||||
class Validator extends \MyAAC\Validator {}
|
||||
|
60
system/compat/pages.php
Normal file
60
system/compat/pages.php
Normal file
@@ -0,0 +1,60 @@
|
||||
<?php
|
||||
/**
|
||||
* Compat pages (backward support for Gesior AAC)
|
||||
*
|
||||
* @package MyAAC
|
||||
* @author Slawkens <slawkens@gmail.com>
|
||||
* @copyright 2019 MyAAC
|
||||
* @link https://my-aac.org
|
||||
*/
|
||||
defined('MYAAC') or die('Direct access not allowed!');
|
||||
switch($page)
|
||||
{
|
||||
case 'adminpanel':
|
||||
header('Location: ' . ADMIN_URL);
|
||||
die;
|
||||
|
||||
case 'createaccount':
|
||||
$page = 'account/create';
|
||||
break;
|
||||
|
||||
case 'accountmanagement':
|
||||
$page = 'account/manage';
|
||||
break;
|
||||
|
||||
case 'lostaccount':
|
||||
$page = 'account/lost';
|
||||
break;
|
||||
|
||||
case 'whoisonline':
|
||||
$page = 'online';
|
||||
break;
|
||||
|
||||
case 'latestnews':
|
||||
$page = 'news';
|
||||
break;
|
||||
|
||||
case 'archive':
|
||||
case 'newsarchive':
|
||||
$page = 'news/archive';
|
||||
break;
|
||||
|
||||
case 'tibiarules':
|
||||
$page = 'rules';
|
||||
break;
|
||||
|
||||
case 'killstatistics':
|
||||
$page = 'last-kills';
|
||||
break;
|
||||
|
||||
case 'buypoints':
|
||||
$page = 'points';
|
||||
break;
|
||||
|
||||
case 'shopsystem':
|
||||
$page = 'gifts';
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
@@ -15,7 +15,7 @@ define('COUNTER_SYNC', 10); // how often counter is synchronized with database (
|
||||
|
||||
$views_counter = 1; // default value, must be here!
|
||||
|
||||
$cache = app()->get('cache');
|
||||
$cache = Cache::getInstance();
|
||||
if($cache->enabled())
|
||||
{
|
||||
$value = 0;
|
||||
|
140
system/database.php
Normal file
140
system/database.php
Normal file
@@ -0,0 +1,140 @@
|
||||
<?php
|
||||
/**
|
||||
* Database connection
|
||||
*
|
||||
* @package MyAAC
|
||||
* @author Slawkens <slawkens@gmail.com>
|
||||
* @copyright 2019 MyAAC
|
||||
* @link https://my-aac.org
|
||||
*/
|
||||
|
||||
use Illuminate\Database\Capsule\Manager as Capsule;
|
||||
|
||||
defined('MYAAC') or die('Direct access not allowed!');
|
||||
|
||||
if (!isset($config['database_overwrite'])) {
|
||||
$config['database_overwrite'] = false;
|
||||
}
|
||||
|
||||
if(!$config['database_overwrite'] && !isset($config['database_user'][0], $config['database_password'][0], $config['database_name'][0]))
|
||||
{
|
||||
if(isset($config['lua']['sqlType'])) {// tfs 0.3
|
||||
if(isset($config['lua']['mysqlHost'])) {// tfs 0.2
|
||||
$config['otserv_version'] = TFS_02;
|
||||
$config['database_type'] = 'mysql';
|
||||
$config['database_host'] = $config['lua']['mysqlHost'];
|
||||
$config['database_port'] = $config['lua']['mysqlPort'];
|
||||
$config['database_user'] = $config['lua']['mysqlUser'];
|
||||
$config['database_password'] = $config['lua']['mysqlPass'];
|
||||
$config['database_name'] = $config['lua']['mysqlDatabase'];
|
||||
$config['database_encryption'] = $config['lua']['passwordType'];
|
||||
}
|
||||
else {
|
||||
$config['otserv_version'] = TFS_03;
|
||||
$config['database_type'] = $config['lua']['sqlType'];
|
||||
$config['database_host'] = $config['lua']['sqlHost'];
|
||||
$config['database_port'] = $config['lua']['sqlPort'];
|
||||
$config['database_user'] = $config['lua']['sqlUser'];
|
||||
$config['database_password'] = $config['lua']['sqlPass'];
|
||||
$config['database_name'] = $config['lua']['sqlDatabase'];
|
||||
|
||||
$config['database_encryption'] = $config['lua']['encryptionType'];
|
||||
if(!isset($config['database_encryption']) || empty($config['database_encryption'])) // before 0.3.6
|
||||
$config['database_encryption'] = $config['lua']['passwordType'];
|
||||
}
|
||||
}
|
||||
else if(isset($config['lua']['mysqlHost'])) // tfs 1.0
|
||||
{
|
||||
$config['otserv_version'] = TFS_02;
|
||||
$config['database_type'] = 'mysql';
|
||||
$config['database_host'] = $config['lua']['mysqlHost'];
|
||||
$config['database_port'] = $config['lua']['mysqlPort'];
|
||||
$config['database_user'] = $config['lua']['mysqlUser'];
|
||||
$config['database_password'] = $config['lua']['mysqlPass'];
|
||||
$config['database_name'] = $config['lua']['mysqlDatabase'];
|
||||
if(!isset($config['database_socket'][0])) {
|
||||
$config['database_socket'] = isset($config['lua']['mysqlSock']) ? trim($config['lua']['mysqlSock']) : '';
|
||||
}
|
||||
$config['database_encryption'] = 'sha1';
|
||||
}
|
||||
else if(isset($config['lua']['database_type'])) // otserv
|
||||
{
|
||||
$config['otserv_version'] = OTSERV;
|
||||
$config['database_type'] = $config['lua']['database_type'];
|
||||
$config['database_host'] = $config['lua']['database_host'];
|
||||
$config['database_port'] = $config['lua']['database_port'];
|
||||
$config['database_user'] = $config['lua']['database_username'];
|
||||
$config['database_password'] = $config['lua']['database_password'];
|
||||
$config['database_name'] = $config['lua']['database_schema'];
|
||||
$config['database_encryption'] = isset($config['lua']['passwordtype']) ? $config['lua']['passwordtype'] : $config['lua']['password_type'];
|
||||
$config['database_salt'] = isset($config['lua']['passwordsalt']) ? $config['lua']['passwordsalt'] : $config['lua']['password_salt'];
|
||||
}
|
||||
else if(isset($config['lua']['sql_host'])) // otserv 0.6.3 / 0.6.4
|
||||
{
|
||||
$config['otserv_version'] = OTSERV_06;
|
||||
$config['database_type'] = $config['lua']['sql_type'];
|
||||
$config['database_host'] = $config['lua']['sql_host'];
|
||||
$config['database_port'] = $config['lua']['sql_port'];
|
||||
$config['database_user'] = $config['lua']['sql_user'];
|
||||
$config['database_password'] = $config['lua']['sql_pass'];
|
||||
$config['database_name'] = $config['lua']['sql_db'];
|
||||
$config['database_encryption'] = isset($config['lua']['passwordtype']) ? $config['lua']['passwordtype'] : $config['lua']['password_type'];
|
||||
$config['database_salt'] = isset($config['lua']['passwordsalt']) ? $config['lua']['passwordsalt'] : $config['lua']['password_salt'];
|
||||
}
|
||||
}
|
||||
|
||||
if(isset($config['lua']['useMD5Passwords']) && getBoolean($config['lua']['useMD5Passwords']))
|
||||
$config['database_encryption'] = 'md5';
|
||||
|
||||
if(!isset($config['database_log'])) {
|
||||
$config['database_log'] = false;
|
||||
}
|
||||
|
||||
if(!isset($config['database_socket'])) {
|
||||
$config['database_socket'] = '';
|
||||
}
|
||||
|
||||
|
||||
try {
|
||||
$ots->connect(array(
|
||||
'host' => $config['database_host'],
|
||||
'user' => $config['database_user'],
|
||||
'password' => $config['database_password'],
|
||||
'database' => $config['database_name'],
|
||||
'log' => $config['database_log'],
|
||||
'socket' => @$config['database_socket'],
|
||||
'persistent' => @$config['database_persistent']
|
||||
));
|
||||
|
||||
$db = POT::getInstance()->getDBHandle();
|
||||
$capsule = new Capsule;
|
||||
$capsule->addConnection([
|
||||
'driver' => 'mysql',
|
||||
'database' => $config['database_name'],
|
||||
]);
|
||||
|
||||
$capsule->getConnection()->setPdo($db);
|
||||
$capsule->getConnection()->setReadPdo($db);
|
||||
|
||||
$capsule->setAsGlobal();
|
||||
$capsule->bootEloquent();
|
||||
|
||||
$eloquentConnection = $capsule->getConnection();
|
||||
|
||||
} catch (Exception $e) {
|
||||
if(isset($cache) && $cache->enabled()) {
|
||||
$cache->delete('config_lua');
|
||||
}
|
||||
|
||||
if(defined('MYAAC_INSTALL')) {
|
||||
$error = $e->getMessage();
|
||||
return; // installer will take care of this
|
||||
}
|
||||
|
||||
throw new RuntimeException('ERROR: Cannot connect to MySQL database.<br/>' .
|
||||
'Possible reasons:' .
|
||||
'<ul>' .
|
||||
'<li>MySQL is not configured propertly in <i>config.lua</i>.</li>' .
|
||||
'<li>MySQL server is not running.</li>' .
|
||||
'</ul>' . $e->getMessage());
|
||||
}
|
@@ -9,16 +9,16 @@
|
||||
*/
|
||||
|
||||
use MyAAC\Exceptions\SensitiveException;
|
||||
use Whoops\Handler\PlainTextHandler;
|
||||
use Whoops\Handler\PrettyPageHandler;
|
||||
use Whoops\Run;
|
||||
|
||||
if (class_exists(Run::class)) {
|
||||
$whoops = new Run;
|
||||
if (class_exists(\Whoops\Run::class)) {
|
||||
$whoops = new \Whoops\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();
|
||||
return;
|
||||
}
|
||||
|
@@ -9,7 +9,6 @@
|
||||
*/
|
||||
defined('MYAAC') or die('Direct access not allowed!');
|
||||
|
||||
use MyAAC\App\App;
|
||||
use MyAAC\Cache\Cache;
|
||||
use MyAAC\CsrfToken;
|
||||
use MyAAC\Items;
|
||||
@@ -50,7 +49,7 @@ function warning($message, $return = false) {
|
||||
return message($message, 'warning', $return);
|
||||
}
|
||||
function note($message, $return = false) {
|
||||
return message($message, 'note', $return);
|
||||
return info($message, $return);
|
||||
}
|
||||
function info($message, $return = false) {
|
||||
return message($message, 'info', $return);
|
||||
@@ -90,18 +89,13 @@ function getForumBoardLink($board_id, $page = NULL): string {
|
||||
|
||||
function getPlayerLink($name, $generate = true, bool $colored = false): string
|
||||
{
|
||||
if (is_object($name) and $name instanceof OTS_Player) {
|
||||
$player = $name;
|
||||
$player = new OTS_Player();
|
||||
|
||||
if(is_numeric($name)) {
|
||||
$player->load((int)$name);
|
||||
}
|
||||
else {
|
||||
$player = new OTS_Player();
|
||||
|
||||
if(is_numeric($name)) {
|
||||
$player->load((int)$name);
|
||||
}
|
||||
else {
|
||||
$player->find($name);
|
||||
}
|
||||
$player->find($name);
|
||||
}
|
||||
|
||||
if (!$player->isLoaded()) {
|
||||
@@ -122,7 +116,7 @@ function getPlayerLink($name, $generate = true, bool $colored = false): string
|
||||
|
||||
function getMonsterLink($name, $generate = true): string
|
||||
{
|
||||
$url = BASE_URL . (setting('core.friendly_urls') ? '' : 'index.php/') . 'monsters?name=' . urlencode($name);
|
||||
$url = BASE_URL . (setting('core.friendly_urls') ? '' : 'index.php/') . 'monsters/' . urlencode($name);
|
||||
|
||||
if(!$generate) return $url;
|
||||
return generateLink($url, $name);
|
||||
@@ -130,14 +124,16 @@ function getMonsterLink($name, $generate = true): string
|
||||
|
||||
function getHouseLink($name, $generate = true): string
|
||||
{
|
||||
if(is_numeric($name)) {
|
||||
if(is_numeric($name))
|
||||
{
|
||||
$house = House::find(intval($name), ['name']);
|
||||
if ($house) {
|
||||
$name = $house->name;
|
||||
}
|
||||
}
|
||||
|
||||
$url = BASE_URL . (setting('core.friendly_urls') ? '' : 'index.php/') . 'houses?name=' . urlencode($name);
|
||||
|
||||
$url = BASE_URL . (setting('core.friendly_urls') ? '' : 'index.php/') . 'houses/' . urlencode($name);
|
||||
|
||||
if(!$generate) return $url;
|
||||
return generateLink($url, $name);
|
||||
@@ -275,10 +271,7 @@ function generateRandomString($length, $lowCase = true, $upCase = false, $numeri
|
||||
*/
|
||||
function getForumBoards()
|
||||
{
|
||||
global $canEdit;
|
||||
|
||||
$db = app()->get('database');
|
||||
|
||||
global $db, $canEdit;
|
||||
$sections = $db->query('SELECT `id`, `name`, `description`, `closed`, `guild`, `access`' . ($canEdit ? ', `hide`, `ordering`' : '') . ' FROM `' . TABLE_PREFIX . 'forum_boards` ' . (!$canEdit ? ' WHERE `hide` != 1' : '') .
|
||||
' ORDER BY `ordering`;');
|
||||
if($sections)
|
||||
@@ -354,12 +347,13 @@ function updateDatabaseConfig($name, $value)
|
||||
*/
|
||||
function encrypt($str)
|
||||
{
|
||||
$configDatabaseSalt = config('database_salt');
|
||||
if(isset($configDatabaseSalt)) // otserv
|
||||
$str .= $configDatabaseSalt;
|
||||
global $config;
|
||||
if(isset($config['database_salt'])) // otserv
|
||||
$str .= $config['database_salt'];
|
||||
|
||||
$encryptionType = config('database_encryption');
|
||||
if(isset($encryptionType) && strtolower($encryptionType) !== 'plain') {
|
||||
$encryptionType = $config['database_encryption'];
|
||||
if(isset($encryptionType) && strtolower($encryptionType) !== 'plain')
|
||||
{
|
||||
if($encryptionType === 'vahash')
|
||||
return base64_encode(hash('sha256', $str));
|
||||
|
||||
@@ -435,7 +429,7 @@ function delete_guild($id)
|
||||
if(count($rank_list) > 0) {
|
||||
$rank_list->orderBy('level');
|
||||
|
||||
$db = app()->get('database');
|
||||
global $db;
|
||||
/**
|
||||
* @var OTS_GuildRank $rank_in_guild
|
||||
*/
|
||||
@@ -497,11 +491,9 @@ function tickers()
|
||||
*/
|
||||
function template_place_holder($type): string
|
||||
{
|
||||
global $template_place_holders, $debugBar;
|
||||
global $twig, $template_place_holders, $debugBar;
|
||||
$ret = '';
|
||||
|
||||
$twig = app()->get('twig');
|
||||
|
||||
if (isset($debugBar)) {
|
||||
$debugBarRenderer = $debugBar->getJavascriptRenderer();
|
||||
}
|
||||
@@ -533,11 +525,9 @@ function template_place_holder($type): string
|
||||
*/
|
||||
function template_header($is_admin = false): string
|
||||
{
|
||||
global $title_full;
|
||||
global $title_full, $twig;
|
||||
$charset = setting('core.charset') ?? 'utf-8';
|
||||
|
||||
$twig = app()->get('twig');
|
||||
|
||||
return $twig->render('templates.header.html.twig',
|
||||
[
|
||||
'charset' => $charset,
|
||||
@@ -552,44 +542,38 @@ function template_header($is_admin = false): string
|
||||
*/
|
||||
function template_footer(): string
|
||||
{
|
||||
$footer = [];
|
||||
|
||||
global $views_counter;
|
||||
$ret = '';
|
||||
if(admin()) {
|
||||
$footer[] = generateLink(ADMIN_URL, 'Admin Panel', true);
|
||||
$ret .= generateLink(ADMIN_URL, 'Admin Panel', true);
|
||||
}
|
||||
|
||||
if(setting('core.visitors_counter')) {
|
||||
global $visitors;
|
||||
$amount = $visitors->getAmountVisitors();
|
||||
$footer[] = 'Currently there ' . ($amount > 1 ? 'are' : 'is') . ' ' . $amount . ' visitor' . ($amount > 1 ? 's' : '') . '.';
|
||||
$ret .= '<br/>Currently there ' . ($amount > 1 ? 'are' : 'is') . ' ' . $amount . ' visitor' . ($amount > 1 ? 's' : '') . '.';
|
||||
}
|
||||
|
||||
if(setting('core.views_counter')) {
|
||||
global $views_counter;
|
||||
$footer[] = 'Page has been viewed ' . $views_counter . ' times.';
|
||||
$ret .= '<br/>Page has been viewed ' . $views_counter . ' times.';
|
||||
}
|
||||
|
||||
if(setting('core.footer_load_time')) {
|
||||
$footer[] = 'Load time: ' . round(microtime(true) - START_TIME, 4) . ' seconds.';
|
||||
$ret .= '<br/>Load time: ' . round(microtime(true) - START_TIME, 4) . ' seconds.';
|
||||
}
|
||||
|
||||
$settingFooter = setting('core.footer');
|
||||
if(isset($settingFooter[0])) {
|
||||
$footer[] = '' . $settingFooter;
|
||||
$ret .= '<br/>' . $settingFooter;
|
||||
}
|
||||
|
||||
// please respect my work and help spreading the word, thanks!
|
||||
$footer[] = base64_decode('UG93ZXJlZCBieSA8YSBocmVmPSJodHRwOi8vbXktYWFjLm9yZyIgdGFyZ2V0PSJfYmxhbmsiPk15QUFDLjwvYT4=');
|
||||
|
||||
$hooks = app()->get('hooks');
|
||||
$footer = $hooks->triggerFilter(HOOK_FILTER_THEME_FOOTER, $footer);
|
||||
|
||||
return implode('<br/>', $footer);
|
||||
return $ret . '<br/>' . base64_decode('UG93ZXJlZCBieSA8YSBocmVmPSJodHRwOi8vbXktYWFjLm9yZyIgdGFyZ2V0PSJfYmxhbmsiPk15QUFDLjwvYT4=');
|
||||
}
|
||||
|
||||
function template_ga_code()
|
||||
{
|
||||
$twig = app()->get('twig');
|
||||
global $twig;
|
||||
if(!isset(setting('core.google_analytics_id')[0]))
|
||||
return '';
|
||||
|
||||
@@ -600,20 +584,34 @@ function template_form()
|
||||
{
|
||||
global $template_name;
|
||||
|
||||
$templates = Cache::remember('templates', 5 * 60, function() {
|
||||
return get_templates();
|
||||
});
|
||||
$cache = Cache::getInstance();
|
||||
if($cache->enabled())
|
||||
{
|
||||
$tmp = '';
|
||||
if($cache->fetch('templates', $tmp)) {
|
||||
$templates = unserialize($tmp);
|
||||
}
|
||||
else
|
||||
{
|
||||
$templates = get_templates();
|
||||
$cache->set('templates', serialize($templates), 30);
|
||||
}
|
||||
}
|
||||
else
|
||||
$templates = get_templates();
|
||||
|
||||
$options = '';
|
||||
foreach($templates as $value)
|
||||
foreach($templates as $key => $value)
|
||||
$options .= '<option ' . ($template_name == $value ? 'SELECTED' : '') . '>' . $value . '</option>';
|
||||
|
||||
$twig = app()->get('twig');
|
||||
global $twig;
|
||||
return $twig->render('forms.change_template.html.twig', ['options' => $options]);
|
||||
}
|
||||
|
||||
function getStyle($i) {
|
||||
return is_int($i / 2) ? config('darkborder') : config('lightborder');
|
||||
function getStyle($i)
|
||||
{
|
||||
global $config;
|
||||
return is_int($i / 2) ? $config['darkborder'] : $config['lightborder'];
|
||||
}
|
||||
|
||||
$vowels = array('e', 'y', 'u', 'i', 'o', 'a');
|
||||
@@ -723,20 +721,13 @@ function getSkillName($skillId, $suffix = true)
|
||||
return 'unknown';
|
||||
}
|
||||
|
||||
function logged(): bool {
|
||||
return app()->isLoggedIn();
|
||||
}
|
||||
|
||||
function accountLogged(): OTS_Account {
|
||||
$loggedAccount = app()->getAccountLogged();
|
||||
return $loggedAccount ?? new OTS_Account();
|
||||
}
|
||||
/**
|
||||
* Performs flag check on the current logged in user.
|
||||
* Table in database: accounts, field: website_flags
|
||||
*/
|
||||
function hasFlag(int $flag): bool {
|
||||
return (logged() && (accountLogged()->getWebFlags() & $flag) == $flag);
|
||||
global $logged, $logged_flags;
|
||||
return ($logged && ($logged_flags & $flag) == $flag);
|
||||
}
|
||||
/**
|
||||
* Check if current logged user have got admin flag set.
|
||||
@@ -879,7 +870,7 @@ function getWorldName($id)
|
||||
*/
|
||||
function _mail($to, $subject, $body, $altBody = '', $add_html_tags = true)
|
||||
{
|
||||
global $mailer;
|
||||
global $mailer, $config;
|
||||
|
||||
if (!setting('core.mail_enabled')) {
|
||||
log_append('mailer-error.log', '_mail() function has been used, but Mail Support is disabled.');
|
||||
@@ -931,7 +922,7 @@ function _mail($to, $subject, $body, $altBody = '', $add_html_tags = true)
|
||||
$mailer->From = setting('core.mail_address');
|
||||
$mailer->Sender = setting('core.mail_address');
|
||||
$mailer->CharSet = 'utf-8';
|
||||
$mailer->FromName = configLua('serverName');
|
||||
$mailer->FromName = $config['lua']['serverName'];
|
||||
$mailer->Subject = $subject;
|
||||
$mailer->addAddress($to);
|
||||
$mailer->Body = $tmp_body;
|
||||
@@ -1000,29 +991,31 @@ function load_config_lua($filename)
|
||||
continue;
|
||||
}
|
||||
$tmp_exp = explode('=', $line, 2);
|
||||
if(str_contains($line, 'dofile')) {
|
||||
if(strpos($line, 'dofile') !== false)
|
||||
{
|
||||
$delimiter = '"';
|
||||
if(!str_contains($line, $delimiter)) {
|
||||
if(strpos($line, $delimiter) === false)
|
||||
$delimiter = "'";
|
||||
}
|
||||
|
||||
$tmp = explode($delimiter, $line);
|
||||
$result = array_merge($result, load_config_lua($config['server_path'] . $tmp[1]));
|
||||
}
|
||||
else if(count($tmp_exp) >= 2) {
|
||||
else if(count($tmp_exp) >= 2)
|
||||
{
|
||||
$key = trim($tmp_exp[0]);
|
||||
if(!str_starts_with($key, '--')) {
|
||||
if(0 !== strpos($key, '--'))
|
||||
{
|
||||
$value = trim($tmp_exp[1]);
|
||||
if(str_contains($value, '--')) {// found some deep comment
|
||||
if(strpos($value, '--') !== false) {// found some deep comment
|
||||
$value = preg_replace('/--.*$/i', '', $value);
|
||||
}
|
||||
|
||||
if(is_numeric($value))
|
||||
$result[$key] = (float) $value;
|
||||
elseif(in_array(@$value[0], array("'", '"')) && in_array(@$value[strlen($value) - 1], array("'", '"')))
|
||||
$result[$key] = substr(substr($value, 1), 0, -1);
|
||||
$result[$key] = (string) substr(substr($value, 1), 0, -1);
|
||||
elseif(in_array($value, array('true', 'false')))
|
||||
$result[$key] = $value === 'true';
|
||||
$result[$key] = ($value === 'true') ? true : false;
|
||||
elseif(@$value[0] === '{') {
|
||||
// arrays are not supported yet
|
||||
// just ignore the error
|
||||
@@ -1030,7 +1023,7 @@ function load_config_lua($filename)
|
||||
}
|
||||
else
|
||||
{
|
||||
foreach($result as $tmp_key => $tmp_value) // load values defined by other keys, like: dailyFragsToBlackSkull = dailyFragsToRedSkull
|
||||
foreach($result as $tmp_key => $tmp_value) // load values definied by other keys, like: dailyFragsToBlackSkull = dailyFragsToRedSkull
|
||||
$value = str_replace($tmp_key, $tmp_value, $value);
|
||||
$ret = @eval("return $value;");
|
||||
if((string) $ret == '' && trim($value) !== '""') // = parser error
|
||||
@@ -1044,7 +1037,8 @@ function load_config_lua($filename)
|
||||
}
|
||||
}
|
||||
|
||||
return array_merge($result, $config['lua'] ?? []);
|
||||
$result = array_merge($result, isset($config['lua']) ? $config['lua'] : array());
|
||||
return $result;
|
||||
}
|
||||
|
||||
function str_replace_first($search,$replace, $subject) {
|
||||
@@ -1070,36 +1064,17 @@ function get_browser_real_ip() {
|
||||
|
||||
return '0';
|
||||
}
|
||||
function setSession($key, $value = null): void {
|
||||
if (!is_array($key)) {
|
||||
$key = [$key => $value];
|
||||
}
|
||||
|
||||
foreach ($key as $arrayKey => $arrayValue) {
|
||||
if (is_null($arrayValue)) {
|
||||
unsetSession($arrayKey);
|
||||
}
|
||||
else {
|
||||
$_SESSION[setting('core.session_prefix') . $arrayKey] = $arrayValue;
|
||||
}
|
||||
}
|
||||
function setSession($key, $data) {
|
||||
$_SESSION[setting('core.session_prefix') . $key] = $data;
|
||||
}
|
||||
function getSession($key) {
|
||||
return $_SESSION[setting('core.session_prefix') . $key] ?? null;
|
||||
$key = setting('core.session_prefix') . $key;
|
||||
return isset($_SESSION[$key]) ? $_SESSION[$key] : false;
|
||||
}
|
||||
function unsetSession($key): void {
|
||||
function unsetSession($key) {
|
||||
unset($_SESSION[setting('core.session_prefix') . $key]);
|
||||
}
|
||||
|
||||
function session($key): mixed {
|
||||
if (is_array($key)) {
|
||||
setSession($key);
|
||||
return null;
|
||||
}
|
||||
|
||||
return getSession($key);
|
||||
}
|
||||
|
||||
function csrf(bool $return = false): string {
|
||||
return CsrfToken::create($return);
|
||||
}
|
||||
@@ -1122,16 +1097,20 @@ function csrfProtect(): void
|
||||
}
|
||||
}
|
||||
|
||||
function getTopPlayers($limit = 5, $skill = 'level') {
|
||||
$db = app()->get('database');
|
||||
function getTopPlayers($limit = 5) {
|
||||
global $db;
|
||||
|
||||
if ($skill === 'level') {
|
||||
$skill = 'experience';
|
||||
$cache = Cache::getInstance();
|
||||
if($cache->enabled()) {
|
||||
$tmp = '';
|
||||
if($cache->fetch('top_' . $limit . '_level', $tmp)) {
|
||||
$players = unserialize($tmp);
|
||||
}
|
||||
}
|
||||
|
||||
return Cache::remember("top_{$limit}_{$skill}", 2 * 60, function () use ($db, $limit, $skill) {
|
||||
if (!isset($players)) {
|
||||
$columns = [
|
||||
'id', 'name', 'level', 'vocation', 'experience', 'balance',
|
||||
'id', 'name', 'level', 'vocation', 'experience',
|
||||
'looktype', 'lookhead', 'lookbody', 'looklegs', 'lookfeet'
|
||||
];
|
||||
|
||||
@@ -1139,27 +1118,36 @@ function getTopPlayers($limit = 5, $skill = 'level') {
|
||||
$columns[] = 'lookaddons';
|
||||
}
|
||||
|
||||
return Player::query()
|
||||
if ($db->hasColumn('players', 'online')) {
|
||||
$columns[] = 'online';
|
||||
}
|
||||
|
||||
$players = Player::query()
|
||||
->select($columns)
|
||||
->withOnlineStatus()
|
||||
->notDeleted()
|
||||
->where('group_id', '<', setting('core.highscores_groups_hidden'))
|
||||
->whereNotIn('id', setting('core.highscores_ids_hidden'))
|
||||
->where('account_id', '!=', 1)
|
||||
->orderByDesc($skill)
|
||||
->orderByDesc('experience')
|
||||
->limit($limit)
|
||||
->get()
|
||||
->map(function ($e, $i) {
|
||||
$row = $e->toArray();
|
||||
$row['online'] = $e->online_status;
|
||||
$row['rank'] = $i + 1;
|
||||
$row['outfit_url'] = $e->outfit_url;
|
||||
|
||||
unset($row['online_table']);
|
||||
|
||||
return $row;
|
||||
})->toArray();
|
||||
});
|
||||
|
||||
if($cache->enabled()) {
|
||||
$cache->set('top_' . $limit . '_level', serialize($players), 120);
|
||||
}
|
||||
}
|
||||
|
||||
return $players;
|
||||
}
|
||||
|
||||
function deleteDirectory($dir, $ignore = array(), $contentOnly = false) {
|
||||
@@ -1228,7 +1216,7 @@ function clearCache()
|
||||
{
|
||||
News::clearCache();
|
||||
|
||||
$cache = app()->get('cache');
|
||||
$cache = Cache::getInstance();
|
||||
if($cache->enabled()) {
|
||||
$keysToClear = [
|
||||
'status', 'templates',
|
||||
@@ -1266,7 +1254,7 @@ function clearCache()
|
||||
}
|
||||
}
|
||||
|
||||
$db = app()->get('database');
|
||||
global $db;
|
||||
$db->setClearCacheAfter(true);
|
||||
}
|
||||
|
||||
@@ -1278,7 +1266,7 @@ function clearCache()
|
||||
// routes cache
|
||||
clearRouteCache();
|
||||
|
||||
$hooks = app()->get('hooks');
|
||||
global $hooks;
|
||||
$hooks->trigger(HOOK_CACHE_CLEAR, ['cache' => Cache::getInstance()]);
|
||||
|
||||
return true;
|
||||
@@ -1294,8 +1282,7 @@ function clearRouteCache(): void
|
||||
|
||||
function getCustomPageInfo($name)
|
||||
{
|
||||
$logged_access = logged() ? accountLogged()->getAccess() : 0;
|
||||
|
||||
global $logged_access;
|
||||
$page = Pages::isPublic()
|
||||
->where('name', 'LIKE', $name)
|
||||
->where('access', '<=', $logged_access)
|
||||
@@ -1309,9 +1296,7 @@ function getCustomPageInfo($name)
|
||||
}
|
||||
function getCustomPage($name, &$success): string
|
||||
{
|
||||
global $title, $ignore;
|
||||
|
||||
$twig = app()->get('twig');
|
||||
global $twig, $title, $ignore;
|
||||
|
||||
$success = false;
|
||||
$content = '';
|
||||
@@ -1335,6 +1320,9 @@ function getCustomPage($name, &$success): string
|
||||
$tmp = $page['body'];
|
||||
|
||||
global $config;
|
||||
if(setting('core.backward_support')) {
|
||||
global $SQL, $main_content, $subtopic;
|
||||
}
|
||||
|
||||
ob_start();
|
||||
eval($tmp);
|
||||
@@ -1525,7 +1513,8 @@ function verify_number($number, $name, $max_length)
|
||||
|
||||
function Outfits_loadfromXML()
|
||||
{
|
||||
$file_path = config('data_path') . 'XML/outfits.xml';
|
||||
global $config;
|
||||
$file_path = $config['data_path'] . 'XML/outfits.xml';
|
||||
if (!file_exists($file_path)) { return null; }
|
||||
|
||||
$xml = new DOMDocument;
|
||||
@@ -1550,7 +1539,8 @@ function Outfits_loadfromXML()
|
||||
|
||||
function Mounts_loadfromXML()
|
||||
{
|
||||
$file_path = config('data_path') . 'XML/mounts.xml';
|
||||
global $config;
|
||||
$file_path = $config['data_path'] . 'XML/mounts.xml';
|
||||
if (!file_exists($file_path)) { return null; }
|
||||
|
||||
$xml = new DOMDocument;
|
||||
@@ -1673,10 +1663,8 @@ function getGuildLogoById($id)
|
||||
return BASE_URL . GUILD_IMAGES_DIR . $logo;
|
||||
}
|
||||
|
||||
function displayErrorBoxWithBackButton($errors, $action = null)
|
||||
{
|
||||
$twig = app()->get('twig');
|
||||
|
||||
function displayErrorBoxWithBackButton($errors, $action = null) {
|
||||
global $twig;
|
||||
$twig->display('error_box.html.twig', ['errors' => $errors]);
|
||||
$twig->display('account.back_button.html.twig', [
|
||||
'action' => $action ?: getLink('')
|
||||
@@ -1691,32 +1679,8 @@ function isRequestMethod(string $method): bool {
|
||||
return strtolower($_SERVER['REQUEST_METHOD']) == strtolower($method);
|
||||
}
|
||||
|
||||
function getAccountIdentityColumn(): string
|
||||
{
|
||||
if (USE_ACCOUNT_NAME) {
|
||||
return 'name';
|
||||
}
|
||||
elseif (USE_ACCOUNT_NUMBER) {
|
||||
return 'number';
|
||||
}
|
||||
|
||||
return 'id';
|
||||
}
|
||||
|
||||
function app() {
|
||||
static $__app;
|
||||
if (!isset($__app)) {
|
||||
$__app = new App();
|
||||
}
|
||||
|
||||
return $__app;
|
||||
}
|
||||
|
||||
// validator functions
|
||||
require_once SYSTEM . 'compat/base.php';
|
||||
|
||||
// custom functions
|
||||
$customFunctions = SYSTEM . 'functions_custom.php';
|
||||
if (is_file($customFunctions)) {
|
||||
require $customFunctions;
|
||||
}
|
||||
require SYSTEM . 'functions_custom.php';
|
||||
|
@@ -12,13 +12,12 @@ use DebugBar\StandardDebugBar;
|
||||
use MyAAC\Cache\Cache;
|
||||
use MyAAC\CsrfToken;
|
||||
use MyAAC\Hooks;
|
||||
use MyAAC\Models\Town;
|
||||
use MyAAC\Settings;
|
||||
use MyAAC\Towns;
|
||||
|
||||
defined('MYAAC') or die('Direct access not allowed!');
|
||||
|
||||
$configInstalled = config('installed');
|
||||
if(!isset($configInstalled) || !$configInstalled) {
|
||||
if(!isset($config['installed']) || !$config['installed']) {
|
||||
throw new RuntimeException('MyAAC has not been installed yet or there was error during installation. Please install again.');
|
||||
}
|
||||
|
||||
@@ -30,28 +29,29 @@ if (config('env') === 'dev' || getBoolean(config('enable_debugbar'))) {
|
||||
$debugBar = new StandardDebugBar();
|
||||
}
|
||||
|
||||
$configServerPath = config('server_path');
|
||||
if(empty($configServerPath)) {
|
||||
if(empty($config['server_path'])) {
|
||||
throw new RuntimeException('Server Path has been not set. Go to config.php and set it.');
|
||||
}
|
||||
|
||||
// take care of trailing slash at the end
|
||||
if($configServerPath[strlen($configServerPath) - 1] !== '/') {
|
||||
config(['server_path', $configServerPath . '/']);
|
||||
}
|
||||
if($config['server_path'][strlen($config['server_path']) - 1] !== '/')
|
||||
$config['server_path'] .= '/';
|
||||
|
||||
// enable gzip compression if supported by the browser
|
||||
if(isset($config['gzip_output']) && $config['gzip_output'] && isset($_SERVER['HTTP_ACCEPT_ENCODING']) && str_contains($_SERVER['HTTP_ACCEPT_ENCODING'], 'gzip') && function_exists('ob_gzhandler'))
|
||||
if(isset($config['gzip_output']) && $config['gzip_output'] && isset($_SERVER['HTTP_ACCEPT_ENCODING']) && strpos($_SERVER['HTTP_ACCEPT_ENCODING'], 'gzip') !== false && function_exists('ob_gzhandler'))
|
||||
ob_start('ob_gzhandler');
|
||||
|
||||
// cache
|
||||
$cache = Cache::getInstance();
|
||||
|
||||
// event system
|
||||
$hooks = app()->get('hooks');
|
||||
$hooks = new Hooks();
|
||||
$hooks->load();
|
||||
|
||||
// twig
|
||||
require_once SYSTEM . 'twig.php';
|
||||
|
||||
// action, used by many pages
|
||||
global $action;
|
||||
$action = $_REQUEST['action'] ?? '';
|
||||
define('ACTION', $action);
|
||||
|
||||
@@ -77,11 +77,9 @@ foreach($_REQUEST as $var => $value) {
|
||||
|
||||
// load otserv config file
|
||||
$config_lua_reload = true;
|
||||
global $cache;
|
||||
$cache = app()->get('cache');
|
||||
if($cache->enabled()) {
|
||||
$tmp = null;
|
||||
if($cache->fetch('server_path', $tmp) && $tmp == config('server_path')) {
|
||||
if($cache->fetch('server_path', $tmp) && $tmp == $config['server_path']) {
|
||||
$tmp = null;
|
||||
if($cache->fetch('config_lua', $tmp) && $tmp) {
|
||||
$config['lua'] = unserialize($tmp);
|
||||
@@ -91,33 +89,31 @@ if($cache->enabled()) {
|
||||
}
|
||||
|
||||
if($config_lua_reload) {
|
||||
config(['lua', load_config_lua(config('server_path') . 'config.lua')]);
|
||||
$config['lua'] = load_config_lua($config['server_path'] . 'config.lua');
|
||||
|
||||
// cache config
|
||||
if($cache->enabled()) {
|
||||
$cache->set('config_lua', serialize(config('lua')), 2 * 60);
|
||||
$cache->set('server_path', config('server_path'), 10 * 60);
|
||||
$cache->set('config_lua', serialize($config['lua']), 120);
|
||||
$cache->set('server_path', $config['server_path']);
|
||||
}
|
||||
}
|
||||
unset($tmp);
|
||||
|
||||
if(configLua('servername') !== null) {
|
||||
$config['lua']['serverName'] = configLua('servername');
|
||||
}
|
||||
if(isset($config['lua']['servername']))
|
||||
$config['lua']['serverName'] = $config['lua']['servername'];
|
||||
|
||||
if(configLua('houserentperiod') !== null) {
|
||||
$config['lua']['houseRentPeriod'] = configLua('houserentperiod');
|
||||
}
|
||||
if(isset($config['lua']['houserentperiod']))
|
||||
$config['lua']['houseRentPeriod'] = $config['lua']['houserentperiod'];
|
||||
|
||||
// localize data/ directory based on data directory set in config.lua
|
||||
foreach(array('dataDirectory', 'data_directory', 'datadir') as $key) {
|
||||
if(!isset(configLua($key)[0])) {
|
||||
if(!isset($config['lua'][$key][0])) {
|
||||
break;
|
||||
}
|
||||
|
||||
$foundValue = configLua('lua')[$key];
|
||||
$foundValue = $config['lua'][$key];
|
||||
if($foundValue[0] !== '/') {
|
||||
$foundValue = config('server_path') . $foundValue;
|
||||
$foundValue = $config['server_path'] . $foundValue;
|
||||
}
|
||||
|
||||
if($foundValue[strlen($foundValue) - 1] !== '/') {// do not forget about trailing slash
|
||||
@@ -126,31 +122,29 @@ foreach(array('dataDirectory', 'data_directory', 'datadir') as $key) {
|
||||
}
|
||||
|
||||
if(!isset($foundValue)) {
|
||||
$foundValue = config('server_path') . 'data/';
|
||||
$foundValue = $config['server_path'] . 'data/';
|
||||
}
|
||||
|
||||
config(['data_path', $foundValue]);
|
||||
$config['data_path'] = $foundValue;
|
||||
unset($foundValue);
|
||||
|
||||
// POT
|
||||
require_once SYSTEM . 'libs/pot/OTS.php';
|
||||
$ots = POT::getInstance();
|
||||
$eloquentConnection = null;
|
||||
global $db;
|
||||
$db = app()->get('db');
|
||||
require_once SYSTEM . 'database.php';
|
||||
|
||||
// verify myaac tables exists in database
|
||||
if(!defined('MYAAC_INSTALL') && !$db->hasTable('myaac_account_actions')) {
|
||||
throw new RuntimeException('Seems that the table myaac_account_actions of MyAAC doesn\'t exist in the database. This is a fatal error. You can try to reinstall MyAAC by visiting ' . (IS_CLI ? 'http://your-ip.com/' : BASE_URL) . 'install');
|
||||
throw new RuntimeException('Seems that the table myaac_account_actions of MyAAC doesn\'t exist in the database. This is a fatal error. You can try to reinstall MyAAC by visiting ' . BASE_URL . 'install');
|
||||
}
|
||||
|
||||
// execute migrations
|
||||
$configDatabaseAutoMigrate = config('database_auto_migrate');
|
||||
if (!isset($configDatabaseAutoMigrate) || $configDatabaseAutoMigrate) {
|
||||
require SYSTEM . 'migrate.php';
|
||||
}
|
||||
require SYSTEM . 'migrate.php';
|
||||
|
||||
// settings
|
||||
$settings = app()->get('settings');
|
||||
$settings = Settings::getInstance();
|
||||
$settings->load();
|
||||
|
||||
// csrf protection
|
||||
$token = getSession('csrf_token');
|
||||
@@ -161,9 +155,6 @@ if (!isset($token) || !$token) {
|
||||
// deprecated config values
|
||||
require_once SYSTEM . 'compat/config.php';
|
||||
|
||||
// deprecated classes
|
||||
require_once SYSTEM . 'compat/classes.php';
|
||||
|
||||
date_default_timezone_set(setting('core.date_timezone'));
|
||||
|
||||
setting(
|
||||
@@ -182,17 +173,4 @@ define('USE_ACCOUNT_NAME', $db->hasColumn('accounts', 'name'));
|
||||
define('USE_ACCOUNT_NUMBER', $db->hasColumn('accounts', 'number'));
|
||||
define('USE_ACCOUNT_SALT', $db->hasColumn('accounts', 'salt'));
|
||||
|
||||
$towns = Cache::remember('towns', 10 * 60, function () use ($db) {
|
||||
if ($db->hasTable('towns') && Town::count() > 0) {
|
||||
return Town::orderBy('id', 'ASC')->pluck('name', 'id')->toArray();
|
||||
}
|
||||
|
||||
return [];
|
||||
});
|
||||
|
||||
if (count($towns) <= 0) {
|
||||
$towns = setting('core.towns');
|
||||
}
|
||||
|
||||
config(['towns', $towns]);
|
||||
unset($towns);
|
||||
Towns::load();
|
||||
|
@@ -12,8 +12,6 @@
|
||||
* @license http://www.gnu.org/licenses/lgpl-3.0.txt GNU Lesser General Public License, Version 3
|
||||
*/
|
||||
|
||||
use MyAAC\Models\AccountAction;
|
||||
|
||||
/**
|
||||
* OTServ account abstraction.
|
||||
*
|
||||
@@ -445,19 +443,19 @@ class OTS_Account extends OTS_Row_DAO implements IteratorAggregate, Countable
|
||||
throw new E_OTS_NotLoaded();
|
||||
}
|
||||
|
||||
$configFreePremium = configLua('freePremium');
|
||||
if(isset($configFreePremium) && getBoolean($configFreePremium)) {return -1;}
|
||||
|
||||
if(isset($this->data['premium_ends_at']) || isset($this->data['premend'])) {
|
||||
$col = isset($this->data['premium_ends_at']) ? 'premium_ends_at' : 'premend';
|
||||
$ret = ceil(($this->data[$col] - time()) / (24 * 60 * 60));
|
||||
return max($ret, 0);
|
||||
return $ret > 0 ? $ret : 0;
|
||||
}
|
||||
|
||||
if($this->data['premdays'] == 0) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
global $config;
|
||||
if(isset($config['lua']['freePremium']) && getBoolean($config['lua']['freePremium'])) return -1;
|
||||
|
||||
if($this->data['premdays'] == self::GRATIS_PREMIUM_DAYS){
|
||||
return self::GRATIS_PREMIUM_DAYS;
|
||||
}
|
||||
@@ -478,12 +476,12 @@ class OTS_Account extends OTS_Row_DAO implements IteratorAggregate, Countable
|
||||
|
||||
public function isPremium()
|
||||
{
|
||||
$configFreePremium = configLua('freePremium');
|
||||
if(isset($configFreePremium) && getBoolean($configFreePremium)) return true;
|
||||
global $config;
|
||||
if(isset($config['lua']['freePremium']) && getBoolean($config['lua']['freePremium'])) return true;
|
||||
|
||||
if(isset($this->data['premium_ends_at'])) {
|
||||
return $this->data['premium_ends_at'] > time();
|
||||
}
|
||||
if(isset($this->data['premium_ends_at'])) {
|
||||
return $this->data['premium_ends_at'] > time();
|
||||
}
|
||||
|
||||
if(isset($this->data['premend'])) {
|
||||
return $this->data['premend'] > time();
|
||||
@@ -772,7 +770,7 @@ class OTS_Account extends OTS_Row_DAO implements IteratorAggregate, Countable
|
||||
$filter->compareField('account_id', (int) $this->data['id']);
|
||||
|
||||
if(!$withDeleted) {
|
||||
$db = app()->get('database');
|
||||
global $db;
|
||||
if($db->hasColumn('players', 'deletion')) {
|
||||
$filter->compareField('deletion', 0);
|
||||
} else {
|
||||
@@ -936,7 +934,7 @@ class OTS_Account extends OTS_Row_DAO implements IteratorAggregate, Countable
|
||||
return $this->data['group_id'];
|
||||
}
|
||||
|
||||
$db = app()->get('database');
|
||||
global $db;
|
||||
if($db->hasColumn('accounts', 'group_id')) {
|
||||
$query = $this->db->query('SELECT `group_id` FROM `accounts` WHERE `id` = ' . (int) $this->getId())->fetch();
|
||||
// if anything was found
|
||||
@@ -963,7 +961,7 @@ class OTS_Account extends OTS_Row_DAO implements IteratorAggregate, Countable
|
||||
return $this->data['group_id'];
|
||||
}
|
||||
|
||||
$db = app()->get('database');
|
||||
global $db;
|
||||
if($db->hasColumn('accounts', 'group_id')) {
|
||||
$query = $this->db->query('SELECT `group_id` FROM `accounts` WHERE `id` = ' . (int) $this->getId())->fetch();
|
||||
// if anything was found
|
||||
@@ -1012,16 +1010,26 @@ class OTS_Account extends OTS_Row_DAO implements IteratorAggregate, Countable
|
||||
|
||||
public function logAction($action)
|
||||
{
|
||||
AccountAction::create([
|
||||
'account_id' => $this->getId(),
|
||||
'ip' => get_browser_real_ip(),
|
||||
'date' => time(),
|
||||
'action' => $action,
|
||||
]);
|
||||
$ip = get_browser_real_ip();
|
||||
if(strpos($ip, ":") === false) {
|
||||
$ipv6 = '0';
|
||||
}
|
||||
else {
|
||||
$ipv6 = $ip;
|
||||
$ip = '';
|
||||
}
|
||||
|
||||
return $this->db->exec('INSERT INTO `' . TABLE_PREFIX . 'account_actions` (`account_id`, `ip`, `ipv6`, `date`, `action`) VALUES (' . $this->db->quote($this->getId()).', ' . ($ip == '' ? '0' : $this->db->quote(ip2long($ip))) . ', (' . ($ipv6 == '0' ? $this->db->quote('') : $this->db->quote(inet_pton($ipv6))) . '), UNIX_TIMESTAMP(NOW()), ' . $this->db->quote($action).')');
|
||||
}
|
||||
|
||||
public function getActionsLog($limit) {
|
||||
return AccountAction::where('account_id', $this->data['id'])->orderByDesc('date')->limit($limit)->get()->toArray();
|
||||
public function getActionsLog($limit1, $limit2)
|
||||
{
|
||||
$actions = array();
|
||||
|
||||
foreach($this->db->query('SELECT `ip`, `ipv6`, `date`, `action` FROM `' . TABLE_PREFIX . 'account_actions` WHERE `account_id` = ' . $this->data['id'] . ' ORDER by `date` DESC LIMIT ' . $limit1 . ', ' . $limit2 . '')->fetchAll() as $a)
|
||||
$actions[] = array('ip' => $a['ip'], 'ipv6' => $a['ipv6'], 'date' => $a['date'], 'action' => $a['action']);
|
||||
|
||||
return $actions;
|
||||
}
|
||||
/**
|
||||
* Returns players iterator.
|
||||
|
@@ -235,30 +235,6 @@ abstract class OTS_Base_DB extends PDO implements IOTS_DB
|
||||
$this->exec($query);
|
||||
return true;
|
||||
}
|
||||
|
||||
public function addColumn($table, $column, $definition): void {
|
||||
$this->exec('ALTER TABLE ' . $this->tableName($table) . ' ADD ' . $this->fieldName($column) . ' ' . $definition . ';');
|
||||
}
|
||||
|
||||
public function modifyColumn($table, $column, $definition): void {
|
||||
$this->exec('ALTER TABLE ' . $this->tableName($table) . ' MODIFY ' . $this->fieldName($column) . ' ' . $definition . ';');
|
||||
}
|
||||
|
||||
public function changeColumn($table, $from, $to, $definition): void {
|
||||
$this->exec('ALTER TABLE ' . $this->tableName($table) . ' CHANGE ' . $this->fieldName($from) . ' ' . $this->fieldName($to) . ' ' . $definition . ';');
|
||||
}
|
||||
|
||||
public function dropColumn($table, $column): void {
|
||||
$this->exec('ALTER TABLE ' . $this->tableName($table) . ' DROP COLUMN ' . $this->fieldName($column) . ';');
|
||||
}
|
||||
|
||||
public function renameTable($from, $to): void {
|
||||
$this->exec('RENAME TABLE ' . $this->tableName($from) . ' TO ' . $this->tableName($to) . ';');
|
||||
}
|
||||
|
||||
public function dropTable($table, $ifExists = true): void {
|
||||
$this->exec('DROP TABLE ' . ($ifExists ? 'IF EXISTS' : '') . ' ' . $this->tableName($table) . ';');
|
||||
}
|
||||
/**
|
||||
* LIMIT/OFFSET clause for queries.
|
||||
*
|
||||
|
@@ -53,57 +53,58 @@ class OTS_DB_MySQL extends OTS_Base_DB
|
||||
* @param array $params Connection parameters.
|
||||
* @throws PDOException On PDO operation error.
|
||||
*/
|
||||
public function __construct($params)
|
||||
{
|
||||
$user = null;
|
||||
$password = null;
|
||||
$dns = array();
|
||||
public function __construct($params)
|
||||
{
|
||||
$user = null;
|
||||
$password = null;
|
||||
$dns = array();
|
||||
|
||||
// host:port support
|
||||
if( strpos(':', $params['host']) !== false)
|
||||
{
|
||||
$host = explode(':', $params['host'], 2);
|
||||
// host:port support
|
||||
if( strpos(':', $params['host']) !== false)
|
||||
{
|
||||
$host = explode(':', $params['host'], 2);
|
||||
|
||||
$params['host'] = $host[0];
|
||||
$params['port'] = $host[1];
|
||||
}
|
||||
$params['host'] = $host[0];
|
||||
$params['port'] = $host[1];
|
||||
}
|
||||
|
||||
if( isset($params['database']) )
|
||||
{
|
||||
$dns[] = 'dbname=' . $params['database'];
|
||||
}
|
||||
if( isset($params['database']) )
|
||||
{
|
||||
$dns[] = 'dbname=' . $params['database'];
|
||||
}
|
||||
|
||||
if( isset($params['user']) )
|
||||
{
|
||||
$user = $params['user'];
|
||||
}
|
||||
if( isset($params['user']) )
|
||||
{
|
||||
$user = $params['user'];
|
||||
}
|
||||
|
||||
if( isset($params['password']) )
|
||||
{
|
||||
$password = $params['password'];
|
||||
}
|
||||
if( isset($params['password']) )
|
||||
{
|
||||
$password = $params['password'];
|
||||
}
|
||||
|
||||
if( isset($params['prefix']) )
|
||||
{
|
||||
$this->prefix = $params['prefix'];
|
||||
}
|
||||
if( isset($params['prefix']) )
|
||||
{
|
||||
$this->prefix = $params['prefix'];
|
||||
}
|
||||
|
||||
if( isset($params['log']) && $params['log'] )
|
||||
{
|
||||
$this->logged = true;
|
||||
}
|
||||
if( isset($params['log']) && $params['log'] )
|
||||
{
|
||||
$this->logged = true;
|
||||
}
|
||||
|
||||
if( !isset($params['persistent']) ) {
|
||||
$params['persistent'] = false;
|
||||
}
|
||||
if( !isset($params['persistent']) ) {
|
||||
$params['persistent'] = false;
|
||||
}
|
||||
|
||||
$cache = app()->get('cache');
|
||||
global $config;
|
||||
$cache = Cache::getInstance();
|
||||
if($cache->enabled()) {
|
||||
$tmp = null;
|
||||
$need_revalidation = true;
|
||||
if($cache->fetch('database_checksum', $tmp) && $tmp) {
|
||||
$tmp = unserialize($tmp);
|
||||
if(sha1(config('database_host') . '.' . config('database_name')) === $tmp) {
|
||||
if(sha1($config['database_host'] . '.' . $config['database_name']) === $tmp) {
|
||||
$need_revalidation = false;
|
||||
}
|
||||
}
|
||||
@@ -143,11 +144,13 @@ class OTS_DB_MySQL extends OTS_Base_DB
|
||||
}
|
||||
|
||||
parent::__construct('mysql:' . implode(';', $dns), $user, $password, $driverAttributes);
|
||||
}
|
||||
}
|
||||
|
||||
public function __destruct()
|
||||
{
|
||||
$cache = app()->get('cache');
|
||||
{
|
||||
global $config;
|
||||
|
||||
$cache = Cache::getInstance();
|
||||
if($cache->enabled()) {
|
||||
if ($this->clearCacheAfter) {
|
||||
$cache->delete('database_tables');
|
||||
@@ -157,13 +160,12 @@ class OTS_DB_MySQL extends OTS_Base_DB
|
||||
else {
|
||||
$cache->set('database_tables', serialize($this->has_table_cache), 3600);
|
||||
$cache->set('database_columns', serialize($this->has_column_cache), 3600);
|
||||
$cache->set('database_checksum', serialize(sha1(config('database_host') . '.' . config('database_name'))), 3600);
|
||||
$cache->set('database_checksum', serialize(sha1($config['database_host'] . '.' . $config['database_name'])), 3600);
|
||||
}
|
||||
}
|
||||
|
||||
if($this->logged) {
|
||||
$currentScript = $_SERVER['REQUEST_URI'] ?? $_SERVER['SCRIPT_FILENAME'];
|
||||
log_append('database.log', $currentScript . PHP_EOL . $this->getLog());
|
||||
log_append('database.log', $_SERVER['REQUEST_URI'] . PHP_EOL . $this->getLog());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -173,10 +175,10 @@ class OTS_DB_MySQL extends OTS_Base_DB
|
||||
* @param string $name Field name.
|
||||
* @return string Quoted name.
|
||||
*/
|
||||
public function fieldName($name)
|
||||
{
|
||||
return '`' . $name . '`';
|
||||
}
|
||||
public function fieldName($name)
|
||||
{
|
||||
return '`' . $name . '`';
|
||||
}
|
||||
|
||||
/**
|
||||
* LIMIT/OFFSET clause for queries.
|
||||
@@ -185,26 +187,26 @@ class OTS_DB_MySQL extends OTS_Base_DB
|
||||
* @param int|bool $offset Number of rows to be skipped before applying query effects (false if no offset).
|
||||
* @return string LIMIT/OFFSET SQL clause for query.
|
||||
*/
|
||||
public function limit($limit = false, $offset = false)
|
||||
{
|
||||
// by default this is empty part
|
||||
$sql = '';
|
||||
public function limit($limit = false, $offset = false)
|
||||
{
|
||||
// by default this is empty part
|
||||
$sql = '';
|
||||
|
||||
if($limit !== false)
|
||||
{
|
||||
$sql = ' LIMIT ';
|
||||
if($limit !== false)
|
||||
{
|
||||
$sql = ' LIMIT ';
|
||||
|
||||
// OFFSET has no effect if there is no LIMIT
|
||||
if($offset !== false)
|
||||
{
|
||||
$sql .= $offset . ', ';
|
||||
}
|
||||
// OFFSET has no effect if there is no LIMIT
|
||||
if($offset !== false)
|
||||
{
|
||||
$sql .= $offset . ', ';
|
||||
}
|
||||
|
||||
$sql .= $limit;
|
||||
}
|
||||
$sql .= $limit;
|
||||
}
|
||||
|
||||
return $sql;
|
||||
}
|
||||
return $sql;
|
||||
}
|
||||
|
||||
public function hasTable($name) {
|
||||
if(isset($this->has_table_cache[$name])) {
|
||||
@@ -215,7 +217,8 @@ class OTS_DB_MySQL extends OTS_Base_DB
|
||||
}
|
||||
|
||||
private function hasTableInternal($name) {
|
||||
return ($this->has_table_cache[$name] = $this->query('SELECT `TABLE_NAME` FROM `information_schema`.`tables` WHERE `TABLE_SCHEMA` = ' . $this->quote(config('database_name')) . ' AND `TABLE_NAME` = ' . $this->quote($name) . ' LIMIT 1;')->rowCount() > 0);
|
||||
global $config;
|
||||
return ($this->has_table_cache[$name] = $this->query('SELECT `TABLE_NAME` FROM `information_schema`.`tables` WHERE `TABLE_SCHEMA` = ' . $this->quote($config['database_name']) . ' AND `TABLE_NAME` = ' . $this->quote($name) . ' LIMIT 1;')->rowCount() > 0);
|
||||
}
|
||||
|
||||
public function hasColumn($table, $column) {
|
||||
|
@@ -490,9 +490,7 @@ class OTS_Group extends OTS_Row_DAO implements IteratorAggregate, Countable
|
||||
// creates filter
|
||||
$filter = new OTS_SQLFilter();
|
||||
$filter->compareField('group_id', (int) $this->data['id']);
|
||||
|
||||
$db = app()->get('database');
|
||||
|
||||
global $db;
|
||||
if($db->hasColumn('players', 'deletion'))
|
||||
$filter->compareField('deletion', 0);
|
||||
else
|
||||
|
@@ -33,7 +33,7 @@ class OTS_Groups_List implements IteratorAggregate, Countable
|
||||
*/
|
||||
public function __construct($file = '')
|
||||
{
|
||||
$db = app()->get('db');
|
||||
global $db;
|
||||
if($db->hasTable('groups')) { // read groups from database
|
||||
foreach($db->query('SELECT `id`, `name`, `access` FROM `groups`;') as $group)
|
||||
{
|
||||
@@ -47,8 +47,10 @@ class OTS_Groups_List implements IteratorAggregate, Countable
|
||||
return;
|
||||
}
|
||||
|
||||
if(!isset($file[0])) {
|
||||
$file = config('data_path') . 'XML/groups.xml';
|
||||
if(!isset($file[0]))
|
||||
{
|
||||
global $config;
|
||||
$file = $config['data_path'] . 'XML/groups.xml';
|
||||
}
|
||||
|
||||
if(!@file_exists($file)) {
|
||||
@@ -57,7 +59,7 @@ class OTS_Groups_List implements IteratorAggregate, Countable
|
||||
return;
|
||||
}
|
||||
|
||||
$cache = app()->get('cache');
|
||||
$cache = Cache::getInstance();
|
||||
|
||||
$data = array();
|
||||
if($cache->enabled())
|
||||
|
@@ -284,6 +284,8 @@ class OTS_Guild extends OTS_Row_DAO implements IteratorAggregate, Countable
|
||||
}
|
||||
|
||||
public function hasMember(OTS_Player $player) {
|
||||
global $db;
|
||||
|
||||
if(!$player || !$player->isLoaded()) {
|
||||
return false;
|
||||
}
|
||||
|
File diff suppressed because it is too large
Load Diff
@@ -94,7 +94,7 @@ $locale['step_database_loaded_npcs'] = 'NPCs has been loaded...';
|
||||
$locale['step_database_error_npcs'] = 'There were some problems loading your NPCs';
|
||||
$locale['step_database_loaded_spells'] = 'Spells has been loaded...';
|
||||
$locale['step_database_loaded_towns'] = 'Towns has been loaded...';
|
||||
$locale['step_database_error_towns'] = 'There were some problems loading your towns. You will need to configure them manually in Settings.';
|
||||
$locale['step_database_error_towns'] = 'There were some problems loading your towns. You will need to configure them manually in config.';
|
||||
$locale['step_database_created_account'] = 'Created admin account...';
|
||||
$locale['step_database_created_news'] = 'Newses has been created...';
|
||||
|
||||
|
@@ -93,7 +93,7 @@ $locale['step_database_loaded_npcs'] = 'Załadowano NPCs...';
|
||||
$locale['step_database_error_npcs'] = 'Wystąpił problem podczas ładowania NPCs';
|
||||
$locale['step_database_loaded_spells'] = 'Załadowano czary (spells)...';
|
||||
$locale['step_database_loaded_towns'] = 'Załadowano miasta (towns)...';
|
||||
$locale['step_database_error_towns'] = 'Wystąpił problem podczas ładowania miast. Trzeba będzie je skonfigurować manualnie w ustawieniach.';
|
||||
$locale['step_database_error_towns'] = 'Wystąpił problem podczas ładowania miast. Trzeba będzie je skonfigurować manualnie.';
|
||||
$locale['step_database_created_account'] = 'Utworzono konto admina...';
|
||||
$locale['step_database_created_news'] = 'Utworzono newsy...';
|
||||
|
||||
|
41
system/login.php
Normal file
41
system/login.php
Normal file
@@ -0,0 +1,41 @@
|
||||
<?php
|
||||
/**
|
||||
* Login manager
|
||||
*
|
||||
* @package MyAAC
|
||||
* @author Slawkens <slawkens@gmail.com>
|
||||
* @copyright 2019 MyAAC
|
||||
* @link https://my-aac.org
|
||||
*/
|
||||
defined('MYAAC') or die('Direct access not allowed!');
|
||||
$logged = false;
|
||||
$logged_flags = 0;
|
||||
$account_logged = new OTS_Account();
|
||||
|
||||
// stay-logged with sessions
|
||||
$current_session = getSession('account');
|
||||
if($current_session !== false)
|
||||
{
|
||||
$account_logged->load($current_session);
|
||||
if($account_logged->isLoaded() && $account_logged->getPassword() == getSession('password')
|
||||
//&& (!isset($_SESSION['admin']) || admin())
|
||||
&& (getSession('remember_me') !== false || getSession('last_visit') > time() - 15 * 60)) { // login for 15 minutes if "remember me" is not used
|
||||
$logged = true;
|
||||
}
|
||||
else {
|
||||
unsetSession('account');
|
||||
unset($account_logged);
|
||||
}
|
||||
}
|
||||
|
||||
if($logged) {
|
||||
$logged_flags = $account_logged->getWebFlags();
|
||||
$twig->addGlobal('logged', true);
|
||||
$twig->addGlobal('account_logged', $account_logged);
|
||||
}
|
||||
|
||||
setSession('last_visit', time());
|
||||
if(defined('PAGE')) {
|
||||
setSession('last_page', PAGE);
|
||||
}
|
||||
setSession('last_uri', $_SERVER['REQUEST_URI']);
|
@@ -12,10 +12,7 @@ use MyAAC\CsrfToken;
|
||||
|
||||
defined('MYAAC') or die('Direct access not allowed!');
|
||||
|
||||
$account_logged = accountLogged();
|
||||
$hooks = app()->get('hooks');
|
||||
|
||||
if($account_logged !== null && $account_logged->isLoaded()) {
|
||||
if(isset($account_logged) && $account_logged->isLoaded()) {
|
||||
if($hooks->trigger(HOOK_LOGOUT, ['account_id' => $account_logged->getId()])) {
|
||||
unsetSession('account');
|
||||
unsetSession('password');
|
||||
@@ -23,11 +20,7 @@ if($account_logged !== null && $account_logged->isLoaded()) {
|
||||
|
||||
CsrfToken::generate();
|
||||
|
||||
global $logged, $account_logged;
|
||||
$logged = false;
|
||||
$account_logged = new OTS_Account();
|
||||
|
||||
app()->setLoggedIn($logged);
|
||||
app()->setAccountLogged($account_logged);
|
||||
unset($account_logged);
|
||||
}
|
||||
}
|
||||
|
@@ -17,12 +17,6 @@ if(fetchDatabaseConfig('database_version', $tmp)) { // we got version
|
||||
$db->revalidateCache();
|
||||
for($i = $tmp + 1; $i <= DATABASE_VERSION; $i++) {
|
||||
require SYSTEM . 'migrations/' . $i . '.php';
|
||||
|
||||
if (isset($up)) {
|
||||
$up();
|
||||
unset($up);
|
||||
}
|
||||
|
||||
updateDatabaseConfig('database_version', $i);
|
||||
}
|
||||
}
|
||||
@@ -32,12 +26,6 @@ else { // register first version
|
||||
$db->revalidateCache();
|
||||
for($i = 1; $i <= DATABASE_VERSION; $i++) {
|
||||
require SYSTEM . 'migrations/' . $i . '.php';
|
||||
|
||||
if (isset($up)) {
|
||||
$up();
|
||||
unset($up);
|
||||
}
|
||||
|
||||
updateDatabaseConfig('database_version', $i);
|
||||
}
|
||||
}
|
||||
|
@@ -1,8 +0,0 @@
|
||||
CREATE TABLE `myaac_hooks`
|
||||
(
|
||||
`id` INT(11) NOT NULL AUTO_INCREMENT,
|
||||
`name` VARCHAR(30) NOT NULL DEFAULT '',
|
||||
`type` INT(2) NOT NULL DEFAULT 0,
|
||||
`file` VARCHAR(100) NOT NULL,
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8;
|
@@ -1,16 +1,16 @@
|
||||
<?php
|
||||
/**
|
||||
* @var OTS_DB_MySQL $db
|
||||
*/
|
||||
$db->query("ALTER TABLE `" . TABLE_PREFIX . "account_actions` MODIFY `ip` INT(11) NOT NULL DEFAULT 0;");
|
||||
$db->query("ALTER TABLE `" . TABLE_PREFIX . "account_actions` MODIFY `date` INT(11) NOT NULL DEFAULT 0;");
|
||||
$db->query("ALTER TABLE `" . TABLE_PREFIX . "account_actions` MODIFY `action` VARCHAR(255) NOT NULL DEFAULT '';");
|
||||
$db->query("
|
||||
CREATE TABLE `myaac_hooks`
|
||||
(
|
||||
`id` INT(11) NOT NULL AUTO_INCREMENT,
|
||||
`name` VARCHAR(30) NOT NULL DEFAULT '',
|
||||
`type` INT(2) NOT NULL DEFAULT 0,
|
||||
`file` VARCHAR(100) NOT NULL,
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8;
|
||||
");
|
||||
|
||||
$up = function () use ($db) {
|
||||
$db->modifyColumn(TABLE_PREFIX . 'account_actions', 'ip', "INT(11) NOT NULL DEFAULT 0");
|
||||
$db->modifyColumn(TABLE_PREFIX . 'account_actions', 'date', "INT(11) NOT NULL DEFAULT 0");
|
||||
$db->modifyColumn(TABLE_PREFIX . 'account_actions', 'action', "VARCHAR(255) NOT NULL DEFAULT ''");
|
||||
|
||||
$db->query(file_get_contents(__DIR__ . '/1-hooks.sql'));
|
||||
};
|
||||
|
||||
$down = function () use ($db) {
|
||||
$db->dropTable(TABLE_PREFIX . 'hooks');
|
||||
};
|
||||
?>
|
||||
|
@@ -1,10 +0,0 @@
|
||||
CREATE TABLE `myaac_admin_menu`
|
||||
(
|
||||
`id` INT(11) NOT NULL AUTO_INCREMENT,
|
||||
`name` VARCHAR(255) NOT NULL DEFAULT '',
|
||||
`page` VARCHAR(255) NOT NULL DEFAULT '',
|
||||
`ordering` INT(11) NOT NULL DEFAULT 0,
|
||||
`flags` INT(11) NOT NULL DEFAULT 0,
|
||||
`enabled` INT(1) NOT NULL DEFAULT 1,
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8;
|
@@ -1,24 +1,17 @@
|
||||
<?php
|
||||
/**
|
||||
* @var OTS_DB_MySQL $db
|
||||
*/
|
||||
if(!$db->hasColumn(TABLE_PREFIX . 'hooks', 'ordering'))
|
||||
$db->query("ALTER TABLE `" . TABLE_PREFIX . "hooks` ADD `ordering` INT(11) NOT NULL DEFAULT 0 AFTER `file`;");
|
||||
|
||||
$up = function () use ($db) {
|
||||
if (!$db->hasColumn(TABLE_PREFIX . 'hooks', 'ordering')) {
|
||||
$db->addColumn(TABLE_PREFIX . 'hooks', 'ordering', "INT(11) NOT NULL DEFAULT 0 AFTER `file`");
|
||||
}
|
||||
|
||||
if (!$db->hasTable(TABLE_PREFIX . 'admin_menu')) {
|
||||
$db->query(file_get_contents(__DIR__ . '/10-admin_menu.sql'));
|
||||
}
|
||||
};
|
||||
|
||||
$down = function () use ($db) {
|
||||
if ($db->hasColumn(TABLE_PREFIX . 'hooks', 'ordering')) {
|
||||
$db->dropColumn(TABLE_PREFIX . 'hooks', 'ordering');
|
||||
}
|
||||
|
||||
if ($db->hasTable(TABLE_PREFIX . 'admin_menu')) {
|
||||
$db->dropTable(TABLE_PREFIX . 'admin_menu');
|
||||
}
|
||||
};
|
||||
if(!$db->hasTable(TABLE_PREFIX . 'admin_menu'))
|
||||
$db->query("
|
||||
CREATE TABLE `myaac_admin_menu`
|
||||
(
|
||||
`id` INT(11) NOT NULL AUTO_INCREMENT,
|
||||
`name` VARCHAR(255) NOT NULL DEFAULT '',
|
||||
`page` VARCHAR(255) NOT NULL DEFAULT '',
|
||||
`ordering` INT(11) NOT NULL DEFAULT 0,
|
||||
`flags` INT(11) NOT NULL DEFAULT 0,
|
||||
`enabled` INT(1) NOT NULL DEFAULT 1,
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8;
|
||||
");
|
@@ -1,44 +1,19 @@
|
||||
<?php
|
||||
/**
|
||||
* @var OTS_DB_MySQL $db
|
||||
*/
|
||||
|
||||
$up = function () use ($db) {
|
||||
// rename database tables
|
||||
$db->renameTable(TABLE_PREFIX . 'screenshots', TABLE_PREFIX . 'gallery');
|
||||
$db->renameTable(TABLE_PREFIX . 'movies', TABLE_PREFIX . 'videos');
|
||||
$db->query("RENAME TABLE
|
||||
" . TABLE_PREFIX . "screenshots TO " . TABLE_PREFIX . "gallery,
|
||||
" . TABLE_PREFIX . "movies TO " . TABLE_PREFIX . "videos;");
|
||||
|
||||
// rename images dir
|
||||
if (file_exists(BASE . 'images/screenshots') && !file_exists(BASE . GALLERY_DIR)) {
|
||||
if(file_exists(BASE . 'images/screenshots') && !file_exists(BASE . GALLERY_DIR)) {
|
||||
rename(BASE . 'images/screenshots', BASE . GALLERY_DIR);
|
||||
}
|
||||
|
||||
// convert old database screenshots images to gallery
|
||||
$query = $db->query('SELECT `id`, `image`, `thumb` FROM `' . TABLE_PREFIX . 'gallery`;');
|
||||
foreach ($query->fetchAll() as $item) {
|
||||
foreach($query->fetchAll() as $item) {
|
||||
$db->update(TABLE_PREFIX . 'gallery', array(
|
||||
'image' => str_replace('/screenshots/', '/gallery/', $item['image']),
|
||||
'thumb' => str_replace('/screenshots/', '/gallery/', $item['thumb']),
|
||||
), array('id' => $item['id']));
|
||||
}
|
||||
};
|
||||
|
||||
$down = function () use ($db) {
|
||||
// rename database tables
|
||||
$db->renameTable(TABLE_PREFIX . 'gallery', TABLE_PREFIX . 'screenshots');
|
||||
$db->renameTable(TABLE_PREFIX . 'videos', TABLE_PREFIX . 'movies');
|
||||
|
||||
// rename images dir
|
||||
if (file_exists(BASE . GALLERY_DIR) && !file_exists(BASE . 'images/screenshots')) {
|
||||
rename(BASE . GALLERY_DIR, BASE . 'images/screenshots');
|
||||
}
|
||||
|
||||
// convert new database gallery images to screenshots
|
||||
$query = $db->query('SELECT `id`, `image`, `thumb` FROM `' . TABLE_PREFIX . 'screenshots`;');
|
||||
foreach ($query->fetchAll() as $item) {
|
||||
$db->update(TABLE_PREFIX . 'screenshots', [
|
||||
'image' => str_replace('/gallery/', '/screenshots/', $item['image']),
|
||||
'thumb' => str_replace('/gallery/', '/screenshots/', $item['thumb']),
|
||||
], ['id' => $item['id']]);
|
||||
}
|
||||
};
|
||||
|
@@ -1,9 +0,0 @@
|
||||
CREATE TABLE `myaac_items`
|
||||
(
|
||||
`id` INT(11) NOT NULL,
|
||||
`article` VARCHAR(5) NOT NULL DEFAULT '',
|
||||
`name` VARCHAR(50) NOT NULL DEFAULT '',
|
||||
`plural` VARCHAR(50) NOT NULL DEFAULT '',
|
||||
`attributes` VARCHAR(500) NOT NULL DEFAULT '',
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8;
|
@@ -1,8 +0,0 @@
|
||||
CREATE TABLE `myaac_weapons`
|
||||
(
|
||||
`id` INT(11) NOT NULL,
|
||||
`level` INT(11) NOT NULL DEFAULT 0,
|
||||
`maglevel` INT(11) NOT NULL DEFAULT 0,
|
||||
`vocations` VARCHAR(100) NOT NULL DEFAULT '',
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8;
|
@@ -1,65 +1,51 @@
|
||||
<?php
|
||||
/**
|
||||
* @var OTS_DB_MySQL $db
|
||||
*/
|
||||
|
||||
use MyAAC\Models\Spell;
|
||||
// add new item_id field for runes
|
||||
if(!$db->hasColumn(TABLE_PREFIX . 'spells', 'item_id'))
|
||||
$db->query("ALTER TABLE `" . TABLE_PREFIX . "spells` ADD `item_id` INT(11) NOT NULL DEFAULT 0 AFTER `conjure_count`;");
|
||||
|
||||
$up = function () use ($db) {
|
||||
// add new item_id field for runes
|
||||
if (!$db->hasColumn(TABLE_PREFIX . 'spells', 'item_id')) {
|
||||
$db->addColumn(TABLE_PREFIX . 'spells', 'item_id', 'INT(11) NOT NULL DEFAULT 0 AFTER `conjure_count`');
|
||||
// change unique index from spell to name
|
||||
$db->query("ALTER TABLE `" . TABLE_PREFIX . "spells` DROP INDEX `spell`;");
|
||||
$db->query("ALTER TABLE `" . TABLE_PREFIX . "spells` ADD UNIQUE INDEX (`name`);");
|
||||
|
||||
// change comment of spells.type
|
||||
$db->query("ALTER TABLE `" . TABLE_PREFIX . "spells` MODIFY `type` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '1 - instant, 2 - conjure, 3 - rune';");
|
||||
|
||||
// new items table
|
||||
if(!$db->hasTable(TABLE_PREFIX . 'items'))
|
||||
$db->query("
|
||||
CREATE TABLE `" . TABLE_PREFIX . "items`
|
||||
(
|
||||
`id` INT(11) NOT NULL,
|
||||
`article` VARCHAR(5) NOT NULL DEFAULT '',
|
||||
`name` VARCHAR(50) NOT NULL DEFAULT '',
|
||||
`plural` VARCHAR(50) NOT NULL DEFAULT '',
|
||||
`attributes` VARCHAR(500) NOT NULL DEFAULT '',
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8;
|
||||
");
|
||||
|
||||
// new weapons table
|
||||
if(!$db->hasTable(TABLE_PREFIX . 'weapons'))
|
||||
$db->query("
|
||||
CREATE TABLE `" . TABLE_PREFIX . "weapons`
|
||||
(
|
||||
`id` INT(11) NOT NULL,
|
||||
`level` INT(11) NOT NULL DEFAULT 0,
|
||||
`maglevel` INT(11) NOT NULL DEFAULT 0,
|
||||
`vocations` VARCHAR(100) NOT NULL DEFAULT '',
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8;
|
||||
");
|
||||
|
||||
// modify vocations to support json data
|
||||
$db->query("ALTER TABLE `" . TABLE_PREFIX . "spells` MODIFY `vocations` VARCHAR(100) NOT NULL DEFAULT '';");
|
||||
$query = $db->query('SELECT `id`, `vocations` FROM `' . TABLE_PREFIX . 'spells`');
|
||||
foreach($query->fetchAll() as $spell) {
|
||||
$tmp = explode(',', $spell['vocations']);
|
||||
foreach($tmp as &$v) {
|
||||
$v = (int)$v;
|
||||
}
|
||||
|
||||
// change unique index from spell to name
|
||||
$db->query("ALTER TABLE `" . TABLE_PREFIX . "spells` DROP INDEX `spell`;");
|
||||
$db->query("ALTER TABLE `" . TABLE_PREFIX . "spells` ADD UNIQUE INDEX (`name`);");
|
||||
|
||||
// change comment of spells.type
|
||||
$db->modifyColumn(TABLE_PREFIX . 'spells', 'type', "TINYINT(1) NOT NULL DEFAULT 0 COMMENT '1 - instant, 2 - conjure, 3 - rune'");
|
||||
|
||||
// new items table
|
||||
if (!$db->hasTable(TABLE_PREFIX . 'items')) {
|
||||
$db->query(file_get_contents(__DIR__ . '/12-items.sql'));
|
||||
}
|
||||
|
||||
// new weapons table
|
||||
if (!$db->hasTable(TABLE_PREFIX . 'weapons')) {
|
||||
$db->query(file_get_contents(__DIR__ . '/12-weapons.sql'));
|
||||
}
|
||||
|
||||
// modify vocations to support json data
|
||||
$db->modifyColumn(TABLE_PREFIX . 'spells', 'vocations', "VARCHAR(100) NOT NULL DEFAULT ''");
|
||||
|
||||
$spells = Spell::select('id', 'vocations')->get();
|
||||
foreach ($spells as $spell) {
|
||||
$tmp = explode(',', $spell->vocations);
|
||||
foreach ($tmp as &$v) {
|
||||
$v = (int)$v;
|
||||
}
|
||||
|
||||
Spell::where('id', $spell->id)->update(['vocations' => json_encode($tmp)]);
|
||||
}
|
||||
};
|
||||
|
||||
$down = function () use ($db) {
|
||||
// remove item_id field for runes
|
||||
if ($db->hasColumn(TABLE_PREFIX . 'spells', 'item_id')) {
|
||||
$db->dropColumn(TABLE_PREFIX . 'spells', 'item_id');
|
||||
}
|
||||
|
||||
// change unique index from spell to name
|
||||
$db->query("ALTER TABLE `" . TABLE_PREFIX . "spells` DROP INDEX `name`;");
|
||||
$db->query("ALTER TABLE `" . TABLE_PREFIX . "spells` ADD INDEX (`spell`);");
|
||||
|
||||
$db->dropTable(TABLE_PREFIX . 'items');
|
||||
$db->dropTable(TABLE_PREFIX . 'weapons');
|
||||
|
||||
$spells = Spell::select('id', 'vocations')->get();
|
||||
// modify vocations to use vocation separated by comma
|
||||
foreach ($spells as $spell) {
|
||||
$vocations = empty($spell->vocations) ? [] : json_decode($spell->vocations);
|
||||
|
||||
Spell::where('id', $spell->id)->update(['vocations' => implode(',', $vocations)]);
|
||||
}
|
||||
};
|
||||
$db->update(TABLE_PREFIX . 'spells', array('vocations' => json_encode($tmp)), array('id' => $spell['id']));
|
||||
}
|
||||
?>
|
@@ -1,16 +1,3 @@
|
||||
<?php
|
||||
/**
|
||||
* @var OTS_DB_MySQL $db
|
||||
*/
|
||||
|
||||
$up = function () use ($db) {
|
||||
if ($db->hasColumn(TABLE_PREFIX . 'spells', 'spell')) {
|
||||
$db->dropColumn(TABLE_PREFIX . 'spells', 'spell');
|
||||
}
|
||||
};
|
||||
|
||||
$down = function () use ($db) {
|
||||
if (!$db->hasColumn(TABLE_PREFIX . 'spells', 'spell')) {
|
||||
$db->addColumn(TABLE_PREFIX . 'spells', 'spell', "VARCHAR(255) NOT NULL DEFAULT ''");
|
||||
}
|
||||
};
|
||||
if($db->hasColumn(TABLE_PREFIX . 'spells', 'spell'))
|
||||
$db->query("ALTER TABLE `" . TABLE_PREFIX . "spells` DROP COLUMN `spell`;");
|
@@ -1,39 +1,18 @@
|
||||
<?php
|
||||
/**
|
||||
* @var OTS_DB_MySQL $db
|
||||
*/
|
||||
|
||||
$up = function () use ($db) {
|
||||
// change monsters.file_path field to loot
|
||||
if ($db->hasColumn(TABLE_PREFIX . 'monsters', 'file_path')) {
|
||||
$db->changeColumn(TABLE_PREFIX . 'monsters', 'file_path', 'loot', 'VARCHAR(5000)');
|
||||
}
|
||||
// change monsters.file_path field to loot
|
||||
if($db->hasColumn(TABLE_PREFIX . 'monsters', 'file_path')) {
|
||||
$db->query("ALTER TABLE `" . TABLE_PREFIX . "monsters` CHANGE `file_path` `loot` VARCHAR(5000);");
|
||||
}
|
||||
|
||||
// update loot to empty string
|
||||
$db->query("UPDATE `" . TABLE_PREFIX . "monsters` SET `loot` = '';");
|
||||
// update loot to empty string
|
||||
$db->query("UPDATE `" . TABLE_PREFIX . "monsters` SET `loot` = '';");
|
||||
|
||||
// drop monsters.gfx_name field
|
||||
$db->dropColumn(TABLE_PREFIX . 'monsters', 'gfx_name');
|
||||
// drop monsters.gfx_name field
|
||||
$db->query("ALTER TABLE `" . TABLE_PREFIX . "monsters` DROP COLUMN `gfx_name`;");
|
||||
|
||||
// rename hide_creature to hidden
|
||||
if ($db->hasColumn(TABLE_PREFIX . 'monsters', 'hide_creature')) {
|
||||
$db->changeColumn(TABLE_PREFIX . 'monsters', 'hide_creature', 'hidden', "TINYINT(1) NOT NULL DEFAULT 0");
|
||||
}
|
||||
};
|
||||
|
||||
$down = function () use ($db) {
|
||||
if ($db->hasColumn(TABLE_PREFIX . 'monsters', 'loot')) {
|
||||
$db->changeColumn(TABLE_PREFIX . 'monsters', 'loot', 'file_path', 'VARCHAR(5000)');
|
||||
}
|
||||
|
||||
// update file_path to empty string
|
||||
$db->query("UPDATE `" . TABLE_PREFIX . "monsters` SET `file_path` = '';");
|
||||
|
||||
// add monsters.gfx_name field
|
||||
$db->addColumn(TABLE_PREFIX . 'monsters', 'gfx_name', 'varchar(255) NOT NULL AFTER `race`');
|
||||
|
||||
// rename hidden to hide_creature
|
||||
if ($db->hasColumn(TABLE_PREFIX . 'monsters', 'hidden')) {
|
||||
$db->changeColumn(TABLE_PREFIX . 'monsters', 'hidden', 'hide_creature', 'TINYINT(1) NOT NULL DEFAULT 0');
|
||||
}
|
||||
};
|
||||
// rename hide_creature to hidden
|
||||
if($db->hasColumn(TABLE_PREFIX . 'monsters', 'hide_creature')) {
|
||||
$db->query("ALTER TABLE `" . TABLE_PREFIX . "monsters` CHANGE `hide_creature` `hidden` TINYINT(1) NOT NULL DEFAULT 0;");
|
||||
}
|
||||
?>
|
@@ -1,26 +1,10 @@
|
||||
<?php
|
||||
/**
|
||||
* @var OTS_DB_MySQL $db
|
||||
*/
|
||||
|
||||
// add new forum.guild and forum.access fields
|
||||
if(!$db->hasColumn(TABLE_PREFIX . 'forum_boards', 'guild')) {
|
||||
$db->query("ALTER TABLE `" . TABLE_PREFIX . "forum_boards` ADD `guild` TINYINT(1) NOT NULL DEFAULT 0 AFTER `closed`;");
|
||||
}
|
||||
|
||||
$up = function () use ($db) {
|
||||
if (!$db->hasColumn(TABLE_PREFIX . 'forum_boards', 'guild')) {
|
||||
$db->addColumn(TABLE_PREFIX . 'forum_boards', 'guild', 'TINYINT(1) NOT NULL DEFAULT 0 AFTER `closed`');
|
||||
}
|
||||
|
||||
if (!$db->hasColumn(TABLE_PREFIX . 'forum_boards', 'access')) {
|
||||
$db->addColumn(TABLE_PREFIX . 'forum_boards', 'access', 'TINYINT(1) NOT NULL DEFAULT 0 AFTER `guild`');
|
||||
}
|
||||
};
|
||||
|
||||
$down = function () use ($db) {
|
||||
if ($db->hasColumn(TABLE_PREFIX . 'forum_boards', 'guild')) {
|
||||
$db->dropColumn(TABLE_PREFIX . 'forum_boards', 'guild');
|
||||
}
|
||||
|
||||
if ($db->hasColumn(TABLE_PREFIX . 'forum_boards', 'access')) {
|
||||
$db->dropColumn(TABLE_PREFIX . 'forum_boards', 'access');
|
||||
}
|
||||
};
|
||||
if(!$db->hasColumn(TABLE_PREFIX . 'forum_boards', 'access')) {
|
||||
$db->query("ALTER TABLE `" . TABLE_PREFIX . "forum_boards` ADD `access` TINYINT(1) NOT NULL DEFAULT 0 AFTER `guild`;");
|
||||
}
|
||||
|
@@ -1,14 +1,5 @@
|
||||
<?php
|
||||
/**
|
||||
* @var OTS_DB_MySQL $db
|
||||
*/
|
||||
|
||||
// change size of spells.vocations
|
||||
|
||||
$up = function () use ($db) {
|
||||
$db->modifyColumn(TABLE_PREFIX . 'spells', 'vocations', "VARCHAR(300) NOT NULL DEFAULT ''");
|
||||
};
|
||||
|
||||
$down = function () {
|
||||
// nothing to do here
|
||||
};
|
||||
$db->query("ALTER TABLE `" . TABLE_PREFIX . "spells` MODIFY `vocations` VARCHAR(300) NOT NULL DEFAULT '';");
|
||||
?>
|
@@ -1,11 +0,0 @@
|
||||
CREATE TABLE `myaac_menu`
|
||||
(
|
||||
`id` INT(11) NOT NULL AUTO_INCREMENT,
|
||||
`template` VARCHAR(255) NOT NULL,
|
||||
`name` VARCHAR(255) NOT NULL,
|
||||
`link` VARCHAR(255) NOT NULL,
|
||||
`category` INT(11) NOT NULL DEFAULT 1,
|
||||
`ordering` INT(11) NOT NULL DEFAULT 0,
|
||||
`enabled` INT(1) NOT NULL DEFAULT 1,
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8;
|
@@ -1,20 +1,23 @@
|
||||
<?php
|
||||
/**
|
||||
* @var OTS_DB_MySQL $db
|
||||
*/
|
||||
|
||||
use MyAAC\Plugins;
|
||||
|
||||
$up = function () use ($db) {
|
||||
if (!$db->hasTable(TABLE_PREFIX . 'menu')) {
|
||||
$db->exec(file_get_contents(__DIR__ . '/17-menu.sql'));
|
||||
}
|
||||
if(!$db->hasTable('myaac_menu')) {
|
||||
$db->query("
|
||||
CREATE TABLE `myaac_menu`
|
||||
(
|
||||
`id` INT(11) NOT NULL AUTO_INCREMENT,
|
||||
`template` VARCHAR(255) NOT NULL,
|
||||
`name` VARCHAR(255) NOT NULL,
|
||||
`link` VARCHAR(255) NOT NULL,
|
||||
`category` INT(11) NOT NULL DEFAULT 1,
|
||||
`ordering` INT(11) NOT NULL DEFAULT 0,
|
||||
`enabled` INT(1) NOT NULL DEFAULT 1,
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8;
|
||||
");
|
||||
}
|
||||
|
||||
Plugins::installMenus('kathrine', require TEMPLATES . 'kathrine/menus.php');
|
||||
Plugins::installMenus('tibiacom', require TEMPLATES . 'tibiacom/menus.php');
|
||||
};
|
||||
|
||||
$down = function () use ($db) {
|
||||
$db->dropTable(TABLE_PREFIX . 'menu');
|
||||
};
|
||||
Plugins::installMenus('kathrine', require TEMPLATES . 'kathrine/menus.php');
|
||||
Plugins::installMenus('tibiacom', require TEMPLATES . 'tibiacom/menus.php');
|
||||
|
||||
|
@@ -1,24 +1,6 @@
|
||||
<?php
|
||||
/**
|
||||
* @var OTS_DB_MySQL $db
|
||||
*/
|
||||
|
||||
$up = function () use ($db) {
|
||||
if (!$db->hasColumn(TABLE_PREFIX . 'news', 'article_text')) {
|
||||
$db->addColumn(TABLE_PREFIX . 'news', 'article_text', "VARCHAR(300) NOT NULL DEFAULT '' AFTER `comments`");
|
||||
}
|
||||
$db->query("ALTER TABLE `" . TABLE_PREFIX . "news` ADD `article_text` VARCHAR(300) NOT NULL DEFAULT '' AFTER `comments`;");
|
||||
$db->query("ALTER TABLE `" . TABLE_PREFIX . "news` ADD `article_image` VARCHAR(100) NOT NULL DEFAULT '' AFTER `article_text`;");
|
||||
|
||||
if (!$db->hasColumn(TABLE_PREFIX . 'news', 'article_image')) {
|
||||
$db->addColumn(TABLE_PREFIX . 'news', 'article_image', "VARCHAR(100) NOT NULL DEFAULT '' AFTER `article_text`");
|
||||
}
|
||||
};
|
||||
|
||||
$down = function () use ($db) {
|
||||
if ($db->hasColumn(TABLE_PREFIX . 'news', 'article_text')) {
|
||||
$db->dropColumn(TABLE_PREFIX . 'news', 'article_text');
|
||||
}
|
||||
|
||||
if ($db->hasColumn(TABLE_PREFIX . 'news', 'article_image')) {
|
||||
$db->dropColumn(TABLE_PREFIX . 'news', 'article_image');
|
||||
}
|
||||
};
|
||||
?>
|
@@ -1,11 +1,5 @@
|
||||
<?php
|
||||
/**
|
||||
* @var OTS_DB_MySQL $db
|
||||
*/
|
||||
|
||||
$up = function () use ($db) {
|
||||
$db->modifyColumn(TABLE_PREFIX . 'faq', 'answer', "VARCHAR(1020) NOT NULL DEFAULT ''");
|
||||
$db->modifyColumn(TABLE_PREFIX . 'movies', 'title', "VARCHAR(100) NOT NULL DEFAULT ''");
|
||||
$db->modifyColumn(TABLE_PREFIX . 'news', 'title', "VARCHAR(100) NOT NULL DEFAULT ''");
|
||||
$db->modifyColumn(TABLE_PREFIX . 'news', 'body', "TEXT NOT NULL");
|
||||
};
|
||||
$db->query("ALTER TABLE `" . TABLE_PREFIX . "faq` MODIFY `answer` VARCHAR(1020) NOT NULL DEFAULT '';");
|
||||
$db->query("ALTER TABLE `" . TABLE_PREFIX . "movies` MODIFY `title` VARCHAR(100) NOT NULL DEFAULT '';");
|
||||
$db->query("ALTER TABLE `" . TABLE_PREFIX . "news` MODIFY `title` VARCHAR(100) NOT NULL DEFAULT '';");
|
||||
$db->query("ALTER TABLE `" . TABLE_PREFIX . "news` MODIFY `body` TEXT NOT NULL DEFAULT '';");
|
||||
|
@@ -2,33 +2,20 @@
|
||||
|
||||
use MyAAC\Settings;
|
||||
|
||||
function updateHighscoresIdsHidden(): void
|
||||
{
|
||||
$db = app()->get('database');
|
||||
|
||||
if (!$db->hasTable('players')) {
|
||||
return;
|
||||
}
|
||||
|
||||
$query = $db->query("SELECT `id` FROM `players` WHERE (`name` = " . $db->quote("Rook Sample") . " OR `name` = " . $db->quote("Sorcerer Sample") . " OR `name` = " . $db->quote("Druid Sample") . " OR `name` = " . $db->quote("Paladin Sample") . " OR `name` = " . $db->quote("Knight Sample") . " OR `name` = " . $db->quote("Account Manager") . ") ORDER BY `id`;");
|
||||
|
||||
$highscores_ignored_ids = array();
|
||||
if ($query->rowCount() > 0) {
|
||||
foreach ($query->fetchAll() as $result)
|
||||
$highscores_ignored_ids[] = $result['id'];
|
||||
} else {
|
||||
$highscores_ignored_ids[] = 0;
|
||||
}
|
||||
|
||||
$settings = Settings::getInstance();
|
||||
$settings->updateInDatabase('core', 'highscores_ids_hidden', implode(', ', $highscores_ignored_ids));
|
||||
if (!$db->hasTable('players')) {
|
||||
return;
|
||||
}
|
||||
|
||||
$up = function () {
|
||||
updateHighscoresIdsHidden();
|
||||
};
|
||||
$query = $db->query("SELECT `id` FROM `players` WHERE (`name` = " . $db->quote("Rook Sample") . " OR `name` = " . $db->quote("Sorcerer Sample") . " OR `name` = " . $db->quote("Druid Sample") . " OR `name` = " . $db->quote("Paladin Sample") . " OR `name` = " . $db->quote("Knight Sample") . " OR `name` = " . $db->quote("Account Manager") . ") ORDER BY `id`;");
|
||||
|
||||
$down = function () {
|
||||
$settings = Settings::getInstance();
|
||||
$settings->updateInDatabase('core', 'highscores_ids_hidden', '0');
|
||||
};
|
||||
$highscores_ignored_ids = array();
|
||||
if($query->rowCount() > 0) {
|
||||
foreach($query->fetchAll() as $result)
|
||||
$highscores_ignored_ids[] = $result['id'];
|
||||
}
|
||||
else {
|
||||
$highscores_ignored_ids[] = 0;
|
||||
}
|
||||
|
||||
$settings = Settings::getInstance();
|
||||
$settings->updateInDatabase('core', 'highscores_ids_hidden', implode(', ', $highscores_ignored_ids));
|
||||
|
@@ -1,23 +1,14 @@
|
||||
<?php
|
||||
/**
|
||||
* @var OTS_DB_MySQL $db
|
||||
*/
|
||||
|
||||
$up = function () use ($db) {
|
||||
$db->addColumn(TABLE_PREFIX . 'forum', 'post_html', 'TINYINT(1) NOT NULL DEFAULT 0 AFTER `post_smile`');
|
||||
$db->exec("ALTER TABLE `" . TABLE_PREFIX . "forum` ADD `post_html` TINYINT(1) NOT NULL DEFAULT 0 AFTER `post_smile`;");
|
||||
|
||||
$query = $db->query("SELECT `id` FROM `" . TABLE_PREFIX . "forum_boards` WHERE `name` LIKE " . $db->quote('News') . " LIMIT 1;");
|
||||
if ($query->rowCount() == 0) {
|
||||
return; // don't make anything
|
||||
}
|
||||
$query = $db->query("SELECT `id` FROM `" . TABLE_PREFIX . "forum_boards` WHERE `name` LIKE " . $db->quote('News') . " LIMIT 1;");
|
||||
if($query->rowCount() == 0) {
|
||||
return; // don't make anything
|
||||
}
|
||||
|
||||
$query = $query->fetch();
|
||||
$id = $query['id'];
|
||||
$query = $query->fetch();
|
||||
$id = $query['id'];
|
||||
|
||||
// update all forum threads with is_html = 1
|
||||
$db->exec("UPDATE `" . TABLE_PREFIX . "forum` SET `post_html` = 1 WHERE `section` = " . $id . " AND `id` = `first_post`;");
|
||||
};
|
||||
|
||||
$down = function () use ($db) {
|
||||
$db->dropColumn(TABLE_PREFIX . 'forum', 'post_html');
|
||||
};
|
||||
// update all forum threads with is_html = 1
|
||||
$db->exec("UPDATE `" . TABLE_PREFIX . "forum` SET `post_html` = 1 WHERE `section` = " . $id . " AND `id` = `first_post`;");
|
@@ -1,10 +0,0 @@
|
||||
CREATE TABLE `z_polls` (
|
||||
`id` int(11) NOT NULL auto_increment,
|
||||
`question` varchar(255) NOT NULL,
|
||||
`description` varchar(255) NOT NULL,
|
||||
`end` int(11) NOT NULL DEFAULT 0,
|
||||
`start` int(11) NOT NULL DEFAULT 0,
|
||||
`answers` int(11) NOT NULL DEFAULT 0,
|
||||
`votes_all` int(11) NOT NULL DEFAULT 0,
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8;
|
@@ -1,6 +0,0 @@
|
||||
CREATE TABLE `z_polls_answers` (
|
||||
`poll_id` int(11) NOT NULL,
|
||||
`answer_id` int(11) NOT NULL,
|
||||
`answer` varchar(255) NOT NULL,
|
||||
`votes` int(11) NOT NULL DEFAULT 0
|
||||
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8;
|
@@ -1,35 +1,31 @@
|
||||
<?php
|
||||
/**
|
||||
* @var OTS_DB_MySQL $db
|
||||
*/
|
||||
|
||||
$up = function () use ($db) {
|
||||
if (!$db->hasTable('z_polls')) {
|
||||
$db->exec(file_get_contents(__DIR__ . '/22-z_polls.sql'));
|
||||
}
|
||||
if(!$db->hasTable('z_polls'))
|
||||
$db->query('
|
||||
CREATE TABLE `z_polls` (
|
||||
`id` int(11) NOT NULL auto_increment,
|
||||
`question` varchar(255) NOT NULL,
|
||||
`description` varchar(255) NOT NULL,
|
||||
`end` int(11) NOT NULL DEFAULT 0,
|
||||
`start` int(11) NOT NULL DEFAULT 0,
|
||||
`answers` int(11) NOT NULL DEFAULT 0,
|
||||
`votes_all` int(11) NOT NULL DEFAULT 0,
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8;
|
||||
');
|
||||
|
||||
if (!$db->hasTable('z_polls_answers')) {
|
||||
$db->exec(file_get_contents(__DIR__ . '/22-z_polls_answers.sql'));
|
||||
}
|
||||
if(!$db->hasTable('z_polls_answers'))
|
||||
$db->query('
|
||||
CREATE TABLE `z_polls_answers` (
|
||||
`poll_id` int(11) NOT NULL,
|
||||
`answer_id` int(11) NOT NULL,
|
||||
`answer` varchar(255) NOT NULL,
|
||||
`votes` int(11) NOT NULL DEFAULT 0
|
||||
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8;
|
||||
');
|
||||
|
||||
if (!$db->hasColumn('accounts', 'vote')) {
|
||||
$db->addColumn('accounts', 'vote', 'int(11) NOT NULL DEFAULT 0');
|
||||
}
|
||||
else {
|
||||
$db->modifyColumn('accounts', 'vote', 'int(11) NOT NULL DEFAULT 0');
|
||||
}
|
||||
};
|
||||
|
||||
$down = function () use ($db) {
|
||||
if ($db->hasTable('z_polls')) {
|
||||
$db->dropTable('z_polls;');
|
||||
}
|
||||
|
||||
if ($db->hasTable('z_polls_answers')) {
|
||||
$db->dropTable('z_polls_answers');
|
||||
}
|
||||
|
||||
if ($db->hasColumn('accounts', 'vote')) {
|
||||
$db->dropColumn('accounts', 'vote');
|
||||
}
|
||||
};
|
||||
if(!$db->hasColumn('accounts', 'vote'))
|
||||
$db->query('ALTER TABLE `accounts` ADD `vote` INT( 11 ) DEFAULT 0 NOT NULL ;');
|
||||
else {
|
||||
$db->query('ALTER TABLE `accounts` MODIFY `vote` INT( 11 ) DEFAULT 0 NOT NULL ;');
|
||||
}
|
@@ -1,24 +1,7 @@
|
||||
<?php
|
||||
/**
|
||||
* @var OTS_DB_MySQL $db
|
||||
*/
|
||||
|
||||
$up = function () use ($db) {
|
||||
if (!$db->hasColumn(TABLE_PREFIX . 'menu', 'blank')) {
|
||||
$db->addColumn(TABLE_PREFIX . 'menu', 'blank', 'TINYINT(1) NOT NULL DEFAULT 0 AFTER `link`');
|
||||
}
|
||||
if(!$db->hasColumn(TABLE_PREFIX . 'menu', 'blank'))
|
||||
$db->query("ALTER TABLE `" . TABLE_PREFIX . "menu` ADD `blank` TINYINT(1) NOT NULL DEFAULT 0 AFTER `link`;");
|
||||
|
||||
if (!$db->hasColumn(TABLE_PREFIX . 'menu', 'color')) {
|
||||
$db->addColumn(TABLE_PREFIX . 'menu', 'color', "CHAR(6) NOT NULL DEFAULT '' AFTER `blank`");
|
||||
}
|
||||
};
|
||||
|
||||
$down = function () use ($db) {
|
||||
if ($db->hasColumn(TABLE_PREFIX . 'menu', 'blank')) {
|
||||
$db->dropColumn(TABLE_PREFIX . 'menu', 'blank');
|
||||
}
|
||||
|
||||
if ($db->hasColumn(TABLE_PREFIX . 'menu', 'color')) {
|
||||
$db->dropColumn(TABLE_PREFIX . 'menu', 'color');
|
||||
}
|
||||
};
|
||||
if(!$db->hasColumn(TABLE_PREFIX . 'menu', 'color'))
|
||||
$db->query("ALTER TABLE `" . TABLE_PREFIX . "menu` ADD `color` CHAR(6) NOT NULL DEFAULT '' AFTER `blank`;");
|
@@ -1,9 +0,0 @@
|
||||
CREATE TABLE `myaac_items`
|
||||
(
|
||||
`id` INT(11) NOT NULL,
|
||||
`article` VARCHAR(5) NOT NULL DEFAULT '',
|
||||
`name` VARCHAR(50) NOT NULL DEFAULT '',
|
||||
`plural` VARCHAR(50) NOT NULL DEFAULT '',
|
||||
`attributes` VARCHAR(500) NOT NULL DEFAULT '',
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8;
|
@@ -1,12 +1,3 @@
|
||||
<?php
|
||||
/**
|
||||
* @var OTS_DB_MySQL $db
|
||||
*/
|
||||
|
||||
$up = function () use ($db) {
|
||||
$db->dropTable(TABLE_PREFIX . 'items');
|
||||
};
|
||||
|
||||
$down = function () use ($db) {
|
||||
$db->exec(file_get_contents(__DIR__ . '/24-items.sql'));
|
||||
};
|
||||
$db->exec('DROP TABLE IF EXISTS `' . TABLE_PREFIX . 'items`;');
|
@@ -1,12 +1,3 @@
|
||||
<?php
|
||||
/**
|
||||
* @var OTS_DB_MySQL $db
|
||||
*/
|
||||
|
||||
$up = function () use ($db) {
|
||||
$db->modifyColumn(TABLE_PREFIX . 'monsters', 'loot', 'text NOT NULL');
|
||||
};
|
||||
|
||||
$down = function () {
|
||||
// nothing to do
|
||||
};
|
||||
$db->exec('ALTER TABLE `' . TABLE_PREFIX . 'monsters` MODIFY `loot` text NOT NULL;');
|
@@ -1,32 +1,17 @@
|
||||
<?php
|
||||
/**
|
||||
* @var OTS_DB_MySQL $db
|
||||
*/
|
||||
|
||||
$up = function () use ($db) {
|
||||
if ($db->hasColumn(TABLE_PREFIX . 'spells', 'spell')) {
|
||||
$db->modifyColumn(TABLE_PREFIX . 'spells', 'spell', "VARCHAR(255) NOT NULL DEFAULT ''");
|
||||
}
|
||||
if($db->hasColumn(TABLE_PREFIX . 'spells', 'spell')) {
|
||||
$db->exec('ALTER TABLE `' . TABLE_PREFIX . "spells` MODIFY `spell` VARCHAR(255) NOT NULL DEFAULT '';");
|
||||
}
|
||||
|
||||
if ($db->hasColumn(TABLE_PREFIX . 'spells', 'words')) {
|
||||
$db->modifyColumn(TABLE_PREFIX . 'spells', 'words', "VARCHAR(255) NOT NULL DEFAULT ''");
|
||||
}
|
||||
if($db->hasColumn(TABLE_PREFIX . 'spells', 'words')) {
|
||||
$db->exec('ALTER TABLE `' . TABLE_PREFIX . "spells` MODIFY `words` VARCHAR(255) NOT NULL DEFAULT '';");
|
||||
}
|
||||
|
||||
if (!$db->hasColumn(TABLE_PREFIX . 'spells', 'conjure_id')) {
|
||||
$db->addColumn(TABLE_PREFIX . 'spells', 'conjure_id', 'INT(11) NOT NULL DEFAULT 0 AFTER `soul`');
|
||||
}
|
||||
if(!$db->hasColumn(TABLE_PREFIX . 'spells', 'conjure_id')) {
|
||||
$db->exec('ALTER TABLE `' . TABLE_PREFIX . 'spells` ADD `conjure_id` INT(11) NOT NULL DEFAULT 0 AFTER `soul`;');
|
||||
}
|
||||
|
||||
if (!$db->hasColumn(TABLE_PREFIX . 'spells', 'reagent')) {
|
||||
$db->addColumn(TABLE_PREFIX . 'spells', 'reagent', 'INT(11) NOT NULL DEFAULT 0 AFTER `conjure_count`');
|
||||
}
|
||||
};
|
||||
|
||||
$down = function () use ($db) {
|
||||
if ($db->hasColumn(TABLE_PREFIX . 'spells', 'conjure_id')) {
|
||||
$db->dropColumn(TABLE_PREFIX . 'spells', 'conjure_id');
|
||||
}
|
||||
|
||||
if ($db->hasColumn(TABLE_PREFIX . 'spells', 'reagent')) {
|
||||
$db->dropColumn(TABLE_PREFIX . 'spells', 'reagent');
|
||||
}
|
||||
};
|
||||
if(!$db->hasColumn(TABLE_PREFIX . 'spells', 'reagent')) {
|
||||
$db->exec('ALTER TABLE `' . TABLE_PREFIX . 'spells` ADD `reagent` INT(11) NOT NULL DEFAULT 0 AFTER `conjure_count`;');
|
||||
}
|
||||
|
@@ -1,22 +0,0 @@
|
||||
<table class="myaac-table" style="border-collapse: collapse; width: 100%; height: 72px; border-width: 1px;" border="1"><colgroup><col style="width: 50%;"><col style="width: 50%;"></colgroup>
|
||||
<thead>
|
||||
<tr style="height: 18px;">
|
||||
<td style="height: 18px; border-width: 1px; text-align: center;"><span style="color: #ffffff;"><strong>Words</strong></span></td>
|
||||
<td style="height: 18px; border-width: 1px; text-align: center;"><strong>Description</strong></td>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr style="height: 18px;">
|
||||
<td style="height: 18px; border-width: 1px;">!example</td>
|
||||
<td style="height: 18px; border-width: 1px;">This is just an example</td>
|
||||
</tr>
|
||||
<tr style="height: 18px;">
|
||||
<td style="height: 18px; border-width: 1px;">!buyhouse</td>
|
||||
<td style="height: 18px; border-width: 1px;">Buy house you are looking at</td>
|
||||
</tr>
|
||||
<tr style="height: 18px;">
|
||||
<td style="height: 18px; border-width: 1px;"><em>!aol</em></td>
|
||||
<td style="height: 18px; border-width: 1px;">Buy AoL</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
@@ -1,6 +0,0 @@
|
||||
<p> </p>
|
||||
<p> </p>
|
||||
<div style="text-align: center;">We're using official Tibia Client <strong>{{ config.client / 100 }}</strong><br>
|
||||
<p>Download Tibia Client <strong>{{ config.client / 100 }}</strong> for Windows <a href="https://drive.google.com/drive/folders/0B2-sMQkWYzhGSFhGVlY2WGk5czQ" target="_blank" rel="noopener">HERE</a>.</p>
|
||||
<h2>IP Changer:</h2>
|
||||
<a href="https://static.otland.net/ipchanger.exe" target="_blank" rel="noopener">HERE</a></div>
|
@@ -1,48 +1,47 @@
|
||||
<?php
|
||||
/**
|
||||
* @var OTS_DB_MySQL $db
|
||||
*/
|
||||
|
||||
use MyAAC\Models\Pages;
|
||||
$downloadsPage = <<<HTML
|
||||
<p> </p>
|
||||
<p> </p>
|
||||
<div style="text-align: center;">We're using official Tibia Client <strong>{{ config.client / 100 }}</strong><br>
|
||||
<p>Download Tibia Client <strong>{{ config.client / 100 }}</strong> for Windows <a href="https://drive.google.com/drive/folders/0B2-sMQkWYzhGSFhGVlY2WGk5czQ" target="_blank" rel="noopener">HERE</a>.</p>
|
||||
<h2>IP Changer:</h2>
|
||||
<a href="https://static.otland.net/ipchanger.exe" target="_blank" rel="noopener">HERE</a></div>
|
||||
HTML;
|
||||
|
||||
$up = function () use ($db) {
|
||||
$downloadsModel = Pages::where('name', 'downloads')->first();
|
||||
if (!$downloadsModel) {
|
||||
$db->insert(TABLE_PREFIX . 'pages', [
|
||||
'name' => 'downloads',
|
||||
'title' => 'Downloads',
|
||||
'body' => file_get_contents(__DIR__ . '/27-downloads.html'),
|
||||
'date' => time(),
|
||||
'player_id' => 1,
|
||||
'php' => 0,
|
||||
'access' => 0,
|
||||
($db->hasColumn(TABLE_PREFIX . 'pages', 'hide') ? 'hide' : 'hidden') => 0,
|
||||
]);
|
||||
}
|
||||
$query = $db->query("SELECT `id` FROM `" . TABLE_PREFIX . "pages` WHERE `name` LIKE " . $db->quote('downloads') . " LIMIT 1;");
|
||||
if($query->rowCount() === 0) {
|
||||
$db->exec("INSERT INTO `myaac_pages` (`id`, `name`, `title`, `body`, `date`, `player_id`, `php`, `access`, `hide`) VALUES
|
||||
(null, 'downloads', 'Downloads', {$db->quote($downloadsPage)}, 0, 1, 0, 0, 0);");
|
||||
}
|
||||
|
||||
$commandsModel = Pages::where('name', 'commands')->first();
|
||||
if (!$commandsModel) {
|
||||
$db->insert(TABLE_PREFIX . 'pages', [
|
||||
'name' => 'commands',
|
||||
'title' => 'Commands',
|
||||
'body' => file_get_contents(__DIR__ . '/27-commands.html'),
|
||||
'date' => time(),
|
||||
'player_id' => 1,
|
||||
'php' => 0,
|
||||
'access' => 0,
|
||||
($db->hasColumn(TABLE_PREFIX . 'pages', 'hide') ? 'hide' : 'hidden') => 0,
|
||||
]);
|
||||
}
|
||||
};
|
||||
$commandsPage = <<<HTML
|
||||
<table class="myaac-table" style="border-collapse: collapse; width: 100%; height: 72px; border-width: 1px;" border="1"><colgroup><col style="width: 50%;"><col style="width: 50%;"></colgroup>
|
||||
<thead>
|
||||
<tr style="height: 18px;">
|
||||
<td style="height: 18px; border-width: 1px; text-align: center;"><span style="color: #ffffff;"><strong>Words</strong></span></td>
|
||||
<td style="height: 18px; border-width: 1px; text-align: center;"><strong>Description</strong></td>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr style="height: 18px;">
|
||||
<td style="height: 18px; border-width: 1px;">!example</td>
|
||||
<td style="height: 18px; border-width: 1px;">This is just an example</td>
|
||||
</tr>
|
||||
<tr style="height: 18px;">
|
||||
<td style="height: 18px; border-width: 1px;">!buyhouse</td>
|
||||
<td style="height: 18px; border-width: 1px;">Buy house you are looking at</td>
|
||||
</tr>
|
||||
<tr style="height: 18px;">
|
||||
<td style="height: 18px; border-width: 1px;"><em>!aol</em></td>
|
||||
<td style="height: 18px; border-width: 1px;">Buy AoL</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
HTML;
|
||||
|
||||
$down = function () {
|
||||
$downloadsModel = Pages::where('name', 'downloads')->first();
|
||||
if ($downloadsModel) {
|
||||
$downloadsModel->delete();
|
||||
}
|
||||
|
||||
$commandsModel = Pages::where('name', 'commands')->first();
|
||||
if ($commandsModel) {
|
||||
$commandsModel->delete();
|
||||
}
|
||||
};
|
||||
$query = $db->query("SELECT `id` FROM `" . TABLE_PREFIX . "pages` WHERE `name` LIKE " . $db->quote('commands') . " LIMIT 1;");
|
||||
if($query->rowCount() === 0) {
|
||||
$db->exec("INSERT INTO `myaac_pages` (`id`, `name`, `title`, `body`, `date`, `player_id`, `php`, `access`, `hide`) VALUES
|
||||
(null, 'commands', 'Commands', {$db->quote($commandsPage)}, 0, 1, 0, 0, 0);");
|
||||
}
|
||||
|
@@ -1,10 +0,0 @@
|
||||
CREATE TABLE `myaac_hooks`
|
||||
(
|
||||
`id` INT(11) NOT NULL AUTO_INCREMENT,
|
||||
`name` VARCHAR(30) NOT NULL DEFAULT '',
|
||||
`type` INT(2) NOT NULL DEFAULT 0,
|
||||
`file` VARCHAR(100) NOT NULL,
|
||||
`ordering` INT(11) NOT NULL DEFAULT 0,
|
||||
`enabled` INT(1) NOT NULL DEFAULT 1,
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8;
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user