mirror of
https://github.com/slawkens/myaac.git
synced 2025-09-14 04:23:34 +02:00
Compare commits
3 Commits
v1.3.3
...
feature/re
Author | SHA1 | Date | |
---|---|---|---|
![]() |
67f54eacbc | ||
![]() |
cde8891b9b | ||
![]() |
50a8b8169f |
6
.github/workflows/cypress.yml
vendored
6
.github/workflows/cypress.yml
vendored
@@ -1,9 +1,9 @@
|
||||
name: Cypress
|
||||
on:
|
||||
pull_request:
|
||||
branches: [main]
|
||||
branches: [develop]
|
||||
push:
|
||||
branches: [main]
|
||||
branches: [develop]
|
||||
|
||||
jobs:
|
||||
cypress:
|
||||
@@ -35,7 +35,7 @@ jobs:
|
||||
- name: Checkout MyAAC
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
ref: main
|
||||
ref: develop
|
||||
|
||||
- uses: actions/setup-node@v4
|
||||
with:
|
||||
|
4
.github/workflows/phplint.yml
vendored
4
.github/workflows/phplint.yml
vendored
@@ -1,9 +1,9 @@
|
||||
name: PHP Linting
|
||||
on:
|
||||
pull_request:
|
||||
branches: [main]
|
||||
branches: [develop]
|
||||
push:
|
||||
branches: [main]
|
||||
branches: [develop]
|
||||
|
||||
jobs:
|
||||
phplint:
|
||||
|
4
.github/workflows/phpstan.yml
vendored
4
.github/workflows/phpstan.yml
vendored
@@ -2,9 +2,9 @@ name: "PHPStan"
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
branches: [main]
|
||||
branches: [develop]
|
||||
push:
|
||||
branches: [main]
|
||||
branches: [develop]
|
||||
|
||||
jobs:
|
||||
tests:
|
||||
|
4
.gitignore
vendored
4
.gitignore
vendored
@@ -4,7 +4,6 @@ Thumbs.db
|
||||
|
||||
#
|
||||
/.htaccess
|
||||
lua
|
||||
|
||||
# composer
|
||||
composer.phar
|
||||
@@ -76,3 +75,6 @@ landing
|
||||
|
||||
# system
|
||||
system/functions_custom.php
|
||||
|
||||
# others/rest
|
||||
system/pages/downloads.php
|
||||
|
245
CHANGELOG-1.x.md
245
CHANGELOG-1.x.md
@@ -1,245 +0,0 @@
|
||||
# Changelog
|
||||
|
||||
## [1.3.3 - 04.04.2025]
|
||||
|
||||
### Fixed
|
||||
* Fix uninstall plugin when plugin is disabled (https://github.com/slawkens/myaac/commit/6c568fd36a271270684fc412ccd556b230273a6d)
|
||||
|
||||
### Changed
|
||||
* Display more useful info when error parsing config.lua (https://github.com/slawkens/myaac/commit/fa6b6aa153ffc131e0d1631a4dcd9012a5850c2e)
|
||||
|
||||
### Other
|
||||
* Small adjustments (https://github.com/slawkens/myaac/commit/35e2483de86e295bdf089cceffa25842eeb2e34c, https://github.com/slawkens/myaac/commit/ae639d65b0bfa491e747e907e2ebc77f83f47981)
|
||||
|
||||
## [1.3.2 - 01.04.2025]
|
||||
|
||||
### Fixed
|
||||
* Fix debugBar/admin panel menu when using custom base_dir (https://github.com/slawkens/myaac/commit/65696f63e3aac02ff952ea81279e7cb2fa7570fb)
|
||||
|
||||
### Changed
|
||||
* Settings: Show/hide IP Ban Protection options depending on the value (enabled/disabled) (https://github.com/slawkens/myaac/commit/dbf73d0b61b45601ae95e51b23c051c2704169c5)
|
||||
* Do not require init.php in cache:clear command (https://github.com/slawkens/myaac/commit/d25c71857f767834239bbffacd00fdc671adb157)
|
||||
|
||||
## [1.3.1 - 19.03.2025]
|
||||
|
||||
### Fixed
|
||||
* Fixed migrate:run command (https://github.com/slawkens/myaac/commit/1a5771ad51e595fe13368a0721b059c4ecefb17d)
|
||||
|
||||
### Changed
|
||||
* Small adjustments (https://github.com/slawkens/myaac/commit/6fac883659f581baac1361826d046410156f1e58, https://github.com/slawkens/myaac/commit/4a6896b4469968b9904292734cf6c14ba5eeef14)
|
||||
|
||||
## [1.3 - 10.03.2025]
|
||||
|
||||
### Changed
|
||||
* Use latest outfit-images host from @gesior (https://github.com/slawkens/myaac/commit/529bdcf016dd0f9dffbc34d81f99a046a9ddb70d)
|
||||
* Change monster link to $_GET ?name= (https://github.com/slawkens/myaac/commit/4c5cc8b573b2b3e7ec00a22b7ede30a68083a924)
|
||||
|
||||
### Fixed
|
||||
* Fixed house links (https://github.com/slawkens/myaac/commit/887b5068ad11c4cdab614afd34525caba785ce13)
|
||||
* Fixed long title on headline.php (https://github.com/slawkens/myaac/commit/3e3f4bb5a514158ec8777684ca6c7f1c2a37bed5)
|
||||
* Fixed menu colors once again, plus add !important tag (https://github.com/slawkens/myaac/commit/aa52df6e2ec92cafc25b655ae907bf2e1746d9cc)
|
||||
* Fix: add possibility to remove all menu items in admin panel (https://github.com/slawkens/myaac/commit/00fe1adc15ea7646596d755f6e6e1f7854ffc1d5, https://github.com/slawkens/myaac/commit/9239a4f4198c3ad260802ac3b47e9c41b80b754e)
|
||||
|
||||
## [1.2 - 09.02.2025]
|
||||
|
||||
### Added
|
||||
* Twig session(key) function + reworked session functions to accept multi-array like in Laravel (https://github.com/slawkens/myaac/commit/b46ddb43d03ef7e5fc34e555e92e856bdc905691)
|
||||
* add template_name to twig variables (https://github.com/slawkens/myaac/commit/ae1161d77050bda181802b4496c9de920a7bb1bc)
|
||||
* add HOOK_INIT, executed just after $hooks are loaded (https://github.com/slawkens/myaac/commit/19686725dc810f63a07f049f82c66cf336d90ca6)
|
||||
|
||||
### Changed
|
||||
* settings: password input hide/show, enable Save button only if changes has been made, save settings in transaction (https://github.com/slawkens/myaac/commit/4fda4f643b60a151179e5dd4f04912fb2618d98f, https://github.com/slawkens/myaac/commit/28fef952f857b79d64bc7495ffa5e1999e68e192, https://github.com/slawkens/myaac/commit/4b6024dc451accadb6c469fa282a9a764c1c0a81)
|
||||
* rework menus: Different categories can have different colors + Option to reset menus (https://github.com/slawkens/myaac/commit/73de93a561f6b13111e019075724357d8a617249, https://github.com/slawkens/myaac/commit/3da3e62c5b12390d75de9b3320729bcca6e0b458)
|
||||
|
||||
### Fixed
|
||||
* highscores: Fix online status + vocation for TFS 0.x (https://github.com/slawkens/myaac/commit/ea51ad27c38be88d86514cb979bb394fcfbef1f0)
|
||||
* clear cache button in admin bar needed to be clicked twice until it worked (https://github.com/slawkens/myaac/commit/ea51ad27c38be88d86514cb979bb394fcfbef1f0)
|
||||
* HOOK_STARTUP location (https://github.com/slawkens/myaac/commit/a73fb1003ee3f812cf182d1834d65f08e6f60d1f)
|
||||
* if vocation name has more words (https://github.com/slawkens/myaac/commit/9d7fc98e1e0a96b59ecc1a7c39800a64445db364)
|
||||
|
||||
### Updated
|
||||
* Bump twig/twig from 3.18.0 to 3.19.0 (#284)
|
||||
|
||||
## [1.1 - 27.01.2025]
|
||||
|
||||
### Changed
|
||||
* adjust mailer settings descriptions to latest gmail (https://github.com/slawkens/myaac/commit/c5d5bb80671db135e6b503f53684771c7272e05d)
|
||||
* optimize $player->isOnline() function, thanks @gesior (https://github.com/slawkens/myaac/commit/10dd818b139d5e1bb1ca9ec81edfb083ba9316b4)
|
||||
* make players.comment and guilds.description VARCHAR (https://github.com/slawkens/myaac/commit/a45ceab83a74bee2b89cdb72baceda75e577e3cf)
|
||||
* add lua/ folder to .gitignore (https://github.com/slawkens/myaac/commit/07012f786b1114cb6ab2f064f82c645b136a375a)
|
||||
|
||||
### Fixed
|
||||
* general fixes in the tibiacom template menus, better support for custom menus
|
||||
* make functions_custom.php optional (https://github.com/slawkens/myaac/commit/dc2b5afd9980984e2b259c9fc99f2ade46f70a5a)
|
||||
* error in CLI, where BASE_URL is not defined (https://github.com/slawkens/myaac/commit/4d749b881582f64b5a46196dbbb5ee8097127f03)
|
||||
* hook ACCOUNT_LOGIN_BEFORE_ACCOUNT location (https://github.com/slawkens/myaac/commit/669c447fca8643ce56d9ef8c1374ec647c780998)
|
||||
|
||||
## [1.0.1 - 14.01.2025]
|
||||
|
||||
### Fixed
|
||||
* tibiacom account & news menu links not auto expanding
|
||||
|
||||
### Updated (Thanks dependabot)
|
||||
* twig from ^2.0 to ^3.11
|
||||
* tinymce from ^6.8.3 to ^7.2.0
|
||||
* cypress from ^12.12.0 to ^13.17.0
|
||||
* nesbot/carbon from 2.72.5 to 2.72.6
|
||||
|
||||
## [1.0 - 12.01.2025]
|
||||
|
||||
First stable release in the v1.0 series.
|
||||
|
||||
Minimum PHP 8.1 is required.
|
||||
|
||||
Changes since RC.2:
|
||||
|
||||
### Added
|
||||
* feature: migrations up/down. Allows to downgrade/upgrade database to specified version (https://github.com/slawkens/myaac/commit/3f6ff3a3326b0475d28d11ffd7fff51f362d799f)
|
||||
* new hooks for news management (https://github.com/slawkens/myaac/commit/011a85d8ae34283ded6999882833f9d4797028ec, https://github.com/slawkens/myaac/commit/36bd3eb846e829b45313e10f7568dc4e95841143)
|
||||
* None Vocation to highscores (can be changed to RookStayer in Admin Panel) (https://github.com/slawkens/myaac/commit/a4a248099521bb5b8b2aa5bd592138debd2f19d5)
|
||||
* support for button_color (green, red, blue) (https://github.com/slawkens/myaac/commit/d8b6b749ee62e88b6af4a05d3d7557f90b94d94e)
|
||||
* add $whoopsHandler as variable, can be used by plugins (https://github.com/slawkens/myaac/commit/b0c8cf2ecda23045d725aaf43cfb3852ed766a4b)
|
||||
* PlayerModel->outfit_url attribute (https://github.com/slawkens/myaac/commit/3b5be1a8db5dceecaa388e2925a5536d13b38881)
|
||||
* support for selecting plugin themes in Admin menus.php (https://github.com/slawkens/myaac/commit/77a2c1cec343ffe4be5c2c2503ee81bc32a14ca1)
|
||||
|
||||
### Changed
|
||||
* schema: Change character set to utf8mb4 (support for Emojis in Menus/Pages/News/Forum etc.) (https://github.com/slawkens/myaac/commit/27c44f1bdfb6234cf0c9d5b4b491123bb205b08f)
|
||||
* prefer get_browser_real_ip() over REMOTE_ADDR (https://github.com/slawkens/myaac/commit/941846605c00cee83168d2f916410b8ba8d4b7b9)
|
||||
* automatically set selected current one on highscores filters (https://github.com/slawkens/myaac/commit/e96227fbe41ae281783b2d49edb169a603601813)
|
||||
* rewrite towns loading code, removed OTBM loader (was too slow) (https://github.com/slawkens/myaac/commit/c980a0914632e7b27f718464f669a200707d217e)
|
||||
* allow OTS_Player to be passed as object to getPlayerLink (https://github.com/slawkens/myaac/commit/84d37c5a8f2c4535a41c8aa8264752969d3f3a3d)
|
||||
* do not clear menus by default on install (https://github.com/slawkens/myaac/commit/12d8faa3eda5e798f97b71e941c035187daad96e)
|
||||
* display warning in admin panel - plugins - if zip extension is not installed (https://github.com/slawkens/myaac/commit/e3ffe5d9e11d78ab064a370d8541bac351c9bcd9)
|
||||
* set default_socket_timeout for ipinfo.io checkup to 5 seconds (https://github.com/slawkens/myaac/commit/783d96fc6568a607d3198b832fed3a0dd06c4ebb)
|
||||
* refactor getTopPlayers function (support for balance) (https://github.com/slawkens/myaac/commit/c769962e39fe8dfb72ecd5be1864e145696be794)
|
||||
|
||||
### Fixed
|
||||
* XSS in forum (https://github.com/slawkens/myaac/commit/c2b7286d20d4b579171540f7a774e8a0995d5e8f, https://github.com/slawkens/myaac/commit/8fb643596f9586005976e7bdb484a541a9d8715e)
|
||||
* price deducted when changing sex (https://github.com/slawkens/myaac/commit/16671ea40b72dcf74037c359ad572f9eb825edf9)
|
||||
* move_thread by unauthorized user (https://github.com/slawkens/myaac/commit/d6c40c836a53cb1710f911f77f45f28b54ea1b54, thanks @anyeor)
|
||||
* TFS 1.4.2 where conditions is NULL (https://github.com/slawkens/myaac/commit/b8396d4c8482e951da538b13f2296123732c4545)
|
||||
* do not show forum new thread show button if not logged in (https://github.com/slawkens/myaac/commit/507402171ba3b6e7ee184bd7fa73e0d55e0cad7a, @anyeor)
|
||||
* login if limiter is disabled (https://github.com/slawkens/myaac/commit/a0f1971583f0f790013e2145fb5ac573c59fbdef)
|
||||
* fixes to installMenus function (https://github.com/slawkens/myaac/commit/a2fadc5945fe0a5e39f740827f6ffbda1bb501e2)
|
||||
* many PHP exceptions in different places
|
||||
* fixes to tibiacom menus ActiveSubmenuItem
|
||||
|
||||
### Removed
|
||||
* bugtracker SQL table code as the page has been removed/moved to plugins (https://github.com/slawkens/myaac/commit/5782772b901b05fb814bc718d062f6e2cd71df8c)
|
||||
|
||||
## [1.0-RC.2 - 25.10.2024]
|
||||
|
||||
Still waiting for your reports about bugs found in this release. We are very close to stable release.
|
||||
|
||||
### Added
|
||||
* feat: rate limit settings for blocking accounts login attempts (@gpedro, #266)
|
||||
* search by email in accounts editor (https://github.com/slawkens/myaac/commit/c2ec46824621468f2a1cb4046805c485ed13fea5)
|
||||
* New hooks in account manage + create (https://github.com/slawkens/myaac/commit/93641fc68ac9a5f1479329e2bd41380c19534d5d)
|
||||
|
||||
### Changed
|
||||
* chore: drop raw queries + accounts - search by email + accounts - required min size for search by account number (@gpedro, #266)
|
||||
* Use https for outfit & item images (https://github.com/slawkens/myaac/commit/71c00aa5e01fbdfd88802912e200dd1025976231)
|
||||
* Do not require players & guilds tables on install (https://github.com/slawkens/myaac/commit/779aa152fa940261c9b161533946f44e288597a2)
|
||||
* Do not create player if there is no players table in db (https://github.com/slawkens/myaac/commit/201f95caa8b70e88fa651eac8c3c3aa7cd765bd0)
|
||||
|
||||
### Fixed
|
||||
* Highscore frags fixed for TFS 0.3 (@Scrollog, #263)
|
||||
* Missing groups variable #262. thanks, @Scrollog for reporting (https://github.com/slawkens/myaac/commit/8d8bdb6dac6df21672ac77288fff2f2f8d6eb665)
|
||||
* Verified email for login.php (@gpedro, #265)
|
||||
* Warning if core.account_country is disabled (https://github.com/slawkens/myaac/commit/ab73d60c61e14a1cacdb6cfbf7f89f4bf3be0833)
|
||||
|
||||
|
||||
## [1.0-RC.1 - 23.07.2024]
|
||||
|
||||
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.
|
||||
|
||||
### Added
|
||||
* reworked Admin Panel (@Leesneaks, @gpedro, @slawkens)
|
||||
* updated to Bootstrap v4
|
||||
* new Menu
|
||||
* new Dashboard: statistics, server status
|
||||
* new Admin Bar showed on top when admin logged in
|
||||
* new page: Server Data, to reload server data
|
||||
* Towns, NPCs & Items are stored in permanent cache
|
||||
* new pages: mass account & teleport tools
|
||||
* changelogs editor
|
||||
* revised Accounts & Players editors
|
||||
* option to add/modify admin menus with plugins
|
||||
* option to enable/disable plugins
|
||||
* better, updated TinyMCE editor (v6.x)
|
||||
* with option to upload images
|
||||
* 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.
|
||||
* config.php moved to Admin Panel -> Settings page
|
||||
* new console script: aac - using symfony/console
|
||||
* usage: `php aac` (will list all commands by default)
|
||||
* example: `php aac cache:clear`
|
||||
* example: `php aac plugin:install theme-example.zip`
|
||||
* replace POT Query Builder to Eloquent ORM. Not 100% yet - in some places there is still old $db approach used (@gpedro) (https://github.com/slawkens/myaac/pull/230)
|
||||
* brand new charming installation page (by @fernandomatos)
|
||||
* using Bootstrap
|
||||
* new pages router: nikic/fast-route, allowing for better customisation
|
||||
* Plugin cronjobs: central control of the cronjobs
|
||||
* Guild Wars support (available as plugin)
|
||||
* support for login and create account only by email (configurable)
|
||||
* with no need for account name
|
||||
* Google ReCAPTCHA v3 support (available as plugin)
|
||||
* support for Account Number
|
||||
* suggest account number option
|
||||
* many new functions, hooks and configurables
|
||||
* better Exception Handler (Whoops - https://github.com/filp/whoops)
|
||||
* automated website tests (using Cypress)
|
||||
* csrf protection (https://github.com/slawkens/myaac/pull/235)
|
||||
* option to restrict Page view to specified group of users (Not-Logged in, logged-in players, tutors, gamemasters etc.)
|
||||
* phpdebug bar (http://phpdebugbar.com/). Activated if env == 'dev', can be also activated in production by enabling "enable_debugbar" in local config
|
||||
|
||||
### Changed
|
||||
* 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
|
||||
* 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
|
||||
* changes in required and optional PHP extensions
|
||||
* reworked Pages:
|
||||
* Bans
|
||||
* works now for TFS 1.x
|
||||
* Highscores
|
||||
* frags works for TFS 1.x
|
||||
* cached
|
||||
* Monsters
|
||||
* moved pages to Twig:
|
||||
* experience stages
|
||||
* update player_deaths entries on name change
|
||||
* change_password email to be more informal
|
||||
|
||||
### Fixed
|
||||
* hundreds of bug fixes, mostly patched from 0.8, so it makes no sense writing them again here
|
97
CHANGELOG.md
Normal file
97
CHANGELOG.md
Normal file
@@ -0,0 +1,97 @@
|
||||
# Changelog
|
||||
|
||||
## [1.0-RC -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.
|
||||
|
||||
### Added
|
||||
* reworked Admin Panel (@Leesneaks, @gpedro, @slawkens)
|
||||
* updated to Bootstrap v4
|
||||
* new Menu
|
||||
* new Dashboard: statistics, server status
|
||||
* new Admin Bar showed on top when admin logged in
|
||||
* new page: Server Data, to reload server data
|
||||
* Towns, NPCs & Items are stored in permanent cache
|
||||
* new pages: mass account & teleport tools
|
||||
* changelogs editor
|
||||
* revised Accounts & Players editors
|
||||
* option to add/modify admin menus with plugins
|
||||
* option to enable/disable plugins
|
||||
* better, updated TinyMCE editor (v6.x)
|
||||
* with option to upload images
|
||||
* 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.
|
||||
* config.php moved to Admin Panel -> Settings page
|
||||
* new console script: aac - using symfony/console
|
||||
* usage: `php aac` (will list all commands by default)
|
||||
* example: `php aac cache:clear`
|
||||
* example: `php aac plugin:install theme-example.zip`
|
||||
* replace POT Query Builder to Eloquent ORM. Not 100% yet - in some places there is still old $db approach used (@gpedro) (https://github.com/slawkens/myaac/pull/230)
|
||||
* brand new charming installation page (by @fernandomatos)
|
||||
* using Bootstrap
|
||||
* new pages router: nikic/fast-route, allowing for better customisation
|
||||
* Plugin cronjobs: central control of the cronjobs
|
||||
* Guild Wars support (available as plugin)
|
||||
* support for login and create account only by email (configurable)
|
||||
* with no need for account name
|
||||
* Google ReCAPTCHA v3 support (available as plugin)
|
||||
* automatically load towns names from .OTBM file
|
||||
* support for Account Number
|
||||
* suggest account number option
|
||||
* many new functions, hooks and configurables
|
||||
* better Exception Handler (Whoops - https://github.com/filp/whoops)
|
||||
* automated website tests (using Cypress)
|
||||
* csrf protection (https://github.com/slawkens/myaac/pull/235)
|
||||
* option to restrict Page view to specified group of users (Not-Logged in, logged-in players, tutors, gamemasters etc.)
|
||||
* phpdebug bar (http://phpdebugbar.com/). Activated if env == 'dev', can be also activated in production by enabling "enable_debugbar" in local config
|
||||
|
||||
### Changed
|
||||
* 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
|
||||
* 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
|
||||
* changes in required and optional PHP extensions
|
||||
* reworked Pages:
|
||||
* Bans
|
||||
* works now for TFS 1.x
|
||||
* Highscores
|
||||
* frags works for TFS 1.x
|
||||
* cached
|
||||
* Monsters
|
||||
* moved pages to Twig:
|
||||
* experience stages
|
||||
* update player_deaths entries on name change
|
||||
* change_password email to be more informal
|
||||
|
||||
### Fixed
|
||||
* hundrets of bug fixes, mostly patched from 0.8, so it makes no sense writing them again here
|
2
CREDITS
2
CREDITS
@@ -1,3 +1,3 @@
|
||||
* Gesior.pl (2007 - 2008)
|
||||
* Slawkens (2009 - 2025)
|
||||
* Slawkens (2009 - 2023)
|
||||
* Contributors listed in CONTRIBUTORS.txt
|
||||
|
@@ -11,10 +11,10 @@ Official website: https://my-aac.org
|
||||
[](https://github.com/slawkens/myaac/issues?q=is%3Aissue+is%3Aclosed)
|
||||
|
||||
| Version | Status | Branch | Requirements |
|
||||
|:--------|:-----------------------|:-------|:---------------|
|
||||
| **1.x** | **Active development** | master | **PHP >= 8.1** |
|
||||
|:--------|:-----------------------|:--------|:---------------|
|
||||
| **1.x** | **Active development** | develop | **PHP >= 8.1** |
|
||||
| 0.9.x | Not developed anymore | 0.9 | PHP >= 7.2.5 |
|
||||
| 0.8.x | Active support | 0.8 | PHP >= 7.2.5 |
|
||||
| 0.8.x | Active support | master | PHP >= 7.2.5 |
|
||||
| 0.7.x | End Of Life | 0.7 | PHP >= 5.3.3 |
|
||||
|
||||
### Requirements
|
||||
|
6
aac
6
aac
@@ -9,13 +9,14 @@ if(!IS_CLI) {
|
||||
}
|
||||
|
||||
require_once SYSTEM . 'functions.php';
|
||||
require_once SYSTEM . 'init.php';
|
||||
|
||||
define('SELF_NAME', basename(__FILE__));
|
||||
|
||||
use MyAAC\Plugins;
|
||||
use Symfony\Component\Console\Application;
|
||||
|
||||
$application = new Application('MyAAC', MYAAC_VERSION);
|
||||
$application = new Application();
|
||||
|
||||
$commandsGlob = glob(SYSTEM . 'src/Commands/*.php');
|
||||
foreach ($commandsGlob as $item) {
|
||||
@@ -33,4 +34,7 @@ foreach ($pluginCommands as $item) {
|
||||
$application->add(require $item);
|
||||
}
|
||||
|
||||
$application->setName('MyAAC');
|
||||
$application->setVersion(MYAAC_VERSION);
|
||||
|
||||
$application->run();
|
||||
|
@@ -7,7 +7,7 @@ $hooks->register('debugbar_admin_head_end', HOOK_ADMIN_HEAD_END, function ($para
|
||||
return;
|
||||
}
|
||||
|
||||
$debugBarRenderer = $debugBar->getJavascriptRenderer(BASE_URL . 'vendor/maximebf/debugbar/src/DebugBar/Resources/');
|
||||
$debugBarRenderer = $debugBar->getJavascriptRenderer();
|
||||
echo $debugBarRenderer->renderHead();
|
||||
});
|
||||
$hooks->register('debugbar_admin_body_end', HOOK_ADMIN_BODY_END, function ($params) {
|
||||
@@ -17,6 +17,6 @@ $hooks->register('debugbar_admin_body_end', HOOK_ADMIN_BODY_END, function ($para
|
||||
return;
|
||||
}
|
||||
|
||||
$debugBarRenderer = $debugBar->getJavascriptRenderer(BASE_URL . 'vendor/maximebf/debugbar/src/DebugBar/Resources/');
|
||||
$debugBarRenderer = $debugBar->getJavascriptRenderer();
|
||||
echo $debugBarRenderer->render();
|
||||
});
|
||||
|
@@ -23,7 +23,10 @@ $use_datatable = true;
|
||||
if (setting('core.account_country'))
|
||||
require SYSTEM . 'countries.conf.php';
|
||||
|
||||
$nameOrNumberColumn = getAccountIdentityColumn();
|
||||
$nameOrNumberColumn = 'name';
|
||||
if (USE_ACCOUNT_NUMBER) {
|
||||
$nameOrNumberColumn = 'number';
|
||||
}
|
||||
|
||||
$hasSecretColumn = $db->hasColumn('accounts', 'secret');
|
||||
$hasCoinsColumn = $db->hasColumn('accounts', 'coins');
|
||||
@@ -66,7 +69,7 @@ else if (isset($_REQUEST['search_email'])) {
|
||||
else if (isset($_REQUEST['search'])) {
|
||||
$search_account = $_REQUEST['search'];
|
||||
$min_size = 3;
|
||||
if (in_array($nameOrNumberColumn, ['id', 'number'])) {
|
||||
if ($nameOrNumberColumn == 'number') {
|
||||
$min_size = 1;
|
||||
}
|
||||
|
||||
@@ -245,7 +248,7 @@ else if (isset($_REQUEST['search'])) {
|
||||
<thead>
|
||||
<tr>
|
||||
<th>ID</th>
|
||||
<th><?= ($nameOrNumberColumn == 'name' ? 'Name' : 'Number'); ?></th>
|
||||
<th><?= ($nameOrNumberColumn == 'number' ? 'Number' : 'Name'); ?></th>
|
||||
<?php if($hasTypeColumn || $hasGroupColumn): ?>
|
||||
<th>E-Mail</th>
|
||||
<th>Position</th>
|
||||
|
@@ -10,7 +10,6 @@
|
||||
|
||||
use MyAAC\Cache\Cache;
|
||||
use MyAAC\Models\Menu;
|
||||
use MyAAC\Plugins;
|
||||
|
||||
defined('MYAAC') or die('Direct access not allowed!');
|
||||
$title = 'Menus';
|
||||
@@ -22,16 +21,14 @@ if (!hasFlag(FLAG_CONTENT_MENUS) && !superAdmin()) {
|
||||
return;
|
||||
}
|
||||
|
||||
$pluginThemes = Plugins::getThemes();
|
||||
|
||||
if (isset($_POST['template'])) {
|
||||
$template = $_POST['template'];
|
||||
|
||||
if (isset($_POST['save'])) {
|
||||
$post_menu = $_POST['menu'] ?? [];
|
||||
$post_menu_link = $_POST['menu_link'] ?? [];
|
||||
$post_menu_blank = $_POST['menu_blank'] ?? [];
|
||||
$post_menu_color = $_POST['menu_color'] ?? [];
|
||||
if (isset($_POST['menu'])) {
|
||||
$post_menu = $_POST['menu'];
|
||||
$post_menu_link = $_POST['menu_link'];
|
||||
$post_menu_blank = $_POST['menu_blank'];
|
||||
$post_menu_color = $_POST['menu_color'];
|
||||
if (count($post_menu) != count($post_menu_link)) {
|
||||
echo 'Menu count is not equal menu links. Something went wrong when sending form.';
|
||||
return;
|
||||
@@ -59,67 +56,54 @@ if (isset($_POST['template'])) {
|
||||
}
|
||||
}
|
||||
|
||||
onTemplateMenusChange();
|
||||
$cache = Cache::getInstance();
|
||||
if ($cache->enabled()) {
|
||||
$cache->delete('template_menus');
|
||||
}
|
||||
|
||||
success('Saved at ' . date('H:i'));
|
||||
}
|
||||
|
||||
$path = TEMPLATES . $template;
|
||||
|
||||
if (isset($pluginThemes[$template])) {
|
||||
$path = BASE . $pluginThemes[$template];
|
||||
}
|
||||
|
||||
$path .= '/config.php';
|
||||
|
||||
if (file_exists($path)) {
|
||||
require_once $path;
|
||||
$file = TEMPLATES . $template . '/config.php';
|
||||
if (file_exists($file)) {
|
||||
require_once $file;
|
||||
} else {
|
||||
echo 'Cannot find template config.php file.';
|
||||
return;
|
||||
}
|
||||
|
||||
if (isset($_GET['reset_colors'])) {
|
||||
if (isset($config['menu_default_color'])) {
|
||||
Menu::where('template', $template)->update(['color' => str_replace('#', '', $config['menu_default_color'])]);
|
||||
success('Colors has been reset.');
|
||||
}
|
||||
else {
|
||||
warning('There is no default color defined, cannot reset colors.');
|
||||
}
|
||||
}
|
||||
|
||||
if (!isset($config['menu_categories'])) {
|
||||
echo "No menu categories set in template config.php.<br/>This template doesn't support dynamic menus.";
|
||||
return;
|
||||
}
|
||||
|
||||
if (isset($_GET['reset_colors'])) {
|
||||
foreach ($config['menu_categories'] as $id => $options) {
|
||||
$color = $options['default_links_color'] ?? ($config['menu_default_links_color'] ?? ($config['menu_default_color'] ?? '#ffffff'));
|
||||
Menu::where('template', $template)->where('category', $id)->update(['color' => str_replace('#', '', $color)]);
|
||||
}
|
||||
|
||||
onTemplateMenusChange();
|
||||
success('Colors has been reset at ' . date('H:i'));
|
||||
}
|
||||
|
||||
if (isset($_GET['reset_menus'])) {
|
||||
$configMenus = config('menus');
|
||||
if (isset($configMenus)) {
|
||||
Plugins::installMenus($template, config('menus'), true);
|
||||
|
||||
onTemplateMenusChange();
|
||||
success('Menus has been reset at ' . date('H:i'));
|
||||
}
|
||||
else {
|
||||
error("This template don't support reinstalling menus.");
|
||||
}
|
||||
}
|
||||
|
||||
$title = 'Menus - ' . $template;
|
||||
|
||||
$canResetColors = isset($config['menu_default_color']) || isset($config['menu_default_links_color']);
|
||||
foreach ($config['menu_categories'] as $id => $options) {
|
||||
if (isset($options['default_links_color'])) {
|
||||
$canResetColors = true;
|
||||
}
|
||||
}
|
||||
|
||||
$twig->display('admin.menus.header.html.twig', [
|
||||
'template' => $template,
|
||||
'canResetColors' => $canResetColors
|
||||
]);
|
||||
?>
|
||||
<div align="center" class="text-center">
|
||||
<p class="note">You are editing: <?= $template ?><br/><br/>
|
||||
Hint: You can drag menu items.<br/>
|
||||
Hint: Add links to external sites using: <b>http://</b> or <b>https://</b> prefix.<br/>
|
||||
Not all templates support blank and colorful links.
|
||||
</p>
|
||||
<?php if (isset($config['menu_default_color'])) {?>
|
||||
<form method="post" action="?p=menus&reset_colors" onsubmit="return confirm('Do you really want to reset colors?');">
|
||||
<?php csrf(); ?>
|
||||
<input type="hidden" name="template" value="<?php echo $template ?>"/>
|
||||
<button type="submit" class="btn btn-danger">Reset Colors to default</button>
|
||||
</form>
|
||||
<br/>
|
||||
<?php } ?>
|
||||
</div>
|
||||
<?php
|
||||
$menus = Menu::query()
|
||||
->select('name', 'link', 'blank', 'color', 'category', 'ordering')
|
||||
@@ -135,7 +119,7 @@ if (isset($_POST['template'])) {
|
||||
<form method="post" id="menus-form" action="?p=menus">
|
||||
<?php csrf(); ?>
|
||||
<input type="hidden" name="template" value="<?php echo $template ?>"/>
|
||||
<button type="submit" name="save" class="btn btn-info">Save</button><br/><br/>
|
||||
<button type="submit" class="btn btn-info">Save</button><br/><br/>
|
||||
<div class="row">
|
||||
<?php foreach ($config['menu_categories'] as $id => $cat): ?>
|
||||
<div class="col-md-12 col-lg-6">
|
||||
@@ -149,13 +133,12 @@ if (isset($_POST['template'])) {
|
||||
if (isset($menus[$id])) {
|
||||
$i = 0;
|
||||
foreach ($menus[$id] as $menu):
|
||||
$color = (empty($menu['color']) ? ($cat['default_links_color'] ?? ($config['menu_default_links_color'] ?? ($config['menu_default_color'] ?? '#ffffff'))) : '#' . $menu['color']);
|
||||
?>
|
||||
<li class="ui-state-default" id="list-<?php echo $id ?>-<?php echo $i ?>"><label>Name:</label> <input type="text" name="menu[<?php echo $id ?>][]" value="<?php echo escapeHtml($menu['name']); ?>"/>
|
||||
<label>Link:</label> <input type="text" name="menu_link[<?php echo $id ?>][]" value="<?php echo $menu['link'] ?>"/>
|
||||
<input type="hidden" name="menu_blank[<?php echo $id ?>][]" value="0"/>
|
||||
<label><input class="blank-checkbox" type="checkbox" <?php echo($menu['blank'] == 1 ? 'checked' : '') ?>/><span title="Open in New Window">New Window</span></label>
|
||||
<input class="color-picker" type="text" name="menu_color[<?php echo $id ?>][]" value="<?php echo $color; ?>"/>
|
||||
<input class="color-picker" type="text" name="menu_color[<?php echo $id ?>][]" value="<?php echo (empty($menu['color']) ? ($config['menu_default_color'] ?? '#ffffff') : $menu['color']); ?>"/>
|
||||
<a class="remove-button" id="remove-button-<?php echo $id ?>-<?php echo $i ?>"><i class="fas fa-trash"></a></i></li>
|
||||
<?php $i++; $last_id[$id] = $i;
|
||||
endforeach;
|
||||
@@ -168,7 +151,7 @@ if (isset($_POST['template'])) {
|
||||
</div>
|
||||
<div class="row pb-2">
|
||||
<div class="col-md-12">
|
||||
<button type="submit" name="save" class="btn btn-info">Save</button>
|
||||
<button type="submit" class="btn btn-info">Save</button>
|
||||
<?php
|
||||
echo '<button type="button" class="btn btn-danger float-right" value="Cancel" onclick="window.location = \'' . ADMIN_URL . '?p=menus\';"><i class="fas fa-cancel"></i> Cancel</button>';
|
||||
?>
|
||||
@@ -179,19 +162,15 @@ if (isset($_POST['template'])) {
|
||||
$twig->display('admin.menus.js.html.twig', array(
|
||||
'menus' => $menus,
|
||||
'last_id' => $last_id,
|
||||
'menu_default_color' => $config['menu_default_color'] ?? '#ffffff'
|
||||
));
|
||||
?>
|
||||
<?php
|
||||
} else {
|
||||
$templates = Menu::select('template')->distinct()->get()->toArray();
|
||||
foreach ($templates as $key => $value) {
|
||||
$path = TEMPLATES . $value['template'];
|
||||
|
||||
if (isset($pluginThemes[$value['template']])) {
|
||||
$path = BASE . $pluginThemes[$value['template']];
|
||||
}
|
||||
|
||||
if (!file_exists($path . '/config.php')) {
|
||||
$file = TEMPLATES . $value['template'] . '/config.php';
|
||||
if (!file_exists($file)) {
|
||||
unset($templates[$key]);
|
||||
}
|
||||
}
|
||||
@@ -200,11 +179,3 @@ if (isset($_POST['template'])) {
|
||||
'templates' => $templates
|
||||
));
|
||||
}
|
||||
|
||||
function onTemplateMenusChange(): void
|
||||
{
|
||||
$cache = Cache::getInstance();
|
||||
if ($cache->enabled()) {
|
||||
$cache->delete('template_menus');
|
||||
}
|
||||
}
|
||||
|
@@ -7,7 +7,7 @@ defined('MYAAC') or die('Direct access not allowed!');
|
||||
$accounts = 0;
|
||||
|
||||
if ($db->hasColumn('accounts', 'created')) {
|
||||
$accounts = Account::orderByDesc('created')->limit(10)->get(['id', 'created'])->toArray();
|
||||
$accounts = Account::orderByDesc('created')->limit(10)->get(['created', (USE_ACCOUNT_NAME ? 'name' : 'id')])->toArray();
|
||||
}
|
||||
|
||||
$twig->display('created.html.twig', array(
|
||||
|
@@ -19,7 +19,7 @@
|
||||
{% set i = i + 1 %}
|
||||
<tr>
|
||||
<th>{{ i }}</th>
|
||||
<td><a href="?p=accounts&id={{ result.id }}">{{ result.id }}</a></td>
|
||||
<td><a href="?p=accounts&search_name={{ result.name }}">{{ result.name }}</a></td>
|
||||
<td>{{ result.created|date("M d Y, H:i:s") }}</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
|
@@ -26,7 +26,7 @@ if (!hasFlag(FLAG_CONTENT_PAGES) && !superAdmin()) {
|
||||
|
||||
header('X-XSS-Protection:0');
|
||||
|
||||
// some constants, used mainly by database (cannot be modified without schema changes)
|
||||
// some constants, used mainly by database (cannot by modified without schema changes)
|
||||
const NEWS_TITLE_LIMIT = 100;
|
||||
const NEWS_BODY_LIMIT = 65535; // maximum news body length
|
||||
const ARTICLE_TEXT_LIMIT = 300;
|
||||
@@ -136,18 +136,9 @@ if($action == 'edit' || $action == 'new') {
|
||||
|
||||
$query = $db->query('SELECT * FROM ' . $db->tableName(TABLE_PREFIX . 'news'));
|
||||
$newses = array();
|
||||
|
||||
$cachePlayers = [];
|
||||
foreach ($query as $_news) {
|
||||
$playerId = $_news['player_id'];
|
||||
if (isset($cachePlayers[$playerId])) {
|
||||
$_player = $cachePlayers[$playerId];
|
||||
}
|
||||
else {
|
||||
$_player = new OTS_Player();
|
||||
$_player->load($playerId);
|
||||
$cachePlayers[$playerId] = $_player;
|
||||
}
|
||||
$_player->load($_news['player_id']);
|
||||
|
||||
$newses[$_news['type']][] = array(
|
||||
'id' => $_news['id'],
|
||||
@@ -156,7 +147,7 @@ foreach ($query as $_news) {
|
||||
'title' => $_news['title'],
|
||||
'date' => $_news['date'],
|
||||
'player_name' => $_player->isLoaded() ? $_player->getName() : '',
|
||||
'player_link' => $_player->isLoaded() ? getPlayerLink($_player, false) : '',
|
||||
'player_link' => $_player->isLoaded() ? getPlayerLink($_player->getName(), false) : '',
|
||||
);
|
||||
}
|
||||
|
||||
|
@@ -21,13 +21,7 @@ if (!getBoolean(setting('core.admin_plugins_manage_enable'))) {
|
||||
warning('Plugin installation and management is disabled in Settings.<br/>If you wish to enable, go to Settings and enable <strong>Enable Plugins Manage</strong>.');
|
||||
}
|
||||
else {
|
||||
$pluginUploadEnabled = true;
|
||||
if(!\class_exists('\ZipArchive')) {
|
||||
error('Please install PHP zip extension. Plugins upload disabled until then.');
|
||||
$pluginUploadEnabled = false;
|
||||
}
|
||||
|
||||
$twig->display('admin.plugins.form.html.twig', ['pluginUploadEnabled' => $pluginUploadEnabled]);
|
||||
$twig->display('admin.plugins.form.html.twig');
|
||||
|
||||
if (isset($_POST['uninstall'])) {
|
||||
$uninstall = $_POST['uninstall'];
|
||||
|
@@ -26,8 +26,8 @@
|
||||
if (version_compare(phpversion(), '8.1', '<')) die('PHP version 8.1 or higher is required.');
|
||||
|
||||
const MYAAC = true;
|
||||
const MYAAC_VERSION = '1.3.3';
|
||||
const DATABASE_VERSION = 43;
|
||||
const MYAAC_VERSION = '1.0-RC';
|
||||
const DATABASE_VERSION = 40;
|
||||
const TABLE_PREFIX = 'myaac_';
|
||||
define('START_TIME', microtime(true));
|
||||
define('MYAAC_OS', stripos(PHP_OS, 'WIN') === 0 ? 'WINDOWS' : (strtoupper(PHP_OS) === 'DARWIN' ? 'MAC' : 'LINUX'));
|
||||
|
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"require": {
|
||||
"php": "^8.1",
|
||||
"php": "^8.0",
|
||||
"ext-pdo": "*",
|
||||
"ext-pdo_mysql": "*",
|
||||
"ext-json": "*",
|
||||
@@ -8,7 +8,7 @@
|
||||
"ext-dom": "*",
|
||||
"phpmailer/phpmailer": "^6.1",
|
||||
"composer/semver": "^3.2",
|
||||
"twig/twig": "^3.11",
|
||||
"twig/twig": "^2.0",
|
||||
"erusev/parsedown": "^1.7",
|
||||
"nikic/fast-route": "^1.3",
|
||||
"matomo/device-detector": "^6.0",
|
||||
@@ -18,7 +18,7 @@
|
||||
"symfony/string": "^6.4",
|
||||
"symfony/var-dumper": "^6.4",
|
||||
"filp/whoops": "^2.15",
|
||||
"maximebf/debugbar": "1.*"
|
||||
"maximebf/debugbar": "dev-master"
|
||||
},
|
||||
"require-dev": {
|
||||
"phpstan/phpstan": "^1.10"
|
||||
|
612
composer.lock
generated
612
composer.lock
generated
File diff suppressed because it is too large
Load Diff
@@ -116,9 +116,9 @@ describe('Check Public Pages', () => {
|
||||
})
|
||||
|
||||
// library
|
||||
it('Go to monsters page', () => {
|
||||
it('Go to creatures page', () => {
|
||||
cy.visit({
|
||||
url: Cypress.env('URL') + '/monsters',
|
||||
url: Cypress.env('URL') + '/creatures',
|
||||
method: 'GET',
|
||||
})
|
||||
})
|
||||
|
@@ -4,7 +4,7 @@ const YOU_ARE_NOT_LOGGEDIN = 'You are not logged in.';
|
||||
describe('Check Protected Pages', () => {
|
||||
|
||||
// character actions
|
||||
it('Go to account character creation page', () => {
|
||||
it('Go to accouht character creation page', () => {
|
||||
cy.visit({
|
||||
url: Cypress.env('URL') + '/account/character/create',
|
||||
method: 'GET',
|
||||
@@ -12,7 +12,7 @@ describe('Check Protected Pages', () => {
|
||||
cy.contains(REQUIRED_LOGIN_MESSAGE)
|
||||
})
|
||||
|
||||
it('Go to account character deletion page', () => {
|
||||
it('Go to accouht character deletion page', () => {
|
||||
cy.visit({
|
||||
url: Cypress.env('URL') + '/account/character/delete',
|
||||
method: 'GET',
|
||||
@@ -21,7 +21,7 @@ describe('Check Protected Pages', () => {
|
||||
})
|
||||
|
||||
// account actions
|
||||
it('Go to account email change page', () => {
|
||||
it('Go to accouht email change page', () => {
|
||||
cy.visit({
|
||||
url: Cypress.env('URL') + '/account/email',
|
||||
method: 'GET',
|
||||
@@ -29,7 +29,7 @@ describe('Check Protected Pages', () => {
|
||||
cy.contains(REQUIRED_LOGIN_MESSAGE)
|
||||
})
|
||||
|
||||
it('Go to account password change page', () => {
|
||||
it('Go to accouht password change page', () => {
|
||||
cy.visit({
|
||||
url: Cypress.env('URL') + '/account/password',
|
||||
method: 'GET',
|
||||
@@ -37,7 +37,7 @@ describe('Check Protected Pages', () => {
|
||||
cy.contains(REQUIRED_LOGIN_MESSAGE)
|
||||
})
|
||||
|
||||
it('Go to account info change page', () => {
|
||||
it('Go to accouht info change page', () => {
|
||||
cy.visit({
|
||||
url: Cypress.env('URL') + '/account/info',
|
||||
method: 'GET',
|
||||
@@ -45,7 +45,7 @@ describe('Check Protected Pages', () => {
|
||||
cy.contains(REQUIRED_LOGIN_MESSAGE)
|
||||
})
|
||||
|
||||
it('Go to account logout change page', () => {
|
||||
it('Go to accouht logout change page', () => {
|
||||
cy.visit({
|
||||
url: Cypress.env('URL') + '/account/logout',
|
||||
method: 'GET',
|
||||
|
12
index.php
12
index.php
@@ -31,11 +31,11 @@ require_once 'common.php';
|
||||
require_once SYSTEM . 'functions.php';
|
||||
|
||||
$uri = $_SERVER['REQUEST_URI'];
|
||||
if(str_contains($uri, 'index.php')) {
|
||||
if(false !== strpos($uri, 'index.php')) {
|
||||
$uri = str_replace_first('/index.php', '', $uri);
|
||||
}
|
||||
|
||||
if(str_starts_with($uri, '/')) {
|
||||
if(0 === strpos($uri, '/')) {
|
||||
$uri = str_replace_first('/', '', $uri);
|
||||
}
|
||||
|
||||
@@ -76,8 +76,6 @@ require_once SYSTEM . 'status.php';
|
||||
$twig->addGlobal('config', $config);
|
||||
$twig->addGlobal('status', $status);
|
||||
|
||||
$hooks->trigger(HOOK_STARTUP);
|
||||
|
||||
// backward support for gesior
|
||||
if(setting('core.backward_support')) {
|
||||
define('INITIALIZED', true);
|
||||
@@ -119,6 +117,8 @@ if(setting('core.backward_support')) {
|
||||
|
||||
require_once SYSTEM . 'router.php';
|
||||
|
||||
$hooks->trigger(HOOK_STARTUP);
|
||||
|
||||
// anonymous usage statistics
|
||||
// sent only when user agrees
|
||||
if(setting('core.anonymous_usage_statistics')) {
|
||||
@@ -134,7 +134,7 @@ if(setting('core.anonymous_usage_statistics')) {
|
||||
if(fetchDatabaseConfig('last_usage_report', $value)) {
|
||||
$should_report = time() > (int)$value + $report_time;
|
||||
if($cache->enabled()) {
|
||||
$cache->set('last_usage_report', $value, 60 * 60);
|
||||
$cache->set('last_usage_report', $value);
|
||||
}
|
||||
}
|
||||
else {
|
||||
@@ -148,7 +148,7 @@ if(setting('core.anonymous_usage_statistics')) {
|
||||
|
||||
updateDatabaseConfig('last_usage_report', time());
|
||||
if($cache->enabled()) {
|
||||
$cache->set('last_usage_report', time(), 60 * 60);
|
||||
$cache->set('last_usage_report', time());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -1,4 +1,4 @@
|
||||
SET @myaac_database_version = 43;
|
||||
SET @myaac_database_version = 40;
|
||||
|
||||
CREATE TABLE `myaac_account_actions`
|
||||
(
|
||||
@@ -8,7 +8,7 @@ CREATE TABLE `myaac_account_actions`
|
||||
`date` INT(11) NOT NULL DEFAULT 0,
|
||||
`action` VARCHAR(255) NOT NULL DEFAULT '',
|
||||
KEY (`account_id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8mb4;
|
||||
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8;
|
||||
|
||||
CREATE TABLE `myaac_admin_menu`
|
||||
(
|
||||
@@ -19,7 +19,22 @@ CREATE TABLE `myaac_admin_menu`
|
||||
`flags` INT(11) NOT NULL DEFAULT 0,
|
||||
`enabled` INT(1) NOT NULL DEFAULT 1,
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8mb4;
|
||||
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8;
|
||||
|
||||
CREATE TABLE `myaac_bugtracker`
|
||||
(
|
||||
`account` VARCHAR(255) NOT NULL,
|
||||
`type` INT(11) NOT NULL DEFAULT 0,
|
||||
`status` INT(11) NOT NULL DEFAULT 0,
|
||||
`text` text NOT NULL,
|
||||
`id` INT(11) NOT NULL DEFAULT 0,
|
||||
`subject` VARCHAR(255) NOT NULL DEFAULT '',
|
||||
`reply` INT(11) NOT NULL DEFAULT 0,
|
||||
`who` INT(11) NOT NULL DEFAULT 0,
|
||||
`uid` INT(11) NOT NULL AUTO_INCREMENT,
|
||||
`tag` INT(11) NOT NULL DEFAULT 0,
|
||||
PRIMARY KEY (`uid`)
|
||||
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8;
|
||||
|
||||
CREATE TABLE `myaac_changelog`
|
||||
(
|
||||
@@ -31,7 +46,7 @@ CREATE TABLE `myaac_changelog`
|
||||
`player_id` INT(11) NOT NULL DEFAULT 0,
|
||||
`hide` TINYINT(1) NOT NULL DEFAULT 0,
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8mb4;
|
||||
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8;
|
||||
|
||||
INSERT INTO `myaac_changelog` (`id`, `type`, `where`, `date`, `body`, `hide`) VALUES (1, 3, 2, UNIX_TIMESTAMP(), 'MyAAC installed. (:', 0);
|
||||
|
||||
@@ -42,7 +57,7 @@ CREATE TABLE `myaac_config`
|
||||
`value` VARCHAR(1000) NOT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE (`name`)
|
||||
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8mb4;
|
||||
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8;
|
||||
|
||||
INSERT INTO `myaac_config` (`name`, `value`) VALUES ('database_version', @myaac_database_version);
|
||||
|
||||
@@ -54,7 +69,7 @@ CREATE TABLE `myaac_faq`
|
||||
`ordering` INT(11) NOT NULL DEFAULT 0,
|
||||
`hide` TINYINT(1) NOT NULL DEFAULT 0,
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8mb4;
|
||||
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8;
|
||||
|
||||
CREATE TABLE `myaac_forum_boards`
|
||||
(
|
||||
@@ -67,7 +82,7 @@ CREATE TABLE `myaac_forum_boards`
|
||||
`closed` TINYINT(1) NOT NULL DEFAULT 0,
|
||||
`hide` TINYINT(1) NOT NULL DEFAULT 0,
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8mb4;
|
||||
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8;
|
||||
INSERT INTO `myaac_forum_boards` (`id`, `name`, `description`, `ordering`, `closed`) VALUES (NULL, 'News', 'News commenting', 0, 1);
|
||||
INSERT INTO `myaac_forum_boards` (`id`, `name`, `description`, `ordering`) VALUES (NULL, 'Trade', 'Trade offers.', 1);
|
||||
INSERT INTO `myaac_forum_boards` (`id`, `name`, `description`, `ordering`) VALUES (NULL, 'Quests', 'Quest making.', 2);
|
||||
@@ -91,12 +106,12 @@ CREATE TABLE `myaac_forum`
|
||||
`post_date` int(20) NOT NULL default '0',
|
||||
`last_edit_aid` int(20) NOT NULL default '0',
|
||||
`edit_date` int(20) NOT NULL default '0',
|
||||
`post_ip` varchar(45) NOT NULL default '0.0.0.0',
|
||||
`post_ip` varchar(32) NOT NULL default '0.0.0.0',
|
||||
`sticked` tinyint(1) NOT NULL DEFAULT '0',
|
||||
`closed` tinyint(1) NOT NULL DEFAULT '0',
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `section` (`section`)
|
||||
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8mb4;
|
||||
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8;
|
||||
|
||||
CREATE TABLE `myaac_menu`
|
||||
(
|
||||
@@ -110,7 +125,7 @@ CREATE TABLE `myaac_menu`
|
||||
`ordering` INT(11) NOT NULL DEFAULT 0,
|
||||
`enabled` INT(1) NOT NULL DEFAULT 1,
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8mb4;
|
||||
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8;
|
||||
|
||||
CREATE TABLE `myaac_monsters` (
|
||||
`id` int(11) NOT NULL AUTO_INCREMENT,
|
||||
@@ -143,7 +158,7 @@ CREATE TABLE `myaac_monsters` (
|
||||
`loot` text NOT NULL,
|
||||
`summons` TEXT NOT NULL,
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8mb4;
|
||||
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8;
|
||||
|
||||
CREATE TABLE `myaac_news`
|
||||
(
|
||||
@@ -161,7 +176,7 @@ CREATE TABLE `myaac_news`
|
||||
`article_image` VARCHAR(100) NOT NULL DEFAULT '',
|
||||
`hide` TINYINT(1) NOT NULL DEFAULT 0,
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8mb4;
|
||||
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8;
|
||||
|
||||
CREATE TABLE `myaac_news_categories`
|
||||
(
|
||||
@@ -171,7 +186,7 @@ CREATE TABLE `myaac_news_categories`
|
||||
`icon_id` INT(2) NOT NULL DEFAULT 0,
|
||||
`hide` TINYINT(1) NOT NULL DEFAULT 0,
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8mb4;
|
||||
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8;
|
||||
|
||||
INSERT INTO `myaac_news_categories` (`id`, `icon_id`) VALUES (NULL, 0);
|
||||
INSERT INTO `myaac_news_categories` (`id`, `icon_id`) VALUES (NULL, 1);
|
||||
@@ -187,7 +202,7 @@ CREATE TABLE `myaac_notepad`
|
||||
`content` TEXT NOT NULL,
|
||||
/*`public` TINYINT(1) NOT NULL DEFAULT 0*/
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8mb4;
|
||||
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8;
|
||||
|
||||
CREATE TABLE `myaac_pages`
|
||||
(
|
||||
@@ -203,7 +218,7 @@ CREATE TABLE `myaac_pages`
|
||||
`hide` TINYINT(1) NOT NULL DEFAULT 0,
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE (`name`)
|
||||
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8mb4;
|
||||
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8;
|
||||
|
||||
CREATE TABLE `myaac_gallery`
|
||||
(
|
||||
@@ -215,7 +230,7 @@ CREATE TABLE `myaac_gallery`
|
||||
`ordering` INT(11) NOT NULL DEFAULT 0,
|
||||
`hide` TINYINT(1) NOT NULL DEFAULT 0,
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8mb4;
|
||||
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8;
|
||||
|
||||
INSERT INTO `myaac_gallery` (`id`, `ordering`, `comment`, `image`, `thumb`, `author`) VALUES (NULL, 1, 'Demon', 'images/gallery/demon.jpg', 'images/gallery/demon_thumb.gif', 'MyAAC');
|
||||
|
||||
@@ -227,7 +242,7 @@ CREATE TABLE `myaac_settings`
|
||||
`value` TEXT NOT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `key` (`key`)
|
||||
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8mb4;
|
||||
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8;
|
||||
|
||||
CREATE TABLE `myaac_spells`
|
||||
(
|
||||
@@ -250,7 +265,7 @@ CREATE TABLE `myaac_spells`
|
||||
`hide` TINYINT(1) NOT NULL DEFAULT 0,
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE (`name`)
|
||||
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8mb4;
|
||||
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8;
|
||||
|
||||
CREATE TABLE `myaac_visitors`
|
||||
(
|
||||
@@ -259,7 +274,7 @@ CREATE TABLE `myaac_visitors`
|
||||
`page` VARCHAR(2048) NOT NULL,
|
||||
`user_agent` VARCHAR(255) NOT NULL DEFAULT '',
|
||||
UNIQUE (`ip`)
|
||||
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8mb4;
|
||||
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8;
|
||||
|
||||
CREATE TABLE `myaac_weapons`
|
||||
(
|
||||
@@ -268,4 +283,4 @@ CREATE TABLE `myaac_weapons`
|
||||
`maglevel` INT(11) NOT NULL DEFAULT 0,
|
||||
`vocations` VARCHAR(100) NOT NULL DEFAULT '',
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8mb4;
|
||||
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8;
|
||||
|
@@ -125,18 +125,7 @@ else if($step == 'finish') {
|
||||
}
|
||||
|
||||
// account check
|
||||
if(isset($_SESSION['var_account_id'])) {
|
||||
if(empty($_SESSION['var_account_id'])) {
|
||||
$errors[] = $locale['step_admin_account_id_error_empty'];
|
||||
}
|
||||
else if(!Validator::accountId($_SESSION['var_account_id'])) {
|
||||
$errors[] = $locale['step_admin_account_id_error_format'];
|
||||
}
|
||||
else if($_SESSION['var_account_id'] == $password) {
|
||||
$errors[] = $locale['step_admin_account_id_error_same'];
|
||||
}
|
||||
}
|
||||
else if(isset($_SESSION['var_account'])) {
|
||||
if(isset($_SESSION['var_account'])) {
|
||||
if(empty($_SESSION['var_account'])) {
|
||||
$errors[] = $locale['step_admin_account_error_empty'];
|
||||
}
|
||||
@@ -147,6 +136,17 @@ else if($step == 'finish') {
|
||||
$errors[] = $locale['step_admin_account_error_same'];
|
||||
}
|
||||
}
|
||||
else if(isset($_SESSION['var_account_id'])) {
|
||||
if(empty($_SESSION['var_account_id'])) {
|
||||
$errors[] = $locale['step_admin_account_id_error_empty'];
|
||||
}
|
||||
else if(!Validator::accountId($_SESSION['var_account_id'])) {
|
||||
$errors[] = $locale['step_admin_account_id_error_format'];
|
||||
}
|
||||
else if($_SESSION['var_account_id'] == $password) {
|
||||
$errors[] = $locale['step_admin_account_id_error_same'];
|
||||
}
|
||||
}
|
||||
|
||||
// password check
|
||||
if(empty($password)) {
|
||||
@@ -183,14 +183,14 @@ clearstatcache();
|
||||
if(is_writable(CACHE) && (MYAAC_OS != 'WINDOWS' || win_is_writable(CACHE))) {
|
||||
if(!file_exists(BASE . 'install/ip.txt')) {
|
||||
$content = warning('AAC installation is disabled. To enable it make file <b>ip.txt</b> in install/ directory and put there your IP.<br/>
|
||||
Your IP is:<br /><b>' . get_browser_real_ip() . '</b>', true);
|
||||
Your IP is:<br /><b>' . $_SERVER['REMOTE_ADDR'] . '</b>', true);
|
||||
}
|
||||
else {
|
||||
$file_content = trim(file_get_contents(BASE . 'install/ip.txt'));
|
||||
$allow = false;
|
||||
$listIP = preg_split('/\s+/', $file_content);
|
||||
foreach($listIP as $ip) {
|
||||
if(get_browser_real_ip() == $ip) {
|
||||
if($_SERVER['REMOTE_ADDR'] == $ip) {
|
||||
$allow = true;
|
||||
}
|
||||
}
|
||||
@@ -199,7 +199,7 @@ if(is_writable(CACHE) && (MYAAC_OS != 'WINDOWS' || win_is_writable(CACHE))) {
|
||||
{
|
||||
$content = warning('In file <b>install/ip.txt</b> must be your IP!<br/>
|
||||
In file is:<br /><b>' . nl2br($file_content) . '</b><br/>
|
||||
Your IP is:<br /><b>' . get_browser_real_ip() . '</b>', true);
|
||||
Your IP is:<br /><b>' . $_SERVER['REMOTE_ADDR'] . '</b>', true);
|
||||
}
|
||||
else {
|
||||
ob_start();
|
||||
|
@@ -40,7 +40,6 @@ if(!$error) {
|
||||
$configToSave['gzip_output'] = false;
|
||||
$configToSave['cache_engine'] = 'auto';
|
||||
$configToSave['cache_prefix'] = 'myaac_' . generateRandomString(8, true, false, true);
|
||||
$configToSave['database_auto_migrate'] = true;
|
||||
|
||||
if(!$error) {
|
||||
$content = '';
|
||||
|
@@ -1,4 +1,3 @@
|
||||
<?php defined('MYAAC') or die('Direct access not allowed!'); ?>
|
||||
<!DOCTYPE html>
|
||||
<html dir="<?php echo $locale['direction']; ?>" lang="<?php echo $locale['lang']; ?>" xml:lang="<?php echo $locale['lang']; ?>">
|
||||
<head>
|
||||
|
@@ -156,14 +156,9 @@ if ($db->hasTable('guilds')) {
|
||||
}
|
||||
|
||||
if (!$db->hasColumn('guilds', 'description')) {
|
||||
if (query("ALTER TABLE `guilds` ADD `description` VARCHAR(5000) NOT NULL DEFAULT '';"))
|
||||
if (query("ALTER TABLE `guilds` ADD `description` TEXT NOT NULL;"))
|
||||
success($locale['step_database_adding_field'] . ' guilds.description...');
|
||||
}
|
||||
else {
|
||||
if (query("ALTER TABLE `guilds` MODIFY `description` VARCHAR(5000) NOT NULL DEFAULT '';")) {
|
||||
success($locale['step_database_modifying_field'] . ' guilds.description...');
|
||||
}
|
||||
}
|
||||
|
||||
if ($db->hasColumn('guilds', 'logo_gfx_name')) {
|
||||
if (query("ALTER TABLE `guilds` CHANGE `logo_gfx_name` `logo_name` VARCHAR( 255 ) NOT NULL DEFAULT 'default.gif';")) {
|
||||
@@ -202,14 +197,9 @@ if ($db->hasTable('players')) {
|
||||
}
|
||||
|
||||
if (!$db->hasColumn('players', 'comment')) {
|
||||
if (query("ALTER TABLE `players` ADD `comment` VARCHAR(5000) NOT NULL DEFAULT '';"))
|
||||
if (query("ALTER TABLE `players` ADD `comment` TEXT NOT NULL;"))
|
||||
success($locale['step_database_adding_field'] . ' players.comment...');
|
||||
}
|
||||
else {
|
||||
if (query("ALTER TABLE `players` MODIFY `comment` VARCHAR(5000) NOT NULL DEFAULT '';")) {
|
||||
success($locale['step_database_modifying_field'] . ' players.comment...');
|
||||
}
|
||||
}
|
||||
|
||||
if ($db->hasColumn('players', 'rank_id')) {
|
||||
if (query("ALTER TABLE players MODIFY `rank_id` INT(11) NOT NULL DEFAULT 0;"))
|
||||
|
@@ -62,21 +62,16 @@ DataLoader::load();
|
||||
|
||||
// update config.highscores_ids_hidden
|
||||
require_once SYSTEM . 'migrations/20.php';
|
||||
$up();
|
||||
|
||||
// add z_polls tables
|
||||
require_once SYSTEM . 'migrations/22.php';
|
||||
$up();
|
||||
|
||||
// add myaac_pages pages
|
||||
require_once SYSTEM . 'migrations/27.php';
|
||||
$up();
|
||||
require_once SYSTEM . 'migrations/30.php';
|
||||
$up();
|
||||
|
||||
// new monster columns
|
||||
require_once SYSTEM . 'migrations/31.php';
|
||||
$up();
|
||||
|
||||
if(ModelsFAQ::count() == 0) {
|
||||
ModelsFAQ::create([
|
||||
|
@@ -1,6 +1,6 @@
|
||||
server {
|
||||
listen 80;
|
||||
root /var/www/html;
|
||||
root /home/otserv/www/public;
|
||||
index index.php;
|
||||
server_name your-domain.com;
|
||||
|
||||
@@ -12,6 +12,10 @@ server {
|
||||
deny all;
|
||||
}
|
||||
|
||||
location /vendor {
|
||||
deny all;
|
||||
}
|
||||
|
||||
# block .htaccess, CHANGELOG.md, composer.json etc.
|
||||
# this is to prevent finding software versions
|
||||
location ~\.(ht|md|json|dist)$ {
|
||||
@@ -24,7 +28,7 @@ server {
|
||||
}
|
||||
|
||||
location / {
|
||||
try_files $uri $uri/ /index.php?$query_string;
|
||||
try_files $uri $uri/ /index.php?$query_string;;
|
||||
}
|
||||
|
||||
location ~ \.php$ {
|
||||
|
905
package-lock.json
generated
905
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@@ -4,7 +4,7 @@
|
||||
"postinstall": "node ./npm-post-install.js"
|
||||
},
|
||||
"devDependencies": {
|
||||
"cypress": "^13.17.0"
|
||||
"cypress": "^12.12.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"@tinymce/tinymce-jquery": "^2.1.0",
|
||||
@@ -12,6 +12,6 @@
|
||||
"fs-extra": "^11.2.0",
|
||||
"jquery": "^3.7.1",
|
||||
"jquery-ui": "^1.13.2",
|
||||
"tinymce": "^7.2.0"
|
||||
"tinymce": "^6.8.3"
|
||||
}
|
||||
}
|
||||
|
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "create-account-hint",
|
||||
"description": "This plugin display text 'To play on Forgotten you need an account. All you have to do to create your new account is to enter an account name, password, country and your email address. Also you have to agree to the terms presented below. If you have done so, your account name will be shown on the following page and your account password will be sent to your email address along with further instructions. If you do not receive the email with your password, please check your spam filter.' on the create account page.",
|
||||
"description": "This plugin display text 'To play on Forgotten you need an account. All you have to do to create your new account is to enter an account name, password, country and your email address. Also you have to agree to the terms presented below. If you have done so, your account name will be shown on the following page and your account password will be sent to your email address along with further instructions. If you do not receive the email with your password, please check your spam filter.' on the create account page. <strong>Be careful when uninstalling this!</strong>",
|
||||
"version": "1.0",
|
||||
"author": "slawkens",
|
||||
"contact": "slawkens@gmail.com",
|
||||
|
@@ -9,4 +9,7 @@
|
||||
*/
|
||||
defined('MYAAC') or die('Direct access not allowed!');
|
||||
|
||||
$twig->display('account-create-hint/hint.html.twig');
|
||||
global $twig_loader;
|
||||
$twig_loader->prependPath(BASE . 'plugins/account-create-hint');
|
||||
|
||||
$twig->display('hint.html.twig');
|
||||
|
@@ -22,7 +22,7 @@ if [ $1 = "prepare" ]; then
|
||||
mkdir -p tmp
|
||||
|
||||
# get myaac from git archive
|
||||
git archive --format zip --output tmp/myaac.zip main
|
||||
git archive --format zip --output tmp/myaac.zip develop
|
||||
|
||||
cd tmp/ || exit
|
||||
|
||||
|
@@ -36,5 +36,3 @@ class Guild extends OTS_Guild {
|
||||
}
|
||||
class GuildRank extends OTS_GuildRank {}
|
||||
class House extends OTS_House {}
|
||||
|
||||
class Cache extends \MyAAC\Cache\Cache {}
|
||||
|
@@ -106,7 +106,6 @@ try {
|
||||
'persistent' => @$config['database_persistent']
|
||||
));
|
||||
|
||||
global $db;
|
||||
$db = POT::getInstance()->getDBHandle();
|
||||
$capsule = new Capsule;
|
||||
$capsule->addConnection([
|
||||
|
@@ -9,16 +9,16 @@
|
||||
*/
|
||||
|
||||
use MyAAC\Exceptions\SensitiveException;
|
||||
use Whoops\Handler\PlainTextHandler;
|
||||
use Whoops\Handler\PrettyPageHandler;
|
||||
use Whoops\Run;
|
||||
|
||||
if (class_exists(Run::class)) {
|
||||
$whoops = new Run;
|
||||
if (class_exists(\Whoops\Run::class)) {
|
||||
$whoops = new \Whoops\Run;
|
||||
if(IS_CLI) {
|
||||
$whoops->pushHandler(new \Whoops\Handler\PlainTextHandler);
|
||||
}
|
||||
else {
|
||||
$whoops->pushHandler(new \Whoops\Handler\PrettyPageHandler);
|
||||
}
|
||||
|
||||
$whoopsHandler = IS_CLI ? (new PlainTextHandler()) : (new PrettyPageHandler());
|
||||
|
||||
$whoops->pushHandler($whoopsHandler);
|
||||
$whoops->register();
|
||||
return;
|
||||
}
|
||||
|
@@ -49,7 +49,7 @@ function warning($message, $return = false) {
|
||||
return message($message, 'warning', $return);
|
||||
}
|
||||
function note($message, $return = false) {
|
||||
return message($message, 'note', $return);
|
||||
return info($message, $return);
|
||||
}
|
||||
function info($message, $return = false) {
|
||||
return message($message, 'info', $return);
|
||||
@@ -89,10 +89,6 @@ function getForumBoardLink($board_id, $page = NULL): string {
|
||||
|
||||
function getPlayerLink($name, $generate = true, bool $colored = false): string
|
||||
{
|
||||
if (is_object($name) and $name instanceof OTS_Player) {
|
||||
$player = $name;
|
||||
}
|
||||
else {
|
||||
$player = new OTS_Player();
|
||||
|
||||
if(is_numeric($name)) {
|
||||
@@ -101,7 +97,6 @@ function getPlayerLink($name, $generate = true, bool $colored = false): string
|
||||
else {
|
||||
$player->find($name);
|
||||
}
|
||||
}
|
||||
|
||||
if (!$player->isLoaded()) {
|
||||
return '(error)';
|
||||
@@ -121,7 +116,7 @@ function getPlayerLink($name, $generate = true, bool $colored = false): string
|
||||
|
||||
function getMonsterLink($name, $generate = true): string
|
||||
{
|
||||
$url = BASE_URL . (setting('core.friendly_urls') ? '' : 'index.php/') . 'monsters?name=' . urlencode($name);
|
||||
$url = BASE_URL . (setting('core.friendly_urls') ? '' : 'index.php/') . 'monsters/' . urlencode($name);
|
||||
|
||||
if(!$generate) return $url;
|
||||
return generateLink($url, $name);
|
||||
@@ -129,14 +124,16 @@ function getMonsterLink($name, $generate = true): string
|
||||
|
||||
function getHouseLink($name, $generate = true): string
|
||||
{
|
||||
if(is_numeric($name)) {
|
||||
if(is_numeric($name))
|
||||
{
|
||||
$house = House::find(intval($name), ['name']);
|
||||
if ($house) {
|
||||
$name = $house->name;
|
||||
}
|
||||
}
|
||||
|
||||
$url = BASE_URL . (setting('core.friendly_urls') ? '' : 'index.php/') . 'houses?name=' . urlencode($name);
|
||||
|
||||
$url = BASE_URL . (setting('core.friendly_urls') ? '' : 'index.php/') . 'houses/' . urlencode($name);
|
||||
|
||||
if(!$generate) return $url;
|
||||
return generateLink($url, $name);
|
||||
@@ -587,12 +584,24 @@ function template_form()
|
||||
{
|
||||
global $template_name;
|
||||
|
||||
$templates = Cache::remember('templates', 5 * 60, function() {
|
||||
return get_templates();
|
||||
});
|
||||
$cache = Cache::getInstance();
|
||||
if($cache->enabled())
|
||||
{
|
||||
$tmp = '';
|
||||
if($cache->fetch('templates', $tmp)) {
|
||||
$templates = unserialize($tmp);
|
||||
}
|
||||
else
|
||||
{
|
||||
$templates = get_templates();
|
||||
$cache->set('templates', serialize($templates), 30);
|
||||
}
|
||||
}
|
||||
else
|
||||
$templates = get_templates();
|
||||
|
||||
$options = '';
|
||||
foreach($templates as $value)
|
||||
foreach($templates as $key => $value)
|
||||
$options .= '<option ' . ($template_name == $value ? 'SELECTED' : '') . '>' . $value . '</option>';
|
||||
|
||||
global $twig;
|
||||
@@ -982,29 +991,31 @@ function load_config_lua($filename)
|
||||
continue;
|
||||
}
|
||||
$tmp_exp = explode('=', $line, 2);
|
||||
if(str_contains($line, 'dofile')) {
|
||||
if(strpos($line, 'dofile') !== false)
|
||||
{
|
||||
$delimiter = '"';
|
||||
if(!str_contains($line, $delimiter)) {
|
||||
if(strpos($line, $delimiter) === false)
|
||||
$delimiter = "'";
|
||||
}
|
||||
|
||||
$tmp = explode($delimiter, $line);
|
||||
$result = array_merge($result, load_config_lua($config['server_path'] . $tmp[1]));
|
||||
}
|
||||
else if(count($tmp_exp) >= 2) {
|
||||
else if(count($tmp_exp) >= 2)
|
||||
{
|
||||
$key = trim($tmp_exp[0]);
|
||||
if(!str_starts_with($key, '--')) {
|
||||
if(0 !== strpos($key, '--'))
|
||||
{
|
||||
$value = trim($tmp_exp[1]);
|
||||
if(str_contains($value, '--')) {// found some deep comment
|
||||
if(strpos($value, '--') !== false) {// found some deep comment
|
||||
$value = preg_replace('/--.*$/i', '', $value);
|
||||
}
|
||||
|
||||
if(is_numeric($value))
|
||||
$result[$key] = (float) $value;
|
||||
elseif(in_array(@$value[0], array("'", '"')) && in_array(@$value[strlen($value) - 1], array("'", '"')))
|
||||
$result[$key] = substr(substr($value, 1), 0, -1);
|
||||
$result[$key] = (string) substr(substr($value, 1), 0, -1);
|
||||
elseif(in_array($value, array('true', 'false')))
|
||||
$result[$key] = $value === 'true';
|
||||
$result[$key] = ($value === 'true') ? true : false;
|
||||
elseif(@$value[0] === '{') {
|
||||
// arrays are not supported yet
|
||||
// just ignore the error
|
||||
@@ -1012,19 +1023,12 @@ function load_config_lua($filename)
|
||||
}
|
||||
else
|
||||
{
|
||||
foreach($result as $tmp_key => $tmp_value) { // load values defined by other keys, like: dailyFragsToBlackSkull = dailyFragsToRedSkull
|
||||
foreach($result as $tmp_key => $tmp_value) // load values definied by other keys, like: dailyFragsToBlackSkull = dailyFragsToRedSkull
|
||||
$value = str_replace($tmp_key, $tmp_value, $value);
|
||||
}
|
||||
|
||||
try {
|
||||
$ret = eval("return $value;");
|
||||
}
|
||||
catch (Throwable $e) {
|
||||
throw new RuntimeException('ERROR: Loading config.lua file. Line: ' . ($ln + 1) . ' - Unable to parse value "' . $value . '" - ' . $e->getMessage());
|
||||
}
|
||||
|
||||
if((string) $ret == '' && trim($value) !== '""') {
|
||||
throw new RuntimeException('ERROR: Loading config.lua file. Line ' . ($ln + 1) . ' is not valid [key: ' . $key . ']');
|
||||
$ret = @eval("return $value;");
|
||||
if((string) $ret == '' && trim($value) !== '""') // = parser error
|
||||
{
|
||||
throw new RuntimeException('ERROR: Loading config.lua file. Line <b>' . ($ln + 1) . '</b> of LUA config file is not valid [key: <b>' . $key . '</b>]');
|
||||
}
|
||||
$result[$key] = $ret;
|
||||
}
|
||||
@@ -1033,7 +1037,8 @@ function load_config_lua($filename)
|
||||
}
|
||||
}
|
||||
|
||||
return array_merge($result, $config['lua'] ?? []);
|
||||
$result = array_merge($result, isset($config['lua']) ? $config['lua'] : array());
|
||||
return $result;
|
||||
}
|
||||
|
||||
function str_replace_first($search,$replace, $subject) {
|
||||
@@ -1059,36 +1064,17 @@ function get_browser_real_ip() {
|
||||
|
||||
return '0';
|
||||
}
|
||||
function setSession($key, $value = null): void {
|
||||
if (!is_array($key)) {
|
||||
$key = [$key => $value];
|
||||
}
|
||||
|
||||
foreach ($key as $arrayKey => $arrayValue) {
|
||||
if (is_null($arrayValue)) {
|
||||
unsetSession($arrayKey);
|
||||
}
|
||||
else {
|
||||
$_SESSION[setting('core.session_prefix') . $arrayKey] = $arrayValue;
|
||||
}
|
||||
}
|
||||
function setSession($key, $data) {
|
||||
$_SESSION[setting('core.session_prefix') . $key] = $data;
|
||||
}
|
||||
function getSession($key) {
|
||||
return $_SESSION[setting('core.session_prefix') . $key] ?? null;
|
||||
$key = setting('core.session_prefix') . $key;
|
||||
return isset($_SESSION[$key]) ? $_SESSION[$key] : false;
|
||||
}
|
||||
function unsetSession($key): void {
|
||||
function unsetSession($key) {
|
||||
unset($_SESSION[setting('core.session_prefix') . $key]);
|
||||
}
|
||||
|
||||
function session($key): mixed {
|
||||
if (is_array($key)) {
|
||||
setSession($key);
|
||||
return null;
|
||||
}
|
||||
|
||||
return getSession($key);
|
||||
}
|
||||
|
||||
function csrf(bool $return = false): string {
|
||||
return CsrfToken::create($return);
|
||||
}
|
||||
@@ -1111,16 +1097,20 @@ function csrfProtect(): void
|
||||
}
|
||||
}
|
||||
|
||||
function getTopPlayers($limit = 5, $skill = 'level') {
|
||||
function getTopPlayers($limit = 5) {
|
||||
global $db;
|
||||
|
||||
if ($skill === 'level') {
|
||||
$skill = 'experience';
|
||||
$cache = Cache::getInstance();
|
||||
if($cache->enabled()) {
|
||||
$tmp = '';
|
||||
if($cache->fetch('top_' . $limit . '_level', $tmp)) {
|
||||
$players = unserialize($tmp);
|
||||
}
|
||||
}
|
||||
|
||||
return Cache::remember("top_{$limit}_{$skill}", 2 * 60, function () use ($db, $limit, $skill) {
|
||||
if (!isset($players)) {
|
||||
$columns = [
|
||||
'id', 'name', 'level', 'vocation', 'experience', 'balance',
|
||||
'id', 'name', 'level', 'vocation', 'experience',
|
||||
'looktype', 'lookhead', 'lookbody', 'looklegs', 'lookfeet'
|
||||
];
|
||||
|
||||
@@ -1128,27 +1118,36 @@ function getTopPlayers($limit = 5, $skill = 'level') {
|
||||
$columns[] = 'lookaddons';
|
||||
}
|
||||
|
||||
return Player::query()
|
||||
if ($db->hasColumn('players', 'online')) {
|
||||
$columns[] = 'online';
|
||||
}
|
||||
|
||||
$players = Player::query()
|
||||
->select($columns)
|
||||
->withOnlineStatus()
|
||||
->notDeleted()
|
||||
->where('group_id', '<', setting('core.highscores_groups_hidden'))
|
||||
->whereNotIn('id', setting('core.highscores_ids_hidden'))
|
||||
->where('account_id', '!=', 1)
|
||||
->orderByDesc($skill)
|
||||
->orderByDesc('experience')
|
||||
->limit($limit)
|
||||
->get()
|
||||
->map(function ($e, $i) {
|
||||
$row = $e->toArray();
|
||||
$row['online'] = $e->online_status;
|
||||
$row['rank'] = $i + 1;
|
||||
$row['outfit_url'] = $e->outfit_url;
|
||||
|
||||
unset($row['online_table']);
|
||||
|
||||
return $row;
|
||||
})->toArray();
|
||||
});
|
||||
|
||||
if($cache->enabled()) {
|
||||
$cache->set('top_' . $limit . '_level', serialize($players), 120);
|
||||
}
|
||||
}
|
||||
|
||||
return $players;
|
||||
}
|
||||
|
||||
function deleteDirectory($dir, $ignore = array(), $contentOnly = false) {
|
||||
@@ -1680,23 +1679,8 @@ function isRequestMethod(string $method): bool {
|
||||
return strtolower($_SERVER['REQUEST_METHOD']) == strtolower($method);
|
||||
}
|
||||
|
||||
function getAccountIdentityColumn(): string
|
||||
{
|
||||
if (USE_ACCOUNT_NAME) {
|
||||
return 'name';
|
||||
}
|
||||
elseif (USE_ACCOUNT_NUMBER) {
|
||||
return 'number';
|
||||
}
|
||||
|
||||
return 'id';
|
||||
}
|
||||
|
||||
// validator functions
|
||||
require_once SYSTEM . 'compat/base.php';
|
||||
|
||||
// custom functions
|
||||
$customFunctions = SYSTEM . 'functions_custom.php';
|
||||
if (is_file($customFunctions)) {
|
||||
require $customFunctions;
|
||||
}
|
||||
require SYSTEM . 'functions_custom.php';
|
||||
|
@@ -12,12 +12,11 @@ use DebugBar\StandardDebugBar;
|
||||
use MyAAC\Cache\Cache;
|
||||
use MyAAC\CsrfToken;
|
||||
use MyAAC\Hooks;
|
||||
use MyAAC\Models\Town;
|
||||
use MyAAC\Settings;
|
||||
use MyAAC\Towns;
|
||||
|
||||
defined('MYAAC') or die('Direct access not allowed!');
|
||||
|
||||
global $config;
|
||||
if(!isset($config['installed']) || !$config['installed']) {
|
||||
throw new RuntimeException('MyAAC has not been installed yet or there was error during installation. Please install again.');
|
||||
}
|
||||
@@ -39,18 +38,15 @@ if($config['server_path'][strlen($config['server_path']) - 1] !== '/')
|
||||
$config['server_path'] .= '/';
|
||||
|
||||
// enable gzip compression if supported by the browser
|
||||
if(isset($config['gzip_output']) && $config['gzip_output'] && isset($_SERVER['HTTP_ACCEPT_ENCODING']) && str_contains($_SERVER['HTTP_ACCEPT_ENCODING'], 'gzip') && function_exists('ob_gzhandler'))
|
||||
if(isset($config['gzip_output']) && $config['gzip_output'] && isset($_SERVER['HTTP_ACCEPT_ENCODING']) && strpos($_SERVER['HTTP_ACCEPT_ENCODING'], 'gzip') !== false && function_exists('ob_gzhandler'))
|
||||
ob_start('ob_gzhandler');
|
||||
|
||||
// cache
|
||||
global $cache;
|
||||
$cache = Cache::getInstance();
|
||||
|
||||
// event system
|
||||
global $hooks;
|
||||
$hooks = new Hooks();
|
||||
$hooks->load();
|
||||
$hooks->trigger(HOOK_INIT);
|
||||
|
||||
// twig
|
||||
require_once SYSTEM . 'twig.php';
|
||||
@@ -97,8 +93,8 @@ if($config_lua_reload) {
|
||||
|
||||
// cache config
|
||||
if($cache->enabled()) {
|
||||
$cache->set('config_lua', serialize($config['lua']), 2 * 60);
|
||||
$cache->set('server_path', $config['server_path'], 10 * 60);
|
||||
$cache->set('config_lua', serialize($config['lua']), 120);
|
||||
$cache->set('server_path', $config['server_path']);
|
||||
}
|
||||
}
|
||||
unset($tmp);
|
||||
@@ -140,14 +136,11 @@ require_once SYSTEM . 'database.php';
|
||||
|
||||
// verify myaac tables exists in database
|
||||
if(!defined('MYAAC_INSTALL') && !$db->hasTable('myaac_account_actions')) {
|
||||
throw new RuntimeException('Seems that the table myaac_account_actions of MyAAC doesn\'t exist in the database. This is a fatal error. You can try to reinstall MyAAC by visiting ' . (IS_CLI ? 'http://your-ip.com/' : BASE_URL) . 'install');
|
||||
throw new RuntimeException('Seems that the table myaac_account_actions of MyAAC doesn\'t exist in the database. This is a fatal error. You can try to reinstall MyAAC by visiting ' . BASE_URL . 'install');
|
||||
}
|
||||
|
||||
// execute migrations
|
||||
$configDatabaseAutoMigrate = config('database_auto_migrate');
|
||||
if (!isset($configDatabaseAutoMigrate) || $configDatabaseAutoMigrate) {
|
||||
require SYSTEM . 'migrate.php';
|
||||
}
|
||||
require SYSTEM . 'migrate.php';
|
||||
|
||||
// settings
|
||||
$settings = Settings::getInstance();
|
||||
@@ -162,9 +155,6 @@ if (!isset($token) || !$token) {
|
||||
// deprecated config values
|
||||
require_once SYSTEM . 'compat/config.php';
|
||||
|
||||
// deprecated classes
|
||||
require_once SYSTEM . 'compat/classes.php';
|
||||
|
||||
date_default_timezone_set(setting('core.date_timezone'));
|
||||
|
||||
setting(
|
||||
@@ -183,17 +173,4 @@ define('USE_ACCOUNT_NAME', $db->hasColumn('accounts', 'name'));
|
||||
define('USE_ACCOUNT_NUMBER', $db->hasColumn('accounts', 'number'));
|
||||
define('USE_ACCOUNT_SALT', $db->hasColumn('accounts', 'salt'));
|
||||
|
||||
$towns = Cache::remember('towns', 10 * 60, function () use ($db) {
|
||||
if ($db->hasTable('towns') && Town::count() > 0) {
|
||||
return Town::orderBy('id', 'ASC')->pluck('name', 'id')->toArray();
|
||||
}
|
||||
|
||||
return [];
|
||||
});
|
||||
|
||||
if (count($towns) <= 0) {
|
||||
$towns = setting('core.towns');
|
||||
}
|
||||
|
||||
config(['towns', $towns]);
|
||||
unset($towns);
|
||||
Towns::load();
|
||||
|
@@ -443,19 +443,19 @@ class OTS_Account extends OTS_Row_DAO implements IteratorAggregate, Countable
|
||||
throw new E_OTS_NotLoaded();
|
||||
}
|
||||
|
||||
$configFreePremium = configLua('freePremium');
|
||||
if(isset($configFreePremium) && getBoolean($configFreePremium)) {return -1;}
|
||||
|
||||
if(isset($this->data['premium_ends_at']) || isset($this->data['premend'])) {
|
||||
$col = isset($this->data['premium_ends_at']) ? 'premium_ends_at' : 'premend';
|
||||
$ret = ceil(($this->data[$col] - time()) / (24 * 60 * 60));
|
||||
return max($ret, 0);
|
||||
return $ret > 0 ? $ret : 0;
|
||||
}
|
||||
|
||||
if($this->data['premdays'] == 0) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
global $config;
|
||||
if(isset($config['lua']['freePremium']) && getBoolean($config['lua']['freePremium'])) return -1;
|
||||
|
||||
if($this->data['premdays'] == self::GRATIS_PREMIUM_DAYS){
|
||||
return self::GRATIS_PREMIUM_DAYS;
|
||||
}
|
||||
@@ -1011,7 +1011,7 @@ class OTS_Account extends OTS_Row_DAO implements IteratorAggregate, Countable
|
||||
public function logAction($action)
|
||||
{
|
||||
$ip = get_browser_real_ip();
|
||||
if(!str_contains($ip, ":")) {
|
||||
if(strpos($ip, ":") === false) {
|
||||
$ipv6 = '0';
|
||||
}
|
||||
else {
|
||||
|
@@ -235,30 +235,6 @@ abstract class OTS_Base_DB extends PDO implements IOTS_DB
|
||||
$this->exec($query);
|
||||
return true;
|
||||
}
|
||||
|
||||
public function addColumn($table, $column, $definition): void {
|
||||
$this->exec('ALTER TABLE ' . $this->tableName($table) . ' ADD ' . $this->fieldName($column) . ' ' . $definition . ';');
|
||||
}
|
||||
|
||||
public function modifyColumn($table, $column, $definition): void {
|
||||
$this->exec('ALTER TABLE ' . $this->tableName($table) . ' MODIFY ' . $this->fieldName($column) . ' ' . $definition . ';');
|
||||
}
|
||||
|
||||
public function changeColumn($table, $from, $to, $definition): void {
|
||||
$this->exec('ALTER TABLE ' . $this->tableName($table) . ' CHANGE ' . $this->fieldName($from) . ' ' . $this->fieldName($to) . ' ' . $definition . ';');
|
||||
}
|
||||
|
||||
public function dropColumn($table, $column): void {
|
||||
$this->exec('ALTER TABLE ' . $this->tableName($table) . ' DROP COLUMN ' . $this->fieldName($column) . ';');
|
||||
}
|
||||
|
||||
public function renameTable($from, $to): void {
|
||||
$this->exec('RENAME TABLE ' . $this->tableName($from) . ' TO ' . $this->tableName($to) . ';');
|
||||
}
|
||||
|
||||
public function dropTable($table, $ifExists = true): void {
|
||||
$this->exec('DROP TABLE ' . ($ifExists ? 'IF EXISTS' : '') . ' ' . $this->tableName($table) . ';');
|
||||
}
|
||||
/**
|
||||
* LIMIT/OFFSET clause for queries.
|
||||
*
|
||||
|
@@ -165,8 +165,7 @@ class OTS_DB_MySQL extends OTS_Base_DB
|
||||
}
|
||||
|
||||
if($this->logged) {
|
||||
$currentScript = $_SERVER['REQUEST_URI'] ?? $_SERVER['SCRIPT_FILENAME'];
|
||||
log_append('database.log', $currentScript . PHP_EOL . $this->getLog());
|
||||
log_append('database.log', $_SERVER['REQUEST_URI'] . PHP_EOL . $this->getLog());
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -108,8 +108,6 @@ class OTS_Player extends OTS_Row_DAO
|
||||
POT::SKILL_SHIELD => array('value' => 0, 'tries' => 0),
|
||||
POT::SKILL_FISH => array('value' => 0, 'tries' => 0)
|
||||
);
|
||||
|
||||
private static array $playersOnline;
|
||||
/**
|
||||
* Magic PHP5 method.
|
||||
*
|
||||
@@ -767,18 +765,10 @@ class OTS_Player extends OTS_Row_DAO
|
||||
|
||||
public function isOnline()
|
||||
{
|
||||
if($this->db->hasTable('players_online')) {// tfs 1.0
|
||||
if (!isset(self::$playersOnline)) {
|
||||
self::$playersOnline = [];
|
||||
|
||||
$query = $this->db->query('SELECT `player_id` FROM `players_online`');
|
||||
|
||||
foreach ($query->fetchAll(PDO::FETCH_ASSOC) as $item) {
|
||||
self::$playersOnline[$item['player_id']] = true;
|
||||
}
|
||||
}
|
||||
|
||||
return isset(self::$playersOnline[$this->data['id']]);
|
||||
if($this->db->hasTable('players_online')) // tfs 1.0
|
||||
{
|
||||
$query = $this->db->query('SELECT `player_id` FROM `players_online` WHERE `player_id` = ' . $this->data['id']);
|
||||
return $query->rowCount() > 0;
|
||||
}
|
||||
|
||||
if( !isset($this->data['online']) )
|
||||
@@ -1762,6 +1752,11 @@ class OTS_Player extends OTS_Row_DAO
|
||||
*/
|
||||
public function getConditions()
|
||||
{
|
||||
if( !isset($this->data['conditions']) )
|
||||
{
|
||||
throw new E_OTS_NotLoaded();
|
||||
}
|
||||
|
||||
return $this->data['conditions'];
|
||||
}
|
||||
|
||||
|
@@ -94,7 +94,7 @@ $locale['step_database_loaded_npcs'] = 'NPCs has been loaded...';
|
||||
$locale['step_database_error_npcs'] = 'There were some problems loading your NPCs';
|
||||
$locale['step_database_loaded_spells'] = 'Spells has been loaded...';
|
||||
$locale['step_database_loaded_towns'] = 'Towns has been loaded...';
|
||||
$locale['step_database_error_towns'] = 'There were some problems loading your towns. You will need to configure them manually in Settings.';
|
||||
$locale['step_database_error_towns'] = 'There were some problems loading your towns. You will need to configure them manually in config.';
|
||||
$locale['step_database_created_account'] = 'Created admin account...';
|
||||
$locale['step_database_created_news'] = 'Newses has been created...';
|
||||
|
||||
|
@@ -93,7 +93,7 @@ $locale['step_database_loaded_npcs'] = 'Załadowano NPCs...';
|
||||
$locale['step_database_error_npcs'] = 'Wystąpił problem podczas ładowania NPCs';
|
||||
$locale['step_database_loaded_spells'] = 'Załadowano czary (spells)...';
|
||||
$locale['step_database_loaded_towns'] = 'Załadowano miasta (towns)...';
|
||||
$locale['step_database_error_towns'] = 'Wystąpił problem podczas ładowania miast. Trzeba będzie je skonfigurować manualnie w ustawieniach.';
|
||||
$locale['step_database_error_towns'] = 'Wystąpił problem podczas ładowania miast. Trzeba będzie je skonfigurować manualnie.';
|
||||
$locale['step_database_created_account'] = 'Utworzono konto admina...';
|
||||
$locale['step_database_created_news'] = 'Utworzono newsy...';
|
||||
|
||||
|
@@ -14,12 +14,12 @@ $account_logged = new OTS_Account();
|
||||
|
||||
// stay-logged with sessions
|
||||
$current_session = getSession('account');
|
||||
if($current_session)
|
||||
if($current_session !== false)
|
||||
{
|
||||
$account_logged->load($current_session);
|
||||
if($account_logged->isLoaded() && $account_logged->getPassword() == getSession('password')
|
||||
//&& (!isset($_SESSION['admin']) || admin())
|
||||
&& (getSession('remember_me') || getSession('last_visit') > time() - 15 * 60)) { // login for 15 minutes if "remember me" is not used
|
||||
&& (getSession('remember_me') !== false || getSession('last_visit') > time() - 15 * 60)) { // login for 15 minutes if "remember me" is not used
|
||||
$logged = true;
|
||||
}
|
||||
else {
|
||||
|
@@ -17,12 +17,6 @@ if(fetchDatabaseConfig('database_version', $tmp)) { // we got version
|
||||
$db->revalidateCache();
|
||||
for($i = $tmp + 1; $i <= DATABASE_VERSION; $i++) {
|
||||
require SYSTEM . 'migrations/' . $i . '.php';
|
||||
|
||||
if (isset($up)) {
|
||||
$up();
|
||||
unset($up);
|
||||
}
|
||||
|
||||
updateDatabaseConfig('database_version', $i);
|
||||
}
|
||||
}
|
||||
@@ -32,12 +26,6 @@ else { // register first version
|
||||
$db->revalidateCache();
|
||||
for($i = 1; $i <= DATABASE_VERSION; $i++) {
|
||||
require SYSTEM . 'migrations/' . $i . '.php';
|
||||
|
||||
if (isset($up)) {
|
||||
$up();
|
||||
unset($up);
|
||||
}
|
||||
|
||||
updateDatabaseConfig('database_version', $i);
|
||||
}
|
||||
}
|
||||
|
@@ -1,8 +0,0 @@
|
||||
CREATE TABLE `myaac_hooks`
|
||||
(
|
||||
`id` INT(11) NOT NULL AUTO_INCREMENT,
|
||||
`name` VARCHAR(30) NOT NULL DEFAULT '',
|
||||
`type` INT(2) NOT NULL DEFAULT 0,
|
||||
`file` VARCHAR(100) NOT NULL,
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8;
|
@@ -1,16 +1,16 @@
|
||||
<?php
|
||||
/**
|
||||
* @var OTS_DB_MySQL $db
|
||||
*/
|
||||
$db->query("ALTER TABLE `" . TABLE_PREFIX . "account_actions` MODIFY `ip` INT(11) NOT NULL DEFAULT 0;");
|
||||
$db->query("ALTER TABLE `" . TABLE_PREFIX . "account_actions` MODIFY `date` INT(11) NOT NULL DEFAULT 0;");
|
||||
$db->query("ALTER TABLE `" . TABLE_PREFIX . "account_actions` MODIFY `action` VARCHAR(255) NOT NULL DEFAULT '';");
|
||||
$db->query("
|
||||
CREATE TABLE `myaac_hooks`
|
||||
(
|
||||
`id` INT(11) NOT NULL AUTO_INCREMENT,
|
||||
`name` VARCHAR(30) NOT NULL DEFAULT '',
|
||||
`type` INT(2) NOT NULL DEFAULT 0,
|
||||
`file` VARCHAR(100) NOT NULL,
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8;
|
||||
");
|
||||
|
||||
$up = function () use ($db) {
|
||||
$db->modifyColumn(TABLE_PREFIX . 'account_actions', 'ip', "INT(11) NOT NULL DEFAULT 0");
|
||||
$db->modifyColumn(TABLE_PREFIX . 'account_actions', 'date', "INT(11) NOT NULL DEFAULT 0");
|
||||
$db->modifyColumn(TABLE_PREFIX . 'account_actions', 'action', "VARCHAR(255) NOT NULL DEFAULT ''");
|
||||
|
||||
$db->query(file_get_contents(__DIR__ . '/1-hooks.sql'));
|
||||
};
|
||||
|
||||
$down = function () use ($db) {
|
||||
$db->dropTable(TABLE_PREFIX . 'hooks');
|
||||
};
|
||||
?>
|
||||
|
@@ -1,10 +0,0 @@
|
||||
CREATE TABLE `myaac_admin_menu`
|
||||
(
|
||||
`id` INT(11) NOT NULL AUTO_INCREMENT,
|
||||
`name` VARCHAR(255) NOT NULL DEFAULT '',
|
||||
`page` VARCHAR(255) NOT NULL DEFAULT '',
|
||||
`ordering` INT(11) NOT NULL DEFAULT 0,
|
||||
`flags` INT(11) NOT NULL DEFAULT 0,
|
||||
`enabled` INT(1) NOT NULL DEFAULT 1,
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8;
|
@@ -1,24 +1,17 @@
|
||||
<?php
|
||||
/**
|
||||
* @var OTS_DB_MySQL $db
|
||||
*/
|
||||
if(!$db->hasColumn(TABLE_PREFIX . 'hooks', 'ordering'))
|
||||
$db->query("ALTER TABLE `" . TABLE_PREFIX . "hooks` ADD `ordering` INT(11) NOT NULL DEFAULT 0 AFTER `file`;");
|
||||
|
||||
$up = function () use ($db) {
|
||||
if (!$db->hasColumn(TABLE_PREFIX . 'hooks', 'ordering')) {
|
||||
$db->addColumn(TABLE_PREFIX . 'hooks', 'ordering', "INT(11) NOT NULL DEFAULT 0 AFTER `file`");
|
||||
}
|
||||
|
||||
if (!$db->hasTable(TABLE_PREFIX . 'admin_menu')) {
|
||||
$db->query(file_get_contents(__DIR__ . '/10-admin_menu.sql'));
|
||||
}
|
||||
};
|
||||
|
||||
$down = function () use ($db) {
|
||||
if ($db->hasColumn(TABLE_PREFIX . 'hooks', 'ordering')) {
|
||||
$db->dropColumn(TABLE_PREFIX . 'hooks', 'ordering');
|
||||
}
|
||||
|
||||
if ($db->hasTable(TABLE_PREFIX . 'admin_menu')) {
|
||||
$db->dropTable(TABLE_PREFIX . 'admin_menu');
|
||||
}
|
||||
};
|
||||
if(!$db->hasTable(TABLE_PREFIX . 'admin_menu'))
|
||||
$db->query("
|
||||
CREATE TABLE `myaac_admin_menu`
|
||||
(
|
||||
`id` INT(11) NOT NULL AUTO_INCREMENT,
|
||||
`name` VARCHAR(255) NOT NULL DEFAULT '',
|
||||
`page` VARCHAR(255) NOT NULL DEFAULT '',
|
||||
`ordering` INT(11) NOT NULL DEFAULT 0,
|
||||
`flags` INT(11) NOT NULL DEFAULT 0,
|
||||
`enabled` INT(1) NOT NULL DEFAULT 1,
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8;
|
||||
");
|
@@ -1,44 +1,19 @@
|
||||
<?php
|
||||
/**
|
||||
* @var OTS_DB_MySQL $db
|
||||
*/
|
||||
|
||||
$up = function () use ($db) {
|
||||
// rename database tables
|
||||
$db->renameTable(TABLE_PREFIX . 'screenshots', TABLE_PREFIX . 'gallery');
|
||||
$db->renameTable(TABLE_PREFIX . 'movies', TABLE_PREFIX . 'videos');
|
||||
$db->query("RENAME TABLE
|
||||
" . TABLE_PREFIX . "screenshots TO " . TABLE_PREFIX . "gallery,
|
||||
" . TABLE_PREFIX . "movies TO " . TABLE_PREFIX . "videos;");
|
||||
|
||||
// rename images dir
|
||||
if (file_exists(BASE . 'images/screenshots') && !file_exists(BASE . GALLERY_DIR)) {
|
||||
if(file_exists(BASE . 'images/screenshots') && !file_exists(BASE . GALLERY_DIR)) {
|
||||
rename(BASE . 'images/screenshots', BASE . GALLERY_DIR);
|
||||
}
|
||||
|
||||
// convert old database screenshots images to gallery
|
||||
$query = $db->query('SELECT `id`, `image`, `thumb` FROM `' . TABLE_PREFIX . 'gallery`;');
|
||||
foreach ($query->fetchAll() as $item) {
|
||||
foreach($query->fetchAll() as $item) {
|
||||
$db->update(TABLE_PREFIX . 'gallery', array(
|
||||
'image' => str_replace('/screenshots/', '/gallery/', $item['image']),
|
||||
'thumb' => str_replace('/screenshots/', '/gallery/', $item['thumb']),
|
||||
), array('id' => $item['id']));
|
||||
}
|
||||
};
|
||||
|
||||
$down = function () use ($db) {
|
||||
// rename database tables
|
||||
$db->renameTable(TABLE_PREFIX . 'gallery', TABLE_PREFIX . 'screenshots');
|
||||
$db->renameTable(TABLE_PREFIX . 'videos', TABLE_PREFIX . 'movies');
|
||||
|
||||
// rename images dir
|
||||
if (file_exists(BASE . GALLERY_DIR) && !file_exists(BASE . 'images/screenshots')) {
|
||||
rename(BASE . GALLERY_DIR, BASE . 'images/screenshots');
|
||||
}
|
||||
|
||||
// convert new database gallery images to screenshots
|
||||
$query = $db->query('SELECT `id`, `image`, `thumb` FROM `' . TABLE_PREFIX . 'screenshots`;');
|
||||
foreach ($query->fetchAll() as $item) {
|
||||
$db->update(TABLE_PREFIX . 'screenshots', [
|
||||
'image' => str_replace('/gallery/', '/screenshots/', $item['image']),
|
||||
'thumb' => str_replace('/gallery/', '/screenshots/', $item['thumb']),
|
||||
], ['id' => $item['id']]);
|
||||
}
|
||||
};
|
||||
|
@@ -1,9 +0,0 @@
|
||||
CREATE TABLE `myaac_items`
|
||||
(
|
||||
`id` INT(11) NOT NULL,
|
||||
`article` VARCHAR(5) NOT NULL DEFAULT '',
|
||||
`name` VARCHAR(50) NOT NULL DEFAULT '',
|
||||
`plural` VARCHAR(50) NOT NULL DEFAULT '',
|
||||
`attributes` VARCHAR(500) NOT NULL DEFAULT '',
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8;
|
@@ -1,8 +0,0 @@
|
||||
CREATE TABLE `myaac_weapons`
|
||||
(
|
||||
`id` INT(11) NOT NULL,
|
||||
`level` INT(11) NOT NULL DEFAULT 0,
|
||||
`maglevel` INT(11) NOT NULL DEFAULT 0,
|
||||
`vocations` VARCHAR(100) NOT NULL DEFAULT '',
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8;
|
@@ -1,65 +1,51 @@
|
||||
<?php
|
||||
/**
|
||||
* @var OTS_DB_MySQL $db
|
||||
*/
|
||||
|
||||
use MyAAC\Models\Spell;
|
||||
// add new item_id field for runes
|
||||
if(!$db->hasColumn(TABLE_PREFIX . 'spells', 'item_id'))
|
||||
$db->query("ALTER TABLE `" . TABLE_PREFIX . "spells` ADD `item_id` INT(11) NOT NULL DEFAULT 0 AFTER `conjure_count`;");
|
||||
|
||||
$up = function () use ($db) {
|
||||
// add new item_id field for runes
|
||||
if (!$db->hasColumn(TABLE_PREFIX . 'spells', 'item_id')) {
|
||||
$db->addColumn(TABLE_PREFIX . 'spells', 'item_id', 'INT(11) NOT NULL DEFAULT 0 AFTER `conjure_count`');
|
||||
}
|
||||
// change unique index from spell to name
|
||||
$db->query("ALTER TABLE `" . TABLE_PREFIX . "spells` DROP INDEX `spell`;");
|
||||
$db->query("ALTER TABLE `" . TABLE_PREFIX . "spells` ADD UNIQUE INDEX (`name`);");
|
||||
|
||||
// change unique index from spell to name
|
||||
$db->query("ALTER TABLE `" . TABLE_PREFIX . "spells` DROP INDEX `spell`;");
|
||||
$db->query("ALTER TABLE `" . TABLE_PREFIX . "spells` ADD UNIQUE INDEX (`name`);");
|
||||
// change comment of spells.type
|
||||
$db->query("ALTER TABLE `" . TABLE_PREFIX . "spells` MODIFY `type` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '1 - instant, 2 - conjure, 3 - rune';");
|
||||
|
||||
// change comment of spells.type
|
||||
$db->modifyColumn(TABLE_PREFIX . 'spells', 'type', "TINYINT(1) NOT NULL DEFAULT 0 COMMENT '1 - instant, 2 - conjure, 3 - rune'");
|
||||
// new items table
|
||||
if(!$db->hasTable(TABLE_PREFIX . 'items'))
|
||||
$db->query("
|
||||
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 items table
|
||||
if (!$db->hasTable(TABLE_PREFIX . 'items')) {
|
||||
$db->query(file_get_contents(__DIR__ . '/12-items.sql'));
|
||||
}
|
||||
// new weapons table
|
||||
if(!$db->hasTable(TABLE_PREFIX . 'weapons'))
|
||||
$db->query("
|
||||
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;
|
||||
");
|
||||
|
||||
// new weapons table
|
||||
if (!$db->hasTable(TABLE_PREFIX . 'weapons')) {
|
||||
$db->query(file_get_contents(__DIR__ . '/12-weapons.sql'));
|
||||
}
|
||||
|
||||
// modify vocations to support json data
|
||||
$db->modifyColumn(TABLE_PREFIX . 'spells', 'vocations', "VARCHAR(100) NOT NULL DEFAULT ''");
|
||||
|
||||
$spells = Spell::select('id', 'vocations')->get();
|
||||
foreach ($spells as $spell) {
|
||||
$tmp = explode(',', $spell->vocations);
|
||||
foreach ($tmp as &$v) {
|
||||
// modify vocations to support json data
|
||||
$db->query("ALTER TABLE `" . TABLE_PREFIX . "spells` MODIFY `vocations` VARCHAR(100) NOT NULL DEFAULT '';");
|
||||
$query = $db->query('SELECT `id`, `vocations` FROM `' . TABLE_PREFIX . 'spells`');
|
||||
foreach($query->fetchAll() as $spell) {
|
||||
$tmp = explode(',', $spell['vocations']);
|
||||
foreach($tmp as &$v) {
|
||||
$v = (int)$v;
|
||||
}
|
||||
|
||||
Spell::where('id', $spell->id)->update(['vocations' => json_encode($tmp)]);
|
||||
}
|
||||
};
|
||||
|
||||
$down = function () use ($db) {
|
||||
// remove item_id field for runes
|
||||
if ($db->hasColumn(TABLE_PREFIX . 'spells', 'item_id')) {
|
||||
$db->dropColumn(TABLE_PREFIX . 'spells', 'item_id');
|
||||
}
|
||||
|
||||
// change unique index from spell to name
|
||||
$db->query("ALTER TABLE `" . TABLE_PREFIX . "spells` DROP INDEX `name`;");
|
||||
$db->query("ALTER TABLE `" . TABLE_PREFIX . "spells` ADD INDEX (`spell`);");
|
||||
|
||||
$db->dropTable(TABLE_PREFIX . 'items');
|
||||
$db->dropTable(TABLE_PREFIX . 'weapons');
|
||||
|
||||
$spells = Spell::select('id', 'vocations')->get();
|
||||
// modify vocations to use vocation separated by comma
|
||||
foreach ($spells as $spell) {
|
||||
$vocations = empty($spell->vocations) ? [] : json_decode($spell->vocations);
|
||||
|
||||
Spell::where('id', $spell->id)->update(['vocations' => implode(',', $vocations)]);
|
||||
}
|
||||
};
|
||||
$db->update(TABLE_PREFIX . 'spells', array('vocations' => json_encode($tmp)), array('id' => $spell['id']));
|
||||
}
|
||||
?>
|
@@ -1,16 +1,3 @@
|
||||
<?php
|
||||
/**
|
||||
* @var OTS_DB_MySQL $db
|
||||
*/
|
||||
|
||||
$up = function () use ($db) {
|
||||
if ($db->hasColumn(TABLE_PREFIX . 'spells', 'spell')) {
|
||||
$db->dropColumn(TABLE_PREFIX . 'spells', 'spell');
|
||||
}
|
||||
};
|
||||
|
||||
$down = function () use ($db) {
|
||||
if (!$db->hasColumn(TABLE_PREFIX . 'spells', 'spell')) {
|
||||
$db->addColumn(TABLE_PREFIX . 'spells', 'spell', "VARCHAR(255) NOT NULL DEFAULT ''");
|
||||
}
|
||||
};
|
||||
if($db->hasColumn(TABLE_PREFIX . 'spells', 'spell'))
|
||||
$db->query("ALTER TABLE `" . TABLE_PREFIX . "spells` DROP COLUMN `spell`;");
|
@@ -1,39 +1,18 @@
|
||||
<?php
|
||||
/**
|
||||
* @var OTS_DB_MySQL $db
|
||||
*/
|
||||
|
||||
$up = function () use ($db) {
|
||||
// change monsters.file_path field to loot
|
||||
if ($db->hasColumn(TABLE_PREFIX . 'monsters', 'file_path')) {
|
||||
$db->changeColumn(TABLE_PREFIX . 'monsters', 'file_path', 'loot', 'VARCHAR(5000)');
|
||||
}
|
||||
// change monsters.file_path field to loot
|
||||
if($db->hasColumn(TABLE_PREFIX . 'monsters', 'file_path')) {
|
||||
$db->query("ALTER TABLE `" . TABLE_PREFIX . "monsters` CHANGE `file_path` `loot` VARCHAR(5000);");
|
||||
}
|
||||
|
||||
// update loot to empty string
|
||||
$db->query("UPDATE `" . TABLE_PREFIX . "monsters` SET `loot` = '';");
|
||||
// update loot to empty string
|
||||
$db->query("UPDATE `" . TABLE_PREFIX . "monsters` SET `loot` = '';");
|
||||
|
||||
// drop monsters.gfx_name field
|
||||
$db->dropColumn(TABLE_PREFIX . 'monsters', 'gfx_name');
|
||||
// drop monsters.gfx_name field
|
||||
$db->query("ALTER TABLE `" . TABLE_PREFIX . "monsters` DROP COLUMN `gfx_name`;");
|
||||
|
||||
// rename hide_creature to hidden
|
||||
if ($db->hasColumn(TABLE_PREFIX . 'monsters', 'hide_creature')) {
|
||||
$db->changeColumn(TABLE_PREFIX . 'monsters', 'hide_creature', 'hidden', "TINYINT(1) NOT NULL DEFAULT 0");
|
||||
}
|
||||
};
|
||||
|
||||
$down = function () use ($db) {
|
||||
if ($db->hasColumn(TABLE_PREFIX . 'monsters', 'loot')) {
|
||||
$db->changeColumn(TABLE_PREFIX . 'monsters', 'loot', 'file_path', 'VARCHAR(5000)');
|
||||
}
|
||||
|
||||
// update file_path to empty string
|
||||
$db->query("UPDATE `" . TABLE_PREFIX . "monsters` SET `file_path` = '';");
|
||||
|
||||
// add monsters.gfx_name field
|
||||
$db->addColumn(TABLE_PREFIX . 'monsters', 'gfx_name', 'varchar(255) NOT NULL AFTER `race`');
|
||||
|
||||
// rename hidden to hide_creature
|
||||
if ($db->hasColumn(TABLE_PREFIX . 'monsters', 'hidden')) {
|
||||
$db->changeColumn(TABLE_PREFIX . 'monsters', 'hidden', 'hide_creature', 'TINYINT(1) NOT NULL DEFAULT 0');
|
||||
}
|
||||
};
|
||||
// rename hide_creature to hidden
|
||||
if($db->hasColumn(TABLE_PREFIX . 'monsters', 'hide_creature')) {
|
||||
$db->query("ALTER TABLE `" . TABLE_PREFIX . "monsters` CHANGE `hide_creature` `hidden` TINYINT(1) NOT NULL DEFAULT 0;");
|
||||
}
|
||||
?>
|
@@ -1,26 +1,10 @@
|
||||
<?php
|
||||
/**
|
||||
* @var OTS_DB_MySQL $db
|
||||
*/
|
||||
|
||||
// add new forum.guild and forum.access fields
|
||||
if(!$db->hasColumn(TABLE_PREFIX . 'forum_boards', 'guild')) {
|
||||
$db->query("ALTER TABLE `" . TABLE_PREFIX . "forum_boards` ADD `guild` TINYINT(1) NOT NULL DEFAULT 0 AFTER `closed`;");
|
||||
}
|
||||
|
||||
$up = function () use ($db) {
|
||||
if (!$db->hasColumn(TABLE_PREFIX . 'forum_boards', 'guild')) {
|
||||
$db->addColumn(TABLE_PREFIX . 'forum_boards', 'guild', 'TINYINT(1) NOT NULL DEFAULT 0 AFTER `closed`');
|
||||
}
|
||||
|
||||
if (!$db->hasColumn(TABLE_PREFIX . 'forum_boards', 'access')) {
|
||||
$db->addColumn(TABLE_PREFIX . 'forum_boards', 'access', 'TINYINT(1) NOT NULL DEFAULT 0 AFTER `guild`');
|
||||
}
|
||||
};
|
||||
|
||||
$down = function () use ($db) {
|
||||
if ($db->hasColumn(TABLE_PREFIX . 'forum_boards', 'guild')) {
|
||||
$db->dropColumn(TABLE_PREFIX . 'forum_boards', 'guild');
|
||||
}
|
||||
|
||||
if ($db->hasColumn(TABLE_PREFIX . 'forum_boards', 'access')) {
|
||||
$db->dropColumn(TABLE_PREFIX . 'forum_boards', 'access');
|
||||
}
|
||||
};
|
||||
if(!$db->hasColumn(TABLE_PREFIX . 'forum_boards', 'access')) {
|
||||
$db->query("ALTER TABLE `" . TABLE_PREFIX . "forum_boards` ADD `access` TINYINT(1) NOT NULL DEFAULT 0 AFTER `guild`;");
|
||||
}
|
||||
|
@@ -1,14 +1,5 @@
|
||||
<?php
|
||||
/**
|
||||
* @var OTS_DB_MySQL $db
|
||||
*/
|
||||
|
||||
// change size of spells.vocations
|
||||
|
||||
$up = function () use ($db) {
|
||||
$db->modifyColumn(TABLE_PREFIX . 'spells', 'vocations', "VARCHAR(300) NOT NULL DEFAULT ''");
|
||||
};
|
||||
|
||||
$down = function () {
|
||||
// nothing to do here
|
||||
};
|
||||
$db->query("ALTER TABLE `" . TABLE_PREFIX . "spells` MODIFY `vocations` VARCHAR(300) NOT NULL DEFAULT '';");
|
||||
?>
|
@@ -1,11 +0,0 @@
|
||||
CREATE TABLE `myaac_menu`
|
||||
(
|
||||
`id` INT(11) NOT NULL AUTO_INCREMENT,
|
||||
`template` VARCHAR(255) NOT NULL,
|
||||
`name` VARCHAR(255) NOT NULL,
|
||||
`link` VARCHAR(255) NOT NULL,
|
||||
`category` INT(11) NOT NULL DEFAULT 1,
|
||||
`ordering` INT(11) NOT NULL DEFAULT 0,
|
||||
`enabled` INT(1) NOT NULL DEFAULT 1,
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8;
|
@@ -1,20 +1,23 @@
|
||||
<?php
|
||||
/**
|
||||
* @var OTS_DB_MySQL $db
|
||||
*/
|
||||
|
||||
use MyAAC\Plugins;
|
||||
|
||||
$up = function () use ($db) {
|
||||
if (!$db->hasTable(TABLE_PREFIX . 'menu')) {
|
||||
$db->exec(file_get_contents(__DIR__ . '/17-menu.sql'));
|
||||
}
|
||||
if(!$db->hasTable('myaac_menu')) {
|
||||
$db->query("
|
||||
CREATE TABLE `myaac_menu`
|
||||
(
|
||||
`id` INT(11) NOT NULL AUTO_INCREMENT,
|
||||
`template` VARCHAR(255) NOT NULL,
|
||||
`name` VARCHAR(255) NOT NULL,
|
||||
`link` VARCHAR(255) NOT NULL,
|
||||
`category` INT(11) NOT NULL DEFAULT 1,
|
||||
`ordering` INT(11) NOT NULL DEFAULT 0,
|
||||
`enabled` INT(1) NOT NULL DEFAULT 1,
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8;
|
||||
");
|
||||
}
|
||||
|
||||
Plugins::installMenus('kathrine', require TEMPLATES . 'kathrine/menus.php');
|
||||
Plugins::installMenus('tibiacom', require TEMPLATES . 'tibiacom/menus.php');
|
||||
};
|
||||
|
||||
$down = function () use ($db) {
|
||||
$db->dropTable(TABLE_PREFIX . 'menu');
|
||||
};
|
||||
Plugins::installMenus('kathrine', require TEMPLATES . 'kathrine/menus.php');
|
||||
Plugins::installMenus('tibiacom', require TEMPLATES . 'tibiacom/menus.php');
|
||||
|
||||
|
@@ -1,24 +1,6 @@
|
||||
<?php
|
||||
/**
|
||||
* @var OTS_DB_MySQL $db
|
||||
*/
|
||||
|
||||
$up = function () use ($db) {
|
||||
if (!$db->hasColumn(TABLE_PREFIX . 'news', 'article_text')) {
|
||||
$db->addColumn(TABLE_PREFIX . 'news', 'article_text', "VARCHAR(300) NOT NULL DEFAULT '' AFTER `comments`");
|
||||
}
|
||||
$db->query("ALTER TABLE `" . TABLE_PREFIX . "news` ADD `article_text` VARCHAR(300) NOT NULL DEFAULT '' AFTER `comments`;");
|
||||
$db->query("ALTER TABLE `" . TABLE_PREFIX . "news` ADD `article_image` VARCHAR(100) NOT NULL DEFAULT '' AFTER `article_text`;");
|
||||
|
||||
if (!$db->hasColumn(TABLE_PREFIX . 'news', 'article_image')) {
|
||||
$db->addColumn(TABLE_PREFIX . 'news', 'article_image', "VARCHAR(100) NOT NULL DEFAULT '' AFTER `article_text`");
|
||||
}
|
||||
};
|
||||
|
||||
$down = function () use ($db) {
|
||||
if ($db->hasColumn(TABLE_PREFIX . 'news', 'article_text')) {
|
||||
$db->dropColumn(TABLE_PREFIX . 'news', 'article_text');
|
||||
}
|
||||
|
||||
if ($db->hasColumn(TABLE_PREFIX . 'news', 'article_image')) {
|
||||
$db->dropColumn(TABLE_PREFIX . 'news', 'article_image');
|
||||
}
|
||||
};
|
||||
?>
|
@@ -1,11 +1,5 @@
|
||||
<?php
|
||||
/**
|
||||
* @var OTS_DB_MySQL $db
|
||||
*/
|
||||
|
||||
$up = function () use ($db) {
|
||||
$db->modifyColumn(TABLE_PREFIX . 'faq', 'answer', "VARCHAR(1020) NOT NULL DEFAULT ''");
|
||||
$db->modifyColumn(TABLE_PREFIX . 'movies', 'title', "VARCHAR(100) NOT NULL DEFAULT ''");
|
||||
$db->modifyColumn(TABLE_PREFIX . 'news', 'title', "VARCHAR(100) NOT NULL DEFAULT ''");
|
||||
$db->modifyColumn(TABLE_PREFIX . 'news', 'body', "TEXT NOT NULL");
|
||||
};
|
||||
$db->query("ALTER TABLE `" . TABLE_PREFIX . "faq` MODIFY `answer` VARCHAR(1020) NOT NULL DEFAULT '';");
|
||||
$db->query("ALTER TABLE `" . TABLE_PREFIX . "movies` MODIFY `title` VARCHAR(100) NOT NULL DEFAULT '';");
|
||||
$db->query("ALTER TABLE `" . TABLE_PREFIX . "news` MODIFY `title` VARCHAR(100) NOT NULL DEFAULT '';");
|
||||
$db->query("ALTER TABLE `" . TABLE_PREFIX . "news` MODIFY `body` TEXT NOT NULL DEFAULT '';");
|
||||
|
@@ -2,33 +2,20 @@
|
||||
|
||||
use MyAAC\Settings;
|
||||
|
||||
function updateHighscoresIdsHidden(): void
|
||||
{
|
||||
global $db;
|
||||
|
||||
if (!$db->hasTable('players')) {
|
||||
if (!$db->hasTable('players')) {
|
||||
return;
|
||||
}
|
||||
|
||||
$query = $db->query("SELECT `id` FROM `players` WHERE (`name` = " . $db->quote("Rook Sample") . " OR `name` = " . $db->quote("Sorcerer Sample") . " OR `name` = " . $db->quote("Druid Sample") . " OR `name` = " . $db->quote("Paladin Sample") . " OR `name` = " . $db->quote("Knight Sample") . " OR `name` = " . $db->quote("Account Manager") . ") ORDER BY `id`;");
|
||||
|
||||
$highscores_ignored_ids = array();
|
||||
if ($query->rowCount() > 0) {
|
||||
foreach ($query->fetchAll() as $result)
|
||||
$highscores_ignored_ids[] = $result['id'];
|
||||
} else {
|
||||
$highscores_ignored_ids[] = 0;
|
||||
}
|
||||
|
||||
$settings = Settings::getInstance();
|
||||
$settings->updateInDatabase('core', 'highscores_ids_hidden', implode(', ', $highscores_ignored_ids));
|
||||
}
|
||||
|
||||
$up = function () {
|
||||
updateHighscoresIdsHidden();
|
||||
};
|
||||
$query = $db->query("SELECT `id` FROM `players` WHERE (`name` = " . $db->quote("Rook Sample") . " OR `name` = " . $db->quote("Sorcerer Sample") . " OR `name` = " . $db->quote("Druid Sample") . " OR `name` = " . $db->quote("Paladin Sample") . " OR `name` = " . $db->quote("Knight Sample") . " OR `name` = " . $db->quote("Account Manager") . ") ORDER BY `id`;");
|
||||
|
||||
$down = function () {
|
||||
$settings = Settings::getInstance();
|
||||
$settings->updateInDatabase('core', 'highscores_ids_hidden', '0');
|
||||
};
|
||||
$highscores_ignored_ids = array();
|
||||
if($query->rowCount() > 0) {
|
||||
foreach($query->fetchAll() as $result)
|
||||
$highscores_ignored_ids[] = $result['id'];
|
||||
}
|
||||
else {
|
||||
$highscores_ignored_ids[] = 0;
|
||||
}
|
||||
|
||||
$settings = Settings::getInstance();
|
||||
$settings->updateInDatabase('core', 'highscores_ids_hidden', implode(', ', $highscores_ignored_ids));
|
||||
|
@@ -1,23 +1,14 @@
|
||||
<?php
|
||||
/**
|
||||
* @var OTS_DB_MySQL $db
|
||||
*/
|
||||
|
||||
$up = function () use ($db) {
|
||||
$db->addColumn(TABLE_PREFIX . 'forum', 'post_html', 'TINYINT(1) NOT NULL DEFAULT 0 AFTER `post_smile`');
|
||||
$db->exec("ALTER TABLE `" . TABLE_PREFIX . "forum` ADD `post_html` TINYINT(1) NOT NULL DEFAULT 0 AFTER `post_smile`;");
|
||||
|
||||
$query = $db->query("SELECT `id` FROM `" . TABLE_PREFIX . "forum_boards` WHERE `name` LIKE " . $db->quote('News') . " LIMIT 1;");
|
||||
if ($query->rowCount() == 0) {
|
||||
$query = $db->query("SELECT `id` FROM `" . TABLE_PREFIX . "forum_boards` WHERE `name` LIKE " . $db->quote('News') . " LIMIT 1;");
|
||||
if($query->rowCount() == 0) {
|
||||
return; // don't make anything
|
||||
}
|
||||
}
|
||||
|
||||
$query = $query->fetch();
|
||||
$id = $query['id'];
|
||||
$query = $query->fetch();
|
||||
$id = $query['id'];
|
||||
|
||||
// update all forum threads with is_html = 1
|
||||
$db->exec("UPDATE `" . TABLE_PREFIX . "forum` SET `post_html` = 1 WHERE `section` = " . $id . " AND `id` = `first_post`;");
|
||||
};
|
||||
|
||||
$down = function () use ($db) {
|
||||
$db->dropColumn(TABLE_PREFIX . 'forum', 'post_html');
|
||||
};
|
||||
// update all forum threads with is_html = 1
|
||||
$db->exec("UPDATE `" . TABLE_PREFIX . "forum` SET `post_html` = 1 WHERE `section` = " . $id . " AND `id` = `first_post`;");
|
@@ -1,10 +0,0 @@
|
||||
CREATE TABLE `z_polls` (
|
||||
`id` int(11) NOT NULL auto_increment,
|
||||
`question` varchar(255) NOT NULL,
|
||||
`description` varchar(255) NOT NULL,
|
||||
`end` int(11) NOT NULL DEFAULT 0,
|
||||
`start` int(11) NOT NULL DEFAULT 0,
|
||||
`answers` int(11) NOT NULL DEFAULT 0,
|
||||
`votes_all` int(11) NOT NULL DEFAULT 0,
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8;
|
@@ -1,6 +0,0 @@
|
||||
CREATE TABLE `z_polls_answers` (
|
||||
`poll_id` int(11) NOT NULL,
|
||||
`answer_id` int(11) NOT NULL,
|
||||
`answer` varchar(255) NOT NULL,
|
||||
`votes` int(11) NOT NULL DEFAULT 0
|
||||
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8;
|
@@ -1,35 +1,31 @@
|
||||
<?php
|
||||
/**
|
||||
* @var OTS_DB_MySQL $db
|
||||
*/
|
||||
|
||||
$up = function () use ($db) {
|
||||
if (!$db->hasTable('z_polls')) {
|
||||
$db->exec(file_get_contents(__DIR__ . '/22-z_polls.sql'));
|
||||
}
|
||||
if(!$db->hasTable('z_polls'))
|
||||
$db->query('
|
||||
CREATE TABLE `z_polls` (
|
||||
`id` int(11) NOT NULL auto_increment,
|
||||
`question` varchar(255) NOT NULL,
|
||||
`description` varchar(255) NOT NULL,
|
||||
`end` int(11) NOT NULL DEFAULT 0,
|
||||
`start` int(11) NOT NULL DEFAULT 0,
|
||||
`answers` int(11) NOT NULL DEFAULT 0,
|
||||
`votes_all` int(11) NOT NULL DEFAULT 0,
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8;
|
||||
');
|
||||
|
||||
if (!$db->hasTable('z_polls_answers')) {
|
||||
$db->exec(file_get_contents(__DIR__ . '/22-z_polls_answers.sql'));
|
||||
}
|
||||
if(!$db->hasTable('z_polls_answers'))
|
||||
$db->query('
|
||||
CREATE TABLE `z_polls_answers` (
|
||||
`poll_id` int(11) NOT NULL,
|
||||
`answer_id` int(11) NOT NULL,
|
||||
`answer` varchar(255) NOT NULL,
|
||||
`votes` int(11) NOT NULL DEFAULT 0
|
||||
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8;
|
||||
');
|
||||
|
||||
if (!$db->hasColumn('accounts', 'vote')) {
|
||||
$db->addColumn('accounts', 'vote', 'int(11) NOT NULL DEFAULT 0');
|
||||
}
|
||||
else {
|
||||
$db->modifyColumn('accounts', 'vote', 'int(11) NOT NULL DEFAULT 0');
|
||||
}
|
||||
};
|
||||
|
||||
$down = function () use ($db) {
|
||||
if ($db->hasTable('z_polls')) {
|
||||
$db->dropTable('z_polls;');
|
||||
}
|
||||
|
||||
if ($db->hasTable('z_polls_answers')) {
|
||||
$db->dropTable('z_polls_answers');
|
||||
}
|
||||
|
||||
if ($db->hasColumn('accounts', 'vote')) {
|
||||
$db->dropColumn('accounts', 'vote');
|
||||
}
|
||||
};
|
||||
if(!$db->hasColumn('accounts', 'vote'))
|
||||
$db->query('ALTER TABLE `accounts` ADD `vote` INT( 11 ) DEFAULT 0 NOT NULL ;');
|
||||
else {
|
||||
$db->query('ALTER TABLE `accounts` MODIFY `vote` INT( 11 ) DEFAULT 0 NOT NULL ;');
|
||||
}
|
@@ -1,24 +1,7 @@
|
||||
<?php
|
||||
/**
|
||||
* @var OTS_DB_MySQL $db
|
||||
*/
|
||||
|
||||
$up = function () use ($db) {
|
||||
if (!$db->hasColumn(TABLE_PREFIX . 'menu', 'blank')) {
|
||||
$db->addColumn(TABLE_PREFIX . 'menu', 'blank', 'TINYINT(1) NOT NULL DEFAULT 0 AFTER `link`');
|
||||
}
|
||||
if(!$db->hasColumn(TABLE_PREFIX . 'menu', 'blank'))
|
||||
$db->query("ALTER TABLE `" . TABLE_PREFIX . "menu` ADD `blank` TINYINT(1) NOT NULL DEFAULT 0 AFTER `link`;");
|
||||
|
||||
if (!$db->hasColumn(TABLE_PREFIX . 'menu', 'color')) {
|
||||
$db->addColumn(TABLE_PREFIX . 'menu', 'color', "CHAR(6) NOT NULL DEFAULT '' AFTER `blank`");
|
||||
}
|
||||
};
|
||||
|
||||
$down = function () use ($db) {
|
||||
if ($db->hasColumn(TABLE_PREFIX . 'menu', 'blank')) {
|
||||
$db->dropColumn(TABLE_PREFIX . 'menu', 'blank');
|
||||
}
|
||||
|
||||
if ($db->hasColumn(TABLE_PREFIX . 'menu', 'color')) {
|
||||
$db->dropColumn(TABLE_PREFIX . 'menu', 'color');
|
||||
}
|
||||
};
|
||||
if(!$db->hasColumn(TABLE_PREFIX . 'menu', 'color'))
|
||||
$db->query("ALTER TABLE `" . TABLE_PREFIX . "menu` ADD `color` CHAR(6) NOT NULL DEFAULT '' AFTER `blank`;");
|
@@ -1,9 +0,0 @@
|
||||
CREATE TABLE `myaac_items`
|
||||
(
|
||||
`id` INT(11) NOT NULL,
|
||||
`article` VARCHAR(5) NOT NULL DEFAULT '',
|
||||
`name` VARCHAR(50) NOT NULL DEFAULT '',
|
||||
`plural` VARCHAR(50) NOT NULL DEFAULT '',
|
||||
`attributes` VARCHAR(500) NOT NULL DEFAULT '',
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8;
|
@@ -1,12 +1,3 @@
|
||||
<?php
|
||||
/**
|
||||
* @var OTS_DB_MySQL $db
|
||||
*/
|
||||
|
||||
$up = function () use ($db) {
|
||||
$db->dropTable(TABLE_PREFIX . 'items');
|
||||
};
|
||||
|
||||
$down = function () use ($db) {
|
||||
$db->exec(file_get_contents(__DIR__ . '/24-items.sql'));
|
||||
};
|
||||
$db->exec('DROP TABLE IF EXISTS `' . TABLE_PREFIX . 'items`;');
|
@@ -1,12 +1,3 @@
|
||||
<?php
|
||||
/**
|
||||
* @var OTS_DB_MySQL $db
|
||||
*/
|
||||
|
||||
$up = function () use ($db) {
|
||||
$db->modifyColumn(TABLE_PREFIX . 'monsters', 'loot', 'text NOT NULL');
|
||||
};
|
||||
|
||||
$down = function () {
|
||||
// nothing to do
|
||||
};
|
||||
$db->exec('ALTER TABLE `' . TABLE_PREFIX . 'monsters` MODIFY `loot` text NOT NULL;');
|
@@ -1,32 +1,17 @@
|
||||
<?php
|
||||
/**
|
||||
* @var OTS_DB_MySQL $db
|
||||
*/
|
||||
|
||||
$up = function () use ($db) {
|
||||
if ($db->hasColumn(TABLE_PREFIX . 'spells', 'spell')) {
|
||||
$db->modifyColumn(TABLE_PREFIX . 'spells', 'spell', "VARCHAR(255) NOT NULL DEFAULT ''");
|
||||
}
|
||||
if($db->hasColumn(TABLE_PREFIX . 'spells', 'spell')) {
|
||||
$db->exec('ALTER TABLE `' . TABLE_PREFIX . "spells` MODIFY `spell` VARCHAR(255) NOT NULL DEFAULT '';");
|
||||
}
|
||||
|
||||
if ($db->hasColumn(TABLE_PREFIX . 'spells', 'words')) {
|
||||
$db->modifyColumn(TABLE_PREFIX . 'spells', 'words', "VARCHAR(255) NOT NULL DEFAULT ''");
|
||||
}
|
||||
if($db->hasColumn(TABLE_PREFIX . 'spells', 'words')) {
|
||||
$db->exec('ALTER TABLE `' . TABLE_PREFIX . "spells` MODIFY `words` VARCHAR(255) NOT NULL DEFAULT '';");
|
||||
}
|
||||
|
||||
if (!$db->hasColumn(TABLE_PREFIX . 'spells', 'conjure_id')) {
|
||||
$db->addColumn(TABLE_PREFIX . 'spells', 'conjure_id', 'INT(11) NOT NULL DEFAULT 0 AFTER `soul`');
|
||||
}
|
||||
if(!$db->hasColumn(TABLE_PREFIX . 'spells', 'conjure_id')) {
|
||||
$db->exec('ALTER TABLE `' . TABLE_PREFIX . 'spells` ADD `conjure_id` INT(11) NOT NULL DEFAULT 0 AFTER `soul`;');
|
||||
}
|
||||
|
||||
if (!$db->hasColumn(TABLE_PREFIX . 'spells', 'reagent')) {
|
||||
$db->addColumn(TABLE_PREFIX . 'spells', 'reagent', 'INT(11) NOT NULL DEFAULT 0 AFTER `conjure_count`');
|
||||
}
|
||||
};
|
||||
|
||||
$down = function () use ($db) {
|
||||
if ($db->hasColumn(TABLE_PREFIX . 'spells', 'conjure_id')) {
|
||||
$db->dropColumn(TABLE_PREFIX . 'spells', 'conjure_id');
|
||||
}
|
||||
|
||||
if ($db->hasColumn(TABLE_PREFIX . 'spells', 'reagent')) {
|
||||
$db->dropColumn(TABLE_PREFIX . 'spells', 'reagent');
|
||||
}
|
||||
};
|
||||
if(!$db->hasColumn(TABLE_PREFIX . 'spells', 'reagent')) {
|
||||
$db->exec('ALTER TABLE `' . TABLE_PREFIX . 'spells` ADD `reagent` INT(11) NOT NULL DEFAULT 0 AFTER `conjure_count`;');
|
||||
}
|
||||
|
@@ -1,22 +0,0 @@
|
||||
<table class="myaac-table" style="border-collapse: collapse; width: 100%; height: 72px; border-width: 1px;" border="1"><colgroup><col style="width: 50%;"><col style="width: 50%;"></colgroup>
|
||||
<thead>
|
||||
<tr style="height: 18px;">
|
||||
<td style="height: 18px; border-width: 1px; text-align: center;"><span style="color: #ffffff;"><strong>Words</strong></span></td>
|
||||
<td style="height: 18px; border-width: 1px; text-align: center;"><strong>Description</strong></td>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr style="height: 18px;">
|
||||
<td style="height: 18px; border-width: 1px;">!example</td>
|
||||
<td style="height: 18px; border-width: 1px;">This is just an example</td>
|
||||
</tr>
|
||||
<tr style="height: 18px;">
|
||||
<td style="height: 18px; border-width: 1px;">!buyhouse</td>
|
||||
<td style="height: 18px; border-width: 1px;">Buy house you are looking at</td>
|
||||
</tr>
|
||||
<tr style="height: 18px;">
|
||||
<td style="height: 18px; border-width: 1px;"><em>!aol</em></td>
|
||||
<td style="height: 18px; border-width: 1px;">Buy AoL</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
@@ -1,6 +0,0 @@
|
||||
<p> </p>
|
||||
<p> </p>
|
||||
<div style="text-align: center;">We're using official Tibia Client <strong>{{ config.client / 100 }}</strong><br>
|
||||
<p>Download Tibia Client <strong>{{ config.client / 100 }}</strong> for Windows <a href="https://drive.google.com/drive/folders/0B2-sMQkWYzhGSFhGVlY2WGk5czQ" target="_blank" rel="noopener">HERE</a>.</p>
|
||||
<h2>IP Changer:</h2>
|
||||
<a href="https://static.otland.net/ipchanger.exe" target="_blank" rel="noopener">HERE</a></div>
|
@@ -1,48 +1,47 @@
|
||||
<?php
|
||||
/**
|
||||
* @var OTS_DB_MySQL $db
|
||||
*/
|
||||
|
||||
use MyAAC\Models\Pages;
|
||||
$downloadsPage = <<<HTML
|
||||
<p> </p>
|
||||
<p> </p>
|
||||
<div style="text-align: center;">We're using official Tibia Client <strong>{{ config.client / 100 }}</strong><br>
|
||||
<p>Download Tibia Client <strong>{{ config.client / 100 }}</strong> for Windows <a href="https://drive.google.com/drive/folders/0B2-sMQkWYzhGSFhGVlY2WGk5czQ" target="_blank" rel="noopener">HERE</a>.</p>
|
||||
<h2>IP Changer:</h2>
|
||||
<a href="https://static.otland.net/ipchanger.exe" target="_blank" rel="noopener">HERE</a></div>
|
||||
HTML;
|
||||
|
||||
$up = function () use ($db) {
|
||||
$downloadsModel = Pages::where('name', 'downloads')->first();
|
||||
if (!$downloadsModel) {
|
||||
$db->insert(TABLE_PREFIX . 'pages', [
|
||||
'name' => 'downloads',
|
||||
'title' => 'Downloads',
|
||||
'body' => file_get_contents(__DIR__ . '/27-downloads.html'),
|
||||
'date' => time(),
|
||||
'player_id' => 1,
|
||||
'php' => 0,
|
||||
'access' => 0,
|
||||
($db->hasColumn(TABLE_PREFIX . 'pages', 'hide') ? 'hide' : 'hidden') => 0,
|
||||
]);
|
||||
}
|
||||
$query = $db->query("SELECT `id` FROM `" . TABLE_PREFIX . "pages` WHERE `name` LIKE " . $db->quote('downloads') . " LIMIT 1;");
|
||||
if($query->rowCount() === 0) {
|
||||
$db->exec("INSERT INTO `myaac_pages` (`id`, `name`, `title`, `body`, `date`, `player_id`, `php`, `access`, `hide`) VALUES
|
||||
(null, 'downloads', 'Downloads', {$db->quote($downloadsPage)}, 0, 1, 0, 0, 0);");
|
||||
}
|
||||
|
||||
$commandsModel = Pages::where('name', 'commands')->first();
|
||||
if (!$commandsModel) {
|
||||
$db->insert(TABLE_PREFIX . 'pages', [
|
||||
'name' => 'commands',
|
||||
'title' => 'Commands',
|
||||
'body' => file_get_contents(__DIR__ . '/27-commands.html'),
|
||||
'date' => time(),
|
||||
'player_id' => 1,
|
||||
'php' => 0,
|
||||
'access' => 0,
|
||||
($db->hasColumn(TABLE_PREFIX . 'pages', 'hide') ? 'hide' : 'hidden') => 0,
|
||||
]);
|
||||
}
|
||||
};
|
||||
$commandsPage = <<<HTML
|
||||
<table class="myaac-table" style="border-collapse: collapse; width: 100%; height: 72px; border-width: 1px;" border="1"><colgroup><col style="width: 50%;"><col style="width: 50%;"></colgroup>
|
||||
<thead>
|
||||
<tr style="height: 18px;">
|
||||
<td style="height: 18px; border-width: 1px; text-align: center;"><span style="color: #ffffff;"><strong>Words</strong></span></td>
|
||||
<td style="height: 18px; border-width: 1px; text-align: center;"><strong>Description</strong></td>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr style="height: 18px;">
|
||||
<td style="height: 18px; border-width: 1px;">!example</td>
|
||||
<td style="height: 18px; border-width: 1px;">This is just an example</td>
|
||||
</tr>
|
||||
<tr style="height: 18px;">
|
||||
<td style="height: 18px; border-width: 1px;">!buyhouse</td>
|
||||
<td style="height: 18px; border-width: 1px;">Buy house you are looking at</td>
|
||||
</tr>
|
||||
<tr style="height: 18px;">
|
||||
<td style="height: 18px; border-width: 1px;"><em>!aol</em></td>
|
||||
<td style="height: 18px; border-width: 1px;">Buy AoL</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
HTML;
|
||||
|
||||
$down = function () {
|
||||
$downloadsModel = Pages::where('name', 'downloads')->first();
|
||||
if ($downloadsModel) {
|
||||
$downloadsModel->delete();
|
||||
}
|
||||
|
||||
$commandsModel = Pages::where('name', 'commands')->first();
|
||||
if ($commandsModel) {
|
||||
$commandsModel->delete();
|
||||
}
|
||||
};
|
||||
$query = $db->query("SELECT `id` FROM `" . TABLE_PREFIX . "pages` WHERE `name` LIKE " . $db->quote('commands') . " LIMIT 1;");
|
||||
if($query->rowCount() === 0) {
|
||||
$db->exec("INSERT INTO `myaac_pages` (`id`, `name`, `title`, `body`, `date`, `player_id`, `php`, `access`, `hide`) VALUES
|
||||
(null, 'commands', 'Commands', {$db->quote($commandsPage)}, 0, 1, 0, 0, 0);");
|
||||
}
|
||||
|
@@ -1,10 +0,0 @@
|
||||
CREATE TABLE `myaac_hooks`
|
||||
(
|
||||
`id` INT(11) NOT NULL AUTO_INCREMENT,
|
||||
`name` VARCHAR(30) NOT NULL DEFAULT '',
|
||||
`type` INT(2) NOT NULL DEFAULT 0,
|
||||
`file` VARCHAR(100) NOT NULL,
|
||||
`ordering` INT(11) NOT NULL DEFAULT 0,
|
||||
`enabled` INT(1) NOT NULL DEFAULT 1,
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8;
|
@@ -1,25 +1,10 @@
|
||||
<?php
|
||||
/**
|
||||
* @var OTS_DB_MySQL $db
|
||||
*/
|
||||
|
||||
use MyAAC\Cache\Cache;
|
||||
|
||||
$up = function () use ($db) {
|
||||
$db->dropTable(TABLE_PREFIX . 'hooks');
|
||||
$db->exec('DROP TABLE IF EXISTS `' . TABLE_PREFIX . 'hooks`;');
|
||||
|
||||
$cache = Cache::getInstance();
|
||||
if($cache->enabled()) {
|
||||
$cache = Cache::getInstance();
|
||||
if($cache->enabled()) {
|
||||
$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,16 +1,5 @@
|
||||
<?php
|
||||
/**
|
||||
* @var OTS_DB_MySQL $db
|
||||
*/
|
||||
|
||||
$up = function () use ($db) {
|
||||
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');
|
||||
}
|
||||
};
|
||||
if(!$db->hasColumn(TABLE_PREFIX . 'pages', 'enable_tinymce')) {
|
||||
$db->exec('ALTER TABLE `' . TABLE_PREFIX . 'pages` ADD `enable_tinymce` TINYINT(1) NOT NULL DEFAULT 1 COMMENT \'1 - enabled, 0 - disabled\' AFTER `php`;');
|
||||
}
|
||||
|
@@ -1,15 +1,3 @@
|
||||
<?php
|
||||
/**
|
||||
* @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');
|
||||
};
|
||||
$db->query("ALTER TABLE `" . TABLE_PREFIX . "account_actions` ADD `ipv6` BINARY(16) NOT NULL DEFAULT 0;");
|
||||
?>
|
@@ -1,25 +0,0 @@
|
||||
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,27 +1,31 @@
|
||||
<?php
|
||||
|
||||
use MyAAC\Models\Pages;
|
||||
$query = $db->query("SELECT `id` FROM `" . TABLE_PREFIX . "pages` WHERE `name` LIKE " . $db->quote('rules_on_the_page') . " LIMIT 1;");
|
||||
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\").
|
||||
|
||||
$up = function () {
|
||||
$rulesOnPage = Pages::where('name', 'rules_on_the_page')->first();
|
||||
if (!$rulesOnPage) {
|
||||
Pages::create([
|
||||
'name' => 'rules_on_the_page',
|
||||
'title' => 'Rules',
|
||||
'body' => file_get_contents(__DIR__ . '/30-rules.txt'),
|
||||
'date' => time(),
|
||||
'player_id' => 1,
|
||||
'php' => 0,
|
||||
'enable_tinymce' => 0,
|
||||
'access' => 0,
|
||||
'hidden' => 0,
|
||||
]);
|
||||
}
|
||||
};
|
||||
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\").
|
||||
|
||||
$down = function () {
|
||||
$rulesOnPage = Pages::where('name', 'rules_on_the_page')->first();
|
||||
if ($rulesOnPage) {
|
||||
Pages::where('name', 'rules_on_the_page')->delete();
|
||||
}
|
||||
};
|
||||
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.', 0, 1, 0, 0, 0, 0);");
|
||||
}
|
||||
|
@@ -1,121 +1,57 @@
|
||||
<?php
|
||||
/**
|
||||
* @var OTS_DB_MySQL $db
|
||||
*/
|
||||
|
||||
$up = function () use ($db) {
|
||||
if(!$db->hasColumn(TABLE_PREFIX . 'monsters', 'elements')) {
|
||||
$db->addColumn(TABLE_PREFIX . 'monsters', 'elements', "TEXT NOT NULL AFTER `immunities`");
|
||||
}
|
||||
if(!$db->hasColumn(TABLE_PREFIX . 'monsters', 'elements')) {
|
||||
$db->exec("ALTER TABLE `" . TABLE_PREFIX . "monsters` ADD `elements` TEXT NOT NULL AFTER `immunities`;");
|
||||
}
|
||||
|
||||
if(!$db->hasColumn(TABLE_PREFIX . 'monsters', 'pushable')) {
|
||||
$db->addColumn(TABLE_PREFIX . 'monsters', 'pushable', "TINYINT(1) NOT NULL DEFAULT '0' AFTER `convinceable`");
|
||||
}
|
||||
if(!$db->hasColumn(TABLE_PREFIX . 'monsters', 'pushable')) {
|
||||
$db->exec("ALTER TABLE `" . TABLE_PREFIX . "monsters` ADD `pushable` TINYINT(1) NOT NULL DEFAULT '0' AFTER `convinceable`;");
|
||||
}
|
||||
|
||||
if(!$db->hasColumn(TABLE_PREFIX . 'monsters', 'canpushitems')) {
|
||||
$db->addColumn(TABLE_PREFIX . 'monsters', 'canpushitems', "TINYINT(1) NOT NULL DEFAULT '0' AFTER `pushable`");
|
||||
}
|
||||
if(!$db->hasColumn(TABLE_PREFIX . 'monsters', 'canpushitems')) {
|
||||
$db->exec("ALTER TABLE `" . TABLE_PREFIX . "monsters` ADD `canpushitems` TINYINT(1) NOT NULL DEFAULT '0' AFTER `pushable`;");
|
||||
}
|
||||
|
||||
if(!$db->hasColumn(TABLE_PREFIX . 'monsters', 'canpushcreatures')) {
|
||||
$db->addColumn(TABLE_PREFIX . 'monsters', 'canpushcreatures', "TINYINT(1) NOT NULL DEFAULT '0' AFTER `canpushitems`");
|
||||
}
|
||||
if(!$db->hasColumn(TABLE_PREFIX . 'monsters', 'canpushcreatures')) {
|
||||
$db->exec("ALTER TABLE `" . TABLE_PREFIX . "monsters` ADD `canpushcreatures` TINYINT(1) NOT NULL DEFAULT '0' AFTER `canpushitems`;");
|
||||
}
|
||||
|
||||
if(!$db->hasColumn(TABLE_PREFIX . 'monsters', 'canwalkonenergy')) {
|
||||
$db->addColumn(TABLE_PREFIX . 'monsters', 'canwalkonenergy', "TINYINT(1) NOT NULL DEFAULT '0' AFTER `canpushitems`");
|
||||
}
|
||||
if(!$db->hasColumn(TABLE_PREFIX . 'monsters', 'canwalkonenergy')) {
|
||||
$db->exec("ALTER TABLE `" . TABLE_PREFIX . "monsters` ADD `canwalkonenergy` TINYINT(1) NOT NULL DEFAULT '0' AFTER `canpushitems`;");
|
||||
}
|
||||
|
||||
if(!$db->hasColumn(TABLE_PREFIX . 'monsters', 'canwalkonpoison')) {
|
||||
$db->addColumn(TABLE_PREFIX . 'monsters', 'canwalkonpoison', "TINYINT(1) NOT NULL DEFAULT '0' AFTER `canwalkonenergy`");
|
||||
}
|
||||
if(!$db->hasColumn(TABLE_PREFIX . 'monsters', 'canwalkonpoison')) {
|
||||
$db->exec("ALTER TABLE `" . TABLE_PREFIX . "monsters` ADD `canwalkonpoison` TINYINT(1) NOT NULL DEFAULT '0' AFTER `canwalkonenergy`;");
|
||||
}
|
||||
|
||||
if(!$db->hasColumn(TABLE_PREFIX . 'monsters', 'canwalkonfire')) {
|
||||
$db->addColumn(TABLE_PREFIX . 'monsters', 'canwalkonfire', "TINYINT(1) NOT NULL DEFAULT '0' AFTER `canwalkonpoison`");
|
||||
}
|
||||
if(!$db->hasColumn(TABLE_PREFIX . 'monsters', 'canwalkonfire')) {
|
||||
$db->exec("ALTER TABLE `" . TABLE_PREFIX . "monsters` ADD `canwalkonfire` TINYINT(1) NOT NULL DEFAULT '0' AFTER `canwalkonpoison`;");
|
||||
}
|
||||
|
||||
if(!$db->hasColumn(TABLE_PREFIX . 'monsters', 'runonhealth')) {
|
||||
$db->addColumn(TABLE_PREFIX . 'monsters', 'runonhealth', "TINYINT(1) NOT NULL DEFAULT '0' AFTER `canwalkonfire`");
|
||||
}
|
||||
if(!$db->hasColumn(TABLE_PREFIX . 'monsters', 'runonhealth')) {
|
||||
$db->exec("ALTER TABLE `" . TABLE_PREFIX . "monsters` ADD `runonhealth` TINYINT(1) NOT NULL DEFAULT '0' AFTER `canwalkonfire`;");
|
||||
}
|
||||
|
||||
if(!$db->hasColumn(TABLE_PREFIX . 'monsters', 'hostile')) {
|
||||
$db->addColumn(TABLE_PREFIX . 'monsters', 'hostile', "TINYINT(1) NOT NULL DEFAULT '0' AFTER `runonhealth`");
|
||||
}
|
||||
if(!$db->hasColumn(TABLE_PREFIX . 'monsters', 'hostile')) {
|
||||
$db->exec("ALTER TABLE `" . TABLE_PREFIX . "monsters` ADD `hostile` TINYINT(1) NOT NULL DEFAULT '0' AFTER `runonhealth`;");
|
||||
}
|
||||
|
||||
if(!$db->hasColumn(TABLE_PREFIX . 'monsters', 'attackable')) {
|
||||
$db->addColumn(TABLE_PREFIX . 'monsters', 'attackable', "TINYINT(1) NOT NULL DEFAULT '0' AFTER `hostile`");
|
||||
}
|
||||
if(!$db->hasColumn(TABLE_PREFIX . 'monsters', 'attackable')) {
|
||||
$db->exec("ALTER TABLE `" . TABLE_PREFIX . "monsters` ADD `attackable` TINYINT(1) NOT NULL DEFAULT '0' AFTER `hostile`;");
|
||||
}
|
||||
|
||||
if(!$db->hasColumn(TABLE_PREFIX . 'monsters', 'rewardboss')) {
|
||||
$db->addColumn(TABLE_PREFIX . 'monsters', 'rewardboss', "TINYINT(1) NOT NULL DEFAULT '0' AFTER `attackable`");
|
||||
}
|
||||
if(!$db->hasColumn(TABLE_PREFIX . 'monsters', 'rewardboss')) {
|
||||
$db->exec("ALTER TABLE `" . TABLE_PREFIX . "monsters` ADD `rewardboss` TINYINT(1) NOT NULL DEFAULT '0' AFTER `attackable`;");
|
||||
}
|
||||
|
||||
if(!$db->hasColumn(TABLE_PREFIX . 'monsters', 'defense')) {
|
||||
$db->addColumn(TABLE_PREFIX . 'monsters', 'defense', "INT(11) NOT NULL DEFAULT '0' AFTER `rewardboss`");
|
||||
}
|
||||
if(!$db->hasColumn(TABLE_PREFIX . 'monsters', 'defense')) {
|
||||
$db->exec("ALTER TABLE `" . TABLE_PREFIX . "monsters` ADD `defense` INT(11) NOT NULL DEFAULT '0' AFTER `rewardboss`;");
|
||||
}
|
||||
|
||||
if(!$db->hasColumn(TABLE_PREFIX . 'monsters', 'armor')) {
|
||||
$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', 'armor')) {
|
||||
$db->exec("ALTER TABLE `" . TABLE_PREFIX . "monsters` ADD `armor` INT(11) NOT NULL DEFAULT '0' AFTER `defense`;");
|
||||
}
|
||||
|
||||
if(!$db->hasColumn(TABLE_PREFIX . 'monsters', 'summons')) {
|
||||
$db->exec("ALTER TABLE `" . TABLE_PREFIX . "monsters` ADD `summons` TEXT NOT NULL AFTER `loot`;");
|
||||
}
|
||||
|
@@ -1,14 +1,4 @@
|
||||
<?php
|
||||
/**
|
||||
* @var OTS_DB_MySQL $db
|
||||
*/
|
||||
|
||||
// Increase size of page in myaac_visitors table
|
||||
|
||||
$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
|
||||
};
|
||||
$db->exec('ALTER TABLE `' . TABLE_PREFIX . "visitors` MODIFY `page` VARCHAR(2048) NOT NULL;");
|
||||
|
@@ -1,16 +1,6 @@
|
||||
<?php
|
||||
/**
|
||||
* @var OTS_DB_MySQL $db
|
||||
*/
|
||||
|
||||
// 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
|
||||
// the size of ipv6 can be maximal 45 chars
|
||||
|
||||
$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
|
||||
};
|
||||
$db->exec('ALTER TABLE `' . TABLE_PREFIX . "visitors` MODIFY `ip` VARCHAR(45) NOT NULL;");
|
||||
|
@@ -1,18 +1,4 @@
|
||||
<?php
|
||||
/**
|
||||
* @var OTS_DB_MySQL $db
|
||||
*/
|
||||
|
||||
// add user_agent column into visitors
|
||||
|
||||
$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');
|
||||
}
|
||||
};
|
||||
$db->exec('ALTER TABLE `' . TABLE_PREFIX . "visitors` ADD `user_agent` VARCHAR(255) NOT NULL DEFAULT '';");
|
||||
|
@@ -1,17 +1,3 @@
|
||||
<?php
|
||||
/**
|
||||
* @var OTS_DB_MySQL $db
|
||||
*/
|
||||
|
||||
// add look column
|
||||
$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');
|
||||
}
|
||||
};
|
||||
$db->exec('ALTER TABLE `' . TABLE_PREFIX . "monsters` ADD `look` VARCHAR(255) NOT NULL DEFAULT '' AFTER `health`;");
|
@@ -1,9 +0,0 @@
|
||||
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,18 +1,14 @@
|
||||
<?php
|
||||
/**
|
||||
* @var OTS_DB_MySQL $db
|
||||
*/
|
||||
|
||||
$up = function () use ($db) {
|
||||
// add settings table
|
||||
if (!$db->hasTable(TABLE_PREFIX . 'settings')) {
|
||||
$db->exec(file_get_contents(__DIR__ . '/36-settings.sql'));
|
||||
}
|
||||
};
|
||||
|
||||
$down = function () {
|
||||
// will break the aac
|
||||
//if ($db->hasTable(TABLE_PREFIX . 'settings')) {
|
||||
// $db->dropTable(TABLE_PREFIX . 'settings');
|
||||
//}
|
||||
};
|
||||
// add settings table
|
||||
if(!$db->hasTable(TABLE_PREFIX . 'settings')) {
|
||||
$db->exec("CREATE TABLE `" . TABLE_PREFIX . "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;");
|
||||
}
|
||||
|
@@ -5,10 +5,4 @@
|
||||
|
||||
use MyAAC\Models\Pages;
|
||||
|
||||
$up = function () {
|
||||
Pages::query()->where('access', 1)->update(['access' => 0]);
|
||||
};
|
||||
|
||||
$down = function () {
|
||||
Pages::query()->where('access', 0)->update(['access' => 1]);
|
||||
};
|
||||
Pages::query()->where('access', 1)->update(['access' => 0]);
|
||||
|
@@ -1,16 +1,5 @@
|
||||
<?php
|
||||
/**
|
||||
* @var OTS_DB_MySQL $db
|
||||
*/
|
||||
|
||||
// 2023-11-11
|
||||
// execute highscores_ids_hidden once again, cause of settings
|
||||
$up = function () {
|
||||
require_once __DIR__ . '/20.php';
|
||||
updateHighscoresIdsHidden();
|
||||
};
|
||||
|
||||
$down = function () {
|
||||
// there is no downgrade for this
|
||||
};
|
||||
|
||||
require __DIR__ . '/20.php';
|
||||
|
@@ -1,41 +1,18 @@
|
||||
<?php
|
||||
/**
|
||||
* @var OTS_DB_MySQL $db
|
||||
*/
|
||||
|
||||
// 2024-01-27
|
||||
// change hidden to hide (Eloquent model reserved keyword)
|
||||
|
||||
$definition = 'TINYINT(1) NOT NULL DEFAULT 0';
|
||||
if (!$db->hasColumn('players', 'hide')) {
|
||||
$db->exec("ALTER TABLE `players` CHANGE `hidden` `hide` TINYINT(1) NOT NULL DEFAULT 0;");
|
||||
}
|
||||
|
||||
$up = function () use ($db, $definition) {
|
||||
if (!$db->hasColumn('players', 'hide')) {
|
||||
$db->changeColumn('players', 'hidden', 'hide', $definition);
|
||||
}
|
||||
|
||||
$db->changeColumn(TABLE_PREFIX . 'changelog', 'hidden', 'hide', $definition);
|
||||
$db->changeColumn(TABLE_PREFIX . 'faq', 'hidden', 'hide', $definition);
|
||||
$db->changeColumn(TABLE_PREFIX . 'forum_boards', 'hidden', 'hide', $definition);
|
||||
$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);
|
||||
};
|
||||
$db->exec("ALTER TABLE `" . TABLE_PREFIX . "changelog` CHANGE `hidden` `hide` TINYINT(1) NOT NULL DEFAULT 0;");
|
||||
$db->exec("ALTER TABLE `" . TABLE_PREFIX . "faq` CHANGE `hidden` `hide` TINYINT(1) NOT NULL DEFAULT 0;");
|
||||
$db->exec("ALTER TABLE `" . TABLE_PREFIX . "forum_boards` CHANGE `hidden` `hide` TINYINT(1) NOT NULL DEFAULT 0;");
|
||||
$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->exec("ALTER TABLE `" . TABLE_PREFIX . "pages` CHANGE `hidden` `hide` TINYINT(1) NOT NULL DEFAULT 0;");
|
||||
$db->exec("ALTER TABLE `" . TABLE_PREFIX . "gallery` CHANGE `hidden` `hide` TINYINT(1) NOT NULL DEFAULT 0;");
|
||||
$db->exec("ALTER TABLE `" . TABLE_PREFIX . "spells` CHANGE `hidden` `hide` TINYINT(1) NOT NULL DEFAULT 0;");
|
||||
|
@@ -1,16 +1,3 @@
|
||||
<?php
|
||||
/**
|
||||
* @var OTS_DB_MySQL $db
|
||||
*/
|
||||
|
||||
$up = function () use ($db) {
|
||||
if (!$db->hasColumn(TABLE_PREFIX . 'monsters', 'id')) {
|
||||
$db->addColumn(TABLE_PREFIX . 'monsters', 'id', "int(11) NOT NULL AUTO_INCREMENT primary key FIRST");
|
||||
}
|
||||
};
|
||||
|
||||
$down = function () use ($db) {
|
||||
if ($db->hasColumn(TABLE_PREFIX . 'monsters', 'id')) {
|
||||
$db->dropColumn(TABLE_PREFIX . 'monsters', 'id');
|
||||
}
|
||||
};
|
||||
if(!$db->hasColumn(TABLE_PREFIX . 'monsters', 'id'))
|
||||
$db->query("ALTER TABLE `" . TABLE_PREFIX . "monsters` ADD `id` int(11) NOT NULL AUTO_INCREMENT primary key FIRST;");
|
@@ -5,19 +5,8 @@
|
||||
|
||||
use MyAAC\Models\Menu;
|
||||
|
||||
$up = function() {
|
||||
Menu::where('link', 'lastkills')->update(['link' => 'last-kills']);
|
||||
Menu::where('link', 'serverInfo')->update(['link' => 'server-info']);
|
||||
Menu::where('link', 'experienceStages')->update(['link' => 'exp-stages']);
|
||||
Menu::where('link', 'experienceTable')->update(['link' => 'exp-table']);
|
||||
Menu::where('link', 'creatures')->update(['link' => 'monsters']);
|
||||
};
|
||||
|
||||
$down = function() {
|
||||
Menu::where('link', 'last-kills')->update(['link' => 'lastkills']);
|
||||
Menu::where('link', 'server-info')->update(['link' => 'serverInfo']);
|
||||
Menu::where('link', 'exp-stages')->update(['link' => 'experienceStages']);
|
||||
Menu::where('link', 'exp-table')->update(['link' => 'experienceTable']);
|
||||
Menu::where('link', 'monsters')->update(['link' => 'creatures']);
|
||||
};
|
||||
|
||||
Menu::where('link', 'lastkills')->update(['link' => 'last-kills']);
|
||||
Menu::where('link', 'serverInfo')->update(['link' => 'server-info']);
|
||||
Menu::where('link', 'experienceStages')->update(['link' => 'exp-stages']);
|
||||
Menu::where('link', 'experienceTable')->update(['link' => 'exp-table']);
|
||||
Menu::where('link', 'creatures')->update(['link' => 'monsters']);
|
||||
|
@@ -1,35 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* Change database tables character set to utf8mb4
|
||||
* Previously it was utf8 (utf8mb3)
|
||||
* utf8 will become utf8mb4 in future releases of mysql
|
||||
*/
|
||||
$tables = [
|
||||
'account_actions', 'admin_menu',
|
||||
'changelog', 'config',
|
||||
'faq', 'forum_boards', 'forum',
|
||||
'gallery',
|
||||
'menu', 'monsters',
|
||||
'news', 'news_categories', 'notepad',
|
||||
'pages',
|
||||
'settings', 'spells',
|
||||
'visitors', 'weapons',
|
||||
];
|
||||
|
||||
$up = function () use ($db, $tables)
|
||||
{
|
||||
foreach ($tables as $table) {
|
||||
if ($db->hasTable(TABLE_PREFIX . $table)) {
|
||||
$db->exec('ALTER TABLE ' . TABLE_PREFIX . $table . ' CONVERT TO CHARACTER SET utf8mb4');
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
$down = function () use ($db, $tables)
|
||||
{
|
||||
foreach ($tables as $table) {
|
||||
if ($db->hasTable(TABLE_PREFIX . $table)) {
|
||||
$db->exec('ALTER TABLE ' . TABLE_PREFIX . $table . ' CONVERT TO CHARACTER SET utf8');
|
||||
}
|
||||
}
|
||||
};
|
@@ -1,15 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* @var OTS_DB_MySQL $db
|
||||
*/
|
||||
|
||||
// 2025-09-01
|
||||
// resize forum.post_ip to support ipv6
|
||||
$up = function () use ($db) {
|
||||
$db->modifyColumn(TABLE_PREFIX . 'forum', 'post_ip', "varchar(45) NOT NULL default '0.0.0.0'");
|
||||
};
|
||||
|
||||
$down = function () {
|
||||
// there is no downgrade for this
|
||||
};
|
||||
|
@@ -1,20 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* @var OTS_DB_MySQL $db
|
||||
*/
|
||||
|
||||
// 2025-01-22
|
||||
// change columns to VARCHAR
|
||||
$up = function () use ($db) {
|
||||
$db->query("UPDATE guilds set description = '' WHERE description is NULL;"); // prevent truncate error when column is NULL
|
||||
$db->modifyColumn('guilds', 'description', "VARCHAR(5000) NOT NULL DEFAULT ''");
|
||||
|
||||
$db->query("UPDATE players set comment = '' WHERE comment is NULL;");
|
||||
$db->modifyColumn('players', 'comment', "VARCHAR(5000) NOT NULL DEFAULT ''");
|
||||
};
|
||||
|
||||
$down = function () use ($db) {
|
||||
$db->modifyColumn('guilds', 'description', "TEXT NOT NULL");
|
||||
$db->modifyColumn('players', 'comment', "TEXT NOT NULL");
|
||||
};
|
||||
|
@@ -1,16 +1,4 @@
|
||||
<?php
|
||||
/**
|
||||
* @var OTS_DB_MySQL $db
|
||||
*/
|
||||
|
||||
$up = function () use ($db) {
|
||||
if ($db->hasColumn(TABLE_PREFIX . 'spells', 'cities')) {
|
||||
$db->dropColumn(TABLE_PREFIX . 'spells', 'cities');
|
||||
}
|
||||
};
|
||||
|
||||
$up = function () use ($db) {
|
||||
if ($db->hasColumn(TABLE_PREFIX . 'spells', 'cities')) {
|
||||
$db->addColumn(TABLE_PREFIX . 'spells', 'cities', 'VARCHAR(32) NOT NULL');
|
||||
}
|
||||
};
|
||||
if($db->hasColumn(TABLE_PREFIX . 'spells', 'cities'))
|
||||
$db->query("ALTER TABLE `" . TABLE_PREFIX . "spells` DROP COLUMN cities;");
|
||||
?>
|
@@ -1,16 +1,3 @@
|
||||
<?php
|
||||
/**
|
||||
* @var OTS_DB_MySQL $db
|
||||
*/
|
||||
|
||||
$up = function () use ($db) {
|
||||
if (!$db->hasColumn(TABLE_PREFIX . 'hooks', 'enabled')) {
|
||||
$db->addColumn(TABLE_PREFIX . 'hooks', 'enabled', 'INT(1) NOT NULL DEFAULT 1');
|
||||
}
|
||||
};
|
||||
|
||||
$down = function () use ($db) {
|
||||
if ($db->hasColumn(TABLE_PREFIX . 'hooks', 'enabled')) {
|
||||
$db->dropColumn(TABLE_PREFIX . 'hooks', 'enabled');
|
||||
}
|
||||
};
|
||||
if(!$db->hasColumn(TABLE_PREFIX . 'hooks', 'enabled'))
|
||||
$db->query("ALTER TABLE `" . TABLE_PREFIX . "hooks` ADD `enabled` INT(1) NOT NULL DEFAULT 1;");
|
@@ -1,16 +1,4 @@
|
||||
<?php
|
||||
/**
|
||||
* @var OTS_DB_MySQL $db
|
||||
*/
|
||||
|
||||
$up = function () use ($db) {
|
||||
if ($db->hasColumn(TABLE_PREFIX . 'screenshots', 'name')) {
|
||||
$db->dropColumn(TABLE_PREFIX . 'screenshots', 'name');
|
||||
}
|
||||
};
|
||||
|
||||
$up = function () use ($db) {
|
||||
if (!$db->hasColumn(TABLE_PREFIX . 'screenshots', 'name')) {
|
||||
$db->addColumn(TABLE_PREFIX . 'screenshots', 'name', 'VARCHAR(30) NOT NULL');
|
||||
}
|
||||
};
|
||||
if($db->hasColumn(TABLE_PREFIX . 'screenshots', 'name'))
|
||||
$db->query("ALTER TABLE `" . TABLE_PREFIX . "screenshots` DROP `name`;");
|
||||
?>
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user