mirror of
https://github.com/slawkens/myaac.git
synced 2025-04-27 01:39:22 +02:00
Compare commits
54 Commits
Author | SHA1 | Date | |
---|---|---|---|
![]() |
0fbd4bf1be | ||
![]() |
1e45d5c393 | ||
![]() |
dbea69f314 | ||
![]() |
4e6aa0f262 | ||
![]() |
fa1f927082 | ||
![]() |
de0512f11a | ||
![]() |
93c09b3380 | ||
![]() |
d47195a787 | ||
![]() |
b618084d50 | ||
![]() |
d0d0af289d | ||
![]() |
1d0c173e7d | ||
![]() |
4e7c894cf2 | ||
![]() |
b71555d60d | ||
![]() |
c2bf94fb23 | ||
![]() |
8cf3409077 | ||
![]() |
e0043b1300 | ||
![]() |
86cb5821f6 | ||
![]() |
82a533d88c | ||
![]() |
ceaa0639e6 | ||
![]() |
6844f4392a | ||
![]() |
6d8f4718a1 | ||
![]() |
f40b986b59 | ||
![]() |
190697ce98 | ||
![]() |
64f6d3abca | ||
![]() |
e6f05a2731 | ||
![]() |
6a0356aa0f | ||
![]() |
50d649dbde | ||
![]() |
6c568fd36a | ||
![]() |
fa6b6aa153 | ||
![]() |
ae639d65b0 | ||
![]() |
35e2483de8 | ||
![]() |
bbf923e1a6 | ||
![]() |
211b6ea698 | ||
![]() |
6d156ae080 | ||
![]() |
a5b3940e59 | ||
![]() |
dbf73d0b61 | ||
![]() |
65696f63e3 | ||
![]() |
6341093578 | ||
![]() |
d25c71857f | ||
![]() |
7dcb5c4a1f | ||
![]() |
ff1723b756 | ||
![]() |
1a5771ad51 | ||
![]() |
6fac883659 | ||
![]() |
4a6896b446 | ||
![]() |
0852fba6f0 | ||
![]() |
9239a4f419 | ||
![]() |
00fe1adc15 | ||
![]() |
c2f55791c0 | ||
![]() |
464492d826 | ||
![]() |
887b5068ad | ||
![]() |
4c5cc8b573 | ||
![]() |
529bdcf016 | ||
![]() |
3e3f4bb5a5 | ||
![]() |
aa52df6e2e |
@ -6,7 +6,7 @@
|
|||||||
Options -MultiViews
|
Options -MultiViews
|
||||||
</IfModule>
|
</IfModule>
|
||||||
|
|
||||||
<FilesMatch "^(CHANGELOG\.md|README\.md|composer\.json|composer\.lock|package\.json|package-lock\.json|cypress\.env\.json)$">
|
<FilesMatch "^(.*\.md|.*\.json|.*\.dist|.*\.sql|CHANGELOG|README|composer\.lock)$">
|
||||||
Require all denied
|
Require all denied
|
||||||
</FilesMatch>
|
</FilesMatch>
|
||||||
|
|
||||||
|
@ -1,5 +1,66 @@
|
|||||||
# Changelog
|
# Changelog
|
||||||
|
|
||||||
|
## [1.4 - 22.04.2025]
|
||||||
|
|
||||||
|
### Added
|
||||||
|
* feat: admin-pages (can add admin pages through plugins) (https://github.com/slawkens/myaac/commit/ceaa0639e66d31e8177ff90791463470367aa45d)
|
||||||
|
* just place the page in admin-pages folder in the plugin
|
||||||
|
* Also, possibility to overwrite default myaac admin pages
|
||||||
|
* Add db->hasTableAndColumns(table, columns), credits to @opentibiabr Team (https://github.com/slawkens/myaac/commit/82a533d88c8a342076891d132b4b409ed9a1fe72)
|
||||||
|
* Add noSubmit option to buttons.base (https://github.com/slawkens/myaac/commit/64f6d3abcada3bf9fd7599f50d2fac0a1367f383)
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
* Fix: display 404 error instead of 500 when page has been removed from filesystem (https://github.com/slawkens/myaac/commit/c2bf94fb2370d2009a2eb907f818955132cf8611)
|
||||||
|
* Fix headline.php: change image format to .png cause of black background (https://github.com/slawkens/myaac/commit/b618084d50918539d9a70abd97e764137b966067)
|
||||||
|
* Clear cache on plugin enable/disable, fixes some issues with plugin pages being cached (https://github.com/slawkens/myaac/commit/1d0c173e7d000aecbd432800941fc3e38a0e50f2)
|
||||||
|
* Do not autoload sub-folders if autoload pages is disabled (https://github.com/slawkens/myaac/commit/d47195a7878095336f9c9edc6f96244257f67eec)
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
* SQL Syntax Standardization (by @JoaozinhoBrasil, #298)
|
||||||
|
* Pages in theme/template folder will now have precedence over normal pages (https://github.com/slawkens/myaac/commit/6d8f4718a1d349fba8f0ebc39cfd3a1a84d104b0)
|
||||||
|
* Small changes in account.login.html.twig (https://github.com/slawkens/myaac/commit/f40b986b59d4c8fa89ab4745731bf366f8619976)
|
||||||
|
* Plugin name is required, version is optional (https://github.com/slawkens/myaac/commit/e6f05a2731c61d931be49e121c068e49c0ad5e01)
|
||||||
|
|
||||||
|
## [1.3.3 - 04.04.2025]
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
* Fix uninstall plugin when plugin is disabled (https://github.com/slawkens/myaac/commit/6c568fd36a271270684fc412ccd556b230273a6d)
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
* Display more useful info when error parsing config.lua (https://github.com/slawkens/myaac/commit/fa6b6aa153ffc131e0d1631a4dcd9012a5850c2e)
|
||||||
|
|
||||||
|
### Other
|
||||||
|
* Small adjustments (https://github.com/slawkens/myaac/commit/35e2483de86e295bdf089cceffa25842eeb2e34c, https://github.com/slawkens/myaac/commit/ae639d65b0bfa491e747e907e2ebc77f83f47981)
|
||||||
|
|
||||||
|
## [1.3.2 - 01.04.2025]
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
* Fix debugBar/admin panel menu when using custom base_dir (https://github.com/slawkens/myaac/commit/65696f63e3aac02ff952ea81279e7cb2fa7570fb)
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
* Settings: Show/hide IP Ban Protection options depending on the value (enabled/disabled) (https://github.com/slawkens/myaac/commit/dbf73d0b61b45601ae95e51b23c051c2704169c5)
|
||||||
|
* Do not require init.php in cache:clear command (https://github.com/slawkens/myaac/commit/d25c71857f767834239bbffacd00fdc671adb157)
|
||||||
|
|
||||||
|
## [1.3.1 - 19.03.2025]
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
* Fixed migrate:run command (https://github.com/slawkens/myaac/commit/1a5771ad51e595fe13368a0721b059c4ecefb17d)
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
* Small adjustments (https://github.com/slawkens/myaac/commit/6fac883659f581baac1361826d046410156f1e58, https://github.com/slawkens/myaac/commit/4a6896b4469968b9904292734cf6c14ba5eeef14)
|
||||||
|
|
||||||
|
## [1.3 - 10.03.2025]
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
* Use latest outfit-images host from @gesior (https://github.com/slawkens/myaac/commit/529bdcf016dd0f9dffbc34d81f99a046a9ddb70d)
|
||||||
|
* Change monster link to $_GET ?name= (https://github.com/slawkens/myaac/commit/4c5cc8b573b2b3e7ec00a22b7ede30a68083a924)
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
* Fixed house links (https://github.com/slawkens/myaac/commit/887b5068ad11c4cdab614afd34525caba785ce13)
|
||||||
|
* Fixed long title on headline.php (https://github.com/slawkens/myaac/commit/3e3f4bb5a514158ec8777684ca6c7f1c2a37bed5)
|
||||||
|
* Fixed menu colors once again, plus add !important tag (https://github.com/slawkens/myaac/commit/aa52df6e2ec92cafc25b655ae907bf2e1746d9cc)
|
||||||
|
* Fix: add possibility to remove all menu items in admin panel (https://github.com/slawkens/myaac/commit/00fe1adc15ea7646596d755f6e6e1f7854ffc1d5, https://github.com/slawkens/myaac/commit/9239a4f4198c3ad260802ac3b47e9c41b80b754e)
|
||||||
|
|
||||||
## [1.2 - 09.02.2025]
|
## [1.2 - 09.02.2025]
|
||||||
|
|
||||||
### Added
|
### Added
|
29
README.md
29
README.md
@ -10,12 +10,19 @@ Official website: https://my-aac.org
|
|||||||
[](https://discord.gg/2J39Wus)
|
[](https://discord.gg/2J39Wus)
|
||||||
[](https://github.com/slawkens/myaac/issues?q=is%3Aissue+is%3Aclosed)
|
[](https://github.com/slawkens/myaac/issues?q=is%3Aissue+is%3Aclosed)
|
||||||
|
|
||||||
| Version | Status | Branch | Requirements |
|
| Version | Status | Branch | Requirements |
|
||||||
|:--------|:-----------------------|:-------|:---------------|
|
|:--------|:-----------------------|:--------|:---------------|
|
||||||
| **1.x** | **Active development** | master | **PHP >= 8.1** |
|
| 2.x | Experimental features | develop | PHP >= 8.1 |
|
||||||
| 0.9.x | Not developed anymore | 0.9 | PHP >= 7.2.5 |
|
| **1.x** | **Active development** | main | **PHP >= 8.1** |
|
||||||
| 0.8.x | Active support | 0.8 | PHP >= 7.2.5 |
|
| 0.9.x | Not developed anymore | 0.9 | PHP >= 7.2.5 |
|
||||||
| 0.7.x | End Of Life | 0.7 | PHP >= 5.3.3 |
|
| 0.8.x | Active support | 0.8 | PHP >= 7.2.5 |
|
||||||
|
| 0.7.x | End Of Life | 0.7 | PHP >= 5.3.3 |
|
||||||
|
|
||||||
|
The recommended version to install is 1.x, which can be found at releases page - [https://github.com/slawkens/myaac/releases](https://github.com/slawkens/myaac/releases).
|
||||||
|
|
||||||
|
### Documentation
|
||||||
|
* [docs.my-aac.org](https://docs.my-aac.org)
|
||||||
|
* [my-aac.org - FAQ](https://my-aac.org/faqs/)
|
||||||
|
|
||||||
### Requirements
|
### Requirements
|
||||||
|
|
||||||
@ -47,23 +54,23 @@ Official website: https://my-aac.org
|
|||||||
|
|
||||||
### Configuration
|
### Configuration
|
||||||
|
|
||||||
Check *config.php* to get more informations. (Notice: MyAAC 1.0+ doesn't use config.php anymore, it has been moved to Admin Panel - Settings page).
|
Check *config.php* to get more information. (Notice: MyAAC 1.0+ doesn't use config.php anymore, it has been moved to Admin Panel - Settings page).
|
||||||
|
|
||||||
Use *config.local.php* for your local configuration changes.
|
Use *config.local.php* for your local configuration changes.
|
||||||
|
|
||||||
### Branches
|
### Branches
|
||||||
|
|
||||||
This repository follows the Git Flow Workflow.
|
This repository follows the Git Flow Workflow.
|
||||||
Cheatsheet: [Git-Flow-Cheetsheet](https://danielkummer.github.io/git-flow-cheatsheet)
|
Cheatsheet: [Git-Flow-Cheatsheet](https://danielkummer.github.io/git-flow-cheatsheet)
|
||||||
|
|
||||||
That means, we use:
|
That means, we use:
|
||||||
* master branch, for current stable release
|
* main branch, for current stable release
|
||||||
* develop branch, for development version (next release)
|
* develop branch, for development version (next release)
|
||||||
* feature branches, for features etc.
|
* feature branches, for features etc.
|
||||||
|
|
||||||
### Known Problems
|
### Known Problems
|
||||||
|
|
||||||
- Some compatibility issues with some exotical distibutions.
|
- Some compatibility issues with some exotic distributions.
|
||||||
|
|
||||||
### Contributing
|
### Contributing
|
||||||
|
|
||||||
@ -77,7 +84,7 @@ Look: [Contributing](https://github.com/otsoft/myaac/wiki/Contributing) in our w
|
|||||||
|
|
||||||
### Other Notes
|
### Other Notes
|
||||||
|
|
||||||
If you have a great idea or want contribute to the project - visit our website at https://www.my-aac.org
|
If you have a great idea or want to contribute to the project - visit our website at https://www.my-aac.org
|
||||||
|
|
||||||
## Project supported by JetBrains
|
## Project supported by JetBrains
|
||||||
|
|
||||||
|
@ -7,7 +7,7 @@ $hooks->register('debugbar_admin_head_end', HOOK_ADMIN_HEAD_END, function ($para
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
$debugBarRenderer = $debugBar->getJavascriptRenderer();
|
$debugBarRenderer = $debugBar->getJavascriptRenderer(BASE_URL . 'vendor/maximebf/debugbar/src/DebugBar/Resources/');
|
||||||
echo $debugBarRenderer->renderHead();
|
echo $debugBarRenderer->renderHead();
|
||||||
});
|
});
|
||||||
$hooks->register('debugbar_admin_body_end', HOOK_ADMIN_BODY_END, function ($params) {
|
$hooks->register('debugbar_admin_body_end', HOOK_ADMIN_BODY_END, function ($params) {
|
||||||
@ -17,6 +17,6 @@ $hooks->register('debugbar_admin_body_end', HOOK_ADMIN_BODY_END, function ($para
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
$debugBarRenderer = $debugBar->getJavascriptRenderer();
|
$debugBarRenderer = $debugBar->getJavascriptRenderer(BASE_URL . 'vendor/maximebf/debugbar/src/DebugBar/Resources/');
|
||||||
echo $debugBarRenderer->render();
|
echo $debugBarRenderer->render();
|
||||||
});
|
});
|
||||||
|
@ -1,6 +1,8 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
// few things we'll need
|
// few things we'll need
|
||||||
|
use MyAAC\Plugins;
|
||||||
|
|
||||||
require '../common.php';
|
require '../common.php';
|
||||||
|
|
||||||
const ADMIN_PANEL = true;
|
const ADMIN_PANEL = true;
|
||||||
@ -42,15 +44,21 @@ if(!$logged || !admin()) {
|
|||||||
$page = 'login';
|
$page = 'login';
|
||||||
}
|
}
|
||||||
|
|
||||||
// include our page
|
$pluginsAdminPages = Plugins::getAdminPages();
|
||||||
$file = __DIR__ . '/pages/' . $page . '.php';
|
if(isset($pluginsAdminPages[$page]) && file_exists(BASE . $pluginsAdminPages[$page])) {
|
||||||
if(!@file_exists($file)) {
|
$file = BASE . $pluginsAdminPages[$page];
|
||||||
if (str_contains($page, 'plugins/')) {
|
}
|
||||||
$file = BASE . $page;
|
else {
|
||||||
}
|
// include our page
|
||||||
else {
|
$file = __DIR__ . '/pages/' . $page . '.php';
|
||||||
$page = '404';
|
if(!@file_exists($file)) {
|
||||||
$file = SYSTEM . 'pages/404.php';
|
if (str_contains($page, 'plugins/')) {
|
||||||
|
$file = BASE . $page;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$page = '404';
|
||||||
|
$file = SYSTEM . 'pages/404.php';
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -27,11 +27,11 @@ $pluginThemes = Plugins::getThemes();
|
|||||||
if (isset($_POST['template'])) {
|
if (isset($_POST['template'])) {
|
||||||
$template = $_POST['template'];
|
$template = $_POST['template'];
|
||||||
|
|
||||||
if (isset($_POST['menu'])) {
|
if (isset($_POST['save'])) {
|
||||||
$post_menu = $_POST['menu'];
|
$post_menu = $_POST['menu'] ?? [];
|
||||||
$post_menu_link = $_POST['menu_link'];
|
$post_menu_link = $_POST['menu_link'] ?? [];
|
||||||
$post_menu_blank = $_POST['menu_blank'];
|
$post_menu_blank = $_POST['menu_blank'] ?? [];
|
||||||
$post_menu_color = $_POST['menu_color'];
|
$post_menu_color = $_POST['menu_color'] ?? [];
|
||||||
if (count($post_menu) != count($post_menu_link)) {
|
if (count($post_menu) != count($post_menu_link)) {
|
||||||
echo 'Menu count is not equal menu links. Something went wrong when sending form.';
|
echo 'Menu count is not equal menu links. Something went wrong when sending form.';
|
||||||
return;
|
return;
|
||||||
@ -135,7 +135,7 @@ if (isset($_POST['template'])) {
|
|||||||
<form method="post" id="menus-form" action="?p=menus">
|
<form method="post" id="menus-form" action="?p=menus">
|
||||||
<?php csrf(); ?>
|
<?php csrf(); ?>
|
||||||
<input type="hidden" name="template" value="<?php echo $template ?>"/>
|
<input type="hidden" name="template" value="<?php echo $template ?>"/>
|
||||||
<button type="submit" class="btn btn-info">Save</button><br/><br/>
|
<button type="submit" name="save" class="btn btn-info">Save</button><br/><br/>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<?php foreach ($config['menu_categories'] as $id => $cat): ?>
|
<?php foreach ($config['menu_categories'] as $id => $cat): ?>
|
||||||
<div class="col-md-12 col-lg-6">
|
<div class="col-md-12 col-lg-6">
|
||||||
@ -168,7 +168,7 @@ if (isset($_POST['template'])) {
|
|||||||
</div>
|
</div>
|
||||||
<div class="row pb-2">
|
<div class="row pb-2">
|
||||||
<div class="col-md-12">
|
<div class="col-md-12">
|
||||||
<button type="submit" class="btn btn-info">Save</button>
|
<button type="submit" name="save" class="btn btn-info">Save</button>
|
||||||
<?php
|
<?php
|
||||||
echo '<button type="button" class="btn btn-danger float-right" value="Cancel" onclick="window.location = \'' . ADMIN_URL . '?p=menus\';"><i class="fas fa-cancel"></i> Cancel</button>';
|
echo '<button type="button" class="btn btn-danger float-right" value="Cancel" onclick="window.location = \'' . ADMIN_URL . '?p=menus\';"><i class="fas fa-cancel"></i> Cancel</button>';
|
||||||
?>
|
?>
|
||||||
|
@ -17,7 +17,7 @@ csrfProtect();
|
|||||||
|
|
||||||
$use_datatable = true;
|
$use_datatable = true;
|
||||||
|
|
||||||
if (!getBoolean(setting('core.admin_plugins_manage_enable'))) {
|
if (!setting('core.admin_plugins_manage_enable')) {
|
||||||
warning('Plugin installation and management is disabled in Settings.<br/>If you wish to enable, go to Settings and enable <strong>Enable Plugins Manage</strong>.');
|
warning('Plugin installation and management is disabled in Settings.<br/>If you wish to enable, go to Settings and enable <strong>Enable Plugins Manage</strong>.');
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
@ -26,7 +26,7 @@
|
|||||||
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.2';
|
const MYAAC_VERSION = '1.4.1-dev';
|
||||||
const DATABASE_VERSION = 43;
|
const DATABASE_VERSION = 43;
|
||||||
const TABLE_PREFIX = 'myaac_';
|
const TABLE_PREFIX = 'myaac_';
|
||||||
define('START_TIME', microtime(true));
|
define('START_TIME', microtime(true));
|
||||||
|
@ -31,11 +31,11 @@ require_once 'common.php';
|
|||||||
require_once SYSTEM . 'functions.php';
|
require_once SYSTEM . 'functions.php';
|
||||||
|
|
||||||
$uri = $_SERVER['REQUEST_URI'];
|
$uri = $_SERVER['REQUEST_URI'];
|
||||||
if(false !== strpos($uri, 'index.php')) {
|
if(str_contains($uri, 'index.php')) {
|
||||||
$uri = str_replace_first('/index.php', '', $uri);
|
$uri = str_replace_first('/index.php', '', $uri);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(0 === strpos($uri, '/')) {
|
if(str_starts_with($uri, '/')) {
|
||||||
$uri = str_replace_first('/', '', $uri);
|
$uri = str_replace_first('/', '', $uri);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -26,6 +26,9 @@ if(!isset($error) || !$error) {
|
|||||||
$config['database_type'] = $config['lua']['database_type'];
|
$config['database_type'] = $config['lua']['database_type'];
|
||||||
else if(isset($config['lua']['sql_type'])) // otserv
|
else if(isset($config['lua']['sql_type'])) // otserv
|
||||||
$config['database_type'] = $config['lua']['sql_type'];
|
$config['database_type'] = $config['lua']['sql_type'];
|
||||||
|
else {
|
||||||
|
$config['database_type'] = '';
|
||||||
|
}
|
||||||
|
|
||||||
$config['database_type'] = strtolower($config['database_type']);
|
$config['database_type'] = strtolower($config['database_type']);
|
||||||
if(empty($config['database_type'])) {
|
if(empty($config['database_type'])) {
|
||||||
|
@ -2,34 +2,34 @@ SET @myaac_database_version = 43;
|
|||||||
|
|
||||||
CREATE TABLE `myaac_account_actions`
|
CREATE TABLE `myaac_account_actions`
|
||||||
(
|
(
|
||||||
`account_id` INT(11) NOT NULL,
|
`account_id` int NOT NULL,
|
||||||
`ip` INT(10) UNSIGNED NOT NULL DEFAULT 0,
|
`ip` int unsigned NOT NULL DEFAULT 0,
|
||||||
`ipv6` BINARY(16) NOT NULL DEFAULT 0,
|
`ipv6` binary(16) NOT NULL DEFAULT 0,
|
||||||
`date` INT(11) NOT NULL DEFAULT 0,
|
`date` int NOT NULL DEFAULT 0,
|
||||||
`action` VARCHAR(255) NOT NULL DEFAULT '',
|
`action` varchar(255) NOT NULL DEFAULT '',
|
||||||
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 `myaac_admin_menu`
|
||||||
(
|
(
|
||||||
`id` INT(11) NOT NULL AUTO_INCREMENT,
|
`id` int NOT NULL AUTO_INCREMENT,
|
||||||
`name` VARCHAR(255) NOT NULL DEFAULT '',
|
`name` varchar(255) NOT NULL DEFAULT '',
|
||||||
`page` VARCHAR(255) NOT NULL DEFAULT '',
|
`page` varchar(255) NOT NULL DEFAULT '',
|
||||||
`ordering` INT(11) NOT NULL DEFAULT 0,
|
`ordering` int NOT NULL DEFAULT 0,
|
||||||
`flags` INT(11) NOT NULL DEFAULT 0,
|
`flags` int NOT NULL DEFAULT 0,
|
||||||
`enabled` INT(1) NOT NULL DEFAULT 1,
|
`enabled` int NOT NULL DEFAULT 1,
|
||||||
PRIMARY KEY (`id`)
|
PRIMARY KEY (`id`)
|
||||||
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8mb4;
|
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8mb4;
|
||||||
|
|
||||||
CREATE TABLE `myaac_changelog`
|
CREATE TABLE `myaac_changelog`
|
||||||
(
|
(
|
||||||
`id` INT(11) NOT NULL AUTO_INCREMENT,
|
`id` int NOT NULL AUTO_INCREMENT,
|
||||||
`body` VARCHAR(500) NOT NULL DEFAULT '',
|
`body` varchar(500) NOT NULL DEFAULT '',
|
||||||
`type` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '1 - added, 2 - removed, 3 - changed, 4 - fixed',
|
`type` tinyint NOT NULL DEFAULT 0 COMMENT '1 - added, 2 - removed, 3 - changed, 4 - fixed',
|
||||||
`where` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '1 - server, 2 - site',
|
`where` tinyint NOT NULL DEFAULT 0 COMMENT '1 - server, 2 - site',
|
||||||
`date` INT(11) NOT NULL DEFAULT 0,
|
`date` int NOT NULL DEFAULT 0,
|
||||||
`player_id` INT(11) NOT NULL DEFAULT 0,
|
`player_id` int NOT NULL DEFAULT 0,
|
||||||
`hide` TINYINT(1) 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;
|
||||||
|
|
||||||
@ -37,9 +37,9 @@ INSERT INTO `myaac_changelog` (`id`, `type`, `where`, `date`, `body`, `hide`) VA
|
|||||||
|
|
||||||
CREATE TABLE `myaac_config`
|
CREATE TABLE `myaac_config`
|
||||||
(
|
(
|
||||||
`id` INT(11) NOT NULL AUTO_INCREMENT,
|
`id` int NOT NULL AUTO_INCREMENT,
|
||||||
`name` VARCHAR(30) NOT NULL,
|
`name` varchar(30) NOT NULL,
|
||||||
`value` VARCHAR(1000) NOT NULL,
|
`value` varchar(1000) NOT NULL,
|
||||||
PRIMARY KEY (`id`),
|
PRIMARY KEY (`id`),
|
||||||
UNIQUE (`name`)
|
UNIQUE (`name`)
|
||||||
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8mb4;
|
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8mb4;
|
||||||
@ -48,24 +48,24 @@ INSERT INTO `myaac_config` (`name`, `value`) VALUES ('database_version', @myaac_
|
|||||||
|
|
||||||
CREATE TABLE `myaac_faq`
|
CREATE TABLE `myaac_faq`
|
||||||
(
|
(
|
||||||
`id` INT(11) NOT NULL AUTO_INCREMENT,
|
`id` int NOT NULL AUTO_INCREMENT,
|
||||||
`question` VARCHAR(255) NOT NULL DEFAULT '',
|
`question` varchar(255) NOT NULL DEFAULT '',
|
||||||
`answer` VARCHAR(1020) NOT NULL DEFAULT '',
|
`answer` varchar(1020) NOT NULL DEFAULT '',
|
||||||
`ordering` INT(11) NOT NULL DEFAULT 0,
|
`ordering` int NOT NULL DEFAULT 0,
|
||||||
`hide` TINYINT(1) 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;
|
||||||
|
|
||||||
CREATE TABLE `myaac_forum_boards`
|
CREATE TABLE `myaac_forum_boards`
|
||||||
(
|
(
|
||||||
`id` INT(11) NOT NULL AUTO_INCREMENT,
|
`id` int NOT NULL AUTO_INCREMENT,
|
||||||
`name` VARCHAR(32) NOT NULL,
|
`name` varchar(32) NOT NULL,
|
||||||
`description` VARCHAR(255) NOT NULL DEFAULT '',
|
`description` varchar(255) NOT NULL DEFAULT '',
|
||||||
`ordering` INT(11) NOT NULL DEFAULT 0,
|
`ordering` int NOT NULL DEFAULT 0,
|
||||||
`guild` INT(11) NOT NULL DEFAULT 0,
|
`guild` int NOT NULL DEFAULT 0,
|
||||||
`access` INT(11) NOT NULL DEFAULT 0,
|
`access` int NOT NULL DEFAULT 0,
|
||||||
`closed` TINYINT(1) NOT NULL DEFAULT 0,
|
`closed` tinyint NOT NULL DEFAULT 0,
|
||||||
`hide` TINYINT(1) 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`, `closed`) VALUES (NULL, 'News', 'News commenting', 0, 1);
|
||||||
@ -76,100 +76,100 @@ INSERT INTO `myaac_forum_boards` (`id`, `name`, `description`, `ordering`) VALUE
|
|||||||
|
|
||||||
CREATE TABLE `myaac_forum`
|
CREATE TABLE `myaac_forum`
|
||||||
(
|
(
|
||||||
`id` int(11) NOT NULL AUTO_INCREMENT,
|
`id` int NOT NULL AUTO_INCREMENT,
|
||||||
`first_post` int(11) NOT NULL default '0',
|
`first_post` int NOT NULL DEFAULT 0,
|
||||||
`last_post` int(11) NOT NULL default '0',
|
`last_post` int NOT NULL DEFAULT 0,
|
||||||
`section` int(3) NOT NULL default '0',
|
`section` int NOT NULL DEFAULT 0,
|
||||||
`replies` int(20) NOT NULL default '0',
|
`replies` int NOT NULL DEFAULT 0,
|
||||||
`views` int(20) NOT NULL default '0',
|
`views` int NOT NULL DEFAULT 0,
|
||||||
`author_aid` int(20) NOT NULL default '0',
|
`author_aid` int NOT NULL DEFAULT 0,
|
||||||
`author_guid` int(20) NOT NULL default '0',
|
`author_guid` int NOT NULL DEFAULT 0,
|
||||||
`post_text` text NOT NULL,
|
`post_text` text NOT NULL,
|
||||||
`post_topic` varchar(255) NOT NULL DEFAULT '',
|
`post_topic` varchar(255) NOT NULL DEFAULT '',
|
||||||
`post_smile` tinyint(1) NOT NULL default '0',
|
`post_smile` tinyint NOT NULL DEFAULT 0,
|
||||||
`post_html` tinyint(1) NOT NULL default '0',
|
`post_html` tinyint NOT NULL DEFAULT 0,
|
||||||
`post_date` int(20) NOT NULL default '0',
|
`post_date` int NOT NULL DEFAULT 0,
|
||||||
`last_edit_aid` int(20) NOT NULL default '0',
|
`last_edit_aid` int NOT NULL DEFAULT 0,
|
||||||
`edit_date` int(20) NOT NULL default '0',
|
`edit_date` int NOT NULL DEFAULT 0,
|
||||||
`post_ip` varchar(45) NOT NULL default '0.0.0.0',
|
`post_ip` varchar(45) NOT NULL DEFAULT '0.0.0.0',
|
||||||
`sticked` tinyint(1) NOT NULL DEFAULT '0',
|
`sticked` tinyint NOT NULL DEFAULT 0,
|
||||||
`closed` tinyint(1) NOT NULL DEFAULT '0',
|
`closed` tinyint NOT NULL DEFAULT 0,
|
||||||
PRIMARY KEY (`id`),
|
PRIMARY KEY (`id`),
|
||||||
KEY `section` (`section`)
|
KEY `section` (`section`)
|
||||||
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8mb4;
|
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8mb4;
|
||||||
|
|
||||||
CREATE TABLE `myaac_menu`
|
CREATE TABLE `myaac_menu`
|
||||||
(
|
(
|
||||||
`id` INT(11) NOT NULL AUTO_INCREMENT,
|
`id` int NOT NULL AUTO_INCREMENT,
|
||||||
`template` VARCHAR(255) NOT NULL,
|
`template` varchar(255) NOT NULL,
|
||||||
`name` VARCHAR(255) NOT NULL,
|
`name` varchar(255) NOT NULL,
|
||||||
`link` VARCHAR(255) NOT NULL,
|
`link` varchar(255) NOT NULL,
|
||||||
`blank` TINYINT(1) NOT NULL DEFAULT 0,
|
`blank` tinyint NOT NULL DEFAULT 0,
|
||||||
`color` VARCHAR(6) NOT NULL DEFAULT '',
|
`color` varchar(6) NOT NULL DEFAULT '',
|
||||||
`category` INT(11) NOT NULL DEFAULT 1,
|
`category` int NOT NULL DEFAULT 1,
|
||||||
`ordering` INT(11) NOT NULL DEFAULT 0,
|
`ordering` int NOT NULL DEFAULT 0,
|
||||||
`enabled` INT(1) NOT NULL DEFAULT 1,
|
`enabled` int NOT NULL DEFAULT 1,
|
||||||
PRIMARY KEY (`id`)
|
PRIMARY KEY (`id`)
|
||||||
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8mb4;
|
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8mb4;
|
||||||
|
|
||||||
CREATE TABLE `myaac_monsters` (
|
CREATE TABLE `myaac_monsters` (
|
||||||
`id` int(11) NOT NULL AUTO_INCREMENT,
|
`id` int NOT NULL AUTO_INCREMENT,
|
||||||
`hide` tinyint(1) NOT NULL default 0,
|
`hide` tinyint NOT NULL DEFAULT 0,
|
||||||
`name` varchar(255) NOT NULL,
|
`name` varchar(255) NOT NULL,
|
||||||
`mana` int(11) NOT NULL DEFAULT 0,
|
`mana` int NOT NULL DEFAULT 0,
|
||||||
`exp` int(11) NOT NULL,
|
`exp` int NOT NULL,
|
||||||
`health` int(11) NOT NULL,
|
`health` int NOT NULL,
|
||||||
`look` VARCHAR(255) NOT NULL DEFAULT '',
|
`look` varchar(255) NOT NULL DEFAULT '',
|
||||||
`speed_lvl` int(11) NOT NULL default 1,
|
`speed_lvl` int NOT NULL DEFAULT 1,
|
||||||
`use_haste` tinyint(1) NOT NULL,
|
`use_haste` tinyint NOT NULL,
|
||||||
`voices` text NOT NULL,
|
`voices` text NOT NULL,
|
||||||
`immunities` varchar(255) NOT NULL,
|
`immunities` varchar(255) NOT NULL,
|
||||||
`elements` TEXT NOT NULL,
|
`elements` text NOT NULL,
|
||||||
`summonable` tinyint(1) NOT NULL,
|
`summonable` tinyint NOT NULL,
|
||||||
`convinceable` tinyint(1) NOT NULL,
|
`convinceable` tinyint NOT NULL,
|
||||||
`pushable` TINYINT(1) NOT NULL DEFAULT '0',
|
`pushable` tinyint NOT NULL DEFAULT 0,
|
||||||
`canpushitems` TINYINT(1) NOT NULL DEFAULT '0',
|
`canpushitems` tinyint NOT NULL DEFAULT 0,
|
||||||
`canwalkonenergy` TINYINT(1) NOT NULL DEFAULT '0',
|
`canwalkonenergy` tinyint NOT NULL DEFAULT 0,
|
||||||
`canwalkonpoison` TINYINT(1) NOT NULL DEFAULT '0',
|
`canwalkonpoison` tinyint NOT NULL DEFAULT 0,
|
||||||
`canwalkonfire` TINYINT(1) NOT NULL DEFAULT '0',
|
`canwalkonfire` tinyint NOT NULL DEFAULT 0,
|
||||||
`runonhealth` TINYINT(1) NOT NULL DEFAULT '0',
|
`runonhealth` tinyint NOT NULL DEFAULT 0,
|
||||||
`hostile` TINYINT(1) NOT NULL DEFAULT '0',
|
`hostile` tinyint NOT NULL DEFAULT 0,
|
||||||
`attackable` TINYINT(1) NOT NULL DEFAULT '0',
|
`attackable` tinyint NOT NULL DEFAULT 0,
|
||||||
`rewardboss` TINYINT(1) NOT NULL DEFAULT '0',
|
`rewardboss` tinyint NOT NULL DEFAULT 0,
|
||||||
`defense` INT(11) NOT NULL DEFAULT '0',
|
`defense` int NOT NULL DEFAULT 0,
|
||||||
`armor` INT(11) NOT NULL DEFAULT '0',
|
`armor` int NOT NULL DEFAULT 0,
|
||||||
`canpushcreatures` TINYINT(1) NOT NULL DEFAULT '0',
|
`canpushcreatures` tinyint NOT NULL DEFAULT 0,
|
||||||
`race` varchar(255) NOT NULL,
|
`race` varchar(255) NOT NULL,
|
||||||
`loot` text NOT NULL,
|
`loot` text NOT NULL,
|
||||||
`summons` TEXT NOT NULL,
|
`summons` text NOT NULL,
|
||||||
PRIMARY KEY (`id`)
|
PRIMARY KEY (`id`)
|
||||||
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8mb4;
|
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8mb4;
|
||||||
|
|
||||||
CREATE TABLE `myaac_news`
|
CREATE TABLE `myaac_news`
|
||||||
(
|
(
|
||||||
`id` INT(11) NOT NULL AUTO_INCREMENT,
|
`id` int NOT NULL AUTO_INCREMENT,
|
||||||
`title` VARCHAR(100) NOT NULL,
|
`title` varchar(100) NOT NULL,
|
||||||
`body` TEXT NOT NULL,
|
`body` text NOT NULL,
|
||||||
`type` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '1 - news, 2 - ticker, 3 - article',
|
`type` tinyint NOT NULL DEFAULT 0 COMMENT '1 - news, 2 - ticker, 3 - article',
|
||||||
`date` INT(11) NOT NULL DEFAULT 0,
|
`date` int NOT NULL DEFAULT 0,
|
||||||
`category` TINYINT(1) NOT NULL DEFAULT 0,
|
`category` tinyint NOT NULL DEFAULT 0,
|
||||||
`player_id` INT(11) NOT NULL DEFAULT 0,
|
`player_id` int NOT NULL DEFAULT 0,
|
||||||
`last_modified_by` INT(11) NOT NULL DEFAULT 0,
|
`last_modified_by` int NOT NULL DEFAULT 0,
|
||||||
`last_modified_date` INT(11) NOT NULL DEFAULT 0,
|
`last_modified_date` int NOT NULL DEFAULT 0,
|
||||||
`comments` VARCHAR(50) NOT NULL DEFAULT '',
|
`comments` varchar(50) NOT NULL DEFAULT '',
|
||||||
`article_text` VARCHAR(300) NOT NULL DEFAULT '',
|
`article_text` varchar(300) NOT NULL DEFAULT '',
|
||||||
`article_image` VARCHAR(100) NOT NULL DEFAULT '',
|
`article_image` varchar(100) NOT NULL DEFAULT '',
|
||||||
`hide` TINYINT(1) 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;
|
||||||
|
|
||||||
CREATE TABLE `myaac_news_categories`
|
CREATE TABLE `myaac_news_categories`
|
||||||
(
|
(
|
||||||
`id` INT(11) NOT NULL AUTO_INCREMENT,
|
`id` int NOT NULL AUTO_INCREMENT,
|
||||||
`name` VARCHAR(50) NOT NULL DEFAULT "",
|
`name` varchar(50) NOT NULL DEFAULT "",
|
||||||
`description` VARCHAR(50) NOT NULL DEFAULT "",
|
`description` varchar(50) NOT NULL DEFAULT "",
|
||||||
`icon_id` INT(2) NOT NULL DEFAULT 0,
|
`icon_id` int NOT NULL DEFAULT 0,
|
||||||
`hide` TINYINT(1) 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;
|
||||||
|
|
||||||
@ -181,39 +181,39 @@ INSERT INTO `myaac_news_categories` (`id`, `icon_id`) VALUES (NULL, 4);
|
|||||||
|
|
||||||
CREATE TABLE `myaac_notepad`
|
CREATE TABLE `myaac_notepad`
|
||||||
(
|
(
|
||||||
`id` INT(11) NOT NULL AUTO_INCREMENT,
|
`id` int NOT NULL AUTO_INCREMENT,
|
||||||
`account_id` INT(11) NOT NULL,
|
`account_id` int NOT NULL,
|
||||||
/*`name` VARCHAR(30) NOT NULL,*/
|
/*`name` varchar(30) NOT NULL,*/
|
||||||
`content` TEXT NOT NULL,
|
`content` text NOT NULL,
|
||||||
/*`public` TINYINT(1) NOT NULL DEFAULT 0*/
|
/*`public` tinyint NOT NULL DEFAULT 0*/
|
||||||
PRIMARY KEY (`id`)
|
PRIMARY KEY (`id`)
|
||||||
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8mb4;
|
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8mb4;
|
||||||
|
|
||||||
CREATE TABLE `myaac_pages`
|
CREATE TABLE `myaac_pages`
|
||||||
(
|
(
|
||||||
`id` INT NOT NULL AUTO_INCREMENT,
|
`id` INT NOT NULL AUTO_INCREMENT,
|
||||||
`name` VARCHAR(30) NOT NULL,
|
`name` varchar(30) NOT NULL,
|
||||||
`title` VARCHAR(30) NOT NULL,
|
`title` varchar(30) NOT NULL,
|
||||||
`body` TEXT NOT NULL,
|
`body` text NOT NULL,
|
||||||
`date` INT(11) NOT NULL DEFAULT 0,
|
`date` int NOT NULL DEFAULT 0,
|
||||||
`player_id` INT(11) NOT NULL DEFAULT 0,
|
`player_id` int NOT NULL DEFAULT 0,
|
||||||
`php` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '0 - plain html, 1 - php',
|
`php` tinyint NOT NULL DEFAULT 0 COMMENT '0 - plain html, 1 - php',
|
||||||
`enable_tinymce` TINYINT(1) NOT NULL DEFAULT 1 COMMENT '1 - enabled, 0 - disabled',
|
`enable_tinymce` tinyint NOT NULL DEFAULT 1 COMMENT '1 - enabled, 0 - disabled',
|
||||||
`access` TINYINT(2) NOT NULL DEFAULT 0,
|
`access` tinyint NOT NULL DEFAULT 0,
|
||||||
`hide` TINYINT(1) NOT NULL DEFAULT 0,
|
`hide` tinyint NOT NULL DEFAULT 0,
|
||||||
PRIMARY KEY (`id`),
|
PRIMARY KEY (`id`),
|
||||||
UNIQUE (`name`)
|
UNIQUE (`name`)
|
||||||
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8mb4;
|
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8mb4;
|
||||||
|
|
||||||
CREATE TABLE `myaac_gallery`
|
CREATE TABLE `myaac_gallery`
|
||||||
(
|
(
|
||||||
`id` INT(11) NOT NULL AUTO_INCREMENT,
|
`id` int NOT NULL AUTO_INCREMENT,
|
||||||
`comment` VARCHAR(255) NOT NULL DEFAULT '',
|
`comment` varchar(255) NOT NULL DEFAULT '',
|
||||||
`image` VARCHAR(255) NOT NULL,
|
`image` varchar(255) NOT NULL,
|
||||||
`thumb` VARCHAR(255) NOT NULL,
|
`thumb` varchar(255) NOT NULL,
|
||||||
`author` VARCHAR(50) NOT NULL DEFAULT '',
|
`author` varchar(50) NOT NULL DEFAULT '',
|
||||||
`ordering` INT(11) NOT NULL DEFAULT 0,
|
`ordering` int NOT NULL DEFAULT 0,
|
||||||
`hide` TINYINT(1) 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;
|
||||||
|
|
||||||
@ -221,51 +221,51 @@ INSERT INTO `myaac_gallery` (`id`, `ordering`, `comment`, `image`, `thumb`, `aut
|
|||||||
|
|
||||||
CREATE TABLE `myaac_settings`
|
CREATE TABLE `myaac_settings`
|
||||||
(
|
(
|
||||||
`id` int(11) NOT NULL AUTO_INCREMENT,
|
`id` int NOT NULL AUTO_INCREMENT,
|
||||||
`name` VARCHAR(255) NOT NULL DEFAULT '',
|
`name` varchar(255) NOT NULL DEFAULT '',
|
||||||
`key` VARCHAR(255) NOT NULL DEFAULT '',
|
`key` varchar(255) NOT NULL DEFAULT '',
|
||||||
`value` TEXT NOT NULL,
|
`value` text NOT NULL,
|
||||||
PRIMARY KEY (`id`),
|
PRIMARY KEY (`id`),
|
||||||
KEY `key` (`key`)
|
KEY `key` (`key`)
|
||||||
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8mb4;
|
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8mb4;
|
||||||
|
|
||||||
CREATE TABLE `myaac_spells`
|
CREATE TABLE `myaac_spells`
|
||||||
(
|
(
|
||||||
`id` INT(11) NOT NULL AUTO_INCREMENT,
|
`id` int NOT NULL AUTO_INCREMENT,
|
||||||
`spell` VARCHAR(255) NOT NULL DEFAULT '',
|
`spell` varchar(255) NOT NULL DEFAULT '',
|
||||||
`name` VARCHAR(255) NOT NULL,
|
`name` varchar(255) NOT NULL,
|
||||||
`words` VARCHAR(255) NOT NULL DEFAULT '',
|
`words` varchar(255) NOT NULL DEFAULT '',
|
||||||
`category` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '1 - attack, 2 - healing, 3 - summon, 4 - supply, 5 - support',
|
`category` tinyint NOT NULL DEFAULT 0 COMMENT '1 - attack, 2 - healing, 3 - summon, 4 - supply, 5 - support',
|
||||||
`type` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '1 - instant, 2 - conjure, 3 - rune',
|
`type` tinyint NOT NULL DEFAULT 0 COMMENT '1 - instant, 2 - conjure, 3 - rune',
|
||||||
`level` INT(11) NOT NULL DEFAULT 0,
|
`level` int NOT NULL DEFAULT 0,
|
||||||
`maglevel` INT(11) NOT NULL DEFAULT 0,
|
`maglevel` int NOT NULL DEFAULT 0,
|
||||||
`mana` INT(11) NOT NULL DEFAULT 0,
|
`mana` int NOT NULL DEFAULT 0,
|
||||||
`soul` TINYINT(3) NOT NULL DEFAULT 0,
|
`soul` tinyint NOT NULL DEFAULT 0,
|
||||||
`conjure_id` INT(11) NOT NULL DEFAULT 0,
|
`conjure_id` int NOT NULL DEFAULT 0,
|
||||||
`conjure_count` TINYINT(3) NOT NULL DEFAULT 0,
|
`conjure_count` tinyint NOT NULL DEFAULT 0,
|
||||||
`reagent` INT(11) NOT NULL DEFAULT 0,
|
`reagent` int NOT NULL DEFAULT 0,
|
||||||
`item_id` INT(11) NOT NULL DEFAULT 0,
|
`item_id` int NOT NULL DEFAULT 0,
|
||||||
`premium` TINYINT(1) NOT NULL DEFAULT 0,
|
`premium` tinyint NOT NULL DEFAULT 0,
|
||||||
`vocations` VARCHAR(100) NOT NULL DEFAULT '',
|
`vocations` varchar(100) NOT NULL DEFAULT '',
|
||||||
`hide` TINYINT(1) NOT NULL DEFAULT 0,
|
`hide` tinyint NOT NULL DEFAULT 0,
|
||||||
PRIMARY KEY (`id`),
|
PRIMARY KEY (`id`),
|
||||||
UNIQUE (`name`)
|
UNIQUE (`name`)
|
||||||
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8mb4;
|
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8mb4;
|
||||||
|
|
||||||
CREATE TABLE `myaac_visitors`
|
CREATE TABLE `myaac_visitors`
|
||||||
(
|
(
|
||||||
`ip` VARCHAR(45) NOT NULL,
|
`ip` varchar(45) NOT NULL,
|
||||||
`lastvisit` INT(11) NOT NULL DEFAULT 0,
|
`lastvisit` int NOT NULL DEFAULT 0,
|
||||||
`page` VARCHAR(2048) NOT NULL,
|
`page` varchar(2048) NOT NULL,
|
||||||
`user_agent` VARCHAR(255) NOT NULL DEFAULT '',
|
`user_agent` varchar(255) NOT NULL DEFAULT '',
|
||||||
UNIQUE (`ip`)
|
UNIQUE (`ip`)
|
||||||
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8mb4;
|
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8mb4;
|
||||||
|
|
||||||
CREATE TABLE `myaac_weapons`
|
CREATE TABLE `myaac_weapons`
|
||||||
(
|
(
|
||||||
`id` INT(11) NOT NULL,
|
`id` int NOT NULL,
|
||||||
`level` INT(11) NOT NULL DEFAULT 0,
|
`level` int NOT NULL DEFAULT 0,
|
||||||
`maglevel` INT(11) NOT NULL DEFAULT 0,
|
`maglevel` int NOT NULL DEFAULT 0,
|
||||||
`vocations` VARCHAR(100) NOT NULL DEFAULT '',
|
`vocations` varchar(100) NOT NULL DEFAULT '',
|
||||||
PRIMARY KEY (`id`)
|
PRIMARY KEY (`id`)
|
||||||
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8mb4;
|
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8mb4;
|
||||||
|
@ -86,7 +86,7 @@ switch ($action) {
|
|||||||
die(json_encode(['eventlist' => $eventlist, 'lastupdatetimestamp' => time()]));
|
die(json_encode(['eventlist' => $eventlist, 'lastupdatetimestamp' => time()]));
|
||||||
|
|
||||||
case 'boostedcreature':
|
case 'boostedcreature':
|
||||||
$boostedCreature = BoostedCreature::latest();
|
$boostedCreature = BoostedCreature::first();
|
||||||
die(json_encode([
|
die(json_encode([
|
||||||
'boostedcreature' => true,
|
'boostedcreature' => true,
|
||||||
'raceid' => $boostedCreature->raceid
|
'raceid' => $boostedCreature->raceid
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
server {
|
server {
|
||||||
listen 80;
|
listen 80;
|
||||||
root /home/otserv/www/public;
|
root /var/www/html;
|
||||||
index index.php;
|
index index.php;
|
||||||
server_name your-domain.com;
|
server_name your-domain.com;
|
||||||
|
|
||||||
@ -14,7 +14,7 @@ server {
|
|||||||
|
|
||||||
# block .htaccess, CHANGELOG.md, composer.json etc.
|
# block .htaccess, CHANGELOG.md, composer.json etc.
|
||||||
# this is to prevent finding software versions
|
# this is to prevent finding software versions
|
||||||
location ~\.(ht|md|json|dist)$ {
|
location ~\.(ht|md|json|dist|sql)$ {
|
||||||
deny all;
|
deny all;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -46,8 +46,10 @@
|
|||||||
"settings": "plugins/your-plugin-folder/settings.php",
|
"settings": "plugins/your-plugin-folder/settings.php",
|
||||||
"autoload": {
|
"autoload": {
|
||||||
"pages": true,
|
"pages": true,
|
||||||
"pagesSubFolders": false,
|
"pages-sub-folders": false,
|
||||||
"commands": true,
|
"commands": true,
|
||||||
"themes": true
|
"themes": true,
|
||||||
|
"admin-pages": true,
|
||||||
|
"admin-pages-sub-folders": true,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -121,7 +121,7 @@ function getPlayerLink($name, $generate = true, bool $colored = false): string
|
|||||||
|
|
||||||
function getMonsterLink($name, $generate = true): string
|
function getMonsterLink($name, $generate = true): string
|
||||||
{
|
{
|
||||||
$url = BASE_URL . (setting('core.friendly_urls') ? '' : 'index.php/') . 'monsters/' . urlencode($name);
|
$url = BASE_URL . (setting('core.friendly_urls') ? '' : 'index.php/') . 'monsters?name=' . urlencode($name);
|
||||||
|
|
||||||
if(!$generate) return $url;
|
if(!$generate) return $url;
|
||||||
return generateLink($url, $name);
|
return generateLink($url, $name);
|
||||||
@ -129,16 +129,14 @@ function getMonsterLink($name, $generate = true): string
|
|||||||
|
|
||||||
function getHouseLink($name, $generate = true): string
|
function getHouseLink($name, $generate = true): string
|
||||||
{
|
{
|
||||||
if(is_numeric($name))
|
if(is_numeric($name)) {
|
||||||
{
|
|
||||||
$house = House::find(intval($name), ['name']);
|
$house = House::find(intval($name), ['name']);
|
||||||
if ($house) {
|
if ($house) {
|
||||||
$name = $house->name;
|
$name = $house->name;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$url = BASE_URL . (setting('core.friendly_urls') ? '' : 'index.php/') . 'houses?name=' . urlencode($name);
|
||||||
$url = BASE_URL . (setting('core.friendly_urls') ? '' : 'index.php/') . 'houses/' . urlencode($name);
|
|
||||||
|
|
||||||
if(!$generate) return $url;
|
if(!$generate) return $url;
|
||||||
return generateLink($url, $name);
|
return generateLink($url, $name);
|
||||||
@ -984,31 +982,29 @@ function load_config_lua($filename)
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
$tmp_exp = explode('=', $line, 2);
|
$tmp_exp = explode('=', $line, 2);
|
||||||
if(strpos($line, 'dofile') !== false)
|
if(str_contains($line, 'dofile')) {
|
||||||
{
|
|
||||||
$delimiter = '"';
|
$delimiter = '"';
|
||||||
if(strpos($line, $delimiter) === false)
|
if(!str_contains($line, $delimiter)) {
|
||||||
$delimiter = "'";
|
$delimiter = "'";
|
||||||
|
}
|
||||||
|
|
||||||
$tmp = explode($delimiter, $line);
|
$tmp = explode($delimiter, $line);
|
||||||
$result = array_merge($result, load_config_lua($config['server_path'] . $tmp[1]));
|
$result = array_merge($result, load_config_lua($config['server_path'] . $tmp[1]));
|
||||||
}
|
}
|
||||||
else if(count($tmp_exp) >= 2)
|
else if(count($tmp_exp) >= 2) {
|
||||||
{
|
|
||||||
$key = trim($tmp_exp[0]);
|
$key = trim($tmp_exp[0]);
|
||||||
if(0 !== strpos($key, '--'))
|
if(!str_starts_with($key, '--')) {
|
||||||
{
|
|
||||||
$value = trim($tmp_exp[1]);
|
$value = trim($tmp_exp[1]);
|
||||||
if(strpos($value, '--') !== false) {// found some deep comment
|
if(str_contains($value, '--')) {// found some deep comment
|
||||||
$value = preg_replace('/--.*$/i', '', $value);
|
$value = preg_replace('/--.*$/i', '', $value);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(is_numeric($value))
|
if(is_numeric($value))
|
||||||
$result[$key] = (float) $value;
|
$result[$key] = (float) $value;
|
||||||
elseif(in_array(@$value[0], array("'", '"')) && in_array(@$value[strlen($value) - 1], array("'", '"')))
|
elseif(in_array(@$value[0], array("'", '"')) && in_array(@$value[strlen($value) - 1], array("'", '"')))
|
||||||
$result[$key] = (string) substr(substr($value, 1), 0, -1);
|
$result[$key] = substr(substr($value, 1), 0, -1);
|
||||||
elseif(in_array($value, array('true', 'false')))
|
elseif(in_array($value, array('true', 'false')))
|
||||||
$result[$key] = ($value === 'true') ? true : false;
|
$result[$key] = $value === 'true';
|
||||||
elseif(@$value[0] === '{') {
|
elseif(@$value[0] === '{') {
|
||||||
// arrays are not supported yet
|
// arrays are not supported yet
|
||||||
// just ignore the error
|
// just ignore the error
|
||||||
@ -1016,12 +1012,19 @@ function load_config_lua($filename)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
foreach($result as $tmp_key => $tmp_value) // load values definied by other keys, like: dailyFragsToBlackSkull = dailyFragsToRedSkull
|
foreach($result as $tmp_key => $tmp_value) { // load values defined by other keys, like: dailyFragsToBlackSkull = dailyFragsToRedSkull
|
||||||
$value = str_replace($tmp_key, $tmp_value, $value);
|
$value = str_replace($tmp_key, $tmp_value, $value);
|
||||||
$ret = @eval("return $value;");
|
}
|
||||||
if((string) $ret == '' && trim($value) !== '""') // = parser error
|
|
||||||
{
|
try {
|
||||||
throw new RuntimeException('ERROR: Loading config.lua file. Line <b>' . ($ln + 1) . '</b> of LUA config file is not valid [key: <b>' . $key . '</b>]');
|
$ret = eval("return $value;");
|
||||||
|
}
|
||||||
|
catch (Throwable $e) {
|
||||||
|
throw new RuntimeException('ERROR: Loading config.lua file. Line: ' . ($ln + 1) . ' - Unable to parse value "' . $value . '" - ' . $e->getMessage());
|
||||||
|
}
|
||||||
|
|
||||||
|
if((string) $ret == '' && trim($value) !== '""') {
|
||||||
|
throw new RuntimeException('ERROR: Loading config.lua file. Line ' . ($ln + 1) . ' is not valid [key: ' . $key . ']');
|
||||||
}
|
}
|
||||||
$result[$key] = $ret;
|
$result[$key] = $ret;
|
||||||
}
|
}
|
||||||
@ -1030,8 +1033,7 @@ function load_config_lua($filename)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$result = array_merge($result, isset($config['lua']) ? $config['lua'] : array());
|
return array_merge($result, $config['lua'] ?? []);
|
||||||
return $result;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function str_replace_first($search,$replace, $subject) {
|
function str_replace_first($search,$replace, $subject) {
|
||||||
|
@ -443,19 +443,19 @@ class OTS_Account extends OTS_Row_DAO implements IteratorAggregate, Countable
|
|||||||
throw new E_OTS_NotLoaded();
|
throw new E_OTS_NotLoaded();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$configFreePremium = configLua('freePremium');
|
||||||
|
if(isset($configFreePremium) && getBoolean($configFreePremium)) {return -1;}
|
||||||
|
|
||||||
if(isset($this->data['premium_ends_at']) || isset($this->data['premend'])) {
|
if(isset($this->data['premium_ends_at']) || isset($this->data['premend'])) {
|
||||||
$col = isset($this->data['premium_ends_at']) ? 'premium_ends_at' : 'premend';
|
$col = isset($this->data['premium_ends_at']) ? 'premium_ends_at' : 'premend';
|
||||||
$ret = ceil(($this->data[$col] - time()) / (24 * 60 * 60));
|
$ret = ceil(($this->data[$col] - time()) / (24 * 60 * 60));
|
||||||
return $ret > 0 ? $ret : 0;
|
return max($ret, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
if($this->data['premdays'] == 0) {
|
if($this->data['premdays'] == 0) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
global $config;
|
|
||||||
if(isset($config['lua']['freePremium']) && getBoolean($config['lua']['freePremium'])) return -1;
|
|
||||||
|
|
||||||
if($this->data['premdays'] == self::GRATIS_PREMIUM_DAYS){
|
if($this->data['premdays'] == self::GRATIS_PREMIUM_DAYS){
|
||||||
return self::GRATIS_PREMIUM_DAYS;
|
return self::GRATIS_PREMIUM_DAYS;
|
||||||
}
|
}
|
||||||
@ -1011,7 +1011,7 @@ class OTS_Account extends OTS_Row_DAO implements IteratorAggregate, Countable
|
|||||||
public function logAction($action)
|
public function logAction($action)
|
||||||
{
|
{
|
||||||
$ip = get_browser_real_ip();
|
$ip = get_browser_real_ip();
|
||||||
if(strpos($ip, ":") === false) {
|
if(!str_contains($ip, ":")) {
|
||||||
$ipv6 = '0';
|
$ipv6 = '0';
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
@ -234,6 +234,19 @@ class OTS_DB_MySQL extends OTS_Base_DB
|
|||||||
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 '" . $column . "'")->fetchAll()) > 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function hasTableAndColumns(string $table, array $columns = []): bool
|
||||||
|
{
|
||||||
|
if (!$this->hasTable($table)) return false;
|
||||||
|
|
||||||
|
foreach ($columns as $column) {
|
||||||
|
if (!$this->hasColumn($table, $column)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
public function revalidateCache() {
|
public function revalidateCache() {
|
||||||
foreach($this->has_table_cache as $key => $value) {
|
foreach($this->has_table_cache as $key => $value) {
|
||||||
$this->hasTableInternal($key);
|
$this->hasTableInternal($key);
|
||||||
|
@ -30,11 +30,11 @@ $state = '';
|
|||||||
$order = '';
|
$order = '';
|
||||||
$type = '';
|
$type = '';
|
||||||
|
|
||||||
if(isset($_GET['page']) && $_GET['page'] == 'view' && isset($_REQUEST['house']))
|
if(isset($_REQUEST['name']))
|
||||||
{
|
{
|
||||||
$beds = array("", "one", "two", "three", "fourth", "fifth");
|
$beds = array("", "one", "two", "three", "fourth", "fifth");
|
||||||
$houseName = $_REQUEST['house'];
|
$houseName = urldecode($_REQUEST['name']);
|
||||||
$houseId = (Validator::number($_REQUEST['house']) ? $_REQUEST['house'] : -1);
|
$houseId = (Validator::number($_REQUEST['name']) ? $_REQUEST['name'] : -1);
|
||||||
$selectHouse = $db->query('SELECT * FROM ' . $db->tableName('houses') . ' WHERE ' . $db->fieldName('name') . ' LIKE ' . $db->quote($houseName) . ' OR `id` = ' . $db->quote($houseId));
|
$selectHouse = $db->query('SELECT * FROM ' . $db->tableName('houses') . ' WHERE ' . $db->fieldName('name') . ' LIKE ' . $db->quote($houseName) . ' OR `id` = ' . $db->quote($houseId));
|
||||||
|
|
||||||
$house = array();
|
$house = array();
|
||||||
@ -187,7 +187,7 @@ if(isset($_POST['town']) && isset($_POST['state']) && isset($_POST['order']) &&
|
|||||||
$houseRent = 'Free';
|
$houseRent = 'Free';
|
||||||
}
|
}
|
||||||
|
|
||||||
$houses[] = array('owner' => $owner, 'name' => $house['name'], 'size' => ($hasTilesColumn ? $house['tiles'] : $house['size']), 'rent' => $house['rent'], 'rentedBy' => $houseRent);
|
$houses[] = array('owner' => $owner, 'name' => $house['name'], 'size' => ($hasTilesColumn ? $house['tiles'] : $house['size']), 'rent' => $house['rent'], 'rentedBy' => $houseRent, 'link' => getHouseLink($house['name'], false));
|
||||||
}
|
}
|
||||||
|
|
||||||
$housesSearch = true;
|
$housesSearch = true;
|
||||||
|
@ -100,7 +100,7 @@ function getColorByPercent($percent)
|
|||||||
|
|
||||||
if(!$logged)
|
if(!$logged)
|
||||||
{
|
{
|
||||||
echo 'You are not logged in. <a href="?subtopic=accountmanagement&redirect=' . BASE_URL . urlencode('?subtopic=polls') . '">Log in</a> to vote in polls.<br /><br />';
|
echo 'You are not logged in. <a href="' . getLink('account/manage') . '?redirect=' . BASE_URL . urlencode('?subtopic=polls') . '">Log in</a> to vote in polls.<br /><br />';
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -89,8 +89,6 @@ if($logged && $account_logged && $account_logged->isLoaded()) {
|
|||||||
* Routes loading
|
* Routes loading
|
||||||
*/
|
*/
|
||||||
$dispatcher = FastRoute\cachedDispatcher(function (FastRoute\RouteCollector $r) {
|
$dispatcher = FastRoute\cachedDispatcher(function (FastRoute\RouteCollector $r) {
|
||||||
$routes = require SYSTEM . 'routes.php';
|
|
||||||
|
|
||||||
$routesFinal = [];
|
$routesFinal = [];
|
||||||
foreach(getDatabasePages() as $page) {
|
foreach(getDatabasePages() as $page) {
|
||||||
$routesFinal[] = ['*', $page, '__database__/' . $page, 100];
|
$routesFinal[] = ['*', $page, '__database__/' . $page, 100];
|
||||||
@ -106,8 +104,13 @@ $dispatcher = FastRoute\cachedDispatcher(function (FastRoute\RouteCollector $r)
|
|||||||
*/
|
*/
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$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__')) {
|
||||||
|
if (!is_file(BASE . 'system/pages/' . $route[2])) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
$routesFinal[] = [$route[0], $route[1], 'system/pages/' . $route[2], $route[3] ?? 10000];
|
$routesFinal[] = [$route[0], $route[1], 'system/pages/' . $route[2], $route[3] ?? 10000];
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
@ -343,16 +346,16 @@ function getDatabasePages($withHidden = false): array
|
|||||||
|
|
||||||
function loadPageFromFileSystem($page, &$found): string
|
function loadPageFromFileSystem($page, &$found): string
|
||||||
{
|
{
|
||||||
$file = SYSTEM . 'pages/' . $page . '.php';
|
// feature: load pages from templates/ dir
|
||||||
|
global $template_path;
|
||||||
|
$file = $template_path . '/pages/' . $page . '.php';
|
||||||
if (!is_file($file)) {
|
if (!is_file($file)) {
|
||||||
// feature: convert camelCase to snake_case
|
$file = SYSTEM . 'pages/' . $page . '.php';
|
||||||
// so instead of forum/move_thread
|
|
||||||
// we can write: forum/moveThread
|
|
||||||
$file = SYSTEM . 'pages/' . camelCaseToUnderscore($page) . '.php';
|
|
||||||
if (!is_file($file)) {
|
if (!is_file($file)) {
|
||||||
// feature: load pages from templates/ dir
|
// feature: convert camelCase to snake_case
|
||||||
global $template_path;
|
// so instead of forum/move_thread
|
||||||
$file = $template_path . '/pages/' . $page . '.php';
|
// we can write: forum/moveThread
|
||||||
|
$file = SYSTEM . 'pages/' . camelCaseToUnderscore($page) . '.php';
|
||||||
if (!is_file($file)) {
|
if (!is_file($file)) {
|
||||||
$found = false;
|
$found = false;
|
||||||
}
|
}
|
||||||
|
@ -1403,7 +1403,7 @@ Sent by MyAAC,<br/>
|
|||||||
'name' => 'Outfit Images URL',
|
'name' => 'Outfit Images URL',
|
||||||
'type' => 'text',
|
'type' => 'text',
|
||||||
'desc' => 'Set to animoutfit.php for animated outfit',
|
'desc' => 'Set to animoutfit.php for animated outfit',
|
||||||
'default' => 'https://outfit-images.ots.me/outfit.php',
|
'default' => 'https://outfit-images.ots.me/latest/outfit.php',
|
||||||
],
|
],
|
||||||
'outfit_images_wrong_looktypes' => [
|
'outfit_images_wrong_looktypes' => [
|
||||||
'name' => 'Outfit Images Wrong Looktypes',
|
'name' => 'Outfit Images Wrong Looktypes',
|
||||||
@ -1622,14 +1622,20 @@ Sent by MyAAC,<br/>
|
|||||||
'name' => 'Login Attempts Limit',
|
'name' => 'Login Attempts Limit',
|
||||||
'type' => 'number',
|
'type' => 'number',
|
||||||
'desc' => 'Number of incorrect login attempts before banning the IP',
|
'desc' => 'Number of incorrect login attempts before banning the IP',
|
||||||
'default' => 5, // Ajuste conforme necessário
|
'default' => 5,
|
||||||
|
'show_if' => [
|
||||||
|
'account_login_ipban_protection', '=', 'true'
|
||||||
|
]
|
||||||
],
|
],
|
||||||
|
|
||||||
'account_login_ban_time' => [
|
'account_login_ban_time' => [
|
||||||
'name' => 'Ban Time (Minutes)',
|
'name' => 'Ban Time (Minutes)',
|
||||||
'type' => 'number',
|
'type' => 'number',
|
||||||
'desc' => 'Time in minutes the IP will be banned after exceeding login attempts',
|
'desc' => 'Time in minutes the IP will be banned after exceeding login attempts',
|
||||||
'default' => 30, // Ajuste conforme necessário
|
'default' => 30,
|
||||||
|
'show_if' => [
|
||||||
|
'account_login_ipban_protection', '=', 'true'
|
||||||
|
]
|
||||||
],
|
],
|
||||||
],
|
],
|
||||||
'callbacks' => [
|
'callbacks' => [
|
||||||
|
@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
namespace MyAAC\Commands;
|
namespace MyAAC\Commands;
|
||||||
|
|
||||||
|
use MyAAC\Hooks;
|
||||||
use Symfony\Component\Console\Input\InputInterface;
|
use Symfony\Component\Console\Input\InputInterface;
|
||||||
use Symfony\Component\Console\Output\OutputInterface;
|
use Symfony\Component\Console\Output\OutputInterface;
|
||||||
use Symfony\Component\Console\Style\SymfonyStyle;
|
use Symfony\Component\Console\Style\SymfonyStyle;
|
||||||
@ -16,7 +17,10 @@ class CacheClearCommand extends Command
|
|||||||
|
|
||||||
protected function execute(InputInterface $input, OutputInterface $output): int
|
protected function execute(InputInterface $input, OutputInterface $output): int
|
||||||
{
|
{
|
||||||
require SYSTEM . 'init.php';
|
global $hooks;
|
||||||
|
$hooks = new Hooks();
|
||||||
|
$hooks->load();
|
||||||
|
$hooks->trigger(HOOK_INIT);
|
||||||
|
|
||||||
$io = new SymfonyStyle($input, $output);
|
$io = new SymfonyStyle($input, $output);
|
||||||
|
|
||||||
|
@ -4,6 +4,7 @@ namespace MyAAC\Commands;
|
|||||||
|
|
||||||
use Symfony\Component\Console\Input\InputArgument;
|
use Symfony\Component\Console\Input\InputArgument;
|
||||||
use Symfony\Component\Console\Input\InputInterface;
|
use Symfony\Component\Console\Input\InputInterface;
|
||||||
|
use Symfony\Component\Console\Input\InputOption;
|
||||||
use Symfony\Component\Console\Output\OutputInterface;
|
use Symfony\Component\Console\Output\OutputInterface;
|
||||||
use Symfony\Component\Console\Style\SymfonyStyle;
|
use Symfony\Component\Console\Style\SymfonyStyle;
|
||||||
|
|
||||||
@ -16,7 +17,8 @@ class MigrateRunCommand extends Command
|
|||||||
->addArgument('id',
|
->addArgument('id',
|
||||||
InputArgument::IS_ARRAY | InputArgument::REQUIRED,
|
InputArgument::IS_ARRAY | InputArgument::REQUIRED,
|
||||||
'Id or ids of migration(s)'
|
'Id or ids of migration(s)'
|
||||||
);
|
)
|
||||||
|
->addOption('down', 'd', InputOption::VALUE_NONE, 'Down');;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function execute(InputInterface $input, OutputInterface $output): int
|
protected function execute(InputInterface $input, OutputInterface $output): int
|
||||||
@ -41,8 +43,10 @@ class MigrateRunCommand extends Command
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$down = $input->getOption('down') ?? false;
|
||||||
|
|
||||||
foreach ($ids as $id) {
|
foreach ($ids as $id) {
|
||||||
$this->executeMigration($id, $io);
|
$this->executeMigration($id, $io, !$down);
|
||||||
}
|
}
|
||||||
|
|
||||||
return Command::SUCCESS;
|
return Command::SUCCESS;
|
||||||
@ -52,13 +56,24 @@ class MigrateRunCommand extends Command
|
|||||||
return file_exists(SYSTEM . 'migrations/' . $id . '.php');
|
return file_exists(SYSTEM . 'migrations/' . $id . '.php');
|
||||||
}
|
}
|
||||||
|
|
||||||
private function executeMigration($id, $io): void
|
private function executeMigration($id, $io, $_up = true): void
|
||||||
{
|
{
|
||||||
global $db;
|
global $db;
|
||||||
|
|
||||||
$db->revalidateCache();
|
$db->revalidateCache();
|
||||||
|
|
||||||
require SYSTEM . 'migrations/' . $id . '.php';
|
require SYSTEM . 'migrations/' . $id . '.php';
|
||||||
$io->success('Migration ' . $id . ' successfully executed');
|
if ($_up) {
|
||||||
|
if (isset($up)) {
|
||||||
|
$up();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
if (isset($down)) {
|
||||||
|
$down();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$io->success('Migration ' . $id . ' successfully executed' . ($_up ? '' : ' (downgrade)'));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -11,6 +11,81 @@ class Plugins {
|
|||||||
private static $error = null;
|
private static $error = null;
|
||||||
private static $plugin_json = [];
|
private static $plugin_json = [];
|
||||||
|
|
||||||
|
public static function getAdminPages()
|
||||||
|
{
|
||||||
|
return Cache::remember('plugins_admin_pages', 10 * 60, function () {
|
||||||
|
$adminPages = [];
|
||||||
|
foreach(self::getAllPluginsJson() as $plugin) {
|
||||||
|
if (!self::getAutoLoadOption($plugin, 'admin-pages', true)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
$adminPagesDefaultPriority = 1000;
|
||||||
|
if (isset($plugin['admin-pages-default-priority'])) {
|
||||||
|
$adminPagesDefaultPriority = $plugin['admin-pages-default-priority'];
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Get all plugins/*/admin-pages/*.php pages
|
||||||
|
//
|
||||||
|
$pluginAdminPages = glob(PLUGINS . $plugin['filename'] . '/admin-pages/*.php');
|
||||||
|
foreach ($pluginAdminPages as $file) {
|
||||||
|
$file = str_replace(PLUGINS, 'plugins/', $file);
|
||||||
|
$name = pathinfo($file, PATHINFO_FILENAME);
|
||||||
|
|
||||||
|
$adminPages[] = ['name' => $name, 'file' => $file, 'priority' => $adminPagesDefaultPriority];
|
||||||
|
}
|
||||||
|
|
||||||
|
if (self::getAutoLoadOption($plugin, 'admin-pages-sub-folders', true)) {
|
||||||
|
//
|
||||||
|
// Get all plugins/*/admin-pages/subFolder/*.php pages
|
||||||
|
//
|
||||||
|
$pluginAdminPagesSubFolders = glob(PLUGINS . $plugin['filename'] . '/admin-pages/*', GLOB_ONLYDIR);
|
||||||
|
foreach ($pluginAdminPagesSubFolders as $folder) {
|
||||||
|
$folderName = pathinfo($folder, PATHINFO_FILENAME);
|
||||||
|
|
||||||
|
$subFiles = glob(PLUGINS . $plugin['filename'] . '/admin-pages/' . $folderName . '/*.php');
|
||||||
|
foreach ($subFiles as $file) {
|
||||||
|
$file = str_replace(PLUGINS, 'plugins/', $file);
|
||||||
|
$name = $folderName . '/' . pathinfo($file, PATHINFO_FILENAME);
|
||||||
|
|
||||||
|
$adminPages[] = ['name' => $name, 'file' => $file, 'priority' => $adminPagesDefaultPriority];
|
||||||
|
}
|
||||||
|
|
||||||
|
$subFolders = glob(PLUGINS . $plugin['filename'] . '/admin-pages/' . $folderName . '/*', GLOB_ONLYDIR);
|
||||||
|
foreach ($subFolders as $subFolder) {
|
||||||
|
$subFolderName = pathinfo($subFolder, PATHINFO_FILENAME);
|
||||||
|
$subSubFiles = glob(PLUGINS . $plugin['filename'] . '/admin-pages/' . $folderName . '/' . $subFolderName . '/*.php');
|
||||||
|
|
||||||
|
foreach ($subSubFiles as $subSubFile) {
|
||||||
|
$subSubFile = str_replace(PLUGINS, 'plugins/', $subSubFile);
|
||||||
|
$name = $folderName . '/' . $subFolderName . '/' . pathinfo($subSubFile, PATHINFO_FILENAME);
|
||||||
|
|
||||||
|
$adminPages[] = ['name' => $name, 'file' => $subSubFile, 'priority' => $adminPagesDefaultPriority];;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
usort($adminPages, function ($a, $b)
|
||||||
|
{
|
||||||
|
if ($a['priority'] == $b['priority']) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
return ($a['priority'] > $b['priority']) ? -1 : 1;
|
||||||
|
});
|
||||||
|
|
||||||
|
$ret = [];
|
||||||
|
foreach ($adminPages as $value) {
|
||||||
|
$ret[$value['name']] = $value['file'];
|
||||||
|
}
|
||||||
|
|
||||||
|
return $ret;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
public static function getRoutes()
|
public static function getRoutes()
|
||||||
{
|
{
|
||||||
$cache = Cache::getInstance();
|
$cache = Cache::getInstance();
|
||||||
@ -76,7 +151,8 @@ class Plugins {
|
|||||||
$pagesDefaultPriority = $plugin['pages-default-priority'];
|
$pagesDefaultPriority = $plugin['pages-default-priority'];
|
||||||
}
|
}
|
||||||
|
|
||||||
if (self::getAutoLoadOption($plugin, 'pages', true)) {
|
$autoLoadPages = self::getAutoLoadOption($plugin, 'pages', true);
|
||||||
|
if ($autoLoadPages) {
|
||||||
//
|
//
|
||||||
// Get all plugins/*/pages/*.php pages
|
// Get all plugins/*/pages/*.php pages
|
||||||
//
|
//
|
||||||
@ -89,7 +165,8 @@ class Plugins {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (self::getAutoLoadOption($plugin, 'pagesSubFolders', true)) {
|
if ($autoLoadPages && self::getAutoLoadOption($plugin, 'pagesSubFolders', true) &&
|
||||||
|
self::getAutoLoadOption($plugin, 'pages-sub-folders', true)) {
|
||||||
//
|
//
|
||||||
// Get all plugins/*/pages/subFolder/*.php pages
|
// Get all plugins/*/pages/subFolder/*.php pages
|
||||||
//
|
//
|
||||||
@ -411,20 +488,13 @@ class Plugins {
|
|||||||
$continue = true;
|
$continue = true;
|
||||||
|
|
||||||
if(!isset($plugin_json['name']) || empty(trim($plugin_json['name']))) {
|
if(!isset($plugin_json['name']) || empty(trim($plugin_json['name']))) {
|
||||||
self::$warnings[] = 'Plugin "name" tag is not set.';
|
self::$error = 'Plugin "name" tag is not set.';
|
||||||
}
|
return false;
|
||||||
if(!isset($plugin_json['description']) || empty(trim($plugin_json['description']))) {
|
|
||||||
self::$warnings[] = 'Plugin "description" tag is not set.';
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!isset($plugin_json['version']) || empty(trim($plugin_json['version']))) {
|
if(!isset($plugin_json['version']) || empty(trim($plugin_json['version']))) {
|
||||||
self::$warnings[] = 'Plugin "version" tag is not set.';
|
self::$warnings[] = 'Plugin "version" tag is not set.';
|
||||||
}
|
}
|
||||||
if(!isset($plugin_json['author']) || empty(trim($plugin_json['author']))) {
|
|
||||||
self::$warnings[] = 'Plugin "author" tag is not set.';
|
|
||||||
}
|
|
||||||
if(!isset($plugin_json['contact']) || empty(trim($plugin_json['contact']))) {
|
|
||||||
self::$warnings[] = 'Plugin "contact" tag is not set.';
|
|
||||||
}
|
|
||||||
|
|
||||||
if(isset($plugin_json['require'])) {
|
if(isset($plugin_json['require'])) {
|
||||||
$require = $plugin_json['require'];
|
$require = $plugin_json['require'];
|
||||||
@ -631,6 +701,7 @@ class Plugins {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
clearCache();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -675,26 +746,41 @@ class Plugins {
|
|||||||
|
|
||||||
public static function uninstall($plugin_name): bool
|
public static function uninstall($plugin_name): bool
|
||||||
{
|
{
|
||||||
|
$isDisabled = self::existDisabled($plugin_name);
|
||||||
|
if($isDisabled) {
|
||||||
|
self::enable($plugin_name);
|
||||||
|
}
|
||||||
|
|
||||||
|
$revertEnable = function() use ($isDisabled, $plugin_name) {
|
||||||
|
if($isDisabled) {
|
||||||
|
self::disable($plugin_name);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
$filename = BASE . 'plugins/' . $plugin_name . '.json';
|
$filename = BASE . 'plugins/' . $plugin_name . '.json';
|
||||||
if(!file_exists($filename)) {
|
if(!file_exists($filename)) {
|
||||||
self::$error = 'Plugin ' . $plugin_name . ' does not exist.';
|
self::$error = 'Plugin ' . $plugin_name . ' does not exist.';
|
||||||
|
$revertEnable();
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
$string = file_get_contents($filename);
|
$string = file_get_contents($filename);
|
||||||
$plugin_info = json_decode($string, true);
|
$plugin_info = json_decode($string, true);
|
||||||
if(!$plugin_info) {
|
if(!$plugin_info) {
|
||||||
self::$error = 'Cannot load plugin info ' . $plugin_name . '.json';
|
self::$error = 'Cannot load plugin info ' . $plugin_name . '.json';
|
||||||
|
$revertEnable();
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!isset($plugin_info['uninstall'])) {
|
if(!isset($plugin_info['uninstall'])) {
|
||||||
self::$error = "Plugin doesn't have uninstall options defined. Skipping...";
|
self::$error = "Plugin doesn't have uninstall options defined. Skipping...";
|
||||||
|
$revertEnable();
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
$success = true;
|
$success = true;
|
||||||
foreach($plugin_info['uninstall'] as $file) {
|
foreach($plugin_info['uninstall'] as $file) {
|
||||||
if(strpos($file, '/') === 0) {
|
if(str_starts_with($file, '/')) {
|
||||||
$success = false;
|
$success = false;
|
||||||
self::$error = "You cannot use absolute paths (starting with slash - '/'): " . $file;
|
self::$error = "You cannot use absolute paths (starting with slash - '/'): " . $file;
|
||||||
break;
|
break;
|
||||||
@ -709,24 +795,19 @@ class Plugins {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if($success) {
|
if(!$success) {
|
||||||
foreach($plugin_info['uninstall'] as $file) {
|
$revertEnable();
|
||||||
if(!deleteDirectory(BASE . $file)) {
|
return false;
|
||||||
self::$warnings[] = 'Cannot delete: ' . $file;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
$cache = Cache::getInstance();
|
|
||||||
if($cache->enabled()) {
|
|
||||||
$cache->delete('templates');
|
|
||||||
$cache->delete('hooks');
|
|
||||||
$cache->delete('template_menus');
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
foreach($plugin_info['uninstall'] as $file) {
|
||||||
|
if(!deleteDirectory(BASE . $file)) {
|
||||||
|
self::$warnings[] = 'Cannot delete: ' . $file;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
clearCache();
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static function is_installed($plugin_name, $version): bool
|
public static function is_installed($plugin_name, $version): bool
|
||||||
|
@ -166,8 +166,14 @@ function get_template_menus(): array
|
|||||||
$target_blank = ($menu['blank'] == 1 ? ' target="blank"' : '');
|
$target_blank = ($menu['blank'] == 1 ? ' target="blank"' : '');
|
||||||
|
|
||||||
$color = (empty($menu['color']) ? ($configMenuCategories[$menu['category']]['default_links_color'] ?? ($configMenuDefaultColor ?? '')) : $menu['color']);
|
$color = (empty($menu['color']) ? ($configMenuCategories[$menu['category']]['default_links_color'] ?? ($configMenuDefaultColor ?? '')) : $menu['color']);
|
||||||
|
|
||||||
$color = str_replace('#', '', $color);
|
$color = str_replace('#', '', $color);
|
||||||
$style_color = (empty($color) ? '' : 'style="color: #' . $color . '"');
|
|
||||||
|
if (in_array('#' . $color, [$configMenuCategories[$menu['category']]['default_links_color'] ?? '', $configMenuDefaultColor])) {
|
||||||
|
$color = '';
|
||||||
|
}
|
||||||
|
|
||||||
|
$style_color = (empty($color) ? '' : 'style="color: #' . $color . ' !important"');
|
||||||
|
|
||||||
$menus[$menu['category']][] = [
|
$menus[$menu['category']][] = [
|
||||||
'name' => $menu['name'],
|
'name' => $menu['name'],
|
||||||
|
@ -4,7 +4,9 @@
|
|||||||
let colors = [];
|
let colors = [];
|
||||||
|
|
||||||
{% for cat, menu in menus %}
|
{% for cat, menu in menus %}
|
||||||
last_id[{{ cat }}] = {{ last_id[cat] }};
|
{% if config('menu_categories')[cat] is not empty %}
|
||||||
|
last_id[{{ cat }}] = {{ last_id[cat] }};
|
||||||
|
{% endif %}
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
|
|
||||||
{% set menuDefaultLinksColor = config('menu_default_links_color') %}
|
{% set menuDefaultLinksColor = config('menu_default_links_color') %}
|
||||||
|
@ -1 +1 @@
|
|||||||
<input type="submit" name="{{ button_name }}" value="{{ button_name }}" />
|
<input {% if noSubmit is not defined %}type="submit"{% endif %} name="{{ button_name }}" value="{{ button_name }}" />
|
||||||
|
@ -114,7 +114,7 @@
|
|||||||
{% else %}
|
{% else %}
|
||||||
<b>Before you can create a guild you must login.</b>
|
<b>Before you can create a guild you must login.</b>
|
||||||
<br/>
|
<br/>
|
||||||
<form action="?subtopic=accountmanagement&redirect={{ getLink('guilds') }}" method="post">
|
<form action="{{ getLink('account/manage') }}?redirect={{ getLink('guilds') }}" method="post">
|
||||||
{{ csrf() }}
|
{{ csrf() }}
|
||||||
{% include('buttons.login.html.twig') %}
|
{% include('buttons.login.html.twig') %}
|
||||||
</form>
|
</form>
|
||||||
|
@ -215,7 +215,7 @@
|
|||||||
<tbody>
|
<tbody>
|
||||||
<tr>
|
<tr>
|
||||||
{% if not logged %}
|
{% if not logged %}
|
||||||
<form action="?subtopic=accountmanagement&redirect={{ getGuildLink(guild_name|url_encode, false) }}" method="post">
|
<form action="{{ getLink('account/manage') }}?redirect={{ getGuildLink(guild_name|url_encode, false) }}" method="post">
|
||||||
{{ csrf() }}
|
{{ csrf() }}
|
||||||
<td>
|
<td>
|
||||||
{{ include('buttons.login.html.twig') }}
|
{{ include('buttons.login.html.twig') }}
|
||||||
|
@ -56,10 +56,9 @@ the search criteria and start a new search.
|
|||||||
</td>
|
</td>
|
||||||
|
|
||||||
<td>
|
<td>
|
||||||
<form action="{{ getLink('houses/view') }}" method="post">
|
<a href="{{ house.link }}">
|
||||||
<input type="hidden" name="house" value="{{ house.name }}">
|
|
||||||
{{ include('buttons.view.html.twig') }}
|
{{ include('buttons.view.html.twig') }}
|
||||||
</form>
|
</a>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
|
@ -4,24 +4,25 @@
|
|||||||
<input type="hidden" name="redirect" value="{{ redirect }}" />
|
<input type="hidden" name="redirect" value="{{ redirect }}" />
|
||||||
{% endif %}
|
{% endif %}
|
||||||
<div class="TableContainer" >
|
<div class="TableContainer" >
|
||||||
<table class="Table4" cellpadding="0" cellspacing="0" >
|
<div class="CaptionContainer" >
|
||||||
<div class="CaptionContainer" >
|
<div class="CaptionInnerContainer" >
|
||||||
<div class="CaptionInnerContainer" >
|
<span class="CaptionEdgeLeftTop" style="background-image:url({{ template_path }}/images/global/content/box-frame-edge.gif);" ></span>
|
||||||
<span class="CaptionEdgeLeftTop" style="background-image:url({{ template_path }}/images/global/content/box-frame-edge.gif);" /></span>
|
<span class="CaptionEdgeRightTop" style="background-image:url({{ template_path }}/images/global/content/box-frame-edge.gif);" ></span>
|
||||||
<span class="CaptionEdgeRightTop" style="background-image:url({{ template_path }}/images/global/content/box-frame-edge.gif);" /></span>
|
<span class="CaptionBorderTop" style="background-image:url({{ template_path }}/images/global/content/table-headline-border.gif);" ></span>
|
||||||
<span class="CaptionBorderTop" style="background-image:url({{ template_path }}/images/global/content/table-headline-border.gif);" ></span>
|
<span class="CaptionVerticalLeft" style="background-image:url({{ template_path }}/images/global/content/box-frame-vertical.gif);" ></span>
|
||||||
<span class="CaptionVerticalLeft" style="background-image:url({{ template_path }}/images/global/content/box-frame-vertical.gif);" /></span>
|
<div class="Text" >Account Login</div>
|
||||||
<div class="Text" >Account Login</div>
|
<span class="CaptionVerticalRight" style="background-image:url({{ template_path }}/images/global/content/box-frame-vertical.gif);" ></span>
|
||||||
<span class="CaptionVerticalRight" style="background-image:url({{ template_path }}/images/global/content/box-frame-vertical.gif);" /></span>
|
<span class="CaptionBorderBottom" style="background-image:url({{ template_path }}/images/global/content/table-headline-border.gif);" ></span>
|
||||||
<span class="CaptionBorderBottom" style="background-image:url({{ template_path }}/images/global/content/table-headline-border.gif);" ></span>
|
<span class="CaptionEdgeLeftBottom" style="background-image:url({{ template_path }}/images/global/content/box-frame-edge.gif);" ></span>
|
||||||
<span class="CaptionEdgeLeftBottom" style="background-image:url({{ template_path }}/images/global/content/box-frame-edge.gif);" /></span>
|
<span class="CaptionEdgeRightBottom" style="background-image:url({{ template_path }}/images/global/content/box-frame-edge.gif);" ></span>
|
||||||
<span class="CaptionEdgeRightBottom" style="background-image:url({{ template_path }}/images/global/content/box-frame-edge.gif);" /></span>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
|
</div>
|
||||||
|
<table class="Table4" cellpadding="0" cellspacing="0" >
|
||||||
<tr>
|
<tr>
|
||||||
<td>
|
<td>
|
||||||
<div class="InnerTableContainer" >
|
<div class="InnerTableContainer" >
|
||||||
<table style="width:100%;" >
|
<table style="width:100%;" >
|
||||||
|
<tbody>
|
||||||
<tr>
|
<tr>
|
||||||
<td>
|
<td>
|
||||||
<div class="TableShadowContainerRightTop" >
|
<div class="TableShadowContainerRightTop" >
|
||||||
@ -30,20 +31,21 @@
|
|||||||
<div class="TableContentAndRightShadow" style="background-image:url({{ template_path }}/images/global/content/table-shadow-rm.gif);" >
|
<div class="TableContentAndRightShadow" style="background-image:url({{ template_path }}/images/global/content/table-shadow-rm.gif);" >
|
||||||
<div class="TableContentContainer" >
|
<div class="TableContentContainer" >
|
||||||
<table class="TableContent" width="100%" style="border:1px solid #faf0d7;" >
|
<table class="TableContent" width="100%" style="border:1px solid #faf0d7;" >
|
||||||
|
<tbody>
|
||||||
<tr>
|
<tr>
|
||||||
<td>
|
<td>
|
||||||
<table style="float: left; width: 370px;" cellpadding="0" cellspacing="0" >
|
<table style="float: left; width: 100%;" cellpadding="0" cellspacing="0" >
|
||||||
{{ hook('HOOK_ACCOUNT_LOGIN_BEFORE_ACCOUNT') }}
|
{{ hook('HOOK_ACCOUNT_LOGIN_BEFORE_ACCOUNT') }}
|
||||||
<tr>
|
<tr>
|
||||||
<td class="LabelV">
|
<td class="LabelV">
|
||||||
<span{% if error is not null %} class="red"{% endif %}>{{ account_login_by }}:</span>
|
<span{% if error is not null %} class="red"{% endif %}>{{ account_login_by }}:</span>
|
||||||
</td>
|
</td>
|
||||||
<td><input type="text" name="account_login" size="35" maxlength="{{ setting('core.account_login_by_email') ? '255' : '30' }}" autofocus /></td>
|
<td><input style="width: 100%;" type="text" name="account_login" size="35" maxlength="{{ setting('core.account_login_by_email') ? '255' : '30' }}" autofocus /></td>
|
||||||
</tr>
|
</tr>
|
||||||
{{ hook('HOOK_ACCOUNT_LOGIN_AFTER_ACCOUNT') }}
|
{{ hook('HOOK_ACCOUNT_LOGIN_AFTER_ACCOUNT') }}
|
||||||
<tr>
|
<tr>
|
||||||
<td class="LabelV" ><span{% if error is not null %} class="red"{% endif %}>Password:</span></td>
|
<td class="LabelV" ><span{% if error is not null %} class="red"{% endif %}>Password:</span></td>
|
||||||
<td><input type="password" name="password_login" size="35" maxlength="29" /></td>
|
<td><input style="width: 100%;" type="password" name="password_login" size="35" maxlength="29" /></td>
|
||||||
</tr>
|
</tr>
|
||||||
{{ hook('HOOK_ACCOUNT_LOGIN_AFTER_PASSWORD') }}
|
{{ hook('HOOK_ACCOUNT_LOGIN_AFTER_PASSWORD') }}
|
||||||
<tr>
|
<tr>
|
||||||
@ -53,17 +55,19 @@
|
|||||||
</tr>
|
</tr>
|
||||||
{{ hook('HOOK_ACCOUNT_LOGIN_AFTER_REMEMBER_ME') }}
|
{{ hook('HOOK_ACCOUNT_LOGIN_AFTER_REMEMBER_ME') }}
|
||||||
</table>
|
</table>
|
||||||
<div style="float: right; font-size: 1px;" >
|
</td>
|
||||||
<input type="hidden" name="page" value="overview" >
|
<td id="LoginFormButtonCell">
|
||||||
|
<div style="float: right;" >
|
||||||
{{ include('buttons.login.html.twig') }}
|
{{ include('buttons.login.html.twig') }}
|
||||||
</form>
|
|
||||||
<div style="width: 2px; height: 2px;" ></div>
|
<div style="width: 2px; height: 2px;" ></div>
|
||||||
<form action="{{ getLink('account/lost') }}" method="post" style="padding:0px;margin:0px;" >
|
<a href="{{ getLink('account/lost') }}" style="padding:0;margin:0;" >
|
||||||
{{ include('buttons.account_lost.html.twig') }}
|
{% set noSubmit = true %}
|
||||||
</form>
|
{{ include('buttons.account_lost.html.twig') }}
|
||||||
</div>
|
</a>
|
||||||
|
</div>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -75,35 +79,40 @@
|
|||||||
</div>
|
</div>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
|
</form>
|
||||||
<br/>
|
<br/>
|
||||||
|
|
||||||
<div style="text-align:center">
|
<div style="text-align:center">
|
||||||
<h1>New to {{ config.lua.serverName }}?</h1>
|
<h1>New to {{ config.lua.serverName }}?</h1>
|
||||||
</div>
|
</div>
|
||||||
<div class="TableContainer" >
|
<div class="TableContainer" >
|
||||||
<table class="Table4" cellpadding="0" cellspacing="0" >
|
<div class="CaptionContainer" >
|
||||||
<div class="CaptionContainer" >
|
<div class="CaptionInnerContainer" >
|
||||||
<div class="CaptionInnerContainer" >
|
<span class="CaptionEdgeLeftTop" style="background-image:url({{ template_path }}/images/global/content/box-frame-edge.gif);"></span>
|
||||||
<span class="CaptionEdgeLeftTop" style="background-image:url({{ template_path }}/images/global/content/box-frame-edge.gif);" /></span>
|
<span class="CaptionEdgeRightTop" style="background-image:url({{ template_path }}/images/global/content/box-frame-edge.gif);"></span>
|
||||||
<span class="CaptionEdgeRightTop" style="background-image:url({{ template_path }}/images/global/content/box-frame-edge.gif);" /></span>
|
<span class="CaptionBorderTop" style="background-image:url({{ template_path }}/images/global/content/table-headline-border.gif);" ></span>
|
||||||
<span class="CaptionBorderTop" style="background-image:url({{ template_path }}/images/global/content/table-headline-border.gif);" ></span>
|
<span class="CaptionVerticalLeft" style="background-image:url({{ template_path }}/images/global/content/box-frame-vertical.gif);"></span>
|
||||||
<span class="CaptionVerticalLeft" style="background-image:url({{ template_path }}/images/global/content/box-frame-vertical.gif);" /></span>
|
<div class="Text" >New Player</div>
|
||||||
<div class="Text" >New Player</div>
|
<span class="CaptionVerticalRight" style="background-image:url({{ template_path }}/images/global/content/box-frame-vertical.gif);"></span>
|
||||||
<span class="CaptionVerticalRight" style="background-image:url({{ template_path }}/images/global/content/box-frame-vertical.gif);" /></span>
|
<span class="CaptionBorderBottom" style="background-image:url({{ template_path }}/images/global/content/table-headline-border.gif);" ></span>
|
||||||
<span class="CaptionBorderBottom" style="background-image:url({{ template_path }}/images/global/content/table-headline-border.gif);" ></span>
|
<span class="CaptionEdgeLeftBottom" style="background-image:url({{ template_path }}/images/global/content/box-frame-edge.gif);"></span>
|
||||||
<span class="CaptionEdgeLeftBottom" style="background-image:url({{ template_path }}/images/global/content/box-frame-edge.gif);" /></span>
|
<span class="CaptionEdgeRightBottom" style="background-image:url({{ template_path }}/images/global/content/box-frame-edge.gif);"></span>
|
||||||
<span class="CaptionEdgeRightBottom" style="background-image:url({{ template_path }}/images/global/content/box-frame-edge.gif);" /></span>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
|
</div>
|
||||||
|
<table class="Table3" cellpadding="0" cellspacing="0" >
|
||||||
|
<tbody>
|
||||||
<tr>
|
<tr>
|
||||||
<td>
|
<td>
|
||||||
<div class="InnerTableContainer" >
|
<div class="InnerTableContainer" >
|
||||||
<table style="width:100%;" >
|
<table style="width:100%;" >
|
||||||
|
<tbody>
|
||||||
<tr>
|
<tr>
|
||||||
<td>
|
<td>
|
||||||
<div class="TableShadowContainerRightTop" >
|
<div class="TableShadowContainerRightTop" >
|
||||||
@ -112,6 +121,7 @@
|
|||||||
<div class="TableContentAndRightShadow" style="background-image:url({{ template_path }}/images/global/content/table-shadow-rm.gif);" >
|
<div class="TableContentAndRightShadow" style="background-image:url({{ template_path }}/images/global/content/table-shadow-rm.gif);" >
|
||||||
<div class="TableContentContainer" >
|
<div class="TableContentContainer" >
|
||||||
<table class="TableContent" width="100%" style="border:1px solid #faf0d7;" >
|
<table class="TableContent" width="100%" style="border:1px solid #faf0d7;" >
|
||||||
|
<tbody>
|
||||||
<tr>
|
<tr>
|
||||||
<td >
|
<td >
|
||||||
<div style="float: right; margin-top: 20px;" >
|
<div style="float: right; margin-top: 20px;" >
|
||||||
@ -129,9 +139,12 @@
|
|||||||
<div style="margin-left: 10px;" >
|
<div style="margin-left: 10px;" >
|
||||||
<p>... where hardcore gaming meets fantasy.</p>
|
<p>... where hardcore gaming meets fantasy.</p>
|
||||||
<p>... where friendships last a lifetime.</p>
|
<p>... where friendships last a lifetime.</p>
|
||||||
<p>... unites adventurers since 2017!</p>
|
<p>... unites adventurers since 1997!</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -143,10 +156,12 @@
|
|||||||
</div>
|
</div>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
{{ hook('HOOK_ACCOUNT_LOGIN_AFTER_PAGE') }}
|
{{ hook('HOOK_ACCOUNT_LOGIN_AFTER_PAGE') }}
|
||||||
|
@ -36,6 +36,12 @@ img {
|
|||||||
width: expression(document.body.clientWidth > 1200? "1200px": "100%" );
|
width: expression(document.body.clientWidth > 1200? "1200px": "100%" );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#LoginFormButtonCell {
|
||||||
|
width: 145px;
|
||||||
|
vertical-align: top;
|
||||||
|
padding-right: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
#ContentRow {
|
#ContentRow {
|
||||||
position: relative;
|
position: relative;
|
||||||
top: 155px;
|
top: 155px;
|
||||||
|
@ -13,7 +13,7 @@
|
|||||||
<div class="BigButton" style="background-image:url({{ template_path }}/images/global/buttons/{{ tmp_image }}.gif)">
|
<div class="BigButton" style="background-image:url({{ template_path }}/images/global/buttons/{{ tmp_image }}.gif)">
|
||||||
<div onMouseOver="MouseOverBigButton(this);" onMouseOut="MouseOutBigButton(this);">
|
<div onMouseOver="MouseOverBigButton(this);" onMouseOut="MouseOutBigButton(this);">
|
||||||
<div class="BigButtonOver" style="background-image:url({{ template_path }}/images/global/buttons/{{ tmp_image }}_over.gif);" ></div>
|
<div class="BigButtonOver" style="background-image:url({{ template_path }}/images/global/buttons/{{ tmp_image }}_over.gif);" ></div>
|
||||||
<input class="BigButtonText" type="submit" value="{{ button_name }}">
|
<input class="BigButtonText" {% if noSubmit is not defined %}type="submit"{% endif %} value="{{ button_name }}">
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{% endapply %}
|
{% endapply %}
|
||||||
|
@ -1,3 +1,3 @@
|
|||||||
{% set button_name = 'Logout' %}
|
{% set button_name = 'Logout' %}
|
||||||
{% set button_image = '_sbutton_logout' %}
|
{% set button_color = 'red' %}
|
||||||
{% include('buttons.base.html.twig') %}
|
{% include('buttons.base.html.twig') %}
|
@ -1,13 +1,13 @@
|
|||||||
<?php
|
<?php
|
||||||
$config['menu_default_links_color'] = '#ffffff';
|
$config['menu_default_links_color'] = '#ffffff';
|
||||||
|
|
||||||
$config['menu_categories'] = array(
|
$config['menu_categories'] = [
|
||||||
MENU_CATEGORY_NEWS => array('id' => 'news', 'name' => 'Latest News'),
|
MENU_CATEGORY_NEWS => ['id' => 'news', 'name' => 'Latest News'],
|
||||||
MENU_CATEGORY_ACCOUNT => array('id' => 'account', 'name' => 'Account'),
|
MENU_CATEGORY_ACCOUNT => ['id' => 'account', 'name' => 'Account'],
|
||||||
MENU_CATEGORY_COMMUNITY => array('id' => 'community', 'name' => 'Community'),
|
MENU_CATEGORY_COMMUNITY => ['id' => 'community', 'name' => 'Community'],
|
||||||
MENU_CATEGORY_FORUM => array('id' => 'forum', 'name' => 'Forum'),
|
MENU_CATEGORY_FORUM => ['id' => 'forum', 'name' => 'Forum'],
|
||||||
MENU_CATEGORY_LIBRARY => array('id' => 'library', 'name' => 'Library'),
|
MENU_CATEGORY_LIBRARY => ['id' => 'library', 'name' => 'Library'],
|
||||||
MENU_CATEGORY_SHOP => array('id' => 'shops', 'name' => 'Shop')
|
MENU_CATEGORY_SHOP => ['id' => 'shops', 'name' => 'Shop'],
|
||||||
);
|
];
|
||||||
|
|
||||||
$config['menus'] = require __DIR__ . '/menus.php';
|
$config['menus'] = require __DIR__ . '/menus.php';
|
||||||
|
@ -7,7 +7,7 @@ if(strlen($text) > 100) // max limit
|
|||||||
putenv('GDFONTPATH=' . __DIR__);
|
putenv('GDFONTPATH=' . __DIR__);
|
||||||
|
|
||||||
// create image
|
// create image
|
||||||
$image = imagecreatetruecolor(250, 28);
|
$image = imagecreatetruecolor(600, 28);
|
||||||
|
|
||||||
// make the background transparent
|
// make the background transparent
|
||||||
imagecolortransparent($image, imagecolorallocate($image, 0, 0, 0));
|
imagecolortransparent($image, imagecolorallocate($image, 0, 0, 0));
|
||||||
@ -17,7 +17,7 @@ $font = getenv('GDFONTPATH') . DIRECTORY_SEPARATOR . 'martel.ttf';
|
|||||||
imagettftext($image, 18, 0, 4, 20, imagecolorallocate($image, 240, 209, 164), $font, $text);
|
imagettftext($image, 18, 0, 4, 20, imagecolorallocate($image, 240, 209, 164), $font, $text);
|
||||||
|
|
||||||
// header mime type
|
// header mime type
|
||||||
header('Content-type: image/gif');
|
header('Content-type: image/png');
|
||||||
|
|
||||||
// output image to browser
|
// output image to browser
|
||||||
imagegif($image);
|
imagepng($image);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user