mirror of
https://github.com/slawkens/myaac.git
synced 2025-10-26 22:14:18 +01:00
Compare commits
53 Commits
v1.8.1
...
fix/databa
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
f419296cf5 | ||
|
|
65712776df | ||
|
|
bde158e3d7 | ||
|
|
44110a9496 | ||
|
|
727f68a575 | ||
|
|
07fd034fe4 | ||
|
|
13ea68cc0c | ||
|
|
598cec2fe4 | ||
|
|
89fae38caa | ||
|
|
16849e7578 | ||
|
|
470555f268 | ||
|
|
7f60b3d31d | ||
|
|
12e40b2592 | ||
|
|
38902c30d1 | ||
|
|
3e61692780 | ||
|
|
c88b08eb1e | ||
|
|
82d417b590 | ||
|
|
b797908e49 | ||
|
|
90c8463797 | ||
|
|
c91bb5d409 | ||
|
|
fe821c5808 | ||
|
|
9acad15451 | ||
|
|
8c3cb0e06f | ||
|
|
2eae44e075 | ||
|
|
8272f1373c | ||
|
|
901df48d13 | ||
|
|
2da0024c68 | ||
|
|
0d8f68a48e | ||
|
|
0cb9d3a208 | ||
|
|
d8b73f55a3 | ||
|
|
3bb272ebbb | ||
|
|
64acf70d38 | ||
|
|
97f9d3d6f6 | ||
|
|
f54b1bdd2a | ||
|
|
c898fe25ef | ||
|
|
73c07d470d | ||
|
|
56bd7ec5ed | ||
|
|
4c6277c124 | ||
|
|
228780f0ad | ||
|
|
4e9999cc0d | ||
|
|
8bc328d6fb | ||
|
|
ac41b82579 | ||
|
|
df7b6e29fb | ||
|
|
e0cc19ad86 | ||
|
|
85e7005fd3 | ||
|
|
3c0cb53e17 | ||
|
|
d0112d1a67 | ||
|
|
ed9beaf2b6 | ||
|
|
5aa9bbf1c8 | ||
|
|
a6032093b2 | ||
|
|
4eab805d26 | ||
|
|
3f24f961b1 | ||
|
|
0b86459940 |
@@ -1,5 +1,46 @@
|
|||||||
# Changelog
|
# Changelog
|
||||||
|
|
||||||
|
## [1.8.3 - 21.10.2025]
|
||||||
|
|
||||||
|
### Added
|
||||||
|
* Feature: resend email verify (https://github.com/slawkens/myaac/commit/fe821c58085483e70491dcf76376ad5b96de3fdd)
|
||||||
|
* New config: hooks_debug (To view where hooks are located in .twig files) (https://github.com/slawkens/myaac/commit/8c3cb0e06f9709c1de3398b48221241e7cbdd310)
|
||||||
|
* Functions: Add db->getColumnInfo(table, column) (https://github.com/slawkens/myaac/commit/c898fe25efff6793a01d11c26fc153cb23fcb858)
|
||||||
|
* Plugins: Add option to use ?subtopic=x for plugins pages (https://github.com/slawkens/myaac/commit/97f9d3d6f6c28aef6d824973058d7133f56e09c4)
|
||||||
|
* getTopPlayers() Function - Add lookmount & promotion (https://github.com/slawkens/myaac/commit/2da0024c68f1cedc38a16ebbc6f52ffa55e65f7a, https://github.com/slawkens/myaac/commit/901df48d134079d648a18f9d82b60182e818ac02)
|
||||||
|
* New hooks for account/change-password (https://github.com/slawkens/myaac/commit/470555f2687809a0c12491bbb27597e64b8929c1)
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
* Feature: show vip days in account management (https://github.com/slawkens/myaac/commit/c88b08eb1ec1f560cbfdaaa16b24e3a0f26da7b3, by @andreoam)
|
||||||
|
* Allow links in error_box.html.twig (https://github.com/slawkens/myaac/commit/9acad15451071639acf7a7d4e81619b0a9742b12)
|
||||||
|
* Canary - Comment code to update lastday in login.php (https://github.com/slawkens/myaac/commit/38902c30d114fdbce259467f5820f97037b393e9)
|
||||||
|
* Cache::remember $ttl = -1 = infinite (https://github.com/slawkens/myaac/commit/64acf70d3854182d88aaf0b67f77cea2a254f179)
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
* Online - Allow for html code (example - img) in online_datacenter (https://github.com/slawkens/myaac/commit/3bb272ebbbd2eb7769d174b7082061d14a17bd44)
|
||||||
|
* Guilds - Fix guild create with freePremium enabled (https://github.com/slawkens/myaac/commit/c91bb5d4097647dca2196d3dea87bc90c89181d2)
|
||||||
|
* Canary - Fix premDays count (https://github.com/slawkens/myaac/commit/3e61692780d4add93b7b0e9f12f7a283bd8f4b7a)
|
||||||
|
* Template Change: Ignore set last visit for AJAX pages - Fixes template change redirect (https://github.com/slawkens/myaac/commit/89fae38caa7e4f645957fcf1a9330a36358ac04f)
|
||||||
|
* Admin Panel - Accounts: Fix lastip v6 (TFS master) (https://github.com/slawkens/myaac/commit/f54b1bdd2af4c16c64ddff0e87a6c96bc4cf9eeb)
|
||||||
|
* Functions - Prevent injection in $db->hasColumn (https://github.com/slawkens/myaac/commit/56bd7ec5ed904666074492f2e4f13e4fce226bee)
|
||||||
|
* Compat Config: Add missing config: email_lai_sec_interval (https://github.com/slawkens/myaac/commit/2eae44e0755e624a91be68b4d1ec26d01eb4d9a1)
|
||||||
|
|
||||||
|
## [1.8.2 - 26.09.2025]
|
||||||
|
|
||||||
|
### Added
|
||||||
|
* Routes: Possibility to override routes with plugins pages, like characters.php - No need to define routes in plugin.json anymore (https://github.com/slawkens/myaac/commit/3f24f961b1cdeff5c60387e837ae454448bc5e1b)
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
* Style: Better look for myaac-table (https://github.com/slawkens/myaac/commit/a6032093b21e5bb3f0e75d2704da87d6dea6469d, https://github.com/slawkens/myaac/commit/5aa9bbf1c8e580d973ec82ac012489f8e7bc437e)
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
* Install: Fix when config.local.php cannot be saved (https://github.com/slawkens/myaac/commit/4eab805d26d8c5562b29ed699769919d77dabced)
|
||||||
|
* Create Account: Fix an exception when email cannot be sent (https://github.com/slawkens/myaac/commit/d0112d1a67e8b854b65ad131f0375b79305df8d3)
|
||||||
|
* Login Page: Add missing csrf() - fix create account button (https://github.com/slawkens/myaac/commit/3c0cb53e17dd0b85394cfa0fdc9cf9ad8d4551df)
|
||||||
|
* tibiacom template: Fix account lost menu (https://github.com/slawkens/myaac/commit/ed9beaf2b6ca069e304e569c52e5b9188b58f05c)
|
||||||
|
* tibiacom template: Fix Menu div wrong tag/closing (#329) (https://github.com/slawkens/myaac/commit/85e7005fd3f0be51466151a3c122b96085fdfe68)
|
||||||
|
* tibiacom template: Replace firstChild with firstElementChild (Thanks to @un000000) (https://github.com/slawkens/myaac/commit/df7b6e29fb8875da97f431468c81ee99116271d9)
|
||||||
|
|
||||||
## [1.8.1 - 05.09.2025]
|
## [1.8.1 - 05.09.2025]
|
||||||
|
|
||||||
### Added
|
### Added
|
||||||
|
|||||||
4
aac
4
aac
@@ -25,7 +25,9 @@ foreach ($commandsGlob as $item) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
$commandPre = '\\MyAAC\Commands\\';
|
$commandPre = '\\MyAAC\Commands\\';
|
||||||
$application->add(new ($commandPre . $name));
|
if (!trait_exists($class = $commandPre . $name)) {
|
||||||
|
$application->add(new $class);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$pluginCommands = Plugins::getCommands();
|
$pluginCommands = Plugins::getCommands();
|
||||||
|
|||||||
@@ -669,11 +669,17 @@ else if (isset($_REQUEST['search'])) {
|
|||||||
<div class="col-12 col-sm-12 col-lg-6">
|
<div class="col-12 col-sm-12 col-lg-6">
|
||||||
<label for="lastip" class="control-label">Last IP:</label>
|
<label for="lastip" class="control-label">Last IP:</label>
|
||||||
<input type="text" class="form-control" id="lastip" name="lastip" autocomplete="off" maxlength="10" value="<?php
|
<input type="text" class="form-control" id="lastip" name="lastip" autocomplete="off" maxlength="10" value="<?php
|
||||||
if (strlen($player->getLastIP()) > 11) {
|
$lastIPColumnInfo = $db->getColumnInfo('players', 'lastip');
|
||||||
echo inet_ntop($player->getLastIP());
|
if ($lastIPColumnInfo && is_array($lastIPColumnInfo)) {
|
||||||
|
if (str_contains($lastIPColumnInfo['type'], 'varbinary')) {
|
||||||
|
echo inet_ntop($player->getLastIP());
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
echo longToIp($player->getLastIP());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
echo longToIp($player->getLastIP());
|
echo 'Error';
|
||||||
}
|
}
|
||||||
?>" readonly/>
|
?>" readonly/>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
<?php
|
<?php
|
||||||
define('MYAAC_ADMIN', true);
|
const MYAAC_ADMIN = true;
|
||||||
|
const IGNORE_SET_LAST_VISIT = true;
|
||||||
|
|
||||||
require '../../common.php';
|
require '../../common.php';
|
||||||
require SYSTEM . 'functions.php';
|
require SYSTEM . 'functions.php';
|
||||||
|
|||||||
@@ -26,6 +26,7 @@
|
|||||||
use MyAAC\DataLoader;
|
use MyAAC\DataLoader;
|
||||||
|
|
||||||
const MYAAC_ADMIN = true;
|
const MYAAC_ADMIN = true;
|
||||||
|
const IGNORE_SET_LAST_VISIT = true;
|
||||||
|
|
||||||
require '../../common.php';
|
require '../../common.php';
|
||||||
require SYSTEM . 'functions.php';
|
require SYSTEM . 'functions.php';
|
||||||
|
|||||||
@@ -3,6 +3,7 @@
|
|||||||
use MyAAC\Settings;
|
use MyAAC\Settings;
|
||||||
|
|
||||||
const MYAAC_ADMIN = true;
|
const MYAAC_ADMIN = true;
|
||||||
|
const IGNORE_SET_LAST_VISIT = true;
|
||||||
|
|
||||||
require '../../common.php';
|
require '../../common.php';
|
||||||
require SYSTEM . 'functions.php';
|
require SYSTEM . 'functions.php';
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
<?php
|
<?php
|
||||||
define('MYAAC_ADMIN', true);
|
const MYAAC_ADMIN = true;
|
||||||
|
const IGNORE_SET_LAST_VISIT = true;
|
||||||
|
|
||||||
require '../../common.php';
|
require '../../common.php';
|
||||||
require SYSTEM . 'init.php';
|
require SYSTEM . 'init.php';
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
<?php
|
<?php
|
||||||
define('MYAAC_ADMIN', true);
|
const MYAAC_ADMIN = true;
|
||||||
|
const IGNORE_SET_LAST_VISIT = true;
|
||||||
|
|
||||||
require '../../common.php';
|
require '../../common.php';
|
||||||
require SYSTEM . 'functions.php';
|
require SYSTEM . 'functions.php';
|
||||||
|
|||||||
@@ -26,8 +26,8 @@
|
|||||||
if (version_compare(phpversion(), '8.1', '<')) die('PHP version 8.1 or higher is required.');
|
if (version_compare(phpversion(), '8.1', '<')) die('PHP version 8.1 or higher is required.');
|
||||||
|
|
||||||
const MYAAC = true;
|
const MYAAC = true;
|
||||||
const MYAAC_VERSION = '1.8.1';
|
const MYAAC_VERSION = '1.8.3';
|
||||||
const DATABASE_VERSION = 45;
|
const DATABASE_VERSION = 46;
|
||||||
const TABLE_PREFIX = 'myaac_';
|
const TABLE_PREFIX = 'myaac_';
|
||||||
define('START_TIME', microtime(true));
|
define('START_TIME', microtime(true));
|
||||||
define('MYAAC_OS', stripos(PHP_OS, 'WIN') === 0 ? 'WINDOWS' : (strtoupper(PHP_OS) === 'DARWIN' ? 'MAC' : 'LINUX'));
|
define('MYAAC_OS', stripos(PHP_OS, 'WIN') === 0 ? 'WINDOWS' : (strtoupper(PHP_OS) === 'DARWIN' ? 'MAC' : 'LINUX'));
|
||||||
|
|||||||
69
install/includes/import_base_data.php
Normal file
69
install/includes/import_base_data.php
Normal file
@@ -0,0 +1,69 @@
|
|||||||
|
<?php
|
||||||
|
defined('MYAAC') or die('Direct access not allowed!');
|
||||||
|
|
||||||
|
use MyAAC\Models\Changelog;
|
||||||
|
use MyAAC\Models\Config;
|
||||||
|
use MyAAC\Models\ForumBoard;
|
||||||
|
use MyAAC\Models\Gallery;
|
||||||
|
use MyAAC\Models\NewsCategory;
|
||||||
|
|
||||||
|
if (Changelog::count() === 0) {
|
||||||
|
Changelog::create([
|
||||||
|
'type' => 3,
|
||||||
|
'where' => 2,
|
||||||
|
'date' => time(),
|
||||||
|
'body' => 'MyAAC installed. (:',
|
||||||
|
'hide' => 0,
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (Config::where('name', 'database_version')->count() === 0) {
|
||||||
|
Config::create([
|
||||||
|
'name' => 'database_version',
|
||||||
|
'value' => DATABASE_VERSION,
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ForumBoard::count() === 0) {
|
||||||
|
$forumBoards = [
|
||||||
|
['name' => 'News', 'description' => 'News commenting', 'closed' => 1],
|
||||||
|
['name' => 'Trade', 'description' => 'Trade offers.', 'closed' => 0],
|
||||||
|
['name' => 'Quests', 'description' => 'Quest making.', 'closed' => 0],
|
||||||
|
['name' => 'Pictures', 'description' => 'Your pictures.', 'closed' => 0],
|
||||||
|
['name' => 'Bug Report', 'description' => 'Report bugs there.', 'closed' => 0],
|
||||||
|
];
|
||||||
|
|
||||||
|
$i = 0;
|
||||||
|
foreach ($forumBoards as $forumBoard) {
|
||||||
|
ForumBoard::create([
|
||||||
|
'name' => $forumBoard['name'],
|
||||||
|
'description' => $forumBoard['description'],
|
||||||
|
'ordering' => $i++,
|
||||||
|
'closed' => $forumBoard['closed'],
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (NewsCategory::count() === 0) {
|
||||||
|
$newsCategoriesIcons = [
|
||||||
|
0, 1, 2, 3, 4
|
||||||
|
];
|
||||||
|
|
||||||
|
foreach ($newsCategoriesIcons as $iconId) {
|
||||||
|
NewsCategory::create([
|
||||||
|
'icon_id' => $iconId,
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (Gallery::count() === 0) {
|
||||||
|
Gallery::create([
|
||||||
|
'comment' => 'Demon',
|
||||||
|
'image' => 'images/gallery/demon.jpg',
|
||||||
|
'thumb' => 'images/gallery/demon_thumb.gif',
|
||||||
|
'author' => 'MyAAC',
|
||||||
|
'ordering' => 0,
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
success($locale['step_database_success_import_data']);
|
||||||
@@ -1,6 +1,4 @@
|
|||||||
SET @myaac_database_version = 45;
|
CREATE TABLE IF NOT EXISTS `myaac_account_actions`
|
||||||
|
|
||||||
CREATE TABLE `myaac_account_actions`
|
|
||||||
(
|
(
|
||||||
`account_id` int NOT NULL,
|
`account_id` int NOT NULL,
|
||||||
`ip` int unsigned NOT NULL DEFAULT 0,
|
`ip` int unsigned NOT NULL DEFAULT 0,
|
||||||
@@ -10,7 +8,16 @@ CREATE TABLE `myaac_account_actions`
|
|||||||
KEY (`account_id`)
|
KEY (`account_id`)
|
||||||
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8mb4;
|
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8mb4;
|
||||||
|
|
||||||
CREATE TABLE `myaac_admin_menu`
|
CREATE TABLE IF NOT EXISTS `myaac_account_emails_verify`
|
||||||
|
(
|
||||||
|
`id` int NOT NULL AUTO_INCREMENT,
|
||||||
|
`account_id` int NOT NULL,
|
||||||
|
`hash` varchar(32) NOT NULL,
|
||||||
|
`sent_at` int NOT NULL DEFAULT 0,
|
||||||
|
PRIMARY KEY (`id`)
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8mb4;
|
||||||
|
|
||||||
|
CREATE TABLE IF NOT EXISTS `myaac_admin_menu`
|
||||||
(
|
(
|
||||||
`id` int NOT NULL AUTO_INCREMENT,
|
`id` int NOT NULL AUTO_INCREMENT,
|
||||||
`name` varchar(255) NOT NULL DEFAULT '',
|
`name` varchar(255) NOT NULL DEFAULT '',
|
||||||
@@ -21,7 +28,7 @@ CREATE TABLE `myaac_admin_menu`
|
|||||||
PRIMARY KEY (`id`)
|
PRIMARY KEY (`id`)
|
||||||
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8mb4;
|
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8mb4;
|
||||||
|
|
||||||
CREATE TABLE `myaac_changelog`
|
CREATE TABLE IF NOT EXISTS `myaac_changelog`
|
||||||
(
|
(
|
||||||
`id` int NOT NULL AUTO_INCREMENT,
|
`id` int NOT NULL AUTO_INCREMENT,
|
||||||
`body` varchar(500) NOT NULL DEFAULT '',
|
`body` varchar(500) NOT NULL DEFAULT '',
|
||||||
@@ -33,9 +40,7 @@ CREATE TABLE `myaac_changelog`
|
|||||||
PRIMARY KEY (`id`)
|
PRIMARY KEY (`id`)
|
||||||
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8mb4;
|
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8mb4;
|
||||||
|
|
||||||
INSERT INTO `myaac_changelog` (`id`, `type`, `where`, `date`, `body`, `hide`) VALUES (1, 3, 2, UNIX_TIMESTAMP(), 'MyAAC installed. (:', 0);
|
CREATE TABLE IF NOT EXISTS `myaac_config`
|
||||||
|
|
||||||
CREATE TABLE `myaac_config`
|
|
||||||
(
|
(
|
||||||
`id` int NOT NULL AUTO_INCREMENT,
|
`id` int NOT NULL AUTO_INCREMENT,
|
||||||
`name` varchar(30) NOT NULL,
|
`name` varchar(30) NOT NULL,
|
||||||
@@ -44,9 +49,7 @@ CREATE TABLE `myaac_config`
|
|||||||
UNIQUE (`name`)
|
UNIQUE (`name`)
|
||||||
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8mb4;
|
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8mb4;
|
||||||
|
|
||||||
INSERT INTO `myaac_config` (`name`, `value`) VALUES ('database_version', @myaac_database_version);
|
CREATE TABLE IF NOT EXISTS `myaac_faq`
|
||||||
|
|
||||||
CREATE TABLE `myaac_faq`
|
|
||||||
(
|
(
|
||||||
`id` int NOT NULL AUTO_INCREMENT,
|
`id` int NOT NULL AUTO_INCREMENT,
|
||||||
`question` varchar(255) NOT NULL DEFAULT '',
|
`question` varchar(255) NOT NULL DEFAULT '',
|
||||||
@@ -56,7 +59,7 @@ CREATE TABLE `myaac_faq`
|
|||||||
PRIMARY KEY (`id`)
|
PRIMARY KEY (`id`)
|
||||||
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8mb4;
|
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8mb4;
|
||||||
|
|
||||||
CREATE TABLE `myaac_forum_boards`
|
CREATE TABLE IF NOT EXISTS `myaac_forum_boards`
|
||||||
(
|
(
|
||||||
`id` int NOT NULL AUTO_INCREMENT,
|
`id` int NOT NULL AUTO_INCREMENT,
|
||||||
`name` varchar(32) NOT NULL,
|
`name` varchar(32) NOT NULL,
|
||||||
@@ -68,13 +71,8 @@ CREATE TABLE `myaac_forum_boards`
|
|||||||
`hide` tinyint NOT NULL DEFAULT 0,
|
`hide` tinyint NOT NULL DEFAULT 0,
|
||||||
PRIMARY KEY (`id`)
|
PRIMARY KEY (`id`)
|
||||||
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8mb4;
|
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8mb4;
|
||||||
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);
|
|
||||||
INSERT INTO `myaac_forum_boards` (`id`, `name`, `description`, `ordering`) VALUES (NULL, 'Pictures', 'Your pictures.', 3);
|
|
||||||
INSERT INTO `myaac_forum_boards` (`id`, `name`, `description`, `ordering`) VALUES (NULL, 'Bug Report', 'Report bugs there.', 4);
|
|
||||||
|
|
||||||
CREATE TABLE `myaac_forum`
|
CREATE TABLE IF NOT EXISTS `myaac_forum`
|
||||||
(
|
(
|
||||||
`id` int NOT NULL AUTO_INCREMENT,
|
`id` int NOT NULL AUTO_INCREMENT,
|
||||||
`first_post` int NOT NULL DEFAULT 0,
|
`first_post` int NOT NULL DEFAULT 0,
|
||||||
@@ -98,7 +96,7 @@ CREATE TABLE `myaac_forum`
|
|||||||
KEY `section` (`section`)
|
KEY `section` (`section`)
|
||||||
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8mb4;
|
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8mb4;
|
||||||
|
|
||||||
CREATE TABLE `myaac_menu`
|
CREATE TABLE IF NOT EXISTS `myaac_menu`
|
||||||
(
|
(
|
||||||
`id` int NOT NULL AUTO_INCREMENT,
|
`id` int NOT NULL AUTO_INCREMENT,
|
||||||
`template` varchar(255) NOT NULL,
|
`template` varchar(255) NOT NULL,
|
||||||
@@ -112,7 +110,7 @@ CREATE TABLE `myaac_menu`
|
|||||||
PRIMARY KEY (`id`)
|
PRIMARY KEY (`id`)
|
||||||
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8mb4;
|
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8mb4;
|
||||||
|
|
||||||
CREATE TABLE `myaac_monsters` (
|
CREATE TABLE IF NOT EXISTS `myaac_monsters` (
|
||||||
`id` int NOT NULL AUTO_INCREMENT,
|
`id` int NOT NULL AUTO_INCREMENT,
|
||||||
`hide` tinyint NOT NULL DEFAULT 0,
|
`hide` tinyint NOT NULL DEFAULT 0,
|
||||||
`name` varchar(255) NOT NULL,
|
`name` varchar(255) NOT NULL,
|
||||||
@@ -145,7 +143,7 @@ CREATE TABLE `myaac_monsters` (
|
|||||||
PRIMARY KEY (`id`)
|
PRIMARY KEY (`id`)
|
||||||
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8mb4;
|
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8mb4;
|
||||||
|
|
||||||
CREATE TABLE `myaac_news`
|
CREATE TABLE IF NOT EXISTS `myaac_news`
|
||||||
(
|
(
|
||||||
`id` int NOT NULL AUTO_INCREMENT,
|
`id` int NOT NULL AUTO_INCREMENT,
|
||||||
`title` varchar(100) NOT NULL,
|
`title` varchar(100) NOT NULL,
|
||||||
@@ -163,7 +161,7 @@ CREATE TABLE `myaac_news`
|
|||||||
PRIMARY KEY (`id`)
|
PRIMARY KEY (`id`)
|
||||||
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8mb4;
|
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8mb4;
|
||||||
|
|
||||||
CREATE TABLE `myaac_news_categories`
|
CREATE TABLE IF NOT EXISTS `myaac_news_categories`
|
||||||
(
|
(
|
||||||
`id` int NOT NULL AUTO_INCREMENT,
|
`id` int NOT NULL AUTO_INCREMENT,
|
||||||
`name` varchar(50) NOT NULL DEFAULT "",
|
`name` varchar(50) NOT NULL DEFAULT "",
|
||||||
@@ -173,13 +171,7 @@ CREATE TABLE `myaac_news_categories`
|
|||||||
PRIMARY KEY (`id`)
|
PRIMARY KEY (`id`)
|
||||||
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8mb4;
|
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8mb4;
|
||||||
|
|
||||||
INSERT INTO `myaac_news_categories` (`id`, `icon_id`) VALUES (NULL, 0);
|
CREATE TABLE IF NOT EXISTS `myaac_notepad`
|
||||||
INSERT INTO `myaac_news_categories` (`id`, `icon_id`) VALUES (NULL, 1);
|
|
||||||
INSERT INTO `myaac_news_categories` (`id`, `icon_id`) VALUES (NULL, 2);
|
|
||||||
INSERT INTO `myaac_news_categories` (`id`, `icon_id`) VALUES (NULL, 3);
|
|
||||||
INSERT INTO `myaac_news_categories` (`id`, `icon_id`) VALUES (NULL, 4);
|
|
||||||
|
|
||||||
CREATE TABLE `myaac_notepad`
|
|
||||||
(
|
(
|
||||||
`id` int NOT NULL AUTO_INCREMENT,
|
`id` int NOT NULL AUTO_INCREMENT,
|
||||||
`account_id` int NOT NULL,
|
`account_id` int NOT NULL,
|
||||||
@@ -189,7 +181,7 @@ CREATE TABLE `myaac_notepad`
|
|||||||
PRIMARY KEY (`id`)
|
PRIMARY KEY (`id`)
|
||||||
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8mb4;
|
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8mb4;
|
||||||
|
|
||||||
CREATE TABLE `myaac_pages`
|
CREATE TABLE IF NOT EXISTS `myaac_pages`
|
||||||
(
|
(
|
||||||
`id` INT NOT NULL AUTO_INCREMENT,
|
`id` INT NOT NULL AUTO_INCREMENT,
|
||||||
`name` varchar(30) NOT NULL,
|
`name` varchar(30) NOT NULL,
|
||||||
@@ -205,7 +197,7 @@ CREATE TABLE `myaac_pages`
|
|||||||
UNIQUE (`name`)
|
UNIQUE (`name`)
|
||||||
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8mb4;
|
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8mb4;
|
||||||
|
|
||||||
CREATE TABLE `myaac_gallery`
|
CREATE TABLE IF NOT EXISTS `myaac_gallery`
|
||||||
(
|
(
|
||||||
`id` int NOT NULL AUTO_INCREMENT,
|
`id` int NOT NULL AUTO_INCREMENT,
|
||||||
`comment` varchar(255) NOT NULL DEFAULT '',
|
`comment` varchar(255) NOT NULL DEFAULT '',
|
||||||
@@ -217,9 +209,7 @@ CREATE TABLE `myaac_gallery`
|
|||||||
PRIMARY KEY (`id`)
|
PRIMARY KEY (`id`)
|
||||||
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8mb4;
|
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8mb4;
|
||||||
|
|
||||||
INSERT INTO `myaac_gallery` (`id`, `ordering`, `comment`, `image`, `thumb`, `author`) VALUES (NULL, 1, 'Demon', 'images/gallery/demon.jpg', 'images/gallery/demon_thumb.gif', 'MyAAC');
|
CREATE TABLE IF NOT EXISTS `myaac_settings`
|
||||||
|
|
||||||
CREATE TABLE `myaac_settings`
|
|
||||||
(
|
(
|
||||||
`id` int NOT NULL AUTO_INCREMENT,
|
`id` int NOT NULL AUTO_INCREMENT,
|
||||||
`name` varchar(255) NOT NULL DEFAULT '',
|
`name` varchar(255) NOT NULL DEFAULT '',
|
||||||
@@ -229,7 +219,7 @@ CREATE TABLE `myaac_settings`
|
|||||||
KEY `key` (`key`)
|
KEY `key` (`key`)
|
||||||
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8mb4;
|
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8mb4;
|
||||||
|
|
||||||
CREATE TABLE `myaac_spells`
|
CREATE TABLE IF NOT EXISTS `myaac_spells`
|
||||||
(
|
(
|
||||||
`id` int NOT NULL AUTO_INCREMENT,
|
`id` int NOT NULL AUTO_INCREMENT,
|
||||||
`spell` varchar(255) NOT NULL DEFAULT '',
|
`spell` varchar(255) NOT NULL DEFAULT '',
|
||||||
@@ -252,7 +242,7 @@ CREATE TABLE `myaac_spells`
|
|||||||
UNIQUE (`name`)
|
UNIQUE (`name`)
|
||||||
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8mb4;
|
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8mb4;
|
||||||
|
|
||||||
CREATE TABLE `myaac_visitors`
|
CREATE TABLE IF NOT EXISTS `myaac_visitors`
|
||||||
(
|
(
|
||||||
`ip` varchar(45) NOT NULL,
|
`ip` varchar(45) NOT NULL,
|
||||||
`lastvisit` int NOT NULL DEFAULT 0,
|
`lastvisit` int NOT NULL DEFAULT 0,
|
||||||
@@ -261,7 +251,7 @@ CREATE TABLE `myaac_visitors`
|
|||||||
UNIQUE (`ip`)
|
UNIQUE (`ip`)
|
||||||
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8mb4;
|
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8mb4;
|
||||||
|
|
||||||
CREATE TABLE `myaac_weapons`
|
CREATE TABLE IF NOT EXISTS `myaac_weapons`
|
||||||
(
|
(
|
||||||
`id` int NOT NULL,
|
`id` int NOT NULL,
|
||||||
`level` int NOT NULL DEFAULT 0,
|
`level` int NOT NULL DEFAULT 0,
|
||||||
|
|||||||
@@ -42,45 +42,44 @@ if(!$error) {
|
|||||||
$configToSave['cache_prefix'] = 'myaac_' . generateRandomString(8, true, false, true);
|
$configToSave['cache_prefix'] = 'myaac_' . generateRandomString(8, true, false, true);
|
||||||
$configToSave['database_auto_migrate'] = true;
|
$configToSave['database_auto_migrate'] = true;
|
||||||
|
|
||||||
if(!$error) {
|
$content = '';
|
||||||
$content = '';
|
$saved = Settings::saveConfig($configToSave, BASE . 'config.local.php', $content);
|
||||||
$saved = Settings::saveConfig($configToSave, BASE . 'config.local.php', $content);
|
if ($saved || file_exists(BASE . 'config.local.php')) {
|
||||||
if ($saved) {
|
success($locale['step_database_config_saved']);
|
||||||
success($locale['step_database_config_saved']);
|
$_SESSION['saved'] = true;
|
||||||
$_SESSION['saved'] = true;
|
|
||||||
|
|
||||||
require BASE . 'config.local.php';
|
require BASE . 'config.local.php';
|
||||||
require BASE . 'install/includes/config.php';
|
require BASE . 'install/includes/config.php';
|
||||||
|
|
||||||
if (!$error) {
|
if (!$error) {
|
||||||
require BASE . 'install/includes/database.php';
|
require BASE . 'install/includes/database.php';
|
||||||
|
|
||||||
if (isset($database_error)) { // we failed connect to the database
|
if (isset($database_error)) { // we failed connect to the database
|
||||||
error($database_error);
|
error($database_error);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
if (!$db->hasTable('accounts')) {
|
||||||
|
$tmp = str_replace('$TABLE$', 'accounts', $locale['step_database_error_table']);
|
||||||
|
error($tmp);
|
||||||
|
$error = true;
|
||||||
}
|
}
|
||||||
else {
|
|
||||||
if (!$db->hasTable('accounts')) {
|
|
||||||
$tmp = str_replace('$TABLE$', 'accounts', $locale['step_database_error_table']);
|
|
||||||
error($tmp);
|
|
||||||
$error = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!$error) {
|
if (!$error) {
|
||||||
$twig->display('install.installer.html.twig', array(
|
$twig->display('install.installer.html.twig', array(
|
||||||
'url' => 'tools/5-database.php',
|
'url' => 'tools/5-database.php',
|
||||||
'message' => $locale['loading_spinner']
|
'message' => $locale['loading_spinner']
|
||||||
));
|
));
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
$_SESSION['config_content'] = $content;
|
|
||||||
unset($_SESSION['saved']);
|
|
||||||
|
|
||||||
$locale['step_database_error_file'] = str_replace('$FILE$', '<b>' . BASE . 'config.php</b>', $locale['step_database_error_file']);
|
|
||||||
error($locale['step_database_error_file'] . '<br/>
|
|
||||||
<textarea cols="70" rows="10">' . $content . '</textarea>');
|
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
$error = true;
|
||||||
|
$_SESSION['config_content'] = $content;
|
||||||
|
unset($_SESSION['saved']);
|
||||||
|
|
||||||
|
$locale['step_database_error_file'] = str_replace('$FILE$', '<b>' . BASE . 'config.local.php</b>', $locale['step_database_error_file']);
|
||||||
|
error($locale['step_database_error_file'] . '<br/>
|
||||||
|
<textarea cols="70" rows="10">' . $content . '</textarea>');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
?>
|
?>
|
||||||
|
|||||||
@@ -30,26 +30,22 @@ if(!$error) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if($db->hasTable(TABLE_PREFIX . 'account_actions')) {
|
// import schema
|
||||||
$locale['step_database_error_table_exist'] = str_replace('$TABLE$', TABLE_PREFIX . 'account_actions', $locale['step_database_error_table_exist']);
|
try {
|
||||||
warning($locale['step_database_error_table_exist']);
|
$locale['step_database_importing'] = str_replace('$DATABASE_NAME$', config('database_name'), $locale['step_database_importing']);
|
||||||
}
|
success($locale['step_database_importing']);
|
||||||
else {
|
|
||||||
// import schema
|
|
||||||
try {
|
|
||||||
$locale['step_database_importing'] = str_replace('$DATABASE_NAME$', config('database_name'), $locale['step_database_importing']);
|
|
||||||
success($locale['step_database_importing']);
|
|
||||||
|
|
||||||
$db->query(file_get_contents(BASE . 'install/includes/schema.sql'));
|
$db->exec(file_get_contents(BASE . 'install/includes/schema.sql'));
|
||||||
|
|
||||||
$locale['step_database_success_schema'] = str_replace('$PREFIX$', TABLE_PREFIX, $locale['step_database_success_schema']);
|
$locale['step_database_success_schema'] = str_replace('$PREFIX$', TABLE_PREFIX, $locale['step_database_success_schema']);
|
||||||
success($locale['step_database_success_schema']);
|
success($locale['step_database_success_schema']);
|
||||||
}
|
|
||||||
catch(PDOException $error_) {
|
|
||||||
error($locale['step_database_error_schema'] . ' ' . $error_);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
catch(PDOException $error_) {
|
||||||
|
error($locale['step_database_error_schema'] . ' ' . $error_);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
require BASE . 'install/includes/import_base_data.php';
|
||||||
|
|
||||||
if(!$db->hasColumn('accounts', 'email')) {
|
if(!$db->hasColumn('accounts', 'email')) {
|
||||||
if(query("ALTER TABLE `accounts` ADD `email` varchar(255) NOT NULL DEFAULT '';"))
|
if(query("ALTER TABLE `accounts` ADD `email` varchar(255) NOT NULL DEFAULT '';"))
|
||||||
@@ -102,18 +98,13 @@ if(!$db->hasColumn('accounts', 'web_flags')) {
|
|||||||
success($locale['step_database_adding_field'] . ' accounts.web_flags...');
|
success($locale['step_database_adding_field'] . ' accounts.web_flags...');
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!$db->hasColumn('accounts', 'email_hash')) {
|
|
||||||
if(query("ALTER TABLE `accounts` ADD `email_hash` VARCHAR(32) NOT NULL DEFAULT '' AFTER `web_flags`;"))
|
|
||||||
success($locale['step_database_adding_field'] . ' accounts.email_hash...');
|
|
||||||
}
|
|
||||||
|
|
||||||
if(!$db->hasColumn('accounts', 'email_verified')) {
|
if(!$db->hasColumn('accounts', 'email_verified')) {
|
||||||
if(query("ALTER TABLE `accounts` ADD `email_verified` TINYINT(1) NOT NULL DEFAULT 0 AFTER `email_hash`;"))
|
if(query("ALTER TABLE `accounts` ADD `email_verified` TINYINT(1) NOT NULL DEFAULT 0 AFTER `web_flags`;"))
|
||||||
success($locale['step_database_adding_field'] . ' accounts.email_verified...');
|
success($locale['step_database_adding_field'] . ' accounts.email_verified...');
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!$db->hasColumn('accounts', 'email_new')) {
|
if(!$db->hasColumn('accounts', 'email_new')) {
|
||||||
if(query("ALTER TABLE `accounts` ADD `email_new` VARCHAR(255) NOT NULL DEFAULT '' AFTER `email_hash`;"))
|
if(query("ALTER TABLE `accounts` ADD `email_new` VARCHAR(255) NOT NULL DEFAULT '' AFTER `email_verified`;"))
|
||||||
success($locale['step_database_adding_field'] . ' accounts.email_new...');
|
success($locale['step_database_adding_field'] . ' accounts.email_new...');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -220,6 +220,8 @@ switch ($action) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* not needed anymore?
|
||||||
if (fieldExist('premdays', 'accounts') && fieldExist('lastday', 'accounts')) {
|
if (fieldExist('premdays', 'accounts') && fieldExist('lastday', 'accounts')) {
|
||||||
$save = false;
|
$save = false;
|
||||||
$timeNow = time();
|
$timeNow = time();
|
||||||
@@ -256,6 +258,7 @@ switch ($action) {
|
|||||||
$account->save();
|
$account->save();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
$worlds = [$world];
|
$worlds = [$world];
|
||||||
$playdata = compact('worlds', 'characters');
|
$playdata = compact('worlds', 'characters');
|
||||||
|
|||||||
@@ -81,6 +81,7 @@ $deprecatedConfig = [
|
|||||||
'account_change_character_name_points' => 'account_change_character_name_price',
|
'account_change_character_name_points' => 'account_change_character_name_price',
|
||||||
'account_change_character_sex',
|
'account_change_character_sex',
|
||||||
'account_change_character_sex_points' => 'account_change_character_name_price',
|
'account_change_character_sex_points' => 'account_change_character_name_price',
|
||||||
|
'email_lai_sec_interval' => 'mail_lost_account_interval',
|
||||||
];
|
];
|
||||||
|
|
||||||
foreach ($deprecatedConfig as $key => $value) {
|
foreach ($deprecatedConfig as $key => $value) {
|
||||||
|
|||||||
@@ -1142,10 +1142,18 @@ function getTopPlayers($limit = 5, $skill = 'level') {
|
|||||||
'looktype', 'lookhead', 'lookbody', 'looklegs', 'lookfeet'
|
'looktype', 'lookhead', 'lookbody', 'looklegs', 'lookfeet'
|
||||||
];
|
];
|
||||||
|
|
||||||
|
if ($db->hasColumn('players', 'promotion')) {
|
||||||
|
$columns[] = 'promotion';
|
||||||
|
}
|
||||||
|
|
||||||
if ($db->hasColumn('players', 'lookaddons')) {
|
if ($db->hasColumn('players', 'lookaddons')) {
|
||||||
$columns[] = 'lookaddons';
|
$columns[] = 'lookaddons';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ($db->hasColumn('players', 'lookmount')) {
|
||||||
|
$columns[] = 'lookmount';
|
||||||
|
}
|
||||||
|
|
||||||
return Player::query()
|
return Player::query()
|
||||||
->select($columns)
|
->select($columns)
|
||||||
->withOnlineStatus()
|
->withOnlineStatus()
|
||||||
@@ -1632,13 +1640,14 @@ function camelCaseToUnderscore($input)
|
|||||||
return ltrim(strtolower(preg_replace('/[A-Z]([A-Z](?![a-z]))*/', '_$0', $input)), '_');
|
return ltrim(strtolower(preg_replace('/[A-Z]([A-Z](?![a-z]))*/', '_$0', $input)), '_');
|
||||||
}
|
}
|
||||||
|
|
||||||
function removeIfFirstSlash(&$text) {
|
function removeIfFirstSlash(&$text): void
|
||||||
|
{
|
||||||
if(strpos($text, '/') === 0) {
|
if(strpos($text, '/') === 0) {
|
||||||
$text = str_replace_first('/', '', $text);
|
$text = str_replace_first('/', '', $text);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
function escapeHtml($html) {
|
function escapeHtml($html): string {
|
||||||
return htmlspecialchars($html);
|
return htmlspecialchars($html);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1652,7 +1661,7 @@ function getGuildNameById($id)
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
function getGuildLogoById($id)
|
function getGuildLogoById($id): string
|
||||||
{
|
{
|
||||||
$logo = 'default.gif';
|
$logo = 'default.gif';
|
||||||
|
|
||||||
@@ -1668,7 +1677,8 @@ function getGuildLogoById($id)
|
|||||||
return BASE_URL . GUILD_IMAGES_DIR . $logo;
|
return BASE_URL . GUILD_IMAGES_DIR . $logo;
|
||||||
}
|
}
|
||||||
|
|
||||||
function displayErrorBoxWithBackButton($errors, $action = null) {
|
function displayErrorBoxWithBackButton($errors, $action = null): void
|
||||||
|
{
|
||||||
global $twig;
|
global $twig;
|
||||||
$twig->display('error_box.html.twig', ['errors' => $errors]);
|
$twig->display('error_box.html.twig', ['errors' => $errors]);
|
||||||
$twig->display('account.back_button.html.twig', [
|
$twig->display('account.back_button.html.twig', [
|
||||||
@@ -1696,6 +1706,12 @@ function getAccountIdentityColumn(): string
|
|||||||
return 'id';
|
return 'id';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function isCanary(): bool
|
||||||
|
{
|
||||||
|
$vipSystemEnabled = configLua('vipSystemEnabled');
|
||||||
|
return isset($vipSystemEnabled);
|
||||||
|
}
|
||||||
|
|
||||||
// validator functions
|
// validator functions
|
||||||
require_once SYSTEM . 'compat/base.php';
|
require_once SYSTEM . 'compat/base.php';
|
||||||
|
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -26,10 +26,11 @@ use MyAAC\Cache\Cache;
|
|||||||
*/
|
*/
|
||||||
class OTS_DB_MySQL extends OTS_Base_DB
|
class OTS_DB_MySQL extends OTS_Base_DB
|
||||||
{
|
{
|
||||||
private $has_table_cache = array();
|
private array $has_table_cache = [];
|
||||||
private $has_column_cache = array();
|
private array $has_column_cache = [];
|
||||||
|
private array $get_column_info_cache = [];
|
||||||
|
|
||||||
private $clearCacheAfter = false;
|
private bool $clearCacheAfter = false;
|
||||||
/**
|
/**
|
||||||
* Creates database connection.
|
* Creates database connection.
|
||||||
*
|
*
|
||||||
@@ -119,6 +120,11 @@ class OTS_DB_MySQL extends OTS_Base_DB
|
|||||||
if($cache->fetch('database_columns', $tmp) && $tmp) {
|
if($cache->fetch('database_columns', $tmp) && $tmp) {
|
||||||
$this->has_column_cache = unserialize($tmp);
|
$this->has_column_cache = unserialize($tmp);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$tmp = null;
|
||||||
|
if($cache->fetch('database_columns_info', $tmp) && $tmp) {
|
||||||
|
$this->get_column_info_cache = unserialize($tmp);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -155,11 +161,13 @@ class OTS_DB_MySQL extends OTS_Base_DB
|
|||||||
if ($this->clearCacheAfter) {
|
if ($this->clearCacheAfter) {
|
||||||
$cache->delete('database_tables');
|
$cache->delete('database_tables');
|
||||||
$cache->delete('database_columns');
|
$cache->delete('database_columns');
|
||||||
|
$cache->delete('database_columns_info');
|
||||||
$cache->delete('database_checksum');
|
$cache->delete('database_checksum');
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
$cache->set('database_tables', serialize($this->has_table_cache), 3600);
|
$cache->set('database_tables', serialize($this->has_table_cache), 3600);
|
||||||
$cache->set('database_columns', serialize($this->has_column_cache), 3600);
|
$cache->set('database_columns', serialize($this->has_column_cache), 3600);
|
||||||
|
$cache->set('database_columns_info', serialize($this->get_column_info_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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -209,7 +217,8 @@ class OTS_DB_MySQL extends OTS_Base_DB
|
|||||||
return $sql;
|
return $sql;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function hasTable($name) {
|
public function hasTable($name): bool
|
||||||
|
{
|
||||||
if(isset($this->has_table_cache[$name])) {
|
if(isset($this->has_table_cache[$name])) {
|
||||||
return $this->has_table_cache[$name];
|
return $this->has_table_cache[$name];
|
||||||
}
|
}
|
||||||
@@ -217,12 +226,13 @@ class OTS_DB_MySQL extends OTS_Base_DB
|
|||||||
return $this->hasTableInternal($name);
|
return $this->hasTableInternal($name);
|
||||||
}
|
}
|
||||||
|
|
||||||
private function hasTableInternal($name) {
|
private function hasTableInternal($name): bool
|
||||||
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);
|
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) {
|
public function hasColumn($table, $column): bool
|
||||||
|
{
|
||||||
if(isset($this->has_column_cache[$table . '.' . $column])) {
|
if(isset($this->has_column_cache[$table . '.' . $column])) {
|
||||||
return $this->has_column_cache[$table . '.' . $column];
|
return $this->has_column_cache[$table . '.' . $column];
|
||||||
}
|
}
|
||||||
@@ -230,8 +240,8 @@ class OTS_DB_MySQL extends OTS_Base_DB
|
|||||||
return $this->hasColumnInternal($table, $column);
|
return $this->hasColumnInternal($table, $column);
|
||||||
}
|
}
|
||||||
|
|
||||||
private function hasColumnInternal($table, $column) {
|
private function hasColumnInternal($table, $column): bool {
|
||||||
return $this->hasTable($table) && ($this->has_column_cache[$table . '.' . $column] = count($this->query('SHOW COLUMNS FROM `' . $table . "` LIKE '" . $column . "'")->fetchAll()) > 0);
|
return $this->hasTable($table) && ($this->has_column_cache[$table . '.' . $column] = count($this->query('SHOW COLUMNS FROM `' . $table . "` LIKE " . $this->quote($column))->fetchAll()) > 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function hasTableAndColumns(string $table, array $columns = []): bool
|
public function hasTableAndColumns(string $table, array $columns = []): bool
|
||||||
@@ -247,7 +257,53 @@ class OTS_DB_MySQL extends OTS_Base_DB
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function revalidateCache() {
|
public function getColumnInfo(string $table, string $column): bool|array
|
||||||
|
{
|
||||||
|
if(isset($this->get_column_info_cache[$table . '.' . $column])) {
|
||||||
|
return $this->get_column_info_cache[$table . '.' . $column];
|
||||||
|
}
|
||||||
|
|
||||||
|
return $this->getColumnInfoInternal($table, $column);
|
||||||
|
}
|
||||||
|
|
||||||
|
private function getColumnInfoInternal(string $table, string $column): bool|array
|
||||||
|
{
|
||||||
|
if (!$this->hasTable($table) || !$this->hasColumn($table, $column)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
$formatResult = function ($result) {
|
||||||
|
return [
|
||||||
|
'field' => $result['Field'],
|
||||||
|
'type' => $result['Type'],
|
||||||
|
'null' => strtolower($result['Null']),
|
||||||
|
'default' => $result['Default'],
|
||||||
|
'extra' => $result['Extra'],
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
$query = $this->query('SHOW COLUMNS FROM `' . $table . "` LIKE " . $this->quote($column));
|
||||||
|
$rowCount = $query->rowCount();
|
||||||
|
if ($rowCount > 1) {
|
||||||
|
$tmp = [];
|
||||||
|
|
||||||
|
$results = $query->fetchAll(PDO::FETCH_ASSOC);
|
||||||
|
foreach ($results as $result) {
|
||||||
|
$tmp[] = $formatResult($result);
|
||||||
|
}
|
||||||
|
|
||||||
|
return ($this->get_column_info_cache[$table . '.' . $column] = $tmp);
|
||||||
|
}
|
||||||
|
else if ($rowCount == 1) {
|
||||||
|
$result = $query->fetch(PDO::FETCH_ASSOC);
|
||||||
|
return ($this->get_column_info_cache[$table . '.' . $column] = $formatResult($result));
|
||||||
|
}
|
||||||
|
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
|
||||||
|
public function revalidateCache(): void
|
||||||
|
{
|
||||||
foreach($this->has_table_cache as $key => $value) {
|
foreach($this->has_table_cache as $key => $value) {
|
||||||
$this->hasTableInternal($key);
|
$this->hasTableInternal($key);
|
||||||
}
|
}
|
||||||
@@ -262,6 +318,21 @@ class OTS_DB_MySQL extends OTS_Base_DB
|
|||||||
$this->hasColumnInternal($explode[0], $explode[1]);
|
$this->hasColumnInternal($explode[0], $explode[1]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
foreach($this->get_column_info_cache as $key => $value) {
|
||||||
|
$explode = explode('.', $key);
|
||||||
|
if(!isset($this->has_table_cache[$explode[0]])) { // first check if table exist
|
||||||
|
$this->hasTableInternal($explode[0]);
|
||||||
|
}
|
||||||
|
|
||||||
|
if($this->has_table_cache[$explode[0]]) {
|
||||||
|
$this->hasColumnInternal($explode[0], $explode[1]);
|
||||||
|
}
|
||||||
|
|
||||||
|
if($this->has_table_cache[$explode[0]]) {
|
||||||
|
$this->getColumnInfoInternal($explode[0], $explode[1]);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public function setClearCacheAfter($clearCache)
|
public function setClearCacheAfter($clearCache)
|
||||||
|
|||||||
@@ -78,6 +78,7 @@ $locale['step_database_error_mysql_connect_3'] = 'MySQL ist nicht richtig konfig
|
|||||||
$locale['step_database_error_mysql_connect_4'] = 'MySQL-Server läuft nicht.';
|
$locale['step_database_error_mysql_connect_4'] = 'MySQL-Server läuft nicht.';
|
||||||
$locale['step_database_error_schema'] = 'Fehler beim Importieren des Schemas:';
|
$locale['step_database_error_schema'] = 'Fehler beim Importieren des Schemas:';
|
||||||
$locale['step_database_success_schema'] = '$PREFIX$ Tabellen wurden erfolgreich installiert.';
|
$locale['step_database_success_schema'] = '$PREFIX$ Tabellen wurden erfolgreich installiert.';
|
||||||
|
$locale['step_database_success_import_data'] = 'Import von Daten für Tabellen was erfolgreich.';
|
||||||
$locale['step_database_error_file'] = '$FILE$ konnte nicht geöffnet werden. Bitte kopieren Sie diesen Inhalt und fügen Sie ihn dort ein:';
|
$locale['step_database_error_file'] = '$FILE$ konnte nicht geöffnet werden. Bitte kopieren Sie diesen Inhalt und fügen Sie ihn dort ein:';
|
||||||
$locale['step_database_adding_field'] = 'Folgendes Feld wurde hinzugefügt: ';
|
$locale['step_database_adding_field'] = 'Folgendes Feld wurde hinzugefügt: ';
|
||||||
$locale['step_database_modifying_field'] = 'Folgendes Feld wurde geändert: ';
|
$locale['step_database_modifying_field'] = 'Folgendes Feld wurde geändert: ';
|
||||||
|
|||||||
@@ -83,6 +83,7 @@ $locale['step_database_error_mysql_connect_3'] = 'MySQL is not configured proper
|
|||||||
$locale['step_database_error_mysql_connect_4'] = 'MySQL server is not running.';
|
$locale['step_database_error_mysql_connect_4'] = 'MySQL server is not running.';
|
||||||
$locale['step_database_error_schema'] = 'Error while importing schema:';
|
$locale['step_database_error_schema'] = 'Error while importing schema:';
|
||||||
$locale['step_database_success_schema'] = 'Successfully installed $PREFIX$ tables.';
|
$locale['step_database_success_schema'] = 'Successfully installed $PREFIX$ tables.';
|
||||||
|
$locale['step_database_success_import_data'] = 'Successfully imported base data for tables.';
|
||||||
$locale['step_database_error_file'] = '$FILE$ couldn\'t be opened. Please copy this content and paste there:';
|
$locale['step_database_error_file'] = '$FILE$ couldn\'t be opened. Please copy this content and paste there:';
|
||||||
$locale['step_database_adding_field'] = 'Adding field';
|
$locale['step_database_adding_field'] = 'Adding field';
|
||||||
$locale['step_database_modifying_field'] = 'Modifying field';
|
$locale['step_database_modifying_field'] = 'Modifying field';
|
||||||
|
|||||||
@@ -81,7 +81,8 @@ $locale['step_database_error_mysql_connect_2'] = 'Możliwe przyczyny:';
|
|||||||
$locale['step_database_error_mysql_connect_3'] = 'MySQL nie jest poprawnie skonfigurowane w <i>config.lua</i>.';
|
$locale['step_database_error_mysql_connect_3'] = 'MySQL nie jest poprawnie skonfigurowane w <i>config.lua</i>.';
|
||||||
$locale['step_database_error_mysql_connect_4'] = 'Serwer MySQL nie jest uruchomiony.';
|
$locale['step_database_error_mysql_connect_4'] = 'Serwer MySQL nie jest uruchomiony.';
|
||||||
$locale['step_database_error_schema'] = 'Błąd podczas importowania struktury bazy danych:';
|
$locale['step_database_error_schema'] = 'Błąd podczas importowania struktury bazy danych:';
|
||||||
$locale['step_database_success_schema'] = 'Pomyślnie zainstalowano tabele $PREFIX$.';
|
$locale['step_database_success_schema'] = 'Pomyślnie zaimportowano tabele $PREFIX$.';
|
||||||
|
$locale['step_database_success_import_data'] = 'Pomyślnie załadowano bazowe dane dla tabel.';
|
||||||
$locale['step_database_error_file'] = '$FILE$ nie mógł zostać otwarty. Proszę skopiować zawartość pola tekstowego i wkleić do tego pliku:';
|
$locale['step_database_error_file'] = '$FILE$ nie mógł zostać otwarty. Proszę skopiować zawartość pola tekstowego i wkleić do tego pliku:';
|
||||||
$locale['step_database_adding_field'] = 'Dodawanie pola';
|
$locale['step_database_adding_field'] = 'Dodawanie pola';
|
||||||
$locale['step_database_modifying_field'] = 'Modyfikacja pola';
|
$locale['step_database_modifying_field'] = 'Modyfikacja pola';
|
||||||
|
|||||||
@@ -34,8 +34,10 @@ if($logged) {
|
|||||||
$twig->addGlobal('account_logged', $account_logged);
|
$twig->addGlobal('account_logged', $account_logged);
|
||||||
}
|
}
|
||||||
|
|
||||||
setSession('last_visit', time());
|
if (!defined('IGNORE_SET_LAST_VISIT') || !IGNORE_SET_LAST_VISIT) {
|
||||||
if(defined('PAGE')) {
|
setSession('last_visit', time());
|
||||||
setSession('last_page', PAGE);
|
if(defined('PAGE')) {
|
||||||
|
setSession('last_page', PAGE);
|
||||||
|
}
|
||||||
|
setSession('last_uri', $_SERVER['REQUEST_URI']);
|
||||||
}
|
}
|
||||||
setSession('last_uri', $_SERVER['REQUEST_URI']);
|
|
||||||
|
|||||||
@@ -9,6 +9,8 @@
|
|||||||
*/
|
*/
|
||||||
defined('MYAAC') or die('Direct access not allowed!');
|
defined('MYAAC') or die('Direct access not allowed!');
|
||||||
|
|
||||||
|
global $db;
|
||||||
|
|
||||||
// database migrations
|
// database migrations
|
||||||
$tmp = '';
|
$tmp = '';
|
||||||
if(fetchDatabaseConfig('database_version', $tmp)) { // we got version
|
if(fetchDatabaseConfig('database_version', $tmp)) { // we got version
|
||||||
|
|||||||
8
system/migrations/46-account_emails_verify.sql
Normal file
8
system/migrations/46-account_emails_verify.sql
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
CREATE TABLE `myaac_account_emails_verify`
|
||||||
|
(
|
||||||
|
`id` int NOT NULL AUTO_INCREMENT,
|
||||||
|
`account_id` int NOT NULL,
|
||||||
|
`hash` varchar(32) NOT NULL,
|
||||||
|
`sent_at` int NOT NULL DEFAULT 0,
|
||||||
|
PRIMARY KEY (`id`)
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8mb4;
|
||||||
24
system/migrations/46.php
Normal file
24
system/migrations/46.php
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* @var OTS_DB_MySQL $db
|
||||||
|
*/
|
||||||
|
|
||||||
|
$up = function () use ($db) {
|
||||||
|
if ($db->hasColumn('accounts', 'email_hash')) {
|
||||||
|
$db->dropColumn('accounts', 'email_hash');
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!$db->hasTable(TABLE_PREFIX . 'account_emails_verify')) {
|
||||||
|
$db->query(file_get_contents(__DIR__ . '/46-account_emails_verify.sql'));
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
$down = function () use ($db) {
|
||||||
|
if (!$db->hasColumn('accounts', 'email_hash')) {
|
||||||
|
$db->addColumn('accounts', 'email_hash', "varchar(32) NOT NULL DEFAULT ''");
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($db->hasTable(TABLE_PREFIX . 'account_emails_verify')) {
|
||||||
|
$db->dropTable(TABLE_PREFIX . 'account_emails_verify');
|
||||||
|
}
|
||||||
|
};
|
||||||
@@ -19,18 +19,17 @@ if(!$logged) {
|
|||||||
|
|
||||||
csrfProtect();
|
csrfProtect();
|
||||||
|
|
||||||
$new_password = $_POST['newpassword'] ?? NULL;
|
$new_password = $_POST['new_password'] ?? null;
|
||||||
$new_password_confirm = $_POST['newpassword_confirm'] ?? NULL;
|
$new_password_confirm = $_POST['new_password_confirm'] ?? null;
|
||||||
$old_password = $_POST['oldpassword'] ?? NULL;
|
$old_password = $_POST['old_password'] ?? null;
|
||||||
if(empty($new_password) && empty($new_password_confirm) && empty($old_password)) {
|
if(empty($new_password) && empty($new_password_confirm) && empty($old_password)) {
|
||||||
$twig->display('account.change-password.html.twig');
|
$twig->display('account.change-password.html.twig');
|
||||||
}
|
}
|
||||||
else
|
else {
|
||||||
{
|
|
||||||
if(empty($new_password) || empty($new_password_confirm) || empty($old_password)){
|
if(empty($new_password) || empty($new_password_confirm) || empty($old_password)){
|
||||||
$errors[] = 'Please fill in form.';
|
$errors[] = 'Please fill in form.';
|
||||||
}
|
}
|
||||||
$password_strlen = strlen($new_password);
|
|
||||||
if($new_password != $new_password_confirm) {
|
if($new_password != $new_password_confirm) {
|
||||||
$errors[] = 'The new passwords do not match!';
|
$errors[] = 'The new passwords do not match!';
|
||||||
}
|
}
|
||||||
@@ -41,10 +40,13 @@ else
|
|||||||
}
|
}
|
||||||
|
|
||||||
/** @var OTS_Account $account_logged */
|
/** @var OTS_Account $account_logged */
|
||||||
$old_password = encrypt((USE_ACCOUNT_SALT ? $account_logged->getCustomField('salt') : '') . $old_password);
|
$old_password_hashed = encrypt((USE_ACCOUNT_SALT ? $account_logged->getCustomField('salt') : '') . $old_password);
|
||||||
if($old_password != $account_logged->getPassword()) {
|
if($old_password_hashed != $account_logged->getPassword()) {
|
||||||
$errors[] = 'Current password is incorrect!';
|
$errors[] = 'Current password is incorrect!';
|
||||||
}
|
}
|
||||||
|
else if ($old_password == $new_password) {
|
||||||
|
$errors[] = 'The old password is same as the new password!';
|
||||||
|
}
|
||||||
|
|
||||||
$hooks->trigger(HOOK_ACCOUNT_CHANGE_PASSWORD_POST);
|
$hooks->trigger(HOOK_ACCOUNT_CHANGE_PASSWORD_POST);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -9,6 +9,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
use MyAAC\Models\Account;
|
use MyAAC\Models\Account;
|
||||||
|
use MyAAC\Models\AccountEmailVerify;
|
||||||
|
|
||||||
defined('MYAAC') or die('Direct access not allowed!');
|
defined('MYAAC') or die('Direct access not allowed!');
|
||||||
|
|
||||||
@@ -20,16 +21,20 @@ if(empty($hash)) {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!Account::where('email_hash', $hash)->exists()) {
|
// by default link is valid for 30 days
|
||||||
note("Your email couldn't be verified. Please contact staff to do it manually.");
|
$accountEmailVerify = AccountEmailVerify::where('hash', $hash)->where('sent_at', '>', time() - 30 * 24 * 60 * 60)->first();
|
||||||
|
if(!$accountEmailVerify) {
|
||||||
|
note("Wrong link or link has expired.");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
$accountModel = Account::where('email_hash', $hash)->where('email_verified', 0)->first();
|
$accountModel = Account::where('id', $accountEmailVerify->account_id)->where('email_verified', 0)->first();
|
||||||
if ($accountModel) {
|
if ($accountModel) {
|
||||||
$accountModel->email_verified = 1;
|
$accountModel->email_verified = 1;
|
||||||
$accountModel->save();
|
$accountModel->save();
|
||||||
|
|
||||||
|
AccountEmailVerify::where('account_id', $accountModel->id)->delete();
|
||||||
|
|
||||||
success('You have now verified your e-mail, this will increase the security of your account. Thank you for doing this. You can now <a href=' . getLink('account/manage') . '>log in</a>.');
|
success('You have now verified your e-mail, this will increase the security of your account. Thank you for doing this. You can now <a href=' . getLink('account/manage') . '>log in</a>.');
|
||||||
|
|
||||||
$account = new OTS_Account();
|
$account = new OTS_Account();
|
||||||
@@ -39,6 +44,6 @@ else
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
error('Link has expired.');
|
error('Your account is already verified.');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -10,6 +10,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
use MyAAC\CreateCharacter;
|
use MyAAC\CreateCharacter;
|
||||||
|
use MyAAC\Models\AccountEmailVerify;
|
||||||
|
|
||||||
defined('MYAAC') or die('Direct access not allowed!');
|
defined('MYAAC') or die('Direct access not allowed!');
|
||||||
$title = 'Create Account';
|
$title = 'Create Account';
|
||||||
@@ -244,7 +245,12 @@ if($save)
|
|||||||
if(setting('core.mail_enabled') && setting('core.account_mail_verify'))
|
if(setting('core.mail_enabled') && setting('core.account_mail_verify'))
|
||||||
{
|
{
|
||||||
$hash = md5(generateRandomString(16, true, true) . $email);
|
$hash = md5(generateRandomString(16, true, true) . $email);
|
||||||
$new_account->setCustomField('email_hash', $hash);
|
|
||||||
|
AccountEmailVerify::create([
|
||||||
|
'account_id' => $new_account->getId(),
|
||||||
|
'hash' => $hash,
|
||||||
|
'sent_at' => time(),
|
||||||
|
]);
|
||||||
|
|
||||||
$verify_url = getLink('account/confirm-email/' . $hash);
|
$verify_url = getLink('account/confirm-email/' . $hash);
|
||||||
$body_html = $twig->render('mail.account.verify.html.twig', array(
|
$body_html = $twig->render('mail.account.verify.html.twig', array(
|
||||||
@@ -268,8 +274,10 @@ if($save)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
error('An error occorred while sending email! Account not created. Try again. For Admin: More info can be found in system/logs/mailer-error.log');
|
error('An error occurred while sending email! Account not created. Try again. For Admin: More info can be found in system/logs/mailer-error.log');
|
||||||
$new_account->delete();
|
$new_account->delete();
|
||||||
|
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|||||||
@@ -48,7 +48,9 @@ if(!empty($login_account) && !empty($login_password))
|
|||||||
)
|
)
|
||||||
{
|
{
|
||||||
if (setting('core.account_mail_verify') && (int)$account_logged->getCustomField('email_verified') !== 1) {
|
if (setting('core.account_mail_verify') && (int)$account_logged->getCustomField('email_verified') !== 1) {
|
||||||
$errors[] = 'Your account is not verified. Please verify your email address. If the message is not coming check the SPAM folder in your E-Mail client.';
|
$link = getLink('account/resend-email-verify');
|
||||||
|
$errors[] = 'Your account is not verified. Please verify your email address. If the message is not coming check the SPAM folder in your E-Mail client.<br/>' .
|
||||||
|
'You can resend the Email here: <a href="' . $link . '">' . $link . '</a>';
|
||||||
} else {
|
} else {
|
||||||
session_regenerate_id();
|
session_regenerate_id();
|
||||||
setSession('account', $account_logged->getId());
|
setSession('account', $account_logged->getId());
|
||||||
|
|||||||
@@ -38,15 +38,24 @@ csrfProtect();
|
|||||||
|
|
||||||
$groups = new OTS_Groups_List();
|
$groups = new OTS_Groups_List();
|
||||||
|
|
||||||
$freePremium = isset($config['lua']['freePremium']) && getBoolean($config['lua']['freePremium']) || $account_logged->getPremDays() == OTS_Account::GRATIS_PREMIUM_DAYS;
|
|
||||||
$dayOrDays = $account_logged->getPremDays() == 1 ? 'day' : 'days';
|
|
||||||
/**
|
/**
|
||||||
* @var OTS_Account $account_logged
|
* @var OTS_Account $account_logged
|
||||||
*/
|
*/
|
||||||
if(!$account_logged->isPremium())
|
$premDays = $account_logged->getPremDays();
|
||||||
|
|
||||||
|
$freePremium = isset($config['lua']['freePremium']) && getBoolean($config['lua']['freePremium']) || $premDays == OTS_Account::GRATIS_PREMIUM_DAYS;
|
||||||
|
$dayOrDays = ($premDays == 1 ? 'day' : 'days');
|
||||||
|
|
||||||
|
$vipSystemEnabled = isset($config['lua']['vipSystemEnabled']) && getBoolean($config['lua']['vipSystemEnabled']);
|
||||||
|
$premiumLabel = $vipSystemEnabled ? 'VIP' : 'Premium Account';
|
||||||
|
|
||||||
|
if ($freePremium && !$vipSystemEnabled) {
|
||||||
|
$account_status = '<b><span style="color: green">Gratis Premium Account</span></b>';
|
||||||
|
} else if(!$account_logged->isPremium()) {
|
||||||
$account_status = '<b><span style="color: red">Free Account</span></b>';
|
$account_status = '<b><span style="color: red">Free Account</span></b>';
|
||||||
else
|
} else {
|
||||||
$account_status = '<b><span style="color: green">' . ($freePremium ? 'Gratis Premium Account' : 'Premium Account, ' . $account_logged->getPremDays() . ' '.$dayOrDays.' left') . '</span></b>';
|
$account_status = '<b><span style="color: green">' . $premiumLabel . ', ' . $premDays . ' '.$dayOrDays.' left</span></b>';
|
||||||
|
}
|
||||||
|
|
||||||
$recovery_key = $account_logged->getCustomField('key');
|
$recovery_key = $account_logged->getCustomField('key');
|
||||||
if(empty($recovery_key))
|
if(empty($recovery_key))
|
||||||
|
|||||||
94
system/pages/account/resend-email-verify.php
Normal file
94
system/pages/account/resend-email-verify.php
Normal file
@@ -0,0 +1,94 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
use MyAAC\Models\AccountEmailVerify;
|
||||||
|
|
||||||
|
defined('MYAAC') or die('Direct access not allowed!');
|
||||||
|
|
||||||
|
$title = 'Resend Email';
|
||||||
|
|
||||||
|
$errorWithBackButton = function ($msg) use ($twig) {
|
||||||
|
$errors = [$msg];
|
||||||
|
|
||||||
|
$twig->display('error_box.html.twig', ['errors' => $errors]);
|
||||||
|
$twig->display('account.back_button.html.twig', [
|
||||||
|
'action' => getLink('account/resend-email-verify'),
|
||||||
|
]);
|
||||||
|
};
|
||||||
|
|
||||||
|
if (!setting('core.mail_enabled') || !setting('core.account_mail_verify')) {
|
||||||
|
$errorWithBackButton('Resending email is not possible on this server.');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
$showForm = true;
|
||||||
|
|
||||||
|
if (isset($_POST['submit']) && $_POST['submit'] == '1') {
|
||||||
|
$email = $_REQUEST['email'];
|
||||||
|
|
||||||
|
if (empty($email) || !filter_var($email, FILTER_VALIDATE_EMAIL)) {
|
||||||
|
$errorWithBackButton('Please enter valid Email.');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
$account = new OTS_Account();
|
||||||
|
$account->findByEMail($email);
|
||||||
|
if ($account->isLoaded()) {
|
||||||
|
if ($account->getCustomField('email_verified') == '1') {
|
||||||
|
$errorWithBackButton('This account is already verified! You can <a href=' . getLink('account/manage') . '>log in</a> on the website.');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
$accountEmailVerify = AccountEmailVerify::where('account_id', $account->getId())->orderBy('sent_at', 'DESC')->first();
|
||||||
|
if ($accountEmailVerify && time() - $accountEmailVerify->sent_at < 60) {
|
||||||
|
$errorWithBackButton('Only one Email per minute is allowed. Please try again later.');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
$tmp_account = $email;
|
||||||
|
if (!config('account_login_by_email')) {
|
||||||
|
$tmp_account = (USE_ACCOUNT_NAME ? $account->getName() : $account->getId());
|
||||||
|
}
|
||||||
|
|
||||||
|
$hash = md5(generateRandomString(16, true, true) . $email);
|
||||||
|
|
||||||
|
AccountEmailVerify::create([
|
||||||
|
'account_id' => $account->getId(),
|
||||||
|
'hash' => $hash,
|
||||||
|
'sent_at' => time(),
|
||||||
|
]);
|
||||||
|
|
||||||
|
$verify_url = getLink('account/confirm-email/' . $hash);
|
||||||
|
$body_html = $twig->render('mail.account.resend-email-verify.html.twig', array(
|
||||||
|
'account' => $tmp_account,
|
||||||
|
'verify_url' => generateLink($verify_url, $verify_url, true)
|
||||||
|
));
|
||||||
|
|
||||||
|
if (_mail($account->getEMail(), configLua('serverName') . ' - Verify Account', $body_html)) {
|
||||||
|
$message = "If account with this email exists - you will become an email with verification link.";
|
||||||
|
$showForm = false;
|
||||||
|
} else {
|
||||||
|
$message = "<p class='error'>An error occurred while sending email (<b>{$email}</b> )! Try again later. For Admin: More info can be found in system/logs/mailer-error.log</p>";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$message = "<br />If account with this email exists - you will become an email with verification link.";
|
||||||
|
$showForm = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
$twig->display('success.html.twig', array(
|
||||||
|
'title' => 'Verify Email Sent',
|
||||||
|
'description' => $message,
|
||||||
|
));
|
||||||
|
}
|
||||||
|
|
||||||
|
//show errors if not empty
|
||||||
|
if (!empty($errors)) {
|
||||||
|
$twig->display('error_box.html.twig', ['errors' => $errors]);
|
||||||
|
$twig->display('account.back_button.html.twig', [
|
||||||
|
'action' => getLink('account/resend-email-verify'),
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($showForm) {
|
||||||
|
$twig->display('account.resend-email-verify.html.twig');
|
||||||
|
}
|
||||||
@@ -21,6 +21,9 @@ if(!$logged) {
|
|||||||
$errors[] = 'You are not logged in. You can\'t create guild.';
|
$errors[] = 'You are not logged in. You can\'t create guild.';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$configLuaFreePremium = configLua('freePremium');
|
||||||
|
$freePremium = (isset($configLuaFreePremium) && getBoolean($configLuaFreePremium)) || ($logged && $account_logged->getPremDays() == OTS_Account::GRATIS_PREMIUM_DAYS);
|
||||||
|
|
||||||
$array_of_player_nig = array();
|
$array_of_player_nig = array();
|
||||||
if(empty($errors))
|
if(empty($errors))
|
||||||
{
|
{
|
||||||
@@ -31,7 +34,7 @@ if(empty($errors))
|
|||||||
if(!$player_rank->isLoaded())
|
if(!$player_rank->isLoaded())
|
||||||
{
|
{
|
||||||
if($player->getLevel() >= setting('core.guild_need_level')) {
|
if($player->getLevel() >= setting('core.guild_need_level')) {
|
||||||
if(!setting('core.guild_need_premium') || $account_logged->isPremium()) {
|
if(!setting('core.guild_need_premium') || $account_logged->isPremium() || $freePremium) {
|
||||||
$array_of_player_nig[] = $player->getName();
|
$array_of_player_nig[] = $player->getName();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -95,7 +98,7 @@ if($todo == 'save')
|
|||||||
if($player->getLevel() < setting('core.guild_need_level')) {
|
if($player->getLevel() < setting('core.guild_need_level')) {
|
||||||
$errors[] = 'Character <b>'.$name.'</b> has too low level. To create guild you need character with level <b>' . setting('core.guild_need_level') . '</b>.';
|
$errors[] = 'Character <b>'.$name.'</b> has too low level. To create guild you need character with level <b>' . setting('core.guild_need_level') . '</b>.';
|
||||||
}
|
}
|
||||||
if(setting('core.guild_need_premium') && !$account_logged->isPremium()) {
|
if(setting('core.guild_need_premium') && !$account_logged->isPremium() && !$freePremium) {
|
||||||
$errors[] = 'Character <b>'.$name.'</b> is on FREE account. To create guild you need PREMIUM account.';
|
$errors[] = 'Character <b>'.$name.'</b> is on FREE account. To create guild you need PREMIUM account.';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -88,25 +88,38 @@ if($logged && $account_logged && $account_logged->isLoaded()) {
|
|||||||
/**
|
/**
|
||||||
* Routes loading
|
* Routes loading
|
||||||
*/
|
*/
|
||||||
|
$routesFinal = [];
|
||||||
$dispatcher = FastRoute\cachedDispatcher(function (FastRoute\RouteCollector $r) {
|
$dispatcher = FastRoute\cachedDispatcher(function (FastRoute\RouteCollector $r) {
|
||||||
$routesFinal = [];
|
global $cache, $routesFinal;
|
||||||
|
|
||||||
foreach(getDatabasePages() as $page) {
|
foreach(getDatabasePages() as $page) {
|
||||||
$routesFinal[] = ['*', $page, '__database__/' . $page, 100];
|
$routesFinal[] = ['*', $page, '__database__/' . $page, 100];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$routes = require SYSTEM . 'routes.php';
|
||||||
Plugins::clearWarnings();
|
Plugins::clearWarnings();
|
||||||
foreach (Plugins::getRoutes() as $route) {
|
|
||||||
$routesFinal[] = [$route[0], $route[1], $route[2], $route[3] ?? 1000];
|
foreach (Plugins::getRoutes() as $pluginRoute) {
|
||||||
|
|
||||||
|
$routesFinal[] = [$pluginRoute[0], $pluginRoute[1], $pluginRoute[2], $pluginRoute[3] ?? 1000];
|
||||||
|
|
||||||
|
// Possibility to override routes with plugins pages, like characters.php
|
||||||
|
foreach ($routes as &$route) {
|
||||||
|
if (str_contains($pluginRoute[2], 'pages/' . $route[2])) {
|
||||||
|
$route[2] = $pluginRoute[2];
|
||||||
|
}
|
||||||
|
}
|
||||||
/*
|
/*
|
||||||
echo '<pre>';
|
echo '<pre>';
|
||||||
var_dump($route[1], $route[3], $route[2]);
|
var_dump($pluginRoute[1], $pluginRoute[3], $pluginRoute[2]);
|
||||||
echo '/<pre>';
|
echo '/<pre>';
|
||||||
*/
|
*/
|
||||||
}
|
}
|
||||||
|
|
||||||
$routes = require SYSTEM . 'routes.php';
|
|
||||||
foreach ($routes as $route) {
|
foreach ($routes as $route) {
|
||||||
if (!str_contains($route[2], '__redirect__') && !str_contains($route[2], '__database__')) {
|
if (!str_contains($route[2], '__redirect__') && !str_contains($route[2], '__database__')
|
||||||
|
&& !str_contains($route[2], 'plugins/')
|
||||||
|
) {
|
||||||
if (!is_file(BASE . 'system/pages/' . $route[2])) {
|
if (!is_file(BASE . 'system/pages/' . $route[2])) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@@ -154,7 +167,7 @@ $dispatcher = FastRoute\cachedDispatcher(function (FastRoute\RouteCollector $r)
|
|||||||
echo '</pre>';
|
echo '</pre>';
|
||||||
die;
|
die;
|
||||||
*/
|
*/
|
||||||
foreach ($routesFinal as $route) {
|
foreach ($routesFinal as &$route) {
|
||||||
if ($route[0] === '*') {
|
if ($route[0] === '*') {
|
||||||
$route[0] = ['GET', 'POST', 'PUT', 'DELETE', 'PATCH', 'HEAD'];
|
$route[0] = ['GET', 'POST', 'PUT', 'DELETE', 'PATCH', 'HEAD'];
|
||||||
}
|
}
|
||||||
@@ -187,6 +200,10 @@ $dispatcher = FastRoute\cachedDispatcher(function (FastRoute\RouteCollector $r)
|
|||||||
log_append('router.log', $warning);
|
log_append('router.log', $warning);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ($cache->enabled()) {
|
||||||
|
$cache->set('routes_final', serialize($routesFinal), 10 * 365 * 24 * 60 * 60); // 10 years / infinite
|
||||||
|
}
|
||||||
},
|
},
|
||||||
[
|
[
|
||||||
'cacheFile' => CACHE . 'route.cache',
|
'cacheFile' => CACHE . 'route.cache',
|
||||||
@@ -201,7 +218,7 @@ $found = true;
|
|||||||
|
|
||||||
// old support for pages like /?subtopic=accountmanagement
|
// old support for pages like /?subtopic=accountmanagement
|
||||||
$page = $_REQUEST['p'] ?? ($_REQUEST['subtopic'] ?? '');
|
$page = $_REQUEST['p'] ?? ($_REQUEST['subtopic'] ?? '');
|
||||||
if(!empty($page) && preg_match('/^[A-z0-9\-]+$/', $page)) {
|
if(!empty($page) && preg_match('/^[A-z0-9\/\-]+$/', $page)) {
|
||||||
if (isset($_REQUEST['p'])) { // some plugins may require this
|
if (isset($_REQUEST['p'])) { // some plugins may require this
|
||||||
$_REQUEST['subtopic'] = $_REQUEST['p'];
|
$_REQUEST['subtopic'] = $_REQUEST['p'];
|
||||||
}
|
}
|
||||||
@@ -210,9 +227,26 @@ if(!empty($page) && preg_match('/^[A-z0-9\-]+$/', $page)) {
|
|||||||
require SYSTEM . 'compat/pages.php';
|
require SYSTEM . 'compat/pages.php';
|
||||||
}
|
}
|
||||||
|
|
||||||
$file = loadPageFromFileSystem($page, $found);
|
$foundRoute = false;
|
||||||
if(!$found) {
|
|
||||||
$file = false;
|
$tmp = null;
|
||||||
|
if ($cache->enabled() && $cache->fetch('routes_final', $tmp)) {
|
||||||
|
$routesFinal = unserialize($tmp);
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach ($routesFinal as $route) {
|
||||||
|
if ($page === $route[1]) {
|
||||||
|
$file = $route[2];
|
||||||
|
$foundRoute = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!$foundRoute) {
|
||||||
|
$file = loadPageFromFileSystem($page, $found);
|
||||||
|
if(!$found) {
|
||||||
|
$file = false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
|||||||
@@ -115,6 +115,11 @@ class Cache
|
|||||||
return unserialize($value);
|
return unserialize($value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// -1 for infinite cache
|
||||||
|
if ($ttl == -1) {
|
||||||
|
$ttl = 10 * 365 * 24 * 60 * 60; // 10 years should be enough
|
||||||
|
}
|
||||||
|
|
||||||
$value = $callback();
|
$value = $callback();
|
||||||
$cache->set($key, serialize($value), $ttl);
|
$cache->set($key, serialize($value), $ttl);
|
||||||
return $value;
|
return $value;
|
||||||
|
|||||||
33
system/src/Commands/Env.php
Normal file
33
system/src/Commands/Env.php
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace MyAAC\Commands;
|
||||||
|
|
||||||
|
use POT;
|
||||||
|
|
||||||
|
trait Env
|
||||||
|
{
|
||||||
|
protected function init(): void
|
||||||
|
{
|
||||||
|
global $config;
|
||||||
|
if (!isset($config['installed']) || !$config['installed']) {
|
||||||
|
throw new \RuntimeException('MyAAC has not been installed yet or there was error during installation. Please install again.');
|
||||||
|
}
|
||||||
|
|
||||||
|
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($config['server_path'][strlen($config['server_path']) - 1] !== '/')
|
||||||
|
$config['server_path'] .= '/';
|
||||||
|
|
||||||
|
$config['lua'] = load_config_lua($config['server_path'] . 'config.lua');
|
||||||
|
|
||||||
|
// POT
|
||||||
|
require_once SYSTEM . 'libs/pot/OTS.php';
|
||||||
|
$ots = POT::getInstance();
|
||||||
|
$eloquentConnection = null;
|
||||||
|
|
||||||
|
require_once SYSTEM . 'database.php';
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -9,6 +9,8 @@ use Symfony\Component\Console\Style\SymfonyStyle;
|
|||||||
|
|
||||||
class MigrateCommand extends Command
|
class MigrateCommand extends Command
|
||||||
{
|
{
|
||||||
|
use Env;
|
||||||
|
|
||||||
protected function configure(): void
|
protected function configure(): void
|
||||||
{
|
{
|
||||||
$this->setName('migrate')
|
$this->setName('migrate')
|
||||||
@@ -17,9 +19,19 @@ class MigrateCommand extends Command
|
|||||||
|
|
||||||
protected function execute(InputInterface $input, OutputInterface $output): int
|
protected function execute(InputInterface $input, OutputInterface $output): int
|
||||||
{
|
{
|
||||||
require SYSTEM . 'init.php';
|
$this->init();
|
||||||
|
|
||||||
$io = new SymfonyStyle($input, $output);
|
$io = new SymfonyStyle($input, $output);
|
||||||
|
|
||||||
|
$tmp = '';
|
||||||
|
if(fetchDatabaseConfig('database_version', $tmp)) { // we got version
|
||||||
|
$tmp = (int)$tmp;
|
||||||
|
if ($tmp >= DATABASE_VERSION) {
|
||||||
|
$io->success('Already on latest version.');
|
||||||
|
return Command::SUCCESS;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
require SYSTEM . 'migrate.php';
|
require SYSTEM . 'migrate.php';
|
||||||
|
|
||||||
$io->success('Migrated to latest version (' . DATABASE_VERSION . ')');
|
$io->success('Migrated to latest version (' . DATABASE_VERSION . ')');
|
||||||
|
|||||||
@@ -10,6 +10,8 @@ use Symfony\Component\Console\Style\SymfonyStyle;
|
|||||||
|
|
||||||
class MigrateRunCommand extends Command
|
class MigrateRunCommand extends Command
|
||||||
{
|
{
|
||||||
|
use Env;
|
||||||
|
|
||||||
protected function configure(): void
|
protected function configure(): void
|
||||||
{
|
{
|
||||||
$this->setName('migrate:run')
|
$this->setName('migrate:run')
|
||||||
@@ -23,12 +25,12 @@ class MigrateRunCommand extends Command
|
|||||||
|
|
||||||
protected function execute(InputInterface $input, OutputInterface $output): int
|
protected function execute(InputInterface $input, OutputInterface $output): int
|
||||||
{
|
{
|
||||||
require SYSTEM . 'init.php';
|
|
||||||
|
|
||||||
$io = new SymfonyStyle($input, $output);
|
$io = new SymfonyStyle($input, $output);
|
||||||
|
|
||||||
$ids = $input->getArgument('id');
|
$ids = $input->getArgument('id');
|
||||||
|
|
||||||
|
$this->init();
|
||||||
|
|
||||||
// pre-check
|
// pre-check
|
||||||
// in case one of the migrations doesn't exist - we won't execute any of them
|
// in case one of the migrations doesn't exist - we won't execute any of them
|
||||||
foreach ($ids as $id) {
|
foreach ($ids as $id) {
|
||||||
|
|||||||
@@ -11,6 +11,8 @@ use Symfony\Component\Console\Style\SymfonyStyle;
|
|||||||
|
|
||||||
class MigrateToCommand extends Command
|
class MigrateToCommand extends Command
|
||||||
{
|
{
|
||||||
|
use Env;
|
||||||
|
|
||||||
protected function configure(): void
|
protected function configure(): void
|
||||||
{
|
{
|
||||||
$this->setName('migrate:to')
|
$this->setName('migrate:to')
|
||||||
@@ -32,7 +34,7 @@ class MigrateToCommand extends Command
|
|||||||
return Command::FAILURE;
|
return Command::FAILURE;
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->initEnv();
|
$this->init();
|
||||||
|
|
||||||
$currentVersion = Config::where('name', 'database_version')->first()->value;
|
$currentVersion = Config::where('name', 'database_version')->first()->value;
|
||||||
if ($currentVersion > $versionDest) {
|
if ($currentVersion > $versionDest) {
|
||||||
@@ -80,29 +82,4 @@ class MigrateToCommand extends Command
|
|||||||
|
|
||||||
updateDatabaseConfig('database_version', ($_up ? $id : $id - 1));
|
updateDatabaseConfig('database_version', ($_up ? $id : $id - 1));
|
||||||
}
|
}
|
||||||
|
|
||||||
private function initEnv()
|
|
||||||
{
|
|
||||||
global $config;
|
|
||||||
if (!isset($config['installed']) || !$config['installed']) {
|
|
||||||
throw new \RuntimeException('MyAAC has not been installed yet or there was error during installation. Please install again.');
|
|
||||||
}
|
|
||||||
|
|
||||||
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($config['server_path'][strlen($config['server_path']) - 1] !== '/')
|
|
||||||
$config['server_path'] .= '/';
|
|
||||||
|
|
||||||
$config['lua'] = load_config_lua($config['server_path'] . 'config.lua');
|
|
||||||
|
|
||||||
// POT
|
|
||||||
require_once SYSTEM . 'libs/pot/OTS.php';
|
|
||||||
$ots = POT::getInstance();
|
|
||||||
$eloquentConnection = null;
|
|
||||||
|
|
||||||
require_once SYSTEM . 'database.php';
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -33,10 +33,11 @@ class Account extends Model {
|
|||||||
|
|
||||||
public function getPremiumDaysAttribute()
|
public function getPremiumDaysAttribute()
|
||||||
{
|
{
|
||||||
if(isset($this->premium_ends_at) || isset($this->premend)) {
|
if(isset($this->premium_ends_at) || isset($this->premend) ||
|
||||||
$col = isset($this->premium_ends_at) ? 'premium_ends_at' : 'premend';
|
(isCanary() && isset($this->data['lastday']))) {
|
||||||
$ret = ceil(($this->{$col}- time()) / (24 * 60 * 60));
|
$col = (isset($this->premium_ends_at) ? 'premium_ends_at' : (isset($this->data['lastday']) ? 'lastday' : 'premend'));
|
||||||
return $ret > 0 ? $ret : 0;
|
$ret = ceil(($this->{$col}- time()) / (24 * 60 * 60));
|
||||||
|
return max($ret, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
if($this->premdays == 0) {
|
if($this->premdays == 0) {
|
||||||
|
|||||||
15
system/src/Models/AccountEmailVerify.php
Normal file
15
system/src/Models/AccountEmailVerify.php
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace MyAAC\Models;
|
||||||
|
use Illuminate\Database\Eloquent\Model;
|
||||||
|
|
||||||
|
class AccountEmailVerify extends Model
|
||||||
|
{
|
||||||
|
|
||||||
|
protected $table = TABLE_PREFIX . 'account_emails_verify';
|
||||||
|
|
||||||
|
public $timestamps = false;
|
||||||
|
|
||||||
|
protected $fillable = ['account_id', 'hash', 'sent_at'];
|
||||||
|
|
||||||
|
}
|
||||||
@@ -18,7 +18,16 @@ class Changelog extends Model {
|
|||||||
|
|
||||||
public $timestamps = false;
|
public $timestamps = false;
|
||||||
|
|
||||||
|
protected $fillable = [
|
||||||
|
'body', 'type', 'where',
|
||||||
|
'date', 'player_id', 'hide',
|
||||||
|
];
|
||||||
|
|
||||||
public function scopeIsPublic($query) {
|
public function scopeIsPublic($query) {
|
||||||
$query->where('hide', '!=', 1);
|
$query->where('hide', '!=', 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function player() {
|
||||||
|
return $this->belongsTo(Player::class);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
16
system/src/Models/ForumBoard.php
Normal file
16
system/src/Models/ForumBoard.php
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace MyAAC\Models;
|
||||||
|
use Illuminate\Database\Eloquent\Model;
|
||||||
|
|
||||||
|
class ForumBoard extends Model {
|
||||||
|
|
||||||
|
protected $table = TABLE_PREFIX . 'forum_boards';
|
||||||
|
|
||||||
|
public $timestamps = false;
|
||||||
|
|
||||||
|
protected $fillable = [
|
||||||
|
'name', 'description', 'ordering',
|
||||||
|
'guild', 'access', 'closed', 'hide',
|
||||||
|
];
|
||||||
|
}
|
||||||
@@ -10,4 +10,9 @@ class Gallery extends Model {
|
|||||||
|
|
||||||
public $timestamps = false;
|
public $timestamps = false;
|
||||||
|
|
||||||
|
protected $fillable = [
|
||||||
|
'comment', 'image', 'thumb',
|
||||||
|
'author', 'ordering', 'hide',
|
||||||
|
];
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
15
system/src/Models/NewsCategory.php
Normal file
15
system/src/Models/NewsCategory.php
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace MyAAC\Models;
|
||||||
|
use Illuminate\Database\Eloquent\Model;
|
||||||
|
|
||||||
|
class NewsCategory extends Model {
|
||||||
|
|
||||||
|
protected $table = TABLE_PREFIX . 'news_categories';
|
||||||
|
|
||||||
|
public $timestamps = false;
|
||||||
|
|
||||||
|
protected $fillable = [
|
||||||
|
'name', 'description', 'icon_id', 'hide'
|
||||||
|
];
|
||||||
|
}
|
||||||
@@ -28,6 +28,8 @@ define('HOOK_CHARACTERS_AFTER_CHARACTERS', ++$i);
|
|||||||
define('HOOK_LOGIN', ++$i);
|
define('HOOK_LOGIN', ++$i);
|
||||||
define('HOOK_LOGIN_ATTEMPT', ++$i);
|
define('HOOK_LOGIN_ATTEMPT', ++$i);
|
||||||
define('HOOK_LOGOUT', ++$i);
|
define('HOOK_LOGOUT', ++$i);
|
||||||
|
define('HOOK_ACCOUNT_CHANGE_PASSWORD_AFTER_OLD_PASSWORD', ++$i);
|
||||||
|
define('HOOK_ACCOUNT_CHANGE_PASSWORD_AFTER_NEW_PASSWORD', ++$i);
|
||||||
define('HOOK_ACCOUNT_CHANGE_PASSWORD_POST', ++$i);
|
define('HOOK_ACCOUNT_CHANGE_PASSWORD_POST', ++$i);
|
||||||
define('HOOK_ACCOUNT_CREATE_BEFORE_FORM', ++$i);
|
define('HOOK_ACCOUNT_CREATE_BEFORE_FORM', ++$i);
|
||||||
define('HOOK_ACCOUNT_CREATE_BEFORE_BOXES', ++$i);
|
define('HOOK_ACCOUNT_CREATE_BEFORE_BOXES', ++$i);
|
||||||
|
|||||||
@@ -9,23 +9,29 @@ Please enter your current password and a new password. For your security, please
|
|||||||
<span>Current Password:</span>
|
<span>Current Password:</span>
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<input form="form" type="password" name="oldpassword" size="30" maxlength="29">
|
<input form="form" type="password" id="old_password" name="old_password" size="30" maxlength="29">
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
|
||||||
|
{{ hook('HOOK_ACCOUNT_CHANGE_PASSWORD_AFTER_OLD_PASSWORD') }}
|
||||||
|
|
||||||
<tr>
|
<tr>
|
||||||
<td class="LabelV">
|
<td class="LabelV">
|
||||||
<span>New Password:</span>
|
<span>New Password:</span>
|
||||||
</td>
|
</td>
|
||||||
<td style="width:90%;">
|
<td style="width:90%;">
|
||||||
<input form="form" type="password" name="newpassword" size="30" maxlength="29">
|
<input form="form" type="password" id="new_password" name="new_password" size="30" maxlength="29">
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
|
||||||
|
{{ hook('HOOK_ACCOUNT_CHANGE_PASSWORD_AFTER_NEW_PASSWORD') }}
|
||||||
|
|
||||||
<tr>
|
<tr>
|
||||||
<td class="LabelV">
|
<td class="LabelV">
|
||||||
<span>New Password Again:</span>
|
<span>New Password Again:</span>
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<input form="form" type="password" name="newpassword_confirm" size="30" maxlength="29">
|
<input form="form" type="password" id="new_password_confirm" name="new_password_confirm" size="30" maxlength="29">
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
|
|||||||
45
system/templates/account.resend-email-verify.html.twig
Normal file
45
system/templates/account.resend-email-verify.html.twig
Normal file
@@ -0,0 +1,45 @@
|
|||||||
|
Please enter your account Email address.<br/><br/>
|
||||||
|
{% set title = 'Resend Email' %}
|
||||||
|
{% set background = config('darkborder') %}
|
||||||
|
{% set content %}
|
||||||
|
<table style="width:100%;">
|
||||||
|
<tr>
|
||||||
|
<td class="LabelV" >
|
||||||
|
<span><label for="email">Email Address:</label></span>
|
||||||
|
</td>
|
||||||
|
<td style="width:90%;">
|
||||||
|
<input type="email" form="form" id="email" name="email" size="30" maxlength="50" autofocus/>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
{% endset %}
|
||||||
|
{% include 'tables.headline.html.twig' %}
|
||||||
|
<br/>
|
||||||
|
<table style="width:100%;">
|
||||||
|
<tr align="center">
|
||||||
|
<td>
|
||||||
|
<table border="0" cellspacing="0" cellpadding="0">
|
||||||
|
<tr>
|
||||||
|
<td style="border:0;">
|
||||||
|
<form id="form" action="{{ getLink('account/resend-email-verify') }}" method="post">
|
||||||
|
{{ csrf() }}
|
||||||
|
<input type="hidden" name="submit" value="1"/>
|
||||||
|
{{ include('buttons.submit.html.twig') }}
|
||||||
|
</form>
|
||||||
|
</td>
|
||||||
|
<tr>
|
||||||
|
</table>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<table border="0" cellspacing="0" cellpadding="0">
|
||||||
|
<tr>
|
||||||
|
<td style="border:0;">
|
||||||
|
<form action="{{ getLink('news') }}" method="post">
|
||||||
|
{{ include('buttons.back.html.twig') }}
|
||||||
|
</form>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
@@ -9,7 +9,7 @@
|
|||||||
<table border="0" cellpadding="0" cellspacing="0" width="100%"><tr>
|
<table border="0" cellpadding="0" cellspacing="0" width="100%"><tr>
|
||||||
<td><img src="{{ template_path }}/images/general/blank.gif" width="10" height="1" border="0"></td>
|
<td><img src="{{ template_path }}/images/general/blank.gif" width="10" height="1" border="0"></td>
|
||||||
<td>
|
<td>
|
||||||
{{ hook(constant('HOOK_CHARACTERS_BEFORE_INFORMATIONS')) }}
|
{{ hook('HOOK_CHARACTERS_BEFORE_INFORMATIONS') }}
|
||||||
{% if canEdit %}
|
{% if canEdit %}
|
||||||
<a href="{{ constant('ADMIN_URL') }}?p=players&id={{ player.getId() }}" title="Edit in Admin Panel" target="_blank">
|
<a href="{{ constant('ADMIN_URL') }}?p=players&id={{ player.getId() }}" title="Edit in Admin Panel" target="_blank">
|
||||||
<img src="images/edit.png"/>Edit
|
<img src="images/edit.png"/>Edit
|
||||||
@@ -153,11 +153,11 @@
|
|||||||
<td>{% if account.isPremium() %}Premium Account{% else %}Free Account{% endif %}</td>
|
<td>{% if account.isPremium() %}Premium Account{% else %}Free Account{% endif %}</td>
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
{{ hook(constant('HOOK_CHARACTERS_AFTER_INFORMATIONS')) }}
|
{{ hook('HOOK_CHARACTERS_AFTER_INFORMATIONS') }}
|
||||||
<br/>
|
<br/>
|
||||||
<table border="0" width="100%">
|
<table border="0" width="100%">
|
||||||
<tr>
|
<tr>
|
||||||
{{ hook(constant('HOOK_CHARACTERS_BEFORE_SKILLS')) }}
|
{{ hook('HOOK_CHARACTERS_BEFORE_SKILLS') }}
|
||||||
|
|
||||||
{% if config.characters.skills %}
|
{% if config.characters.skills %}
|
||||||
<!-- SKILLS -->
|
<!-- SKILLS -->
|
||||||
@@ -179,7 +179,7 @@
|
|||||||
<!-- SKILLS_END -->
|
<!-- SKILLS_END -->
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
{{ hook(constant('HOOK_CHARACTERS_AFTER_SKILLS')) }}
|
{{ hook('HOOK_CHARACTERS_AFTER_SKILLS') }}
|
||||||
|
|
||||||
{% if quests_enabled %}
|
{% if quests_enabled %}
|
||||||
<!-- QUESTS -->
|
<!-- QUESTS -->
|
||||||
@@ -201,7 +201,7 @@
|
|||||||
<!-- QUESTS_END -->
|
<!-- QUESTS_END -->
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
{{ hook(constant('HOOK_CHARACTERS_AFTER_QUESTS')) }}
|
{{ hook('HOOK_CHARACTERS_AFTER_QUESTS') }}
|
||||||
|
|
||||||
{% if config.characters.equipment %}
|
{% if config.characters.equipment %}
|
||||||
<!-- EQUIPMENT -->
|
<!-- EQUIPMENT -->
|
||||||
@@ -239,11 +239,11 @@
|
|||||||
<!-- EQUIPMENT_END -->
|
<!-- EQUIPMENT_END -->
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
{{ hook(constant('HOOK_CHARACTERS_AFTER_EQUIPMENT')) }}
|
{{ hook('HOOK_CHARACTERS_AFTER_EQUIPMENT') }}
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
{{ hook(constant('HOOK_CHARACTERS_BEFORE_DEATHS')) }}
|
{{ hook('HOOK_CHARACTERS_BEFORE_DEATHS') }}
|
||||||
|
|
||||||
{% if deaths|length > 0 %}
|
{% if deaths|length > 0 %}
|
||||||
<!-- DEATHS -->
|
<!-- DEATHS -->
|
||||||
@@ -283,7 +283,7 @@
|
|||||||
<!-- FRAGS_END -->
|
<!-- FRAGS_END -->
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
{{ hook(constant('HOOK_CHARACTERS_BEFORE_SIGNATURE')) }}
|
{{ hook('HOOK_CHARACTERS_BEFORE_SIGNATURE') }}
|
||||||
|
|
||||||
{% if setting('core.signature_enabled') %}
|
{% if setting('core.signature_enabled') %}
|
||||||
<!-- SIGNATURE -->
|
<!-- SIGNATURE -->
|
||||||
@@ -327,7 +327,7 @@
|
|||||||
</table>
|
</table>
|
||||||
<!-- SIGNATURE_END -->
|
<!-- SIGNATURE_END -->
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{{ hook(constant('HOOK_CHARACTERS_AFTER_SIGNATURE')) }}
|
{{ hook('HOOK_CHARACTERS_AFTER_SIGNATURE') }}
|
||||||
{% if not player.isHidden() %}
|
{% if not player.isHidden() %}
|
||||||
{% set rows = 0 %}
|
{% set rows = 0 %}
|
||||||
<!-- ACCOUNT_INFORMATION -->
|
<!-- ACCOUNT_INFORMATION -->
|
||||||
@@ -377,7 +377,7 @@
|
|||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
<!-- ACCOUNT_INFORMATION_END -->
|
<!-- ACCOUNT_INFORMATION_END -->
|
||||||
{{ hook(constant('HOOK_CHARACTERS_AFTER_ACCOUNT')) }}
|
{{ hook('HOOK_CHARACTERS_AFTER_ACCOUNT') }}
|
||||||
<!-- CHARACTERS_LIST -->
|
<!-- CHARACTERS_LIST -->
|
||||||
<br/><br/>
|
<br/><br/>
|
||||||
<table border="0" cellspacing="1" cellpadding="4" width="100%">
|
<table border="0" cellspacing="1" cellpadding="4" width="100%">
|
||||||
@@ -421,7 +421,7 @@
|
|||||||
</table>
|
</table>
|
||||||
<!-- CHARACTERS_LIST_END -->
|
<!-- CHARACTERS_LIST_END -->
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{{ hook(constant('HOOK_CHARACTERS_AFTER_CHARACTERS')) }}
|
{{ hook('HOOK_CHARACTERS_AFTER_CHARACTERS') }}
|
||||||
{% if canEdit %}
|
{% if canEdit %}
|
||||||
<a href="{{ constant('ADMIN_URL') }}?p=players&id={{ player.getId() }}" title="Edit in Admin Panel" target="_blank">
|
<a href="{{ constant('ADMIN_URL') }}?p=players&id={{ player.getId() }}" title="Edit in Admin Panel" target="_blank">
|
||||||
<img src="images/edit.png"/>Edit
|
<img src="images/edit.png"/>Edit
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
<div class="AttentionSign" style="background-image:url({{ template_path }}/images/content/attentionsign.gif);"></div>
|
<div class="AttentionSign" style="background-image:url({{ template_path }}/images/content/attentionsign.gif);"></div>
|
||||||
<b>The Following Errors Have Occurred:</b><br/>
|
<b>The Following Errors Have Occurred:</b><br/>
|
||||||
{% for error in errors %}
|
{% for error in errors %}
|
||||||
<li>{{ error|striptags('<b>')|raw }}</li>
|
<li>{{ error|striptags('<b><a>')|raw }}</li>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</div>
|
</div>
|
||||||
<div class="BoxFrameHorizontal" style="background-image:url({{ template_path }}/images/content/box-frame-horizontal.gif);"></div>
|
<div class="BoxFrameHorizontal" style="background-image:url({{ template_path }}/images/content/box-frame-horizontal.gif);"></div>
|
||||||
|
|||||||
@@ -0,0 +1,7 @@
|
|||||||
|
Hello {{ account }}!<br/>
|
||||||
|
<br/>
|
||||||
|
You requested to resend the verify Email on {{ config.lua.serverName }}!<br/>
|
||||||
|
<br/>
|
||||||
|
|
||||||
|
To verify your email address please click the link below:<br/>
|
||||||
|
{{ verify_url|raw }}
|
||||||
@@ -101,7 +101,7 @@
|
|||||||
|
|
||||||
<tr>
|
<tr>
|
||||||
<td class="LabelV150"><b>Location Datacenter:</b></td>
|
<td class="LabelV150"><b>Location Datacenter:</b></td>
|
||||||
<td>{{ setting('core.online_datacenter') }} <small>(Server date & time: - {{ "now"|date("d/m/Y H:i:s") }})</small></td>
|
<td>{{ setting('core.online_datacenter')|raw }} <small>(Server date & time: - {{ "now"|date("d/m/Y H:i:s") }})</small></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td class="LabelV150"><b>PvP Type:</b></td>
|
<td class="LabelV150"><b>PvP Type:</b></td>
|
||||||
|
|||||||
@@ -1,6 +1,9 @@
|
|||||||
<style>
|
<style>
|
||||||
.myaac-table tbody tr:nth-child(even) {background: {{ config.lightborder }}}
|
.myaac-table {border-spacing: 1px;}
|
||||||
.myaac-table tbody tr:nth-child(odd) {background: {{ config.darkborder }}}
|
.myaac-table > tbody > tr:nth-child(even) {background: {{ config.lightborder }}}
|
||||||
.myaac-table thead td {background: {{ config.vdarkborder }}; color: #ffffff !important;}
|
.myaac-table > tbody > tr:nth-child(odd) {background: {{ config.darkborder }}}
|
||||||
.myaac-table tfoot td {background: {{ config.vdarkborder }}; color: #ffffff !important;}
|
.myaac-table > tbody > tr > td {padding: 4px; }
|
||||||
|
.myaac-table > thead > tr > td {padding: 4px; background: {{ config.vdarkborder }}; color: #ffffff !important;}
|
||||||
|
.myaac-table > thead > tr > th {padding: 4px; background: {{ config.vdarkborder }}; color: #ffffff !important;}
|
||||||
|
.myaac-table > tfoot > tr > td {padding: 4px; background: {{ config.vdarkborder }}; color: #ffffff !important;}
|
||||||
</style>
|
</style>
|
||||||
|
|||||||
@@ -101,6 +101,10 @@ $twig->addFunction($function);
|
|||||||
$function = new TwigFunction('hook', function ($context, $hook, array $params = []) {
|
$function = new TwigFunction('hook', function ($context, $hook, array $params = []) {
|
||||||
global $hooks;
|
global $hooks;
|
||||||
|
|
||||||
|
if (config('hooks_debug')) {
|
||||||
|
note($hook);
|
||||||
|
}
|
||||||
|
|
||||||
if(is_string($hook)) {
|
if(is_string($hook)) {
|
||||||
if (defined($hook)) {
|
if (defined($hook)) {
|
||||||
$hook = constant($hook);
|
$hook = constant($hook);
|
||||||
|
|||||||
@@ -130,6 +130,7 @@
|
|||||||
<div style="float: right; margin-top: 20px;" >
|
<div style="float: right; margin-top: 20px;" >
|
||||||
{% apply spaceless %}
|
{% apply spaceless %}
|
||||||
<form class="MediumButtonForm" action="{{ getLink('account/create') }}" method="post" >
|
<form class="MediumButtonForm" action="{{ getLink('account/create') }}" method="post" >
|
||||||
|
{{ csrf() }}
|
||||||
<div class="MediumButtonBackground" style="background-image:url({{ template_path }}/images/global/buttons/mediumbutton.gif)" onMouseOver="MouseOverBigButton(this);" onMouseOut="MouseOutBigButton(this);">
|
<div class="MediumButtonBackground" style="background-image:url({{ template_path }}/images/global/buttons/mediumbutton.gif)" onMouseOver="MouseOverBigButton(this);" onMouseOut="MouseOutBigButton(this);">
|
||||||
<div class="MediumButtonOver" style="background-image:url({{ template_path }}/images/global/buttons/mediumbutton-over.gif)" onMouseOver="MouseOverBigButton(this);" onMouseOut="MouseOutBigButton(this);"></div>
|
<div class="MediumButtonOver" style="background-image:url({{ template_path }}/images/global/buttons/mediumbutton-over.gif)" onMouseOver="MouseOverBigButton(this);" onMouseOut="MouseOutBigButton(this);"></div>
|
||||||
<input class="MediumButtonText" type="image" name="Create Account" alt="Create Account" src="{{ template_path }}/images/global/buttons/mediumbutton_createaccount.png" />
|
<input class="MediumButtonText" type="image" name="Create Account" alt="Create Account" src="{{ template_path }}/images/global/buttons/mediumbutton_createaccount.png" />
|
||||||
|
|||||||
@@ -27,24 +27,18 @@ if(isset($config['boxes']))
|
|||||||
var loginStatus="<?php echo ($logged ? 'true' : 'false'); ?>";
|
var loginStatus="<?php echo ($logged ? 'true' : 'false'); ?>";
|
||||||
<?php
|
<?php
|
||||||
if(PAGE !== 'news') {
|
if(PAGE !== 'news') {
|
||||||
if(isset($_REQUEST['subtopic'])) {
|
$tmp = str_replace('/', '_', isset($_REQUEST['subtopic']) ? escapeHtml($_REQUEST['subtopic']) : PAGE);
|
||||||
$tmp = escapeHtml($_REQUEST['subtopic']);
|
$exp = explode('/', PAGE);
|
||||||
if($tmp === 'accountmanagement') {
|
if(PAGE !== 'account/create' && PAGE !== 'account/lost' && isset($exp[1])) {
|
||||||
$tmp = 'accountmanage';
|
if ($exp[0] === 'account' && $exp[1] === 'lost') {
|
||||||
|
$tmp = 'account_lost';
|
||||||
|
} elseif ($exp[0] === 'account') {
|
||||||
|
$tmp = 'account_manage';
|
||||||
|
} else if ($exp[0] === 'news' && $exp[1] === 'archive') {
|
||||||
|
$tmp = 'news_archive';
|
||||||
}
|
}
|
||||||
}
|
else if (in_array($exp[0], ['characters', 'highscores', 'guilds', 'forum'])) {
|
||||||
else {
|
$tmp = $exp[0];
|
||||||
$tmp = str_replace('/', '_', PAGE);
|
|
||||||
$exp = explode('/', PAGE);
|
|
||||||
if(PAGE !== 'account/create' && PAGE !== 'account/lost' && isset($exp[1])) {
|
|
||||||
if ($exp[0] === 'account') {
|
|
||||||
$tmp = 'account_manage';
|
|
||||||
} else if ($exp[0] === 'news' && $exp[1] === 'archive') {
|
|
||||||
$tmp = 'news_archive';
|
|
||||||
}
|
|
||||||
else if (in_array($exp[0], ['characters', 'highscores', 'guilds', 'forum'])) {
|
|
||||||
$tmp = $exp[0];
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -90,24 +84,24 @@ if(isset($config['boxes']))
|
|||||||
// mouse-over and click events of the loginbox
|
// mouse-over and click events of the loginbox
|
||||||
function MouseOverLoginBoxText(source)
|
function MouseOverLoginBoxText(source)
|
||||||
{
|
{
|
||||||
source.lastChild.style.visibility = "visible";
|
source.lastElementChild.style.visibility = "visible";
|
||||||
source.firstChild.style.visibility = "hidden";
|
source.firstElementChild.style.visibility = "hidden";
|
||||||
}
|
}
|
||||||
function MouseOutLoginBoxText(source)
|
function MouseOutLoginBoxText(source)
|
||||||
{
|
{
|
||||||
source.firstChild.style.visibility = "visible";
|
source.firstElementChild.style.visibility = "visible";
|
||||||
source.lastChild.style.visibility = "hidden";
|
source.lastElementChild.style.visibility = "hidden";
|
||||||
}
|
}
|
||||||
function LoginButtonAction()
|
function LoginButtonAction()
|
||||||
{
|
{
|
||||||
if(loginStatus == "false") {
|
if(loginStatus === "false") {
|
||||||
window.location = "<?php echo getLink('account/manage'); ?>";
|
window.location = "<?php echo getLink('account/manage'); ?>";
|
||||||
} else {
|
} else {
|
||||||
window.location = "<?php echo getLink('account/manage'); ?>";
|
window.location = "<?php echo getLink('account/manage'); ?>";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
function LoginstatusTextAction(source) {
|
function LoginstatusTextAction(source) {
|
||||||
if(loginStatus == "false") {
|
if(loginStatus === "false") {
|
||||||
window.location = "<?php echo getLink('account/create'); ?>";
|
window.location = "<?php echo getLink('account/create'); ?>";
|
||||||
} else {
|
} else {
|
||||||
window.location = "<?php echo getLink('account/logout'); ?>";
|
window.location = "<?php echo getLink('account/logout'); ?>";
|
||||||
@@ -226,11 +220,11 @@ if(isset($config['boxes']))
|
|||||||
// mouse-over effects of menubuttons and submenuitems
|
// mouse-over effects of menubuttons and submenuitems
|
||||||
function MouseOverMenuItem(source)
|
function MouseOverMenuItem(source)
|
||||||
{
|
{
|
||||||
source.firstChild.style.visibility = "visible";
|
source.firstElementChild.style.visibility = "visible";
|
||||||
}
|
}
|
||||||
function MouseOutMenuItem(source)
|
function MouseOutMenuItem(source)
|
||||||
{
|
{
|
||||||
source.firstChild.style.visibility = "hidden";
|
source.firstElementChild.style.visibility = "hidden";
|
||||||
}
|
}
|
||||||
function MouseOverSubmenuItem(source)
|
function MouseOverSubmenuItem(source)
|
||||||
{
|
{
|
||||||
@@ -336,7 +330,7 @@ if(isset($config['boxes']))
|
|||||||
<div id="LoginBottom" class="Loginstatus" style="background-image:url(<?php echo $template_path; ?>/images/general/box-bottom.gif)" ></div>
|
<div id="LoginBottom" class="Loginstatus" style="background-image:url(<?php echo $template_path; ?>/images/general/box-bottom.gif)" ></div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div-- id='Menu'>
|
<div id='Menu'>
|
||||||
<div id='MenuTop' style='background-image:url(<?php echo $template_path; ?>/images/general/box-top.gif);'></div>
|
<div id='MenuTop' style='background-image:url(<?php echo $template_path; ?>/images/general/box-top.gif);'></div>
|
||||||
|
|
||||||
<?php
|
<?php
|
||||||
@@ -401,6 +395,7 @@ foreach($config['menu_categories'] as $id => $cat) {
|
|||||||
<?php
|
<?php
|
||||||
}
|
}
|
||||||
?>
|
?>
|
||||||
|
</div>
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
InitializePage();
|
InitializePage();
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@@ -1,11 +1,11 @@
|
|||||||
function MouseOverBigButton(source) {
|
function MouseOverBigButton(source) {
|
||||||
if (source?.firstChild?.style) {
|
if (source?.firstElementChild?.style) {
|
||||||
source.firstChild.style.visibility = "visible";
|
source.firstElementChild.style.visibility = "visible";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
function MouseOutBigButton(source) {
|
function MouseOutBigButton(source) {
|
||||||
if (source?.firstChild?.style) {
|
if (source?.firstElementChild?.style) {
|
||||||
source.firstChild.style.visibility = "hidden";
|
source.firstElementChild.style.visibility = "hidden";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
function BigButtonAction(path) {
|
function BigButtonAction(path) {
|
||||||
|
|||||||
@@ -9,6 +9,8 @@
|
|||||||
* @link https://my-aac.org
|
* @link https://my-aac.org
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
const IGNORE_SET_LAST_VISIT = true;
|
||||||
|
|
||||||
// we need some functions
|
// we need some functions
|
||||||
require '../common.php';
|
require '../common.php';
|
||||||
require SYSTEM . 'functions.php';
|
require SYSTEM . 'functions.php';
|
||||||
|
|||||||
@@ -1,4 +1,7 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
|
const IGNORE_SET_LAST_VISIT = true;
|
||||||
|
|
||||||
require '../common.php';
|
require '../common.php';
|
||||||
require SYSTEM . 'init.php';
|
require SYSTEM . 'init.php';
|
||||||
require SYSTEM . 'functions.php';
|
require SYSTEM . 'functions.php';
|
||||||
|
|||||||
@@ -12,6 +12,8 @@
|
|||||||
use MyAAC\CreateCharacter;
|
use MyAAC\CreateCharacter;
|
||||||
use MyAAC\Models\Account;
|
use MyAAC\Models\Account;
|
||||||
|
|
||||||
|
const IGNORE_SET_LAST_VISIT = true;
|
||||||
|
|
||||||
// we need some functions
|
// we need some functions
|
||||||
require '../common.php';
|
require '../common.php';
|
||||||
require SYSTEM . 'functions.php';
|
require SYSTEM . 'functions.php';
|
||||||
|
|||||||
Reference in New Issue
Block a user