mirror of
https://github.com/slawkens/myaac.git
synced 2025-09-14 12:33:35 +02:00
Compare commits
205 Commits
feature/ph
...
v1.0
Author | SHA1 | Date | |
---|---|---|---|
![]() |
544d006b6f | ||
![]() |
085ebbcfde | ||
![]() |
77a2c1cec3 | ||
![]() |
e918591666 | ||
![]() |
175c2a1f89 | ||
![]() |
3b5be1a8db | ||
![]() |
c769962e39 | ||
![]() |
35dfaa28ed | ||
![]() |
8e501c0e9c | ||
![]() |
c52ca27126 | ||
![]() |
41a3cb6f42 | ||
![]() |
eb4b3ada49 | ||
![]() |
68bdec7c18 | ||
![]() |
8a612429b2 | ||
![]() |
16671ea40b | ||
![]() |
8fb643596f | ||
![]() |
c2b7286d20 | ||
![]() |
d6c40c836a | ||
![]() |
99262c3ebd | ||
![]() |
b8396d4c84 | ||
![]() |
b0c8cf2ecd | ||
![]() |
da1816cc13 | ||
![]() |
783d96fc65 | ||
![]() |
988a3f2dbe | ||
![]() |
8e0978c1ed | ||
![]() |
023f1dc598 | ||
![]() |
ea5e1d4192 | ||
![]() |
06188be6e1 | ||
![]() |
2c42de688a | ||
![]() |
4ac56e6b15 | ||
![]() |
5e60249603 | ||
![]() |
d8b6b749ee | ||
![]() |
c5e114d550 | ||
![]() |
706fca8868 | ||
![]() |
65adf9ccdd | ||
![]() |
bc6663dc44 | ||
![]() |
e3ffe5d9e1 | ||
![]() |
c0a66037e0 | ||
![]() |
17210b717f | ||
![]() |
5782772b90 | ||
![]() |
27c44f1bdf | ||
![]() |
3f6ff3a332 | ||
![]() |
79636280a7 | ||
![]() |
38e699ba4b | ||
![]() |
afb055f2dc | ||
![]() |
6f58df0467 | ||
![]() |
95343cec02 | ||
![]() |
8055785c81 | ||
![]() |
64e4c08950 | ||
![]() |
12d8faa3ed | ||
![]() |
1e6892971b | ||
![]() |
8ae22accc9 | ||
![]() |
a2fadc5945 | ||
![]() |
d0b4065ccf | ||
![]() |
84d37c5a8f | ||
![]() |
28a2b34cc1 | ||
![]() |
bab565fbd0 | ||
![]() |
36bd3eb846 | ||
![]() |
85bc2342cf | ||
![]() |
507402171b | ||
![]() |
941846605c | ||
![]() |
a4a2480995 | ||
![]() |
ddced132cf | ||
![]() |
749e8e6f02 | ||
![]() |
7d787b4566 | ||
![]() |
7e67e11e16 | ||
![]() |
011a85d8ae | ||
![]() |
382f897322 | ||
![]() |
c980a09146 | ||
![]() |
18bd325a44 | ||
![]() |
078e20a9a4 | ||
![]() |
e96227fbe4 | ||
![]() |
c49c9d99a9 | ||
![]() |
a0f1971583 | ||
![]() |
cb5fc84e2e | ||
![]() |
29b77035be | ||
![]() |
b8c0215720 | ||
![]() |
3100faa645 | ||
![]() |
f7c9a67a96 | ||
![]() |
e8fedb8d16 | ||
![]() |
4e4739e8ab | ||
![]() |
c6cc84a668 | ||
![]() |
95a7c23a70 | ||
![]() |
a7fe400614 | ||
![]() |
2568046a4d | ||
![]() |
7161678c4b | ||
![]() |
93641fc68a | ||
![]() |
ea7e808508 | ||
![]() |
da3fc1fc8c | ||
![]() |
201f95caa8 | ||
![]() |
779aa152fa | ||
![]() |
d99b22f98b | ||
![]() |
35e28350bd | ||
![]() |
327dcb5f87 | ||
![]() |
bc8ada6fe2 | ||
![]() |
6183b7ee52 | ||
![]() |
760c3ab017 | ||
![]() |
ab73d60c61 | ||
![]() |
8d8bdb6dac | ||
![]() |
71c00aa5e0 | ||
![]() |
1fcdd54c94 | ||
![]() |
c2ec468246 | ||
![]() |
68118fb7c2 | ||
![]() |
5a69b9a802 | ||
![]() |
45e63b13c3 | ||
![]() |
758a8b3330 | ||
![]() |
1843728930 | ||
![]() |
cff62ccba4 | ||
![]() |
28f98db9de | ||
![]() |
da14e125e9 | ||
![]() |
cd49dfc799 | ||
![]() |
ef79b99b8a | ||
![]() |
9a27403e7d | ||
![]() |
5f63c3b227 | ||
![]() |
203e411b62 | ||
![]() |
fcb13f3c0f | ||
![]() |
d94828772c | ||
![]() |
10a739773c | ||
![]() |
83b3dc803a | ||
![]() |
33a47137c9 | ||
![]() |
dc17b701da | ||
![]() |
d30811404b | ||
![]() |
a631760dbf | ||
![]() |
bc3dcab462 | ||
![]() |
a8d255c04b | ||
![]() |
813786c768 | ||
![]() |
0db0ec1aa4 | ||
![]() |
bdc0c43d3f | ||
![]() |
c7a6a539a9 | ||
![]() |
c1d4b4f80c | ||
![]() |
47a19e85dd | ||
![]() |
d9c1b2507c | ||
![]() |
4c0739d3e9 | ||
![]() |
afe70a03c5 | ||
![]() |
3fadf87a7a | ||
![]() |
c24576165c | ||
![]() |
1e5c9dcd9b | ||
![]() |
a04d186c22 | ||
![]() |
42f99c3edc | ||
![]() |
4f4965369d | ||
![]() |
57b47ab798 | ||
![]() |
9ea2a5067f | ||
![]() |
ec96985872 | ||
![]() |
9f2a51b351 | ||
![]() |
a1d7c94166 | ||
![]() |
0c3e3e16dd | ||
![]() |
45dda5e834 | ||
![]() |
32ae4dde20 | ||
![]() |
d3f03fa735 | ||
![]() |
44eff8092c | ||
![]() |
8ef3d06f1e | ||
![]() |
60bd64a639 | ||
![]() |
a1bcb217ec | ||
![]() |
933b681a9f | ||
![]() |
e9aea17e1b | ||
![]() |
060400b074 | ||
![]() |
6be4a42c5a | ||
![]() |
1e8198635e | ||
![]() |
be78a0fc45 | ||
![]() |
08ac8ebade | ||
![]() |
66ecc487a1 | ||
![]() |
9e23ec6745 | ||
![]() |
968899ef77 | ||
![]() |
3844ad0d71 | ||
![]() |
c93bf5a984 | ||
![]() |
50336a810b | ||
![]() |
48f6ca0eba | ||
![]() |
30107222d4 | ||
![]() |
f92b275f70 | ||
![]() |
504242fb84 | ||
![]() |
e2bab4220b | ||
![]() |
0b4c34a823 | ||
![]() |
c5aa9a4684 | ||
![]() |
301afe190b | ||
![]() |
c35cc83e4f | ||
![]() |
3ba9d8f780 | ||
![]() |
06f228509b | ||
![]() |
39e682dfd2 | ||
![]() |
6f209440e0 | ||
![]() |
b2a1675de3 | ||
![]() |
163877d303 | ||
![]() |
a4d11c1a12 | ||
![]() |
8cf4e3da02 | ||
![]() |
e0230c5237 | ||
![]() |
127e03081c | ||
![]() |
e9c6017e60 | ||
![]() |
d5915df37e | ||
![]() |
eb0c2a7674 | ||
![]() |
d225c2da26 | ||
![]() |
d95e280b9a | ||
![]() |
64387e085b | ||
![]() |
e1f507cf2d | ||
![]() |
c92a410209 | ||
![]() |
1186f94e21 | ||
![]() |
f837b3133d | ||
![]() |
9106f1e4ce | ||
![]() |
a62cfc5272 | ||
![]() |
6229736d07 | ||
![]() |
6807339056 | ||
![]() |
ffaa0729ac | ||
![]() |
03cc09b8c7 | ||
![]() |
6d4724f4f4 | ||
![]() |
2afe0c1185 | ||
![]() |
6334f3f4fa | ||
![]() |
fe7ad61abe |
46
.github/workflows/phpstan.yml
vendored
Normal file
46
.github/workflows/phpstan.yml
vendored
Normal file
@@ -0,0 +1,46 @@
|
|||||||
|
name: "PHPStan"
|
||||||
|
|
||||||
|
on:
|
||||||
|
pull_request:
|
||||||
|
branches: [develop]
|
||||||
|
push:
|
||||||
|
branches: [develop]
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
tests:
|
||||||
|
name: PhpStan on PHP ${{ matrix.php-versions }}
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
php-versions: [ '8.1', '8.2', '8.3' ]
|
||||||
|
steps:
|
||||||
|
- name: "Checkout"
|
||||||
|
uses: "actions/checkout@v4"
|
||||||
|
|
||||||
|
- name: "Install PHP"
|
||||||
|
uses: "shivammathur/setup-php@v2"
|
||||||
|
with:
|
||||||
|
coverage: "none"
|
||||||
|
extensions: "intl, zip"
|
||||||
|
ini-values: "memory_limit=-1"
|
||||||
|
php-version: "${{ matrix.php-version }}"
|
||||||
|
|
||||||
|
- name: Get composer cache directory
|
||||||
|
id: composer-cache
|
||||||
|
run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
|
- name: Cache composer dependencies
|
||||||
|
uses: actions/cache@v4
|
||||||
|
with:
|
||||||
|
path: ${{ steps.composer-cache.outputs.dir }}
|
||||||
|
# Use composer.json for key, if composer.lock is not committed.
|
||||||
|
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
||||||
|
restore-keys: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
||||||
|
|
||||||
|
- name: "Install composer dependencies"
|
||||||
|
run: "composer install"
|
||||||
|
|
||||||
|
- name: "Run PHPStan"
|
||||||
|
run: "/usr/bin/php vendor/bin/phpstan analyse"
|
1
.gitignore
vendored
1
.gitignore
vendored
@@ -7,7 +7,6 @@ Thumbs.db
|
|||||||
|
|
||||||
# composer
|
# composer
|
||||||
composer.phar
|
composer.phar
|
||||||
composer.lock
|
|
||||||
vendor
|
vendor
|
||||||
|
|
||||||
# npm
|
# npm
|
||||||
|
102
CHANGELOG.md
102
CHANGELOG.md
@@ -1,6 +1,100 @@
|
|||||||
# Changelog
|
# Changelog
|
||||||
|
|
||||||
## [1.0-beta - 02.02.2024]
|
## [1.0 - 12.01.2025]
|
||||||
|
|
||||||
|
First stable release in the v1.0 series.
|
||||||
|
|
||||||
|
Minimum PHP 8.1 is required.
|
||||||
|
|
||||||
|
Changes since RC.2:
|
||||||
|
|
||||||
|
### Added
|
||||||
|
* feature: migrations up/down. Allows to downgrade/upgrade database to specified version (https://github.com/slawkens/myaac/commit/3f6ff3a3326b0475d28d11ffd7fff51f362d799f)
|
||||||
|
* new hooks for news management (https://github.com/slawkens/myaac/commit/011a85d8ae34283ded6999882833f9d4797028ec, https://github.com/slawkens/myaac/commit/36bd3eb846e829b45313e10f7568dc4e95841143)
|
||||||
|
* None Vocation to highscores (can be changed to RookStayer in Admin Panel) (https://github.com/slawkens/myaac/commit/a4a248099521bb5b8b2aa5bd592138debd2f19d5)
|
||||||
|
* support for button_color (green, red, blue) (https://github.com/slawkens/myaac/commit/d8b6b749ee62e88b6af4a05d3d7557f90b94d94e)
|
||||||
|
* add $whoopsHandler as variable, can be used by plugins (https://github.com/slawkens/myaac/commit/b0c8cf2ecda23045d725aaf43cfb3852ed766a4b)
|
||||||
|
* PlayerModel->outfit_url attribute (https://github.com/slawkens/myaac/commit/3b5be1a8db5dceecaa388e2925a5536d13b38881)
|
||||||
|
* support for selecting plugin themes in Admin menus.php (https://github.com/slawkens/myaac/commit/77a2c1cec343ffe4be5c2c2503ee81bc32a14ca1)
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
* schema: Change character set to utf8mb4 (support for Emojis in Menus/Pages/News/Forum etc.) (https://github.com/slawkens/myaac/commit/27c44f1bdfb6234cf0c9d5b4b491123bb205b08f)
|
||||||
|
* prefer get_browser_real_ip() over REMOTE_ADDR (https://github.com/slawkens/myaac/commit/941846605c00cee83168d2f916410b8ba8d4b7b9)
|
||||||
|
* automatically set selected current one on highscores filters (https://github.com/slawkens/myaac/commit/e96227fbe41ae281783b2d49edb169a603601813)
|
||||||
|
* rewrite towns loading code, removed OTBM loader (was too slow) (https://github.com/slawkens/myaac/commit/c980a0914632e7b27f718464f669a200707d217e)
|
||||||
|
* allow OTS_Player to be passed as object to getPlayerLink (https://github.com/slawkens/myaac/commit/84d37c5a8f2c4535a41c8aa8264752969d3f3a3d)
|
||||||
|
* do not clear menus by default on install (https://github.com/slawkens/myaac/commit/12d8faa3eda5e798f97b71e941c035187daad96e)
|
||||||
|
* display warning in admin panel - plugins - if zip extension is not installed (https://github.com/slawkens/myaac/commit/e3ffe5d9e11d78ab064a370d8541bac351c9bcd9)
|
||||||
|
* set default_socket_timeout for ipinfo.io checkup to 5 seconds (https://github.com/slawkens/myaac/commit/783d96fc6568a607d3198b832fed3a0dd06c4ebb)
|
||||||
|
* refactor getTopPlayers function (support for balance) (https://github.com/slawkens/myaac/commit/c769962e39fe8dfb72ecd5be1864e145696be794)
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
* XSS in forum (https://github.com/slawkens/myaac/commit/c2b7286d20d4b579171540f7a774e8a0995d5e8f, https://github.com/slawkens/myaac/commit/8fb643596f9586005976e7bdb484a541a9d8715e)
|
||||||
|
* price deducted when changing sex (https://github.com/slawkens/myaac/commit/16671ea40b72dcf74037c359ad572f9eb825edf9)
|
||||||
|
* move_thread by unauthorized user (https://github.com/slawkens/myaac/commit/d6c40c836a53cb1710f911f77f45f28b54ea1b54, thanks @anyeor)
|
||||||
|
* TFS 1.4.2 where conditions is NULL (https://github.com/slawkens/myaac/commit/b8396d4c8482e951da538b13f2296123732c4545)
|
||||||
|
* do not show forum new thread show button if not logged in (https://github.com/slawkens/myaac/commit/507402171ba3b6e7ee184bd7fa73e0d55e0cad7a, @anyeor)
|
||||||
|
* login if limiter is disabled (https://github.com/slawkens/myaac/commit/a0f1971583f0f790013e2145fb5ac573c59fbdef)
|
||||||
|
* fixes to installMenus function (https://github.com/slawkens/myaac/commit/a2fadc5945fe0a5e39f740827f6ffbda1bb501e2)
|
||||||
|
* many PHP exceptions in different places
|
||||||
|
* fixes to tibiacom menus ActiveSubmenuItem
|
||||||
|
|
||||||
|
### Removed
|
||||||
|
* bugtracker SQL table code as the page has been removed/moved to plugins (https://github.com/slawkens/myaac/commit/5782772b901b05fb814bc718d062f6e2cd71df8c)
|
||||||
|
|
||||||
|
## [1.0-RC.2 - 25.10.2024]
|
||||||
|
|
||||||
|
Still waiting for your reports about bugs found in this release. We are very close to stable release.
|
||||||
|
|
||||||
|
### Added
|
||||||
|
* feat: rate limit settings for blocking accounts login attempts (@gpedro, #266)
|
||||||
|
* search by email in accounts editor (https://github.com/slawkens/myaac/commit/c2ec46824621468f2a1cb4046805c485ed13fea5)
|
||||||
|
* New hooks in account manage + create (https://github.com/slawkens/myaac/commit/93641fc68ac9a5f1479329e2bd41380c19534d5d)
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
* chore: drop raw queries + accounts - search by email + accounts - required min size for search by account number (@gpedro, #266)
|
||||||
|
* Use https for outfit & item images (https://github.com/slawkens/myaac/commit/71c00aa5e01fbdfd88802912e200dd1025976231)
|
||||||
|
* Do not require players & guilds tables on install (https://github.com/slawkens/myaac/commit/779aa152fa940261c9b161533946f44e288597a2)
|
||||||
|
* Do not create player if there is no players table in db (https://github.com/slawkens/myaac/commit/201f95caa8b70e88fa651eac8c3c3aa7cd765bd0)
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
* Highscore frags fixed for TFS 0.3 (@Scrollog, #263)
|
||||||
|
* Missing groups variable #262. thanks, @Scrollog for reporting (https://github.com/slawkens/myaac/commit/8d8bdb6dac6df21672ac77288fff2f2f8d6eb665)
|
||||||
|
* Verified email for login.php (@gpedro, #265)
|
||||||
|
* Warning if core.account_country is disabled (https://github.com/slawkens/myaac/commit/ab73d60c61e14a1cacdb6cfbf7f89f4bf3be0833)
|
||||||
|
|
||||||
|
|
||||||
|
## [1.0-RC.1 - 23.07.2024]
|
||||||
|
|
||||||
|
Changes since 1.0-beta:
|
||||||
|
|
||||||
|
### Added
|
||||||
|
* Feat: Hooks priority (https://github.com/slawkens/myaac/commit/dc17b701da053e04bfa64e21be9247a4f07505e1)
|
||||||
|
* Make autoload of pages, commands and themes configurable (https://github.com/slawkens/myaac/commit/c1d4b4f80cd6bb85507ee9471e47013955a26a91)
|
||||||
|
* Fraggers in characters page for TFS 1.x and canary (https://github.com/slawkens/myaac/commit/42f99c3edc8de39cccc5632cb42e88b24579c5a6)
|
||||||
|
* New hooks: HOOK_INSTALL_FINISH, HOOK_ACCOUNT_CREATE_CHARACTER_* (https://github.com/slawkens/myaac/commit/08ac8ebade106521a5c7396faa5ce7006e629f7c, https://github.com/slawkens/myaac/commit/45dda5e834ff2059faea6ef9be2efa76f1723cbd)
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
* Allow account_create_character_create even if account_mail_verify is activated (https://github.com/slawkens/myaac/commit/203e411b626fe62401a4b74a48420769e512aa39)
|
||||||
|
* Create guild_rank entries, in case MySQL trigger not loaded (https://github.com/slawkens/myaac/commit/d9c1b2507c81f306970642b35e4bf5f7cc04a6f2, https://github.com/slawkens/myaac/commit/47a19e85dd84e9f3b39a1b29cfc2c04b004832b9)
|
||||||
|
* Set Admin Account verified by default (https://github.com/slawkens/myaac/commit/cd49dfc79942f3301ce9c0b8d899b9f39bda9a41)
|
||||||
|
* Refactor account routes into sub folders (https://github.com/slawkens/myaac/commit/bdc0c43d3fd3a51030c3e916bdb9f008468f5ecd)
|
||||||
|
* Order towns by id (https://github.com/slawkens/myaac/commit/9ea2a5067fc4b75de395f381577b18914132ad84)
|
||||||
|
* Do not create news about myaac, if any news already exist (on installation (https://github.com/slawkens/myaac/commit/504242fb846b73b56b87bc1e39d070687ad7f5b4)
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
* Not working google recaptcha plugin (https://github.com/slawkens/myaac/commit/a1bcb217ecf4e21fd58da4ba491da1852029898a)
|
||||||
|
* Not working account create if account_country is disabled (https://github.com/slawkens/myaac/commit/933b681a9fcdbb6283e0469b3806d2ded492d232)
|
||||||
|
* Account verify - do not allow login without verified email (Thanks @anyeor, https://github.com/slawkens/myaac/commit/fcb13f3c0fb8ceafda0bd614a229a26a269432bd)
|
||||||
|
* Detect tools/ext exists on install to prevent broken installs (https://github.com/slawkens/myaac/commit/10a739773c4f2911876bc802a0ee0537c3e00a92)
|
||||||
|
* Cache reloading each time page refreshes (https://github.com/slawkens/myaac/commit/ec96985872057340112f65073efc0c4bf86dddb0)
|
||||||
|
* Highscores frags for TFS 1.x and canary (https://github.com/slawkens/myaac/commit/a04d186c22912915f0a7873dfe677ef3b5a23c79)
|
||||||
|
* Monsters page: monster not found exception (https://github.com/slawkens/myaac/commit/ef79b99b8acc179f14b8475547347d9daca27512)
|
||||||
|
* Fixed bug if \<flags\> are not present in monster.xml (https://github.com/slawkens/myaac/commit/57b47ab7983f625c7c0ef4f5303a4d07ef172786)
|
||||||
|
* fastRoute duplicate errors (https://github.com/slawkens/myaac/commit/4c0739d3e93812dff0c33849ea3f38e4e49113ac)
|
||||||
|
* useGuildNick displaying (https://github.com/slawkens/myaac/commit/0db0ec1aa47e044c26bc403ff5078a2115d086f8)
|
||||||
|
|
||||||
|
## [1.0-beta - 18.05.2024]
|
||||||
|
|
||||||
Minimum PHP version for this release is 8.1.
|
Minimum PHP version for this release is 8.1.
|
||||||
|
|
||||||
@@ -22,7 +116,7 @@ Minimum PHP version for this release is 8.1.
|
|||||||
* list of open source libraries used in project page
|
* list of open source libraries used in project page
|
||||||
* auto-loading of themes, commands & pages from plugins/ folder. You need just to place them in correct folder and they will be loaded automatically - this allows better customization, without interfering with core AAC folders. This will allow in the future automatic updates for plugins as well the AAC as whole.
|
* auto-loading of themes, commands & pages from plugins/ folder. You need just to place them in correct folder and they will be loaded automatically - this allows better customization, without interfering with core AAC folders. This will allow in the future automatic updates for plugins as well the AAC as whole.
|
||||||
* config.php moved to Admin Panel -> Settings page
|
* config.php moved to Admin Panel -> Settings page
|
||||||
* new console script: aac (comes from MyAAC) - using symfony/console
|
* new console script: aac - using symfony/console
|
||||||
* usage: `php aac` (will list all commands by default)
|
* usage: `php aac` (will list all commands by default)
|
||||||
* example: `php aac cache:clear`
|
* example: `php aac cache:clear`
|
||||||
* example: `php aac plugin:install theme-example.zip`
|
* example: `php aac plugin:install theme-example.zip`
|
||||||
@@ -46,7 +140,7 @@ Minimum PHP version for this release is 8.1.
|
|||||||
* phpdebug bar (http://phpdebugbar.com/). Activated if env == 'dev', can be also activated in production by enabling "enable_debugbar" in local config
|
* phpdebug bar (http://phpdebugbar.com/). Activated if env == 'dev', can be also activated in production by enabling "enable_debugbar" in local config
|
||||||
|
|
||||||
### Changed
|
### Changed
|
||||||
* Composer is now used for external libraries like: Twig, PHPMailer, fast-route etc.
|
* Composer and NPM is now used for external libraries like: Twig, PHPMailer, fast-route, jQuery, Bootstrap etc.
|
||||||
* mail support is disabled on fresh install, can be manually enabled by user
|
* mail support is disabled on fresh install, can be manually enabled by user
|
||||||
* disable add php pages in admin panel for security. Option to disable plugins upload
|
* disable add php pages in admin panel for security. Option to disable plugins upload
|
||||||
* visitors counter shows now user browser, and also if its bot
|
* visitors counter shows now user browser, and also if its bot
|
||||||
@@ -64,4 +158,4 @@ Minimum PHP version for this release is 8.1.
|
|||||||
* change_password email to be more informal
|
* change_password email to be more informal
|
||||||
|
|
||||||
### Fixed
|
### Fixed
|
||||||
* hundrets of bug fixes, mostly patched from 0.8, so it makes no sense writing them again here
|
* hundreds of bug fixes, mostly patched from 0.8, so it makes no sense writing them again here
|
||||||
|
6
aac
6
aac
@@ -9,14 +9,13 @@ if(!IS_CLI) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
require_once SYSTEM . 'functions.php';
|
require_once SYSTEM . 'functions.php';
|
||||||
require_once SYSTEM . 'init.php';
|
|
||||||
|
|
||||||
define('SELF_NAME', basename(__FILE__));
|
define('SELF_NAME', basename(__FILE__));
|
||||||
|
|
||||||
use MyAAC\Plugins;
|
use MyAAC\Plugins;
|
||||||
use Symfony\Component\Console\Application;
|
use Symfony\Component\Console\Application;
|
||||||
|
|
||||||
$application = new Application();
|
$application = new Application('MyAAC', MYAAC_VERSION);
|
||||||
|
|
||||||
$commandsGlob = glob(SYSTEM . 'src/Commands/*.php');
|
$commandsGlob = glob(SYSTEM . 'src/Commands/*.php');
|
||||||
foreach ($commandsGlob as $item) {
|
foreach ($commandsGlob as $item) {
|
||||||
@@ -34,7 +33,4 @@ foreach ($pluginCommands as $item) {
|
|||||||
$application->add(require $item);
|
$application->add(require $item);
|
||||||
}
|
}
|
||||||
|
|
||||||
$application->setName('MyAAC');
|
|
||||||
$application->setVersion(MYAAC_VERSION);
|
|
||||||
|
|
||||||
$application->run();
|
$application->run();
|
||||||
|
@@ -8,6 +8,7 @@
|
|||||||
* @link https://my-aac.org
|
* @link https://my-aac.org
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
use MyAAC\Models\Account as AccountModel;
|
||||||
use MyAAC\Models\Player;
|
use MyAAC\Models\Player;
|
||||||
|
|
||||||
defined('MYAAC') or die('Direct access not allowed!');
|
defined('MYAAC') or die('Direct access not allowed!');
|
||||||
@@ -22,10 +23,7 @@ $use_datatable = true;
|
|||||||
if (setting('core.account_country'))
|
if (setting('core.account_country'))
|
||||||
require SYSTEM . 'countries.conf.php';
|
require SYSTEM . 'countries.conf.php';
|
||||||
|
|
||||||
$nameOrNumberColumn = 'name';
|
$nameOrNumberColumn = getAccountIdentityColumn();
|
||||||
if (USE_ACCOUNT_NUMBER) {
|
|
||||||
$nameOrNumberColumn = 'number';
|
|
||||||
}
|
|
||||||
|
|
||||||
$hasSecretColumn = $db->hasColumn('accounts', 'secret');
|
$hasSecretColumn = $db->hasColumn('accounts', 'secret');
|
||||||
$hasCoinsColumn = $db->hasColumn('accounts', 'coins');
|
$hasCoinsColumn = $db->hasColumn('accounts', 'coins');
|
||||||
@@ -51,36 +49,51 @@ $acc_type = setting('core.account_types');
|
|||||||
|
|
||||||
<?php
|
<?php
|
||||||
$id = 0;
|
$id = 0;
|
||||||
$search_account = '';
|
$search_account = $search_account_email = '';
|
||||||
if (isset($_REQUEST['id']))
|
if (isset($_REQUEST['id']))
|
||||||
$id = (int)$_REQUEST['id'];
|
$id = (int)$_REQUEST['id'];
|
||||||
|
else if (isset($_REQUEST['search_email'])) {
|
||||||
|
$search_account_email = $_REQUEST['search_email'];
|
||||||
|
$accountModel = AccountModel::where('email', $search_account_email)->limit(11)->get(['email', 'id']);
|
||||||
|
if (count($accountModel) == 0) {
|
||||||
|
echo_error('No entries found.');
|
||||||
|
} else if (count($accountModel) == 1) {
|
||||||
|
$id = $accountModel->first()->getKey();
|
||||||
|
} else if (count($accountModel) > 10) {
|
||||||
|
echo_error('Specified e-mail resulted with too many accounts.');
|
||||||
|
}
|
||||||
|
}
|
||||||
else if (isset($_REQUEST['search'])) {
|
else if (isset($_REQUEST['search'])) {
|
||||||
$search_account = $_REQUEST['search'];
|
$search_account = $_REQUEST['search'];
|
||||||
if (strlen($search_account) < 3 && !Validator::number($search_account)) {
|
$min_size = 3;
|
||||||
echo_error('Player name is too short.');
|
if (in_array($nameOrNumberColumn, ['id', 'number'])) {
|
||||||
|
$min_size = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (strlen($search_account) < $min_size && !Validator::number($search_account)) {
|
||||||
|
echo_error('Account ' . $nameOrNumberColumn . ' is too short.');
|
||||||
} else {
|
} else {
|
||||||
$query = $db->query('SELECT `id` FROM `accounts` WHERE `' . $nameOrNumberColumn . '` = ' . $db->quote($search_account));
|
$query = AccountModel::where($nameOrNumberColumn, '=', $search_account)->limit(11)->get(['id', $nameOrNumberColumn]);
|
||||||
if ($query->rowCount() == 1) {
|
if (count($query) == 0) {
|
||||||
$query = $query->fetch();
|
echo_error('No entries found.');
|
||||||
$id = (int)$query['id'];
|
} else if (count($query) == 1) {
|
||||||
|
$id = $query->first()->getKey();
|
||||||
|
} else if (count($query) > 10) {
|
||||||
|
echo_error('Specified name resulted with too many accounts.');
|
||||||
} else {
|
} else {
|
||||||
$query = $db->query('SELECT `id`, `' . $nameOrNumberColumn . '` FROM `accounts` WHERE `' . $nameOrNumberColumn . '` LIKE ' . $db->quote('%' . $search_account . '%'));
|
|
||||||
if ($query->rowCount() > 0 && $query->rowCount() <= 10) {
|
|
||||||
$str_construct = 'Do you mean?<ul class="mb-0">';
|
$str_construct = 'Do you mean?<ul class="mb-0">';
|
||||||
foreach ($query as $row)
|
foreach ($query as $row) {
|
||||||
$str_construct .= '<li><a href="' . $admin_base . '&id=' . $row['id'] . '">' . $row[$nameOrNumberColumn] . '</a></li>';
|
$str_construct .= '<li><a href="' . $admin_base . '&id=' . $row->getKey() . '">' . $row->attributes[$nameOrNumberColumn] . '</a></li>';
|
||||||
|
}
|
||||||
$str_construct .= '</ul>';
|
$str_construct .= '</ul>';
|
||||||
echo_error($str_construct);
|
echo_error($str_construct);
|
||||||
} else if ($query->rowCount() > 10)
|
|
||||||
echo_error('Specified name resulted with too many accounts.');
|
|
||||||
else
|
|
||||||
echo_error('No entries found.');
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
?>
|
?>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<?php
|
<?php
|
||||||
|
$groups = new OTS_Groups_List();
|
||||||
if ($id > 0) {
|
if ($id > 0) {
|
||||||
$account = new OTS_Account();
|
$account = new OTS_Account();
|
||||||
$account->load($id);
|
$account->load($id);
|
||||||
@@ -143,7 +156,9 @@ else if (isset($_REQUEST['search'])) {
|
|||||||
$rl_loca = $_POST['rl_loca'];
|
$rl_loca = $_POST['rl_loca'];
|
||||||
|
|
||||||
//country
|
//country
|
||||||
|
if(setting('core.account_country')) {
|
||||||
$rl_country = $_POST['rl_country'];
|
$rl_country = $_POST['rl_country'];
|
||||||
|
}
|
||||||
|
|
||||||
$web_flags = $_POST['web_flags'];
|
$web_flags = $_POST['web_flags'];
|
||||||
verify_number($web_flags, 'Web Flags', 1);
|
verify_number($web_flags, 'Web Flags', 1);
|
||||||
@@ -190,7 +205,11 @@ else if (isset($_REQUEST['search'])) {
|
|||||||
}
|
}
|
||||||
$account->setRLName($rl_name);
|
$account->setRLName($rl_name);
|
||||||
$account->setLocation($rl_loca);
|
$account->setLocation($rl_loca);
|
||||||
|
|
||||||
|
if(setting('core.account_country')) {
|
||||||
$account->setCountry($rl_country);
|
$account->setCountry($rl_country);
|
||||||
|
}
|
||||||
|
|
||||||
$account->setCustomField('created', $created);
|
$account->setCustomField('created', $created);
|
||||||
$account->setWebFlags($web_flags);
|
$account->setWebFlags($web_flags);
|
||||||
$account->setCustomField('web_lastlogin', $web_lastlogin);
|
$account->setCustomField('web_lastlogin', $web_lastlogin);
|
||||||
@@ -214,7 +233,7 @@ else if (isset($_REQUEST['search'])) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else if ($id == 0) {
|
} else if ($id == 0) {
|
||||||
$accounts_db = $db->query('SELECT `id`, `' . $nameOrNumberColumn . '`' . ($hasTypeColumn ? ',type' : ($hasGroupColumn ? ',group_id' : '')) . ' FROM `accounts` ORDER BY `id` ASC');
|
$accounts_db = $db->query('SELECT `id`, `' . $nameOrNumberColumn . '`' . ($hasTypeColumn ? ',type' : ($hasGroupColumn ? ',group_id' : '')) . ', email FROM `accounts` ORDER BY `id` ASC');
|
||||||
?>
|
?>
|
||||||
<div class="col-12 col-sm-12 col-lg-10">
|
<div class="col-12 col-sm-12 col-lg-10">
|
||||||
<div class="card card-info card-outline">
|
<div class="card card-info card-outline">
|
||||||
@@ -226,8 +245,9 @@ else if (isset($_REQUEST['search'])) {
|
|||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
<th>ID</th>
|
<th>ID</th>
|
||||||
<th><?= ($nameOrNumberColumn == 'number' ? 'Number' : 'Name'); ?></th>
|
<th><?= ($nameOrNumberColumn == 'name' ? 'Name' : 'Number'); ?></th>
|
||||||
<?php if($hasTypeColumn || $hasGroupColumn): ?>
|
<?php if($hasTypeColumn || $hasGroupColumn): ?>
|
||||||
|
<th>E-Mail</th>
|
||||||
<th>Position</th>
|
<th>Position</th>
|
||||||
<?php endif; ?>
|
<?php endif; ?>
|
||||||
<th style="width: 40px">Edit</th>
|
<th style="width: 40px">Edit</th>
|
||||||
@@ -238,6 +258,7 @@ else if (isset($_REQUEST['search'])) {
|
|||||||
<tr>
|
<tr>
|
||||||
<th><?php echo $account_lst['id']; ?></th>
|
<th><?php echo $account_lst['id']; ?></th>
|
||||||
<td><?php echo $account_lst[$nameOrNumberColumn]; ?></a></td>
|
<td><?php echo $account_lst[$nameOrNumberColumn]; ?></a></td>
|
||||||
|
<td><?php echo $account_lst['email']; ?></td>
|
||||||
<?php if($hasTypeColumn || $hasGroupColumn): ?>
|
<?php if($hasTypeColumn || $hasGroupColumn): ?>
|
||||||
<td>
|
<td>
|
||||||
<?php if ($hasTypeColumn) {
|
<?php if ($hasTypeColumn) {
|
||||||
@@ -404,6 +425,7 @@ else if (isset($_REQUEST['search'])) {
|
|||||||
autocomplete="off" maxlength="20"
|
autocomplete="off" maxlength="20"
|
||||||
value="<?php echo $account->getLocation(); ?>"/>
|
value="<?php echo $account->getLocation(); ?>"/>
|
||||||
</div>
|
</div>
|
||||||
|
<?php if(setting('core.account_country')): ?>
|
||||||
<div class="col-12 col-sm-12 col-lg-4">
|
<div class="col-12 col-sm-12 col-lg-4">
|
||||||
<label for="rl_country">Country:</label>
|
<label for="rl_country">Country:</label>
|
||||||
<select name="rl_country" id="rl_country" class="form-control">
|
<select name="rl_country" id="rl_country" class="form-control">
|
||||||
@@ -412,6 +434,7 @@ else if (isset($_REQUEST['search'])) {
|
|||||||
<?php endforeach; ?>
|
<?php endforeach; ?>
|
||||||
</select>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
|
<?php endif; ?>
|
||||||
</div>
|
</div>
|
||||||
<div class="form-group row">
|
<div class="form-group row">
|
||||||
<div class="col-12 col-sm-12 col-lg-6">
|
<div class="col-12 col-sm-12 col-lg-6">
|
||||||
@@ -583,6 +606,16 @@ else if (isset($_REQUEST['search'])) {
|
|||||||
</div>
|
</div>
|
||||||
<div class="card-body">
|
<div class="card-body">
|
||||||
<div class="row">
|
<div class="row">
|
||||||
|
<div class="col-6 col-lg-12">
|
||||||
|
<form action="<?php echo $admin_base; ?>" method="post">
|
||||||
|
<?php csrf(); ?>
|
||||||
|
<label for="search">Account E-Mail:</label>
|
||||||
|
<div class="input-group input-group-sm">
|
||||||
|
<input type="email" class="form-control" id="search_email" name="search_email" value="<?= escapeHtml($search_account_email); ?>" maxlength="255" size="255">
|
||||||
|
<span class="input-group-append"><button type="submit" class="btn btn-info btn-flat">Search</button></span>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
<div class="col-6 col-lg-12">
|
<div class="col-6 col-lg-12">
|
||||||
<form action="<?php echo $admin_base; ?>" method="post">
|
<form action="<?php echo $admin_base; ?>" method="post">
|
||||||
<?php csrf(); ?>
|
<?php csrf(); ?>
|
||||||
|
@@ -7,6 +7,9 @@
|
|||||||
* @copyright 2019 MyAAC
|
* @copyright 2019 MyAAC
|
||||||
* @link https://my-aac.org
|
* @link https://my-aac.org
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
use MyAAC\Models\Account;
|
||||||
|
|
||||||
defined('MYAAC') or die('Direct access not allowed!');
|
defined('MYAAC') or die('Direct access not allowed!');
|
||||||
$title = 'Mailer';
|
$title = 'Mailer';
|
||||||
|
|
||||||
@@ -61,15 +64,15 @@ if (!empty($mail_content) && !empty($mail_subject) && empty($mail_to)) {
|
|||||||
$add = ' AND `email_verified` = 1';
|
$add = ' AND `email_verified` = 1';
|
||||||
}
|
}
|
||||||
|
|
||||||
$query = $db->query('SELECT `email` FROM `accounts` WHERE `email` != ""' . $add);
|
$query = Account::where('email', '!=', '')->get(['email']);
|
||||||
foreach ($query as $email) {
|
foreach ($query as $email) {
|
||||||
if (_mail($email['email'], $mail_subject, $mail_content)) {
|
if (_mail($email->email, $mail_subject, $mail_content)) {
|
||||||
$success++;
|
$success++;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
$failed++;
|
$failed++;
|
||||||
echo '<br />';
|
echo '<br />';
|
||||||
error('An error occorred while sending email to <b>' . $email['email'] . '</b>. For Admin: More info can be found in system/logs/mailer-error.log');
|
error('An error occorred while sending email to <b>' . $email->email . '</b>. For Admin: More info can be found in system/logs/mailer-error.log');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -24,20 +24,13 @@ $freePremium = $config['lua']['freePremium'];
|
|||||||
|
|
||||||
function admin_give_points($points)
|
function admin_give_points($points)
|
||||||
{
|
{
|
||||||
global $db, $hasPointsColumn;
|
global $hasPointsColumn;
|
||||||
|
|
||||||
if (!$hasPointsColumn) {
|
if (!$hasPointsColumn) {
|
||||||
displayMessage('Points not supported.');
|
displayMessage('Points not supported.');
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
$statement = $db->prepare('UPDATE `accounts` SET `premium_points` = `premium_points` + :points');
|
|
||||||
if (!$statement) {
|
|
||||||
displayMessage('Failed to prepare query statement.');
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!Account::query()->increment('premium_points', $points)) {
|
if (!Account::query()->increment('premium_points', $points)) {
|
||||||
displayMessage('Failed to add points.');
|
displayMessage('Failed to add points.');
|
||||||
return;
|
return;
|
||||||
@@ -47,7 +40,7 @@ function admin_give_points($points)
|
|||||||
|
|
||||||
function admin_give_coins($coins)
|
function admin_give_coins($coins)
|
||||||
{
|
{
|
||||||
global $db, $hasCoinsColumn;
|
global $hasCoinsColumn;
|
||||||
|
|
||||||
if (!$hasCoinsColumn) {
|
if (!$hasCoinsColumn) {
|
||||||
displayMessage('Coins not supported.');
|
displayMessage('Coins not supported.');
|
||||||
@@ -62,24 +55,6 @@ function admin_give_coins($coins)
|
|||||||
displayMessage($coins . ' coins added to all accounts.', true);
|
displayMessage($coins . ' coins added to all accounts.', true);
|
||||||
}
|
}
|
||||||
|
|
||||||
function query_add_premium($column, $value_query, $condition_query = '1=1', $params = [])
|
|
||||||
{
|
|
||||||
global $db;
|
|
||||||
|
|
||||||
$statement = $db->prepare("UPDATE `accounts` SET `{$column}` = $value_query WHERE $condition_query");
|
|
||||||
if (!$statement) {
|
|
||||||
displayMessage('Failed to prepare query statement.');
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!$statement->execute($params)) {
|
|
||||||
displayMessage('Failed to add premium days.');
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
function admin_give_premdays($days)
|
function admin_give_premdays($days)
|
||||||
{
|
{
|
||||||
global $db, $freePremium;
|
global $db, $freePremium;
|
||||||
@@ -94,9 +69,9 @@ function admin_give_premdays($days)
|
|||||||
// othire
|
// othire
|
||||||
if ($db->hasColumn('accounts', 'premend')) {
|
if ($db->hasColumn('accounts', 'premend')) {
|
||||||
// append premend
|
// append premend
|
||||||
if (query_add_premium('premend', '`premend` + :value', '`premend` > :now', ['value' => $value, 'now' => $now])) {
|
if (Account::where('premend', '>', $now)->increment('premend', $value)) {
|
||||||
// set premend
|
// set premend
|
||||||
if (query_add_premium('premend', ':value', '`premend` <= :now', ['value' => $now + $value, 'now' => $now])) {
|
if (Account::where('premend', '<=', $now)->update(['premend' => $now + $value])) {
|
||||||
displayMessage($days . ' premium days added to all accounts.', true);
|
displayMessage($days . ' premium days added to all accounts.', true);
|
||||||
return;
|
return;
|
||||||
} else {
|
} else {
|
||||||
@@ -114,11 +89,11 @@ function admin_give_premdays($days)
|
|||||||
// tfs 0.x
|
// tfs 0.x
|
||||||
if ($db->hasColumn('accounts', 'premdays')) {
|
if ($db->hasColumn('accounts', 'premdays')) {
|
||||||
// append premdays
|
// append premdays
|
||||||
if (query_add_premium('premdays', '`premdays` + :value', '1=1', ['value' => $days])) {
|
if (Account::query()->update(['premdays' => $days])) {
|
||||||
// append lastday
|
// append lastday
|
||||||
if (query_add_premium('lastday', '`lastday` + :value', '`lastday` > :now', ['value' => $value, 'now' => $now])) {
|
if (Account::where('lastday', '>', $now)->increment('lastday', $value)) {
|
||||||
// set lastday
|
// set lastday
|
||||||
if (query_add_premium('lastday', ':value', '`lastday` <= :now', ['value' => $now + $value, 'now' => $now])) {
|
if (Account::where('lastday', '<=', $now)->update(['lastday' => $now + $value])) {
|
||||||
displayMessage($days . ' premium days added to all accounts.', true);
|
displayMessage($days . ' premium days added to all accounts.', true);
|
||||||
return;
|
return;
|
||||||
} else {
|
} else {
|
||||||
@@ -142,9 +117,9 @@ function admin_give_premdays($days)
|
|||||||
// tfs 1.x
|
// tfs 1.x
|
||||||
if ($db->hasColumn('accounts', 'premium_ends_at')) {
|
if ($db->hasColumn('accounts', 'premium_ends_at')) {
|
||||||
// append premium_ends_at
|
// append premium_ends_at
|
||||||
if (query_add_premium('premium_ends_at', '`premium_ends_at` + :value', '`premium_ends_at` > :now', ['value' => $value, 'now' => $now])) {
|
if (Account::where('premium_ends_at', '>', $now)->increment('premium_ends_at', $value)) {
|
||||||
// set premium_ends_at
|
// set premium_ends_at
|
||||||
if (query_add_premium('premium_ends_at', ':value', '`premium_ends_at` <= :now', ['value' => $now + $value, 'now' => $now])) {
|
if (Account::where('premium_ends_at', '<=', $now)->update(['premium_ends_at' => $now + $value])) {
|
||||||
displayMessage($days . ' premium days added to all accounts.', true);
|
displayMessage($days . ' premium days added to all accounts.', true);
|
||||||
return;
|
return;
|
||||||
} else {
|
} else {
|
||||||
|
@@ -10,6 +10,7 @@
|
|||||||
|
|
||||||
use MyAAC\Cache\Cache;
|
use MyAAC\Cache\Cache;
|
||||||
use MyAAC\Models\Menu;
|
use MyAAC\Models\Menu;
|
||||||
|
use MyAAC\Plugins;
|
||||||
|
|
||||||
defined('MYAAC') or die('Direct access not allowed!');
|
defined('MYAAC') or die('Direct access not allowed!');
|
||||||
$title = 'Menus';
|
$title = 'Menus';
|
||||||
@@ -21,6 +22,8 @@ if (!hasFlag(FLAG_CONTENT_MENUS) && !superAdmin()) {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$pluginThemes = Plugins::getThemes();
|
||||||
|
|
||||||
if (isset($_POST['template'])) {
|
if (isset($_POST['template'])) {
|
||||||
$template = $_POST['template'];
|
$template = $_POST['template'];
|
||||||
|
|
||||||
@@ -64,9 +67,16 @@ if (isset($_POST['template'])) {
|
|||||||
success('Saved at ' . date('H:i'));
|
success('Saved at ' . date('H:i'));
|
||||||
}
|
}
|
||||||
|
|
||||||
$file = TEMPLATES . $template . '/config.php';
|
$path = TEMPLATES . $template;
|
||||||
if (file_exists($file)) {
|
|
||||||
require_once $file;
|
if (isset($pluginThemes[$template])) {
|
||||||
|
$path = BASE . $pluginThemes[$template];
|
||||||
|
}
|
||||||
|
|
||||||
|
$path .= '/config.php';
|
||||||
|
|
||||||
|
if (file_exists($path)) {
|
||||||
|
require_once $path;
|
||||||
} else {
|
} else {
|
||||||
echo 'Cannot find template config.php file.';
|
echo 'Cannot find template config.php file.';
|
||||||
return;
|
return;
|
||||||
@@ -169,8 +179,13 @@ if (isset($_POST['template'])) {
|
|||||||
} else {
|
} else {
|
||||||
$templates = Menu::select('template')->distinct()->get()->toArray();
|
$templates = Menu::select('template')->distinct()->get()->toArray();
|
||||||
foreach ($templates as $key => $value) {
|
foreach ($templates as $key => $value) {
|
||||||
$file = TEMPLATES . $value['template'] . '/config.php';
|
$path = TEMPLATES . $value['template'];
|
||||||
if (!file_exists($file)) {
|
|
||||||
|
if (isset($pluginThemes[$value['template']])) {
|
||||||
|
$path = BASE . $pluginThemes[$value['template']];
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!file_exists($path . '/config.php')) {
|
||||||
unset($templates[$key]);
|
unset($templates[$key]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -7,7 +7,7 @@ defined('MYAAC') or die('Direct access not allowed!');
|
|||||||
$accounts = 0;
|
$accounts = 0;
|
||||||
|
|
||||||
if ($db->hasColumn('accounts', 'created')) {
|
if ($db->hasColumn('accounts', 'created')) {
|
||||||
$accounts = Account::orderByDesc('created')->limit(10)->get(['created', (USE_ACCOUNT_NAME ? 'name' : 'id')])->toArray();
|
$accounts = Account::orderByDesc('created')->limit(10)->get(['id', 'created'])->toArray();
|
||||||
}
|
}
|
||||||
|
|
||||||
$twig->display('created.html.twig', array(
|
$twig->display('created.html.twig', array(
|
||||||
|
@@ -19,7 +19,7 @@
|
|||||||
{% set i = i + 1 %}
|
{% set i = i + 1 %}
|
||||||
<tr>
|
<tr>
|
||||||
<th>{{ i }}</th>
|
<th>{{ i }}</th>
|
||||||
<td><a href="?p=accounts&search_name={{ result.name }}">{{ result.name }}</a></td>
|
<td><a href="?p=accounts&id={{ result.id }}">{{ result.id }}</a></td>
|
||||||
<td>{{ result.created|date("M d Y, H:i:s") }}</td>
|
<td>{{ result.created|date("M d Y, H:i:s") }}</td>
|
||||||
</tr>
|
</tr>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
|
@@ -26,7 +26,7 @@ if (!hasFlag(FLAG_CONTENT_PAGES) && !superAdmin()) {
|
|||||||
|
|
||||||
header('X-XSS-Protection:0');
|
header('X-XSS-Protection:0');
|
||||||
|
|
||||||
// some constants, used mainly by database (cannot by modified without schema changes)
|
// some constants, used mainly by database (cannot be modified without schema changes)
|
||||||
const NEWS_TITLE_LIMIT = 100;
|
const NEWS_TITLE_LIMIT = 100;
|
||||||
const NEWS_BODY_LIMIT = 65535; // maximum news body length
|
const NEWS_BODY_LIMIT = 65535; // maximum news body length
|
||||||
const ARTICLE_TEXT_LIMIT = 300;
|
const ARTICLE_TEXT_LIMIT = 300;
|
||||||
@@ -136,9 +136,18 @@ if($action == 'edit' || $action == 'new') {
|
|||||||
|
|
||||||
$query = $db->query('SELECT * FROM ' . $db->tableName(TABLE_PREFIX . 'news'));
|
$query = $db->query('SELECT * FROM ' . $db->tableName(TABLE_PREFIX . 'news'));
|
||||||
$newses = array();
|
$newses = array();
|
||||||
|
|
||||||
|
$cachePlayers = [];
|
||||||
foreach ($query as $_news) {
|
foreach ($query as $_news) {
|
||||||
|
$playerId = $_news['player_id'];
|
||||||
|
if (isset($cachePlayers[$playerId])) {
|
||||||
|
$_player = $cachePlayers[$playerId];
|
||||||
|
}
|
||||||
|
else {
|
||||||
$_player = new OTS_Player();
|
$_player = new OTS_Player();
|
||||||
$_player->load($_news['player_id']);
|
$_player->load($playerId);
|
||||||
|
$cachePlayers[$playerId] = $_player;
|
||||||
|
}
|
||||||
|
|
||||||
$newses[$_news['type']][] = array(
|
$newses[$_news['type']][] = array(
|
||||||
'id' => $_news['id'],
|
'id' => $_news['id'],
|
||||||
@@ -147,7 +156,7 @@ foreach ($query as $_news) {
|
|||||||
'title' => $_news['title'],
|
'title' => $_news['title'],
|
||||||
'date' => $_news['date'],
|
'date' => $_news['date'],
|
||||||
'player_name' => $_player->isLoaded() ? $_player->getName() : '',
|
'player_name' => $_player->isLoaded() ? $_player->getName() : '',
|
||||||
'player_link' => $_player->isLoaded() ? getPlayerLink($_player->getName(), false) : '',
|
'player_link' => $_player->isLoaded() ? getPlayerLink($_player, false) : '',
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -16,7 +16,7 @@ $title = 'Notepad';
|
|||||||
csrfProtect();
|
csrfProtect();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @var $account_logged OTS_Account
|
* @var OTS_Account $account_logged
|
||||||
*/
|
*/
|
||||||
$_content = '';
|
$_content = '';
|
||||||
$notepad = ModelsNotepad::where('account_id', $account_logged->getId())->first();
|
$notepad = ModelsNotepad::where('account_id', $account_logged->getId())->first();
|
||||||
|
@@ -51,22 +51,20 @@ else if (isset($_REQUEST['search'])) {
|
|||||||
if (strlen($search_player) < 3 && !Validator::number($search_player)) {
|
if (strlen($search_player) < 3 && !Validator::number($search_player)) {
|
||||||
echo_error('Player name is too short.');
|
echo_error('Player name is too short.');
|
||||||
} else {
|
} else {
|
||||||
$query = $db->query('SELECT `id` FROM `players` WHERE `name` = ' . $db->quote($search_player));
|
$query = Player::where('name', 'like', '%' . $search_player . '%')->orderBy('name')->limit(11)->get(['id', 'name']);
|
||||||
if ($query->rowCount() == 1) {
|
if (count($query) == 0) {
|
||||||
$query = $query->fetch();
|
echo_error('No entries found.');
|
||||||
$id = (int)$query['id'];
|
} else if (count($query) == 1) {
|
||||||
|
$id = $query->first()->getKey();
|
||||||
|
} else if (count($query) > 10) {
|
||||||
|
echo_error('Specified name resulted with too many players.');
|
||||||
} else {
|
} else {
|
||||||
$query = $db->query('SELECT `id`, `name` FROM `players` WHERE `name` LIKE ' . $db->quote('%' . $search_player . '%'));
|
|
||||||
if ($query->rowCount() > 0 && $query->rowCount() <= 10) {
|
|
||||||
$str_construct = 'Do you mean?<ul>';
|
$str_construct = 'Do you mean?<ul>';
|
||||||
foreach ($query as $row)
|
foreach ($query as $row) {
|
||||||
$str_construct .= '<li><a href="' . $player_base . '&id=' . $row['id'] . '">' . $row['name'] . '</a></li>';
|
$str_construct .= '<li><a href="' . $player_base . '&id=' . $row->getKey() . '">' . $row->name . '</a></li>';
|
||||||
|
}
|
||||||
$str_construct .= '</ul>';
|
$str_construct .= '</ul>';
|
||||||
echo_error($str_construct);
|
echo_error($str_construct);
|
||||||
} else if ($query->rowCount() > 10)
|
|
||||||
echo_error('Specified name resulted with too many players.');
|
|
||||||
else
|
|
||||||
echo_error('No entries found.');
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -202,7 +200,7 @@ else if (isset($_REQUEST['search'])) {
|
|||||||
|
|
||||||
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'];
|
||||||
@@ -274,7 +272,7 @@ else if (isset($_REQUEST['search'])) {
|
|||||||
$player->setLossContainers($loss_containers);
|
$player->setLossContainers($loss_containers);
|
||||||
$player->setLossItems($loss_items);
|
$player->setLossItems($loss_items);
|
||||||
}
|
}
|
||||||
if ($db->hasColumn('players', 'blessings'))
|
if ($hasBlessingsColumn)
|
||||||
$player->setBlessings($blessings);
|
$player->setBlessings($blessings);
|
||||||
|
|
||||||
if ($hasBlessingColumn) {
|
if ($hasBlessingColumn) {
|
||||||
@@ -307,7 +305,7 @@ else if (isset($_REQUEST['search'])) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else if ($id == 0) {
|
} else if ($id == 0) {
|
||||||
$players_db = $db->query('SELECT `id`, `name`, `level` FROM `players` ORDER BY `id` asc');
|
$players_db = Player::orderBy('id')->get(['id','name', 'level']);
|
||||||
?>
|
?>
|
||||||
<div class="col-12 col-sm-12 col-lg-10">
|
<div class="col-12 col-sm-12 col-lg-10">
|
||||||
<div class="card card-info card-outline">
|
<div class="card card-info card-outline">
|
||||||
@@ -327,11 +325,11 @@ else if (isset($_REQUEST['search'])) {
|
|||||||
<tbody>
|
<tbody>
|
||||||
<?php foreach ($players_db as $player_db): ?>
|
<?php foreach ($players_db as $player_db): ?>
|
||||||
<tr>
|
<tr>
|
||||||
<th><?php echo $player_db['id']; ?></th>
|
<th><?php echo $player_db->id; ?></th>
|
||||||
<td><?php echo $player_db['name']; ?></a></td>
|
<td><?php echo $player_db->name; ?></a></td>
|
||||||
<td><?php echo $player_db['level']; ?></a></td>
|
<td><?php echo $player_db->level; ?></a></td>
|
||||||
|
|
||||||
<td><a href="?p=players&id=<?php echo $player_db['id']; ?>" class="btn btn-success btn-sm" title="Edit">
|
<td><a href="?p=players&id=<?php echo $player_db->id; ?>" class="btn btn-success btn-sm" title="Edit">
|
||||||
<i class="fas fa-pencil-alt"></i>
|
<i class="fas fa-pencil-alt"></i>
|
||||||
</a>
|
</a>
|
||||||
</td>
|
</td>
|
||||||
|
@@ -21,7 +21,13 @@ if (!getBoolean(setting('core.admin_plugins_manage_enable'))) {
|
|||||||
warning('Plugin installation and management is disabled in Settings.<br/>If you wish to enable, go to Settings and enable <strong>Enable Plugins Manage</strong>.');
|
warning('Plugin installation and management is disabled in Settings.<br/>If you wish to enable, go to Settings and enable <strong>Enable Plugins Manage</strong>.');
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
$twig->display('admin.plugins.form.html.twig');
|
$pluginUploadEnabled = true;
|
||||||
|
if(!\class_exists('\ZipArchive')) {
|
||||||
|
error('Please install PHP zip extension. Plugins upload disabled until then.');
|
||||||
|
$pluginUploadEnabled = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
$twig->display('admin.plugins.form.html.twig', ['pluginUploadEnabled' => $pluginUploadEnabled]);
|
||||||
|
|
||||||
if (isset($_POST['uninstall'])) {
|
if (isset($_POST['uninstall'])) {
|
||||||
$uninstall = $_POST['uninstall'];
|
$uninstall = $_POST['uninstall'];
|
||||||
|
@@ -48,7 +48,7 @@ if (!is_array($settingsFile)) {
|
|||||||
|
|
||||||
$settingsKeyName = ($plugin == 'core' ? $plugin : $settingsFile['key']);
|
$settingsKeyName = ($plugin == 'core' ? $plugin : $settingsFile['key']);
|
||||||
|
|
||||||
$title = ($plugin == 'core' ? 'Settings' : 'Plugin Settings - ' . $plugin);
|
$title = ($plugin == 'core' ? 'Settings' : 'Plugin Settings - ' . $settingsFile['name']);
|
||||||
|
|
||||||
$settingsParsed = Settings::display($settingsKeyName, $settingsFile['settings']);
|
$settingsParsed = Settings::display($settingsKeyName, $settingsFile['settings']);
|
||||||
|
|
||||||
|
@@ -6,7 +6,7 @@
|
|||||||
<?php echo template_header(true); ?>
|
<?php echo template_header(true); ?>
|
||||||
<title><?php echo (isset($title) ? $title . ' - ' : '') . $config['lua']['serverName'];?></title>
|
<title><?php echo (isset($title) ? $title . ' - ' : '') . $config['lua']['serverName'];?></title>
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
|
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
|
||||||
<link rel="stylesheet" href="<?php echo BASE_URL; ?>tools/ext/admin-lte/css/adminlte.min.css">
|
<link rel="stylesheet" href="<?php echo BASE_URL; ?>tools/css/adminlte.min.css">
|
||||||
<link rel="stylesheet" href="<?php echo BASE_URL; ?>tools/css/font-awesome.min.css">
|
<link rel="stylesheet" href="<?php echo BASE_URL; ?>tools/css/font-awesome.min.css">
|
||||||
<?php if (isset($use_datatable)) { ?>
|
<?php if (isset($use_datatable)) { ?>
|
||||||
<link rel="stylesheet" href="<?php echo BASE_URL; ?>tools/css/datatables.bs.min.css">
|
<link rel="stylesheet" href="<?php echo BASE_URL; ?>tools/css/datatables.bs.min.css">
|
||||||
@@ -197,7 +197,7 @@ if ($logged && admin()) {
|
|||||||
<script src="<?php echo BASE_URL; ?>tools/js/datatables.min.js"></script>
|
<script src="<?php echo BASE_URL; ?>tools/js/datatables.min.js"></script>
|
||||||
<script src="<?php echo BASE_URL; ?>tools/js/datatables.bs.min.js"></script>
|
<script src="<?php echo BASE_URL; ?>tools/js/datatables.bs.min.js"></script>
|
||||||
<?php } ?>
|
<?php } ?>
|
||||||
<script src="<?php echo BASE_URL; ?>tools/ext/admin-lte/js/adminlte.min.js"></script>
|
<script src="<?php echo BASE_URL; ?>tools/js/adminlte.min.js"></script>
|
||||||
<?php $hooks->trigger(HOOK_ADMIN_BODY_END); ?>
|
<?php $hooks->trigger(HOOK_ADMIN_BODY_END); ?>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
@@ -20,14 +20,14 @@
|
|||||||
*
|
*
|
||||||
* @package MyAAC
|
* @package MyAAC
|
||||||
* @author Slawkens <slawkens@gmail.com>
|
* @author Slawkens <slawkens@gmail.com>
|
||||||
* @copyright 2019 MyAAC
|
* @copyright 2024 MyAAC
|
||||||
* @link https://my-aac.org
|
* @link https://my-aac.org
|
||||||
*/
|
*/
|
||||||
if (version_compare(phpversion(), '8.1', '<')) die('PHP version 8.1 or higher is required.');
|
if (version_compare(phpversion(), '8.1', '<')) die('PHP version 8.1 or higher is required.');
|
||||||
|
|
||||||
const MYAAC = true;
|
const MYAAC = true;
|
||||||
const MYAAC_VERSION = '1.0-beta';
|
const MYAAC_VERSION = '1.0';
|
||||||
const DATABASE_VERSION = 40;
|
const DATABASE_VERSION = 42;
|
||||||
const TABLE_PREFIX = 'myaac_';
|
const TABLE_PREFIX = 'myaac_';
|
||||||
define('START_TIME', microtime(true));
|
define('START_TIME', microtime(true));
|
||||||
define('MYAAC_OS', stripos(PHP_OS, 'WIN') === 0 ? 'WINDOWS' : (strtoupper(PHP_OS) === 'DARWIN' ? 'MAC' : 'LINUX'));
|
define('MYAAC_OS', stripos(PHP_OS, 'WIN') === 0 ? 'WINDOWS' : (strtoupper(PHP_OS) === 'DARWIN' ? 'MAC' : 'LINUX'));
|
||||||
@@ -156,7 +156,7 @@ if (file_exists(BASE . 'config.local.php')) {
|
|||||||
|
|
||||||
/** @var array $config */
|
/** @var array $config */
|
||||||
ini_set('log_errors', 1);
|
ini_set('log_errors', 1);
|
||||||
if(@$config['env'] === 'dev') {
|
if(@$config['env'] === 'dev' || defined('MYAAC_INSTALL')) {
|
||||||
ini_set('display_errors', 1);
|
ini_set('display_errors', 1);
|
||||||
ini_set('display_startup_errors', 1);
|
ini_set('display_startup_errors', 1);
|
||||||
error_reporting(E_ALL);
|
error_reporting(E_ALL);
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"require": {
|
"require": {
|
||||||
"php": "^8.0",
|
"php": "^8.1",
|
||||||
"ext-pdo": "*",
|
"ext-pdo": "*",
|
||||||
"ext-pdo_mysql": "*",
|
"ext-pdo_mysql": "*",
|
||||||
"ext-json": "*",
|
"ext-json": "*",
|
||||||
@@ -15,11 +15,13 @@
|
|||||||
"illuminate/database": "^10.18",
|
"illuminate/database": "^10.18",
|
||||||
"peppeocchi/php-cron-scheduler": "4.*",
|
"peppeocchi/php-cron-scheduler": "4.*",
|
||||||
"symfony/console": "^6.4",
|
"symfony/console": "^6.4",
|
||||||
"symfony/string": "^6.4"
|
"symfony/string": "^6.4",
|
||||||
|
"symfony/var-dumper": "^6.4",
|
||||||
|
"filp/whoops": "^2.15",
|
||||||
|
"maximebf/debugbar": "1.*"
|
||||||
},
|
},
|
||||||
"require-dev": {
|
"require-dev": {
|
||||||
"filp/whoops": "^2.15",
|
"phpstan/phpstan": "^1.10"
|
||||||
"maximebf/debugbar": "dev-master"
|
|
||||||
},
|
},
|
||||||
"autoload": {
|
"autoload": {
|
||||||
"psr-4": {
|
"psr-4": {
|
||||||
|
2915
composer.lock
generated
Normal file
2915
composer.lock
generated
Normal file
File diff suppressed because it is too large
Load Diff
@@ -67,7 +67,7 @@ describe('Install MyAAC', () => {
|
|||||||
|
|
||||||
cy.get('form').submit()
|
cy.get('form').submit()
|
||||||
|
|
||||||
cy.contains('[class="alert alert-success"]', 'Congratulations', { timeout: 30000 }).should('be.visible')
|
cy.contains('[class="alert alert-success"]', 'Congratulations', { timeout: 60000 }).should('be.visible')
|
||||||
|
|
||||||
cy.wait(2000);
|
cy.wait(2000);
|
||||||
|
|
||||||
|
@@ -134,7 +134,7 @@ if(setting('core.anonymous_usage_statistics')) {
|
|||||||
if(fetchDatabaseConfig('last_usage_report', $value)) {
|
if(fetchDatabaseConfig('last_usage_report', $value)) {
|
||||||
$should_report = time() > (int)$value + $report_time;
|
$should_report = time() > (int)$value + $report_time;
|
||||||
if($cache->enabled()) {
|
if($cache->enabled()) {
|
||||||
$cache->set('last_usage_report', $value);
|
$cache->set('last_usage_report', $value, 60 * 60);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
@@ -148,7 +148,7 @@ if(setting('core.anonymous_usage_statistics')) {
|
|||||||
|
|
||||||
updateDatabaseConfig('last_usage_report', time());
|
updateDatabaseConfig('last_usage_report', time());
|
||||||
if($cache->enabled()) {
|
if($cache->enabled()) {
|
||||||
$cache->set('last_usage_report', time());
|
$cache->set('last_usage_report', time(), 60 * 60);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -17,7 +17,7 @@ function query($query)
|
|||||||
|
|
||||||
// define php version id if its not already
|
// define php version id if its not already
|
||||||
if(!defined('PHP_VERSION_ID')) {
|
if(!defined('PHP_VERSION_ID')) {
|
||||||
$version = explode('.', PHP_VERSION);
|
$version = array_map('intval', explode('.', PHP_VERSION));
|
||||||
|
|
||||||
define('PHP_VERSION_ID', ($version[0] * 10000 + $version[1] * 100 + $version[2]));
|
define('PHP_VERSION_ID', ($version[0] * 10000 + $version[1] * 100 + $version[2]));
|
||||||
}
|
}
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
SET @myaac_database_version = 40;
|
SET @myaac_database_version = 42;
|
||||||
|
|
||||||
CREATE TABLE `myaac_account_actions`
|
CREATE TABLE `myaac_account_actions`
|
||||||
(
|
(
|
||||||
@@ -8,7 +8,7 @@ CREATE TABLE `myaac_account_actions`
|
|||||||
`date` INT(11) NOT NULL DEFAULT 0,
|
`date` INT(11) NOT NULL DEFAULT 0,
|
||||||
`action` VARCHAR(255) NOT NULL DEFAULT '',
|
`action` VARCHAR(255) NOT NULL DEFAULT '',
|
||||||
KEY (`account_id`)
|
KEY (`account_id`)
|
||||||
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8;
|
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8mb4;
|
||||||
|
|
||||||
CREATE TABLE `myaac_admin_menu`
|
CREATE TABLE `myaac_admin_menu`
|
||||||
(
|
(
|
||||||
@@ -19,22 +19,7 @@ CREATE TABLE `myaac_admin_menu`
|
|||||||
`flags` INT(11) NOT NULL DEFAULT 0,
|
`flags` INT(11) NOT NULL DEFAULT 0,
|
||||||
`enabled` INT(1) NOT NULL DEFAULT 1,
|
`enabled` INT(1) NOT NULL DEFAULT 1,
|
||||||
PRIMARY KEY (`id`)
|
PRIMARY KEY (`id`)
|
||||||
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8;
|
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8mb4;
|
||||||
|
|
||||||
CREATE TABLE `myaac_bugtracker`
|
|
||||||
(
|
|
||||||
`account` VARCHAR(255) NOT NULL,
|
|
||||||
`type` INT(11) NOT NULL DEFAULT 0,
|
|
||||||
`status` INT(11) NOT NULL DEFAULT 0,
|
|
||||||
`text` text NOT NULL,
|
|
||||||
`id` INT(11) NOT NULL DEFAULT 0,
|
|
||||||
`subject` VARCHAR(255) NOT NULL DEFAULT '',
|
|
||||||
`reply` INT(11) NOT NULL DEFAULT 0,
|
|
||||||
`who` INT(11) NOT NULL DEFAULT 0,
|
|
||||||
`uid` INT(11) NOT NULL AUTO_INCREMENT,
|
|
||||||
`tag` INT(11) NOT NULL DEFAULT 0,
|
|
||||||
PRIMARY KEY (`uid`)
|
|
||||||
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8;
|
|
||||||
|
|
||||||
CREATE TABLE `myaac_changelog`
|
CREATE TABLE `myaac_changelog`
|
||||||
(
|
(
|
||||||
@@ -46,7 +31,7 @@ CREATE TABLE `myaac_changelog`
|
|||||||
`player_id` INT(11) NOT NULL DEFAULT 0,
|
`player_id` INT(11) NOT NULL DEFAULT 0,
|
||||||
`hide` TINYINT(1) NOT NULL DEFAULT 0,
|
`hide` TINYINT(1) NOT NULL DEFAULT 0,
|
||||||
PRIMARY KEY (`id`)
|
PRIMARY KEY (`id`)
|
||||||
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8;
|
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8mb4;
|
||||||
|
|
||||||
INSERT INTO `myaac_changelog` (`id`, `type`, `where`, `date`, `body`, `hide`) VALUES (1, 3, 2, UNIX_TIMESTAMP(), 'MyAAC installed. (:', 0);
|
INSERT INTO `myaac_changelog` (`id`, `type`, `where`, `date`, `body`, `hide`) VALUES (1, 3, 2, UNIX_TIMESTAMP(), 'MyAAC installed. (:', 0);
|
||||||
|
|
||||||
@@ -57,7 +42,7 @@ CREATE TABLE `myaac_config`
|
|||||||
`value` VARCHAR(1000) NOT NULL,
|
`value` VARCHAR(1000) NOT NULL,
|
||||||
PRIMARY KEY (`id`),
|
PRIMARY KEY (`id`),
|
||||||
UNIQUE (`name`)
|
UNIQUE (`name`)
|
||||||
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8;
|
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8mb4;
|
||||||
|
|
||||||
INSERT INTO `myaac_config` (`name`, `value`) VALUES ('database_version', @myaac_database_version);
|
INSERT INTO `myaac_config` (`name`, `value`) VALUES ('database_version', @myaac_database_version);
|
||||||
|
|
||||||
@@ -69,7 +54,7 @@ CREATE TABLE `myaac_faq`
|
|||||||
`ordering` INT(11) NOT NULL DEFAULT 0,
|
`ordering` INT(11) NOT NULL DEFAULT 0,
|
||||||
`hide` TINYINT(1) NOT NULL DEFAULT 0,
|
`hide` TINYINT(1) NOT NULL DEFAULT 0,
|
||||||
PRIMARY KEY (`id`)
|
PRIMARY KEY (`id`)
|
||||||
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8;
|
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8mb4;
|
||||||
|
|
||||||
CREATE TABLE `myaac_forum_boards`
|
CREATE TABLE `myaac_forum_boards`
|
||||||
(
|
(
|
||||||
@@ -82,7 +67,7 @@ CREATE TABLE `myaac_forum_boards`
|
|||||||
`closed` TINYINT(1) NOT NULL DEFAULT 0,
|
`closed` TINYINT(1) NOT NULL DEFAULT 0,
|
||||||
`hide` TINYINT(1) NOT NULL DEFAULT 0,
|
`hide` TINYINT(1) NOT NULL DEFAULT 0,
|
||||||
PRIMARY KEY (`id`)
|
PRIMARY KEY (`id`)
|
||||||
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8;
|
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8mb4;
|
||||||
INSERT INTO `myaac_forum_boards` (`id`, `name`, `description`, `ordering`, `closed`) VALUES (NULL, 'News', 'News commenting', 0, 1);
|
INSERT INTO `myaac_forum_boards` (`id`, `name`, `description`, `ordering`, `closed`) VALUES (NULL, 'News', 'News commenting', 0, 1);
|
||||||
INSERT INTO `myaac_forum_boards` (`id`, `name`, `description`, `ordering`) VALUES (NULL, 'Trade', 'Trade offers.', 1);
|
INSERT INTO `myaac_forum_boards` (`id`, `name`, `description`, `ordering`) VALUES (NULL, 'Trade', 'Trade offers.', 1);
|
||||||
INSERT INTO `myaac_forum_boards` (`id`, `name`, `description`, `ordering`) VALUES (NULL, 'Quests', 'Quest making.', 2);
|
INSERT INTO `myaac_forum_boards` (`id`, `name`, `description`, `ordering`) VALUES (NULL, 'Quests', 'Quest making.', 2);
|
||||||
@@ -106,12 +91,12 @@ CREATE TABLE `myaac_forum`
|
|||||||
`post_date` int(20) NOT NULL default '0',
|
`post_date` int(20) NOT NULL default '0',
|
||||||
`last_edit_aid` int(20) NOT NULL default '0',
|
`last_edit_aid` int(20) NOT NULL default '0',
|
||||||
`edit_date` int(20) NOT NULL default '0',
|
`edit_date` int(20) NOT NULL default '0',
|
||||||
`post_ip` varchar(32) NOT NULL default '0.0.0.0',
|
`post_ip` varchar(45) NOT NULL default '0.0.0.0',
|
||||||
`sticked` tinyint(1) NOT NULL DEFAULT '0',
|
`sticked` tinyint(1) NOT NULL DEFAULT '0',
|
||||||
`closed` tinyint(1) NOT NULL DEFAULT '0',
|
`closed` tinyint(1) NOT NULL DEFAULT '0',
|
||||||
PRIMARY KEY (`id`),
|
PRIMARY KEY (`id`),
|
||||||
KEY `section` (`section`)
|
KEY `section` (`section`)
|
||||||
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8;
|
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8mb4;
|
||||||
|
|
||||||
CREATE TABLE `myaac_menu`
|
CREATE TABLE `myaac_menu`
|
||||||
(
|
(
|
||||||
@@ -125,7 +110,7 @@ CREATE TABLE `myaac_menu`
|
|||||||
`ordering` INT(11) NOT NULL DEFAULT 0,
|
`ordering` INT(11) NOT NULL DEFAULT 0,
|
||||||
`enabled` INT(1) NOT NULL DEFAULT 1,
|
`enabled` INT(1) NOT NULL DEFAULT 1,
|
||||||
PRIMARY KEY (`id`)
|
PRIMARY KEY (`id`)
|
||||||
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8;
|
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8mb4;
|
||||||
|
|
||||||
CREATE TABLE `myaac_monsters` (
|
CREATE TABLE `myaac_monsters` (
|
||||||
`id` int(11) NOT NULL AUTO_INCREMENT,
|
`id` int(11) NOT NULL AUTO_INCREMENT,
|
||||||
@@ -158,7 +143,7 @@ CREATE TABLE `myaac_monsters` (
|
|||||||
`loot` text NOT NULL,
|
`loot` text NOT NULL,
|
||||||
`summons` TEXT NOT NULL,
|
`summons` TEXT NOT NULL,
|
||||||
PRIMARY KEY (`id`)
|
PRIMARY KEY (`id`)
|
||||||
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8;
|
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8mb4;
|
||||||
|
|
||||||
CREATE TABLE `myaac_news`
|
CREATE TABLE `myaac_news`
|
||||||
(
|
(
|
||||||
@@ -176,7 +161,7 @@ CREATE TABLE `myaac_news`
|
|||||||
`article_image` VARCHAR(100) NOT NULL DEFAULT '',
|
`article_image` VARCHAR(100) NOT NULL DEFAULT '',
|
||||||
`hide` TINYINT(1) NOT NULL DEFAULT 0,
|
`hide` TINYINT(1) NOT NULL DEFAULT 0,
|
||||||
PRIMARY KEY (`id`)
|
PRIMARY KEY (`id`)
|
||||||
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8;
|
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8mb4;
|
||||||
|
|
||||||
CREATE TABLE `myaac_news_categories`
|
CREATE TABLE `myaac_news_categories`
|
||||||
(
|
(
|
||||||
@@ -186,7 +171,7 @@ CREATE TABLE `myaac_news_categories`
|
|||||||
`icon_id` INT(2) NOT NULL DEFAULT 0,
|
`icon_id` INT(2) NOT NULL DEFAULT 0,
|
||||||
`hide` TINYINT(1) NOT NULL DEFAULT 0,
|
`hide` TINYINT(1) NOT NULL DEFAULT 0,
|
||||||
PRIMARY KEY (`id`)
|
PRIMARY KEY (`id`)
|
||||||
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8;
|
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8mb4;
|
||||||
|
|
||||||
INSERT INTO `myaac_news_categories` (`id`, `icon_id`) VALUES (NULL, 0);
|
INSERT INTO `myaac_news_categories` (`id`, `icon_id`) VALUES (NULL, 0);
|
||||||
INSERT INTO `myaac_news_categories` (`id`, `icon_id`) VALUES (NULL, 1);
|
INSERT INTO `myaac_news_categories` (`id`, `icon_id`) VALUES (NULL, 1);
|
||||||
@@ -202,7 +187,7 @@ CREATE TABLE `myaac_notepad`
|
|||||||
`content` TEXT NOT NULL,
|
`content` TEXT NOT NULL,
|
||||||
/*`public` TINYINT(1) NOT NULL DEFAULT 0*/
|
/*`public` TINYINT(1) NOT NULL DEFAULT 0*/
|
||||||
PRIMARY KEY (`id`)
|
PRIMARY KEY (`id`)
|
||||||
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8;
|
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8mb4;
|
||||||
|
|
||||||
CREATE TABLE `myaac_pages`
|
CREATE TABLE `myaac_pages`
|
||||||
(
|
(
|
||||||
@@ -218,7 +203,7 @@ CREATE TABLE `myaac_pages`
|
|||||||
`hide` TINYINT(1) NOT NULL DEFAULT 0,
|
`hide` TINYINT(1) NOT NULL DEFAULT 0,
|
||||||
PRIMARY KEY (`id`),
|
PRIMARY KEY (`id`),
|
||||||
UNIQUE (`name`)
|
UNIQUE (`name`)
|
||||||
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8;
|
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8mb4;
|
||||||
|
|
||||||
CREATE TABLE `myaac_gallery`
|
CREATE TABLE `myaac_gallery`
|
||||||
(
|
(
|
||||||
@@ -230,7 +215,7 @@ CREATE TABLE `myaac_gallery`
|
|||||||
`ordering` INT(11) NOT NULL DEFAULT 0,
|
`ordering` INT(11) NOT NULL DEFAULT 0,
|
||||||
`hide` TINYINT(1) NOT NULL DEFAULT 0,
|
`hide` TINYINT(1) NOT NULL DEFAULT 0,
|
||||||
PRIMARY KEY (`id`)
|
PRIMARY KEY (`id`)
|
||||||
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8;
|
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8mb4;
|
||||||
|
|
||||||
INSERT INTO `myaac_gallery` (`id`, `ordering`, `comment`, `image`, `thumb`, `author`) VALUES (NULL, 1, 'Demon', 'images/gallery/demon.jpg', 'images/gallery/demon_thumb.gif', 'MyAAC');
|
INSERT INTO `myaac_gallery` (`id`, `ordering`, `comment`, `image`, `thumb`, `author`) VALUES (NULL, 1, 'Demon', 'images/gallery/demon.jpg', 'images/gallery/demon_thumb.gif', 'MyAAC');
|
||||||
|
|
||||||
@@ -242,7 +227,7 @@ CREATE TABLE `myaac_settings`
|
|||||||
`value` TEXT NOT NULL,
|
`value` TEXT NOT NULL,
|
||||||
PRIMARY KEY (`id`),
|
PRIMARY KEY (`id`),
|
||||||
KEY `key` (`key`)
|
KEY `key` (`key`)
|
||||||
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8;
|
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8mb4;
|
||||||
|
|
||||||
CREATE TABLE `myaac_spells`
|
CREATE TABLE `myaac_spells`
|
||||||
(
|
(
|
||||||
@@ -265,7 +250,7 @@ CREATE TABLE `myaac_spells`
|
|||||||
`hide` TINYINT(1) NOT NULL DEFAULT 0,
|
`hide` TINYINT(1) NOT NULL DEFAULT 0,
|
||||||
PRIMARY KEY (`id`),
|
PRIMARY KEY (`id`),
|
||||||
UNIQUE (`name`)
|
UNIQUE (`name`)
|
||||||
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8;
|
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8mb4;
|
||||||
|
|
||||||
CREATE TABLE `myaac_visitors`
|
CREATE TABLE `myaac_visitors`
|
||||||
(
|
(
|
||||||
@@ -274,7 +259,7 @@ CREATE TABLE `myaac_visitors`
|
|||||||
`page` VARCHAR(2048) NOT NULL,
|
`page` VARCHAR(2048) NOT NULL,
|
||||||
`user_agent` VARCHAR(255) NOT NULL DEFAULT '',
|
`user_agent` VARCHAR(255) NOT NULL DEFAULT '',
|
||||||
UNIQUE (`ip`)
|
UNIQUE (`ip`)
|
||||||
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8;
|
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8mb4;
|
||||||
|
|
||||||
CREATE TABLE `myaac_weapons`
|
CREATE TABLE `myaac_weapons`
|
||||||
(
|
(
|
||||||
@@ -283,4 +268,4 @@ CREATE TABLE `myaac_weapons`
|
|||||||
`maglevel` INT(11) NOT NULL DEFAULT 0,
|
`maglevel` INT(11) NOT NULL DEFAULT 0,
|
||||||
`vocations` VARCHAR(100) NOT NULL DEFAULT '',
|
`vocations` VARCHAR(100) NOT NULL DEFAULT '',
|
||||||
PRIMARY KEY (`id`)
|
PRIMARY KEY (`id`)
|
||||||
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8;
|
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8mb4;
|
||||||
|
@@ -3,9 +3,9 @@
|
|||||||
use Twig\Environment as Twig_Environment;
|
use Twig\Environment as Twig_Environment;
|
||||||
use Twig\Loader\FilesystemLoader as Twig_FilesystemLoader;
|
use Twig\Loader\FilesystemLoader as Twig_FilesystemLoader;
|
||||||
|
|
||||||
require '../common.php';
|
const MYAAC_INSTALL = true;
|
||||||
|
|
||||||
define('MYAAC_INSTALL', true);
|
require '../common.php';
|
||||||
|
|
||||||
// includes
|
// includes
|
||||||
require SYSTEM . 'functions.php';
|
require SYSTEM . 'functions.php';
|
||||||
@@ -114,7 +114,7 @@ else if($step == 'finish') {
|
|||||||
$email = $_SESSION['var_email'];
|
$email = $_SESSION['var_email'];
|
||||||
$password = $_SESSION['var_password'];
|
$password = $_SESSION['var_password'];
|
||||||
$password_confirm = $_SESSION['var_password_confirm'];
|
$password_confirm = $_SESSION['var_password_confirm'];
|
||||||
$player_name = $_SESSION['var_player_name'];
|
$player_name = $_SESSION['var_player_name'] ?? null;
|
||||||
|
|
||||||
// email check
|
// email check
|
||||||
if(empty($email)) {
|
if(empty($email)) {
|
||||||
@@ -125,18 +125,7 @@ else if($step == 'finish') {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// account check
|
// account check
|
||||||
if(isset($_SESSION['var_account'])) {
|
if(isset($_SESSION['var_account_id'])) {
|
||||||
if(empty($_SESSION['var_account'])) {
|
|
||||||
$errors[] = $locale['step_admin_account_error_empty'];
|
|
||||||
}
|
|
||||||
else if(!Validator::accountName($_SESSION['var_account'])) {
|
|
||||||
$errors[] = $locale['step_admin_account_error_format'];
|
|
||||||
}
|
|
||||||
else if(strtoupper($_SESSION['var_account']) == strtoupper($password)) {
|
|
||||||
$errors[] = $locale['step_admin_account_error_same'];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if(isset($_SESSION['var_account_id'])) {
|
|
||||||
if(empty($_SESSION['var_account_id'])) {
|
if(empty($_SESSION['var_account_id'])) {
|
||||||
$errors[] = $locale['step_admin_account_id_error_empty'];
|
$errors[] = $locale['step_admin_account_id_error_empty'];
|
||||||
}
|
}
|
||||||
@@ -147,6 +136,17 @@ else if($step == 'finish') {
|
|||||||
$errors[] = $locale['step_admin_account_id_error_same'];
|
$errors[] = $locale['step_admin_account_id_error_same'];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else if(isset($_SESSION['var_account'])) {
|
||||||
|
if(empty($_SESSION['var_account'])) {
|
||||||
|
$errors[] = $locale['step_admin_account_error_empty'];
|
||||||
|
}
|
||||||
|
else if(!Validator::accountName($_SESSION['var_account'])) {
|
||||||
|
$errors[] = $locale['step_admin_account_error_format'];
|
||||||
|
}
|
||||||
|
else if(strtoupper($_SESSION['var_account']) == strtoupper($password)) {
|
||||||
|
$errors[] = $locale['step_admin_account_error_same'];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// password check
|
// password check
|
||||||
if(empty($password)) {
|
if(empty($password)) {
|
||||||
@@ -159,13 +159,14 @@ else if($step == 'finish') {
|
|||||||
$errors[] = $locale['step_admin_password_confirm_error_not_same'];
|
$errors[] = $locale['step_admin_password_confirm_error_not_same'];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (isset($player_name)) {
|
||||||
// player name check
|
// player name check
|
||||||
if(empty($player_name)) {
|
if (empty($player_name)) {
|
||||||
$errors[] = $locale['step_admin_player_name_error_empty'];
|
$errors[] = $locale['step_admin_player_name_error_empty'];
|
||||||
}
|
} else if (!Validator::characterName($player_name)) {
|
||||||
else if(!Validator::characterName($player_name)) {
|
|
||||||
$errors[] = $locale['step_admin_player_name_error_format'];
|
$errors[] = $locale['step_admin_player_name_error_format'];
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if(!empty($errors)) {
|
if(!empty($errors)) {
|
||||||
$step = 'admin';
|
$step = 'admin';
|
||||||
@@ -182,14 +183,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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -198,7 +199,7 @@ if(is_writable(CACHE) && (MYAAC_OS != 'WINDOWS' || win_is_writable(CACHE))) {
|
|||||||
{
|
{
|
||||||
$content = warning('In file <b>install/ip.txt</b> must be your IP!<br/>
|
$content = warning('In file <b>install/ip.txt</b> must be your IP!<br/>
|
||||||
In file is:<br /><b>' . nl2br($file_content) . '</b><br/>
|
In file is:<br /><b>' . nl2br($file_content) . '</b><br/>
|
||||||
Your IP is:<br /><b>' . $_SERVER['REMOTE_ADDR'] . '</b>', true);
|
Your IP is:<br /><b>' . get_browser_real_ip() . '</b>', true);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
ob_start();
|
ob_start();
|
||||||
|
@@ -2,10 +2,15 @@
|
|||||||
defined('MYAAC') or die('Direct access not allowed!');
|
defined('MYAAC') or die('Direct access not allowed!');
|
||||||
|
|
||||||
// configuration
|
// configuration
|
||||||
$dirs_required = [
|
$dirs_required_writable = [
|
||||||
'system/logs',
|
'system/logs',
|
||||||
'system/cache',
|
'system/cache',
|
||||||
];
|
];
|
||||||
|
|
||||||
|
$dirs_required = [
|
||||||
|
'tools/ext' => $locale['step_requirements_folder_not_exists_tools_ext'],
|
||||||
|
];
|
||||||
|
|
||||||
$dirs_optional = [
|
$dirs_optional = [
|
||||||
GUILD_IMAGES_DIR => $locale['step_requirements_warning_images_guilds'],
|
GUILD_IMAGES_DIR => $locale['step_requirements_warning_images_guilds'],
|
||||||
GALLERY_DIR => $locale['step_requirements_warning_images_gallery'],
|
GALLERY_DIR => $locale['step_requirements_warning_images_gallery'],
|
||||||
@@ -18,6 +23,7 @@ $extensions_optional = [
|
|||||||
'gd' => $locale['step_requirements_warning_player_signatures'],
|
'gd' => $locale['step_requirements_warning_player_signatures'],
|
||||||
'zip' => $locale['step_requirements_warning_install_plugins'],
|
'zip' => $locale['step_requirements_warning_install_plugins'],
|
||||||
];
|
];
|
||||||
|
|
||||||
/*
|
/*
|
||||||
*
|
*
|
||||||
* @param string $name
|
* @param string $name
|
||||||
@@ -41,7 +47,7 @@ $failed = false;
|
|||||||
// start validating
|
// start validating
|
||||||
version_check($locale['step_requirements_php_version'], (PHP_VERSION_ID >= 50500), PHP_VERSION);
|
version_check($locale['step_requirements_php_version'], (PHP_VERSION_ID >= 50500), PHP_VERSION);
|
||||||
|
|
||||||
foreach ($dirs_required as $value)
|
foreach ($dirs_required_writable as $value)
|
||||||
{
|
{
|
||||||
$is_writable = is_writable(BASE . $value) && (MYAAC_OS != 'WINDOWS' || win_is_writable(BASE . $value));
|
$is_writable = is_writable(BASE . $value) && (MYAAC_OS != 'WINDOWS' || win_is_writable(BASE . $value));
|
||||||
version_check($locale['step_requirements_write_perms'] . ': ' . $value, $is_writable);
|
version_check($locale['step_requirements_write_perms'] . ': ' . $value, $is_writable);
|
||||||
@@ -52,6 +58,12 @@ foreach ($dirs_optional as $dir => $errorMsg) {
|
|||||||
version_check($locale['step_requirements_write_perms'] . ': ' . $dir, $is_writable, $is_writable ? '' : $errorMsg, true);
|
version_check($locale['step_requirements_write_perms'] . ': ' . $dir, $is_writable, $is_writable ? '' : $errorMsg, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
foreach ($dirs_required as $dir => $errorMsg)
|
||||||
|
{
|
||||||
|
$exists = is_dir(BASE . $dir);
|
||||||
|
version_check($locale['step_requirements_folder_exists'] . ': ' . $dir, $exists, $exists ? '' : $errorMsg);
|
||||||
|
}
|
||||||
|
|
||||||
$ini_register_globals = ini_get_bool('register_globals');
|
$ini_register_globals = ini_get_bool('register_globals');
|
||||||
version_check('register_long_arrays', !$ini_register_globals, $ini_register_globals ? $locale['on'] : $locale['off']);
|
version_check('register_long_arrays', !$ini_register_globals, $ini_register_globals ? $locale['on'] : $locale['off']);
|
||||||
|
|
||||||
@@ -78,4 +90,3 @@ if($failed) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
echo '</div>';
|
echo '</div>';
|
||||||
?>
|
|
||||||
|
@@ -40,50 +40,40 @@ if(!$error) {
|
|||||||
$configToSave['gzip_output'] = false;
|
$configToSave['gzip_output'] = false;
|
||||||
$configToSave['cache_engine'] = 'auto';
|
$configToSave['cache_engine'] = 'auto';
|
||||||
$configToSave['cache_prefix'] = 'myaac_' . generateRandomString(8, true, false, true);
|
$configToSave['cache_prefix'] = 'myaac_' . generateRandomString(8, true, false, true);
|
||||||
|
$configToSave['database_auto_migrate'] = true;
|
||||||
require BASE . 'install/includes/config.php';
|
|
||||||
|
|
||||||
if(!$error) {
|
if(!$error) {
|
||||||
|
$content = '';
|
||||||
|
$saved = Settings::saveConfig($configToSave, BASE . 'config.local.php', $content);
|
||||||
|
if ($saved) {
|
||||||
|
success($locale['step_database_config_saved']);
|
||||||
|
$_SESSION['saved'] = true;
|
||||||
|
|
||||||
|
require BASE . 'config.local.php';
|
||||||
|
require BASE . 'install/includes/config.php';
|
||||||
|
|
||||||
|
if (!$error) {
|
||||||
require BASE . 'install/includes/database.php';
|
require BASE . 'install/includes/database.php';
|
||||||
|
|
||||||
$locale['step_database_importing'] = str_replace('$DATABASE_NAME$', config('database_name'), $locale['step_database_importing']);
|
if (isset($database_error)) { // we failed connect to the database
|
||||||
success($locale['step_database_importing']);
|
|
||||||
|
|
||||||
if(isset($database_error)) { // we failed connect to the database
|
|
||||||
error($database_error);
|
error($database_error);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
if(!$db->hasTable('accounts')) {
|
if (!$db->hasTable('accounts')) {
|
||||||
$tmp = str_replace('$TABLE$', 'accounts', $locale['step_database_error_table']);
|
$tmp = str_replace('$TABLE$', 'accounts', $locale['step_database_error_table']);
|
||||||
error($tmp);
|
error($tmp);
|
||||||
$error = true;
|
$error = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!$db->hasTable('players')) {
|
if (!$error) {
|
||||||
$tmp = str_replace('$TABLE$', 'players', $locale['step_database_error_table']);
|
|
||||||
error($tmp);
|
|
||||||
$error = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(!$db->hasTable('guilds')) {
|
|
||||||
$tmp = str_replace('$TABLE$', 'guilds', $locale['step_database_error_table']);
|
|
||||||
error($tmp);
|
|
||||||
$error = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(!$error) {
|
|
||||||
$twig->display('install.installer.html.twig', array(
|
$twig->display('install.installer.html.twig', array(
|
||||||
'url' => 'tools/5-database.php',
|
'url' => 'tools/5-database.php',
|
||||||
'message' => $locale['loading_spinner']
|
'message' => $locale['loading_spinner']
|
||||||
));
|
));
|
||||||
|
|
||||||
$content = '';
|
|
||||||
$saved = Settings::saveConfig($configToSave, BASE . 'config.local.php', $content);
|
|
||||||
if($saved) {
|
|
||||||
success($locale['step_database_config_saved']);
|
|
||||||
$_SESSION['saved'] = true;
|
|
||||||
}
|
}
|
||||||
else {
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
$_SESSION['config_content'] = $content;
|
$_SESSION['config_content'] = $content;
|
||||||
unset($_SESSION['saved']);
|
unset($_SESSION['saved']);
|
||||||
|
|
||||||
@@ -92,8 +82,6 @@ if(!$error) {
|
|||||||
<textarea cols="70" rows="10">' . $content . '</textarea>');
|
<textarea cols="70" rows="10">' . $content . '</textarea>');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
?>
|
?>
|
||||||
|
|
||||||
|
@@ -18,6 +18,7 @@ if(!$error) {
|
|||||||
'locale' => $locale,
|
'locale' => $locale,
|
||||||
'session' => $_SESSION,
|
'session' => $_SESSION,
|
||||||
'account' => $account,
|
'account' => $account,
|
||||||
|
'hasTablePlayers' => $db->hasTable('players'),
|
||||||
'errors' => isset($errors) ? $errors : null,
|
'errors' => isset($errors) ? $errors : null,
|
||||||
'buttons' => next_buttons(true, $error ? false : true)
|
'buttons' => next_buttons(true, $error ? false : true)
|
||||||
));
|
));
|
||||||
|
@@ -1,5 +1,7 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
|
use MyAAC\Cache\Cache;
|
||||||
|
use MyAAC\Models\News;
|
||||||
use MyAAC\Settings;
|
use MyAAC\Settings;
|
||||||
|
|
||||||
defined('MYAAC') or die('Direct access not allowed!');
|
defined('MYAAC') or die('Direct access not allowed!');
|
||||||
@@ -7,29 +9,40 @@ defined('MYAAC') or die('Direct access not allowed!');
|
|||||||
ini_set('max_execution_time', 300);
|
ini_set('max_execution_time', 300);
|
||||||
if(isset($config['installed']) && $config['installed'] && !isset($_SESSION['saved'])) {
|
if(isset($config['installed']) && $config['installed'] && !isset($_SESSION['saved'])) {
|
||||||
warning($locale['already_installed']);
|
warning($locale['already_installed']);
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
else {
|
|
||||||
require SYSTEM . 'init.php';
|
|
||||||
if(!$error) {
|
|
||||||
if(USE_ACCOUNT_NAME || USE_ACCOUNT_NUMBER)
|
|
||||||
$account = isset($_SESSION['var_account']) ? $_SESSION['var_account'] : null;
|
|
||||||
else
|
|
||||||
$account_id = isset($_SESSION['var_account_id']) ? $_SESSION['var_account_id'] : null;
|
|
||||||
|
|
||||||
$password = $_SESSION['var_password'];
|
$cache = Cache::getInstance();
|
||||||
|
if ($cache->enabled()) {
|
||||||
|
// clear plugin_hooks to have fresh hooks
|
||||||
|
$cache->delete('plugins_hooks');
|
||||||
|
}
|
||||||
|
|
||||||
if(USE_ACCOUNT_SALT)
|
require SYSTEM . 'init.php';
|
||||||
{
|
if($error) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(USE_ACCOUNT_NAME || USE_ACCOUNT_NUMBER)
|
||||||
|
$account = $_SESSION['var_account'] ?? null;
|
||||||
|
else
|
||||||
|
$account_id = $_SESSION['var_account_id'] ?? null;
|
||||||
|
|
||||||
|
$password = $_SESSION['var_password'];
|
||||||
|
|
||||||
|
if(USE_ACCOUNT_SALT)
|
||||||
|
{
|
||||||
$salt = generateRandomString(10, false, true, true);
|
$salt = generateRandomString(10, false, true, true);
|
||||||
$password = $salt . $password;
|
$password = $salt . $password;
|
||||||
}
|
}
|
||||||
|
|
||||||
$account_db = new OTS_Account();
|
$account_db = new OTS_Account();
|
||||||
if(isset($account))
|
if(isset($account))
|
||||||
$account_db->find($account);
|
$account_db->find($account);
|
||||||
else
|
else
|
||||||
$account_db->load($account_id);
|
$account_db->load($account_id);
|
||||||
|
|
||||||
|
if ($db->hasTable('players')) {
|
||||||
$player_name = $_SESSION['var_player_name'];
|
$player_name = $_SESSION['var_player_name'];
|
||||||
$player_db = new OTS_Player();
|
$player_db = new OTS_Player();
|
||||||
$player_db->find($player_name);
|
$player_db->find($player_name);
|
||||||
@@ -47,16 +60,17 @@ else {
|
|||||||
|
|
||||||
$groups = new OTS_Groups_List();
|
$groups = new OTS_Groups_List();
|
||||||
$player_used->setGroupId($groups->getHighestId());
|
$player_used->setGroupId($groups->getHighestId());
|
||||||
|
}
|
||||||
|
|
||||||
$email = $_SESSION['var_email'];
|
$email = $_SESSION['var_email'];
|
||||||
if($account_db->isLoaded()) {
|
if($account_db->isLoaded()) {
|
||||||
$account_db->setPassword(encrypt($password));
|
$account_db->setPassword(encrypt($password));
|
||||||
$account_db->setEMail($email);
|
$account_db->setEMail($email);
|
||||||
$account_db->save();
|
$account_db->save();
|
||||||
|
|
||||||
$account_used = &$account_db;
|
$account_used = &$account_db;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
$new_account = new OTS_Account();
|
$new_account = new OTS_Account();
|
||||||
if(USE_ACCOUNT_NAME) {
|
if(USE_ACCOUNT_NAME) {
|
||||||
$new_account->create($account);
|
$new_account->create($account);
|
||||||
@@ -74,53 +88,74 @@ else {
|
|||||||
$new_account->logAction('Account created.');
|
$new_account->logAction('Account created.');
|
||||||
|
|
||||||
$account_used = &$new_account;
|
$account_used = &$new_account;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(USE_ACCOUNT_SALT)
|
if(USE_ACCOUNT_SALT)
|
||||||
$account_used->setCustomField('salt', $salt);
|
$account_used->setCustomField('salt', $salt);
|
||||||
|
|
||||||
$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');
|
||||||
if($db->hasColumn('accounts', 'group_id'))
|
$account_used->setCustomField('email_verified', 1);
|
||||||
|
|
||||||
|
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'))
|
||||||
$account_used->setCustomField('type', 6);
|
$account_used->setCustomField('type', 6);
|
||||||
|
|
||||||
if(!$player_db->isLoaded())
|
if ($db->hasTable('players')) {
|
||||||
|
if(!$player_db->isLoaded()) {
|
||||||
$player->setAccountId($account_used->getId());
|
$player->setAccountId($account_used->getId());
|
||||||
else
|
|
||||||
$player_db->setAccountId($account_used->getId());
|
|
||||||
|
|
||||||
success($locale['step_database_created_account']);
|
|
||||||
|
|
||||||
setSession('account', $account_used->getId());
|
|
||||||
setSession('password', encrypt($password));
|
|
||||||
setSession('remember_me', true);
|
|
||||||
|
|
||||||
if($player_db->isLoaded()) {
|
|
||||||
$player_db->save();
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
$player->save();
|
$player->save();
|
||||||
}
|
}
|
||||||
|
else {
|
||||||
|
$player_db->setAccountId($account_used->getId());
|
||||||
|
$player_db->save();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
success($locale['step_database_created_account']);
|
||||||
|
|
||||||
|
setSession('account', $account_used->getId());
|
||||||
|
setSession('password', encrypt($password));
|
||||||
|
setSession('remember_me', true);
|
||||||
|
|
||||||
|
if(!News::all()->count()) {
|
||||||
$player_id = 0;
|
$player_id = 0;
|
||||||
$query = $db->query("SELECT `id` FROM `players` WHERE `name` = " . $db->quote($player_name) . ";");
|
|
||||||
if($query->rowCount() == 1) {
|
if ($db->hasTable('players')) {
|
||||||
$query = $query->fetch();
|
$tmpNewsPlayer = \MyAAC\Models\Player::where('name', $player_name)->first();
|
||||||
$player_id = $query['id'];
|
if($tmpNewsPlayer) {
|
||||||
|
$player_id = $tmpNewsPlayer->id;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$query = $db->query("SELECT `id` FROM `" . TABLE_PREFIX ."news` WHERE `title` LIKE 'Hello!';");
|
News::create([
|
||||||
if($query->rowCount() == 0) {
|
'type' => 1,
|
||||||
if(query("INSERT INTO `" . TABLE_PREFIX ."news` (`id`, `type`, `date`, `category`, `title`, `body`, `player_id`, `comments`, `hide`) VALUES (NULL, '1', UNIX_TIMESTAMP(), '2', 'Hello!', 'MyAAC is just READY to use!', " . $player_id . ", 'https://my-aac.org', '0');
|
'date' => time(),
|
||||||
INSERT INTO `myaac_news` (`id`, `type`, `date`, `category`, `title`, `body`, `player_id`, `comments`, `hide`) VALUES (NULL, '2', UNIX_TIMESTAMP(), '4', 'Hello tickets!', 'https://my-aac.org', " . $player_id . ", '', '0');")) {
|
'category' => 2,
|
||||||
|
'title' => 'Hello!',
|
||||||
|
'body' => 'MyAAC is just READY to use!',
|
||||||
|
'player_id' => $player_id,
|
||||||
|
'comments' => 'https://my-aac.org',
|
||||||
|
'hide' => 0,
|
||||||
|
]);
|
||||||
|
|
||||||
|
News::create([
|
||||||
|
'type' => 2,
|
||||||
|
'date' => time(),
|
||||||
|
'category' => 4,
|
||||||
|
'title' => 'Hello tickers!',
|
||||||
|
'body' => 'https://my-aac.org',
|
||||||
|
'player_id' => $player_id,
|
||||||
|
'comments' => '',
|
||||||
|
'hide' => 0,
|
||||||
|
]);
|
||||||
|
|
||||||
success($locale['step_database_created_news']);
|
success($locale['step_database_created_news']);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
$settings = Settings::getInstance();
|
$settings = Settings::getInstance();
|
||||||
foreach($_SESSION as $key => $value) {
|
foreach($_SESSION as $key => $value) {
|
||||||
if (in_array($key, ['var_usage', 'var_date_timezone', 'var_client'])) {
|
if (in_array($key, ['var_usage', 'var_date_timezone', 'var_client'])) {
|
||||||
if ($key == 'var_usage') {
|
if ($key == 'var_usage') {
|
||||||
$key = 'anonymous_usage_statistics';
|
$key = 'anonymous_usage_statistics';
|
||||||
@@ -133,15 +168,15 @@ else {
|
|||||||
|
|
||||||
$settings->updateInDatabase('core', $key, $value);
|
$settings->updateInDatabase('core', $key, $value);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
success('Settings saved.');
|
success('Settings saved.');
|
||||||
|
|
||||||
$twig->display('install.installer.html.twig', array(
|
$twig->display('install.installer.html.twig', array(
|
||||||
'url' => 'tools/7-finish.php',
|
'url' => 'tools/7-finish.php',
|
||||||
'message' => $locale['importing_spinner']
|
'message' => $locale['importing_spinner']
|
||||||
));
|
));
|
||||||
|
|
||||||
if(!isset($_SESSION['installed'])) {
|
if(!isset($_SESSION['installed'])) {
|
||||||
if (!array_key_exists('CI', getenv())) {
|
if (!array_key_exists('CI', getenv())) {
|
||||||
$report_url = 'https://my-aac.org/report_install.php?v=' . MYAAC_VERSION . '&b=' . urlencode(BASE_URL);
|
$report_url = 'https://my-aac.org/report_install.php?v=' . MYAAC_VERSION . '&b=' . urlencode(BASE_URL);
|
||||||
if (function_exists('curl_version'))
|
if (function_exists('curl_version'))
|
||||||
@@ -158,15 +193,15 @@ else {
|
|||||||
}
|
}
|
||||||
|
|
||||||
$_SESSION['installed'] = true;
|
$_SESSION['installed'] = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach($_SESSION as $key => $value) {
|
foreach($_SESSION as $key => $value) {
|
||||||
if(strpos($key, 'var_') !== false)
|
if(strpos($key, 'var_') !== false)
|
||||||
unset($_SESSION[$key]);
|
unset($_SESSION[$key]);
|
||||||
}
|
|
||||||
unset($_SESSION['saved']);
|
|
||||||
if(file_exists(CACHE . 'install.txt')) {
|
|
||||||
unlink(CACHE . 'install.txt');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
unset($_SESSION['saved']);
|
||||||
|
if(file_exists(CACHE . 'install.txt')) {
|
||||||
|
unlink(CACHE . 'install.txt');
|
||||||
|
}
|
||||||
|
|
||||||
|
$hooks->trigger(HOOK_INSTALL_FINISH_END);
|
||||||
|
@@ -32,6 +32,9 @@ if($db->hasTable(TABLE_PREFIX . 'account_actions')) {
|
|||||||
else {
|
else {
|
||||||
// import schema
|
// import schema
|
||||||
try {
|
try {
|
||||||
|
$locale['step_database_importing'] = str_replace('$DATABASE_NAME$', config('database_name'), $locale['step_database_importing']);
|
||||||
|
success($locale['step_database_importing']);
|
||||||
|
|
||||||
$db->query(file_get_contents(BASE . 'install/includes/schema.sql'));
|
$db->query(file_get_contents(BASE . 'install/includes/schema.sql'));
|
||||||
|
|
||||||
$locale['step_database_success_schema'] = str_replace('$PREFIX$', TABLE_PREFIX, $locale['step_database_success_schema']);
|
$locale['step_database_success_schema'] = str_replace('$PREFIX$', TABLE_PREFIX, $locale['step_database_success_schema']);
|
||||||
@@ -138,75 +141,76 @@ if(!$db->hasColumn('accounts', 'premium_points')) {
|
|||||||
success($locale['step_database_adding_field'] . ' accounts.premium_points...');
|
success($locale['step_database_adding_field'] . ' accounts.premium_points...');
|
||||||
}
|
}
|
||||||
|
|
||||||
if($db->hasColumn('guilds', 'checkdata')) {
|
if ($db->hasTable('guilds')) {
|
||||||
if(query("ALTER TABLE `guilds` MODIFY `checkdata` INT NOT NULL DEFAULT 0;"))
|
if ($db->hasColumn('guilds', 'checkdata')) {
|
||||||
|
if (query("ALTER TABLE `guilds` MODIFY `checkdata` INT NOT NULL DEFAULT 0;"))
|
||||||
success($locale['step_database_modifying_field'] . ' guilds.checkdata...');
|
success($locale['step_database_modifying_field'] . ' guilds.checkdata...');
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!$db->hasColumn('guilds', 'motd')) {
|
if (!$db->hasColumn('guilds', 'motd')) {
|
||||||
if(query("ALTER TABLE `guilds` ADD `motd` VARCHAR(255) NOT NULL DEFAULT '';"))
|
if (query("ALTER TABLE `guilds` ADD `motd` VARCHAR(255) NOT NULL DEFAULT '';"))
|
||||||
success($locale['step_database_adding_field'] . ' guilds.motd...');
|
success($locale['step_database_adding_field'] . ' guilds.motd...');
|
||||||
}
|
} else {
|
||||||
else {
|
if (query("ALTER TABLE `guilds` MODIFY `motd` VARCHAR(255) NOT NULL DEFAULT '';"))
|
||||||
if(query("ALTER TABLE `guilds` MODIFY `motd` VARCHAR(255) NOT NULL DEFAULT '';"))
|
|
||||||
success($locale['step_database_modifying_field'] . ' guilds.motd...');
|
success($locale['step_database_modifying_field'] . ' guilds.motd...');
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!$db->hasColumn('guilds', 'description')) {
|
if (!$db->hasColumn('guilds', 'description')) {
|
||||||
if(query("ALTER TABLE `guilds` ADD `description` TEXT NOT NULL;"))
|
if (query("ALTER TABLE `guilds` ADD `description` TEXT NOT NULL;"))
|
||||||
success($locale['step_database_adding_field'] . ' guilds.description...');
|
success($locale['step_database_adding_field'] . ' guilds.description...');
|
||||||
}
|
}
|
||||||
|
|
||||||
if($db->hasColumn('guilds', 'logo_gfx_name')) {
|
if ($db->hasColumn('guilds', 'logo_gfx_name')) {
|
||||||
if(query("ALTER TABLE `guilds` CHANGE `logo_gfx_name` `logo_name` VARCHAR( 255 ) NOT NULL DEFAULT 'default.gif';")) {
|
if (query("ALTER TABLE `guilds` CHANGE `logo_gfx_name` `logo_name` VARCHAR( 255 ) NOT NULL DEFAULT 'default.gif';")) {
|
||||||
$tmp = str_replace('$FIELD$', 'guilds.logo_gfx_name', $locale['step_database_changing_field']);
|
$tmp = str_replace('$FIELD$', 'guilds.logo_gfx_name', $locale['step_database_changing_field']);
|
||||||
$tmp = str_replace('$FIELD_NEW$', 'guilds.logo_name', $tmp);
|
$tmp = str_replace('$FIELD_NEW$', 'guilds.logo_name', $tmp);
|
||||||
success($tmp);
|
success($tmp);
|
||||||
}
|
}
|
||||||
}
|
} else if (!$db->hasColumn('guilds', 'logo_name')) {
|
||||||
else if(!$db->hasColumn('guilds', 'logo_name')) {
|
if (query("ALTER TABLE `guilds` ADD `logo_name` VARCHAR( 255 ) NOT NULL DEFAULT 'default.gif';"))
|
||||||
if(query("ALTER TABLE `guilds` ADD `logo_name` VARCHAR( 255 ) NOT NULL DEFAULT 'default.gif';"))
|
|
||||||
success($locale['step_database_adding_field'] . ' guilds.logo_name...');
|
success($locale['step_database_adding_field'] . ' guilds.logo_name...');
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!$db->hasColumn('players', 'created')) {
|
if ($db->hasTable('players')) {
|
||||||
if(query("ALTER TABLE `players` ADD `created` INT(11) NOT NULL DEFAULT 0;"))
|
if (!$db->hasColumn('players', 'created')) {
|
||||||
|
if (query("ALTER TABLE `players` ADD `created` INT(11) NOT NULL DEFAULT 0;"))
|
||||||
success($locale['step_database_adding_field'] . ' players.created...');
|
success($locale['step_database_adding_field'] . ' players.created...');
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!$db->hasColumn('players', 'deleted') && !$db->hasColumn('players', 'deletion')) {
|
if (!$db->hasColumn('players', 'deleted') && !$db->hasColumn('players', 'deletion')) {
|
||||||
if(query("ALTER TABLE `players` ADD `deleted` TINYINT(1) NOT NULL DEFAULT 0;"))
|
if (query("ALTER TABLE `players` ADD `deleted` TINYINT(1) NOT NULL DEFAULT 0;"))
|
||||||
success($locale['step_database_adding_field'] . ' players.deleted...');
|
success($locale['step_database_adding_field'] . ' players.deleted...');
|
||||||
}
|
}
|
||||||
|
|
||||||
if($db->hasColumn('players', 'hide_char')) {
|
if ($db->hasColumn('players', 'hide_char')) {
|
||||||
if(!$db->hasColumn('players', 'hide')) {
|
if (!$db->hasColumn('players', 'hide')) {
|
||||||
if(query("ALTER TABLE `players` CHANGE `hide_char` `hide` TINYINT(1) NOT NULL DEFAULT 0;")) {
|
if (query("ALTER TABLE `players` CHANGE `hide_char` `hide` TINYINT(1) NOT NULL DEFAULT 0;")) {
|
||||||
$tmp = str_replace('$FIELD$', 'players.hide_char', $locale['step_database_changing_field']);
|
$tmp = str_replace('$FIELD$', 'players.hide_char', $locale['step_database_changing_field']);
|
||||||
$tmp = str_replace('$FIELD_NEW$', 'players.hide', $tmp);
|
$tmp = str_replace('$FIELD_NEW$', 'players.hide', $tmp);
|
||||||
success($tmp);
|
success($tmp);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
} else if (!$db->hasColumn('players', 'hide')) {
|
||||||
else if(!$db->hasColumn('players', 'hide')) {
|
if (query("ALTER TABLE `players` ADD `hide` TINYINT(1) NOT NULL DEFAULT 0;"))
|
||||||
if(query("ALTER TABLE `players` ADD `hide` TINYINT(1) NOT NULL DEFAULT 0;"))
|
|
||||||
success($locale['step_database_adding_field'] . ' players.hide...');
|
success($locale['step_database_adding_field'] . ' players.hide...');
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!$db->hasColumn('players', 'comment')) {
|
if (!$db->hasColumn('players', 'comment')) {
|
||||||
if(query("ALTER TABLE `players` ADD `comment` TEXT NOT NULL;"))
|
if (query("ALTER TABLE `players` ADD `comment` TEXT NOT NULL;"))
|
||||||
success($locale['step_database_adding_field'] . ' players.comment...');
|
success($locale['step_database_adding_field'] . ' players.comment...');
|
||||||
}
|
}
|
||||||
|
|
||||||
if($db->hasColumn('players', 'rank_id')) {
|
if ($db->hasColumn('players', 'rank_id')) {
|
||||||
if(query("ALTER TABLE players MODIFY `rank_id` INT(11) NOT NULL DEFAULT 0;"))
|
if (query("ALTER TABLE players MODIFY `rank_id` INT(11) NOT NULL DEFAULT 0;"))
|
||||||
success($locale['step_database_modifying_field'] . ' players.rank_id...');
|
success($locale['step_database_modifying_field'] . ' players.rank_id...');
|
||||||
|
|
||||||
if($db->hasColumn('players', 'guildnick')) {
|
if ($db->hasColumn('players', 'guildnick')) {
|
||||||
if(query("ALTER TABLE players MODIFY `guildnick` VARCHAR(255) NOT NULL DEFAULT '';")) {
|
if (query("ALTER TABLE players MODIFY `guildnick` VARCHAR(255) NOT NULL DEFAULT '';")) {
|
||||||
success($locale['step_database_modifying_field'] . ' players.guildnick...');
|
success($locale['step_database_modifying_field'] . ' players.guildnick...');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if($db->hasTable('z_forum')) {
|
if($db->hasTable('z_forum')) {
|
||||||
|
@@ -25,30 +25,33 @@ if(isset($config['installed']) && $config['installed'] && !isset($_SESSION['save
|
|||||||
|
|
||||||
require SYSTEM . 'init.php';
|
require SYSTEM . 'init.php';
|
||||||
|
|
||||||
$deleted = 'deleted';
|
if ($db->hasTable('players')) {
|
||||||
if($db->hasColumn('players', 'deletion'))
|
$deleted = 'deleted';
|
||||||
|
if ($db->hasColumn('players', 'deletion'))
|
||||||
$deleted = 'deletion';
|
$deleted = 'deletion';
|
||||||
|
|
||||||
$time = time();
|
$time = time();
|
||||||
function insert_sample_if_not_exist($p) {
|
function insert_sample_if_not_exist($p)
|
||||||
|
{
|
||||||
global $db, $success, $deleted, $time;
|
global $db, $success, $deleted, $time;
|
||||||
|
|
||||||
$query = $db->query('SELECT `id` FROM `players` WHERE `name` = ' . $db->quote($p['name']));
|
$query = $db->query('SELECT `id` FROM `players` WHERE `name` = ' . $db->quote($p['name']));
|
||||||
if($query->rowCount() == 0) {
|
if ($query->rowCount() == 0) {
|
||||||
if(!query("INSERT INTO `players` (`id`, `name`, `group_id`, `account_id`, `level`, `vocation`, `health`, `healthmax`, `experience`, `lookbody`, `lookfeet`, `lookhead`, `looklegs`, `looktype`, `maglevel`, `mana`, `manamax`, `manaspent`, `soul`, `town_id`, `posx`, `posy`, `posz`, `conditions`, `cap`, `sex`, `lastlogin`, `lastip`, `save`, `lastlogout`, `balance`, `$deleted`, `created`, `hide`, `comment`) VALUES (null, " . $db->quote($p['name']) . ", 1, " . getSession('account') . ", " . $p['level'] . ", " . $p['vocation_id'] . ", " . $p['health'] . ", " . $p['healthmax'] . ", " . $p['experience'] . ", 118, 114, 38, 57, " . $p['looktype'] . ", 0, " . $p['mana'] . ", " . $p['manamax'] . ", 0, " . $p['soul'] . ", 1, 1000, 1000, 7, '', " . $p['cap'] . ", 1, " . $time . ", 2130706433, 1, " . $time . ", 0, 0, " . $time . ", 1, '');"))
|
if (!query("INSERT INTO `players` (`id`, `name`, `group_id`, `account_id`, `level`, `vocation`, `health`, `healthmax`, `experience`, `lookbody`, `lookfeet`, `lookhead`, `looklegs`, `looktype`, `maglevel`, `mana`, `manamax`, `manaspent`, `soul`, `town_id`, `posx`, `posy`, `posz`, `conditions`, `cap`, `sex`, `lastlogin`, `lastip`, `save`, `lastlogout`, `balance`, `$deleted`, `created`, `hide`, `comment`) VALUES (null, " . $db->quote($p['name']) . ", 1, " . getSession('account') . ", " . $p['level'] . ", " . $p['vocation_id'] . ", " . $p['health'] . ", " . $p['healthmax'] . ", " . $p['experience'] . ", 118, 114, 38, 57, " . $p['looktype'] . ", 0, " . $p['mana'] . ", " . $p['manamax'] . ", 0, " . $p['soul'] . ", 1, 1000, 1000, 7, '', " . $p['cap'] . ", 1, " . $time . ", 2130706433, 1, " . $time . ", 0, 0, " . $time . ", 1, '');"))
|
||||||
$success = false;
|
$success = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$success = true;
|
$success = true;
|
||||||
insert_sample_if_not_exist(array('name' => 'Rook Sample', 'level' => 1, 'vocation_id' => 0, 'health' => 150, 'healthmax' => 150, 'experience' => 0, 'looktype' => 130, 'mana' => 0, 'manamax' => 0, 'soul' => 100, 'cap' => 400));
|
insert_sample_if_not_exist(array('name' => 'Rook Sample', 'level' => 1, 'vocation_id' => 0, 'health' => 150, 'healthmax' => 150, 'experience' => 0, 'looktype' => 130, 'mana' => 0, 'manamax' => 0, 'soul' => 100, 'cap' => 400));
|
||||||
insert_sample_if_not_exist(array('name' => 'Sorcerer Sample', 'level' => 8, 'vocation_id' => 1, 'health' => 185, 'healthmax' => 185, 'experience' => 4200, 'looktype' => 130, 'mana' => 90, 'manamax' => 90, 'soul' => 100, 'cap' => 470));
|
insert_sample_if_not_exist(array('name' => 'Sorcerer Sample', 'level' => 8, 'vocation_id' => 1, 'health' => 185, 'healthmax' => 185, 'experience' => 4200, 'looktype' => 130, 'mana' => 90, 'manamax' => 90, 'soul' => 100, 'cap' => 470));
|
||||||
insert_sample_if_not_exist(array('name' => 'Druid Sample', 'level' => 8, 'vocation_id' => 2, 'health' => 185, 'healthmax' => 185, 'experience' => 4200, 'looktype' => 130, 'mana' => 90, 'manamax' => 90, 'soul' => 100, 'cap' => 470));
|
insert_sample_if_not_exist(array('name' => 'Druid Sample', 'level' => 8, 'vocation_id' => 2, 'health' => 185, 'healthmax' => 185, 'experience' => 4200, 'looktype' => 130, 'mana' => 90, 'manamax' => 90, 'soul' => 100, 'cap' => 470));
|
||||||
insert_sample_if_not_exist(array('name' => 'Paladin Sample', 'level' => 8, 'vocation_id' => 3, 'health' => 185, 'healthmax' => 185, 'experience' => 4200, 'looktype' => 129, 'mana' => 90, 'manamax' => 90, 'soul' => 100, 'cap' => 470));
|
insert_sample_if_not_exist(array('name' => 'Paladin Sample', 'level' => 8, 'vocation_id' => 3, 'health' => 185, 'healthmax' => 185, 'experience' => 4200, 'looktype' => 129, 'mana' => 90, 'manamax' => 90, 'soul' => 100, 'cap' => 470));
|
||||||
insert_sample_if_not_exist(array('name' => 'Knight Sample', 'level' => 8, 'vocation_id' => 4, 'health' => 185, 'healthmax' => 185, 'experience' => 4200, 'looktype' => 131, 'mana' => 90, 'manamax' => 90, 'soul' => 100, 'cap' => 470));
|
insert_sample_if_not_exist(array('name' => 'Knight Sample', 'level' => 8, 'vocation_id' => 4, 'health' => 185, 'healthmax' => 185, 'experience' => 4200, 'looktype' => 131, 'mana' => 90, 'manamax' => 90, 'soul' => 100, 'cap' => 470));
|
||||||
|
|
||||||
if($success) {
|
if ($success) {
|
||||||
success($locale['step_database_imported_players']);
|
success($locale['step_database_imported_players']);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Plugins::installMenus('kathrine', require TEMPLATES . 'kathrine/menus.php');
|
Plugins::installMenus('kathrine', require TEMPLATES . 'kathrine/menus.php');
|
||||||
@@ -59,16 +62,21 @@ DataLoader::load();
|
|||||||
|
|
||||||
// update config.highscores_ids_hidden
|
// update config.highscores_ids_hidden
|
||||||
require_once SYSTEM . 'migrations/20.php';
|
require_once SYSTEM . 'migrations/20.php';
|
||||||
|
$up();
|
||||||
|
|
||||||
// add z_polls tables
|
// add z_polls tables
|
||||||
require_once SYSTEM . 'migrations/22.php';
|
require_once SYSTEM . 'migrations/22.php';
|
||||||
|
$up();
|
||||||
|
|
||||||
// add myaac_pages pages
|
// add myaac_pages pages
|
||||||
require_once SYSTEM . 'migrations/27.php';
|
require_once SYSTEM . 'migrations/27.php';
|
||||||
|
$up();
|
||||||
require_once SYSTEM . 'migrations/30.php';
|
require_once SYSTEM . 'migrations/30.php';
|
||||||
|
$up();
|
||||||
|
|
||||||
// new monster columns
|
// new monster columns
|
||||||
require_once SYSTEM . 'migrations/31.php';
|
require_once SYSTEM . 'migrations/31.php';
|
||||||
|
$up();
|
||||||
|
|
||||||
if(ModelsFAQ::count() == 0) {
|
if(ModelsFAQ::count() == 0) {
|
||||||
ModelsFAQ::create([
|
ModelsFAQ::create([
|
||||||
@@ -77,6 +85,8 @@ if(ModelsFAQ::count() == 0) {
|
|||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$hooks->trigger(HOOK_INSTALL_FINISH);
|
||||||
|
|
||||||
$db->setClearCacheAfter(true);
|
$db->setClearCacheAfter(true);
|
||||||
|
|
||||||
$locale['step_finish_desc'] = str_replace('$ADMIN_PANEL$', generateLink(str_replace('tools/', '',ADMIN_URL), $locale['step_finish_admin_panel'], true), $locale['step_finish_desc']);
|
$locale['step_finish_desc'] = str_replace('$ADMIN_PANEL$', generateLink(str_replace('tools/', '',ADMIN_URL), $locale['step_finish_admin_panel'], true), $locale['step_finish_desc']);
|
||||||
|
32
login.php
32
login.php
@@ -4,6 +4,7 @@ use MyAAC\Models\BoostedCreature;
|
|||||||
use MyAAC\Models\PlayerOnline;
|
use MyAAC\Models\PlayerOnline;
|
||||||
use MyAAC\Models\Account;
|
use MyAAC\Models\Account;
|
||||||
use MyAAC\Models\Player;
|
use MyAAC\Models\Player;
|
||||||
|
use MyAAC\RateLimit;
|
||||||
|
|
||||||
require_once 'common.php';
|
require_once 'common.php';
|
||||||
require_once SYSTEM . 'functions.php';
|
require_once SYSTEM . 'functions.php';
|
||||||
@@ -130,12 +131,29 @@ switch ($action) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
$account = $account->first();
|
$account = $account->first();
|
||||||
|
|
||||||
|
$ip = get_browser_real_ip();
|
||||||
|
$limiter = new RateLimit('failed_logins', setting('core.account_login_attempts_limit'), setting('core.account_login_ban_time'));
|
||||||
|
$limiter->enabled = setting('core.account_login_ipban_protection');
|
||||||
|
$limiter->load();
|
||||||
|
|
||||||
|
$ban_msg = 'A wrong account, password or secret has been entered ' . setting('core.account_login_attempts_limit') . ' times in a row. You are unable to log into your account for the next ' . setting('core.account_login_ban_time') . ' minutes. Please wait.';
|
||||||
if (!$account) {
|
if (!$account) {
|
||||||
|
$limiter->increment($ip);
|
||||||
|
if ($limiter->exceeded($ip)) {
|
||||||
|
sendError($ban_msg);
|
||||||
|
}
|
||||||
|
|
||||||
sendError(($inputEmail != false ? 'Email' : 'Account name') . ' or password is not correct.');
|
sendError(($inputEmail != false ? 'Email' : 'Account name') . ' or password is not correct.');
|
||||||
}
|
}
|
||||||
|
|
||||||
$current_password = encrypt((USE_ACCOUNT_SALT ? $account->salt : '') . $request->password);
|
$current_password = encrypt((USE_ACCOUNT_SALT ? $account->salt : '') . $request->password);
|
||||||
if (!$account || $account->password != $current_password) {
|
if (!$account || $account->password != $current_password) {
|
||||||
|
$limiter->increment($ip);
|
||||||
|
if ($limiter->exceeded($ip)) {
|
||||||
|
sendError($ban_msg);
|
||||||
|
}
|
||||||
|
|
||||||
sendError(($inputEmail != false ? 'Email' : 'Account name') . ' or password is not correct.');
|
sendError(($inputEmail != false ? 'Email' : 'Account name') . ' or password is not correct.');
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -145,16 +163,30 @@ switch ($action) {
|
|||||||
if ($accountSecret != null && $accountSecret != '') {
|
if ($accountSecret != null && $accountSecret != '') {
|
||||||
$accountHasSecret = true;
|
$accountHasSecret = true;
|
||||||
if ($inputToken === false) {
|
if ($inputToken === false) {
|
||||||
|
$limiter->increment($ip);
|
||||||
|
if ($limiter->exceeded($ip)) {
|
||||||
|
sendError($ban_msg);
|
||||||
|
}
|
||||||
sendError('Submit a valid two-factor authentication token.', 6);
|
sendError('Submit a valid two-factor authentication token.', 6);
|
||||||
} else {
|
} else {
|
||||||
require_once LIBS . 'rfc6238.php';
|
require_once LIBS . 'rfc6238.php';
|
||||||
if (TokenAuth6238::verify($accountSecret, $inputToken) !== true) {
|
if (TokenAuth6238::verify($accountSecret, $inputToken) !== true) {
|
||||||
|
$limiter->increment($ip);
|
||||||
|
if ($limiter->exceeded($ip)) {
|
||||||
|
sendError($ban_msg);
|
||||||
|
}
|
||||||
|
|
||||||
sendError('Two-factor authentication failed, token is wrong.', 6);
|
sendError('Two-factor authentication failed, token is wrong.', 6);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$limiter->reset($ip);
|
||||||
|
if (setting('core.account_mail_verify') && $account->email_verified !== 1) {
|
||||||
|
sendError('You need to verify your account, enter in our site and resend verify e-mail!');
|
||||||
|
}
|
||||||
|
|
||||||
// common columns
|
// common columns
|
||||||
$columns = 'id, name, level, sex, vocation, looktype, lookhead, lookbody, looklegs, lookfeet, lookaddons';
|
$columns = 'id, name, level, sex, vocation, looktype, lookhead, lookbody, looklegs, lookfeet, lookaddons';
|
||||||
|
|
||||||
|
@@ -10,17 +10,16 @@ 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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
13
phpstan-bootstrap.php
Normal file
13
phpstan-bootstrap.php
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
require __DIR__ . '/system/libs/pot/OTS.php';
|
||||||
|
$ots = POT::getInstance();
|
||||||
|
|
||||||
|
require __DIR__ . '/system/libs/pot/InvitesDriver.php';
|
||||||
|
require __DIR__ . '/system/libs/rfc6238.php';
|
||||||
|
require __DIR__ . '/common.php';
|
||||||
|
|
||||||
|
const ACTION = '';
|
||||||
|
const PAGE = '';
|
||||||
|
const URI = '';
|
||||||
|
define('SELF_NAME', basename(__FILE__));
|
39
phpstan.neon
Normal file
39
phpstan.neon
Normal file
@@ -0,0 +1,39 @@
|
|||||||
|
parameters:
|
||||||
|
level: 3
|
||||||
|
paths:
|
||||||
|
- .
|
||||||
|
- templates/tibiacom
|
||||||
|
- templates/kathrine
|
||||||
|
excludePaths:
|
||||||
|
- system/cache/*
|
||||||
|
- vendor/*
|
||||||
|
- plugins/*
|
||||||
|
- system/libs
|
||||||
|
- tools/signature/mango.php
|
||||||
|
- tools/signature/gd.class.php
|
||||||
|
bootstrapFiles:
|
||||||
|
- phpstan-bootstrap.php
|
||||||
|
ignoreErrors:
|
||||||
|
- '#Variable \$db might not be defined#'
|
||||||
|
- '#Variable \$twig might not be defined#'
|
||||||
|
- '#Variable \$hooks might not be defined#'
|
||||||
|
- '#Variable \$account_logged might not be defined#'
|
||||||
|
- '#Variable \$logged might not be defined#'
|
||||||
|
- '#Variable \$config might not be defined#'
|
||||||
|
- '#Variable \$action might not be defined#'
|
||||||
|
- '#Variable \$errors might not be defined#'
|
||||||
|
- '#Variable \$cache might not be defined#'
|
||||||
|
- '#Variable \$status might not be defined#'
|
||||||
|
- '#Variable \$player might not be defined#'
|
||||||
|
- '#Variable \$guild might not be defined#'
|
||||||
|
- '#Variable \$[a-zA-Z0-9\\_]+ might not be defined#'
|
||||||
|
# Eloquent models
|
||||||
|
- '#Call to an undefined static method [a-zA-Z0-9\\_]+::[a-zA-Z0-9\\_]+\(\)#'
|
||||||
|
- '#Call to an undefined method object::toArray\(\)#'
|
||||||
|
# system/pages/highscores.php
|
||||||
|
- '#Call to an undefined method Illuminate\\Database\\Query\\Builder::withOnlineStatus\(\)#'
|
||||||
|
- '#Access to an undefined property Illuminate\\Database\\Eloquent\\Model::\$online_status#'
|
||||||
|
- '#Access to an undefined property Illuminate\\Database\\Eloquent\\Model::\$vocation_name#'
|
||||||
|
-
|
||||||
|
message: '#Variable \$tmp in empty\(\) always exists and is always falsy#'
|
||||||
|
path: templates\kathrine\javascript.php
|
@@ -1,8 +1,6 @@
|
|||||||
<?php
|
<?php
|
||||||
defined('MYAAC') or die('Direct access not allowed!');
|
defined('MYAAC') or die('Direct access not allowed!');
|
||||||
|
|
||||||
$reward = setting('core.account_mail_confirmed_reward');
|
|
||||||
|
|
||||||
$hasCoinsColumn = $db->hasColumn('accounts', 'coins');
|
$hasCoinsColumn = $db->hasColumn('accounts', 'coins');
|
||||||
$rewardCoins = setting('core.account_mail_confirmed_reward_coins');
|
$rewardCoins = setting('core.account_mail_confirmed_reward_coins');
|
||||||
if ($rewardCoins > 0 && !$hasCoinsColumn) {
|
if ($rewardCoins > 0 && !$hasCoinsColumn) {
|
||||||
|
@@ -25,7 +25,8 @@
|
|||||||
"hooks": {
|
"hooks": {
|
||||||
"Example Hook": {
|
"Example Hook": {
|
||||||
"type": "BEFORE_PAGE",
|
"type": "BEFORE_PAGE",
|
||||||
"file": "plugins/example/before.php"
|
"file": "plugins/example/before.php",
|
||||||
|
"priority": 1000
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"routes": {
|
"routes": {
|
||||||
@@ -33,12 +34,20 @@
|
|||||||
"pattern": "/YourAwesomePage/{name:string}/{page:int}",
|
"pattern": "/YourAwesomePage/{name:string}/{page:int}",
|
||||||
"file": "plugins/your-plugin/your-awesome-page.php",
|
"file": "plugins/your-plugin/your-awesome-page.php",
|
||||||
"method": "GET",
|
"method": "GET",
|
||||||
"priority": "130"
|
"priority": 130
|
||||||
},
|
},
|
||||||
"Redirect Example": {
|
"Redirect Example": {
|
||||||
"redirect_from": "/redirectExample",
|
"redirect_from": "/redirectExample",
|
||||||
"redirect_to": "account/manage"
|
"redirect_to": "account/manage"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"settings": "plugins/your-plugin-folder/settings.php"
|
"routes-default-priority": 1000,
|
||||||
|
"pages-default-priority": 1000,
|
||||||
|
"settings": "plugins/your-plugin-folder/settings.php",
|
||||||
|
"autoload": {
|
||||||
|
"pages": true,
|
||||||
|
"pagesSubFolders": false,
|
||||||
|
"commands": true,
|
||||||
|
"themes": true
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@@ -38,7 +38,11 @@ if [ $1 = "prepare" ]; then
|
|||||||
cd $dir || exit
|
cd $dir || exit
|
||||||
|
|
||||||
# dependencies
|
# dependencies
|
||||||
composer install --prefer-dist --optimize-autoloader
|
composer install --no-dev --prefer-dist --optimize-autoloader
|
||||||
|
npm install
|
||||||
|
|
||||||
|
# node_modules is useless, we already have copy in tools/ext
|
||||||
|
rm -R node_modules
|
||||||
|
|
||||||
echo "Now you can make changes to $dir. When you are ready, type 'release.sh pack'"
|
echo "Now you can make changes to $dir. When you are ready, type 'release.sh pack'"
|
||||||
exit
|
exit
|
||||||
|
@@ -105,4 +105,8 @@ $config['clients'] = [
|
|||||||
1316,
|
1316,
|
||||||
1320,
|
1320,
|
||||||
1321,
|
1321,
|
||||||
|
1322,
|
||||||
|
1330,
|
||||||
|
1332,
|
||||||
|
1340,
|
||||||
];
|
];
|
||||||
|
@@ -36,3 +36,5 @@ class Guild extends OTS_Guild {
|
|||||||
}
|
}
|
||||||
class GuildRank extends OTS_GuildRank {}
|
class GuildRank extends OTS_GuildRank {}
|
||||||
class House extends OTS_House {}
|
class House extends OTS_House {}
|
||||||
|
|
||||||
|
class Cache extends \MyAAC\Cache\Cache {}
|
||||||
|
@@ -106,6 +106,7 @@ try {
|
|||||||
'persistent' => @$config['database_persistent']
|
'persistent' => @$config['database_persistent']
|
||||||
));
|
));
|
||||||
|
|
||||||
|
global $db;
|
||||||
$db = POT::getInstance()->getDBHandle();
|
$db = POT::getInstance()->getDBHandle();
|
||||||
$capsule = new Capsule;
|
$capsule = new Capsule;
|
||||||
$capsule->addConnection([
|
$capsule->addConnection([
|
||||||
@@ -127,6 +128,7 @@ try {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if(defined('MYAAC_INSTALL')) {
|
if(defined('MYAAC_INSTALL')) {
|
||||||
|
$error = $e->getMessage();
|
||||||
return; // installer will take care of this
|
return; // installer will take care of this
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -9,16 +9,16 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
use MyAAC\Exceptions\SensitiveException;
|
use MyAAC\Exceptions\SensitiveException;
|
||||||
|
use Whoops\Handler\PlainTextHandler;
|
||||||
|
use Whoops\Handler\PrettyPageHandler;
|
||||||
|
use Whoops\Run;
|
||||||
|
|
||||||
if (class_exists(\Whoops\Run::class)) {
|
if (class_exists(Run::class)) {
|
||||||
$whoops = new \Whoops\Run;
|
$whoops = new Run;
|
||||||
if(IS_CLI) {
|
|
||||||
$whoops->pushHandler(new \Whoops\Handler\PlainTextHandler);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
$whoops->pushHandler(new \Whoops\Handler\PrettyPageHandler);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
$whoopsHandler = IS_CLI ? (new PlainTextHandler()) : (new PrettyPageHandler());
|
||||||
|
|
||||||
|
$whoops->pushHandler($whoopsHandler);
|
||||||
$whoops->register();
|
$whoops->register();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@@ -87,18 +87,34 @@ function getForumBoardLink($board_id, $page = NULL): string {
|
|||||||
return BASE_URL . (setting('core.friendly_urls') ? '' : 'index.php/') . 'forum/board/' . (int)$board_id . (isset($page) ? '/' . $page : '');
|
return BASE_URL . (setting('core.friendly_urls') ? '' : 'index.php/') . 'forum/board/' . (int)$board_id . (isset($page) ? '/' . $page : '');
|
||||||
}
|
}
|
||||||
|
|
||||||
function getPlayerLink($name, $generate = true): string
|
function getPlayerLink($name, $generate = true, bool $colored = false): string
|
||||||
{
|
{
|
||||||
if(is_numeric($name))
|
if (is_object($name) and $name instanceof OTS_Player) {
|
||||||
{
|
$player = $name;
|
||||||
|
}
|
||||||
|
else {
|
||||||
$player = new OTS_Player();
|
$player = new OTS_Player();
|
||||||
|
|
||||||
|
if(is_numeric($name)) {
|
||||||
$player->load((int)$name);
|
$player->load((int)$name);
|
||||||
if($player->isLoaded())
|
}
|
||||||
$name = $player->getName();
|
else {
|
||||||
|
$player->find($name);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!$player->isLoaded()) {
|
||||||
|
return '(error)';
|
||||||
|
}
|
||||||
|
|
||||||
|
$name = $player->getName();
|
||||||
|
|
||||||
$url = BASE_URL . (setting('core.friendly_urls') ? '' : 'index.php/') . 'characters/' . urlencode($name);
|
$url = BASE_URL . (setting('core.friendly_urls') ? '' : 'index.php/') . 'characters/' . urlencode($name);
|
||||||
|
|
||||||
|
if ($colored) {
|
||||||
|
$name = '<span style="color: ' . ($player->isOnline() ? 'green' : 'red') . ';">' . $name . '</span>';
|
||||||
|
}
|
||||||
|
|
||||||
if(!$generate) return $url;
|
if(!$generate) return $url;
|
||||||
return generateLink($url, $name);
|
return generateLink($url, $name);
|
||||||
}
|
}
|
||||||
@@ -418,7 +434,10 @@ function delete_guild($id)
|
|||||||
if(count($rank_list) > 0) {
|
if(count($rank_list) > 0) {
|
||||||
$rank_list->orderBy('level');
|
$rank_list->orderBy('level');
|
||||||
|
|
||||||
global $db, $ots;
|
global $db;
|
||||||
|
/**
|
||||||
|
* @var OTS_GuildRank $rank_in_guild
|
||||||
|
*/
|
||||||
foreach($rank_list as $rank_in_guild) {
|
foreach($rank_list as $rank_in_guild) {
|
||||||
if($db->hasTable('guild_members'))
|
if($db->hasTable('guild_members'))
|
||||||
$players_with_rank = $db->query('SELECT `players`.`id` as `id`, `guild_members`.`rank_id` as `rank_id` FROM `players`, `guild_members` WHERE `guild_members`.`rank_id` = ' . $rank_in_guild->getId() . ' AND `players`.`id` = `guild_members`.`player_id` ORDER BY `name`;');
|
$players_with_rank = $db->query('SELECT `players`.`id` as `id`, `guild_members`.`rank_id` as `rank_id` FROM `players`, `guild_members` WHERE `guild_members`.`rank_id` = ' . $rank_in_guild->getId() . ' AND `players`.`id` = `guild_members`.`player_id` ORDER BY `name`;');
|
||||||
@@ -570,24 +589,12 @@ function template_form()
|
|||||||
{
|
{
|
||||||
global $template_name;
|
global $template_name;
|
||||||
|
|
||||||
$cache = Cache::getInstance();
|
$templates = Cache::remember('templates', 5 * 60, function() {
|
||||||
if($cache->enabled())
|
return get_templates();
|
||||||
{
|
});
|
||||||
$tmp = '';
|
|
||||||
if($cache->fetch('templates', $tmp)) {
|
|
||||||
$templates = unserialize($tmp);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
$templates = get_templates();
|
|
||||||
$cache->set('templates', serialize($templates), 30);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
$templates = get_templates();
|
|
||||||
|
|
||||||
$options = '';
|
$options = '';
|
||||||
foreach($templates as $key => $value)
|
foreach($templates as $value)
|
||||||
$options .= '<option ' . ($template_name == $value ? 'SELECTED' : '') . '>' . $value . '</option>';
|
$options .= '<option ' . ($template_name == $value ? 'SELECTED' : '') . '>' . $value . '</option>';
|
||||||
|
|
||||||
global $twig;
|
global $twig;
|
||||||
@@ -710,11 +717,8 @@ function getSkillName($skillId, $suffix = true)
|
|||||||
/**
|
/**
|
||||||
* Performs flag check on the current logged in user.
|
* Performs flag check on the current logged in user.
|
||||||
* Table in database: accounts, field: website_flags
|
* Table in database: accounts, field: website_flags
|
||||||
*
|
|
||||||
* @param int @flag Flag to be verified.
|
|
||||||
* @return bool If user got flag.
|
|
||||||
*/
|
*/
|
||||||
function hasFlag($flag) {
|
function hasFlag(int $flag): bool {
|
||||||
global $logged, $logged_flags;
|
global $logged, $logged_flags;
|
||||||
return ($logged && ($logged_flags & $flag) == $flag);
|
return ($logged && ($logged_flags & $flag) == $flag);
|
||||||
}
|
}
|
||||||
@@ -1030,7 +1034,7 @@ function load_config_lua($filename)
|
|||||||
return $result;
|
return $result;
|
||||||
}
|
}
|
||||||
|
|
||||||
function str_replace_first($search, $replace, $subject) {
|
function str_replace_first($search,$replace, $subject) {
|
||||||
$pos = strpos($subject, $search);
|
$pos = strpos($subject, $search);
|
||||||
if ($pos !== false) {
|
if ($pos !== false) {
|
||||||
return substr_replace($subject, $replace, $pos, strlen($search));
|
return substr_replace($subject, $replace, $pos, strlen($search));
|
||||||
@@ -1086,20 +1090,16 @@ function csrfProtect(): void
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function getTopPlayers($limit = 5) {
|
function getTopPlayers($limit = 5, $skill = 'level') {
|
||||||
global $db;
|
global $db;
|
||||||
|
|
||||||
$cache = Cache::getInstance();
|
if ($skill === 'level') {
|
||||||
if($cache->enabled()) {
|
$skill = 'experience';
|
||||||
$tmp = '';
|
|
||||||
if($cache->fetch('top_' . $limit . '_level', $tmp)) {
|
|
||||||
$players = unserialize($tmp);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!isset($players)) {
|
return Cache::remember("top_{$limit}_{$skill}", 2 * 60, function () use ($db, $limit, $skill) {
|
||||||
$columns = [
|
$columns = [
|
||||||
'id', 'name', 'level', 'vocation', 'experience',
|
'id', 'name', 'level', 'vocation', 'experience', 'balance',
|
||||||
'looktype', 'lookhead', 'lookbody', 'looklegs', 'lookfeet'
|
'looktype', 'lookhead', 'lookbody', 'looklegs', 'lookfeet'
|
||||||
];
|
];
|
||||||
|
|
||||||
@@ -1111,32 +1111,27 @@ function getTopPlayers($limit = 5) {
|
|||||||
$columns[] = 'online';
|
$columns[] = 'online';
|
||||||
}
|
}
|
||||||
|
|
||||||
$players = Player::query()
|
return Player::query()
|
||||||
->select($columns)
|
->select($columns)
|
||||||
->withOnlineStatus()
|
->withOnlineStatus()
|
||||||
->notDeleted()
|
->notDeleted()
|
||||||
->where('group_id', '<', setting('core.highscores_groups_hidden'))
|
->where('group_id', '<', setting('core.highscores_groups_hidden'))
|
||||||
->whereNotIn('id', setting('core.highscores_ids_hidden'))
|
->whereNotIn('id', setting('core.highscores_ids_hidden'))
|
||||||
->where('account_id', '!=', 1)
|
->where('account_id', '!=', 1)
|
||||||
->orderByDesc('experience')
|
->orderByDesc($skill)
|
||||||
->limit($limit)
|
->limit($limit)
|
||||||
->get()
|
->get()
|
||||||
->map(function ($e, $i) {
|
->map(function ($e, $i) {
|
||||||
$row = $e->toArray();
|
$row = $e->toArray();
|
||||||
$row['online'] = $e->online_status;
|
$row['online'] = $e->online_status;
|
||||||
$row['rank'] = $i + 1;
|
$row['rank'] = $i + 1;
|
||||||
|
$row['outfit_url'] = $e->outfit_url;
|
||||||
|
|
||||||
unset($row['online_table']);
|
unset($row['online_table']);
|
||||||
|
|
||||||
return $row;
|
return $row;
|
||||||
})->toArray();
|
})->toArray();
|
||||||
|
});
|
||||||
if($cache->enabled()) {
|
|
||||||
$cache->set('top_' . $limit . '_level', serialize($players), 120);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return $players;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function deleteDirectory($dir, $ignore = array(), $contentOnly = false) {
|
function deleteDirectory($dir, $ignore = array(), $contentOnly = false) {
|
||||||
@@ -1623,7 +1618,7 @@ function removeIfFirstSlash(&$text) {
|
|||||||
};
|
};
|
||||||
|
|
||||||
function escapeHtml($html) {
|
function escapeHtml($html) {
|
||||||
return htmlentities($html, ENT_QUOTES | ENT_SUBSTITUTE, 'UTF-8');
|
return htmlspecialchars($html);
|
||||||
}
|
}
|
||||||
|
|
||||||
function getGuildNameById($id)
|
function getGuildNameById($id)
|
||||||
@@ -1668,6 +1663,18 @@ function isRequestMethod(string $method): bool {
|
|||||||
return strtolower($_SERVER['REQUEST_METHOD']) == strtolower($method);
|
return strtolower($_SERVER['REQUEST_METHOD']) == strtolower($method);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function getAccountIdentityColumn(): string
|
||||||
|
{
|
||||||
|
if (USE_ACCOUNT_NAME) {
|
||||||
|
return 'name';
|
||||||
|
}
|
||||||
|
elseif (USE_ACCOUNT_NUMBER) {
|
||||||
|
return 'number';
|
||||||
|
}
|
||||||
|
|
||||||
|
return 'id';
|
||||||
|
}
|
||||||
|
|
||||||
// validator functions
|
// validator functions
|
||||||
require_once SYSTEM . 'compat/base.php';
|
require_once SYSTEM . 'compat/base.php';
|
||||||
|
|
||||||
|
@@ -12,11 +12,12 @@ use DebugBar\StandardDebugBar;
|
|||||||
use MyAAC\Cache\Cache;
|
use MyAAC\Cache\Cache;
|
||||||
use MyAAC\CsrfToken;
|
use MyAAC\CsrfToken;
|
||||||
use MyAAC\Hooks;
|
use MyAAC\Hooks;
|
||||||
|
use MyAAC\Models\Town;
|
||||||
use MyAAC\Settings;
|
use MyAAC\Settings;
|
||||||
use MyAAC\Towns;
|
|
||||||
|
|
||||||
defined('MYAAC') or die('Direct access not allowed!');
|
defined('MYAAC') or die('Direct access not allowed!');
|
||||||
|
|
||||||
|
global $config;
|
||||||
if(!isset($config['installed']) || !$config['installed']) {
|
if(!isset($config['installed']) || !$config['installed']) {
|
||||||
throw new RuntimeException('MyAAC has not been installed yet or there was error during installation. Please install again.');
|
throw new RuntimeException('MyAAC has not been installed yet or there was error during installation. Please install again.');
|
||||||
}
|
}
|
||||||
@@ -38,13 +39,15 @@ if($config['server_path'][strlen($config['server_path']) - 1] !== '/')
|
|||||||
$config['server_path'] .= '/';
|
$config['server_path'] .= '/';
|
||||||
|
|
||||||
// enable gzip compression if supported by the browser
|
// enable gzip compression if supported by the browser
|
||||||
if(isset($config['gzip_output']) && $config['gzip_output'] && isset($_SERVER['HTTP_ACCEPT_ENCODING']) && strpos($_SERVER['HTTP_ACCEPT_ENCODING'], 'gzip') !== false && function_exists('ob_gzhandler'))
|
if(isset($config['gzip_output']) && $config['gzip_output'] && isset($_SERVER['HTTP_ACCEPT_ENCODING']) && str_contains($_SERVER['HTTP_ACCEPT_ENCODING'], 'gzip') && function_exists('ob_gzhandler'))
|
||||||
ob_start('ob_gzhandler');
|
ob_start('ob_gzhandler');
|
||||||
|
|
||||||
// cache
|
// cache
|
||||||
|
global $cache;
|
||||||
$cache = Cache::getInstance();
|
$cache = Cache::getInstance();
|
||||||
|
|
||||||
// event system
|
// event system
|
||||||
|
global $hooks;
|
||||||
$hooks = new Hooks();
|
$hooks = new Hooks();
|
||||||
$hooks->load();
|
$hooks->load();
|
||||||
|
|
||||||
@@ -93,8 +96,8 @@ if($config_lua_reload) {
|
|||||||
|
|
||||||
// cache config
|
// cache config
|
||||||
if($cache->enabled()) {
|
if($cache->enabled()) {
|
||||||
$cache->set('config_lua', serialize($config['lua']), 120);
|
$cache->set('config_lua', serialize($config['lua']), 2 * 60);
|
||||||
$cache->set('server_path', $config['server_path']);
|
$cache->set('server_path', $config['server_path'], 10 * 60);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
unset($tmp);
|
unset($tmp);
|
||||||
@@ -134,17 +137,16 @@ $ots = POT::getInstance();
|
|||||||
$eloquentConnection = null;
|
$eloquentConnection = null;
|
||||||
require_once SYSTEM . 'database.php';
|
require_once SYSTEM . 'database.php';
|
||||||
|
|
||||||
if ($config_lua_reload) {
|
|
||||||
clearCache();
|
|
||||||
}
|
|
||||||
|
|
||||||
// verify myaac tables exists in database
|
// verify myaac tables exists in database
|
||||||
if(!defined('MYAAC_INSTALL') && !$db->hasTable('myaac_account_actions')) {
|
if(!defined('MYAAC_INSTALL') && !$db->hasTable('myaac_account_actions')) {
|
||||||
throw new RuntimeException('Seems that the table myaac_account_actions of MyAAC doesn\'t exist in the database. This is a fatal error. You can try to reinstall MyAAC by visiting ' . BASE_URL . 'install');
|
throw new RuntimeException('Seems that the table myaac_account_actions of MyAAC doesn\'t exist in the database. This is a fatal error. You can try to reinstall MyAAC by visiting ' . BASE_URL . 'install');
|
||||||
}
|
}
|
||||||
|
|
||||||
// execute migrations
|
// execute migrations
|
||||||
require SYSTEM . 'migrate.php';
|
$configDatabaseAutoMigrate = config('database_auto_migrate');
|
||||||
|
if (!isset($configDatabaseAutoMigrate) || $configDatabaseAutoMigrate) {
|
||||||
|
require SYSTEM . 'migrate.php';
|
||||||
|
}
|
||||||
|
|
||||||
// settings
|
// settings
|
||||||
$settings = Settings::getInstance();
|
$settings = Settings::getInstance();
|
||||||
@@ -159,12 +161,15 @@ if (!isset($token) || !$token) {
|
|||||||
// deprecated config values
|
// deprecated config values
|
||||||
require_once SYSTEM . 'compat/config.php';
|
require_once SYSTEM . 'compat/config.php';
|
||||||
|
|
||||||
|
// deprecated classes
|
||||||
|
require_once SYSTEM . 'compat/classes.php';
|
||||||
|
|
||||||
date_default_timezone_set(setting('core.date_timezone'));
|
date_default_timezone_set(setting('core.date_timezone'));
|
||||||
|
|
||||||
setting(
|
setting(
|
||||||
[
|
[
|
||||||
'core.account_create_character_create',
|
'core.account_mail_verify',
|
||||||
setting('core.account_create_character_create') && (!setting('core.mail_enabled') || !setting('core.account_mail_verify'))
|
setting('core.account_mail_verify') && setting('core.mail_enabled')
|
||||||
]
|
]
|
||||||
);
|
);
|
||||||
|
|
||||||
@@ -177,4 +182,17 @@ define('USE_ACCOUNT_NAME', $db->hasColumn('accounts', 'name'));
|
|||||||
define('USE_ACCOUNT_NUMBER', $db->hasColumn('accounts', 'number'));
|
define('USE_ACCOUNT_NUMBER', $db->hasColumn('accounts', 'number'));
|
||||||
define('USE_ACCOUNT_SALT', $db->hasColumn('accounts', 'salt'));
|
define('USE_ACCOUNT_SALT', $db->hasColumn('accounts', 'salt'));
|
||||||
|
|
||||||
Towns::load();
|
$towns = Cache::remember('towns', 10 * 60, function () use ($db) {
|
||||||
|
if ($db->hasTable('towns') && Town::count() > 0) {
|
||||||
|
return Town::orderBy('id', 'ASC')->pluck('name', 'id')->toArray();
|
||||||
|
}
|
||||||
|
|
||||||
|
return [];
|
||||||
|
});
|
||||||
|
|
||||||
|
if (count($towns) <= 0) {
|
||||||
|
$towns = setting('core.towns');
|
||||||
|
}
|
||||||
|
|
||||||
|
config(['towns', $towns]);
|
||||||
|
unset($towns);
|
||||||
|
@@ -83,38 +83,4 @@ abstract class OTS_Base_DAO implements IOTS_DAO
|
|||||||
{
|
{
|
||||||
unset($this->data['id']);
|
unset($this->data['id']);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Magic PHP5 method.
|
|
||||||
*
|
|
||||||
* <p>
|
|
||||||
* Allows object importing from {@link http://www.php.net/manual/en/function.var-export.php var_export()}.
|
|
||||||
* </p>
|
|
||||||
*
|
|
||||||
* @version 0.1.0
|
|
||||||
* @param array $properties List of object properties.
|
|
||||||
*/
|
|
||||||
public static function __set_state($properties)
|
|
||||||
{
|
|
||||||
// deletes database handle
|
|
||||||
if( isset($properties['db']) )
|
|
||||||
{
|
|
||||||
unset($properties['db']);
|
|
||||||
}
|
|
||||||
|
|
||||||
// initializes new object with current database connection
|
|
||||||
$object = new self();
|
|
||||||
|
|
||||||
// loads properties
|
|
||||||
foreach($properties as $name => $value)
|
|
||||||
{
|
|
||||||
$object->$name = $value;
|
|
||||||
}
|
|
||||||
|
|
||||||
return $object;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**#@-*/
|
|
||||||
|
|
||||||
?>
|
|
||||||
|
@@ -184,8 +184,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 (';
|
||||||
@@ -229,6 +235,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.
|
||||||
*
|
*
|
||||||
|
@@ -196,6 +196,16 @@ class OTS_Buffer
|
|||||||
return $value[1];
|
return $value[1];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function getLongLong()
|
||||||
|
{
|
||||||
|
// checks buffer size
|
||||||
|
$this->check(8);
|
||||||
|
|
||||||
|
$value = unpack('P', substr($this->buffer, $this->pos, 8) );
|
||||||
|
$this->pos += 8;
|
||||||
|
return $value[1];
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Appends quater byte to buffer.
|
* Appends quater byte to buffer.
|
||||||
*
|
*
|
||||||
|
@@ -165,7 +165,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)
|
||||||
|
@@ -135,13 +135,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;
|
||||||
}
|
}
|
||||||
|
@@ -90,7 +90,7 @@ class OTS_Player extends OTS_Row_DAO
|
|||||||
* @version 0.1.2
|
* @version 0.1.2
|
||||||
* @var array
|
* @var array
|
||||||
*/
|
*/
|
||||||
private $data = array('sex' => 0, 'vocation' => 0, 'experience' => 0, 'level' => 1, 'maglevel' => 0, 'health' => 100, 'healthmax' => 100, 'mana' => 100, 'manamax' => 100, 'manaspent' => 0, 'soul' => 0, 'lookbody' => 10, 'lookfeet' => 10, 'lookhead' => 10, 'looklegs' => 10, 'looktype' => 136, 'lookaddons' => 0, 'posx' => 0, 'posy' => 0, 'posz' => 0, 'cap' => 0, 'lastlogin' => 0, 'lastip' => 0, 'save' => true, 'skulltime' => 0, 'skull' => 0, 'balance' => 0, 'lastlogout' => 0, 'blessings' => 0, 'stamina' => 0, 'online' => 0, 'comment' => '', 'created' => 0, 'hide' => 0);
|
private $data = array('group_id' => 1, 'sex' => 0, 'vocation' => 0, 'experience' => 0, 'level' => 1, 'maglevel' => 0, 'health' => 100, 'healthmax' => 100, 'mana' => 100, 'manamax' => 100, 'manaspent' => 0, 'soul' => 0, 'lookbody' => 10, 'lookfeet' => 10, 'lookhead' => 10, 'looklegs' => 10, 'looktype' => 136, 'lookaddons' => 0, 'posx' => 0, 'posy' => 0, 'posz' => 0, 'cap' => 0, 'lastlogin' => 0, 'lastip' => 0, 'save' => true, 'skulltime' => 0, 'skull' => 0, 'balance' => 0, 'lastlogout' => 0, 'blessings' => 0, 'stamina' => 0, 'online' => 0, 'comment' => '', 'created' => 0, 'hide' => 0);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Player skills.
|
* Player skills.
|
||||||
@@ -1229,6 +1229,13 @@ class OTS_Player extends OTS_Row_DAO
|
|||||||
$this->data['direction'] = (int) $direction;
|
$this->data['direction'] = (int) $direction;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function getOutfit(): string
|
||||||
|
{
|
||||||
|
$hasLookAddons = $this->db->hasColumn('players', 'lookaddons');
|
||||||
|
|
||||||
|
return setting('core.outfit_images_url') . '?id=' . $this->getLookType() . ($hasLookAddons ? '&addons=' . $this->getLookAddons() : '') . '&head=' . $this->getLookHead() . '&body=' . $this->getLookBody() . '&legs=' . $this->getLookLegs() . '&feet=' . $this->getLookFeet();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Body color.
|
* Body color.
|
||||||
*
|
*
|
||||||
@@ -1745,11 +1752,6 @@ class OTS_Player extends OTS_Row_DAO
|
|||||||
*/
|
*/
|
||||||
public function getConditions()
|
public function getConditions()
|
||||||
{
|
{
|
||||||
if( !isset($this->data['conditions']) )
|
|
||||||
{
|
|
||||||
throw new E_OTS_NotLoaded();
|
|
||||||
}
|
|
||||||
|
|
||||||
return $this->data['conditions'];
|
return $this->data['conditions'];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -36,6 +36,10 @@ $locale['step_requirements'] = 'Anforderungen';
|
|||||||
$locale['step_requirements_title'] = 'Anforderungen überprüfen';
|
$locale['step_requirements_title'] = 'Anforderungen überprüfen';
|
||||||
$locale['step_requirements_php_version'] = 'PHP Version';
|
$locale['step_requirements_php_version'] = 'PHP Version';
|
||||||
$locale['step_requirements_write_perms'] = 'Schreibberechtigungen';
|
$locale['step_requirements_write_perms'] = 'Schreibberechtigungen';
|
||||||
|
$locale['step_requirements_folder_exists'] = 'Ordner ist vorhanden';
|
||||||
|
$locale['step_requirements_folder_not_exists_tools_ext'] = 'NPM Package Manager wird verwendet für externe JavaScript/CSS Bibliotheken.'
|
||||||
|
. ' Es sollte via Command Line installiert werden: <a href="https://docs.npmjs.com/downloading-and-installing-node-js-and-npm">https://docs.npmjs.com/downloading-and-installing-node-js-and-npm</a>'
|
||||||
|
. ' Nachdem das Tool installiert wurde, folgende Befehl sollte ausgeführt in dem Hauptordner des MyAACs: "npm install".';
|
||||||
$locale['step_requirements_failed'] = 'Die Installation wird deaktiviert, bis diese Anforderungen erfüllt sind.</b><br/>Für weitere Informationen siehe <b>README</b> Datei.';
|
$locale['step_requirements_failed'] = 'Die Installation wird deaktiviert, bis diese Anforderungen erfüllt sind.</b><br/>Für weitere Informationen siehe <b>README</b> Datei.';
|
||||||
$locale['step_requirements_extension'] = '$EXTENSION$ PHP Erweiterung';
|
$locale['step_requirements_extension'] = '$EXTENSION$ PHP Erweiterung';
|
||||||
|
|
||||||
|
@@ -36,6 +36,10 @@ $locale['step_requirements'] = 'Requirements';
|
|||||||
$locale['step_requirements_title'] = 'Requirements check';
|
$locale['step_requirements_title'] = 'Requirements check';
|
||||||
$locale['step_requirements_php_version'] = 'PHP Version';
|
$locale['step_requirements_php_version'] = 'PHP Version';
|
||||||
$locale['step_requirements_write_perms'] = 'Write permissions';
|
$locale['step_requirements_write_perms'] = 'Write permissions';
|
||||||
|
$locale['step_requirements_folder_exists'] = 'Directory exists';
|
||||||
|
$locale['step_requirements_folder_not_exists_tools_ext'] = 'NPM Package Manager is used for external JavaScript/CSS libraries.'
|
||||||
|
. ' You need to install it through Command Line: <a href="https://docs.npmjs.com/downloading-and-installing-node-js-and-npm">https://docs.npmjs.com/downloading-and-installing-node-js-and-npm</a>'
|
||||||
|
. ' When you done with installing that tool, execute: "npm install" in the main MyAAC folder.';
|
||||||
$locale['step_requirements_failed'] = 'Installation will be disabled until these requirements will be passed.</b><br/>For more informations see <b>README</b> file.';
|
$locale['step_requirements_failed'] = 'Installation will be disabled until these requirements will be passed.</b><br/>For more informations see <b>README</b> file.';
|
||||||
$locale['step_requirements_extension'] = '$EXTENSION$ PHP extension';
|
$locale['step_requirements_extension'] = '$EXTENSION$ PHP extension';
|
||||||
$locale['step_requirements_warning_images_guilds'] = 'Guild logo upload will not work';
|
$locale['step_requirements_warning_images_guilds'] = 'Guild logo upload will not work';
|
||||||
@@ -90,7 +94,7 @@ $locale['step_database_loaded_npcs'] = 'NPCs has been loaded...';
|
|||||||
$locale['step_database_error_npcs'] = 'There were some problems loading your NPCs';
|
$locale['step_database_error_npcs'] = 'There were some problems loading your NPCs';
|
||||||
$locale['step_database_loaded_spells'] = 'Spells has been loaded...';
|
$locale['step_database_loaded_spells'] = 'Spells has been loaded...';
|
||||||
$locale['step_database_loaded_towns'] = 'Towns has been loaded...';
|
$locale['step_database_loaded_towns'] = 'Towns has been loaded...';
|
||||||
$locale['step_database_error_towns'] = 'There were some problems loading your towns. You will need to configure them manually in config.';
|
$locale['step_database_error_towns'] = 'There were some problems loading your towns. You will need to configure them manually in Settings.';
|
||||||
$locale['step_database_created_account'] = 'Created admin account...';
|
$locale['step_database_created_account'] = 'Created admin account...';
|
||||||
$locale['step_database_created_news'] = 'Newses has been created...';
|
$locale['step_database_created_news'] = 'Newses has been created...';
|
||||||
|
|
||||||
|
@@ -36,6 +36,10 @@ $locale['step_requirements'] = 'Wymagania';
|
|||||||
$locale['step_requirements_title'] = 'Sprawdzanie wymagań';
|
$locale['step_requirements_title'] = 'Sprawdzanie wymagań';
|
||||||
$locale['step_requirements_php_version'] = 'Wersja PHP';
|
$locale['step_requirements_php_version'] = 'Wersja PHP';
|
||||||
$locale['step_requirements_write_perms'] = 'Uprawnienia do zapisu';
|
$locale['step_requirements_write_perms'] = 'Uprawnienia do zapisu';
|
||||||
|
$locale['step_requirements_folder_exists'] = 'Folder istnieje';
|
||||||
|
$locale['step_requirements_folder_not_exists_tools_ext'] = 'Manadżer Pakietów NPM jest używany do zewnętrznych bibliotek JavaScript/CSS.'
|
||||||
|
. ' Trzeba go zainstalować poprzez wiersz poleceń: <a href="https://docs.npmjs.com/downloading-and-installing-node-js-and-npm">https://docs.npmjs.com/downloading-and-installing-node-js-and-npm</a>'
|
||||||
|
. ' Po instalacji narzędzia, wywołaj następujące polecenie w głownym katalogu MyAAC: "npm install".';
|
||||||
$locale['step_requirements_failed'] = 'Instalacja zostanie zablokowana dopóki te wymagania nie zostaną spełnione.</b><br/>Po więcej informacji zasięgnij do pliku <b>README</b>.';
|
$locale['step_requirements_failed'] = 'Instalacja zostanie zablokowana dopóki te wymagania nie zostaną spełnione.</b><br/>Po więcej informacji zasięgnij do pliku <b>README</b>.';
|
||||||
$locale['step_requirements_extension'] = 'Rozszerzenie PHP - $EXTENSION$';
|
$locale['step_requirements_extension'] = 'Rozszerzenie PHP - $EXTENSION$';
|
||||||
$locale['step_requirements_warning_images_guilds'] = 'Nie będzie możliwości uploadu obrazków gildii';
|
$locale['step_requirements_warning_images_guilds'] = 'Nie będzie możliwości uploadu obrazków gildii';
|
||||||
@@ -89,7 +93,7 @@ $locale['step_database_loaded_npcs'] = 'Załadowano NPCs...';
|
|||||||
$locale['step_database_error_npcs'] = 'Wystąpił problem podczas ładowania NPCs';
|
$locale['step_database_error_npcs'] = 'Wystąpił problem podczas ładowania NPCs';
|
||||||
$locale['step_database_loaded_spells'] = 'Załadowano czary (spells)...';
|
$locale['step_database_loaded_spells'] = 'Załadowano czary (spells)...';
|
||||||
$locale['step_database_loaded_towns'] = 'Załadowano miasta (towns)...';
|
$locale['step_database_loaded_towns'] = 'Załadowano miasta (towns)...';
|
||||||
$locale['step_database_error_towns'] = 'Wystąpił problem podczas ładowania miast. Trzeba będzie je skonfigurować manualnie.';
|
$locale['step_database_error_towns'] = 'Wystąpił problem podczas ładowania miast. Trzeba będzie je skonfigurować manualnie w ustawieniach.';
|
||||||
$locale['step_database_created_account'] = 'Utworzono konto admina...';
|
$locale['step_database_created_account'] = 'Utworzono konto admina...';
|
||||||
$locale['step_database_created_news'] = 'Utworzono newsy...';
|
$locale['step_database_created_news'] = 'Utworzono newsy...';
|
||||||
|
|
||||||
|
@@ -22,11 +22,5 @@ if(isset($account_logged) && $account_logged->isLoaded()) {
|
|||||||
|
|
||||||
$logged = false;
|
$logged = false;
|
||||||
unset($account_logged);
|
unset($account_logged);
|
||||||
|
|
||||||
if(isset($_REQUEST['redirect']))
|
|
||||||
{
|
|
||||||
header('Location: ' . urldecode($_REQUEST['redirect']));
|
|
||||||
exit;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -17,6 +17,12 @@ if(fetchDatabaseConfig('database_version', $tmp)) { // we got version
|
|||||||
$db->revalidateCache();
|
$db->revalidateCache();
|
||||||
for($i = $tmp + 1; $i <= DATABASE_VERSION; $i++) {
|
for($i = $tmp + 1; $i <= DATABASE_VERSION; $i++) {
|
||||||
require SYSTEM . 'migrations/' . $i . '.php';
|
require SYSTEM . 'migrations/' . $i . '.php';
|
||||||
|
|
||||||
|
if (isset($up)) {
|
||||||
|
$up();
|
||||||
|
unset($up);
|
||||||
|
}
|
||||||
|
|
||||||
updateDatabaseConfig('database_version', $i);
|
updateDatabaseConfig('database_version', $i);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -26,6 +32,12 @@ else { // register first version
|
|||||||
$db->revalidateCache();
|
$db->revalidateCache();
|
||||||
for($i = 1; $i <= DATABASE_VERSION; $i++) {
|
for($i = 1; $i <= DATABASE_VERSION; $i++) {
|
||||||
require SYSTEM . 'migrations/' . $i . '.php';
|
require SYSTEM . 'migrations/' . $i . '.php';
|
||||||
|
|
||||||
|
if (isset($up)) {
|
||||||
|
$up();
|
||||||
|
unset($up);
|
||||||
|
}
|
||||||
|
|
||||||
updateDatabaseConfig('database_version', $i);
|
updateDatabaseConfig('database_version', $i);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
8
system/migrations/1-hooks.sql
Normal file
8
system/migrations/1-hooks.sql
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
CREATE TABLE `myaac_hooks`
|
||||||
|
(
|
||||||
|
`id` INT(11) NOT NULL AUTO_INCREMENT,
|
||||||
|
`name` VARCHAR(30) NOT NULL DEFAULT '',
|
||||||
|
`type` INT(2) NOT NULL DEFAULT 0,
|
||||||
|
`file` VARCHAR(100) NOT NULL,
|
||||||
|
PRIMARY KEY (`id`)
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8;
|
@@ -1,16 +1,16 @@
|
|||||||
<?php
|
<?php
|
||||||
$db->query("ALTER TABLE `" . TABLE_PREFIX . "account_actions` MODIFY `ip` INT(11) NOT NULL DEFAULT 0;");
|
/**
|
||||||
$db->query("ALTER TABLE `" . TABLE_PREFIX . "account_actions` MODIFY `date` INT(11) NOT NULL DEFAULT 0;");
|
* @var OTS_DB_MySQL $db
|
||||||
$db->query("ALTER TABLE `" . TABLE_PREFIX . "account_actions` MODIFY `action` VARCHAR(255) NOT NULL DEFAULT '';");
|
*/
|
||||||
$db->query("
|
|
||||||
CREATE TABLE `myaac_hooks`
|
|
||||||
(
|
|
||||||
`id` INT(11) NOT NULL AUTO_INCREMENT,
|
|
||||||
`name` VARCHAR(30) NOT NULL DEFAULT '',
|
|
||||||
`type` INT(2) NOT NULL DEFAULT 0,
|
|
||||||
`file` VARCHAR(100) NOT NULL,
|
|
||||||
PRIMARY KEY (`id`)
|
|
||||||
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8;
|
|
||||||
");
|
|
||||||
|
|
||||||
?>
|
$up = function () use ($db) {
|
||||||
|
$db->modifyColumn(TABLE_PREFIX . 'account_actions', 'ip', "INT(11) NOT NULL DEFAULT 0");
|
||||||
|
$db->modifyColumn(TABLE_PREFIX . 'account_actions', 'date', "INT(11) NOT NULL DEFAULT 0");
|
||||||
|
$db->modifyColumn(TABLE_PREFIX . 'account_actions', 'action', "VARCHAR(255) NOT NULL DEFAULT ''");
|
||||||
|
|
||||||
|
$db->query(file_get_contents(__DIR__ . '/1-hooks.sql'));
|
||||||
|
};
|
||||||
|
|
||||||
|
$down = function () use ($db) {
|
||||||
|
$db->dropTable(TABLE_PREFIX . 'hooks');
|
||||||
|
};
|
||||||
|
10
system/migrations/10-admin_menu.sql
Normal file
10
system/migrations/10-admin_menu.sql
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
CREATE TABLE `myaac_admin_menu`
|
||||||
|
(
|
||||||
|
`id` INT(11) NOT NULL AUTO_INCREMENT,
|
||||||
|
`name` VARCHAR(255) NOT NULL DEFAULT '',
|
||||||
|
`page` VARCHAR(255) NOT NULL DEFAULT '',
|
||||||
|
`ordering` INT(11) NOT NULL DEFAULT 0,
|
||||||
|
`flags` INT(11) NOT NULL DEFAULT 0,
|
||||||
|
`enabled` INT(1) NOT NULL DEFAULT 1,
|
||||||
|
PRIMARY KEY (`id`)
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8;
|
@@ -1,17 +1,24 @@
|
|||||||
<?php
|
<?php
|
||||||
if(!$db->hasColumn(TABLE_PREFIX . 'hooks', 'ordering'))
|
/**
|
||||||
$db->query("ALTER TABLE `" . TABLE_PREFIX . "hooks` ADD `ordering` INT(11) NOT NULL DEFAULT 0 AFTER `file`;");
|
* @var OTS_DB_MySQL $db
|
||||||
|
*/
|
||||||
|
|
||||||
if(!$db->hasTable(TABLE_PREFIX . 'admin_menu'))
|
$up = function () use ($db) {
|
||||||
$db->query("
|
if (!$db->hasColumn(TABLE_PREFIX . 'hooks', 'ordering')) {
|
||||||
CREATE TABLE `myaac_admin_menu`
|
$db->addColumn(TABLE_PREFIX . 'hooks', 'ordering', "INT(11) NOT NULL DEFAULT 0 AFTER `file`");
|
||||||
(
|
}
|
||||||
`id` INT(11) NOT NULL AUTO_INCREMENT,
|
|
||||||
`name` VARCHAR(255) NOT NULL DEFAULT '',
|
if (!$db->hasTable(TABLE_PREFIX . 'admin_menu')) {
|
||||||
`page` VARCHAR(255) NOT NULL DEFAULT '',
|
$db->query(file_get_contents(__DIR__ . '/10-admin_menu.sql'));
|
||||||
`ordering` INT(11) NOT NULL DEFAULT 0,
|
}
|
||||||
`flags` INT(11) NOT NULL DEFAULT 0,
|
};
|
||||||
`enabled` INT(1) NOT NULL DEFAULT 1,
|
|
||||||
PRIMARY KEY (`id`)
|
$down = function () use ($db) {
|
||||||
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8;
|
if ($db->hasColumn(TABLE_PREFIX . 'hooks', 'ordering')) {
|
||||||
");
|
$db->dropColumn(TABLE_PREFIX . 'hooks', 'ordering');
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($db->hasTable(TABLE_PREFIX . 'admin_menu')) {
|
||||||
|
$db->dropTable(TABLE_PREFIX . 'admin_menu');
|
||||||
|
}
|
||||||
|
};
|
||||||
|
@@ -1,19 +1,44 @@
|
|||||||
<?php
|
<?php
|
||||||
|
/**
|
||||||
|
* @var OTS_DB_MySQL $db
|
||||||
|
*/
|
||||||
|
|
||||||
|
$up = function () use ($db) {
|
||||||
// rename database tables
|
// rename database tables
|
||||||
$db->query("RENAME TABLE
|
$db->renameTable(TABLE_PREFIX . 'screenshots', TABLE_PREFIX . 'gallery');
|
||||||
" . TABLE_PREFIX . "screenshots TO " . TABLE_PREFIX . "gallery,
|
$db->renameTable(TABLE_PREFIX . 'movies', TABLE_PREFIX . 'videos');
|
||||||
" . TABLE_PREFIX . "movies TO " . TABLE_PREFIX . "videos;");
|
|
||||||
|
|
||||||
// rename images dir
|
// rename images dir
|
||||||
if(file_exists(BASE . 'images/screenshots') && !file_exists(BASE . GALLERY_DIR)) {
|
if (file_exists(BASE . 'images/screenshots') && !file_exists(BASE . GALLERY_DIR)) {
|
||||||
rename(BASE . 'images/screenshots', BASE . GALLERY_DIR);
|
rename(BASE . 'images/screenshots', BASE . GALLERY_DIR);
|
||||||
}
|
}
|
||||||
|
|
||||||
// convert old database screenshots images to gallery
|
// convert old database screenshots images to gallery
|
||||||
$query = $db->query('SELECT `id`, `image`, `thumb` FROM `' . TABLE_PREFIX . 'gallery`;');
|
$query = $db->query('SELECT `id`, `image`, `thumb` FROM `' . TABLE_PREFIX . 'gallery`;');
|
||||||
foreach($query->fetchAll() as $item) {
|
foreach ($query->fetchAll() as $item) {
|
||||||
$db->update(TABLE_PREFIX . 'gallery', array(
|
$db->update(TABLE_PREFIX . 'gallery', array(
|
||||||
'image' => str_replace('/screenshots/', '/gallery/', $item['image']),
|
'image' => str_replace('/screenshots/', '/gallery/', $item['image']),
|
||||||
'thumb' => str_replace('/screenshots/', '/gallery/', $item['thumb']),
|
'thumb' => str_replace('/screenshots/', '/gallery/', $item['thumb']),
|
||||||
), array('id' => $item['id']));
|
), array('id' => $item['id']));
|
||||||
}
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
$down = function () use ($db) {
|
||||||
|
// rename database tables
|
||||||
|
$db->renameTable(TABLE_PREFIX . 'gallery', TABLE_PREFIX . 'screenshots');
|
||||||
|
$db->renameTable(TABLE_PREFIX . 'videos', TABLE_PREFIX . 'movies');
|
||||||
|
|
||||||
|
// rename images dir
|
||||||
|
if (file_exists(BASE . GALLERY_DIR) && !file_exists(BASE . 'images/screenshots')) {
|
||||||
|
rename(BASE . GALLERY_DIR, BASE . 'images/screenshots');
|
||||||
|
}
|
||||||
|
|
||||||
|
// convert new database gallery images to screenshots
|
||||||
|
$query = $db->query('SELECT `id`, `image`, `thumb` FROM `' . TABLE_PREFIX . 'screenshots`;');
|
||||||
|
foreach ($query->fetchAll() as $item) {
|
||||||
|
$db->update(TABLE_PREFIX . 'screenshots', [
|
||||||
|
'image' => str_replace('/gallery/', '/screenshots/', $item['image']),
|
||||||
|
'thumb' => str_replace('/gallery/', '/screenshots/', $item['thumb']),
|
||||||
|
], ['id' => $item['id']]);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
9
system/migrations/12-items.sql
Normal file
9
system/migrations/12-items.sql
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
CREATE TABLE `myaac_items`
|
||||||
|
(
|
||||||
|
`id` INT(11) NOT NULL,
|
||||||
|
`article` VARCHAR(5) NOT NULL DEFAULT '',
|
||||||
|
`name` VARCHAR(50) NOT NULL DEFAULT '',
|
||||||
|
`plural` VARCHAR(50) NOT NULL DEFAULT '',
|
||||||
|
`attributes` VARCHAR(500) NOT NULL DEFAULT '',
|
||||||
|
PRIMARY KEY (`id`)
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8;
|
8
system/migrations/12-weapons.sql
Normal file
8
system/migrations/12-weapons.sql
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
CREATE TABLE `myaac_weapons`
|
||||||
|
(
|
||||||
|
`id` INT(11) NOT NULL,
|
||||||
|
`level` INT(11) NOT NULL DEFAULT 0,
|
||||||
|
`maglevel` INT(11) NOT NULL DEFAULT 0,
|
||||||
|
`vocations` VARCHAR(100) NOT NULL DEFAULT '',
|
||||||
|
PRIMARY KEY (`id`)
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8;
|
@@ -1,51 +1,65 @@
|
|||||||
<?php
|
<?php
|
||||||
|
/**
|
||||||
|
* @var OTS_DB_MySQL $db
|
||||||
|
*/
|
||||||
|
|
||||||
// add new item_id field for runes
|
use MyAAC\Models\Spell;
|
||||||
if(!$db->hasColumn(TABLE_PREFIX . 'spells', 'item_id'))
|
|
||||||
$db->query("ALTER TABLE `" . TABLE_PREFIX . "spells` ADD `item_id` INT(11) NOT NULL DEFAULT 0 AFTER `conjure_count`;");
|
|
||||||
|
|
||||||
// change unique index from spell to name
|
$up = function () use ($db) {
|
||||||
$db->query("ALTER TABLE `" . TABLE_PREFIX . "spells` DROP INDEX `spell`;");
|
// add new item_id field for runes
|
||||||
$db->query("ALTER TABLE `" . TABLE_PREFIX . "spells` ADD UNIQUE INDEX (`name`);");
|
if (!$db->hasColumn(TABLE_PREFIX . 'spells', 'item_id')) {
|
||||||
|
$db->addColumn(TABLE_PREFIX . 'spells', 'item_id', 'INT(11) NOT NULL DEFAULT 0 AFTER `conjure_count`');
|
||||||
|
}
|
||||||
|
|
||||||
// change comment of spells.type
|
// change unique index from spell to name
|
||||||
$db->query("ALTER TABLE `" . TABLE_PREFIX . "spells` MODIFY `type` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '1 - instant, 2 - conjure, 3 - rune';");
|
$db->query("ALTER TABLE `" . TABLE_PREFIX . "spells` DROP INDEX `spell`;");
|
||||||
|
$db->query("ALTER TABLE `" . TABLE_PREFIX . "spells` ADD UNIQUE INDEX (`name`);");
|
||||||
|
|
||||||
// new items table
|
// change comment of spells.type
|
||||||
if(!$db->hasTable(TABLE_PREFIX . 'items'))
|
$db->modifyColumn(TABLE_PREFIX . 'spells', 'type', "TINYINT(1) NOT NULL DEFAULT 0 COMMENT '1 - instant, 2 - conjure, 3 - rune'");
|
||||||
$db->query("
|
|
||||||
CREATE TABLE `" . TABLE_PREFIX . "items`
|
|
||||||
(
|
|
||||||
`id` INT(11) NOT NULL,
|
|
||||||
`article` VARCHAR(5) NOT NULL DEFAULT '',
|
|
||||||
`name` VARCHAR(50) NOT NULL DEFAULT '',
|
|
||||||
`plural` VARCHAR(50) NOT NULL DEFAULT '',
|
|
||||||
`attributes` VARCHAR(500) NOT NULL DEFAULT '',
|
|
||||||
PRIMARY KEY (`id`)
|
|
||||||
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8;
|
|
||||||
");
|
|
||||||
|
|
||||||
// new weapons table
|
// new items table
|
||||||
if(!$db->hasTable(TABLE_PREFIX . 'weapons'))
|
if (!$db->hasTable(TABLE_PREFIX . 'items')) {
|
||||||
$db->query("
|
$db->query(file_get_contents(__DIR__ . '/12-items.sql'));
|
||||||
CREATE TABLE `" . TABLE_PREFIX . "weapons`
|
}
|
||||||
(
|
|
||||||
`id` INT(11) NOT NULL,
|
|
||||||
`level` INT(11) NOT NULL DEFAULT 0,
|
|
||||||
`maglevel` INT(11) NOT NULL DEFAULT 0,
|
|
||||||
`vocations` VARCHAR(100) NOT NULL DEFAULT '',
|
|
||||||
PRIMARY KEY (`id`)
|
|
||||||
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8;
|
|
||||||
");
|
|
||||||
|
|
||||||
// modify vocations to support json data
|
// new weapons table
|
||||||
$db->query("ALTER TABLE `" . TABLE_PREFIX . "spells` MODIFY `vocations` VARCHAR(100) NOT NULL DEFAULT '';");
|
if (!$db->hasTable(TABLE_PREFIX . 'weapons')) {
|
||||||
$query = $db->query('SELECT `id`, `vocations` FROM `' . TABLE_PREFIX . 'spells`');
|
$db->query(file_get_contents(__DIR__ . '/12-weapons.sql'));
|
||||||
foreach($query->fetchAll() as $spell) {
|
}
|
||||||
$tmp = explode(',', $spell['vocations']);
|
|
||||||
foreach($tmp as &$v) {
|
// modify vocations to support json data
|
||||||
|
$db->modifyColumn(TABLE_PREFIX . 'spells', 'vocations', "VARCHAR(100) NOT NULL DEFAULT ''");
|
||||||
|
|
||||||
|
$spells = Spell::select('id', 'vocations')->get();
|
||||||
|
foreach ($spells as $spell) {
|
||||||
|
$tmp = explode(',', $spell->vocations);
|
||||||
|
foreach ($tmp as &$v) {
|
||||||
$v = (int)$v;
|
$v = (int)$v;
|
||||||
}
|
}
|
||||||
$db->update(TABLE_PREFIX . 'spells', array('vocations' => json_encode($tmp)), array('id' => $spell['id']));
|
|
||||||
}
|
Spell::where('id', $spell->id)->update(['vocations' => json_encode($tmp)]);
|
||||||
?>
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
$down = function () use ($db) {
|
||||||
|
// remove item_id field for runes
|
||||||
|
if ($db->hasColumn(TABLE_PREFIX . 'spells', 'item_id')) {
|
||||||
|
$db->dropColumn(TABLE_PREFIX . 'spells', 'item_id');
|
||||||
|
}
|
||||||
|
|
||||||
|
// change unique index from spell to name
|
||||||
|
$db->query("ALTER TABLE `" . TABLE_PREFIX . "spells` DROP INDEX `name`;");
|
||||||
|
$db->query("ALTER TABLE `" . TABLE_PREFIX . "spells` ADD INDEX (`spell`);");
|
||||||
|
|
||||||
|
$db->dropTable(TABLE_PREFIX . 'items');
|
||||||
|
$db->dropTable(TABLE_PREFIX . 'weapons');
|
||||||
|
|
||||||
|
$spells = Spell::select('id', 'vocations')->get();
|
||||||
|
// modify vocations to use vocation separated by comma
|
||||||
|
foreach ($spells as $spell) {
|
||||||
|
$vocations = empty($spell->vocations) ? [] : json_decode($spell->vocations);
|
||||||
|
|
||||||
|
Spell::where('id', $spell->id)->update(['vocations' => implode(',', $vocations)]);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
@@ -1,3 +1,16 @@
|
|||||||
<?php
|
<?php
|
||||||
if($db->hasColumn(TABLE_PREFIX . 'spells', 'spell'))
|
/**
|
||||||
$db->query("ALTER TABLE `" . TABLE_PREFIX . "spells` DROP COLUMN `spell`;");
|
* @var OTS_DB_MySQL $db
|
||||||
|
*/
|
||||||
|
|
||||||
|
$up = function () use ($db) {
|
||||||
|
if ($db->hasColumn(TABLE_PREFIX . 'spells', 'spell')) {
|
||||||
|
$db->dropColumn(TABLE_PREFIX . 'spells', 'spell');
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
$down = function () use ($db) {
|
||||||
|
if (!$db->hasColumn(TABLE_PREFIX . 'spells', 'spell')) {
|
||||||
|
$db->addColumn(TABLE_PREFIX . 'spells', 'spell', "VARCHAR(255) NOT NULL DEFAULT ''");
|
||||||
|
}
|
||||||
|
};
|
||||||
|
@@ -1,18 +1,39 @@
|
|||||||
<?php
|
<?php
|
||||||
|
/**
|
||||||
|
* @var OTS_DB_MySQL $db
|
||||||
|
*/
|
||||||
|
|
||||||
// change monsters.file_path field to loot
|
$up = function () use ($db) {
|
||||||
if($db->hasColumn(TABLE_PREFIX . 'monsters', 'file_path')) {
|
// change monsters.file_path field to loot
|
||||||
$db->query("ALTER TABLE `" . TABLE_PREFIX . "monsters` CHANGE `file_path` `loot` VARCHAR(5000);");
|
if ($db->hasColumn(TABLE_PREFIX . 'monsters', 'file_path')) {
|
||||||
}
|
$db->changeColumn(TABLE_PREFIX . 'monsters', 'file_path', 'loot', 'VARCHAR(5000)');
|
||||||
|
}
|
||||||
|
|
||||||
// update loot to empty string
|
// update loot to empty string
|
||||||
$db->query("UPDATE `" . TABLE_PREFIX . "monsters` SET `loot` = '';");
|
$db->query("UPDATE `" . TABLE_PREFIX . "monsters` SET `loot` = '';");
|
||||||
|
|
||||||
// drop monsters.gfx_name field
|
// drop monsters.gfx_name field
|
||||||
$db->query("ALTER TABLE `" . TABLE_PREFIX . "monsters` DROP COLUMN `gfx_name`;");
|
$db->dropColumn(TABLE_PREFIX . 'monsters', 'gfx_name');
|
||||||
|
|
||||||
// rename hide_creature to hidden
|
// rename hide_creature to hidden
|
||||||
if($db->hasColumn(TABLE_PREFIX . 'monsters', 'hide_creature')) {
|
if ($db->hasColumn(TABLE_PREFIX . 'monsters', 'hide_creature')) {
|
||||||
$db->query("ALTER TABLE `" . TABLE_PREFIX . "monsters` CHANGE `hide_creature` `hidden` TINYINT(1) NOT NULL DEFAULT 0;");
|
$db->changeColumn(TABLE_PREFIX . 'monsters', 'hide_creature', 'hidden', "TINYINT(1) NOT NULL DEFAULT 0");
|
||||||
}
|
}
|
||||||
?>
|
};
|
||||||
|
|
||||||
|
$down = function () use ($db) {
|
||||||
|
if ($db->hasColumn(TABLE_PREFIX . 'monsters', 'loot')) {
|
||||||
|
$db->changeColumn(TABLE_PREFIX . 'monsters', 'loot', 'file_path', 'VARCHAR(5000)');
|
||||||
|
}
|
||||||
|
|
||||||
|
// update file_path to empty string
|
||||||
|
$db->query("UPDATE `" . TABLE_PREFIX . "monsters` SET `file_path` = '';");
|
||||||
|
|
||||||
|
// add monsters.gfx_name field
|
||||||
|
$db->addColumn(TABLE_PREFIX . 'monsters', 'gfx_name', 'varchar(255) NOT NULL AFTER `race`');
|
||||||
|
|
||||||
|
// rename hidden to hide_creature
|
||||||
|
if ($db->hasColumn(TABLE_PREFIX . 'monsters', 'hidden')) {
|
||||||
|
$db->changeColumn(TABLE_PREFIX . 'monsters', 'hidden', 'hide_creature', 'TINYINT(1) NOT NULL DEFAULT 0');
|
||||||
|
}
|
||||||
|
};
|
||||||
|
@@ -1,10 +1,26 @@
|
|||||||
<?php
|
<?php
|
||||||
|
/**
|
||||||
|
* @var OTS_DB_MySQL $db
|
||||||
|
*/
|
||||||
|
|
||||||
// add new forum.guild and forum.access fields
|
// add new forum.guild and forum.access fields
|
||||||
if(!$db->hasColumn(TABLE_PREFIX . 'forum_boards', 'guild')) {
|
|
||||||
$db->query("ALTER TABLE `" . TABLE_PREFIX . "forum_boards` ADD `guild` TINYINT(1) NOT NULL DEFAULT 0 AFTER `closed`;");
|
|
||||||
}
|
|
||||||
|
|
||||||
if(!$db->hasColumn(TABLE_PREFIX . 'forum_boards', 'access')) {
|
$up = function () use ($db) {
|
||||||
$db->query("ALTER TABLE `" . TABLE_PREFIX . "forum_boards` ADD `access` TINYINT(1) NOT NULL DEFAULT 0 AFTER `guild`;");
|
if (!$db->hasColumn(TABLE_PREFIX . 'forum_boards', 'guild')) {
|
||||||
}
|
$db->addColumn(TABLE_PREFIX . 'forum_boards', 'guild', 'TINYINT(1) NOT NULL DEFAULT 0 AFTER `closed`');
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!$db->hasColumn(TABLE_PREFIX . 'forum_boards', 'access')) {
|
||||||
|
$db->addColumn(TABLE_PREFIX . 'forum_boards', 'access', 'TINYINT(1) NOT NULL DEFAULT 0 AFTER `guild`');
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
$down = function () use ($db) {
|
||||||
|
if ($db->hasColumn(TABLE_PREFIX . 'forum_boards', 'guild')) {
|
||||||
|
$db->dropColumn(TABLE_PREFIX . 'forum_boards', 'guild');
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($db->hasColumn(TABLE_PREFIX . 'forum_boards', 'access')) {
|
||||||
|
$db->dropColumn(TABLE_PREFIX . 'forum_boards', 'access');
|
||||||
|
}
|
||||||
|
};
|
||||||
|
@@ -1,5 +1,14 @@
|
|||||||
<?php
|
<?php
|
||||||
|
/**
|
||||||
|
* @var OTS_DB_MySQL $db
|
||||||
|
*/
|
||||||
|
|
||||||
// change size of spells.vocations
|
// change size of spells.vocations
|
||||||
$db->query("ALTER TABLE `" . TABLE_PREFIX . "spells` MODIFY `vocations` VARCHAR(300) NOT NULL DEFAULT '';");
|
|
||||||
?>
|
$up = function () use ($db) {
|
||||||
|
$db->modifyColumn(TABLE_PREFIX . 'spells', 'vocations', "VARCHAR(300) NOT NULL DEFAULT ''");
|
||||||
|
};
|
||||||
|
|
||||||
|
$down = function () {
|
||||||
|
// nothing to do here
|
||||||
|
};
|
||||||
|
11
system/migrations/17-menu.sql
Normal file
11
system/migrations/17-menu.sql
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
CREATE TABLE `myaac_menu`
|
||||||
|
(
|
||||||
|
`id` INT(11) NOT NULL AUTO_INCREMENT,
|
||||||
|
`template` VARCHAR(255) NOT NULL,
|
||||||
|
`name` VARCHAR(255) NOT NULL,
|
||||||
|
`link` VARCHAR(255) NOT NULL,
|
||||||
|
`category` INT(11) NOT NULL DEFAULT 1,
|
||||||
|
`ordering` INT(11) NOT NULL DEFAULT 0,
|
||||||
|
`enabled` INT(1) NOT NULL DEFAULT 1,
|
||||||
|
PRIMARY KEY (`id`)
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8;
|
@@ -1,23 +1,20 @@
|
|||||||
<?php
|
<?php
|
||||||
|
/**
|
||||||
|
* @var OTS_DB_MySQL $db
|
||||||
|
*/
|
||||||
|
|
||||||
use MyAAC\Plugins;
|
use MyAAC\Plugins;
|
||||||
|
|
||||||
if(!$db->hasTable('myaac_menu')) {
|
$up = function () use ($db) {
|
||||||
$db->query("
|
if (!$db->hasTable(TABLE_PREFIX . 'menu')) {
|
||||||
CREATE TABLE `myaac_menu`
|
$db->exec(file_get_contents(__DIR__ . '/17-menu.sql'));
|
||||||
(
|
}
|
||||||
`id` INT(11) NOT NULL AUTO_INCREMENT,
|
|
||||||
`template` VARCHAR(255) NOT NULL,
|
|
||||||
`name` VARCHAR(255) NOT NULL,
|
|
||||||
`link` VARCHAR(255) NOT NULL,
|
|
||||||
`category` INT(11) NOT NULL DEFAULT 1,
|
|
||||||
`ordering` INT(11) NOT NULL DEFAULT 0,
|
|
||||||
`enabled` INT(1) NOT NULL DEFAULT 1,
|
|
||||||
PRIMARY KEY (`id`)
|
|
||||||
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8;
|
|
||||||
");
|
|
||||||
}
|
|
||||||
|
|
||||||
Plugins::installMenus('kathrine', require TEMPLATES . 'kathrine/menus.php');
|
Plugins::installMenus('kathrine', require TEMPLATES . 'kathrine/menus.php');
|
||||||
Plugins::installMenus('tibiacom', require TEMPLATES . 'tibiacom/menus.php');
|
Plugins::installMenus('tibiacom', require TEMPLATES . 'tibiacom/menus.php');
|
||||||
|
};
|
||||||
|
|
||||||
|
$down = function () use ($db) {
|
||||||
|
$db->dropTable(TABLE_PREFIX . 'menu');
|
||||||
|
};
|
||||||
|
|
||||||
|
@@ -1,6 +1,24 @@
|
|||||||
<?php
|
<?php
|
||||||
|
/**
|
||||||
|
* @var OTS_DB_MySQL $db
|
||||||
|
*/
|
||||||
|
|
||||||
$db->query("ALTER TABLE `" . TABLE_PREFIX . "news` ADD `article_text` VARCHAR(300) NOT NULL DEFAULT '' AFTER `comments`;");
|
$up = function () use ($db) {
|
||||||
$db->query("ALTER TABLE `" . TABLE_PREFIX . "news` ADD `article_image` VARCHAR(100) NOT NULL DEFAULT '' AFTER `article_text`;");
|
if (!$db->hasColumn(TABLE_PREFIX . 'news', 'article_text')) {
|
||||||
|
$db->addColumn(TABLE_PREFIX . 'news', 'article_text', "VARCHAR(300) NOT NULL DEFAULT '' AFTER `comments`");
|
||||||
|
}
|
||||||
|
|
||||||
?>
|
if (!$db->hasColumn(TABLE_PREFIX . 'news', 'article_image')) {
|
||||||
|
$db->addColumn(TABLE_PREFIX . 'news', 'article_image', "VARCHAR(100) NOT NULL DEFAULT '' AFTER `article_text`");
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
$down = function () use ($db) {
|
||||||
|
if ($db->hasColumn(TABLE_PREFIX . 'news', 'article_text')) {
|
||||||
|
$db->dropColumn(TABLE_PREFIX . 'news', 'article_text');
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($db->hasColumn(TABLE_PREFIX . 'news', 'article_image')) {
|
||||||
|
$db->dropColumn(TABLE_PREFIX . 'news', 'article_image');
|
||||||
|
}
|
||||||
|
};
|
||||||
|
@@ -1,5 +1,11 @@
|
|||||||
<?php
|
<?php
|
||||||
$db->query("ALTER TABLE `" . TABLE_PREFIX . "faq` MODIFY `answer` VARCHAR(1020) NOT NULL DEFAULT '';");
|
/**
|
||||||
$db->query("ALTER TABLE `" . TABLE_PREFIX . "movies` MODIFY `title` VARCHAR(100) NOT NULL DEFAULT '';");
|
* @var OTS_DB_MySQL $db
|
||||||
$db->query("ALTER TABLE `" . TABLE_PREFIX . "news` MODIFY `title` VARCHAR(100) NOT NULL DEFAULT '';");
|
*/
|
||||||
$db->query("ALTER TABLE `" . TABLE_PREFIX . "news` MODIFY `body` TEXT NOT NULL DEFAULT '';");
|
|
||||||
|
$up = function () use ($db) {
|
||||||
|
$db->modifyColumn(TABLE_PREFIX . 'faq', 'answer', "VARCHAR(1020) NOT NULL DEFAULT ''");
|
||||||
|
$db->modifyColumn(TABLE_PREFIX . 'movies', 'title', "VARCHAR(100) NOT NULL DEFAULT ''");
|
||||||
|
$db->modifyColumn(TABLE_PREFIX . 'news', 'title', "VARCHAR(100) NOT NULL DEFAULT ''");
|
||||||
|
$db->modifyColumn(TABLE_PREFIX . 'news', 'body', "TEXT NOT NULL");
|
||||||
|
};
|
||||||
|
@@ -2,16 +2,33 @@
|
|||||||
|
|
||||||
use MyAAC\Settings;
|
use MyAAC\Settings;
|
||||||
|
|
||||||
$query = $db->query("SELECT `id` FROM `players` WHERE (`name` = " . $db->quote("Rook Sample") . " OR `name` = " . $db->quote("Sorcerer Sample") . " OR `name` = " . $db->quote("Druid Sample") . " OR `name` = " . $db->quote("Paladin Sample") . " OR `name` = " . $db->quote("Knight Sample") . " OR `name` = " . $db->quote("Account Manager") . ") ORDER BY `id`;");
|
function updateHighscoresIdsHidden(): void
|
||||||
|
{
|
||||||
|
global $db;
|
||||||
|
|
||||||
$highscores_ignored_ids = array();
|
if (!$db->hasTable('players')) {
|
||||||
if($query->rowCount() > 0) {
|
return;
|
||||||
foreach($query->fetchAll() as $result)
|
}
|
||||||
|
|
||||||
|
$query = $db->query("SELECT `id` FROM `players` WHERE (`name` = " . $db->quote("Rook Sample") . " OR `name` = " . $db->quote("Sorcerer Sample") . " OR `name` = " . $db->quote("Druid Sample") . " OR `name` = " . $db->quote("Paladin Sample") . " OR `name` = " . $db->quote("Knight Sample") . " OR `name` = " . $db->quote("Account Manager") . ") ORDER BY `id`;");
|
||||||
|
|
||||||
|
$highscores_ignored_ids = array();
|
||||||
|
if ($query->rowCount() > 0) {
|
||||||
|
foreach ($query->fetchAll() as $result)
|
||||||
$highscores_ignored_ids[] = $result['id'];
|
$highscores_ignored_ids[] = $result['id'];
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
$highscores_ignored_ids[] = 0;
|
$highscores_ignored_ids[] = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
$settings = Settings::getInstance();
|
||||||
|
$settings->updateInDatabase('core', 'highscores_ids_hidden', implode(', ', $highscores_ignored_ids));
|
||||||
}
|
}
|
||||||
|
|
||||||
$settings = Settings::getInstance();
|
$up = function () {
|
||||||
$settings->updateInDatabase('core', 'highscores_ids_hidden', implode(', ', $highscores_ignored_ids));
|
updateHighscoresIdsHidden();
|
||||||
|
};
|
||||||
|
|
||||||
|
$down = function () {
|
||||||
|
$settings = Settings::getInstance();
|
||||||
|
$settings->updateInDatabase('core', 'highscores_ids_hidden', '0');
|
||||||
|
};
|
||||||
|
@@ -1,14 +1,23 @@
|
|||||||
<?php
|
<?php
|
||||||
|
/**
|
||||||
|
* @var OTS_DB_MySQL $db
|
||||||
|
*/
|
||||||
|
|
||||||
$db->exec("ALTER TABLE `" . TABLE_PREFIX . "forum` ADD `post_html` TINYINT(1) NOT NULL DEFAULT 0 AFTER `post_smile`;");
|
$up = function () use ($db) {
|
||||||
|
$db->addColumn(TABLE_PREFIX . 'forum', 'post_html', 'TINYINT(1) NOT NULL DEFAULT 0 AFTER `post_smile`');
|
||||||
|
|
||||||
$query = $db->query("SELECT `id` FROM `" . TABLE_PREFIX . "forum_boards` WHERE `name` LIKE " . $db->quote('News') . " LIMIT 1;");
|
$query = $db->query("SELECT `id` FROM `" . TABLE_PREFIX . "forum_boards` WHERE `name` LIKE " . $db->quote('News') . " LIMIT 1;");
|
||||||
if($query->rowCount() == 0) {
|
if ($query->rowCount() == 0) {
|
||||||
return; // don't make anything
|
return; // don't make anything
|
||||||
}
|
}
|
||||||
|
|
||||||
$query = $query->fetch();
|
$query = $query->fetch();
|
||||||
$id = $query['id'];
|
$id = $query['id'];
|
||||||
|
|
||||||
// update all forum threads with is_html = 1
|
// update all forum threads with is_html = 1
|
||||||
$db->exec("UPDATE `" . TABLE_PREFIX . "forum` SET `post_html` = 1 WHERE `section` = " . $id . " AND `id` = `first_post`;");
|
$db->exec("UPDATE `" . TABLE_PREFIX . "forum` SET `post_html` = 1 WHERE `section` = " . $id . " AND `id` = `first_post`;");
|
||||||
|
};
|
||||||
|
|
||||||
|
$down = function () use ($db) {
|
||||||
|
$db->dropColumn(TABLE_PREFIX . 'forum', 'post_html');
|
||||||
|
};
|
||||||
|
10
system/migrations/22-z_polls.sql
Normal file
10
system/migrations/22-z_polls.sql
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
CREATE TABLE `z_polls` (
|
||||||
|
`id` int(11) NOT NULL auto_increment,
|
||||||
|
`question` varchar(255) NOT NULL,
|
||||||
|
`description` varchar(255) NOT NULL,
|
||||||
|
`end` int(11) NOT NULL DEFAULT 0,
|
||||||
|
`start` int(11) NOT NULL DEFAULT 0,
|
||||||
|
`answers` int(11) NOT NULL DEFAULT 0,
|
||||||
|
`votes_all` int(11) NOT NULL DEFAULT 0,
|
||||||
|
PRIMARY KEY (`id`)
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8;
|
6
system/migrations/22-z_polls_answers.sql
Normal file
6
system/migrations/22-z_polls_answers.sql
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
CREATE TABLE `z_polls_answers` (
|
||||||
|
`poll_id` int(11) NOT NULL,
|
||||||
|
`answer_id` int(11) NOT NULL,
|
||||||
|
`answer` varchar(255) NOT NULL,
|
||||||
|
`votes` int(11) NOT NULL DEFAULT 0
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8;
|
@@ -1,31 +1,35 @@
|
|||||||
<?php
|
<?php
|
||||||
|
/**
|
||||||
|
* @var OTS_DB_MySQL $db
|
||||||
|
*/
|
||||||
|
|
||||||
if(!$db->hasTable('z_polls'))
|
$up = function () use ($db) {
|
||||||
$db->query('
|
if (!$db->hasTable('z_polls')) {
|
||||||
CREATE TABLE `z_polls` (
|
$db->exec(file_get_contents(__DIR__ . '/22-z_polls.sql'));
|
||||||
`id` int(11) NOT NULL auto_increment,
|
}
|
||||||
`question` varchar(255) NOT NULL,
|
|
||||||
`description` varchar(255) NOT NULL,
|
|
||||||
`end` int(11) NOT NULL DEFAULT 0,
|
|
||||||
`start` int(11) NOT NULL DEFAULT 0,
|
|
||||||
`answers` int(11) NOT NULL DEFAULT 0,
|
|
||||||
`votes_all` int(11) NOT NULL DEFAULT 0,
|
|
||||||
PRIMARY KEY (`id`)
|
|
||||||
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8;
|
|
||||||
');
|
|
||||||
|
|
||||||
if(!$db->hasTable('z_polls_answers'))
|
if (!$db->hasTable('z_polls_answers')) {
|
||||||
$db->query('
|
$db->exec(file_get_contents(__DIR__ . '/22-z_polls_answers.sql'));
|
||||||
CREATE TABLE `z_polls_answers` (
|
}
|
||||||
`poll_id` int(11) NOT NULL,
|
|
||||||
`answer_id` int(11) NOT NULL,
|
|
||||||
`answer` varchar(255) NOT NULL,
|
|
||||||
`votes` int(11) NOT NULL DEFAULT 0
|
|
||||||
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8;
|
|
||||||
');
|
|
||||||
|
|
||||||
if(!$db->hasColumn('accounts', 'vote'))
|
if (!$db->hasColumn('accounts', 'vote')) {
|
||||||
$db->query('ALTER TABLE `accounts` ADD `vote` INT( 11 ) DEFAULT 0 NOT NULL ;');
|
$db->addColumn('accounts', 'vote', 'int(11) NOT NULL DEFAULT 0');
|
||||||
else {
|
}
|
||||||
$db->query('ALTER TABLE `accounts` MODIFY `vote` INT( 11 ) DEFAULT 0 NOT NULL ;');
|
else {
|
||||||
}
|
$db->modifyColumn('accounts', 'vote', 'int(11) NOT NULL DEFAULT 0');
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
$down = function () use ($db) {
|
||||||
|
if ($db->hasTable('z_polls')) {
|
||||||
|
$db->dropTable('z_polls;');
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($db->hasTable('z_polls_answers')) {
|
||||||
|
$db->dropTable('z_polls_answers');
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($db->hasColumn('accounts', 'vote')) {
|
||||||
|
$db->dropColumn('accounts', 'vote');
|
||||||
|
}
|
||||||
|
};
|
||||||
|
@@ -1,7 +1,24 @@
|
|||||||
<?php
|
<?php
|
||||||
|
/**
|
||||||
|
* @var OTS_DB_MySQL $db
|
||||||
|
*/
|
||||||
|
|
||||||
if(!$db->hasColumn(TABLE_PREFIX . 'menu', 'blank'))
|
$up = function () use ($db) {
|
||||||
$db->query("ALTER TABLE `" . TABLE_PREFIX . "menu` ADD `blank` TINYINT(1) NOT NULL DEFAULT 0 AFTER `link`;");
|
if (!$db->hasColumn(TABLE_PREFIX . 'menu', 'blank')) {
|
||||||
|
$db->addColumn(TABLE_PREFIX . 'menu', 'blank', 'TINYINT(1) NOT NULL DEFAULT 0 AFTER `link`');
|
||||||
|
}
|
||||||
|
|
||||||
if(!$db->hasColumn(TABLE_PREFIX . 'menu', 'color'))
|
if (!$db->hasColumn(TABLE_PREFIX . 'menu', 'color')) {
|
||||||
$db->query("ALTER TABLE `" . TABLE_PREFIX . "menu` ADD `color` CHAR(6) NOT NULL DEFAULT '' AFTER `blank`;");
|
$db->addColumn(TABLE_PREFIX . 'menu', 'color', "CHAR(6) NOT NULL DEFAULT '' AFTER `blank`");
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
$down = function () use ($db) {
|
||||||
|
if ($db->hasColumn(TABLE_PREFIX . 'menu', 'blank')) {
|
||||||
|
$db->dropColumn(TABLE_PREFIX . 'menu', 'blank');
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($db->hasColumn(TABLE_PREFIX . 'menu', 'color')) {
|
||||||
|
$db->dropColumn(TABLE_PREFIX . 'menu', 'color');
|
||||||
|
}
|
||||||
|
};
|
||||||
|
9
system/migrations/24-items.sql
Normal file
9
system/migrations/24-items.sql
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
CREATE TABLE `myaac_items`
|
||||||
|
(
|
||||||
|
`id` INT(11) NOT NULL,
|
||||||
|
`article` VARCHAR(5) NOT NULL DEFAULT '',
|
||||||
|
`name` VARCHAR(50) NOT NULL DEFAULT '',
|
||||||
|
`plural` VARCHAR(50) NOT NULL DEFAULT '',
|
||||||
|
`attributes` VARCHAR(500) NOT NULL DEFAULT '',
|
||||||
|
PRIMARY KEY (`id`)
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8;
|
@@ -1,3 +1,12 @@
|
|||||||
<?php
|
<?php
|
||||||
|
/**
|
||||||
|
* @var OTS_DB_MySQL $db
|
||||||
|
*/
|
||||||
|
|
||||||
$db->exec('DROP TABLE IF EXISTS `' . TABLE_PREFIX . 'items`;');
|
$up = function () use ($db) {
|
||||||
|
$db->dropTable(TABLE_PREFIX . 'items');
|
||||||
|
};
|
||||||
|
|
||||||
|
$down = function () use ($db) {
|
||||||
|
$db->exec(file_get_contents(__DIR__ . '/24-items.sql'));
|
||||||
|
};
|
||||||
|
@@ -1,3 +1,12 @@
|
|||||||
<?php
|
<?php
|
||||||
|
/**
|
||||||
|
* @var OTS_DB_MySQL $db
|
||||||
|
*/
|
||||||
|
|
||||||
$db->exec('ALTER TABLE `' . TABLE_PREFIX . 'monsters` MODIFY `loot` text NOT NULL;');
|
$up = function () use ($db) {
|
||||||
|
$db->modifyColumn(TABLE_PREFIX . 'monsters', 'loot', 'text NOT NULL');
|
||||||
|
};
|
||||||
|
|
||||||
|
$down = function () {
|
||||||
|
// nothing to do
|
||||||
|
};
|
||||||
|
@@ -1,17 +1,32 @@
|
|||||||
<?php
|
<?php
|
||||||
|
/**
|
||||||
|
* @var OTS_DB_MySQL $db
|
||||||
|
*/
|
||||||
|
|
||||||
if($db->hasColumn(TABLE_PREFIX . 'spells', 'spell')) {
|
$up = function () use ($db) {
|
||||||
$db->exec('ALTER TABLE `' . TABLE_PREFIX . "spells` MODIFY `spell` VARCHAR(255) NOT NULL DEFAULT '';");
|
if ($db->hasColumn(TABLE_PREFIX . 'spells', 'spell')) {
|
||||||
}
|
$db->modifyColumn(TABLE_PREFIX . 'spells', 'spell', "VARCHAR(255) NOT NULL DEFAULT ''");
|
||||||
|
}
|
||||||
|
|
||||||
if($db->hasColumn(TABLE_PREFIX . 'spells', 'words')) {
|
if ($db->hasColumn(TABLE_PREFIX . 'spells', 'words')) {
|
||||||
$db->exec('ALTER TABLE `' . TABLE_PREFIX . "spells` MODIFY `words` VARCHAR(255) NOT NULL DEFAULT '';");
|
$db->modifyColumn(TABLE_PREFIX . 'spells', 'words', "VARCHAR(255) NOT NULL DEFAULT ''");
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!$db->hasColumn(TABLE_PREFIX . 'spells', 'conjure_id')) {
|
if (!$db->hasColumn(TABLE_PREFIX . 'spells', 'conjure_id')) {
|
||||||
$db->exec('ALTER TABLE `' . TABLE_PREFIX . 'spells` ADD `conjure_id` INT(11) NOT NULL DEFAULT 0 AFTER `soul`;');
|
$db->addColumn(TABLE_PREFIX . 'spells', 'conjure_id', 'INT(11) NOT NULL DEFAULT 0 AFTER `soul`');
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!$db->hasColumn(TABLE_PREFIX . 'spells', 'reagent')) {
|
if (!$db->hasColumn(TABLE_PREFIX . 'spells', 'reagent')) {
|
||||||
$db->exec('ALTER TABLE `' . TABLE_PREFIX . 'spells` ADD `reagent` INT(11) NOT NULL DEFAULT 0 AFTER `conjure_count`;');
|
$db->addColumn(TABLE_PREFIX . 'spells', 'reagent', 'INT(11) NOT NULL DEFAULT 0 AFTER `conjure_count`');
|
||||||
}
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
$down = function () use ($db) {
|
||||||
|
if ($db->hasColumn(TABLE_PREFIX . 'spells', 'conjure_id')) {
|
||||||
|
$db->dropColumn(TABLE_PREFIX . 'spells', 'conjure_id');
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($db->hasColumn(TABLE_PREFIX . 'spells', 'reagent')) {
|
||||||
|
$db->dropColumn(TABLE_PREFIX . 'spells', 'reagent');
|
||||||
|
}
|
||||||
|
};
|
||||||
|
22
system/migrations/27-commands.html
Normal file
22
system/migrations/27-commands.html
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
<table class="myaac-table" style="border-collapse: collapse; width: 100%; height: 72px; border-width: 1px;" border="1"><colgroup><col style="width: 50%;"><col style="width: 50%;"></colgroup>
|
||||||
|
<thead>
|
||||||
|
<tr style="height: 18px;">
|
||||||
|
<td style="height: 18px; border-width: 1px; text-align: center;"><span style="color: #ffffff;"><strong>Words</strong></span></td>
|
||||||
|
<td style="height: 18px; border-width: 1px; text-align: center;"><strong>Description</strong></td>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<tr style="height: 18px;">
|
||||||
|
<td style="height: 18px; border-width: 1px;">!example</td>
|
||||||
|
<td style="height: 18px; border-width: 1px;">This is just an example</td>
|
||||||
|
</tr>
|
||||||
|
<tr style="height: 18px;">
|
||||||
|
<td style="height: 18px; border-width: 1px;">!buyhouse</td>
|
||||||
|
<td style="height: 18px; border-width: 1px;">Buy house you are looking at</td>
|
||||||
|
</tr>
|
||||||
|
<tr style="height: 18px;">
|
||||||
|
<td style="height: 18px; border-width: 1px;"><em>!aol</em></td>
|
||||||
|
<td style="height: 18px; border-width: 1px;">Buy AoL</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
6
system/migrations/27-downloads.html
Normal file
6
system/migrations/27-downloads.html
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
<p> </p>
|
||||||
|
<p> </p>
|
||||||
|
<div style="text-align: center;">We're using official Tibia Client <strong>{{ config.client / 100 }}</strong><br>
|
||||||
|
<p>Download Tibia Client <strong>{{ config.client / 100 }}</strong> for Windows <a href="https://drive.google.com/drive/folders/0B2-sMQkWYzhGSFhGVlY2WGk5czQ" target="_blank" rel="noopener">HERE</a>.</p>
|
||||||
|
<h2>IP Changer:</h2>
|
||||||
|
<a href="https://static.otland.net/ipchanger.exe" target="_blank" rel="noopener">HERE</a></div>
|
@@ -1,47 +1,48 @@
|
|||||||
<?php
|
<?php
|
||||||
|
/**
|
||||||
|
* @var OTS_DB_MySQL $db
|
||||||
|
*/
|
||||||
|
|
||||||
$downloadsPage = <<<HTML
|
use MyAAC\Models\Pages;
|
||||||
<p> </p>
|
|
||||||
<p> </p>
|
|
||||||
<div style="text-align: center;">We're using official Tibia Client <strong>{{ config.client / 100 }}</strong><br>
|
|
||||||
<p>Download Tibia Client <strong>{{ config.client / 100 }}</strong> for Windows <a href="https://drive.google.com/drive/folders/0B2-sMQkWYzhGSFhGVlY2WGk5czQ" target="_blank" rel="noopener">HERE</a>.</p>
|
|
||||||
<h2>IP Changer:</h2>
|
|
||||||
<a href="https://static.otland.net/ipchanger.exe" target="_blank" rel="noopener">HERE</a></div>
|
|
||||||
HTML;
|
|
||||||
|
|
||||||
$query = $db->query("SELECT `id` FROM `" . TABLE_PREFIX . "pages` WHERE `name` LIKE " . $db->quote('downloads') . " LIMIT 1;");
|
$up = function () use ($db) {
|
||||||
if($query->rowCount() === 0) {
|
$downloadsModel = Pages::where('name', 'downloads')->first();
|
||||||
$db->exec("INSERT INTO `myaac_pages` (`id`, `name`, `title`, `body`, `date`, `player_id`, `php`, `access`, `hide`) VALUES
|
if (!$downloadsModel) {
|
||||||
(null, 'downloads', 'Downloads', {$db->quote($downloadsPage)}, 0, 1, 0, 0, 0);");
|
$db->insert(TABLE_PREFIX . 'pages', [
|
||||||
}
|
'name' => 'downloads',
|
||||||
|
'title' => 'Downloads',
|
||||||
|
'body' => file_get_contents(__DIR__ . '/27-downloads.html'),
|
||||||
|
'date' => time(),
|
||||||
|
'player_id' => 1,
|
||||||
|
'php' => 0,
|
||||||
|
'access' => 0,
|
||||||
|
($db->hasColumn(TABLE_PREFIX . 'pages', 'hide') ? 'hide' : 'hidden') => 0,
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
$commandsPage = <<<HTML
|
$commandsModel = Pages::where('name', 'commands')->first();
|
||||||
<table class="myaac-table" style="border-collapse: collapse; width: 100%; height: 72px; border-width: 1px;" border="1"><colgroup><col style="width: 50%;"><col style="width: 50%;"></colgroup>
|
if (!$commandsModel) {
|
||||||
<thead>
|
$db->insert(TABLE_PREFIX . 'pages', [
|
||||||
<tr style="height: 18px;">
|
'name' => 'commands',
|
||||||
<td style="height: 18px; border-width: 1px; text-align: center;"><span style="color: #ffffff;"><strong>Words</strong></span></td>
|
'title' => 'Commands',
|
||||||
<td style="height: 18px; border-width: 1px; text-align: center;"><strong>Description</strong></td>
|
'body' => file_get_contents(__DIR__ . '/27-commands.html'),
|
||||||
</tr>
|
'date' => time(),
|
||||||
</thead>
|
'player_id' => 1,
|
||||||
<tbody>
|
'php' => 0,
|
||||||
<tr style="height: 18px;">
|
'access' => 0,
|
||||||
<td style="height: 18px; border-width: 1px;">!example</td>
|
($db->hasColumn(TABLE_PREFIX . 'pages', 'hide') ? 'hide' : 'hidden') => 0,
|
||||||
<td style="height: 18px; border-width: 1px;">This is just an example</td>
|
]);
|
||||||
</tr>
|
}
|
||||||
<tr style="height: 18px;">
|
};
|
||||||
<td style="height: 18px; border-width: 1px;">!buyhouse</td>
|
|
||||||
<td style="height: 18px; border-width: 1px;">Buy house you are looking at</td>
|
|
||||||
</tr>
|
|
||||||
<tr style="height: 18px;">
|
|
||||||
<td style="height: 18px; border-width: 1px;"><em>!aol</em></td>
|
|
||||||
<td style="height: 18px; border-width: 1px;">Buy AoL</td>
|
|
||||||
</tr>
|
|
||||||
</tbody>
|
|
||||||
</table>
|
|
||||||
HTML;
|
|
||||||
|
|
||||||
$query = $db->query("SELECT `id` FROM `" . TABLE_PREFIX . "pages` WHERE `name` LIKE " . $db->quote('commands') . " LIMIT 1;");
|
$down = function () {
|
||||||
if($query->rowCount() === 0) {
|
$downloadsModel = Pages::where('name', 'downloads')->first();
|
||||||
$db->exec("INSERT INTO `myaac_pages` (`id`, `name`, `title`, `body`, `date`, `player_id`, `php`, `access`, `hide`) VALUES
|
if ($downloadsModel) {
|
||||||
(null, 'commands', 'Commands', {$db->quote($commandsPage)}, 0, 1, 0, 0, 0);");
|
$downloadsModel->delete();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$commandsModel = Pages::where('name', 'commands')->first();
|
||||||
|
if ($commandsModel) {
|
||||||
|
$commandsModel->delete();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
10
system/migrations/28-hooks.sql
Normal file
10
system/migrations/28-hooks.sql
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
CREATE TABLE `myaac_hooks`
|
||||||
|
(
|
||||||
|
`id` INT(11) NOT NULL AUTO_INCREMENT,
|
||||||
|
`name` VARCHAR(30) NOT NULL DEFAULT '',
|
||||||
|
`type` INT(2) NOT NULL DEFAULT 0,
|
||||||
|
`file` VARCHAR(100) NOT NULL,
|
||||||
|
`ordering` INT(11) NOT NULL DEFAULT 0,
|
||||||
|
`enabled` INT(1) NOT NULL DEFAULT 1,
|
||||||
|
PRIMARY KEY (`id`)
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8;
|
@@ -1,10 +1,25 @@
|
|||||||
<?php
|
<?php
|
||||||
|
/**
|
||||||
|
* @var OTS_DB_MySQL $db
|
||||||
|
*/
|
||||||
|
|
||||||
use MyAAC\Cache\Cache;
|
use MyAAC\Cache\Cache;
|
||||||
|
|
||||||
$db->exec('DROP TABLE IF EXISTS `' . TABLE_PREFIX . 'hooks`;');
|
$up = function () use ($db) {
|
||||||
|
$db->dropTable(TABLE_PREFIX . 'hooks');
|
||||||
|
|
||||||
$cache = Cache::getInstance();
|
$cache = Cache::getInstance();
|
||||||
if($cache->enabled()) {
|
if($cache->enabled()) {
|
||||||
$cache->delete('hooks');
|
$cache->delete('hooks');
|
||||||
}
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
$down = function () use ($db) {
|
||||||
|
$db->exec(file_get_contents(__DIR__ . '/28-hooks.sql'));
|
||||||
|
|
||||||
|
$cache = Cache::getInstance();
|
||||||
|
if($cache->enabled()) {
|
||||||
|
$cache->delete('hooks');
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
@@ -1,5 +1,16 @@
|
|||||||
<?php
|
<?php
|
||||||
|
/**
|
||||||
|
* @var OTS_DB_MySQL $db
|
||||||
|
*/
|
||||||
|
|
||||||
if(!$db->hasColumn(TABLE_PREFIX . 'pages', 'enable_tinymce')) {
|
$up = function () use ($db) {
|
||||||
$db->exec('ALTER TABLE `' . TABLE_PREFIX . 'pages` ADD `enable_tinymce` TINYINT(1) NOT NULL DEFAULT 1 COMMENT \'1 - enabled, 0 - disabled\' AFTER `php`;');
|
if (!$db->hasColumn(TABLE_PREFIX . 'pages', 'enable_tinymce')) {
|
||||||
}
|
$db->addColumn(TABLE_PREFIX . 'pages', 'enable_tinymce', "TINYINT(1) NOT NULL DEFAULT 1 COMMENT '1 - enabled, 0 - disabled' AFTER `php`");
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
$down = function () use ($db) {
|
||||||
|
if ($db->hasColumn(TABLE_PREFIX . 'pages', 'enable_tinymce')) {
|
||||||
|
$db->dropColumn(TABLE_PREFIX . 'pages', 'enable_tinymce');
|
||||||
|
}
|
||||||
|
};
|
||||||
|
@@ -1,3 +1,15 @@
|
|||||||
<?php
|
<?php
|
||||||
$db->query("ALTER TABLE `" . TABLE_PREFIX . "account_actions` ADD `ipv6` BINARY(16) NOT NULL DEFAULT 0;");
|
/**
|
||||||
?>
|
* @var OTS_DB_MySQL $db
|
||||||
|
*/
|
||||||
|
|
||||||
|
$up = function () use ($db) {
|
||||||
|
if (!$db->hasColumn(TABLE_PREFIX . 'account_actions', 'ipv6')) {
|
||||||
|
$db->addColumn(TABLE_PREFIX . 'account_actions', 'ipv6', "BINARY(16) NOT NULL DEFAULT 0");
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
$down = function () {
|
||||||
|
// we don't want data loss
|
||||||
|
//$db->dropColumn(TABLE_PREFIX . 'account_actions', 'ipv6');
|
||||||
|
};
|
||||||
|
25
system/migrations/30-rules.txt
Normal file
25
system/migrations/30-rules.txt
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
1. Names
|
||||||
|
a) Names which contain insulting (e.g. "Bastard"), racist (e.g. "Nigger"), extremely right-wing (e.g. "Hitler"), sexist (e.g. "Bitch") or offensive (e.g. "Copkiller") language.
|
||||||
|
b) Names containing parts of sentences (e.g. "Mike returns"), nonsensical combinations of letters (e.g. "Fgfshdsfg") or invalid formattings (e.g. "Thegreatknight").
|
||||||
|
c) Names that obviously do not describe a person (e.g. "Christmastree", "Matrix"), names of real life celebrities (e.g. "Britney Spears"), names that refer to real countries (e.g. "Swedish Druid"), names which were created to fake other players' identities (e.g. "Arieswer" instead of "Arieswar") or official positions (e.g. "System Admin").
|
||||||
|
|
||||||
|
2. Cheating
|
||||||
|
a) Exploiting obvious errors of the game ("bugs"), for instance to duplicate items. If you find an error you must report it to CipSoft immediately.
|
||||||
|
b) Intentional abuse of weaknesses in the gameplay, for example arranging objects or players in a way that other players cannot move them.
|
||||||
|
c) Using tools to automatically perform or repeat certain actions without any interaction by the player ("macros").
|
||||||
|
d) Manipulating the client program or using additional software to play the game.
|
||||||
|
e) Trying to steal other players\' account data ("hacking").
|
||||||
|
f) Playing on more than one account at the same time ("multi-clienting").
|
||||||
|
g) Offering account data to other players or accepting other players' account data ("account-trading/sharing").
|
||||||
|
|
||||||
|
3. Gamemasters
|
||||||
|
a) Threatening a gamemaster because of his or her actions or position as a gamemaster.
|
||||||
|
b) Pretending to be a gamemaster or to have influence on the decisions of a gamemaster.
|
||||||
|
c) Intentionally giving wrong or misleading information to a gamemaster concerning his or her investigations or making false reports about rule violations.
|
||||||
|
|
||||||
|
4. Player Killing
|
||||||
|
a) Excessive killing of characters who are not marked with a "skull" on worlds which are not PvP-enforced. Please note that killing marked characters is not a reason for a banishment.
|
||||||
|
|
||||||
|
A violation of the Tibia Rules may lead to temporary banishment of characters and accounts. In severe cases removal or modification of character skills, attributes and belongings, as well as the permanent removal of accounts without any compensation may be considered. The sanction is based on the seriousness of the rule violation and the previous record of the player. It is determined by the gamemaster imposing the banishment.
|
||||||
|
|
||||||
|
These rules may be changed at any time. All changes will be announced on the official website.
|
@@ -1,31 +1,27 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
$query = $db->query("SELECT `id` FROM `" . TABLE_PREFIX . "pages` WHERE `name` LIKE " . $db->quote('rules_on_the_page') . " LIMIT 1;");
|
use MyAAC\Models\Pages;
|
||||||
if($query->rowCount() === 0) {
|
|
||||||
$db->exec("INSERT INTO `myaac_pages` (`id`, `name`, `title`, `body`, `date`, `player_id`, `php`, `enable_tinymce`, `access`, `hide`) VALUES
|
|
||||||
(null, 'rules_on_the_page', 'Rules', '1. Names
|
|
||||||
a) Names which contain insulting (e.g. \"Bastard\"), racist (e.g. \"Nigger\"), extremely right-wing (e.g. \"Hitler\"), sexist (e.g. \"Bitch\") or offensive (e.g. \"Copkiller\") language.
|
|
||||||
b) Names containing parts of sentences (e.g. \"Mike returns\"), nonsensical combinations of letters (e.g. \"Fgfshdsfg\") or invalid formattings (e.g. \"Thegreatknight\").
|
|
||||||
c) Names that obviously do not describe a person (e.g. \"Christmastree\", \"Matrix\"), names of real life celebrities (e.g. \"Britney Spears\"), names that refer to real countries (e.g. \"Swedish Druid\"), names which were created to fake other players\' identities (e.g. \"Arieswer\" instead of \"Arieswar\") or official positions (e.g. \"System Admin\").
|
|
||||||
|
|
||||||
2. Cheating
|
$up = function () {
|
||||||
a) Exploiting obvious errors of the game (\"bugs\"), for instance to duplicate items. If you find an error you must report it to CipSoft immediately.
|
$rulesOnPage = Pages::where('name', 'rules_on_the_page')->first();
|
||||||
b) Intentional abuse of weaknesses in the gameplay, for example arranging objects or players in a way that other players cannot move them.
|
if (!$rulesOnPage) {
|
||||||
c) Using tools to automatically perform or repeat certain actions without any interaction by the player (\"macros\").
|
Pages::create([
|
||||||
d) Manipulating the client program or using additional software to play the game.
|
'name' => 'rules_on_the_page',
|
||||||
e) Trying to steal other players\' account data (\"hacking\").
|
'title' => 'Rules',
|
||||||
f) Playing on more than one account at the same time (\"multi-clienting\").
|
'body' => file_get_contents(__DIR__ . '/30-rules.txt'),
|
||||||
g) Offering account data to other players or accepting other players\' account data (\"account-trading/sharing\").
|
'date' => time(),
|
||||||
|
'player_id' => 1,
|
||||||
|
'php' => 0,
|
||||||
|
'enable_tinymce' => 0,
|
||||||
|
'access' => 0,
|
||||||
|
'hidden' => 0,
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
3. Gamemasters
|
$down = function () {
|
||||||
a) Threatening a gamemaster because of his or her actions or position as a gamemaster.
|
$rulesOnPage = Pages::where('name', 'rules_on_the_page')->first();
|
||||||
b) Pretending to be a gamemaster or to have influence on the decisions of a gamemaster.
|
if ($rulesOnPage) {
|
||||||
c) Intentionally giving wrong or misleading information to a gamemaster concerning his or her investigations or making false reports about rule violations.
|
Pages::where('name', 'rules_on_the_page')->delete();
|
||||||
|
}
|
||||||
4. Player Killing
|
};
|
||||||
a) Excessive killing of characters who are not marked with a \"skull\" on worlds which are not PvP-enforced. Please note that killing marked characters is not a reason for a banishment.
|
|
||||||
|
|
||||||
A violation of the Tibia Rules may lead to temporary banishment of characters and accounts. In severe cases removal or modification of character skills, attributes and belongings, as well as the permanent removal of accounts without any compensation may be considered. The sanction is based on the seriousness of the rule violation and the previous record of the player. It is determined by the gamemaster imposing the banishment.
|
|
||||||
|
|
||||||
These rules may be changed at any time. All changes will be announced on the official website.', 0, 1, 0, 0, 0, 0);");
|
|
||||||
}
|
|
||||||
|
@@ -1,57 +1,121 @@
|
|||||||
<?php
|
<?php
|
||||||
|
/**
|
||||||
|
* @var OTS_DB_MySQL $db
|
||||||
|
*/
|
||||||
|
|
||||||
if(!$db->hasColumn(TABLE_PREFIX . 'monsters', 'elements')) {
|
$up = function () use ($db) {
|
||||||
$db->exec("ALTER TABLE `" . TABLE_PREFIX . "monsters` ADD `elements` TEXT NOT NULL AFTER `immunities`;");
|
if(!$db->hasColumn(TABLE_PREFIX . 'monsters', 'elements')) {
|
||||||
}
|
$db->addColumn(TABLE_PREFIX . 'monsters', 'elements', "TEXT NOT NULL AFTER `immunities`");
|
||||||
|
}
|
||||||
|
|
||||||
if(!$db->hasColumn(TABLE_PREFIX . 'monsters', 'pushable')) {
|
if(!$db->hasColumn(TABLE_PREFIX . 'monsters', 'pushable')) {
|
||||||
$db->exec("ALTER TABLE `" . TABLE_PREFIX . "monsters` ADD `pushable` TINYINT(1) NOT NULL DEFAULT '0' AFTER `convinceable`;");
|
$db->addColumn(TABLE_PREFIX . 'monsters', 'pushable', "TINYINT(1) NOT NULL DEFAULT '0' AFTER `convinceable`");
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!$db->hasColumn(TABLE_PREFIX . 'monsters', 'canpushitems')) {
|
if(!$db->hasColumn(TABLE_PREFIX . 'monsters', 'canpushitems')) {
|
||||||
$db->exec("ALTER TABLE `" . TABLE_PREFIX . "monsters` ADD `canpushitems` TINYINT(1) NOT NULL DEFAULT '0' AFTER `pushable`;");
|
$db->addColumn(TABLE_PREFIX . 'monsters', 'canpushitems', "TINYINT(1) NOT NULL DEFAULT '0' AFTER `pushable`");
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!$db->hasColumn(TABLE_PREFIX . 'monsters', 'canpushcreatures')) {
|
if(!$db->hasColumn(TABLE_PREFIX . 'monsters', 'canpushcreatures')) {
|
||||||
$db->exec("ALTER TABLE `" . TABLE_PREFIX . "monsters` ADD `canpushcreatures` TINYINT(1) NOT NULL DEFAULT '0' AFTER `canpushitems`;");
|
$db->addColumn(TABLE_PREFIX . 'monsters', 'canpushcreatures', "TINYINT(1) NOT NULL DEFAULT '0' AFTER `canpushitems`");
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!$db->hasColumn(TABLE_PREFIX . 'monsters', 'canwalkonenergy')) {
|
if(!$db->hasColumn(TABLE_PREFIX . 'monsters', 'canwalkonenergy')) {
|
||||||
$db->exec("ALTER TABLE `" . TABLE_PREFIX . "monsters` ADD `canwalkonenergy` TINYINT(1) NOT NULL DEFAULT '0' AFTER `canpushitems`;");
|
$db->addColumn(TABLE_PREFIX . 'monsters', 'canwalkonenergy', "TINYINT(1) NOT NULL DEFAULT '0' AFTER `canpushitems`");
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!$db->hasColumn(TABLE_PREFIX . 'monsters', 'canwalkonpoison')) {
|
if(!$db->hasColumn(TABLE_PREFIX . 'monsters', 'canwalkonpoison')) {
|
||||||
$db->exec("ALTER TABLE `" . TABLE_PREFIX . "monsters` ADD `canwalkonpoison` TINYINT(1) NOT NULL DEFAULT '0' AFTER `canwalkonenergy`;");
|
$db->addColumn(TABLE_PREFIX . 'monsters', 'canwalkonpoison', "TINYINT(1) NOT NULL DEFAULT '0' AFTER `canwalkonenergy`");
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!$db->hasColumn(TABLE_PREFIX . 'monsters', 'canwalkonfire')) {
|
if(!$db->hasColumn(TABLE_PREFIX . 'monsters', 'canwalkonfire')) {
|
||||||
$db->exec("ALTER TABLE `" . TABLE_PREFIX . "monsters` ADD `canwalkonfire` TINYINT(1) NOT NULL DEFAULT '0' AFTER `canwalkonpoison`;");
|
$db->addColumn(TABLE_PREFIX . 'monsters', 'canwalkonfire', "TINYINT(1) NOT NULL DEFAULT '0' AFTER `canwalkonpoison`");
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!$db->hasColumn(TABLE_PREFIX . 'monsters', 'runonhealth')) {
|
if(!$db->hasColumn(TABLE_PREFIX . 'monsters', 'runonhealth')) {
|
||||||
$db->exec("ALTER TABLE `" . TABLE_PREFIX . "monsters` ADD `runonhealth` TINYINT(1) NOT NULL DEFAULT '0' AFTER `canwalkonfire`;");
|
$db->addColumn(TABLE_PREFIX . 'monsters', 'runonhealth', "TINYINT(1) NOT NULL DEFAULT '0' AFTER `canwalkonfire`");
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!$db->hasColumn(TABLE_PREFIX . 'monsters', 'hostile')) {
|
if(!$db->hasColumn(TABLE_PREFIX . 'monsters', 'hostile')) {
|
||||||
$db->exec("ALTER TABLE `" . TABLE_PREFIX . "monsters` ADD `hostile` TINYINT(1) NOT NULL DEFAULT '0' AFTER `runonhealth`;");
|
$db->addColumn(TABLE_PREFIX . 'monsters', 'hostile', "TINYINT(1) NOT NULL DEFAULT '0' AFTER `runonhealth`");
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!$db->hasColumn(TABLE_PREFIX . 'monsters', 'attackable')) {
|
if(!$db->hasColumn(TABLE_PREFIX . 'monsters', 'attackable')) {
|
||||||
$db->exec("ALTER TABLE `" . TABLE_PREFIX . "monsters` ADD `attackable` TINYINT(1) NOT NULL DEFAULT '0' AFTER `hostile`;");
|
$db->addColumn(TABLE_PREFIX . 'monsters', 'attackable', "TINYINT(1) NOT NULL DEFAULT '0' AFTER `hostile`");
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!$db->hasColumn(TABLE_PREFIX . 'monsters', 'rewardboss')) {
|
if(!$db->hasColumn(TABLE_PREFIX . 'monsters', 'rewardboss')) {
|
||||||
$db->exec("ALTER TABLE `" . TABLE_PREFIX . "monsters` ADD `rewardboss` TINYINT(1) NOT NULL DEFAULT '0' AFTER `attackable`;");
|
$db->addColumn(TABLE_PREFIX . 'monsters', 'rewardboss', "TINYINT(1) NOT NULL DEFAULT '0' AFTER `attackable`");
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!$db->hasColumn(TABLE_PREFIX . 'monsters', 'defense')) {
|
if(!$db->hasColumn(TABLE_PREFIX . 'monsters', 'defense')) {
|
||||||
$db->exec("ALTER TABLE `" . TABLE_PREFIX . "monsters` ADD `defense` INT(11) NOT NULL DEFAULT '0' AFTER `rewardboss`;");
|
$db->addColumn(TABLE_PREFIX . 'monsters', 'defense', "INT(11) NOT NULL DEFAULT '0' AFTER `rewardboss`");
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!$db->hasColumn(TABLE_PREFIX . 'monsters', 'armor')) {
|
if(!$db->hasColumn(TABLE_PREFIX . 'monsters', 'armor')) {
|
||||||
$db->exec("ALTER TABLE `" . TABLE_PREFIX . "monsters` ADD `armor` INT(11) NOT NULL DEFAULT '0' AFTER `defense`;");
|
$db->addColumn(TABLE_PREFIX . 'monsters', 'armor', "INT(11) NOT NULL DEFAULT '0' AFTER `defense`");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(!$db->hasColumn(TABLE_PREFIX . 'monsters', 'summons')) {
|
||||||
|
$db->addColumn(TABLE_PREFIX . 'monsters', 'summons', "TEXT NOT NULL AFTER `loot`");
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
$down = function () use ($db) {
|
||||||
|
if($db->hasColumn(TABLE_PREFIX . 'monsters', 'elements')) {
|
||||||
|
$db->dropColumn(TABLE_PREFIX . 'monsters', 'elements');
|
||||||
|
}
|
||||||
|
|
||||||
|
if($db->hasColumn(TABLE_PREFIX . 'monsters', 'pushable')) {
|
||||||
|
$db->dropColumn(TABLE_PREFIX . 'monsters', 'pushable');
|
||||||
|
}
|
||||||
|
|
||||||
|
if($db->hasColumn(TABLE_PREFIX . 'monsters', 'canpushitems')) {
|
||||||
|
$db->dropColumn(TABLE_PREFIX . 'monsters', 'canpushitems');
|
||||||
|
}
|
||||||
|
|
||||||
|
if($db->hasColumn(TABLE_PREFIX . 'monsters', 'canpushcreatures')) {
|
||||||
|
$db->dropColumn(TABLE_PREFIX . 'monsters', 'canpushcreatures');
|
||||||
|
}
|
||||||
|
|
||||||
|
if($db->hasColumn(TABLE_PREFIX . 'monsters', 'canwalkonenergy')) {
|
||||||
|
$db->dropColumn(TABLE_PREFIX . 'monsters', 'canwalkonenergy');
|
||||||
|
}
|
||||||
|
|
||||||
|
if($db->hasColumn(TABLE_PREFIX . 'monsters', 'canwalkonpoison')) {
|
||||||
|
$db->dropColumn(TABLE_PREFIX . 'monsters', 'canwalkonpoison');
|
||||||
|
}
|
||||||
|
|
||||||
|
if($db->hasColumn(TABLE_PREFIX . 'monsters', 'canwalkonfire')) {
|
||||||
|
$db->dropColumn(TABLE_PREFIX . 'monsters', 'canwalkonfire');
|
||||||
|
}
|
||||||
|
|
||||||
|
if($db->hasColumn(TABLE_PREFIX . 'monsters', 'runonhealth')) {
|
||||||
|
$db->dropColumn(TABLE_PREFIX . 'monsters', 'runonhealth');
|
||||||
|
}
|
||||||
|
|
||||||
|
if($db->hasColumn(TABLE_PREFIX . 'monsters', 'hostile')) {
|
||||||
|
$db->dropColumn(TABLE_PREFIX . 'monsters', 'hostile');
|
||||||
|
}
|
||||||
|
|
||||||
|
if($db->hasColumn(TABLE_PREFIX . 'monsters', 'attackable')) {
|
||||||
|
$db->dropColumn(TABLE_PREFIX . 'monsters', 'attackable');
|
||||||
|
}
|
||||||
|
|
||||||
|
if($db->hasColumn(TABLE_PREFIX . 'monsters', 'rewardboss')) {
|
||||||
|
$db->dropColumn(TABLE_PREFIX . 'monsters', 'rewardboss');
|
||||||
|
}
|
||||||
|
|
||||||
|
if($db->hasColumn(TABLE_PREFIX . 'monsters', 'defense')) {
|
||||||
|
$db->dropColumn(TABLE_PREFIX . 'monsters', 'defense');
|
||||||
|
}
|
||||||
|
|
||||||
|
if($db->hasColumn(TABLE_PREFIX . 'monsters', 'armor')) {
|
||||||
|
$db->dropColumn(TABLE_PREFIX . 'monsters', 'armor');
|
||||||
|
}
|
||||||
|
|
||||||
|
if($db->hasColumn(TABLE_PREFIX . 'monsters', 'summons')) {
|
||||||
|
$db->dropColumn(TABLE_PREFIX . 'monsters', 'summons');
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
if(!$db->hasColumn(TABLE_PREFIX . 'monsters', 'summons')) {
|
|
||||||
$db->exec("ALTER TABLE `" . TABLE_PREFIX . "monsters` ADD `summons` TEXT NOT NULL AFTER `loot`;");
|
|
||||||
}
|
|
||||||
|
@@ -1,4 +1,14 @@
|
|||||||
<?php
|
<?php
|
||||||
|
/**
|
||||||
|
* @var OTS_DB_MySQL $db
|
||||||
|
*/
|
||||||
|
|
||||||
// Increase size of page in myaac_visitors table
|
// Increase size of page in myaac_visitors table
|
||||||
|
|
||||||
$db->exec('ALTER TABLE `' . TABLE_PREFIX . "visitors` MODIFY `page` VARCHAR(2048) NOT NULL;");
|
$up = function () use ($db) {
|
||||||
|
$db->modifyColumn(TABLE_PREFIX . 'visitors', 'page', 'VARCHAR(2048) NOT NULL');
|
||||||
|
};
|
||||||
|
|
||||||
|
$down = function () {
|
||||||
|
// nothing to be done, as we have just extended the size of a column
|
||||||
|
};
|
||||||
|
@@ -1,6 +1,16 @@
|
|||||||
<?php
|
<?php
|
||||||
|
/**
|
||||||
|
* @var OTS_DB_MySQL $db
|
||||||
|
*/
|
||||||
|
|
||||||
// Increase size of ip in myaac_visitors table
|
// Increase size of ip in myaac_visitors table
|
||||||
// according to this answer: https://stackoverflow.com/questions/166132/maximum-length-of-the-textual-representation-of-an-ipv6-address
|
// according to this answer: https://stackoverflow.com/questions/166132/maximum-length-of-the-textual-representation-of-an-ipv6-address
|
||||||
// the size of ipv6 can be maximal 45 chars
|
// the size of ipv6 can be maximal 45 chars
|
||||||
|
|
||||||
$db->exec('ALTER TABLE `' . TABLE_PREFIX . "visitors` MODIFY `ip` VARCHAR(45) NOT NULL;");
|
$up = function () use ($db) {
|
||||||
|
$db->modifyColumn(TABLE_PREFIX . 'visitors', 'ip', 'VARCHAR(45) NOT NULL');
|
||||||
|
};
|
||||||
|
|
||||||
|
$down = function () {
|
||||||
|
// nothing to be done, as we have just extended the size of a column
|
||||||
|
};
|
||||||
|
@@ -1,4 +1,18 @@
|
|||||||
<?php
|
<?php
|
||||||
|
/**
|
||||||
|
* @var OTS_DB_MySQL $db
|
||||||
|
*/
|
||||||
|
|
||||||
// add user_agent column into visitors
|
// add user_agent column into visitors
|
||||||
|
|
||||||
$db->exec('ALTER TABLE `' . TABLE_PREFIX . "visitors` ADD `user_agent` VARCHAR(255) NOT NULL DEFAULT '';");
|
$up = function () use ($db) {
|
||||||
|
if (!$db->hasColumn(TABLE_PREFIX . 'visitors', 'user_agent')) {
|
||||||
|
$db->addColumn(TABLE_PREFIX . 'visitors', 'user_agent', "VARCHAR(255) NOT NULL DEFAULT ''");
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
$down = function () use ($db) {
|
||||||
|
if ($db->hasColumn(TABLE_PREFIX . 'visitors', 'user_agent')) {
|
||||||
|
$db->dropColumn(TABLE_PREFIX . 'visitors', 'user_agent');
|
||||||
|
}
|
||||||
|
};
|
||||||
|
@@ -1,3 +1,17 @@
|
|||||||
<?php
|
<?php
|
||||||
|
/**
|
||||||
|
* @var OTS_DB_MySQL $db
|
||||||
|
*/
|
||||||
|
|
||||||
// add look column
|
// add look column
|
||||||
$db->exec('ALTER TABLE `' . TABLE_PREFIX . "monsters` ADD `look` VARCHAR(255) NOT NULL DEFAULT '' AFTER `health`;");
|
$up = function () use ($db) {
|
||||||
|
if (!$db->hasColumn(TABLE_PREFIX . 'monsters', 'look')) {
|
||||||
|
$db->addColumn(TABLE_PREFIX . 'monsters', 'look', "VARCHAR(255) NOT NULL DEFAULT '' AFTER `health`");
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
$down = function () use ($db) {
|
||||||
|
if ($db->hasColumn(TABLE_PREFIX . 'monsters', 'look')) {
|
||||||
|
$db->dropColumn(TABLE_PREFIX . 'monsters', 'look');
|
||||||
|
}
|
||||||
|
};
|
||||||
|
9
system/migrations/36-settings.sql
Normal file
9
system/migrations/36-settings.sql
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
CREATE TABLE `myaac_settings`
|
||||||
|
(
|
||||||
|
`id` int(11) NOT NULL AUTO_INCREMENT,
|
||||||
|
`name` VARCHAR(255) NOT NULL DEFAULT '',
|
||||||
|
`key` VARCHAR(255) NOT NULL DEFAULT '',
|
||||||
|
`value` TEXT NOT NULL,
|
||||||
|
PRIMARY KEY (`id`),
|
||||||
|
KEY `key` (`key`)
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8;
|
@@ -1,14 +1,18 @@
|
|||||||
<?php
|
<?php
|
||||||
|
/**
|
||||||
|
* @var OTS_DB_MySQL $db
|
||||||
|
*/
|
||||||
|
|
||||||
// add settings table
|
$up = function () use ($db) {
|
||||||
if(!$db->hasTable(TABLE_PREFIX . 'settings')) {
|
// add settings table
|
||||||
$db->exec("CREATE TABLE `" . TABLE_PREFIX . "settings`
|
if (!$db->hasTable(TABLE_PREFIX . 'settings')) {
|
||||||
(
|
$db->exec(file_get_contents(__DIR__ . '/36-settings.sql'));
|
||||||
`id` int(11) NOT NULL AUTO_INCREMENT,
|
}
|
||||||
`name` VARCHAR(255) NOT NULL DEFAULT '',
|
};
|
||||||
`key` VARCHAR(255) NOT NULL DEFAULT '',
|
|
||||||
`value` TEXT NOT NULL,
|
$down = function () {
|
||||||
PRIMARY KEY (`id`),
|
// will break the aac
|
||||||
KEY `key` (`key`)
|
//if ($db->hasTable(TABLE_PREFIX . 'settings')) {
|
||||||
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8;");
|
// $db->dropTable(TABLE_PREFIX . 'settings');
|
||||||
}
|
//}
|
||||||
|
};
|
||||||
|
@@ -5,4 +5,10 @@
|
|||||||
|
|
||||||
use MyAAC\Models\Pages;
|
use MyAAC\Models\Pages;
|
||||||
|
|
||||||
Pages::query()->where('access', 1)->update(['access' => 0]);
|
$up = function () {
|
||||||
|
Pages::query()->where('access', 1)->update(['access' => 0]);
|
||||||
|
};
|
||||||
|
|
||||||
|
$down = function () {
|
||||||
|
Pages::query()->where('access', 0)->update(['access' => 1]);
|
||||||
|
};
|
||||||
|
@@ -1,5 +1,16 @@
|
|||||||
<?php
|
<?php
|
||||||
|
/**
|
||||||
|
* @var OTS_DB_MySQL $db
|
||||||
|
*/
|
||||||
|
|
||||||
// 2023-11-11
|
// 2023-11-11
|
||||||
// execute highscores_ids_hidden once again, cause of settings
|
// execute highscores_ids_hidden once again, cause of settings
|
||||||
require __DIR__ . '/20.php';
|
$up = function () {
|
||||||
|
require_once __DIR__ . '/20.php';
|
||||||
|
updateHighscoresIdsHidden();
|
||||||
|
};
|
||||||
|
|
||||||
|
$down = function () {
|
||||||
|
// there is no downgrade for this
|
||||||
|
};
|
||||||
|
|
||||||
|
@@ -1,18 +1,41 @@
|
|||||||
<?php
|
<?php
|
||||||
|
/**
|
||||||
|
* @var OTS_DB_MySQL $db
|
||||||
|
*/
|
||||||
|
|
||||||
// 2024-01-27
|
// 2024-01-27
|
||||||
// change hidden to hide (Eloquent model reserved keyword)
|
// change hidden to hide (Eloquent model reserved keyword)
|
||||||
|
|
||||||
if (!$db->hasColumn('players', 'hide')) {
|
$definition = 'TINYINT(1) NOT NULL DEFAULT 0';
|
||||||
$db->exec("ALTER TABLE `players` CHANGE `hidden` `hide` TINYINT(1) NOT NULL DEFAULT 0;");
|
|
||||||
}
|
|
||||||
|
|
||||||
$db->exec("ALTER TABLE `" . TABLE_PREFIX . "changelog` CHANGE `hidden` `hide` TINYINT(1) NOT NULL DEFAULT 0;");
|
$up = function () use ($db, $definition) {
|
||||||
$db->exec("ALTER TABLE `" . TABLE_PREFIX . "faq` CHANGE `hidden` `hide` TINYINT(1) NOT NULL DEFAULT 0;");
|
if (!$db->hasColumn('players', 'hide')) {
|
||||||
$db->exec("ALTER TABLE `" . TABLE_PREFIX . "forum_boards` CHANGE `hidden` `hide` TINYINT(1) NOT NULL DEFAULT 0;");
|
$db->changeColumn('players', 'hidden', 'hide', $definition);
|
||||||
$db->exec("ALTER TABLE `" . TABLE_PREFIX . "monsters` CHANGE `hidden` `hide` TINYINT(1) NOT NULL DEFAULT 0;");
|
}
|
||||||
$db->exec("ALTER TABLE `" . TABLE_PREFIX . "news` CHANGE `hidden` `hide` TINYINT(1) NOT NULL DEFAULT 0;");
|
|
||||||
$db->exec("ALTER TABLE `" . TABLE_PREFIX . "news_categories` CHANGE `hidden` `hide` TINYINT(1) NOT NULL DEFAULT 0;");
|
$db->changeColumn(TABLE_PREFIX . 'changelog', 'hidden', 'hide', $definition);
|
||||||
$db->exec("ALTER TABLE `" . TABLE_PREFIX . "pages` CHANGE `hidden` `hide` TINYINT(1) NOT NULL DEFAULT 0;");
|
$db->changeColumn(TABLE_PREFIX . 'faq', 'hidden', 'hide', $definition);
|
||||||
$db->exec("ALTER TABLE `" . TABLE_PREFIX . "gallery` CHANGE `hidden` `hide` TINYINT(1) NOT NULL DEFAULT 0;");
|
$db->changeColumn(TABLE_PREFIX . 'forum_boards', 'hidden', 'hide', $definition);
|
||||||
$db->exec("ALTER TABLE `" . TABLE_PREFIX . "spells` CHANGE `hidden` `hide` TINYINT(1) NOT NULL DEFAULT 0;");
|
$db->changeColumn(TABLE_PREFIX . 'monsters', 'hidden', 'hide', $definition);
|
||||||
|
$db->changeColumn(TABLE_PREFIX . 'news', 'hidden', 'hide', $definition);
|
||||||
|
$db->changeColumn(TABLE_PREFIX . 'news_categories', 'hidden', 'hide', $definition);
|
||||||
|
$db->changeColumn(TABLE_PREFIX . 'pages', 'hidden', 'hide', $definition);
|
||||||
|
$db->changeColumn(TABLE_PREFIX . 'gallery', 'hidden', 'hide', $definition);
|
||||||
|
$db->changeColumn(TABLE_PREFIX . 'spells', 'hidden', 'hide', $definition);
|
||||||
|
};
|
||||||
|
|
||||||
|
$down = function () use ($db, $definition) {
|
||||||
|
if (!$db->hasColumn('players', 'hidden')) {
|
||||||
|
$db->changeColumn('players', 'hide', 'hidden', $definition);
|
||||||
|
}
|
||||||
|
|
||||||
|
$db->changeColumn(TABLE_PREFIX . 'changelog', 'hide', 'hidden', $definition);
|
||||||
|
$db->changeColumn(TABLE_PREFIX . 'faq', 'hide', 'hidden', $definition);
|
||||||
|
$db->changeColumn(TABLE_PREFIX . 'forum_boards', 'hide', 'hidden', $definition);
|
||||||
|
$db->changeColumn(TABLE_PREFIX . 'monsters', 'hide', 'hidden', $definition);
|
||||||
|
$db->changeColumn(TABLE_PREFIX . 'news', 'hide', 'hidden', $definition);
|
||||||
|
$db->changeColumn(TABLE_PREFIX . 'news_categories', 'hide', 'hidden', $definition);
|
||||||
|
$db->changeColumn(TABLE_PREFIX . 'pages', 'hide', 'hidden', $definition);
|
||||||
|
$db->changeColumn(TABLE_PREFIX . 'gallery', 'hide', 'hidden', $definition);
|
||||||
|
$db->changeColumn(TABLE_PREFIX . 'spells', 'hide', 'hidden', $definition);
|
||||||
|
};
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user