mirror of
https://github.com/slawkens/myaac.git
synced 2025-09-14 20:43:34 +02:00
Compare commits
104 Commits
Author | SHA1 | Date | |
---|---|---|---|
![]() |
c5c266b023 | ||
![]() |
9483cfaad8 | ||
![]() |
b4ed68dfd7 | ||
![]() |
39b19ed4c8 | ||
![]() |
580b888b1d | ||
![]() |
19d3e15c11 | ||
![]() |
5a68d204bb | ||
![]() |
e09fe51774 | ||
![]() |
b2c9eb4745 | ||
![]() |
d96787ec21 | ||
![]() |
5df5c64e4f | ||
![]() |
3c4b19743f | ||
![]() |
0e25ce553c | ||
![]() |
2e4bbeb7f7 | ||
![]() |
cb6640343b | ||
![]() |
4658d1cb29 | ||
![]() |
b25feaadf6 | ||
![]() |
2693db5f6f | ||
![]() |
8195b44061 | ||
![]() |
035d0c1012 | ||
![]() |
5a953ce901 | ||
![]() |
01660bd2b4 | ||
![]() |
5b858c521a | ||
![]() |
d1c5a189c3 | ||
![]() |
de1bb37bcb | ||
![]() |
e0036a3e32 | ||
![]() |
7f4737631d | ||
![]() |
317505bf19 | ||
![]() |
55b8645d3f | ||
![]() |
ffb8f0879b | ||
![]() |
79f5614dce | ||
![]() |
2c347d0eac | ||
![]() |
d40178104b | ||
![]() |
55543ee881 | ||
![]() |
d39386cfab | ||
![]() |
b5bbae62b0 | ||
![]() |
71ef30d35e | ||
![]() |
263c7bed07 | ||
![]() |
1458b7a412 | ||
![]() |
3e00c52128 | ||
![]() |
d73aceb272 | ||
![]() |
1c55d4a220 | ||
![]() |
1edf8833c8 | ||
![]() |
0ffc5f68b4 | ||
![]() |
81b6652738 | ||
![]() |
e5b4d2c6b3 | ||
![]() |
da1830371f | ||
![]() |
6ba04967ed | ||
![]() |
f503e140f3 | ||
![]() |
f875f3cd20 | ||
![]() |
72632c7b45 | ||
![]() |
1f2e7bd72d | ||
![]() |
016138ab55 | ||
![]() |
77efb80a12 | ||
![]() |
02eea950e4 | ||
![]() |
2793c41655 | ||
![]() |
62d3c198d5 | ||
![]() |
ef62b53cec | ||
![]() |
7181b988e9 | ||
![]() |
8b0b123f42 | ||
![]() |
f98332c698 | ||
![]() |
b1660bf27a | ||
![]() |
191ad25eb2 | ||
![]() |
7469be6efb | ||
![]() |
47a3bfd265 | ||
![]() |
5ae0be2323 | ||
![]() |
42154d55a0 | ||
![]() |
9dcc08ee6e | ||
![]() |
ba537b42bb | ||
![]() |
9c318f9012 | ||
![]() |
a88103a956 | ||
![]() |
e26e6f3a1c | ||
![]() |
08d67a07e0 | ||
![]() |
6e9a89cb2e | ||
![]() |
e3aa3d4031 | ||
![]() |
156a68f8bd | ||
![]() |
6a28da5d33 | ||
![]() |
ee32384dca | ||
![]() |
19afd73e8a | ||
![]() |
eead6a2975 | ||
![]() |
11b11dd3ee | ||
![]() |
483155cf4c | ||
![]() |
55dbade8d5 | ||
![]() |
d1bc63d07a | ||
![]() |
83a91ec540 | ||
![]() |
7b43c972dd | ||
![]() |
3fdf1d3f44 | ||
![]() |
764db0c203 | ||
![]() |
538076bc45 | ||
![]() |
4327b66f91 | ||
![]() |
3f27724569 | ||
![]() |
9c0c2bbece | ||
![]() |
946144016b | ||
![]() |
5c3b01aca4 | ||
![]() |
50983a2b85 | ||
![]() |
765886f0c7 | ||
![]() |
8ea78a5852 | ||
![]() |
063cbab93e | ||
![]() |
f1670f4012 | ||
![]() |
6fcf0f7117 | ||
![]() |
7a07763625 | ||
![]() |
8d2172a649 | ||
![]() |
b8f65207b6 | ||
![]() |
ea675afe86 |
2
.github/workflows/phplint.yml
vendored
2
.github/workflows/phplint.yml
vendored
@@ -10,7 +10,7 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v3
|
- uses: actions/checkout@v3
|
||||||
- uses: overtrue/phplint@7.4
|
- uses: overtrue/phplint@3.4.0
|
||||||
with:
|
with:
|
||||||
path: .
|
path: .
|
||||||
options: --exclude="system/libs/polyfill-mbstring/bootstrap80.php"
|
options: --exclude="system/libs/polyfill-mbstring/bootstrap80.php"
|
||||||
|
8
.gitignore
vendored
8
.gitignore
vendored
@@ -11,10 +11,12 @@ vendor
|
|||||||
|
|
||||||
# npm
|
# npm
|
||||||
node_modules
|
node_modules
|
||||||
|
tools/ext
|
||||||
|
|
||||||
# cypress
|
# cypress
|
||||||
cypress.env.json
|
cypress.env.json
|
||||||
cypress/e2e/2-advanced-examples
|
cypress/e2e/2-advanced-examples
|
||||||
|
cypress/screenshots
|
||||||
|
|
||||||
# created by release.sh
|
# created by release.sh
|
||||||
releases
|
releases
|
||||||
@@ -35,6 +37,12 @@ images/guilds/*
|
|||||||
images/editor/*
|
images/editor/*
|
||||||
!images/editor/index.html
|
!images/editor/index.html
|
||||||
|
|
||||||
|
# gallery images
|
||||||
|
images/gallery/*
|
||||||
|
!images/gallery/index.html
|
||||||
|
!images/gallery/demon.jpg
|
||||||
|
!images/gallery/demon_thumb.gif
|
||||||
|
|
||||||
# cache
|
# cache
|
||||||
system/cache/*
|
system/cache/*
|
||||||
!system/cache/index.html
|
!system/cache/index.html
|
||||||
|
112
CHANGELOG.md
112
CHANGELOG.md
@@ -1,5 +1,117 @@
|
|||||||
# Changelog
|
# Changelog
|
||||||
|
|
||||||
|
## [0.8.21 - 09.01.2025]
|
||||||
|
|
||||||
|
### Added
|
||||||
|
* support for button_color (red, green, blue) (https://github.com/slawkens/myaac/commit/b2c9eb474513650a014352d820602b8007eb3bf3)
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
* Set default_socket_timeout for ipinfo.io checkup (https://github.com/slawkens/myaac/commit/e09fe517747e4f462c72395ede39759bf308d171)
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
* XSS in forum (https://github.com/slawkens/myaac/commit/580b888b1dd1317d7ccf5f888536159c3bfe4324)
|
||||||
|
* move_thread by unauthorized user (https://github.com/slawkens/myaac/commit/19d3e15c114de65ef6c379e4da66d32138a0e7c4)
|
||||||
|
* change sex wrong price deducted (https://github.com/slawkens/myaac/commit/39b19ed4c8724385ee80f7d02219e84f6b3f5d95)
|
||||||
|
* fix for TFS 1.4.2 exception on creating character, where conditions column is NULL (https://github.com/slawkens/myaac/commit/5a68d204bb24392d424efde4133b0a3222e788bb)
|
||||||
|
|
||||||
|
## [0.8.20 - 26.11.2024]
|
||||||
|
|
||||||
|
Small fix regarding the latest release and the linux system.
|
||||||
|
|
||||||
|
Download this one, instead of the 0.8.19 if you are using linux.
|
||||||
|
|
||||||
|
If you are using 0.8.19, make this update:
|
||||||
|
|
||||||
|
The fix is to make this change in the system/libs/hooks.php
|
||||||
|
|
||||||
|
Change
|
||||||
|
```
|
||||||
|
require_once LIBS . 'src/plugins.php';
|
||||||
|
```
|
||||||
|
|
||||||
|
Into:
|
||||||
|
```
|
||||||
|
require_once LIBS . 'src/Plugins.php';
|
||||||
|
```
|
||||||
|
|
||||||
|
Yeah, we just changed 'p' to 'P' - that's just case-sensitive nature of linux.
|
||||||
|
|
||||||
|
## [0.8.19 - 19.11.2024]
|
||||||
|
|
||||||
|
### Added
|
||||||
|
* syntactic sugar for db structure changes (https://github.com/slawkens/myaac/commit/e0036a3e32e8c37c28665dd7ae18ac9b8fc167d9)
|
||||||
|
* add "None" vocation to highscores (https://github.com/slawkens/myaac/commit/7f4737631dfcb6ec255c6d9301304d3bf222a033)
|
||||||
|
* new hooks in account manage + create (https://github.com/slawkens/myaac/commit/d40178104b0f411b9672102c49a4b87ac16e1779)
|
||||||
|
* new functions: getGuildNameById($id) + getGuildLogoById($id) + Plugins::installMenus($templateName, $menus, $clearOld = false) (https://github.com/slawkens/myaac/commit/de1bb37bcb6d111fbdf185ef9c2fec7e7f05053e + https://github.com/slawkens/myaac/commit/d1c5a189c3b182a36933ed507c6ae36b61fe1d45 + https://github.com/slawkens/myaac/commit/5a953ce901522d080aa16fcfcd268e9544bf6e1a)
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
* set default encryption to sha1 (https://github.com/slawkens/myaac/commit/55b8645d3f38c47f4aafc1906625b676c429cdd5)
|
||||||
|
* prefer get_browser_real_ip() over REMOTE_ADDR (cause of Cloudflare and similar services) (https://github.com/slawkens/myaac/commit/b5bbae62b09db50a73bfa3e288245ea718005aa9)
|
||||||
|
* allow account_create_character_create even if account_mail_verify is activated (https://github.com/slawkens/myaac/commit/1edf8833c844b25372017e4affaf12aa02cdce7a)
|
||||||
|
* better https detection (patched from develop) (https://github.com/slawkens/myaac/commit/d73aceb272d0615244fcfd0998d75e6c6c15d3fe)
|
||||||
|
* require login before create new thread (#261, @anyeor)
|
||||||
|
* better tables.headline.html.twig (patched from 1.0) (https://github.com/slawkens/myaac/commit/71ef30d35ecb2f876e9b861f211f737302bf408e)
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
* bans page fixed functions getPlayerNameByAccount + getPlayerNameById (https://github.com/slawkens/myaac/commit/d39386cfabfa13e5c916ead69e2f8f90fdc47f4f)
|
||||||
|
* account verify - do not allow login without verified email (https://github.com/slawkens/myaac/commit/1edf8833c844b25372017e4affaf12aa02cdce7a, Thanks @anyeor)
|
||||||
|
* if <flags> is not present in monster.xml (https://github.com/slawkens/myaac/commit/81b6652738a7b04be3980cbf55443a6fbe437b34)
|
||||||
|
* $db->update when there is null value (https://github.com/slawkens/myaac/commit/1458b7a412ff6875cebba1b88d380f7f959ee6be)
|
||||||
|
* error on $db __destruct saving current script name in CLI (https://github.com/slawkens/myaac/commit/01660bd2b4967315c0e16d2f83c6c39f0b78683d)
|
||||||
|
|
||||||
|
## [0.8.18 - 29.05.2024]
|
||||||
|
|
||||||
|
### Added
|
||||||
|
* hook in guilds page to support guild wars (https://github.com/slawkens/myaac/commit/f875f3cd2059fac5c23a08ce73dd8621a66613e0)
|
||||||
|
|
||||||
|
## [0.8.17 - 18.05.2024]
|
||||||
|
|
||||||
|
### Added
|
||||||
|
* TwigTypeCastingExtension (https://github.com/slawkens/myaac/commit/7181b988e9518320d57486670ca4e2d3b2fe1cfa)
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
* fix XSS in creatures.php (https://github.com/slawkens/myaac/commit/02eea950e4fd756e8d5c32e56181986d51f5ac70, @gesior)
|
||||||
|
* don't allow redirect to external website (https://github.com/slawkens/myaac/commit/ef62b53cec5a479cc85aa15940ad9ebbcefde876)
|
||||||
|
* change_info if account_country is disabled (https://github.com/slawkens/myaac/commit/62d3c198d567541a90900fe2d7ede070e7b1ff68)
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
* use word-break: break-all in guilds description + character comment (https://github.com/slawkens/myaac/commit/191ad25eb2d4c1cec6f6668da7a345fec0ad2a7f)
|
||||||
|
* set default status_ip to 127.0.0.1, most server are hosted locally anyway (https://github.com/slawkens/myaac/commit/2793c41655b47f7db295143a298ccda70f11462b)
|
||||||
|
|
||||||
|
## [0.8.16 - 12.02.2024]
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
* broken installation
|
||||||
|
* database and finish step warnings/errors (https://github.com/slawkens/myaac/pull/245, @danilopucci)
|
||||||
|
* silently ignore if the hook does not exist
|
||||||
|
|
||||||
|
## [0.8.15 - 09.12.2023]
|
||||||
|
|
||||||
|
More security fixes, especially in bugtracker.
|
||||||
|
|
||||||
|
## [0-8.14 - 27.11.2023]
|
||||||
|
Security fixes.
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
* XSS vulnerability in bugtracker (https://github.com/slawkens/myaac/commit/83a91ec540072d319dd338abff45f8d5ebf48190)
|
||||||
|
* XSS vulnerability in forum (https://github.com/slawkens/myaac/commit/d1bc63d07ad88a143358cacd2c417891eea74dcc + https://github.com/slawkens/myaac/commit/55dbade8d5280c5baed45e5f7ebc3613b8e9b9e8)
|
||||||
|
* Session Fixation (https://github.com/slawkens/myaac/commit/483155cf4c1e3068aaee0d44541dfa61f6223379)
|
||||||
|
* displaying ban info on account page (https://github.com/slawkens/myaac/commit/764db0c203d1826ffce3a5a78f83a97e56bd0685)
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
* Clear some additional cache keys - like database cache (https://github.com/slawkens/myaac/commit/4327b66f915d06dce504211692173606b9ef3b4e)
|
||||||
|
|
||||||
|
## [0.8.13 - 16.09.2023]
|
||||||
|
|
||||||
|
### Added
|
||||||
|
* latest client versions to config (https://github.com/slawkens/myaac/commit/765886f0c782807400c429577cde5e45bd7c308f)
|
||||||
|
* patching from develop - twig context for hooks (https://github.com/slawkens/myaac/commit/f1670f4012cc7595433fe0b1937c1f9b15a60b07)
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
* fixed XSS vulnerability in some pages (https://github.com/slawkens/myaac/commit/5c3b01aca4f3cfe8abc86b8ce48194b2da87b808)
|
||||||
|
|
||||||
|
Nothing more or less!
|
||||||
|
|
||||||
## [0.8.12 - 07.08.2023]
|
## [0.8.12 - 07.08.2023]
|
||||||
I've moved the repository back to my personal account. (Just so you know!)
|
I've moved the repository back to my personal account. (Just so you know!)
|
||||||
|
|
||||||
|
38
README.md
38
README.md
@@ -1,24 +1,29 @@
|
|||||||
# [MyAAC](https://my-aac.org)
|
# [MyAAC](https://my-aac.org)
|
||||||
|
|
||||||
[](https://travis-ci.org/github/slawkens/myaac)
|
|
||||||
[](https://opensource.org/licenses/gpl-license)
|
|
||||||
[](https://github.com/slawkens/myaac/releases)
|
|
||||||
[](https://github.com/slawkens/myaac/blob/d8b3b4135827ee17e3c6d41f08a925e718c587ed/.travis.yml#L3)
|
|
||||||
[](https://discord.gg/2J39Wus)
|
|
||||||
[](https://github.com/slawkens/myaac/issues?q=is%3Aissue+is%3Aclosed)
|
|
||||||
|
|
||||||
MyAAC is a free and open-source Automatic Account Creator (AAC) written in PHP. It is a fork of the [Gesior](https://github.com/gesior/Gesior2012) project. It supports only MySQL databases.
|
MyAAC is a free and open-source Automatic Account Creator (AAC) written in PHP. It is a fork of the [Gesior](https://github.com/gesior/Gesior2012) project. It supports only MySQL databases.
|
||||||
|
|
||||||
Official website: https://my-aac.org
|
Official website: https://my-aac.org
|
||||||
|
|
||||||
|
[](https://github.com/slawkens/myaac/actions)
|
||||||
|
[](https://opensource.org/licenses/gpl-license)
|
||||||
|
[](https://github.com/slawkens/myaac/releases)
|
||||||
|
[](https://discord.gg/2J39Wus)
|
||||||
|
[](https://github.com/slawkens/myaac/issues?q=is%3Aissue+is%3Aclosed)
|
||||||
|
|
||||||
|
| Version | Status | Branch | Requirements |
|
||||||
|
|:--------|:-----------------------|:--------|:---------------|
|
||||||
|
| **1.x** | **Active development** | develop | **PHP >= 8.1** |
|
||||||
|
| 0.9.x | Not developed anymore | 0.9 | PHP >= 7.2.5 |
|
||||||
|
| 0.8.x | Active support | master | PHP >= 7.2.5 |
|
||||||
|
| 0.7.x | End Of Life | 0.7 | PHP >= 5.3.3 |
|
||||||
|
|
||||||
### Requirements
|
### Requirements
|
||||||
|
|
||||||
- PHP 7.2.5 or later
|
|
||||||
- MySQL database
|
- MySQL database
|
||||||
- PDO PHP Extension
|
- PHP Extensions: pdo, xml, json
|
||||||
- XML PHP Extension
|
- (optional) apache2 mod_rewrite (to use friendly_urls)
|
||||||
- ZIP PHP Extension
|
- (optional) zip PHP Extension (to install plugins)
|
||||||
- (optional) mod_rewrite to use friendly_urls
|
- (optional) gd PHP Extension (for generating signature images)
|
||||||
|
|
||||||
### Installation
|
### Installation
|
||||||
|
|
||||||
@@ -42,7 +47,8 @@ Official website: https://my-aac.org
|
|||||||
|
|
||||||
### Configuration
|
### Configuration
|
||||||
|
|
||||||
Check *config.php* to get more informations.
|
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).
|
||||||
|
|
||||||
Use *config.local.php* for your local configuration changes.
|
Use *config.local.php* for your local configuration changes.
|
||||||
|
|
||||||
### Branches
|
### Branches
|
||||||
@@ -73,6 +79,12 @@ Look: [Contributing](https://github.com/otsoft/myaac/wiki/Contributing) in our w
|
|||||||
|
|
||||||
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 contribute to the project - visit our website at https://www.my-aac.org
|
||||||
|
|
||||||
|
## Project supported by JetBrains
|
||||||
|
|
||||||
|
Many thanks to Jetbrains for kindly providing a license for me to work on this and other open-source projects.
|
||||||
|
|
||||||
|
[](https://www.jetbrains.com/?from=https://github.com/slawkens)
|
||||||
|
|
||||||
### License
|
### License
|
||||||
|
|
||||||
This program and all associated files are released under the GNU Public License.
|
This program and all associated files are released under the GNU Public License.
|
||||||
|
16
SECURITY.md
Normal file
16
SECURITY.md
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
# Security Policy
|
||||||
|
|
||||||
|
## Supported Versions
|
||||||
|
|
||||||
|
| Version | Supported |
|
||||||
|
| ------- | ------------------ |
|
||||||
|
| 1.x.y | :white_check_mark: |
|
||||||
|
| 0.9.x | :x: |
|
||||||
|
| 0.8.x | :white_check_mark: |
|
||||||
|
| < 0.7 | :x: |
|
||||||
|
|
||||||
|
## Reporting a Vulnerability
|
||||||
|
|
||||||
|
If you found a security vulnerability, please write an email to security@my-aac.org
|
||||||
|
|
||||||
|
All reports will be taken very seriously, and a fix will be posted as soon as possible.
|
@@ -426,7 +426,7 @@ else if ($id > 0 && isset($account) && $account->isLoaded()) {
|
|||||||
<div class="box-body">
|
<div class="box-body">
|
||||||
<form action="<?php echo $base; ?>" method="post">
|
<form action="<?php echo $base; ?>" method="post">
|
||||||
<div class="input-group input-group-sm">
|
<div class="input-group input-group-sm">
|
||||||
<input type="text" class="form-control" name="search_name" value="<?php echo $search_account; ?>"
|
<input type="text" class="form-control" name="search_name" value="<?php echo escapeHtml($search_account); ?>"
|
||||||
maxlength="32" size="32">
|
maxlength="32" size="32">
|
||||||
<span class="input-group-btn">
|
<span class="input-group-btn">
|
||||||
<button type="submit" type="button" class="btn btn-info btn-flat">Search</button>
|
<button type="submit" type="button" class="btn btn-info btn-flat">Search</button>
|
||||||
|
@@ -10,8 +10,8 @@
|
|||||||
defined('MYAAC') or die('Direct access not allowed!');
|
defined('MYAAC') or die('Direct access not allowed!');
|
||||||
$title = 'Load items.xml';
|
$title = 'Load items.xml';
|
||||||
|
|
||||||
require LIBS . 'items.php';
|
require_once LIBS . 'items.php';
|
||||||
require LIBS . 'weapons.php';
|
require_once LIBS . 'weapons.php';
|
||||||
|
|
||||||
$twig->display('admin.items.html.twig');
|
$twig->display('admin.items.html.twig');
|
||||||
|
|
||||||
|
@@ -210,7 +210,7 @@ if ($id > 0) {
|
|||||||
|
|
||||||
if ($hasBlessingsColumn) {
|
if ($hasBlessingsColumn) {
|
||||||
$blessings = $_POST['blessings'];
|
$blessings = $_POST['blessings'];
|
||||||
verify_number($blessings, 'Blessings', 2);
|
verify_number($blessings, 'Blessings', 3);
|
||||||
}
|
}
|
||||||
|
|
||||||
$balance = $_POST['balance'];
|
$balance = $_POST['balance'];
|
||||||
@@ -784,7 +784,7 @@ else if ($id > 0 && isset($player) && $player->isLoaded())
|
|||||||
<div class="box-body">
|
<div class="box-body">
|
||||||
<form action="<?php echo $base; ?>" method="post">
|
<form action="<?php echo $base; ?>" method="post">
|
||||||
<div class="input-group input-group-sm">
|
<div class="input-group input-group-sm">
|
||||||
<input type="text" class="form-control" name="search_name" value="<?php echo $search_name; ?>"
|
<input type="text" class="form-control" name="search_name" value="<?php echo escapeHtml($search_name); ?>"
|
||||||
maxlength="32" size="32">
|
maxlength="32" size="32">
|
||||||
<span class="input-group-btn">
|
<span class="input-group-btn">
|
||||||
<button type="submit" type="button" class="btn btn-info btn-flat">Search</button>
|
<button type="submit" type="button" class="btn btn-info btn-flat">Search</button>
|
||||||
|
@@ -10,8 +10,6 @@
|
|||||||
defined('MYAAC') or die('Direct access not allowed!');
|
defined('MYAAC') or die('Direct access not allowed!');
|
||||||
$title = 'Plugin manager';
|
$title = 'Plugin manager';
|
||||||
|
|
||||||
require_once LIBS . 'plugins.php';
|
|
||||||
|
|
||||||
$twig->display('admin.plugins.form.html.twig');
|
$twig->display('admin.plugins.form.html.twig');
|
||||||
|
|
||||||
if (isset($_REQUEST['uninstall'])) {
|
if (isset($_REQUEST['uninstall'])) {
|
||||||
|
19
common.php
19
common.php
@@ -26,7 +26,7 @@
|
|||||||
if (version_compare(phpversion(), '7.2.5', '<')) die('PHP version 7.2.5 or higher is required.');
|
if (version_compare(phpversion(), '7.2.5', '<')) die('PHP version 7.2.5 or higher is required.');
|
||||||
|
|
||||||
define('MYAAC', true);
|
define('MYAAC', true);
|
||||||
define('MYAAC_VERSION', '0.8.12');
|
define('MYAAC_VERSION', '0.8.21');
|
||||||
define('DATABASE_VERSION', 33);
|
define('DATABASE_VERSION', 33);
|
||||||
define('TABLE_PREFIX', 'myaac_');
|
define('TABLE_PREFIX', 'myaac_');
|
||||||
define('START_TIME', microtime(true));
|
define('START_TIME', microtime(true));
|
||||||
@@ -100,6 +100,10 @@ for($i = 1; $i < $size; $i++)
|
|||||||
$basedir = str_replace(array('/admin', '/install', '/tools'), '', $basedir);
|
$basedir = str_replace(array('/admin', '/install', '/tools'), '', $basedir);
|
||||||
define('BASE_DIR', $basedir);
|
define('BASE_DIR', $basedir);
|
||||||
|
|
||||||
|
if (file_exists(BASE . 'config.local.php') && !defined('MYAAC_INSTALL')) {
|
||||||
|
require BASE . 'config.local.php';
|
||||||
|
}
|
||||||
|
|
||||||
if(!IS_CLI) {
|
if(!IS_CLI) {
|
||||||
if (isset($_SERVER['HTTP_HOST'][0])) {
|
if (isset($_SERVER['HTTP_HOST'][0])) {
|
||||||
$baseHost = $_SERVER['HTTP_HOST'];
|
$baseHost = $_SERVER['HTTP_HOST'];
|
||||||
@@ -111,12 +115,21 @@ if(!IS_CLI) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
define('SERVER_URL', 'http' . (isset($_SERVER['HTTPS'][0]) && strtolower($_SERVER['HTTPS']) === 'on' ? 's' : '') . '://' . $baseHost);
|
define('SERVER_URL', 'http' . (isHttps() ? 's' : '') . '://' . $baseHost);
|
||||||
define('BASE_URL', SERVER_URL . BASE_DIR . '/');
|
define('BASE_URL', SERVER_URL . BASE_DIR . '/');
|
||||||
define('ADMIN_URL', SERVER_URL . BASE_DIR . '/admin/');
|
define('ADMIN_URL', SERVER_URL . BASE_DIR . '/admin/');
|
||||||
|
|
||||||
//define('CURRENT_URL', BASE_URL . $_SERVER['REQUEST_URI']);
|
//define('CURRENT_URL', BASE_URL . $_SERVER['REQUEST_URI']);
|
||||||
|
if(@$config['env'] === 'dev') {
|
||||||
require SYSTEM . 'exception.php';
|
require SYSTEM . 'exception.php';
|
||||||
}
|
}
|
||||||
|
}
|
||||||
require SYSTEM . 'autoload.php';
|
require SYSTEM . 'autoload.php';
|
||||||
|
|
||||||
|
function isHttps(): bool
|
||||||
|
{
|
||||||
|
return
|
||||||
|
(!empty($_SERVER['HTTP_X_FORWARDED_PROTO']) && strtolower($_SERVER['HTTP_X_FORWARDED_PROTO']) === 'https')
|
||||||
|
|| (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off')
|
||||||
|
|| (isset($_SERVER['SERVER_PORT']) && (int) $_SERVER['SERVER_PORT'] === 443);
|
||||||
|
}
|
||||||
|
@@ -77,6 +77,7 @@ $config = array(
|
|||||||
'database_log' => false, // should database queries be logged and and saved into system/logs/database.log?
|
'database_log' => false, // should database queries be logged and and saved into system/logs/database.log?
|
||||||
'database_socket' => '', // set if you want to connect to database through socket (example: /var/run/mysqld/mysqld.sock)
|
'database_socket' => '', // set if you want to connect to database through socket (example: /var/run/mysqld/mysqld.sock)
|
||||||
'database_persistent' => false, // use database permanent connection (like server), may speed up your site
|
'database_persistent' => false, // use database permanent connection (like server), may speed up your site
|
||||||
|
'database_encryption' => 'sha1',
|
||||||
|
|
||||||
// multiworld system (only TFS 0.3)
|
// multiworld system (only TFS 0.3)
|
||||||
'multiworld' => false, // use multiworld system?
|
'multiworld' => false, // use multiworld system?
|
||||||
@@ -268,9 +269,9 @@ $config = array(
|
|||||||
|
|
||||||
// status, took automatically from config file if empty
|
// status, took automatically from config file if empty
|
||||||
'status_enabled' => true, // you can disable status checking by settings this to "false"
|
'status_enabled' => true, // you can disable status checking by settings this to "false"
|
||||||
'status_ip' => '',
|
'status_ip' => '127.0.0.1',
|
||||||
'status_port' => '',
|
'status_port' => '',
|
||||||
'status_timeout' => 2, // how long to wait for the initial response from the server (default: 2 seconds)
|
'status_timeout' => 1.0, // how long to wait for the initial response from the server (default: 1 second)
|
||||||
|
|
||||||
// how often to connect to server and update status (default: every minute)
|
// how often to connect to server and update status (default: every minute)
|
||||||
// if your status timeout in config.lua is bigger, that it will be used instead
|
// if your status timeout in config.lua is bigger, that it will be used instead
|
||||||
|
0
images/gallery/index.html
Normal file
0
images/gallery/index.html
Normal file
@@ -189,14 +189,14 @@ clearstatcache();
|
|||||||
if(is_writable(CACHE) && (MYAAC_OS != 'WINDOWS' || win_is_writable(CACHE))) {
|
if(is_writable(CACHE) && (MYAAC_OS != 'WINDOWS' || win_is_writable(CACHE))) {
|
||||||
if(!file_exists(BASE . 'install/ip.txt')) {
|
if(!file_exists(BASE . 'install/ip.txt')) {
|
||||||
$content = warning('AAC installation is disabled. To enable it make file <b>ip.txt</b> in install/ directory and put there your IP.<br/>
|
$content = warning('AAC installation is disabled. To enable it make file <b>ip.txt</b> in install/ directory and put there your IP.<br/>
|
||||||
Your IP is:<br /><b>' . $_SERVER['REMOTE_ADDR'] . '</b>', true);
|
Your IP is:<br /><b>' . get_browser_real_ip() . '</b>', true);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
$file_content = trim(file_get_contents(BASE . 'install/ip.txt'));
|
$file_content = trim(file_get_contents(BASE . 'install/ip.txt'));
|
||||||
$allow = false;
|
$allow = false;
|
||||||
$listIP = preg_split('/\s+/', $file_content);
|
$listIP = preg_split('/\s+/', $file_content);
|
||||||
foreach($listIP as $ip) {
|
foreach($listIP as $ip) {
|
||||||
if($_SERVER['REMOTE_ADDR'] == $ip) {
|
if(get_browser_real_ip() == $ip) {
|
||||||
$allow = true;
|
$allow = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -79,6 +79,8 @@ else {
|
|||||||
|
|
||||||
$account_used->setCustomField('web_flags', FLAG_ADMIN + FLAG_SUPER_ADMIN);
|
$account_used->setCustomField('web_flags', FLAG_ADMIN + FLAG_SUPER_ADMIN);
|
||||||
$account_used->setCustomField('country', 'us');
|
$account_used->setCustomField('country', 'us');
|
||||||
|
$account_used->setCustomField('email_verified', 1);
|
||||||
|
|
||||||
if($db->hasColumn('accounts', 'group_id'))
|
if($db->hasColumn('accounts', 'group_id'))
|
||||||
$account_used->setCustomField('group_id', $groups->getHighestId());
|
$account_used->setCustomField('group_id', $groups->getHighestId());
|
||||||
if($db->hasColumn('accounts', 'type'))
|
if($db->hasColumn('accounts', 'type'))
|
||||||
|
@@ -11,8 +11,10 @@ $error = false;
|
|||||||
require BASE . 'install/includes/config.php';
|
require BASE . 'install/includes/config.php';
|
||||||
|
|
||||||
ini_set('max_execution_time', 300);
|
ini_set('max_execution_time', 300);
|
||||||
|
|
||||||
|
@ob_end_flush();
|
||||||
ob_implicit_flush();
|
ob_implicit_flush();
|
||||||
ob_end_flush();
|
|
||||||
header('X-Accel-Buffering: no');
|
header('X-Accel-Buffering: no');
|
||||||
|
|
||||||
if(!$error) {
|
if(!$error) {
|
||||||
|
@@ -8,8 +8,10 @@ require BASE . 'install/includes/functions.php';
|
|||||||
require BASE . 'install/includes/locale.php';
|
require BASE . 'install/includes/locale.php';
|
||||||
|
|
||||||
ini_set('max_execution_time', 300);
|
ini_set('max_execution_time', 300);
|
||||||
|
|
||||||
|
@ob_end_flush();
|
||||||
ob_implicit_flush();
|
ob_implicit_flush();
|
||||||
ob_end_flush();
|
|
||||||
header('X-Accel-Buffering: no');
|
header('X-Accel-Buffering: no');
|
||||||
|
|
||||||
if(isset($config['installed']) && $config['installed'] && !isset($_SESSION['saved'])) {
|
if(isset($config['installed']) && $config['installed'] && !isset($_SESSION['saved'])) {
|
||||||
|
@@ -10,22 +10,21 @@ server {
|
|||||||
# this is very important, be sure its in your nginx conf - it prevents access to logs etc.
|
# this is very important, be sure its in your nginx conf - it prevents access to logs etc.
|
||||||
location ~ /system {
|
location ~ /system {
|
||||||
deny all;
|
deny all;
|
||||||
return 404;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
# block .htaccess
|
# block .htaccess, CHANGELOG.md, composer.json etc.
|
||||||
location ~ /\.ht {
|
# this is to prevent finding software versions
|
||||||
|
location ~\.(ht|md|json|dist)$ {
|
||||||
deny all;
|
deny all;
|
||||||
}
|
}
|
||||||
|
|
||||||
# block git files and folders
|
# block git files and folders
|
||||||
location ~ /\.git {
|
location ~ /\.git {
|
||||||
return 404;
|
|
||||||
deny all;
|
deny all;
|
||||||
}
|
}
|
||||||
|
|
||||||
location / {
|
location / {
|
||||||
try_files $uri $uri/ /index.php;
|
try_files $uri $uri/ /index.php?$query_string;;
|
||||||
}
|
}
|
||||||
|
|
||||||
location ~ \.php$ {
|
location ~ \.php$ {
|
||||||
|
@@ -4,12 +4,12 @@ defined('MYAAC') or die('Direct access not allowed!');
|
|||||||
$reward = config('account_mail_confirmed_reward');
|
$reward = config('account_mail_confirmed_reward');
|
||||||
|
|
||||||
$hasCoinsColumn = $db->hasColumn('accounts', 'coins');
|
$hasCoinsColumn = $db->hasColumn('accounts', 'coins');
|
||||||
if ($reward['coins'] > 0 && $hasCoinsColumn) {
|
if ($reward['coins'] > 0 && !$hasCoinsColumn) {
|
||||||
log_append('email_confirm_error.log', 'accounts.coins column does not exist.');
|
log_append('email_confirm_error.log', 'accounts.coins column does not exist.');
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!isset($account) || !$account->isLoaded()) {
|
if (!isset($account) || !$account->isLoaded()) {
|
||||||
log_append('email_confirm_error.log', 'Account not loaded.');
|
//log_append('email_confirm_error.log', 'Account not loaded.');
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -9,7 +9,6 @@ require_once __DIR__ . '/../../common.php';
|
|||||||
require_once SYSTEM . 'functions.php';
|
require_once SYSTEM . 'functions.php';
|
||||||
require_once SYSTEM . 'init.php';
|
require_once SYSTEM . 'init.php';
|
||||||
require_once SYSTEM . 'hooks.php';
|
require_once SYSTEM . 'hooks.php';
|
||||||
require_once LIBS . 'plugins.php';
|
|
||||||
|
|
||||||
if($argc !== 2) {
|
if($argc !== 2) {
|
||||||
echo 'This command expects one parameter: zip file name (plugin)' . PHP_EOL;
|
echo 'This command expects one parameter: zip file name (plugin)' . PHP_EOL;
|
||||||
|
@@ -99,4 +99,14 @@ $config['clients'] = [
|
|||||||
1291,
|
1291,
|
||||||
|
|
||||||
1300,
|
1300,
|
||||||
|
1310,
|
||||||
|
1311,
|
||||||
|
1312,
|
||||||
|
1316,
|
||||||
|
1320,
|
||||||
|
1321,
|
||||||
|
1322,
|
||||||
|
1330,
|
||||||
|
1332,
|
||||||
|
1340,
|
||||||
];
|
];
|
||||||
|
@@ -1146,9 +1146,30 @@ function clearCache()
|
|||||||
if ($cache->fetch('failed_logins', $tmp))
|
if ($cache->fetch('failed_logins', $tmp))
|
||||||
$cache->delete('failed_logins');
|
$cache->delete('failed_logins');
|
||||||
|
|
||||||
global $template_name;
|
foreach (get_templates() as $template) {
|
||||||
if ($cache->fetch('template_ini' . $template_name, $tmp))
|
if ($cache->fetch('template_ini_' . $template, $tmp)) {
|
||||||
$cache->delete('template_ini' . $template_name);
|
$cache->delete('template_ini_' . $template);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($cache->fetch('template_menus', $tmp)) {
|
||||||
|
$cache->delete('template_menus');
|
||||||
|
}
|
||||||
|
if ($cache->fetch('database_tables', $tmp)) {
|
||||||
|
$cache->delete('database_tables');
|
||||||
|
}
|
||||||
|
if ($cache->fetch('database_columns', $tmp)) {
|
||||||
|
$cache->delete('database_columns');
|
||||||
|
}
|
||||||
|
if ($cache->fetch('database_checksum', $tmp)) {
|
||||||
|
$cache->delete('database_checksum');
|
||||||
|
}
|
||||||
|
if ($cache->fetch('hooks', $tmp)) {
|
||||||
|
$cache->delete('hooks');
|
||||||
|
}
|
||||||
|
if ($cache->fetch('last_kills', $tmp)) {
|
||||||
|
$cache->delete('last_kills');
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
deleteDirectory(CACHE . 'signatures', ['index.html'], true);
|
deleteDirectory(CACHE . 'signatures', ['index.html'], true);
|
||||||
@@ -1244,7 +1265,40 @@ function getCustomPage($page, &$success)
|
|||||||
}
|
}
|
||||||
|
|
||||||
function escapeHtml($html) {
|
function escapeHtml($html) {
|
||||||
return htmlentities($html, ENT_QUOTES | ENT_SUBSTITUTE, 'UTF-8');
|
return htmlspecialchars($html);
|
||||||
|
}
|
||||||
|
|
||||||
|
function getGuildNameById($id)
|
||||||
|
{
|
||||||
|
global $db;
|
||||||
|
|
||||||
|
$guild = $db->query('SELECT `name` FROM `guilds` WHERE `id` = ' . (int)$id);
|
||||||
|
|
||||||
|
if ($guild->rowCount() > 0) {
|
||||||
|
return $guild->fetchColumn();
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
function getGuildLogoById($id)
|
||||||
|
{
|
||||||
|
global $db;
|
||||||
|
|
||||||
|
$logo = 'default.gif';
|
||||||
|
|
||||||
|
$query = $db->query('SELECT `logo_name` FROM `guilds` WHERE `id` = ' . (int)$id);
|
||||||
|
if ($query->rowCount() == 1) {
|
||||||
|
|
||||||
|
$query = $query->fetch(PDO::FETCH_ASSOC);
|
||||||
|
$guildLogo = $query['logo_name'];
|
||||||
|
|
||||||
|
if (!empty($guildLogo) && file_exists('images/guilds/' . $guildLogo)) {
|
||||||
|
$logo = $guildLogo;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return BASE_URL . 'images/guilds/' . $logo;
|
||||||
}
|
}
|
||||||
|
|
||||||
function displayErrorBoxWithBackButton($errors, $action = null) {
|
function displayErrorBoxWithBackButton($errors, $action = null) {
|
||||||
|
@@ -48,12 +48,21 @@ define('HOOK_ACCOUNT_CREATE_AFTER_VOCATION', ++$i);
|
|||||||
define('HOOK_ACCOUNT_CREATE_AFTER_TOWNS', ++$i);
|
define('HOOK_ACCOUNT_CREATE_AFTER_TOWNS', ++$i);
|
||||||
define('HOOK_ACCOUNT_CREATE_BEFORE_SUBMIT_BUTTON', ++$i);
|
define('HOOK_ACCOUNT_CREATE_BEFORE_SUBMIT_BUTTON', ++$i);
|
||||||
define('HOOK_ACCOUNT_CREATE_AFTER_FORM', ++$i);
|
define('HOOK_ACCOUNT_CREATE_AFTER_FORM', ++$i);
|
||||||
|
define('HOOK_ACCOUNT_CREATE_POST', ++$i);
|
||||||
define('HOOK_ACCOUNT_CREATE_AFTER_SUBMIT', ++$i);
|
define('HOOK_ACCOUNT_CREATE_AFTER_SUBMIT', ++$i);
|
||||||
|
define('HOOK_ACCOUNT_CREATE_AFTER_SAVED', ++$i);
|
||||||
|
define('HOOK_ACCOUNT_MANAGE_BEFORE_GENERAL_INFORMATION', ++$i);
|
||||||
|
define('HOOK_ACCOUNT_MANAGE_BEFORE_PUBLIC_INFORMATION', ++$i);
|
||||||
|
define('HOOK_ACCOUNT_MANAGE_BEFORE_ACCOUNT_LOGS', ++$i);
|
||||||
|
define('HOOK_ACCOUNT_MANAGE_BEFORE_CHARACTERS', ++$i);
|
||||||
define('HOOK_EMAIL_CONFIRMED', ++$i);
|
define('HOOK_EMAIL_CONFIRMED', ++$i);
|
||||||
|
define('HOOK_GUILDS_AFTER_INVITED_CHARACTERS', ++$i);
|
||||||
define('HOOK_FIRST', HOOK_STARTUP);
|
define('HOOK_FIRST', HOOK_STARTUP);
|
||||||
define('HOOK_LAST', HOOK_EMAIL_CONFIRMED);
|
define('HOOK_LAST', HOOK_EMAIL_CONFIRMED);
|
||||||
|
|
||||||
require_once LIBS . 'plugins.php';
|
require_once LIBS . 'plugins.php';
|
||||||
|
require_once LIBS . 'src/Plugins.php';
|
||||||
|
|
||||||
class Hook
|
class Hook
|
||||||
{
|
{
|
||||||
private $_name, $_type, $_file;
|
private $_name, $_type, $_file;
|
||||||
|
@@ -28,7 +28,8 @@ if($config['gzip_output'] && isset($_SERVER['HTTP_ACCEPT_ENCODING']) && strpos($
|
|||||||
ob_start('ob_gzhandler');
|
ob_start('ob_gzhandler');
|
||||||
|
|
||||||
// cache
|
// cache
|
||||||
require_once SYSTEM . 'libs/cache.php';
|
require_once LIBS . 'cache.php';
|
||||||
|
require_once LIBS . 'src/Cache.php';
|
||||||
$cache = Cache::getInstance();
|
$cache = Cache::getInstance();
|
||||||
|
|
||||||
// trim values we receive
|
// trim values we receive
|
||||||
@@ -116,7 +117,7 @@ if(!isset($config['highscores_ids_hidden']) || count($config['highscores_ids_hid
|
|||||||
$config['highscores_ids_hidden'] = array(0);
|
$config['highscores_ids_hidden'] = array(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
$config['account_create_character_create'] = config('account_create_character_create') && (!config('mail_enabled') || !config('account_mail_verify'));
|
$config['account_mail_verify'] = config('account_mail_verify') && config('mail_enabled');
|
||||||
|
|
||||||
// POT
|
// POT
|
||||||
require_once SYSTEM . 'libs/pot/OTS.php';
|
require_once SYSTEM . 'libs/pot/OTS.php';
|
||||||
|
36
system/libs/TwigTypeCastingExtension.php
Normal file
36
system/libs/TwigTypeCastingExtension.php
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace MyAAC\Twig\Extension;
|
||||||
|
|
||||||
|
use Twig\Extension\AbstractExtension;
|
||||||
|
use Twig\TwigFilter;
|
||||||
|
|
||||||
|
final class TwigTypeCastingExtension extends AbstractExtension
|
||||||
|
{
|
||||||
|
/** @return array<int, TwigFilter> */
|
||||||
|
public function getFilters(): array
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
new TwigFilter('int', function ($value) {
|
||||||
|
return (int)$value;
|
||||||
|
}),
|
||||||
|
new TwigFilter('float', function ($value) {
|
||||||
|
return (float)$value;
|
||||||
|
}),
|
||||||
|
new TwigFilter('string', function ($value) {
|
||||||
|
return (string)$value;
|
||||||
|
}),
|
||||||
|
new TwigFilter('bool', function ($value) {
|
||||||
|
return (bool)$value;
|
||||||
|
}),
|
||||||
|
new TwigFilter('array', function (object $value) {
|
||||||
|
return (array)$value;
|
||||||
|
}),
|
||||||
|
new TwigFilter('object', function (array $value) {
|
||||||
|
return (object)$value;
|
||||||
|
}),
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
@@ -71,7 +71,7 @@ class Forum
|
|||||||
'post_smile' => 0, 'post_html' => 1,
|
'post_smile' => 0, 'post_html' => 1,
|
||||||
'post_date' => time(),
|
'post_date' => time(),
|
||||||
'last_edit_aid' => 0, 'edit_date' => 0,
|
'last_edit_aid' => 0, 'edit_date' => 0,
|
||||||
'post_ip' => $_SERVER['REMOTE_ADDR']
|
'post_ip' => get_browser_real_ip()
|
||||||
))) {
|
))) {
|
||||||
$thread_id = $db->lastInsertId();
|
$thread_id = $db->lastInsertId();
|
||||||
$db->query("UPDATE `" . FORUM_TABLE_PREFIX . "forum` SET `first_post`=".(int) $thread_id." WHERE `id` = ".(int) $thread_id);
|
$db->query("UPDATE `" . FORUM_TABLE_PREFIX . "forum` SET `first_post`=".(int) $thread_id." WHERE `id` = ".(int) $thread_id);
|
||||||
@@ -93,7 +93,7 @@ class Forum
|
|||||||
'post_smile' => $smile,
|
'post_smile' => $smile,
|
||||||
'post_html' => $html,
|
'post_html' => $html,
|
||||||
'post_date' => time(),
|
'post_date' => time(),
|
||||||
'post_ip' => $_SERVER['REMOTE_ADDR']
|
'post_ip' => get_browser_real_ip()
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
public static function add_board($name, $description, $access, $guild, &$errors)
|
public static function add_board($name, $description, $access, $guild, &$errors)
|
||||||
|
@@ -74,6 +74,10 @@ class Plugins {
|
|||||||
if (isset($plugin['hooks'])) {
|
if (isset($plugin['hooks'])) {
|
||||||
foreach ($plugin['hooks'] as $_name => $info) {
|
foreach ($plugin['hooks'] as $_name => $info) {
|
||||||
if (defined('HOOK_'. $info['type'])) {
|
if (defined('HOOK_'. $info['type'])) {
|
||||||
|
if (strpos($info['type'], 'HOOK_') !== false) {
|
||||||
|
$info['type'] = str_replace('HOOK_', '', $info['type']);
|
||||||
|
}
|
||||||
|
|
||||||
$hook = constant('HOOK_'. $info['type']);
|
$hook = constant('HOOK_'. $info['type']);
|
||||||
$hooks[] = ['name' => $_name, 'type' => $hook, 'file' => $info['file']];
|
$hooks[] = ['name' => $_name, 'type' => $hook, 'file' => $info['file']];
|
||||||
} else {
|
} else {
|
||||||
@@ -401,4 +405,60 @@ class Plugins {
|
|||||||
|
|
||||||
return $string;
|
return $string;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Install menus
|
||||||
|
* Helper function for plugins
|
||||||
|
*
|
||||||
|
* @param string $templateName
|
||||||
|
* @param array $menus
|
||||||
|
*/
|
||||||
|
public static function installMenus($templateName, $menus, $clearOld = false)
|
||||||
|
{
|
||||||
|
global $db;
|
||||||
|
|
||||||
|
if ($clearOld) {
|
||||||
|
$db->query('DELETE FROM `' . TABLE_PREFIX . 'menu` WHERE `template` = ' . $db->quote($templateName));
|
||||||
|
}
|
||||||
|
|
||||||
|
// check if menus already exist
|
||||||
|
$query = $db->query('SELECT `id` FROM `' . TABLE_PREFIX . 'menu` WHERE `template` = ' . $db->quote($templateName) . ' LIMIT 1;');
|
||||||
|
if ($query->rowCount() > 0) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach ($menus as $category => $_menus) {
|
||||||
|
$i = 0;
|
||||||
|
foreach ($_menus as $name => $link) {
|
||||||
|
$color = '';
|
||||||
|
$blank = 0;
|
||||||
|
|
||||||
|
if (is_array($link)) {
|
||||||
|
if (isset($link['name'])) {
|
||||||
|
$name = $link['name'];
|
||||||
|
}
|
||||||
|
if (isset($link['color'])) {
|
||||||
|
$color = $link['color'];
|
||||||
|
}
|
||||||
|
if (isset($link['blank'])) {
|
||||||
|
$blank = $link['blank'] ? 1 : 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
$link = $link['link'];
|
||||||
|
}
|
||||||
|
|
||||||
|
$insert_array = [
|
||||||
|
'template' => $templateName,
|
||||||
|
'name' => $name,
|
||||||
|
'link' => $link,
|
||||||
|
'category' => $category,
|
||||||
|
'ordering' => $i++,
|
||||||
|
'blank' => $blank,
|
||||||
|
'color' => $color,
|
||||||
|
];
|
||||||
|
|
||||||
|
$db->insert(TABLE_PREFIX . 'menu', $insert_array);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@@ -167,8 +167,14 @@ abstract class OTS_Base_DB extends PDO implements IOTS_DB
|
|||||||
$query = 'UPDATE '.$this->tableName($table).' SET ';
|
$query = 'UPDATE '.$this->tableName($table).' SET ';
|
||||||
|
|
||||||
$count = count($fields);
|
$count = count($fields);
|
||||||
for ($i = 0; $i < $count; $i++)
|
for ($i = 0; $i < $count; $i++) {
|
||||||
$query.= $this->fieldName($fields[$i]).' = '.$this->quote($values[$i]).', ';
|
$value = 'NULL';
|
||||||
|
if ($values[$i] !== null) {
|
||||||
|
$value = $this->quote($values[$i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
$query.= $this->fieldName($fields[$i]).' = '.$value.', ';
|
||||||
|
}
|
||||||
|
|
||||||
$query = substr($query, 0, -2);
|
$query = substr($query, 0, -2);
|
||||||
$query.=' WHERE (';
|
$query.=' WHERE (';
|
||||||
@@ -212,6 +218,30 @@ abstract class OTS_Base_DB extends PDO implements IOTS_DB
|
|||||||
$this->exec($query);
|
$this->exec($query);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function addColumn($table, $column, $definition): void {
|
||||||
|
$this->exec('ALTER TABLE ' . $this->tableName($table) . ' ADD ' . $this->fieldName($column) . ' ' . $definition . ';');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function modifyColumn($table, $column, $definition): void {
|
||||||
|
$this->exec('ALTER TABLE ' . $this->tableName($table) . ' MODIFY ' . $this->fieldName($column) . ' ' . $definition . ';');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function changeColumn($table, $from, $to, $definition): void {
|
||||||
|
$this->exec('ALTER TABLE ' . $this->tableName($table) . ' CHANGE ' . $this->fieldName($from) . ' ' . $this->fieldName($to) . ' ' . $definition . ';');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function dropColumn($table, $column): void {
|
||||||
|
$this->exec('ALTER TABLE ' . $this->tableName($table) . ' DROP COLUMN ' . $this->fieldName($column) . ';');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function renameTable($from, $to): void {
|
||||||
|
$this->exec('RENAME TABLE ' . $this->tableName($from) . ' TO ' . $this->tableName($to) . ';');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function dropTable($table, $ifExists = true): void {
|
||||||
|
$this->exec('DROP TABLE ' . ($ifExists ? 'IF EXISTS' : '') . ' ' . $this->tableName($table) . ';');
|
||||||
|
}
|
||||||
/**
|
/**
|
||||||
* LIMIT/OFFSET clause for queries.
|
* LIMIT/OFFSET clause for queries.
|
||||||
*
|
*
|
||||||
|
@@ -151,7 +151,8 @@ class OTS_DB_MySQL extends OTS_Base_DB
|
|||||||
}
|
}
|
||||||
|
|
||||||
if($this->logged) {
|
if($this->logged) {
|
||||||
log_append('database.log', $_SERVER['REQUEST_URI'] . PHP_EOL . $this->getLog());
|
$currentScript = $_SERVER['REQUEST_URI'] ?? $_SERVER['SCRIPT_FILENAME'];
|
||||||
|
log_append('database.log', $currentScript . PHP_EOL . $this->getLog());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -60,12 +60,7 @@ class OTS_House extends OTS_Row_DAO
|
|||||||
private $tiles = array();
|
private $tiles = array();
|
||||||
|
|
||||||
public function load($id) {
|
public function load($id) {
|
||||||
$this->data = $this->db->query('SELECT * FROM `houses` WHERE `id` = ' . $id )->fetch();
|
$this->data = $this->db->query('SELECT * FROM `houses` WHERE `id` = ' . $id )->fetch(PDO::FETCH_ASSOC);
|
||||||
foreach($this->data as $key => $value) {
|
|
||||||
if(is_numeric($key)) {
|
|
||||||
unset($this->data[$key]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function find($name)
|
public function find($name)
|
||||||
|
@@ -133,13 +133,14 @@ class OTS_Monster extends DOMDocument
|
|||||||
{
|
{
|
||||||
$flags = array();
|
$flags = array();
|
||||||
|
|
||||||
// read all flags
|
if ($this->documentElement->getElementsByTagName('flags')->item(0)) {
|
||||||
foreach( $this->documentElement->getElementsByTagName('flags')->item(0)->getElementsByTagName('flag') as $flag)
|
foreach( $this->documentElement->getElementsByTagName('flags')->item(0)->getElementsByTagName('flag') as $flag)
|
||||||
{
|
{
|
||||||
$flag = $flag->attributes->item(0);
|
$flag = $flag->attributes->item(0);
|
||||||
|
|
||||||
$flags[$flag->nodeName] = (int) $flag->nodeValue;
|
$flags[$flag->nodeName] = (int) $flag->nodeValue;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return $flags;
|
return $flags;
|
||||||
}
|
}
|
||||||
|
@@ -1745,11 +1745,6 @@ class OTS_Player extends OTS_Row_DAO
|
|||||||
*/
|
*/
|
||||||
public function getConditions()
|
public function getConditions()
|
||||||
{
|
{
|
||||||
if( !isset($this->data['conditions']) )
|
|
||||||
{
|
|
||||||
throw new E_OTS_NotLoaded();
|
|
||||||
}
|
|
||||||
|
|
||||||
return $this->data['conditions'];
|
return $this->data['conditions'];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
5
system/libs/src/Cache.php
Normal file
5
system/libs/src/Cache.php
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace MyAAC;
|
||||||
|
|
||||||
|
class Cache extends \Cache {}
|
5
system/libs/src/Plugins.php
Normal file
5
system/libs/src/Plugins.php
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace MyAAC;
|
||||||
|
|
||||||
|
class Plugins extends \Plugins {}
|
@@ -33,7 +33,7 @@ class Visitors
|
|||||||
$this->sessionTime = $sessionTime;
|
$this->sessionTime = $sessionTime;
|
||||||
$this->cleanVisitors();
|
$this->cleanVisitors();
|
||||||
|
|
||||||
$ip = $_SERVER['REMOTE_ADDR'];
|
$ip = get_browser_real_ip();
|
||||||
if($this->visitorExists($ip))
|
if($this->visitorExists($ip))
|
||||||
$this->updateVisitor($ip, $_SERVER['REQUEST_URI']);
|
$this->updateVisitor($ip, $_SERVER['REQUEST_URI']);
|
||||||
else
|
else
|
||||||
|
@@ -42,12 +42,6 @@ if(ACTION === 'logout' && !isset($_REQUEST['account_login'])) {
|
|||||||
|
|
||||||
$logged = false;
|
$logged = false;
|
||||||
unset($account_logged);
|
unset($account_logged);
|
||||||
|
|
||||||
if(isset($_REQUEST['redirect']))
|
|
||||||
{
|
|
||||||
header('Location: ' . urldecode($_REQUEST['redirect']));
|
|
||||||
exit;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -80,7 +74,7 @@ else
|
|||||||
else
|
else
|
||||||
$tmp = array();
|
$tmp = array();
|
||||||
|
|
||||||
$ip = $_SERVER['REMOTE_ADDR'];
|
$ip = get_browser_real_ip();
|
||||||
$t = isset($tmp[$ip]) ? $tmp[$ip] : NULL;
|
$t = isset($tmp[$ip]) ? $tmp[$ip] : NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -94,6 +88,11 @@ else
|
|||||||
&& (!isset($t) || $t['attempts'] < 5)
|
&& (!isset($t) || $t['attempts'] < 5)
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
|
if (config('mail_enabled') && config('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.';
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
session_regenerate_id();
|
||||||
setSession('account', $account_logged->getId());
|
setSession('account', $account_logged->getId());
|
||||||
setSession('password', encrypt(($config_salt_enabled ? $account_logged->getCustomField('salt') : '') . $login_password));
|
setSession('password', encrypt(($config_salt_enabled ? $account_logged->getCustomField('salt') : '') . $login_password));
|
||||||
if ($remember_me) {
|
if ($remember_me) {
|
||||||
@@ -109,13 +108,13 @@ else
|
|||||||
unsetSession('password');
|
unsetSession('password');
|
||||||
unsetSession('remember_me');
|
unsetSession('remember_me');
|
||||||
$logged = false;
|
$logged = false;
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
$account_logged->setCustomField('web_lastlogin', time());
|
$account_logged->setCustomField('web_lastlogin', time());
|
||||||
}
|
}
|
||||||
|
|
||||||
$hooks->trigger(HOOK_LOGIN, array('account' => $account_logged, 'password' => $login_password, 'remember_me' => $remember_me));
|
$hooks->trigger(HOOK_LOGIN, array('account' => $account_logged, 'password' => $login_password, 'remember_me' => $remember_me));
|
||||||
}
|
}
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
$hooks->trigger(HOOK_LOGIN_ATTEMPT, array('account' => $login_account, 'password' => $login_password, 'remember_me' => $remember_me));
|
$hooks->trigger(HOOK_LOGIN_ATTEMPT, array('account' => $login_account, 'password' => $login_password, 'remember_me' => $remember_me));
|
||||||
|
@@ -1,18 +1,3 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
if(!$db->hasColumn(TABLE_PREFIX . 'monsters', 'elements')) {
|
// removed, but kept for compatibility
|
||||||
$db->exec("ALTER TABLE `" . TABLE_PREFIX . "monsters` ADD `elements` TEXT NOT NULL AFTER `immunities`;");
|
|
||||||
$db->exec("ALTER TABLE `" . TABLE_PREFIX . "monsters` ADD `pushable` TINYINT(1) NOT NULL DEFAULT '0' AFTER `convinceable`;");
|
|
||||||
$db->exec("ALTER TABLE `" . TABLE_PREFIX . "monsters` ADD `canpushitems` TINYINT(1) NOT NULL DEFAULT '0' AFTER `pushable`;");
|
|
||||||
$db->exec("ALTER TABLE `" . TABLE_PREFIX . "monsters` ADD `canpushcreatures` TINYINT(1) NOT NULL DEFAULT '0' AFTER `canpushitems`;");
|
|
||||||
$db->exec("ALTER TABLE `" . TABLE_PREFIX . "monsters` ADD `canwalkonenergy` TINYINT(1) NOT NULL DEFAULT '0' AFTER `canpushitems`;");
|
|
||||||
$db->exec("ALTER TABLE `" . TABLE_PREFIX . "monsters` ADD `canwalkonpoison` TINYINT(1) NOT NULL DEFAULT '0' AFTER `canwalkonenergy`;");
|
|
||||||
$db->exec("ALTER TABLE `" . TABLE_PREFIX . "monsters` ADD `canwalkonfire` TINYINT(1) NOT NULL DEFAULT '0' AFTER `canwalkonpoison`;");
|
|
||||||
$db->exec("ALTER TABLE `" . TABLE_PREFIX . "monsters` ADD `runonhealth` TINYINT(1) NOT NULL DEFAULT '0' AFTER `canwalkonfire`;");
|
|
||||||
$db->exec("ALTER TABLE `" . TABLE_PREFIX . "monsters` ADD `hostile` TINYINT(1) NOT NULL DEFAULT '0' AFTER `runonhealth`;");
|
|
||||||
$db->exec("ALTER TABLE `" . TABLE_PREFIX . "monsters` ADD `attackable` TINYINT(1) NOT NULL DEFAULT '0' AFTER `hostile`;");
|
|
||||||
$db->exec("ALTER TABLE `" . TABLE_PREFIX . "monsters` ADD `rewardboss` TINYINT(1) NOT NULL DEFAULT '0' AFTER `attackable`;");
|
|
||||||
$db->exec("ALTER TABLE `" . TABLE_PREFIX . "monsters` ADD `defense` INT(11) NOT NULL DEFAULT '0' AFTER `rewardboss`;");
|
|
||||||
$db->exec("ALTER TABLE `" . TABLE_PREFIX . "monsters` ADD `armor` INT(11) NOT NULL DEFAULT '0' AFTER `defense`;");
|
|
||||||
$db->exec("ALTER TABLE `" . TABLE_PREFIX . "monsters` ADD `summons` TEXT NOT NULL AFTER `loot`;");
|
|
||||||
}
|
|
||||||
|
@@ -11,19 +11,28 @@
|
|||||||
defined('MYAAC') or die('Direct access not allowed!');
|
defined('MYAAC') or die('Direct access not allowed!');
|
||||||
|
|
||||||
$show_form = true;
|
$show_form = true;
|
||||||
$new_rlname = isset($_POST['info_rlname']) ? htmlspecialchars(stripslashes($_POST['info_rlname'])) : NULL;
|
$new_rlname = isset($_POST['info_rlname']) ? htmlspecialchars(stripslashes($_POST['info_rlname'])) : '';
|
||||||
$new_location = isset($_POST['info_location']) ? htmlspecialchars(stripslashes($_POST['info_location'])) : NULL;
|
$new_location = isset($_POST['info_location']) ? htmlspecialchars(stripslashes($_POST['info_location'])) : '';
|
||||||
$new_country = isset($_POST['info_country']) ? htmlspecialchars(stripslashes($_POST['info_country'])) : NULL;
|
$new_country = isset($_POST['info_country']) ? htmlspecialchars(stripslashes($_POST['info_country'])) : '';
|
||||||
if(isset($_POST['changeinfosave']) && $_POST['changeinfosave'] == 1) {
|
if(isset($_POST['changeinfosave']) && $_POST['changeinfosave'] == 1) {
|
||||||
if(!isset($config['countries'][$new_country]))
|
if(config('account_country') && !isset($config['countries'][$new_country])) {
|
||||||
$errors[] = 'Country is not correct.';
|
$errors[] = 'Country is not correct.';
|
||||||
|
}
|
||||||
|
|
||||||
if(empty($errors)) {
|
if(empty($errors)) {
|
||||||
//save data from form
|
//save data from form
|
||||||
$account_logged->setCustomField("rlname", $new_rlname);
|
$account_logged->setCustomField("rlname", $new_rlname);
|
||||||
$account_logged->setCustomField("location", $new_location);
|
$account_logged->setCustomField("location", $new_location);
|
||||||
$account_logged->setCustomField("country", $new_country);
|
$account_logged->setCustomField("country", $new_country);
|
||||||
$account_logged->logAction('Changed Real Name to <b>' . $new_rlname . '</b>, Location to <b>' . $new_location . '</b> and Country to <b>' . $config['countries'][$new_country] . '</b>.');
|
|
||||||
|
$log = 'Changed Real Name to <b>' . $new_rlname . '</b>, Location to <b>' . $new_location . '</b>';
|
||||||
|
if (config('account_country')) {
|
||||||
|
$log .= ' and Country to <b>' . $config['countries'][$new_country] . '</b>';
|
||||||
|
}
|
||||||
|
$log .= '.';
|
||||||
|
|
||||||
|
$account_logged->logAction($log);
|
||||||
|
|
||||||
$twig->display('success.html.twig', array(
|
$twig->display('success.html.twig', array(
|
||||||
'title' => 'Public Information Changed',
|
'title' => 'Public Information Changed',
|
||||||
'description' => 'Your public information has been changed.'
|
'description' => 'Your public information has been changed.'
|
||||||
|
@@ -33,6 +33,10 @@ else
|
|||||||
|
|
||||||
if(empty($errors))
|
if(empty($errors))
|
||||||
{
|
{
|
||||||
|
if(!Validator::characterName($name)) {
|
||||||
|
$errors[] = Validator::getLastError();
|
||||||
|
}
|
||||||
|
|
||||||
if(!admin() && !Validator::newCharacterName($name))
|
if(!admin() && !Validator::newCharacterName($name))
|
||||||
$errors[] = Validator::getLastError();
|
$errors[] = Validator::getLastError();
|
||||||
}
|
}
|
||||||
|
@@ -59,7 +59,7 @@ else
|
|||||||
$new_sex_str = $config['genders'][$new_sex];
|
$new_sex_str = $config['genders'][$new_sex];
|
||||||
|
|
||||||
$player->save();
|
$player->save();
|
||||||
$account_logged->setCustomField("premium_points", $points - $config['account_change_character_name_points']);
|
$account_logged->setCustomField('premium_points', $points - $config['account_change_character_sex_points']);
|
||||||
$account_logged->logAction('Changed sex on character <b>' . $player->getName() . '</b> from <b>' . $old_sex_str . '</b> to <b>' . $new_sex_str . '</b>.');
|
$account_logged->logAction('Changed sex on character <b>' . $player->getName() . '</b> from <b>' . $old_sex_str . '</b> to <b>' . $new_sex_str . '</b>.');
|
||||||
$twig->display('success.html.twig', array(
|
$twig->display('success.html.twig', array(
|
||||||
'title' => 'Character Sex Changed',
|
'title' => 'Character Sex Changed',
|
||||||
|
@@ -29,11 +29,13 @@ else
|
|||||||
$account = new OTS_Account();
|
$account = new OTS_Account();
|
||||||
$account->load($query['id']);
|
$account->load($query['id']);
|
||||||
if ($account->isLoaded()) {
|
if ($account->isLoaded()) {
|
||||||
|
$db->update('accounts', ['email_verified' => '1'], ['email_hash' => $hash]);
|
||||||
|
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>.');
|
||||||
|
|
||||||
$hooks->trigger(HOOK_EMAIL_CONFIRMED, ['account' => $account]);
|
$hooks->trigger(HOOK_EMAIL_CONFIRMED, ['account' => $account]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else {
|
||||||
$db->update('accounts', array('email_verified' => '1'), array('email_hash' => $hash));
|
error('Link has expired.');
|
||||||
success('You have now verified your e-mail, this will increase the security of your account. Thank you for doing this.');
|
}
|
||||||
}
|
}
|
||||||
?>
|
|
||||||
|
@@ -52,9 +52,16 @@ $errors = array();
|
|||||||
{
|
{
|
||||||
$redirect = urldecode($_REQUEST['redirect']);
|
$redirect = urldecode($_REQUEST['redirect']);
|
||||||
|
|
||||||
|
// should never happen, unless hacker modify the URL
|
||||||
|
if (strpos($_REQUEST['redirect'], BASE_URL) === false) {
|
||||||
|
error('Fatal error: Cannot redirect outside the website.');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
$twig->display('account.redirect.html.twig', array(
|
$twig->display('account.redirect.html.twig', array(
|
||||||
'redirect' => $redirect
|
'redirect' => $redirect
|
||||||
));
|
));
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -167,37 +167,31 @@ function getBanType($typeId)
|
|||||||
|
|
||||||
function getPlayerNameByAccount($id)
|
function getPlayerNameByAccount($id)
|
||||||
{
|
{
|
||||||
global $vowels, $ots, $db;
|
global $db;
|
||||||
if(is_numeric($id))
|
if(!is_numeric($id)) {
|
||||||
{
|
return '';
|
||||||
$player = new OTS_Player();
|
|
||||||
$player->load($id);
|
|
||||||
if($player->isLoaded())
|
|
||||||
return $player->getName();
|
|
||||||
else
|
|
||||||
{
|
|
||||||
$playerQuery = $db->query('SELECT `id` FROM `players` WHERE `account_id` = ' . $id . ' ORDER BY `lastlogin` DESC LIMIT 1;')->fetch();
|
|
||||||
|
|
||||||
$tmp = "*Error*";
|
|
||||||
/*
|
|
||||||
$acco = new OTS_Account();
|
|
||||||
$acco->load($id);
|
|
||||||
if(!$acco->isLoaded())
|
|
||||||
return "Unknown name";
|
|
||||||
|
|
||||||
foreach($acco->getPlayersList() as $p)
|
|
||||||
{
|
|
||||||
$player= new OTS_Player();
|
|
||||||
$player->find($p);*/
|
|
||||||
$player->load($playerQuery['id']);
|
|
||||||
//echo 'id gracza = ' . $p . '<br/>';
|
|
||||||
if($player->isLoaded())
|
|
||||||
$tmp = $player->getName();
|
|
||||||
// break;
|
|
||||||
//}
|
|
||||||
|
|
||||||
return $tmp;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$playerQuery = $db->query('SELECT `name` FROM `players` WHERE `account_id` = ' . $id . ' ORDER BY `lastlogin` DESC LIMIT 1;');
|
||||||
|
if ($playerQuery->rowCount() == 0) {
|
||||||
|
return "*Error*";
|
||||||
|
}
|
||||||
|
|
||||||
|
$playerQuery = $playerQuery->fetch();
|
||||||
|
return $playerQuery['name'];
|
||||||
|
}
|
||||||
|
|
||||||
|
function getPlayerNameById($id)
|
||||||
|
{
|
||||||
|
if (!is_numeric($id)) {
|
||||||
|
return '';
|
||||||
|
}
|
||||||
|
|
||||||
|
global $db;
|
||||||
|
$playerQuery = $db->query('SELECT `name` FROM `players` WHERE `id` = ' . $id);
|
||||||
|
if ($playerQuery->rowCount()) {
|
||||||
|
$player = $playerQuery->fetch(PDO::FETCH_ASSOC);
|
||||||
|
return $player['name'];
|
||||||
}
|
}
|
||||||
|
|
||||||
return '';
|
return '';
|
||||||
|
@@ -54,7 +54,7 @@ $showed = $post = $reply = false;
|
|||||||
$value = '<span style="color: blue">[NEW ANSWER]</span>';
|
$value = '<span style="color: blue">[NEW ANSWER]</span>';
|
||||||
|
|
||||||
echo '<TABLE BORDER=0 CELLSPACING=1 CELLPADDING=4 WIDTH=100%><TR BGCOLOR='.$config['vdarkborder'].'><TD COLSPAN=2 CLASS=white><B>Bug Tracker</B></TD></TR>';
|
echo '<TABLE BORDER=0 CELLSPACING=1 CELLPADDING=4 WIDTH=100%><TR BGCOLOR='.$config['vdarkborder'].'><TD COLSPAN=2 CLASS=white><B>Bug Tracker</B></TD></TR>';
|
||||||
echo '<TR BGCOLOR="'.$dark.'"><td width=40%><i><b>Subject</b></i></td><td>'.$tags[$bug[2]['tag']].' '.$bug[2]['subject'].' '.$value.'</td></tr>';
|
echo '<TR BGCOLOR="'.$dark.'"><td width=40%><i><b>Subject</b></i></td><td>'.$tags[$bug[2]['tag']].' '.escapeHtml($bug[2]['subject']).' '.$value.'</td></tr>';
|
||||||
echo '<TR BGCOLOR="'.$light.'"><td><i><b>Posted by</b></i></td><td>';
|
echo '<TR BGCOLOR="'.$light.'"><td><i><b>Posted by</b></i></td><td>';
|
||||||
|
|
||||||
foreach($players as $player)
|
foreach($players as $player)
|
||||||
@@ -64,7 +64,7 @@ $showed = $post = $reply = false;
|
|||||||
|
|
||||||
echo '</td></tr>';
|
echo '</td></tr>';
|
||||||
echo '<TR BGCOLOR="'.$dark.'"><td colspan=2><i><b>Description</b></i></td></tr>';
|
echo '<TR BGCOLOR="'.$dark.'"><td colspan=2><i><b>Description</b></i></td></tr>';
|
||||||
echo '<TR BGCOLOR="'.$light.'"><td colspan=2>'.nl2br($bug[2]['text']).'</td></tr>';
|
echo '<TR BGCOLOR="'.$light.'"><td colspan=2>'.nl2br(escapeHtml($bug[2]['text'])).'</td></tr>';
|
||||||
echo '</TABLE>';
|
echo '</TABLE>';
|
||||||
|
|
||||||
$answers = $db->query('SELECT * FROM '.$db->tableName(TABLE_PREFIX . 'bugtracker').' where `account` = '.$_REQUEST['acc'].' and `id` = '.$_REQUEST['id'].' and `type` = 2 order by `reply`');
|
$answers = $db->query('SELECT * FROM '.$db->tableName(TABLE_PREFIX . 'bugtracker').' where `account` = '.$_REQUEST['acc'].' and `id` = '.$_REQUEST['id'].' and `type` = 2 order by `reply`');
|
||||||
@@ -75,10 +75,10 @@ $showed = $post = $reply = false;
|
|||||||
else
|
else
|
||||||
$who = '<span style="color: green">[PLAYER]</span>';
|
$who = '<span style="color: green">[PLAYER]</span>';
|
||||||
|
|
||||||
echo '<br><TABLE BORDER=0 CELLSPACING=1 CELLPADDING=4 WIDTH=100%><TR BGCOLOR='.$config['vdarkborder'].'><TD COLSPAN=2 CLASS=white><B>Answer #'.$answer['reply'].'</B></TD></TR>';
|
echo '<br><TABLE BORDER=0 CELLSPACING=1 CELLPADDING=4 WIDTH=100%><TR BGCOLOR='.$config['vdarkborder'].'><TD COLSPAN=2 CLASS=white><B>Answer #'.escapeHtml($answer['reply']).'</B></TD></TR>';
|
||||||
echo '<TR BGCOLOR="'.$dark.'"><td width=70%><i><b>Posted by</b></i></td><td>'.$who.'</td></tr>';
|
echo '<TR BGCOLOR="'.$dark.'"><td width=70%><i><b>Posted by</b></i></td><td>'.$who.'</td></tr>';
|
||||||
echo '<TR BGCOLOR="'.$light.'"><td colspan=2><i><b>Description</b></i></td></tr>';
|
echo '<TR BGCOLOR="'.$light.'"><td colspan=2><i><b>Description</b></i></td></tr>';
|
||||||
echo '<TR BGCOLOR="'.$dark.'"><td colspan=2>'.nl2br($answer['text']).'</td></tr>';
|
echo '<TR BGCOLOR="'.$dark.'"><td colspan=2>'.nl2br(escapeHtml($answer['text'])).'</td></tr>';
|
||||||
echo '</TABLE>';
|
echo '</TABLE>';
|
||||||
}
|
}
|
||||||
if($bug[2]['status'] != 3)
|
if($bug[2]['status'] != 3)
|
||||||
@@ -137,7 +137,7 @@ $showed = $post = $reply = false;
|
|||||||
elseif($report['status'] == 1)
|
elseif($report['status'] == 1)
|
||||||
$value = '<span style="color: blue">[NEW ANSWER]</span>';
|
$value = '<span style="color: blue">[NEW ANSWER]</span>';
|
||||||
|
|
||||||
echo '<TR BGCOLOR="' . getStyle($i) . '"><td width=75%><a href="?subtopic=bugtracker&control=true&id='.$report['id'].'&acc='.$report['account'].'">'.$tags[$report['tag']].' '.$report['subject'].'</a></td><td>'.$value.'</td></tr>';
|
echo '<TR BGCOLOR="' . getStyle($i) . '"><td width=75%><a href="?subtopic=bugtracker&control=true&id='.$report['id'].'&acc='.$report['account'].'">'.$tags[$report['tag']].' '.escapeHtml($report['subject']).'</a></td><td>'.$value.'</td></tr>';
|
||||||
|
|
||||||
$showed=true;
|
$showed=true;
|
||||||
$i++;
|
$i++;
|
||||||
@@ -181,9 +181,9 @@ $showed = $post = $reply = false;
|
|||||||
$value = '<span style="color: red">[CLOSED]</span>';
|
$value = '<span style="color: red">[CLOSED]</span>';
|
||||||
|
|
||||||
echo '<TABLE BORDER=0 CELLSPACING=1 CELLPADDING=4 WIDTH=100%><TR BGCOLOR='.$config['vdarkborder'].'><TD COLSPAN=2 CLASS=white><B>Bug Tracker</B></TD></TR>';
|
echo '<TABLE BORDER=0 CELLSPACING=1 CELLPADDING=4 WIDTH=100%><TR BGCOLOR='.$config['vdarkborder'].'><TD COLSPAN=2 CLASS=white><B>Bug Tracker</B></TD></TR>';
|
||||||
echo '<TR BGCOLOR="'.$dark.'"><td width=40%><i><b>Subject</b></i></td><td>'.$tags[$bug[2]['tag']].' '.$bug[2]['subject'].' '.$value.'</td></tr>';
|
echo '<TR BGCOLOR="'.$dark.'"><td width=40%><i><b>Subject</b></i></td><td>'.$tags[$bug[2]['tag']].' '.escapeHtml($bug[2]['subject']).' '.$value.'</td></tr>';
|
||||||
echo '<TR BGCOLOR="'.$light.'"><td colspan=2><i><b>Description</b></i></td></tr>';
|
echo '<TR BGCOLOR="'.$light.'"><td colspan=2><i><b>Description</b></i></td></tr>';
|
||||||
echo '<TR BGCOLOR="'.$dark.'"><td colspan=2>'.nl2br($bug[2]['text']).'</td></tr>';
|
echo '<TR BGCOLOR="'.$dark.'"><td colspan=2>'.nl2br(escapeHtml($bug[2]['text'])).'</td></tr>';
|
||||||
echo '</TABLE>';
|
echo '</TABLE>';
|
||||||
|
|
||||||
$answers = $db->query('SELECT * FROM '.$db->tableName('myaac_bugtracker').' where `account` = '.$account_logged->getId().' and `id` = '.$id.' and `type` = 2 order by `reply`');
|
$answers = $db->query('SELECT * FROM '.$db->tableName('myaac_bugtracker').' where `account` = '.$account_logged->getId().' and `id` = '.$id.' and `type` = 2 order by `reply`');
|
||||||
@@ -194,10 +194,10 @@ $showed = $post = $reply = false;
|
|||||||
else
|
else
|
||||||
$who = '<span style="color: green">[YOU]</span>';
|
$who = '<span style="color: green">[YOU]</span>';
|
||||||
|
|
||||||
echo '<br><TABLE BORDER=0 CELLSPACING=1 CELLPADDING=4 WIDTH=100%><TR BGCOLOR='.$config['vdarkborder'].'><TD COLSPAN=2 CLASS=white><B>Answer #'.$answer['reply'].'</B></TD></TR>';
|
echo '<br><TABLE BORDER=0 CELLSPACING=1 CELLPADDING=4 WIDTH=100%><TR BGCOLOR='.$config['vdarkborder'].'><TD COLSPAN=2 CLASS=white><B>Answer #'.escapeHtml($answer['reply']).'</B></TD></TR>';
|
||||||
echo '<TR BGCOLOR="'.$dark.'"><td width=70%><i><b>Posted by</b></i></td><td>'.$who.'</td></tr>';
|
echo '<TR BGCOLOR="'.$dark.'"><td width=70%><i><b>Posted by</b></i></td><td>'.$who.'</td></tr>';
|
||||||
echo '<TR BGCOLOR="'.$light.'"><td colspan=2><i><b>Description</b></i></td></tr>';
|
echo '<TR BGCOLOR="'.$light.'"><td colspan=2><i><b>Description</b></i></td></tr>';
|
||||||
echo '<TR BGCOLOR="'.$dark.'"><td colspan=2>'.nl2br($answer['text']).'</td></tr>';
|
echo '<TR BGCOLOR="'.$dark.'"><td colspan=2>'.nl2br(escapeHtml($answer['text'])).'</td></tr>';
|
||||||
echo '</TABLE>';
|
echo '</TABLE>';
|
||||||
}
|
}
|
||||||
if($bug[2]['status'] != 3)
|
if($bug[2]['status'] != 3)
|
||||||
@@ -274,7 +274,7 @@ $showed = $post = $reply = false;
|
|||||||
$bgcolor = $light;
|
$bgcolor = $light;
|
||||||
}
|
}
|
||||||
|
|
||||||
echo '<TR BGCOLOR="'.$bgcolor.'"><td width=75%><a href="?subtopic=bugtracker&id='.$report['id'].'">'.$tags[$report['tag']].' '.$report['subject'].'</a></td><td>'.$value.'</td></tr>';
|
echo '<TR BGCOLOR="'.$bgcolor.'"><td width=75%><a href="?subtopic=bugtracker&id='.$report['id'].'">'.$tags[$report['tag']].' '.escapeHtml($report['subject']).'</a></td><td>'.$value.'</td></tr>';
|
||||||
|
|
||||||
$showed=true;
|
$showed=true;
|
||||||
}
|
}
|
||||||
|
@@ -400,7 +400,7 @@ WHERE killers.death_id = '".$death['id']."' ORDER BY killers.final_hit DESC, kil
|
|||||||
'rank' => isset($guild_name) ? $rank_of_player->getName() : null,
|
'rank' => isset($guild_name) ? $rank_of_player->getName() : null,
|
||||||
'link' => isset($guild_name) ? getGuildLink($guild_name) : null
|
'link' => isset($guild_name) ? getGuildLink($guild_name) : null
|
||||||
),
|
),
|
||||||
'comment' => !empty($comment) ? wordwrap(nl2br($comment), 60, "<br/>", true) : null,
|
'comment' => !empty($comment) ? nl2br($comment) : null,
|
||||||
'skills' => isset($skills) ? $skills : null,
|
'skills' => isset($skills) ? $skills : null,
|
||||||
'quests_enabled' => $quests_enabled,
|
'quests_enabled' => $quests_enabled,
|
||||||
'quests' => isset($quests) ? $quests : null,
|
'quests' => isset($quests) ? $quests : null,
|
||||||
|
@@ -137,7 +137,13 @@ if($save)
|
|||||||
$params['account_id'] = $_POST['account'];
|
$params['account_id'] = $_POST['account'];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* two hooks for compatibility
|
||||||
|
*/
|
||||||
$hooks->trigger(HOOK_ACCOUNT_CREATE_AFTER_SUBMIT, $params);
|
$hooks->trigger(HOOK_ACCOUNT_CREATE_AFTER_SUBMIT, $params);
|
||||||
|
if (!$hooks->trigger(HOOK_ACCOUNT_CREATE_POST, $params)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if(config('account_create_character_create')) {
|
if(config('account_create_character_create')) {
|
||||||
$character_name = isset($_POST['name']) ? stripslashes(ucwords(strtolower($_POST['name']))) : null;
|
$character_name = isset($_POST['name']) ? stripslashes(ucwords(strtolower($_POST['name']))) : null;
|
||||||
@@ -167,6 +173,8 @@ if($save)
|
|||||||
$new_account->setEMail($email);
|
$new_account->setEMail($email);
|
||||||
$new_account->save();
|
$new_account->save();
|
||||||
|
|
||||||
|
$hooks->trigger(HOOK_ACCOUNT_CREATE_AFTER_SAVED, ['account' => $new_account]);
|
||||||
|
|
||||||
if($config_salt_enabled)
|
if($config_salt_enabled)
|
||||||
$new_account->setCustomField('salt', $salt);
|
$new_account->setCustomField('salt', $salt);
|
||||||
|
|
||||||
@@ -211,6 +219,9 @@ if($save)
|
|||||||
if(_mail($email, 'New account on ' . $config['lua']['serverName'], $body_html))
|
if(_mail($email, 'New account on ' . $config['lua']['serverName'], $body_html))
|
||||||
{
|
{
|
||||||
echo 'Your account has been created.<br/><br/>';
|
echo 'Your account has been created.<br/><br/>';
|
||||||
|
|
||||||
|
warning("Before you can login - you need to verify your E-Mail. The verification link has been sent to $email. If the message is not coming - remember to check the SPAM folder.");
|
||||||
|
|
||||||
$twig->display('success.html.twig', array(
|
$twig->display('success.html.twig', array(
|
||||||
'title' => 'Account Created',
|
'title' => 'Account Created',
|
||||||
'description' => 'Your account ' . $account_type . ' is <b>' . $tmp_account . '</b><br/>You will need the account ' . $account_type . ' and your password to play on ' . configLua('serverName') . '.
|
'description' => 'Your account ' . $account_type . ' is <b>' . $tmp_account . '</b><br/>You will need the account ' . $account_type . ' and your password to play on ' . configLua('serverName') . '.
|
||||||
@@ -227,15 +238,6 @@ if($save)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if(config('account_create_character_create')) {
|
|
||||||
// character creation
|
|
||||||
$character_created = $createCharacter->doCreate($character_name, $character_sex, $character_vocation, $character_town, $new_account, $errors);
|
|
||||||
if (!$character_created) {
|
|
||||||
error('There was an error creating your character. Please create your character later in account management page.');
|
|
||||||
error(implode(' ', $errors));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if($config['account_create_auto_login']) {
|
if($config['account_create_auto_login']) {
|
||||||
$_POST['account_login'] = USE_ACCOUNT_NAME ? $account_name : $account_id;
|
$_POST['account_login'] = USE_ACCOUNT_NAME ? $account_name : $account_id;
|
||||||
$_POST['password_login'] = $password2;
|
$_POST['password_login'] = $password2;
|
||||||
@@ -280,6 +282,15 @@ if($save)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(config('account_create_character_create')) {
|
||||||
|
// character creation
|
||||||
|
$character_created = $createCharacter->doCreate($character_name, $character_sex, $character_vocation, $character_town, $new_account, $errors);
|
||||||
|
if (!$character_created) {
|
||||||
|
error('There was an error creating your character. Please create your character later in account management page.');
|
||||||
|
error(implode(' ', $errors));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -291,7 +302,9 @@ if($config['account_country_recognize']) {
|
|||||||
$country_recognized = $country_session;
|
$country_recognized = $country_session;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
$info = json_decode(@file_get_contents('http://ipinfo.io/' . $_SERVER['REMOTE_ADDR'] . '/geo'), true);
|
ini_set('default_socket_timeout', 5);
|
||||||
|
|
||||||
|
$info = json_decode(@file_get_contents('https://ipinfo.io/' . get_browser_real_ip() . '/geo'), true);
|
||||||
if(isset($info['country'])) {
|
if(isset($info['country'])) {
|
||||||
$country_recognized = strtolower($info['country']);
|
$country_recognized = strtolower($info['country']);
|
||||||
setSession('country', $country_recognized);
|
setSession('country', $country_recognized);
|
||||||
|
@@ -157,7 +157,7 @@ if (empty($_REQUEST['creature'])) {
|
|||||||
echo '</td></tr>';
|
echo '</td></tr>';
|
||||||
echo '</TABLE>';
|
echo '</TABLE>';
|
||||||
} else {
|
} else {
|
||||||
echo "Monster with name <b>" . $monster_name . "</b> doesn't exist.";
|
echo "Monster with name <b>" . htmlspecialchars($monster_name) . "</b> doesn't exist.";
|
||||||
}
|
}
|
||||||
|
|
||||||
//back button
|
//back button
|
||||||
|
@@ -23,7 +23,7 @@ if(Forum::canPost($account_logged))
|
|||||||
if(isset($thread['id']))
|
if(isset($thread['id']))
|
||||||
{
|
{
|
||||||
$first_post = $db->query("SELECT `" . FORUM_TABLE_PREFIX . "forum`.`author_guid`, `" . FORUM_TABLE_PREFIX . "forum`.`author_aid`, `" . FORUM_TABLE_PREFIX . "forum`.`first_post`, `" . FORUM_TABLE_PREFIX . "forum`.`post_topic`, `" . FORUM_TABLE_PREFIX . "forum`.`post_text`, `" . FORUM_TABLE_PREFIX . "forum`.`post_smile`, `" . FORUM_TABLE_PREFIX . "forum`.`id`, `" . FORUM_TABLE_PREFIX . "forum`.`section` FROM `" . FORUM_TABLE_PREFIX . "forum` WHERE `" . FORUM_TABLE_PREFIX . "forum`.`id` = ".(int) $thread['first_post']." LIMIT 1")->fetch();
|
$first_post = $db->query("SELECT `" . FORUM_TABLE_PREFIX . "forum`.`author_guid`, `" . FORUM_TABLE_PREFIX . "forum`.`author_aid`, `" . FORUM_TABLE_PREFIX . "forum`.`first_post`, `" . FORUM_TABLE_PREFIX . "forum`.`post_topic`, `" . FORUM_TABLE_PREFIX . "forum`.`post_text`, `" . FORUM_TABLE_PREFIX . "forum`.`post_smile`, `" . FORUM_TABLE_PREFIX . "forum`.`id`, `" . FORUM_TABLE_PREFIX . "forum`.`section` FROM `" . FORUM_TABLE_PREFIX . "forum` WHERE `" . FORUM_TABLE_PREFIX . "forum`.`id` = ".(int) $thread['first_post']." LIMIT 1")->fetch();
|
||||||
echo '<a href="' . getLink('forum') . '">Boards</a> >> <a href="' . getForumBoardLink($thread['section']) . '">'.$sections[$thread['section']]['name'].'</a> >> <a href="' . getForumThreadLink($thread['first_post']) . '">'.$first_post['post_topic'].'</a> >> <b>Edit post</b>';
|
echo '<a href="' . getLink('forum') . '">Boards</a> >> <a href="' . getForumBoardLink($thread['section']) . '">'.$sections[$thread['section']]['name'].'</a> >> <a href="' . getForumThreadLink($thread['first_post']) . '">'.htmlspecialchars($first_post['post_topic']).'</a> >> <b>Edit post</b>';
|
||||||
if(Forum::hasAccess($thread['section'] && ($account_logged->getId() == $thread['author_aid'] || Forum::isModerator())))
|
if(Forum::hasAccess($thread['section'] && ($account_logged->getId() == $thread['author_aid'] || Forum::isModerator())))
|
||||||
{
|
{
|
||||||
$char_id = $post_topic = $text = $smile = $html = null;
|
$char_id = $post_topic = $text = $smile = $html = null;
|
||||||
@@ -37,6 +37,10 @@ if(Forum::canPost($account_logged))
|
|||||||
$smile = isset($_REQUEST['smile']) ? (int)$_REQUEST['smile'] : 0;
|
$smile = isset($_REQUEST['smile']) ? (int)$_REQUEST['smile'] : 0;
|
||||||
$html = isset($_REQUEST['html']) ? (int)$_REQUEST['html'] : 0;
|
$html = isset($_REQUEST['html']) ? (int)$_REQUEST['html'] : 0;
|
||||||
|
|
||||||
|
if (!superAdmin()) {
|
||||||
|
$html = 0;
|
||||||
|
}
|
||||||
|
|
||||||
$length = strlen($post_topic);
|
$length = strlen($post_topic);
|
||||||
if(($length < 1 || $length > 60) && $thread['id'] == $thread['first_post'])
|
if(($length < 1 || $length > 60) && $thread['id'] == $thread['first_post'])
|
||||||
$errors[] = "Too short or too long topic (Length: $length letters). Minimum 1 letter, maximum 60 letters.";
|
$errors[] = "Too short or too long topic (Length: $length letters). Minimum 1 letter, maximum 60 letters.";
|
||||||
|
@@ -12,6 +12,7 @@ defined('MYAAC') or die('Direct access not allowed!');
|
|||||||
|
|
||||||
if(!Forum::isModerator()) {
|
if(!Forum::isModerator()) {
|
||||||
echo 'You are not logged in or you are not moderator.';
|
echo 'You are not logged in or you are not moderator.';
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
$save = isset($_REQUEST['save']) && (int)$_REQUEST['save'] == 1;
|
$save = isset($_REQUEST['save']) && (int)$_REQUEST['save'] == 1;
|
||||||
|
@@ -24,7 +24,7 @@ if(Forum::canPost($account_logged))
|
|||||||
|
|
||||||
if(isset($thread['id']) && Forum::hasAccess($thread['section']))
|
if(isset($thread['id']) && Forum::hasAccess($thread['section']))
|
||||||
{
|
{
|
||||||
echo '<a href="' . getLink('forum') . '">Boards</a> >> <a href="' . getForumBoardLink($thread['section']) . '">'.$sections[$thread['section']]['name'].'</a> >> <a href="' . getForumThreadLink($thread_id) . '">'.$thread['post_topic'].'</a> >> <b>Post new reply</b><br /><h3>'.$thread['post_topic'].'</h3>';
|
echo '<a href="' . getLink('forum') . '">Boards</a> >> <a href="' . getForumBoardLink($thread['section']) . '">'.$sections[$thread['section']]['name'].'</a> >> <a href="' . getForumThreadLink($thread_id) . '">'.htmlspecialchars($thread['post_topic']).'</a> >> <b>Post new reply</b><br /><h3>'.htmlspecialchars($thread['post_topic']).'</h3>';
|
||||||
|
|
||||||
$quote = isset($_REQUEST['quote']) ? (int) $_REQUEST['quote'] : NULL;
|
$quote = isset($_REQUEST['quote']) ? (int) $_REQUEST['quote'] : NULL;
|
||||||
$text = isset($_REQUEST['text']) ? stripslashes(trim($_REQUEST['text'])) : NULL;
|
$text = isset($_REQUEST['text']) ? stripslashes(trim($_REQUEST['text'])) : NULL;
|
||||||
@@ -33,6 +33,11 @@ if(Forum::canPost($account_logged))
|
|||||||
$smile = (isset($_REQUEST['smile']) ? (int)$_REQUEST['smile'] : 0);
|
$smile = (isset($_REQUEST['smile']) ? (int)$_REQUEST['smile'] : 0);
|
||||||
$html = (isset($_REQUEST['html']) ? (int)$_REQUEST['html'] : 0);
|
$html = (isset($_REQUEST['html']) ? (int)$_REQUEST['html'] : 0);
|
||||||
$saved = false;
|
$saved = false;
|
||||||
|
|
||||||
|
if (!superAdmin()) {
|
||||||
|
$html = 0;
|
||||||
|
}
|
||||||
|
|
||||||
if(isset($_REQUEST['quote']))
|
if(isset($_REQUEST['quote']))
|
||||||
{
|
{
|
||||||
$quoted_post = $db->query("SELECT `players`.`name`, `" . FORUM_TABLE_PREFIX . "forum`.`post_text`, `" . FORUM_TABLE_PREFIX . "forum`.`post_date` FROM `players`, `" . FORUM_TABLE_PREFIX . "forum` WHERE `players`.`id` = `" . FORUM_TABLE_PREFIX . "forum`.`author_guid` AND `" . FORUM_TABLE_PREFIX . "forum`.`id` = ".(int) $quote)->fetchAll();
|
$quoted_post = $db->query("SELECT `players`.`name`, `" . FORUM_TABLE_PREFIX . "forum`.`post_text`, `" . FORUM_TABLE_PREFIX . "forum`.`post_date` FROM `players`, `" . FORUM_TABLE_PREFIX . "forum` WHERE `players`.`id` = `" . FORUM_TABLE_PREFIX . "forum`.`author_guid` AND `" . FORUM_TABLE_PREFIX . "forum`.`id` = ".(int) $quote)->fetchAll();
|
||||||
|
@@ -26,6 +26,11 @@ if(Forum::canPost($account_logged))
|
|||||||
$post_topic = isset($_REQUEST['topic']) ? stripslashes($_REQUEST['topic']) : '';
|
$post_topic = isset($_REQUEST['topic']) ? stripslashes($_REQUEST['topic']) : '';
|
||||||
$smile = (isset($_REQUEST['smile']) ? (int)$_REQUEST['smile'] : 0);
|
$smile = (isset($_REQUEST['smile']) ? (int)$_REQUEST['smile'] : 0);
|
||||||
$html = (isset($_REQUEST['html']) ? (int)$_REQUEST['html'] : 0);
|
$html = (isset($_REQUEST['html']) ? (int)$_REQUEST['html'] : 0);
|
||||||
|
|
||||||
|
if (!superAdmin()) {
|
||||||
|
$html = 0;
|
||||||
|
}
|
||||||
|
|
||||||
$saved = false;
|
$saved = false;
|
||||||
if (isset($_REQUEST['save'])) {
|
if (isset($_REQUEST['save'])) {
|
||||||
$length = strlen($post_topic);
|
$length = strlen($post_topic);
|
||||||
@@ -60,7 +65,7 @@ if(Forum::canPost($account_logged))
|
|||||||
}
|
}
|
||||||
if (count($errors) == 0) {
|
if (count($errors) == 0) {
|
||||||
$saved = true;
|
$saved = true;
|
||||||
$db->query("INSERT INTO `" . FORUM_TABLE_PREFIX . "forum` (`first_post` ,`last_post` ,`section` ,`replies` ,`views` ,`author_aid` ,`author_guid` ,`post_text` ,`post_topic` ,`post_smile`, `post_html` ,`post_date` ,`last_edit_aid` ,`edit_date`, `post_ip`) VALUES ('0', '" . time() . "', '" . (int)$section_id . "', '0', '0', '" . $account_logged->getId() . "', '" . (int)$char_id . "', " . $db->quote($text) . ", " . $db->quote($post_topic) . ", '" . (int)$smile . "', '" . (int)$html . "', '" . time() . "', '0', '0', '" . $_SERVER['REMOTE_ADDR'] . "')");
|
$db->query("INSERT INTO `" . FORUM_TABLE_PREFIX . "forum` (`first_post` ,`last_post` ,`section` ,`replies` ,`views` ,`author_aid` ,`author_guid` ,`post_text` ,`post_topic` ,`post_smile`, `post_html` ,`post_date` ,`last_edit_aid` ,`edit_date`, `post_ip`) VALUES ('0', '" . time() . "', '" . (int)$section_id . "', '0', '0', '" . $account_logged->getId() . "', '" . (int)$char_id . "', " . $db->quote($text) . ", " . $db->quote($post_topic) . ", '" . (int)$smile . "', '" . (int)$html . "', '" . time() . "', '0', '0', '" . get_browser_real_ip() . "')");
|
||||||
$thread_id = $db->lastInsertId();
|
$thread_id = $db->lastInsertId();
|
||||||
$db->query("UPDATE `" . FORUM_TABLE_PREFIX . "forum` SET `first_post`=" . (int)$thread_id . " WHERE `id` = " . (int)$thread_id);
|
$db->query("UPDATE `" . FORUM_TABLE_PREFIX . "forum` SET `first_post`=" . (int)$thread_id . " WHERE `id` = " . (int)$thread_id);
|
||||||
header('Location: ' . getForumThreadLink($thread_id));
|
header('Location: ' . getForumThreadLink($thread_id));
|
||||||
|
@@ -35,7 +35,7 @@ for($i = 0; $i < $threads_count['threads_count'] / $config['forum_threads_per_pa
|
|||||||
$links_to_pages .= '<b>'.($i + 1).' </b>';
|
$links_to_pages .= '<b>'.($i + 1).' </b>';
|
||||||
}
|
}
|
||||||
echo '<a href="' . getLink('forum') . '">Boards</a> >> <b>'.$sections[$section_id]['name'].'</b>';
|
echo '<a href="' . getLink('forum') . '">Boards</a> >> <b>'.$sections[$section_id]['name'].'</b>';
|
||||||
if(!$sections[$section_id]['closed'] || Forum::isModerator())
|
if($logged && (!$sections[$section_id]['closed'] || Forum::isModerator()))
|
||||||
{
|
{
|
||||||
echo '<br /><br />
|
echo '<br /><br />
|
||||||
<a href="?subtopic=forum&action=new_thread§ion_id='.$section_id.'"><img src="images/forum/topic.gif" border="0" /></a>';
|
<a href="?subtopic=forum&action=new_thread§ion_id='.$section_id.'"><img src="images/forum/topic.gif" border="0" /></a>';
|
||||||
@@ -62,7 +62,7 @@ if(isset($last_threads[0]))
|
|||||||
if(Forum::isModerator())
|
if(Forum::isModerator())
|
||||||
{
|
{
|
||||||
echo '<a href="?subtopic=forum&action=move_thread&id='.$thread['id'].'"\')"><span style="color:darkgreen">[MOVE]</span></a>';
|
echo '<a href="?subtopic=forum&action=move_thread&id='.$thread['id'].'"\')"><span style="color:darkgreen">[MOVE]</span></a>';
|
||||||
echo '<a href="?subtopic=forum&action=remove_post&id='.$thread['id'].'" onclick="return confirm(\'Are you sure you want remove thread > '.$thread['post_topic'].' <?\')"><span style="color: red">[REMOVE]</span></a> ';
|
echo '<a href="?subtopic=forum&action=remove_post&id='.$thread['id'].'" onclick="return confirm(\'Are you sure you want remove thread > '.htmlspecialchars($thread['post_topic']).' <?\')"><span style="color: red">[REMOVE]</span></a> ';
|
||||||
}
|
}
|
||||||
|
|
||||||
$player->load($thread['player_id']);
|
$player->load($thread['player_id']);
|
||||||
@@ -73,7 +73,7 @@ if(isset($last_threads[0]))
|
|||||||
$player_account = $player->getAccount();
|
$player_account = $player->getAccount();
|
||||||
$canEditForum = $player_account->hasFlag(FLAG_CONTENT_FORUM) || $player_account->isAdmin();
|
$canEditForum = $player_account->hasFlag(FLAG_CONTENT_FORUM) || $player_account->isAdmin();
|
||||||
|
|
||||||
echo '<a href="' . getForumThreadLink($thread['id']) . '">'.($canEditForum ? $thread['post_topic'] : htmlspecialchars($thread['post_topic'])) . '</a><br /><small>'.($canEditForum ? substr(strip_tags($thread['post_text']), 0, 50) : htmlspecialchars(substr($thread['post_text'], 0, 50))).'...</small></td><td>' . getPlayerLink($thread['name']) . '</td><td>'.(int) $thread['replies'].'</td><td>'.(int) $thread['views'].'</td><td>';
|
echo '<a href="' . getForumThreadLink($thread['id']) . '">'.htmlspecialchars($thread['post_topic']) . '</a><br /><small>'.($canEditForum ? substr(strip_tags($thread['post_text']), 0, 50) : htmlspecialchars(substr($thread['post_text'], 0, 50))).'...</small></td><td>' . getPlayerLink($thread['name']) . '</td><td>'.(int) $thread['replies'].'</td><td>'.(int) $thread['views'].'</td><td>';
|
||||||
if($thread['last_post'] > 0)
|
if($thread['last_post'] > 0)
|
||||||
{
|
{
|
||||||
$last_post = $db->query("SELECT `players`.`name`, `" . FORUM_TABLE_PREFIX . "forum`.`post_date` FROM `players`, `" . FORUM_TABLE_PREFIX . "forum` WHERE `" . FORUM_TABLE_PREFIX . "forum`.`first_post` = ".(int) $thread['id']." AND `players`.`id` = `" . FORUM_TABLE_PREFIX . "forum`.`author_guid` ORDER BY `post_date` DESC LIMIT 1")->fetch();
|
$last_post = $db->query("SELECT `players`.`name`, `" . FORUM_TABLE_PREFIX . "forum`.`post_date` FROM `players`, `" . FORUM_TABLE_PREFIX . "forum` WHERE `" . FORUM_TABLE_PREFIX . "forum`.`first_post` = ".(int) $thread['id']." AND `players`.`id` = `" . FORUM_TABLE_PREFIX . "forum`.`author_guid` ORDER BY `post_date` DESC LIMIT 1")->fetch();
|
||||||
@@ -87,7 +87,7 @@ if(isset($last_threads[0]))
|
|||||||
echo '</td></tr>';
|
echo '</td></tr>';
|
||||||
}
|
}
|
||||||
echo '</table>';
|
echo '</table>';
|
||||||
if(!$sections[$section_id]['closed'] || Forum::isModerator())
|
if($logged && (!$sections[$section_id]['closed'] || Forum::isModerator()))
|
||||||
echo '<br /><a href="?subtopic=forum&action=new_thread§ion_id='.$section_id.'"><img src="images/forum/topic.gif" border="0" /></a>';
|
echo '<br /><a href="?subtopic=forum&action=new_thread§ion_id='.$section_id.'"><img src="images/forum/topic.gif" border="0" /></a>';
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@@ -25,7 +25,7 @@ if(count($guilds_list) > 0)
|
|||||||
$description = $guild->getCustomField('description');
|
$description = $guild->getCustomField('description');
|
||||||
$description_with_lines = str_replace(array("\r\n", "\n", "\r"), '<br />', $description, $count);
|
$description_with_lines = str_replace(array("\r\n", "\n", "\r"), '<br />', $description, $count);
|
||||||
if ($count < $config['guild_description_lines_limit'])
|
if ($count < $config['guild_description_lines_limit'])
|
||||||
$description = wordwrap(nl2br($description), 60, "<br />", true);
|
$description = nl2br($description);
|
||||||
|
|
||||||
$guildName = $guild->getName();
|
$guildName = $guild->getName();
|
||||||
$guilds[] = array('name' => $guildName, 'logo' => $guild_logo, 'link' => getGuildLink($guildName, false), 'description' => $description);
|
$guilds[] = array('name' => $guildName, 'logo' => $guild_logo, 'link' => getGuildLink($guildName, false), 'description' => $description);
|
||||||
|
@@ -83,7 +83,7 @@ if(empty($guild_logo) || !file_exists('images/guilds/' . $guild_logo))
|
|||||||
$description = $guild->getCustomField('description');
|
$description = $guild->getCustomField('description');
|
||||||
$description_with_lines = str_replace(array("\r\n", "\n", "\r"), '<br />', $description, $count);
|
$description_with_lines = str_replace(array("\r\n", "\n", "\r"), '<br />', $description, $count);
|
||||||
if($count < $config['guild_description_lines_limit'])
|
if($count < $config['guild_description_lines_limit'])
|
||||||
$description = wordwrap(nl2br($description), 60, "<br />", true);
|
$description = nl2br($description);
|
||||||
//$description = $description_with_lines;
|
//$description = $description_with_lines;
|
||||||
|
|
||||||
$guild_owner = $guild->getOwner();
|
$guild_owner = $guild->getOwner();
|
||||||
@@ -144,6 +144,7 @@ if($db->hasColumn('players', 'guildnick'))
|
|||||||
$useGuildNick = true;
|
$useGuildNick = true;
|
||||||
|
|
||||||
$twig->display('guilds.view.html.twig', array(
|
$twig->display('guilds.view.html.twig', array(
|
||||||
|
'guild' => $guild,
|
||||||
'logo' => $guild_logo,
|
'logo' => $guild_logo,
|
||||||
'guild_name' => $guild_name,
|
'guild_name' => $guild_name,
|
||||||
'description' => $description,
|
'description' => $description,
|
||||||
|
@@ -30,11 +30,13 @@ if($config['highscores_vocation_box'] && isset($vocation))
|
|||||||
if(strtolower($name) == $vocation) {
|
if(strtolower($name) == $vocation) {
|
||||||
$add_vocs = array($id);
|
$add_vocs = array($id);
|
||||||
|
|
||||||
|
if ($id !== 0) {
|
||||||
$i = $id + $config['vocations_amount'];
|
$i = $id + $config['vocations_amount'];
|
||||||
while(isset($config['vocations'][$i])) {
|
while(isset($config['vocations'][$i])) {
|
||||||
$add_vocs[] = $i;
|
$add_vocs[] = $i;
|
||||||
$i += $config['vocations_amount'];
|
$i += $config['vocations_amount'];
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
$add_sql = 'AND `vocation` IN (' . implode(', ', $add_vocs) . ')';
|
$add_sql = 'AND `vocation` IN (' . implode(', ', $add_vocs) . ')';
|
||||||
break;
|
break;
|
||||||
@@ -355,7 +357,7 @@ if($config['highscores_vocation_box'])
|
|||||||
<tr bgcolor="'.$config['lightborder'].'">
|
<tr bgcolor="'.$config['lightborder'].'">
|
||||||
<td>
|
<td>
|
||||||
<a href="' . getLink('highscores') . '/' . $list . '" class="size_xs">[ALL]</A><BR>';
|
<a href="' . getLink('highscores') . '/' . $list . '" class="size_xs">[ALL]</A><BR>';
|
||||||
for($i = 1; $i <= $config['vocations_amount']; $i++) {
|
for($i = 0; $i <= $config['vocations_amount']; $i++) {
|
||||||
echo '<a href="' . getLink('highscores') . '/' . $list . '/' . strtolower($config_vocations[$i]) . '" class="size_xs">' . $config_vocations[$i] . '</a><br/>';
|
echo '<a href="' . getLink('highscores') . '/' . $list . '/' . strtolower($config_vocations[$i]) . '" class="size_xs">' . $config_vocations[$i] . '</a><br/>';
|
||||||
}
|
}
|
||||||
echo '
|
echo '
|
||||||
|
@@ -142,10 +142,14 @@ function updateStatus() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$status['uptime'] = $serverStatus->getUptime();
|
$uptime = $status['uptime'] = $serverStatus->getUptime();
|
||||||
$h = floor($status['uptime'] / 3600);
|
$m = date('m', $uptime);
|
||||||
$m = floor(($status['uptime'] - $h * 3600) / 60);
|
$m = $m > 1 ? "$m months, " : ($m == 1 ? 'month, ' : '');
|
||||||
$status['uptimeReadable'] = $h . 'h ' . $m . 'm';
|
$d = date('d', $uptime);
|
||||||
|
$d = $d > 1 ? "$d days, " : ($d == 1 ? 'day, ' : '');
|
||||||
|
$h = date('H', $uptime);
|
||||||
|
$min = date('i', $uptime);
|
||||||
|
$status['uptimeReadable'] = "{$m}{$d}{$h}h {$min}m";
|
||||||
|
|
||||||
$status['monsters'] = $serverStatus->getMonstersCount();
|
$status['monsters'] = $serverStatus->getMonstersCount();
|
||||||
$status['motd'] = $serverStatus->getMOTD();
|
$status['motd'] = $serverStatus->getMOTD();
|
||||||
|
@@ -147,7 +147,7 @@ function get_template_menus() {
|
|||||||
$menus = array();
|
$menus = array();
|
||||||
foreach($result as $menu) {
|
foreach($result as $menu) {
|
||||||
$link_full = strpos(trim($menu['link']), 'http') === 0 ? $menu['link'] : getLink($menu['link']);
|
$link_full = strpos(trim($menu['link']), 'http') === 0 ? $menu['link'] : getLink($menu['link']);
|
||||||
$menus[$menu['category']][] = array('name' => $menu['name'], 'link' => $menu['link'], 'link_full' => $link_full, 'blank' => $menu['blank'] == 1, 'color' => $menu['color']);
|
$menus[$menu['category']][] = array('name' => $menu['name'], 'link' => $menu['link'], 'link_full' => $link_full, 'blank' => $menu['blank'] == 1, 'target_blank' => ($menu['blank'] == 1 ? ' target="blank"' : ''), 'color' => $menu['color']);
|
||||||
}
|
}
|
||||||
|
|
||||||
$new_menus = array();
|
$new_menus = array();
|
||||||
|
@@ -130,7 +130,7 @@
|
|||||||
|
|
||||||
{{ hook('HOOK_ACCOUNT_CREATE_BETWEEN_BOXES_1') }}
|
{{ hook('HOOK_ACCOUNT_CREATE_BETWEEN_BOXES_1') }}
|
||||||
|
|
||||||
{% if (not config.mail_enabled or not config.account_mail_verify) and config.account_create_character_create %}
|
{% if config.account_create_character_create %}
|
||||||
<tr>
|
<tr>
|
||||||
<td>
|
<td>
|
||||||
<div class="TableShadowContainerRightTop">
|
<div class="TableShadowContainerRightTop">
|
||||||
|
@@ -86,6 +86,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<br/><br/>
|
<br/><br/>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
{{ hook('HOOK_ACCOUNT_MANAGE_BEFORE_GENERAL_INFORMATION') }}
|
||||||
<a name="General+Information"></a>
|
<a name="General+Information"></a>
|
||||||
<h2>General Information</h2>
|
<h2>General Information</h2>
|
||||||
<table width="100%">
|
<table width="100%">
|
||||||
@@ -122,6 +123,7 @@
|
|||||||
{% endautoescape %}
|
{% endautoescape %}
|
||||||
</table>
|
</table>
|
||||||
<br/>
|
<br/>
|
||||||
|
{{ hook('HOOK_ACCOUNT_MANAGE_BEFORE_PUBLIC_INFORMATION') }}
|
||||||
<a name="Public+Information"></a>
|
<a name="Public+Information"></a>
|
||||||
<h2>Public Information</h2>
|
<h2>Public Information</h2>
|
||||||
<table width="100%">
|
<table width="100%">
|
||||||
@@ -139,8 +141,9 @@
|
|||||||
{% include('buttons.base.html.twig') %}
|
{% include('buttons.base.html.twig') %}
|
||||||
</form>
|
</form>
|
||||||
<br/>
|
<br/>
|
||||||
|
{{ hook('HOOK_ACCOUNT_MANAGE_BEFORE_ACCOUNT_LOGS') }}
|
||||||
<a name="Account+Logs" ></a>
|
<a name="Account+Logs" ></a>
|
||||||
<h2>Action Log</h2>
|
<h2>Account Logs</h2>
|
||||||
<table>
|
<table>
|
||||||
<tr bgcolor="{{ config.vdarkborder }}" class="white">
|
<tr bgcolor="{{ config.vdarkborder }}" class="white">
|
||||||
<th>Action</th><th>Date</th><th>IP</th>
|
<th>Action</th><th>Date</th><th>IP</th>
|
||||||
@@ -158,6 +161,7 @@
|
|||||||
{% endautoescape %}
|
{% endautoescape %}
|
||||||
</table>
|
</table>
|
||||||
<br/>
|
<br/>
|
||||||
|
{{ hook('HOOK_ACCOUNT_MANAGE_BEFORE_CHARACTERS') }}
|
||||||
<a name="Characters" ></a>
|
<a name="Characters" ></a>
|
||||||
<h2>Character list: {{ players|length }} characters.</h2>
|
<h2>Character list: {{ players|length }} characters.</h2>
|
||||||
<table>
|
<table>
|
||||||
|
@@ -7,7 +7,7 @@
|
|||||||
</script>
|
</script>
|
||||||
{% set rows = 0 %}
|
{% set rows = 0 %}
|
||||||
<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(constant('HOOK_CHARACTERS_BEFORE_INFORMATIONS')) }}
|
||||||
{% if canEdit %}
|
{% if canEdit %}
|
||||||
@@ -142,7 +142,7 @@
|
|||||||
{% set rows = rows + 1 %}
|
{% set rows = rows + 1 %}
|
||||||
<tr bgcolor="{{ getStyle(rows) }}">
|
<tr bgcolor="{{ getStyle(rows) }}">
|
||||||
<td valign="top">Comment:</td>
|
<td valign="top">Comment:</td>
|
||||||
<td>{{ comment|raw }}</td>
|
<td style="word-break: break-all">{{ comment|raw }}</td>
|
||||||
</tr>
|
</tr>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
|
@@ -49,7 +49,7 @@
|
|||||||
<table width="100%">
|
<table width="100%">
|
||||||
<tr bgcolor="{{ config.vdarkborder }}">
|
<tr bgcolor="{{ config.vdarkborder }}">
|
||||||
<td colspan="2">
|
<td colspan="2">
|
||||||
<span style="color: white"><b>Last 5 posts from thread: {{ topic|raw }}</b></span>
|
<span style="color: white"><b>Last 5 posts from thread: {{ topic }}</b></span>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
{% set i = 0 %}
|
{% set i = 0 %}
|
||||||
|
@@ -44,7 +44,7 @@
|
|||||||
<img src="images/guilds/{{ guild.logo }}" width="64" height="64">
|
<img src="images/guilds/{{ guild.logo }}" width="64" height="64">
|
||||||
</td>
|
</td>
|
||||||
|
|
||||||
<td>
|
<td style="word-break: break-all">
|
||||||
<span{% if guild.description is not empty %} valign="top"{% endif %}>
|
<span{% if guild.description is not empty %} valign="top"{% endif %}>
|
||||||
<b>{{ guild.name }}</b>{% if isAdmin %}<a href="?subtopic=guilds&action=delete_by_admin&guild={{ guild.name }}"> - Delete this guild (for ADMIN only!)</a>{% endif %}
|
<b>{{ guild.name }}</b>{% if isAdmin %}<a href="?subtopic=guilds&action=delete_by_admin&guild={{ guild.name }}"> - Delete this guild (for ADMIN only!)</a>{% endif %}
|
||||||
</span>
|
</span>
|
||||||
|
@@ -47,7 +47,7 @@
|
|||||||
<table style="width:100%;">
|
<table style="width:100%;">
|
||||||
<tbody>
|
<tbody>
|
||||||
<tr>
|
<tr>
|
||||||
<td>
|
<td style="word-break: break-all">
|
||||||
<div id="GuildInformationContainer">
|
<div id="GuildInformationContainer">
|
||||||
{% if description is not empty %}
|
{% if description is not empty %}
|
||||||
{{ description|raw }}
|
{{ description|raw }}
|
||||||
@@ -265,6 +265,8 @@
|
|||||||
</div>
|
</div>
|
||||||
<br>
|
<br>
|
||||||
|
|
||||||
|
{{ hook('HOOK_GUILDS_AFTER_INVITED_CHARACTERS', { 'guild': guild, 'isLeader': isLeader }) }}
|
||||||
|
|
||||||
<div class="TableContainer">
|
<div class="TableContainer">
|
||||||
<table class="Table3" cellpadding="0" cellspacing="0">
|
<table class="Table3" cellpadding="0" cellspacing="0">
|
||||||
<tbody>
|
<tbody>
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
<div class="NewsHeadline">
|
<div class="NewsHeadline">
|
||||||
<div class="NewsHeadlineBackground" style="background-image:url({{ template_path }}/images/news/newsheadline_background.gif)">
|
<div class="NewsHeadlineBackground" style="background-image:url({{ template_path }}/images/news/newsheadline_background.gif)">
|
||||||
<img src="{{ template_path }}/images/news/icon_{{ icon }}.gif" class="NewsHeadlineIcon" />
|
<img src="{{ constant('BASE_URL') }}images/news/icon_{{ icon }}.gif" class="NewsHeadlineIcon" />
|
||||||
<div class="NewsHeadlineDate">{{ date|date(config.news_date_format) }} - </div>
|
<div class="NewsHeadlineDate">{{ date|date(config.news_date_format) }} - </div>
|
||||||
<div class="NewsHeadlineText">{{ title }}</div>
|
<div class="NewsHeadlineText">{{ title }}</div>
|
||||||
{% if config.news_author and author is not empty %}
|
{% if config.news_author and author is not empty %}
|
||||||
|
@@ -5,7 +5,7 @@
|
|||||||
{% set i = 0 %}
|
{% set i = 0 %}
|
||||||
{% for ticker in tickers %}
|
{% for ticker in tickers %}
|
||||||
<tr bgcolor="{{ getStyle(i) }}">
|
<tr bgcolor="{{ getStyle(i) }}">
|
||||||
<td style="width: 16px;"><img src="{{ template_path }}/images/news/icon_{{ ticker.icon }}_small.gif"/></td>
|
<td style="width: 16px;"><img src="{{ constant('BASE_URL') }}images/news/icon_{{ ticker.icon }}_small.gif"/></td>
|
||||||
<td style="width: 80px;">{{ ticker.date|date("j M Y") }}</td>
|
<td style="width: 80px;">{{ ticker.date|date("j M Y") }}</td>
|
||||||
<td>{{ ticker.body|raw }}</td>
|
<td>{{ ticker.body|raw }}</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
@@ -1,24 +1,14 @@
|
|||||||
<div class="TableContainer">
|
<table border="0" cellspacing="1" cellpadding="4" width="100%">
|
||||||
<div class="CaptionContainer">
|
<thead>
|
||||||
<div class="CaptionInnerContainer">
|
<tr bgcolor="{{ config.vdarkborder }}">
|
||||||
<span class="CaptionEdgeLeftTop" style="background-image:url({{ template_path }}/images/content/box-frame-edge.gif);"></span>
|
<td colspan="3" class="white"><b>{{ title|raw }}</b></td>
|
||||||
<span class="CaptionEdgeRightTop" style="background-image:url({{ template_path }}/images/content/box-frame-edge.gif);"></span>
|
</tr>
|
||||||
<span class="CaptionBorderTop" style="background-image:url({{ template_path }}/images/content/table-headline-border.gif);"></span>
|
</thead>
|
||||||
<span class="CaptionVerticalLeft" style="background-image:url({{ template_path }}/images/content/box-frame-vertical.gif);"></span>
|
<tbody>
|
||||||
<div class="Text" >{{ title|raw }}</div>
|
<tr style="background-color: {% if background is not null %}{{ background }}{% else %}{{ config.lightborder }}{% endif %}">
|
||||||
<span class="CaptionVerticalRight" style="background-image:url({{ template_path }}/images/content/box-frame-vertical.gif);"></span>
|
|
||||||
<span class="CaptionBorderBottom" style="background-image:url({{ template_path }}/images/content/table-headline-border.gif);"></span>
|
|
||||||
<span class="CaptionEdgeLeftBottom" style="background-image:url({{ template_path }}/images/content/box-frame-edge.gif);"></span>
|
|
||||||
<span class="CaptionEdgeRightBottom" style="background-image:url({{ template_path }}/images/content/box-frame-edge.gif);"></span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<table class="Table5" cellpadding="0" cellspacing="0" style="background-color: {{ config.lightborder }}">
|
|
||||||
<tr>
|
|
||||||
<td>
|
<td>
|
||||||
<div class="InnerTableContainer">
|
|
||||||
{{ content|raw }}
|
{{ content|raw }}
|
||||||
</div>
|
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
</div>
|
|
||||||
|
@@ -24,6 +24,9 @@ if($dev_mode) {
|
|||||||
}
|
}
|
||||||
unset($dev_mode);
|
unset($dev_mode);
|
||||||
|
|
||||||
|
require LIBS . 'TwigTypeCastingExtension.php';
|
||||||
|
$twig->addExtension(new MyAAC\Twig\Extension\TwigTypeCastingExtension());
|
||||||
|
|
||||||
$function = new TwigFunction('getStyle', function ($i) {
|
$function = new TwigFunction('getStyle', function ($i) {
|
||||||
return getStyle($i);
|
return getStyle($i);
|
||||||
});
|
});
|
||||||
@@ -44,15 +47,23 @@ $function = new TwigFunction('getGuildLink', function ($s, $p) {
|
|||||||
});
|
});
|
||||||
$twig->addFunction($function);
|
$twig->addFunction($function);
|
||||||
|
|
||||||
$function = new TwigFunction('hook', function ($hook) {
|
$function = new TwigFunction('hook', function ($context, $hook, array $params = []) {
|
||||||
global $hooks;
|
global $hooks;
|
||||||
|
|
||||||
if(is_string($hook)) {
|
if(is_string($hook)) {
|
||||||
|
if (defined($hook)) {
|
||||||
$hook = constant($hook);
|
$hook = constant($hook);
|
||||||
}
|
}
|
||||||
|
else {
|
||||||
|
// plugin/template has a hook that this version of myaac does not support
|
||||||
|
// just silently return
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
$hooks->trigger($hook);
|
$params['context'] = $context;
|
||||||
});
|
$hooks->trigger($hook, $params);
|
||||||
|
}, ['needs_context' => true]);
|
||||||
$twig->addFunction($function);
|
$twig->addFunction($function);
|
||||||
|
|
||||||
$function = new TwigFunction('config', function ($key) {
|
$function = new TwigFunction('config', function ($key) {
|
||||||
|
@@ -35,7 +35,7 @@
|
|||||||
<td>
|
<td>
|
||||||
<img src="{{ template_path }}/images/content/headline-bracer-left.gif" />
|
<img src="{{ template_path }}/images/content/headline-bracer-left.gif" />
|
||||||
</td>
|
</td>
|
||||||
<td style="text-align:center;vertical-align:middle;horizontal-align:center;font-size:17px;font-weight:bold;" >{{ welcome_message }}<br/></td>
|
<td style="text-align:center;vertical-align:middle;horizontal-align:center;font-size:17px;font-weight:bold;" >{{ welcome_message|raw }}<br/></td>
|
||||||
<td><img src="{{ template_path }}/images/content/headline-bracer-right.gif" /></td>
|
<td><img src="{{ template_path }}/images/content/headline-bracer-right.gif" /></td>
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
@@ -111,6 +111,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<br/><br/>
|
<br/><br/>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
{{ hook('HOOK_ACCOUNT_MANAGE_BEFORE_GENERAL_INFORMATION') }}
|
||||||
<a name="General+Information" ></a>
|
<a name="General+Information" ></a>
|
||||||
<div class="TopButtonContainer">
|
<div class="TopButtonContainer">
|
||||||
<div class="TopButton">
|
<div class="TopButton">
|
||||||
@@ -236,6 +237,7 @@
|
|||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
<br/>
|
<br/>
|
||||||
|
{{ hook('HOOK_ACCOUNT_MANAGE_BEFORE_PUBLIC_INFORMATION') }}
|
||||||
<a name="Public+Information"></a>
|
<a name="Public+Information"></a>
|
||||||
<div class="TopButtonContainer">
|
<div class="TopButtonContainer">
|
||||||
<div class="TopButton">
|
<div class="TopButton">
|
||||||
@@ -313,6 +315,7 @@
|
|||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
<br/>
|
<br/>
|
||||||
|
{{ hook('HOOK_ACCOUNT_MANAGE_BEFORE_ACCOUNT_LOGS') }}
|
||||||
<a name="Account+Logs" ></a>
|
<a name="Account+Logs" ></a>
|
||||||
<div class="TopButtonContainer">
|
<div class="TopButtonContainer">
|
||||||
<div class="TopButton">
|
<div class="TopButton">
|
||||||
@@ -384,6 +387,7 @@
|
|||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
<br/>
|
<br/>
|
||||||
|
{{ hook('HOOK_ACCOUNT_MANAGE_BEFORE_CHARACTERS') }}
|
||||||
<a name="Characters" ></a>
|
<a name="Characters" ></a>
|
||||||
<div class="TopButtonContainer">
|
<div class="TopButtonContainer">
|
||||||
<div class="TopButton" >
|
<div class="TopButton" >
|
||||||
|
@@ -1,8 +1,19 @@
|
|||||||
{% spaceless %}
|
{% apply spaceless %}
|
||||||
<div class="BigButton" style="background-image:url({{ template_path }}/images/global/buttons/button_blue.gif)">
|
|
||||||
|
{% set tmp_image = 'sbutton' %}
|
||||||
|
|
||||||
|
{% if button_color is defined %}
|
||||||
|
{% if button_color == 'green' %}
|
||||||
|
{% set tmp_image = 'sbutton_green' %}
|
||||||
|
{% elseif button_color == 'red' %}
|
||||||
|
{% set tmp_image = 'sbutton_red' %}
|
||||||
|
{% endif %}
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
<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/{% if button_color is defined and button_color == 'green' %}button_green{% else %}button_blue_over{% endif %}.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" type="submit" value="{{ button_name }}">
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{% endspaceless %}
|
{% endapply %}
|
||||||
|
@@ -21,7 +21,7 @@ if(isset($config['boxes']))
|
|||||||
<?php
|
<?php
|
||||||
if(PAGE !== 'news') {
|
if(PAGE !== 'news') {
|
||||||
if(strpos(URI, 'subtopic=') !== false) {
|
if(strpos(URI, 'subtopic=') !== false) {
|
||||||
$tmp = $_REQUEST['subtopic'];
|
$tmp = escapeHtml($_REQUEST['subtopic']);
|
||||||
if($tmp === 'accountmanagement') {
|
if($tmp === 'accountmanagement') {
|
||||||
$tmp = 'accountmanage';
|
$tmp = 'accountmanage';
|
||||||
}
|
}
|
||||||
|
24
templates/tibiacom/tables.headline.html.twig
Normal file
24
templates/tibiacom/tables.headline.html.twig
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
<div class="TableContainer">
|
||||||
|
<div class="CaptionContainer">
|
||||||
|
<div class="CaptionInnerContainer">
|
||||||
|
<span class="CaptionEdgeLeftTop" style="background-image:url({{ template_path }}/images/content/box-frame-edge.gif);"></span>
|
||||||
|
<span class="CaptionEdgeRightTop" style="background-image:url({{ template_path }}/images/content/box-frame-edge.gif);"></span>
|
||||||
|
<span class="CaptionBorderTop" style="background-image:url({{ template_path }}/images/content/table-headline-border.gif);"></span>
|
||||||
|
<span class="CaptionVerticalLeft" style="background-image:url({{ template_path }}/images/content/box-frame-vertical.gif);"></span>
|
||||||
|
<div class="Text" >{{ title|raw }}</div>
|
||||||
|
<span class="CaptionVerticalRight" style="background-image:url({{ template_path }}/images/content/box-frame-vertical.gif);"></span>
|
||||||
|
<span class="CaptionBorderBottom" style="background-image:url({{ template_path }}/images/content/table-headline-border.gif);"></span>
|
||||||
|
<span class="CaptionEdgeLeftBottom" style="background-image:url({{ template_path }}/images/content/box-frame-edge.gif);"></span>
|
||||||
|
<span class="CaptionEdgeRightBottom" style="background-image:url({{ template_path }}/images/content/box-frame-edge.gif);"></span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<table class="{% if tableClass is not null %}{{ tableClass }}{% else %}Table3{% endif %}" cellpadding="0" cellspacing="0" style="background-color: {% if background is not null %}{{ background }}{% else %}{{ config.lightborder }}{% endif %}">
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<div class="InnerTableContainer">
|
||||||
|
{{ content|raw }}
|
||||||
|
</div>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</div>
|
@@ -1,9 +1,13 @@
|
|||||||
function MouseOverBigButton(source) {
|
function MouseOverBigButton(source) {
|
||||||
|
if (source?.firstChild?.style) {
|
||||||
source.firstChild.style.visibility = "visible";
|
source.firstChild.style.visibility = "visible";
|
||||||
}
|
}
|
||||||
|
}
|
||||||
function MouseOutBigButton(source) {
|
function MouseOutBigButton(source) {
|
||||||
|
if (source?.firstChild?.style) {
|
||||||
source.firstChild.style.visibility = "hidden";
|
source.firstChild.style.visibility = "hidden";
|
||||||
}
|
}
|
||||||
|
}
|
||||||
function BigButtonAction(path) {
|
function BigButtonAction(path) {
|
||||||
window.location = path;
|
window.location = path;
|
||||||
}
|
}
|
Reference in New Issue
Block a user