Compare commits

...

11 Commits

Author SHA1 Message Date
slawkens
a2f8759a52 Update CHANGELOG-1.x.md 2025-10-27 17:10:16 +01:00
slawkens
4b8c3ffae2 Code smell 2025-10-27 16:55:29 +01:00
slawkens
97321c9e80 Release v1.8.4 2025-10-27 16:43:34 +01:00
Slawomir Boczek
2580edadf8 Database import tables on every install with "IF NOT EXISTS" (#336)
* Database import tables on every install with "IF NOT EXISTS"

This fixed errors when one table is missing or is duplicated

* Add success message on import data

* Reorder
2025-10-27 16:27:22 +01:00
slawkens
8f47b36dc8 Add return type 2025-10-27 15:03:24 +01:00
slawkens
6cd38ee1ec Fix php stan 2025-10-27 14:38:52 +01:00
slawkens
9d92a11fb7 Fix the premium checks, introduced in v1.8.3 2025-10-27 14:34:53 +01:00
slawkens
44110a9496 Show if there is mysql error on import schema
Weird fix, don't know why it didn't worked with query()
2025-10-25 21:32:49 +02:00
slawkens
727f68a575 migrate command: show "Already on latest version" 2025-10-24 21:14:49 +02:00
slawkens
07fd034fe4 Use low level env init on migrate command 2025-10-24 21:12:40 +02:00
slawkens
13ea68cc0c Use low level env init on migrate:run + migrate:to 2025-10-24 21:10:55 +02:00
21 changed files with 251 additions and 125 deletions

View File

@@ -1,5 +1,15 @@
# Changelog
## [1.8.4 - 27.10.2025]
### Changed
* Reimport myaac_ tables on every install, this fixes errors when one table is missing or is duplicated (https://github.com/slawkens/myaac/commit/2580edadf84779f09fd395c21f92019b2c762f83)
* Use custom env init on migrate, migrate:run and migrate:to (https://github.com/slawkens/myaac/commit/13ea68cc0c9349380c8e4051d702a6c2c8256f44, https://github.com/slawkens/myaac/commit/07fd034fe4cb0ffdb88667b1e400f414d0c6d06f)
### Fixed
* Show if there is mysql error on import schema (https://github.com/slawkens/myaac/commit/44110a9496b4385e42c31b75de301037e711b6c3)
* Fix the premium checks, introduced in v1.8.3 (https://github.com/slawkens/myaac/commit/9d92a11fb7cb6d7a1619d79c12faaa0b1c01f980)
## [1.8.3 - 21.10.2025]
### Added

4
aac
View File

@@ -25,7 +25,9 @@ foreach ($commandsGlob as $item) {
}
$commandPre = '\\MyAAC\Commands\\';
$application->add(new ($commandPre . $name));
if (!trait_exists($class = $commandPre . $name)) {
$application->add(new $class);
}
}
$pluginCommands = Plugins::getCommands();

View File

@@ -6,6 +6,7 @@
* @package MyAAC
* @author Slawkens <slawkens@gmail.com>
* @author Lee
* @author gpedro
* @copyright 2020 MyAAC
* @link https://my-aac.org
*/
@@ -19,9 +20,9 @@ $title = 'Mass Account Actions';
csrfProtect();
$hasPointsColumn = $db->hasColumn('accounts', 'premium_points');
$freePremium = $config['lua']['freePremium'];
$freePremium = getBoolean(configLua('freePremium'));
function admin_give_points($points)
function admin_give_points($points): void
{
global $hasPointsColumn;
@@ -37,7 +38,7 @@ function admin_give_points($points)
displayMessage($points . ' points added to all accounts.', true);
}
function admin_give_coins($coins)
function admin_give_coins($coins): void
{
if (!HAS_ACCOUNT_COINS) {
displayMessage('Coins not supported.');
@@ -52,7 +53,7 @@ function admin_give_coins($coins)
displayMessage($coins . ' coins added to all accounts.', true);
}
function admin_give_premdays($days)
function admin_give_premdays($days): void
{
global $db, $freePremium;
@@ -63,6 +64,7 @@ function admin_give_premdays($days)
$value = $days * 86400;
$now = time();
// othire
if ($db->hasColumn('accounts', 'premend')) {
// append premend
@@ -70,14 +72,11 @@ function admin_give_premdays($days)
// set premend
if (Account::where('premend', '<=', $now)->update(['premend' => $now + $value])) {
displayMessage($days . ' premium days added to all accounts.', true);
return;
} else {
displayMessage('Failed to execute set query.');
return;
}
} else {
displayMessage('Failed to execute append query.');
return;
}
return;
@@ -92,20 +91,14 @@ function admin_give_premdays($days)
// set lastday
if (Account::where('lastday', '<=', $now)->update(['lastday' => $now + $value])) {
displayMessage($days . ' premium days added to all accounts.', true);
return;
} else {
displayMessage('Failed to execute set query.');
return;
}
return;
} else {
displayMessage('Failed to execute append query.');
return;
}
} else {
displayMessage('Failed to execute set days query.');
return;
}
return;
@@ -118,14 +111,11 @@ function admin_give_premdays($days)
// set premium_ends_at
if (Account::where('premium_ends_at', '<=', $now)->update(['premium_ends_at' => $now + $value])) {
displayMessage($days . ' premium days added to all accounts.', true);
return;
} else {
displayMessage('Failed to execute set query.');
return;
}
} else {
displayMessage('Failed to execute append query.');
return;
}
return;
@@ -170,7 +160,8 @@ else {
));
}
function displayMessage($message, $success = false) {
function displayMessage($message, $success = false): void
{
global $twig, $hasPointsColumn, $freePremium;
$success ? success($message): error($message);

View File

@@ -26,7 +26,7 @@
if (version_compare(phpversion(), '8.1', '<')) die('PHP version 8.1 or higher is required.');
const MYAAC = true;
const MYAAC_VERSION = '1.8.3';
const MYAAC_VERSION = '1.8.4';
const DATABASE_VERSION = 46;
const TABLE_PREFIX = 'myaac_';
define('START_TIME', microtime(true));

View File

@@ -0,0 +1,69 @@
<?php
defined('MYAAC') or die('Direct access not allowed!');
use MyAAC\Models\Changelog;
use MyAAC\Models\Config;
use MyAAC\Models\ForumBoard;
use MyAAC\Models\Gallery;
use MyAAC\Models\NewsCategory;
if (Changelog::count() === 0) {
Changelog::create([
'type' => 3,
'where' => 2,
'date' => time(),
'body' => 'MyAAC installed. (:',
'hide' => 0,
]);
}
if (Config::where('name', 'database_version')->count() === 0) {
Config::create([
'name' => 'database_version',
'value' => DATABASE_VERSION,
]);
}
if (ForumBoard::count() === 0) {
$forumBoards = [
['name' => 'News', 'description' => 'News commenting', 'closed' => 1],
['name' => 'Trade', 'description' => 'Trade offers.', 'closed' => 0],
['name' => 'Quests', 'description' => 'Quest making.', 'closed' => 0],
['name' => 'Pictures', 'description' => 'Your pictures.', 'closed' => 0],
['name' => 'Bug Report', 'description' => 'Report bugs there.', 'closed' => 0],
];
$i = 0;
foreach ($forumBoards as $forumBoard) {
ForumBoard::create([
'name' => $forumBoard['name'],
'description' => $forumBoard['description'],
'ordering' => $i++,
'closed' => $forumBoard['closed'],
]);
}
}
if (NewsCategory::count() === 0) {
$newsCategoriesIcons = [
0, 1, 2, 3, 4
];
foreach ($newsCategoriesIcons as $iconId) {
NewsCategory::create([
'icon_id' => $iconId,
]);
}
}
if (Gallery::count() === 0) {
Gallery::create([
'comment' => 'Demon',
'image' => 'images/gallery/demon.jpg',
'thumb' => 'images/gallery/demon_thumb.gif',
'author' => 'MyAAC',
'ordering' => 0,
]);
}
success($locale['step_database_success_import_data']);

View File

@@ -1,6 +1,4 @@
SET @myaac_database_version = 46;
CREATE TABLE `myaac_account_actions`
CREATE TABLE IF NOT EXISTS `myaac_account_actions`
(
`account_id` int NOT NULL,
`ip` int unsigned NOT NULL DEFAULT 0,
@@ -10,7 +8,7 @@ CREATE TABLE `myaac_account_actions`
KEY (`account_id`)
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8mb4;
CREATE TABLE `myaac_account_emails_verify`
CREATE TABLE IF NOT EXISTS `myaac_account_emails_verify`
(
`id` int NOT NULL AUTO_INCREMENT,
`account_id` int NOT NULL,
@@ -19,7 +17,7 @@ CREATE TABLE `myaac_account_emails_verify`
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8mb4;
CREATE TABLE `myaac_admin_menu`
CREATE TABLE IF NOT EXISTS `myaac_admin_menu`
(
`id` int NOT NULL AUTO_INCREMENT,
`name` varchar(255) NOT NULL DEFAULT '',
@@ -30,7 +28,7 @@ CREATE TABLE `myaac_admin_menu`
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8mb4;
CREATE TABLE `myaac_changelog`
CREATE TABLE IF NOT EXISTS `myaac_changelog`
(
`id` int NOT NULL AUTO_INCREMENT,
`body` varchar(500) NOT NULL DEFAULT '',
@@ -42,9 +40,7 @@ CREATE TABLE `myaac_changelog`
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8mb4;
INSERT INTO `myaac_changelog` (`id`, `type`, `where`, `date`, `body`, `hide`) VALUES (1, 3, 2, UNIX_TIMESTAMP(), 'MyAAC installed. (:', 0);
CREATE TABLE `myaac_config`
CREATE TABLE IF NOT EXISTS `myaac_config`
(
`id` int NOT NULL AUTO_INCREMENT,
`name` varchar(30) NOT NULL,
@@ -53,9 +49,7 @@ CREATE TABLE `myaac_config`
UNIQUE (`name`)
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8mb4;
INSERT INTO `myaac_config` (`name`, `value`) VALUES ('database_version', @myaac_database_version);
CREATE TABLE `myaac_faq`
CREATE TABLE IF NOT EXISTS `myaac_faq`
(
`id` int NOT NULL AUTO_INCREMENT,
`question` varchar(255) NOT NULL DEFAULT '',
@@ -65,7 +59,7 @@ CREATE TABLE `myaac_faq`
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8mb4;
CREATE TABLE `myaac_forum_boards`
CREATE TABLE IF NOT EXISTS `myaac_forum_boards`
(
`id` int NOT NULL AUTO_INCREMENT,
`name` varchar(32) NOT NULL,
@@ -77,13 +71,8 @@ CREATE TABLE `myaac_forum_boards`
`hide` tinyint NOT NULL DEFAULT 0,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8mb4;
INSERT INTO `myaac_forum_boards` (`id`, `name`, `description`, `ordering`, `closed`) VALUES (NULL, 'News', 'News commenting', 0, 1);
INSERT INTO `myaac_forum_boards` (`id`, `name`, `description`, `ordering`) VALUES (NULL, 'Trade', 'Trade offers.', 1);
INSERT INTO `myaac_forum_boards` (`id`, `name`, `description`, `ordering`) VALUES (NULL, 'Quests', 'Quest making.', 2);
INSERT INTO `myaac_forum_boards` (`id`, `name`, `description`, `ordering`) VALUES (NULL, 'Pictures', 'Your pictures.', 3);
INSERT INTO `myaac_forum_boards` (`id`, `name`, `description`, `ordering`) VALUES (NULL, 'Bug Report', 'Report bugs there.', 4);
CREATE TABLE `myaac_forum`
CREATE TABLE IF NOT EXISTS `myaac_forum`
(
`id` int NOT NULL AUTO_INCREMENT,
`first_post` int NOT NULL DEFAULT 0,
@@ -107,7 +96,7 @@ CREATE TABLE `myaac_forum`
KEY `section` (`section`)
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8mb4;
CREATE TABLE `myaac_menu`
CREATE TABLE IF NOT EXISTS `myaac_menu`
(
`id` int NOT NULL AUTO_INCREMENT,
`template` varchar(255) NOT NULL,
@@ -121,7 +110,7 @@ CREATE TABLE `myaac_menu`
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8mb4;
CREATE TABLE `myaac_monsters` (
CREATE TABLE IF NOT EXISTS `myaac_monsters` (
`id` int NOT NULL AUTO_INCREMENT,
`hide` tinyint NOT NULL DEFAULT 0,
`name` varchar(255) NOT NULL,
@@ -154,7 +143,7 @@ CREATE TABLE `myaac_monsters` (
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8mb4;
CREATE TABLE `myaac_news`
CREATE TABLE IF NOT EXISTS `myaac_news`
(
`id` int NOT NULL AUTO_INCREMENT,
`title` varchar(100) NOT NULL,
@@ -172,7 +161,7 @@ CREATE TABLE `myaac_news`
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8mb4;
CREATE TABLE `myaac_news_categories`
CREATE TABLE IF NOT EXISTS `myaac_news_categories`
(
`id` int NOT NULL AUTO_INCREMENT,
`name` varchar(50) NOT NULL DEFAULT "",
@@ -182,13 +171,7 @@ CREATE TABLE `myaac_news_categories`
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8mb4;
INSERT INTO `myaac_news_categories` (`id`, `icon_id`) VALUES (NULL, 0);
INSERT INTO `myaac_news_categories` (`id`, `icon_id`) VALUES (NULL, 1);
INSERT INTO `myaac_news_categories` (`id`, `icon_id`) VALUES (NULL, 2);
INSERT INTO `myaac_news_categories` (`id`, `icon_id`) VALUES (NULL, 3);
INSERT INTO `myaac_news_categories` (`id`, `icon_id`) VALUES (NULL, 4);
CREATE TABLE `myaac_notepad`
CREATE TABLE IF NOT EXISTS `myaac_notepad`
(
`id` int NOT NULL AUTO_INCREMENT,
`account_id` int NOT NULL,
@@ -198,7 +181,7 @@ CREATE TABLE `myaac_notepad`
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8mb4;
CREATE TABLE `myaac_pages`
CREATE TABLE IF NOT EXISTS `myaac_pages`
(
`id` INT NOT NULL AUTO_INCREMENT,
`name` varchar(30) NOT NULL,
@@ -214,7 +197,7 @@ CREATE TABLE `myaac_pages`
UNIQUE (`name`)
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8mb4;
CREATE TABLE `myaac_gallery`
CREATE TABLE IF NOT EXISTS `myaac_gallery`
(
`id` int NOT NULL AUTO_INCREMENT,
`comment` varchar(255) NOT NULL DEFAULT '',
@@ -226,9 +209,7 @@ CREATE TABLE `myaac_gallery`
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8mb4;
INSERT INTO `myaac_gallery` (`id`, `ordering`, `comment`, `image`, `thumb`, `author`) VALUES (NULL, 1, 'Demon', 'images/gallery/demon.jpg', 'images/gallery/demon_thumb.gif', 'MyAAC');
CREATE TABLE `myaac_settings`
CREATE TABLE IF NOT EXISTS `myaac_settings`
(
`id` int NOT NULL AUTO_INCREMENT,
`name` varchar(255) NOT NULL DEFAULT '',
@@ -238,7 +219,7 @@ CREATE TABLE `myaac_settings`
KEY `key` (`key`)
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8mb4;
CREATE TABLE `myaac_spells`
CREATE TABLE IF NOT EXISTS `myaac_spells`
(
`id` int NOT NULL AUTO_INCREMENT,
`spell` varchar(255) NOT NULL DEFAULT '',
@@ -261,7 +242,7 @@ CREATE TABLE `myaac_spells`
UNIQUE (`name`)
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8mb4;
CREATE TABLE `myaac_visitors`
CREATE TABLE IF NOT EXISTS `myaac_visitors`
(
`ip` varchar(45) NOT NULL,
`lastvisit` int NOT NULL DEFAULT 0,
@@ -270,7 +251,7 @@ CREATE TABLE `myaac_visitors`
UNIQUE (`ip`)
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8mb4;
CREATE TABLE `myaac_weapons`
CREATE TABLE IF NOT EXISTS `myaac_weapons`
(
`id` int NOT NULL,
`level` int NOT NULL DEFAULT 0,

View File

@@ -30,26 +30,22 @@ if(!$error) {
}
}
if($db->hasTable(TABLE_PREFIX . 'account_actions')) {
$locale['step_database_error_table_exist'] = str_replace('$TABLE$', TABLE_PREFIX . 'account_actions', $locale['step_database_error_table_exist']);
warning($locale['step_database_error_table_exist']);
}
else {
// import schema
try {
$locale['step_database_importing'] = str_replace('$DATABASE_NAME$', config('database_name'), $locale['step_database_importing']);
success($locale['step_database_importing']);
// import schema
try {
$locale['step_database_importing'] = str_replace('$DATABASE_NAME$', config('database_name'), $locale['step_database_importing']);
success($locale['step_database_importing']);
$db->query(file_get_contents(BASE . 'install/includes/schema.sql'));
$db->exec(file_get_contents(BASE . 'install/includes/schema.sql'));
$locale['step_database_success_schema'] = str_replace('$PREFIX$', TABLE_PREFIX, $locale['step_database_success_schema']);
success($locale['step_database_success_schema']);
}
catch(PDOException $error_) {
error($locale['step_database_error_schema'] . ' ' . $error_);
return;
}
$locale['step_database_success_schema'] = str_replace('$PREFIX$', TABLE_PREFIX, $locale['step_database_success_schema']);
success($locale['step_database_success_schema']);
}
catch(PDOException $error_) {
error($locale['step_database_error_schema'] . ' ' . $error_);
return;
}
require BASE . 'install/includes/import_base_data.php';
if(!$db->hasColumn('accounts', 'email')) {
if(query("ALTER TABLE `accounts` ADD `email` varchar(255) NOT NULL DEFAULT '';"))

View File

@@ -445,16 +445,11 @@ class OTS_Account extends OTS_Row_DAO implements IteratorAggregate, Countable
if(isset($this->data['premium_ends_at']) || isset($this->data['premend']) ||
(isCanary() && isset($this->data['lastday']))) {
$col = (isset($this->premium_ends_at) ? 'premium_ends_at' : (isset($this->data['lastday']) ? 'lastday' : 'premend'));
$col = (isset($this->data['premium_ends_at']) ? 'premium_ends_at' : (isset($this->data['lastday']) ? 'lastday' : 'premend'));
$ret = ceil(($this->data[$col] - time()) / (24 * 60 * 60));
return max($ret, 0);
}
if (isCanary() && isset($this->data['lastday'])) {
$ret = ceil(($this->data['lastday'] - time()) / 86400);
return max($ret, 0);
}
if($this->data['premdays'] == 0) {
return 0;
}
@@ -477,14 +472,16 @@ class OTS_Account extends OTS_Row_DAO implements IteratorAggregate, Countable
return $this->data['lastday'];
}
public function isPremium()
public function isPremium(): bool
{
if(isset($this->data['premium_ends_at'])) {
return $this->data['premium_ends_at'] > time();
if(isset($this->data['premium_ends_at']) || isset($this->data['premend']) ||
(isCanary() && isset($this->data['lastday']))) {
$col = (isset($this->data['premium_ends_at']) ? 'premium_ends_at' : (isset($this->data['lastday']) ? 'lastday' : 'premend'));
return $this->data[$col] > time();
}
if(isset($this->data['premend'])) {
return $this->data['premend'] > time();
if($this->data['premdays'] == self::GRATIS_PREMIUM_DAYS){
return true;
}
return ($this->data['premdays'] - (date("z", time()) + (365 * (date("Y", time()) - date("Y", $this->data['lastday']))) - date("z", $this->data['lastday'])) > 0);

View File

@@ -78,6 +78,7 @@ $locale['step_database_error_mysql_connect_3'] = 'MySQL ist nicht richtig konfig
$locale['step_database_error_mysql_connect_4'] = 'MySQL-Server läuft nicht.';
$locale['step_database_error_schema'] = 'Fehler beim Importieren des Schemas:';
$locale['step_database_success_schema'] = '$PREFIX$ Tabellen wurden erfolgreich installiert.';
$locale['step_database_success_import_data'] = 'Import von Daten für Tabellen was erfolgreich.';
$locale['step_database_error_file'] = '$FILE$ konnte nicht geöffnet werden. Bitte kopieren Sie diesen Inhalt und fügen Sie ihn dort ein:';
$locale['step_database_adding_field'] = 'Folgendes Feld wurde hinzugefügt: ';
$locale['step_database_modifying_field'] = 'Folgendes Feld wurde geändert: ';

View File

@@ -83,6 +83,7 @@ $locale['step_database_error_mysql_connect_3'] = 'MySQL is not configured proper
$locale['step_database_error_mysql_connect_4'] = 'MySQL server is not running.';
$locale['step_database_error_schema'] = 'Error while importing schema:';
$locale['step_database_success_schema'] = 'Successfully installed $PREFIX$ tables.';
$locale['step_database_success_import_data'] = 'Successfully imported base data for tables.';
$locale['step_database_error_file'] = '$FILE$ couldn\'t be opened. Please copy this content and paste there:';
$locale['step_database_adding_field'] = 'Adding field';
$locale['step_database_modifying_field'] = 'Modifying field';

View File

@@ -81,7 +81,8 @@ $locale['step_database_error_mysql_connect_2'] = 'Możliwe przyczyny:';
$locale['step_database_error_mysql_connect_3'] = 'MySQL nie jest poprawnie skonfigurowane w <i>config.lua</i>.';
$locale['step_database_error_mysql_connect_4'] = 'Serwer MySQL nie jest uruchomiony.';
$locale['step_database_error_schema'] = 'Błąd podczas importowania struktury bazy danych:';
$locale['step_database_success_schema'] = 'Pomyślnie zainstalowano tabele $PREFIX$.';
$locale['step_database_success_schema'] = 'Pomyślnie zaimportowano tabele $PREFIX$.';
$locale['step_database_success_import_data'] = 'Pomyślnie załadowano bazowe dane dla tabel.';
$locale['step_database_error_file'] = '$FILE$ nie mógł zostać otwarty. Proszę skopiować zawartość pola tekstowego i wkleić do tego pliku:';
$locale['step_database_adding_field'] = 'Dodawanie pola';
$locale['step_database_modifying_field'] = 'Modyfikacja pola';

View File

@@ -9,6 +9,8 @@
*/
defined('MYAAC') or die('Direct access not allowed!');
global $db;
// database migrations
$tmp = '';
if(fetchDatabaseConfig('database_version', $tmp)) { // we got version

View File

@@ -0,0 +1,33 @@
<?php
namespace MyAAC\Commands;
use POT;
trait Env
{
protected function init(): void
{
global $config;
if (!isset($config['installed']) || !$config['installed']) {
throw new \RuntimeException('MyAAC has not been installed yet or there was error during installation. Please install again.');
}
if(empty($config['server_path'])) {
throw new \RuntimeException('Server Path has been not set. Go to config.php and set it.');
}
// take care of trailing slash at the end
if($config['server_path'][strlen($config['server_path']) - 1] !== '/')
$config['server_path'] .= '/';
$config['lua'] = load_config_lua($config['server_path'] . 'config.lua');
// POT
require_once SYSTEM . 'libs/pot/OTS.php';
$ots = POT::getInstance();
$eloquentConnection = null;
require_once SYSTEM . 'database.php';
}
}

View File

@@ -9,6 +9,8 @@ use Symfony\Component\Console\Style\SymfonyStyle;
class MigrateCommand extends Command
{
use Env;
protected function configure(): void
{
$this->setName('migrate')
@@ -17,9 +19,19 @@ class MigrateCommand extends Command
protected function execute(InputInterface $input, OutputInterface $output): int
{
require SYSTEM . 'init.php';
$this->init();
$io = new SymfonyStyle($input, $output);
$tmp = '';
if(fetchDatabaseConfig('database_version', $tmp)) { // we got version
$tmp = (int)$tmp;
if ($tmp >= DATABASE_VERSION) {
$io->success('Already on latest version.');
return Command::SUCCESS;
}
}
require SYSTEM . 'migrate.php';
$io->success('Migrated to latest version (' . DATABASE_VERSION . ')');

View File

@@ -10,6 +10,8 @@ use Symfony\Component\Console\Style\SymfonyStyle;
class MigrateRunCommand extends Command
{
use Env;
protected function configure(): void
{
$this->setName('migrate:run')
@@ -23,12 +25,12 @@ class MigrateRunCommand extends Command
protected function execute(InputInterface $input, OutputInterface $output): int
{
require SYSTEM . 'init.php';
$io = new SymfonyStyle($input, $output);
$ids = $input->getArgument('id');
$this->init();
// pre-check
// in case one of the migrations doesn't exist - we won't execute any of them
foreach ($ids as $id) {

View File

@@ -11,6 +11,8 @@ use Symfony\Component\Console\Style\SymfonyStyle;
class MigrateToCommand extends Command
{
use Env;
protected function configure(): void
{
$this->setName('migrate:to')
@@ -32,7 +34,7 @@ class MigrateToCommand extends Command
return Command::FAILURE;
}
$this->initEnv();
$this->init();
$currentVersion = Config::where('name', 'database_version')->first()->value;
if ($currentVersion > $versionDest) {
@@ -80,29 +82,4 @@ class MigrateToCommand extends Command
updateDatabaseConfig('database_version', ($_up ? $id : $id - 1));
}
private function initEnv()
{
global $config;
if (!isset($config['installed']) || !$config['installed']) {
throw new \RuntimeException('MyAAC has not been installed yet or there was error during installation. Please install again.');
}
if(empty($config['server_path'])) {
throw new \RuntimeException('Server Path has been not set. Go to config.php and set it.');
}
// take care of trailing slash at the end
if($config['server_path'][strlen($config['server_path']) - 1] !== '/')
$config['server_path'] .= '/';
$config['lua'] = load_config_lua($config['server_path'] . 'config.lua');
// POT
require_once SYSTEM . 'libs/pot/OTS.php';
$ots = POT::getInstance();
$eloquentConnection = null;
require_once SYSTEM . 'database.php';
}
}

View File

@@ -5,11 +5,15 @@ namespace MyAAC\Models;
use Illuminate\Database\Eloquent\Model;
/**
* @property integer $premium_ends_at
* @property integer $premend
* @property integer $lastday
* @property integer $premdays
*/
class Account extends Model {
const GRATIS_PREMIUM_DAYS = 65535;
protected $table = 'accounts';
public $timestamps = false;
@@ -34,9 +38,9 @@ class Account extends Model {
public function getPremiumDaysAttribute()
{
if(isset($this->premium_ends_at) || isset($this->premend) ||
(isCanary() && isset($this->data['lastday']))) {
$col = (isset($this->premium_ends_at) ? 'premium_ends_at' : (isset($this->data['lastday']) ? 'lastday' : 'premend'));
$ret = ceil(($this->{$col}- time()) / (24 * 60 * 60));
(isCanary() && isset($this->lastday))) {
$col = (isset($this->premium_ends_at) ? 'premium_ends_at' : (isset($this->lastday) ? 'lastday' : 'premend'));
$ret = ceil(($this->{$col} - time()) / (24 * 60 * 60));
return max($ret, 0);
}
@@ -44,22 +48,24 @@ class Account extends Model {
return 0;
}
if($this->premdays == 65535){
return 65535;
if($this->premdays == self::GRATIS_PREMIUM_DAYS){
return self::GRATIS_PREMIUM_DAYS;
}
$ret = ceil($this->premdays - ((int)date("z", time()) + (365 * (date("Y", time()) - date("Y", $this->lastday))) - date("z", $this->lastday)));
return max($ret, 0);
}
public function getIsPremiumAttribute()
public function getIsPremiumAttribute(): bool
{
if(isset($this->premium_ends_at)) {
return $this->premium_ends_at > time();
if(isset($this->premium_ends_at) || isset($this->premend) ||
(isCanary() && isset($this->lastday))) {
$col = (isset($this->premium_ends_at) ? 'premium_ends_at' : (isset($this->lastday) ? 'lastday' : 'premend'));
return $this->{$col} > time();
}
if(isset($this->premend)) {
return $this->premend > time();
if($this->premdays == self::GRATIS_PREMIUM_DAYS){
return true;
}
return ($this->premdays - (date("z", time()) + (365 * (date("Y", time()) - date("Y", $this->lastday))) - date("z", $this->lastday)) > 0);

View File

@@ -18,7 +18,16 @@ class Changelog extends Model {
public $timestamps = false;
protected $fillable = [
'body', 'type', 'where',
'date', 'player_id', 'hide',
];
public function scopeIsPublic($query) {
$query->where('hide', '!=', 1);
}
public function player() {
return $this->belongsTo(Player::class);
}
}

View File

@@ -0,0 +1,16 @@
<?php
namespace MyAAC\Models;
use Illuminate\Database\Eloquent\Model;
class ForumBoard extends Model {
protected $table = TABLE_PREFIX . 'forum_boards';
public $timestamps = false;
protected $fillable = [
'name', 'description', 'ordering',
'guild', 'access', 'closed', 'hide',
];
}

View File

@@ -10,4 +10,9 @@ class Gallery extends Model {
public $timestamps = false;
protected $fillable = [
'comment', 'image', 'thumb',
'author', 'ordering', 'hide',
];
}

View File

@@ -0,0 +1,15 @@
<?php
namespace MyAAC\Models;
use Illuminate\Database\Eloquent\Model;
class NewsCategory extends Model {
protected $table = TABLE_PREFIX . 'news_categories';
public $timestamps = false;
protected $fillable = [
'name', 'description', 'icon_id', 'hide'
];
}