From 27c44f1bdfb6234cf0c9d5b4b491123bb205b08f Mon Sep 17 00:00:00 2001 From: slawkens Date: Fri, 22 Nov 2024 15:52:54 +0100 Subject: [PATCH] schema: Change character set to utf8mb4 (support for Emojis in Menus/Pages/News/Forum etc.) --- common.php | 2 +- install/includes/schema.sql | 40 ++++++++++++++++++------------------- system/migrations/41.php | 35 ++++++++++++++++++++++++++++++++ 3 files changed, 56 insertions(+), 21 deletions(-) create mode 100644 system/migrations/41.php diff --git a/common.php b/common.php index 5b12f749..c63f4494 100644 --- a/common.php +++ b/common.php @@ -27,7 +27,7 @@ if (version_compare(phpversion(), '8.1', '<')) die('PHP version 8.1 or higher is const MYAAC = true; const MYAAC_VERSION = '1.0-RC.2'; -const DATABASE_VERSION = 40; +const DATABASE_VERSION = 41; const TABLE_PREFIX = 'myaac_'; define('START_TIME', microtime(true)); define('MYAAC_OS', stripos(PHP_OS, 'WIN') === 0 ? 'WINDOWS' : (strtoupper(PHP_OS) === 'DARWIN' ? 'MAC' : 'LINUX')); diff --git a/install/includes/schema.sql b/install/includes/schema.sql index 46347707..9a2a2416 100644 --- a/install/includes/schema.sql +++ b/install/includes/schema.sql @@ -1,4 +1,4 @@ -SET @myaac_database_version = 40; +SET @myaac_database_version = 41; 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=utf8; +) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8mb4; CREATE TABLE `myaac_admin_menu` ( @@ -19,7 +19,7 @@ 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=utf8; +) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8mb4; CREATE TABLE `myaac_bugtracker` ( @@ -34,7 +34,7 @@ CREATE TABLE `myaac_bugtracker` `uid` INT(11) NOT NULL AUTO_INCREMENT, `tag` INT(11) NOT NULL DEFAULT 0, PRIMARY KEY (`uid`) -) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8; +) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8mb4; CREATE TABLE `myaac_changelog` ( @@ -46,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=utf8; +) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8mb4; INSERT INTO `myaac_changelog` (`id`, `type`, `where`, `date`, `body`, `hide`) VALUES (1, 3, 2, UNIX_TIMESTAMP(), 'MyAAC installed. (:', 0); @@ -57,7 +57,7 @@ CREATE TABLE `myaac_config` `value` VARCHAR(1000) NOT NULL, PRIMARY KEY (`id`), UNIQUE (`name`) -) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8; +) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8mb4; INSERT INTO `myaac_config` (`name`, `value`) VALUES ('database_version', @myaac_database_version); @@ -69,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=utf8; +) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8mb4; CREATE TABLE `myaac_forum_boards` ( @@ -82,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=utf8; +) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8mb4; INSERT INTO `myaac_forum_boards` (`id`, `name`, `description`, `ordering`, `closed`) VALUES (NULL, 'News', 'News commenting', 0, 1); INSERT INTO `myaac_forum_boards` (`id`, `name`, `description`, `ordering`) VALUES (NULL, 'Trade', 'Trade offers.', 1); INSERT INTO `myaac_forum_boards` (`id`, `name`, `description`, `ordering`) VALUES (NULL, 'Quests', 'Quest making.', 2); @@ -111,7 +111,7 @@ CREATE TABLE `myaac_forum` `closed` tinyint(1) NOT NULL DEFAULT '0', PRIMARY KEY (`id`), KEY `section` (`section`) -) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8; +) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8mb4; CREATE TABLE `myaac_menu` ( @@ -125,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=utf8; +) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8mb4; CREATE TABLE `myaac_monsters` ( `id` int(11) NOT NULL AUTO_INCREMENT, @@ -158,7 +158,7 @@ CREATE TABLE `myaac_monsters` ( `loot` text NOT NULL, `summons` TEXT NOT NULL, PRIMARY KEY (`id`) -) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8; +) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8mb4; CREATE TABLE `myaac_news` ( @@ -176,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=utf8; +) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8mb4; CREATE TABLE `myaac_news_categories` ( @@ -186,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=utf8; +) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8mb4; INSERT INTO `myaac_news_categories` (`id`, `icon_id`) VALUES (NULL, 0); INSERT INTO `myaac_news_categories` (`id`, `icon_id`) VALUES (NULL, 1); @@ -202,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=utf8; +) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8mb4; CREATE TABLE `myaac_pages` ( @@ -218,7 +218,7 @@ CREATE TABLE `myaac_pages` `hide` TINYINT(1) NOT NULL DEFAULT 0, PRIMARY KEY (`id`), UNIQUE (`name`) -) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8; +) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8mb4; CREATE TABLE `myaac_gallery` ( @@ -230,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=utf8; +) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8mb4; INSERT INTO `myaac_gallery` (`id`, `ordering`, `comment`, `image`, `thumb`, `author`) VALUES (NULL, 1, 'Demon', 'images/gallery/demon.jpg', 'images/gallery/demon_thumb.gif', 'MyAAC'); @@ -242,7 +242,7 @@ CREATE TABLE `myaac_settings` `value` TEXT NOT NULL, PRIMARY KEY (`id`), KEY `key` (`key`) -) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8; +) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8mb4; CREATE TABLE `myaac_spells` ( @@ -265,7 +265,7 @@ CREATE TABLE `myaac_spells` `hide` TINYINT(1) NOT NULL DEFAULT 0, PRIMARY KEY (`id`), UNIQUE (`name`) -) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8; +) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8mb4; CREATE TABLE `myaac_visitors` ( @@ -274,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=utf8; +) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8mb4; CREATE TABLE `myaac_weapons` ( @@ -283,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=utf8; +) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8mb4; diff --git a/system/migrations/41.php b/system/migrations/41.php new file mode 100644 index 00000000..091f0cba --- /dev/null +++ b/system/migrations/41.php @@ -0,0 +1,35 @@ +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'); + } + } +};