diff --git a/core/_bootstrap.php b/core/_bootstrap.php index fc3277ea..28f2a08b 100644 --- a/core/_bootstrap.php +++ b/core/_bootstrap.php @@ -77,4 +77,7 @@ _load_event_listeners(); $_tracer->end(); send_event(new InitExtEvent()); +if(AUTO_DB_UPGRADE) { + send_event(new DatabaseUpgradeEvent()); +} $_tracer->end(); diff --git a/core/event.php b/core/event.php index 248bf6ae..37d60d57 100644 --- a/core/event.php +++ b/core/event.php @@ -316,3 +316,6 @@ class LogEvent extends Event $this->time = time(); } } + +class DatabaseUpgradeEvent extends Event { +} diff --git a/core/sys_config.php b/core/sys_config.php index 467877cd..e3c09793 100644 --- a/core/sys_config.php +++ b/core/sys_config.php @@ -46,6 +46,7 @@ _d("MIN_PHP_VERSION", '7.3');// string minimum supported PHP version _d("TRACE_FILE", null); // string file to log performance data into _d("TRACE_THRESHOLD", 0.0); // float log pages which take more time than this many seconds _d("ENABLED_MODS", "imageboard"); +_d("AUTO_DB_UPGRADE", true); // bool whether or not to automatically run DB schema updates /* * Calculated settings - you should never need to change these diff --git a/ext/approval/main.php b/ext/approval/main.php index f012b2e0..809b323b 100644 --- a/ext/approval/main.php +++ b/ext/approval/main.php @@ -15,10 +15,6 @@ class Approval extends Extension $config->set_default_bool(ApprovalConfig::IMAGES, false); $config->set_default_bool(ApprovalConfig::COMMENTS, false); - - if ($config->get_int(ApprovalConfig::VERSION) < 1) { - $this->install(); - } } public function onPageRequest(PageRequestEvent $event) @@ -241,7 +237,7 @@ class Approval extends Extension } - private function install() + public function onDatabaseUpgrade(DatabaseUpgradeEvent $event) { global $database, $config; diff --git a/ext/artists/main.php b/ext/artists/main.php index 2fbd3500..c4ea855b 100644 --- a/ext/artists/main.php +++ b/ext/artists/main.php @@ -56,7 +56,7 @@ class Artists extends Extension } - public function onInitExt(InitExtEvent $event) + public function onDatabaseUpgrade(DatabaseUpgradeEvent $event) { global $config, $database; diff --git a/ext/blocks/main.php b/ext/blocks/main.php index ccfaf2f6..1641548e 100644 --- a/ext/blocks/main.php +++ b/ext/blocks/main.php @@ -2,7 +2,7 @@ class Blocks extends Extension { - public function onInitExt(InitExtEvent $event) + public function onDatabaseUpgrade(DatabaseUpgradeEvent $event) { global $config, $database; if ($config->get_int("ext_blocks_version") < 1) { diff --git a/ext/blotter/main.php b/ext/blotter/main.php index 3b4e98dc..ebc440c1 100644 --- a/ext/blotter/main.php +++ b/ext/blotter/main.php @@ -4,9 +4,14 @@ class Blotter extends Extension { public function onInitExt(InitExtEvent $event) { - /** - * I love re-using this installer don't I... - */ + global $config; + $config->set_default_int("blotter_recent", 5); + $config->set_default_string("blotter_color", "FF0000"); + $config->set_default_string("blotter_position", "subheading"); + } + + public function onDatabaseUpgrade(DatabaseUpgradeEvent $event) + { global $config; $version = $config->get_int("blotter_version", 0); /** @@ -33,10 +38,6 @@ class Blotter extends Extension log_info("blotter", "Installed tables for blotter extension."); $config->set_int("blotter_version", 1); } - // Set default config: - $config->set_default_int("blotter_recent", 5); - $config->set_default_string("blotter_color", "FF0000"); - $config->set_default_string("blotter_position", "subheading"); } public function onSetupBuilding(SetupBuildingEvent $event) diff --git a/ext/comment/main.php b/ext/comment/main.php index 8dca6983..e4f5365e 100644 --- a/ext/comment/main.php +++ b/ext/comment/main.php @@ -90,15 +90,18 @@ class CommentList extends Extension /** @var CommentListTheme $theme */ public $theme; - public function onInitExt(InitExtEvent $event) - { - global $config, $database; + public function onInitExt(InitExtEvent $event) { + global $config; $config->set_default_int('comment_window', 5); $config->set_default_int('comment_limit', 10); $config->set_default_int('comment_list_count', 10); $config->set_default_int('comment_count', 5); $config->set_default_bool('comment_captcha', false); + } + public function onDatabaseUpgrade(DatabaseUpgradeEvent $event) + { + global $config, $database; if ($config->get_int("ext_comments_version") < 3) { // shortcut to latest if ($config->get_int("ext_comments_version") < 1) { diff --git a/ext/favorites/main.php b/ext/favorites/main.php index 66200eaf..0b8b5b97 100644 --- a/ext/favorites/main.php +++ b/ext/favorites/main.php @@ -22,14 +22,6 @@ class FavoriteSetEvent extends Event class Favorites extends Extension { - public function onInitExt(InitExtEvent $event) - { - global $config; - if ($config->get_int("ext_favorites_version", 0) < 1) { - $this->install(); - } - } - public function onImageAdminBlockBuilding(ImageAdminBlockBuildingEvent $event) { global $database, $user; @@ -205,11 +197,10 @@ class Favorites extends Extension } } - - private function install() + public function onDatabaseUpgrade(DatabaseUpgradeEvent $event) { - global $database; global $config; + global $database; if ($config->get_int("ext_favorites_version") < 1) { $database->Execute("ALTER TABLE images ADD COLUMN favorites INTEGER NOT NULL DEFAULT 0"); diff --git a/ext/forum/main.php b/ext/forum/main.php index a1c5d410..06dfb7d0 100644 --- a/ext/forum/main.php +++ b/ext/forum/main.php @@ -9,7 +9,7 @@ Todo: */ class Forum extends Extension { - public function onInitExt(InitExtEvent $event) + public function onDatabaseUpgrade(DatabaseUpgradeEvent $event) { global $config, $database; diff --git a/ext/image_hash_ban/main.php b/ext/image_hash_ban/main.php index 0617b503..e44882ae 100644 --- a/ext/image_hash_ban/main.php +++ b/ext/image_hash_ban/main.php @@ -24,7 +24,7 @@ class AddImageHashBanEvent extends Event class ImageBan extends Extension { - public function onInitExt(InitExtEvent $event) + public function onDatabaseUpgrade(DatabaseUpgradeEvent $event) { global $config, $database; if ($config->get_int("ext_imageban_version") < 1) { diff --git a/ext/image_view_counter/main.php b/ext/image_view_counter/main.php index d5ebe8a5..091543ca 100644 --- a/ext/image_view_counter/main.php +++ b/ext/image_view_counter/main.php @@ -37,7 +37,7 @@ class ImageViewCounter extends Extension } # Installs DB table - public function onInitExt(InitExtEvent $event) + public function onDatabaseUpgrade(DatabaseUpgradeEvent $event) { global $database, $config; diff --git a/ext/ipban/main.php b/ext/ipban/main.php index 9ebcca21..8837f46b 100644 --- a/ext/ipban/main.php +++ b/ext/ipban/main.php @@ -34,9 +34,6 @@ class IPBan extends Extension public function onInitExt(InitExtEvent $event) { global $config; - if ($config->get_int("ext_ipban_version") < 8) { - $this->install(); - } $config->set_default_string( "ipban_message", '
IP $IP has been banned until $DATE by $ADMIN because of $REASON @@ -128,7 +125,7 @@ class IPBan extends Extension } } - protected function install() + public function onDatabaseUpgrade(DatabaseUpgradeEvent $event) { global $database; global $config; diff --git a/ext/log_db/main.php b/ext/log_db/main.php index c83b4dda..4e5e39d4 100644 --- a/ext/log_db/main.php +++ b/ext/log_db/main.php @@ -4,8 +4,12 @@ class LogDatabase extends Extension { public function onInitExt(InitExtEvent $event) { - global $database; global $config; + $config->set_default_int("log_db_priority", SCORE_LOG_INFO); + } + + public function onDatabaseUpgrade(DatabaseUpgradeEvent $event) { + global $config, $database; if ($config->get_int("ext_log_database_version") < 1) { $database->create_table("score_log", " @@ -20,8 +24,6 @@ class LogDatabase extends Extension //INDEX(section) $config->set_int("ext_log_database_version", 1); } - - $config->set_default_int("log_db_priority", SCORE_LOG_INFO); } public function onSetupBuilding(SetupBuildingEvent $event) diff --git a/ext/media/main.php b/ext/media/main.php index ea7c0d81..f434d27c 100644 --- a/ext/media/main.php +++ b/ext/media/main.php @@ -76,11 +76,6 @@ class Media extends Extension $config->set_default_int(MediaConfig::MEM_LIMIT, parse_shorthand_int('8MB')); $config->set_default_string(MediaConfig::FFMPEG_PATH, 'ffmpeg'); $config->set_default_string(MediaConfig::CONVERT_PATH, 'convert'); - - - if ($config->get_int(MediaConfig::VERSION) < 2) { - $this->setup(); - } } public function onPageRequest(PageRequestEvent $event) @@ -994,7 +989,7 @@ class Media extends Extension return $size; } - private function setup() + public function onDatabaseUpgrade(DatabaseUpgradeEvent $event) { global $config, $database; if ($config->get_int(MediaConfig::VERSION) < 1) { diff --git a/ext/not_a_tag/main.php b/ext/not_a_tag/main.php index 83004f49..b142158c 100644 --- a/ext/not_a_tag/main.php +++ b/ext/not_a_tag/main.php @@ -7,7 +7,7 @@ class NotATag extends Extension return 30; } // before ImageUploadEvent and tag_history - public function onInitExt(InitExtEvent $event) + public function onDatabaseUpgrade(DatabaseUpgradeEvent $event) { global $config, $database; if ($config->get_int("ext_notatag_version") < 1) { diff --git a/ext/notes/main.php b/ext/notes/main.php index 9f4f9e72..a4a0c42b 100644 --- a/ext/notes/main.php +++ b/ext/notes/main.php @@ -2,7 +2,7 @@ class Notes extends Extension { - public function onInitExt(InitExtEvent $event) + public function onDatabaseUpgrade(DatabaseUpgradeEvent $event) { global $config, $database; diff --git a/ext/numeric_score/main.php b/ext/numeric_score/main.php index 5e6d0f22..6c4fd1bf 100644 --- a/ext/numeric_score/main.php +++ b/ext/numeric_score/main.php @@ -16,14 +16,6 @@ class NumericScoreSetEvent extends Event class NumericScore extends Extension { - public function onInitExt(InitExtEvent $event) - { - global $config; - if ($config->get_int("ext_numeric_score_version", 0) < 1) { - $this->install(); - } - } - public function onDisplayingImage(DisplayingImageEvent $event) { global $user; @@ -303,7 +295,7 @@ class NumericScore extends Extension } } - private function install() + public function onDatabaseUpgrade(DatabaseUpgradeEvent $event) { global $database; global $config; diff --git a/ext/pm/main.php b/ext/pm/main.php index 400c9bc0..b0f53b19 100644 --- a/ext/pm/main.php +++ b/ext/pm/main.php @@ -48,7 +48,7 @@ class PM class PrivMsg extends Extension { - public function onInitExt(InitExtEvent $event) + public function onDatabaseUpgrade(DatabaseUpgradeEvent $event) { global $config, $database; diff --git a/ext/pools/main.php b/ext/pools/main.php index 6205a8f2..b96be493 100644 --- a/ext/pools/main.php +++ b/ext/pools/main.php @@ -61,9 +61,8 @@ class PoolCreationEvent extends Event class Pools extends Extension { - public function onInitExt(InitExtEvent $event) - { - global $config, $database; + public function onInitExt(InitExtEvent $event) { + global $config; // Set the defaults for the pools extension $config->set_default_int(PoolsConfig::MAX_IMPORT_RESULTS, 1000); @@ -74,6 +73,10 @@ class Pools extends Extension $config->set_default_bool(PoolsConfig::ADDER_ON_VIEW_IMAGE, false); $config->set_default_bool(PoolsConfig::SHOW_NAV_LINKS, false); $config->set_default_bool(PoolsConfig::AUTO_INCREMENT_ORDER, false); + } + + public function onDatabaseUpgrade(DatabaseUpgradeEvent $event) { + global $config, $database; // Create the database tables if ($config->get_int("ext_pools_version") < 1) { diff --git a/ext/post_titles/main.php b/ext/post_titles/main.php index b9eb167f..3c3cbebe 100644 --- a/ext/post_titles/main.php +++ b/ext/post_titles/main.php @@ -16,13 +16,9 @@ class PostTitles extends Extension $config->set_default_bool(PostTitlesConfig::DEFAULT_TO_FILENAME, false); $config->set_default_bool(PostTitlesConfig::SHOW_IN_WINDOW_TITLE, false); - - if ($config->get_int(PostTitlesConfig::VERSION) < 1) { - $this->install(); - } } - private function install() + private function onDatabaseUpgrade(DatabaseUpgradeEvent $event) { global $config, $database; diff --git a/ext/rating/main.php b/ext/rating/main.php index c939b00b..f0a137c5 100644 --- a/ext/rating/main.php +++ b/ext/rating/main.php @@ -130,10 +130,6 @@ class Ratings extends Extension { global $config, $_shm_user_classes, $_shm_ratings; - if ($config->get_int(RatingsConfig::VERSION) < 4) { - $this->install(); - } - foreach (array_keys($_shm_user_classes) as $key) { if ($key == "base" || $key == "hellbanned") { continue; @@ -525,7 +521,7 @@ class Ratings extends Extension return true; } - private function install() + public function onDatabaseUpgrade(DatabaseUpgradeEvent $event) { global $database, $config; diff --git a/ext/relationships/main.php b/ext/relationships/main.php index 3cdee74f..c211592f 100644 --- a/ext/relationships/main.php +++ b/ext/relationships/main.php @@ -18,8 +18,7 @@ class Relationships extends Extension { public const NAME = "Relationships"; - - public function onInitExt(InitExtEvent $event) + public function onDatabaseUpgrade(DatabaseUpgradeEvent $event) { global $config, $database; diff --git a/ext/report_image/main.php b/ext/report_image/main.php index 142ae465..179f7269 100644 --- a/ext/report_image/main.php +++ b/ext/report_image/main.php @@ -41,15 +41,6 @@ class ImageReport class ReportImage extends Extension { - public function onInitExt(InitExtEvent $event) - { - global $config; - - if ($config->get_int("ext_report_image_version") < 1) { - $this->install(); - } - } - public function onPageRequest(PageRequestEvent $event) { global $page, $user; @@ -181,7 +172,7 @@ class ReportImage extends Extension $cache->delete("image-report-count"); } - protected function install() + public function onDatabaseUpgrade(DatabaseUpgradeEvent $event) { global $database, $config; diff --git a/ext/source_history/main.php b/ext/source_history/main.php index fc4b5f71..027522b5 100644 --- a/ext/source_history/main.php +++ b/ext/source_history/main.php @@ -12,11 +12,6 @@ class SourceHistory extends Extension { global $config; $config->set_default_int("history_limit", -1); - - // shimmie is being installed so call install to create the table. - if ($config->get_int("ext_source_history_version") < 3) { - $this->install(); - } } public function onAdminBuilding(AdminBuildingEvent $event) @@ -95,7 +90,7 @@ class SourceHistory extends Extension } } - protected function install() + public function onDatabaseUpgrade(DatabaseUpgradeEvent $event) { global $database, $config; diff --git a/ext/tag_categories/main.php b/ext/tag_categories/main.php index 54e90322..adbaf00c 100644 --- a/ext/tag_categories/main.php +++ b/ext/tag_categories/main.php @@ -5,13 +5,16 @@ require_once "config.php"; class TagCategories extends Extension { - public function onInitExt(InitExtEvent $event) - { - global $config, $database; + public function onInitExt(InitExtEvent $event) { + global $config; // whether we split out separate categories on post view by default // note: only takes effect if /post/view shows the image's exact tags $config->set_default_bool(TagCategoriesConfig::SPLIT_ON_VIEW, true); + } + + public function onDatabaseUpgrade(DatabaseUpgradeEvent $event) { + global $config, $database; if ($config->get_int(TagCategoriesConfig::VERSION) < 1) { // primary extension database, holds all our stuff! diff --git a/ext/tag_history/main.php b/ext/tag_history/main.php index ea243f2a..51c70af5 100644 --- a/ext/tag_history/main.php +++ b/ext/tag_history/main.php @@ -12,11 +12,6 @@ class TagHistory extends Extension { global $config; $config->set_default_int("history_limit", -1); - - // shimmie is being installed so call install to create the table. - if ($config->get_int("ext_tag_history_version") < 3) { - $this->install(); - } } public function onAdminBuilding(AdminBuildingEvent $event) @@ -96,7 +91,7 @@ class TagHistory extends Extension } } - protected function install() + public function onDatabaseUpgrade(DatabaseUpgradeEvent $event) { global $database, $config; diff --git a/ext/tips/main.php b/ext/tips/main.php index b5c0d7e7..c794bfa6 100644 --- a/ext/tips/main.php +++ b/ext/tips/main.php @@ -2,7 +2,7 @@ class Tips extends Extension { - public function onInitExt(InitExtEvent $event) + public function onDatabaseUpgrade(DatabaseUpgradeEvent $event) { global $config, $database; diff --git a/ext/trash/main.php b/ext/trash/main.php index d3772a68..5e292899 100644 --- a/ext/trash/main.php +++ b/ext/trash/main.php @@ -13,15 +13,6 @@ class Trash extends Extension return 10; } - public function onInitExt(InitExtEvent $event) - { - global $config; - - if ($config->get_int(TrashConfig::VERSION) < 1) { - $this->install(); - } - } - public function onPageRequest(PageRequestEvent $event) { global $page, $user; @@ -158,8 +149,7 @@ class Trash extends Extension } } - - private function install() + public function onDatabaseUpgrade(DatabaseUpgradeEvent $event) { global $database, $config; diff --git a/ext/upgrade/main.php b/ext/upgrade/main.php index 0424f269..73a3b843 100644 --- a/ext/upgrade/main.php +++ b/ext/upgrade/main.php @@ -2,7 +2,7 @@ class Upgrade extends Extension { - public function onInitExt(InitExtEvent $event) + public function onDatabaseUpgrade(DatabaseUpgradeEvent $event) { global $config, $database; diff --git a/ext/user_config/main.php b/ext/user_config/main.php index 91aa375e..d5390d7b 100644 --- a/ext/user_config/main.php +++ b/ext/user_config/main.php @@ -22,15 +22,6 @@ class UserConfig extends Extension { private const VERSION = "ext_user_config_version"; - public function onInitExt(InitExtEvent $event) - { - global $config; - - if ($config->get_int(self::VERSION, 0)<1) { - $this->install(); - } - } - public function onUserLogin(UserLoginEvent $event) { global $database, $user_config; @@ -39,7 +30,7 @@ class UserConfig extends Extension send_event(new InitUserConfigEvent($event->user, $user_config)); } - private function install(): void + private function onDatabaseUpgrade(DatabaseUpgradeEvent $event): void { global $config, $database; diff --git a/ext/wiki/main.php b/ext/wiki/main.php index d52b3059..e9c490de 100644 --- a/ext/wiki/main.php +++ b/ext/wiki/main.php @@ -73,7 +73,7 @@ class WikiPage class Wiki extends Extension { - public function onInitExt(InitExtEvent $event) + public function onDatabaseUpgrade(DatabaseUpgradeEvent $event) { global $database, $config;