mirror of
https://gerrit.wikimedia.org/r/mediawiki/extensions/Echo
synced 2024-12-24 13:44:40 +00:00
63efbc5fd1
The use of "HookHandlers" attribute in extension.json makes it possible to inject services into hook handler classes in a future patch. Bug: T315938 Change-Id: I84027e2899b4a013b78fe4e95f191f1e4c89b5f8
116 lines
4.4 KiB
PHP
116 lines
4.4 KiB
PHP
<?php
|
|
|
|
namespace MediaWiki\Extension\Notifications;
|
|
|
|
use DatabaseUpdater;
|
|
use MediaWiki\Installer\Hook\LoadExtensionSchemaUpdatesHook;
|
|
use UpdateEchoSchemaForSuppression;
|
|
|
|
class SchemaHooks implements LoadExtensionSchemaUpdatesHook {
|
|
|
|
/**
|
|
* @param DatabaseUpdater $updater
|
|
*/
|
|
public function onLoadExtensionSchemaUpdates( $updater ) {
|
|
global $wgEchoCluster;
|
|
if ( $wgEchoCluster ) {
|
|
// DatabaseUpdater does not support other databases, so skip
|
|
return;
|
|
}
|
|
|
|
$db = $updater->getDB();
|
|
$dbType = $db->getType();
|
|
|
|
$dir = dirname( __DIR__ ) . '/sql';
|
|
|
|
$updater->addExtensionTable( 'echo_event', "$dir/$dbType/tables-generated.sql" );
|
|
|
|
// 1.33
|
|
// Can't use addPostDatabaseUpdateMaintenance() here because that would
|
|
// run the migration script after dropping the fields
|
|
$updater->addExtensionUpdate( [ 'runMaintenance', UpdateEchoSchemaForSuppression::class,
|
|
'extensions/Echo/maintenance/updateEchoSchemaForSuppression.php' ] );
|
|
$updater->dropExtensionField( 'echo_event', 'event_page_namespace',
|
|
"$dir/patch-drop-echo_event-event_page_namespace.sql" );
|
|
$updater->dropExtensionField( 'echo_event', 'event_page_title',
|
|
"$dir/patch-drop-echo_event-event_page_title.sql" );
|
|
if ( $dbType === 'mysql' ) {
|
|
$updater->dropExtensionField( 'echo_notification', 'notification_bundle_base',
|
|
"$dir/mysql/patch-drop-notification_bundle_base.sql" );
|
|
$updater->dropExtensionField( 'echo_notification', 'notification_bundle_display_hash',
|
|
"$dir/mysql/patch-drop-notification_bundle_display_hash.sql" );
|
|
}
|
|
$updater->dropExtensionIndex( 'echo_notification', 'echo_notification_user_hash_timestamp',
|
|
"$dir/patch-drop-user-hash-timestamp-index.sql" );
|
|
|
|
// 1.35
|
|
$updater->addExtensionTable( 'echo_push_provider', "$dir/echo_push_provider.sql" );
|
|
$updater->addExtensionTable( 'echo_push_subscription', "$dir/echo_push_subscription.sql" );
|
|
|
|
// 1.36
|
|
$updater->addExtensionTable( 'echo_push_topic', "$dir/echo_push_topic.sql" );
|
|
|
|
// 1.39
|
|
if ( $dbType === 'mysql' && $db->tableExists( 'echo_push_subscription', __METHOD__ ) ) {
|
|
// Splitted into single steps to support updates from some releases as well - T322143
|
|
$updater->renameExtensionIndex(
|
|
'echo_push_subscription',
|
|
'echo_push_subscription_user_id',
|
|
'eps_user',
|
|
"$dir/$dbType/patch-echo_push_subscription-rename-index-eps_user.sql",
|
|
false
|
|
);
|
|
$updater->dropExtensionIndex(
|
|
'echo_push_subscription',
|
|
'echo_push_subscription_token',
|
|
"$dir/$dbType/patch-echo_push_subscription-drop-index-eps_token.sql"
|
|
);
|
|
$updater->addExtensionIndex(
|
|
'echo_push_subscription',
|
|
'eps_token',
|
|
"$dir/$dbType/patch-echo_push_subscription-create-index-eps_token.sql"
|
|
);
|
|
$updater->addExtensionField(
|
|
'echo_push_subscription',
|
|
'eps_topic',
|
|
"$dir/$dbType/patch-echo_push_subscription-add-column-eps_topic.sql"
|
|
);
|
|
|
|
$res = $db->query( 'SHOW CREATE TABLE ' . $db->tableName( 'echo_push_subscription' ), __METHOD__ );
|
|
$row = $res ? $res->fetchRow() : false;
|
|
$statement = $row ? $row[1] : '';
|
|
if ( str_contains( $statement, $db->addIdentifierQuotes( 'echo_push_subscription_ibfk_1' ) ) ) {
|
|
$updater->modifyExtensionTable(
|
|
'echo_push_subscription',
|
|
"$dir/$dbType/patch-echo_push_subscription-drop-foreign-keys_1.sql"
|
|
);
|
|
}
|
|
if ( str_contains( $statement, $db->addIdentifierQuotes( 'echo_push_subscription_ibfk_2' ) ) ) {
|
|
$updater->modifyExtensionTable(
|
|
'echo_push_subscription',
|
|
"$dir/$dbType/patch-echo_push_subscription-drop-foreign-keys_2.sql"
|
|
);
|
|
}
|
|
}
|
|
if ( $dbType === 'sqlite' ) {
|
|
$updater->addExtensionIndex( 'echo_push_subscription', 'eps_user',
|
|
"$dir/$dbType/patch-cleanup-push_subscription-foreign-keys-indexes.sql" );
|
|
}
|
|
|
|
global $wgEchoSharedTrackingCluster, $wgEchoSharedTrackingDB;
|
|
// Following tables should only be created if both cluster and database are false.
|
|
// Otherwise they are not created in the place they are accesses, because
|
|
// DatabaseUpdater does not support other databases other than main wiki schema.
|
|
if ( $wgEchoSharedTrackingCluster === false && $wgEchoSharedTrackingDB === false ) {
|
|
$updater->addExtensionTable( 'echo_unread_wikis', "$dir/$dbType/tables-sharedtracking-generated.sql" );
|
|
|
|
// 1.34 (backported) - not for sqlite, the used data type supports the new length
|
|
if ( $updater->getDB()->getType() === 'mysql' ) {
|
|
$updater->modifyExtensionField( 'echo_unread_wikis', 'euw_wiki',
|
|
"$dir/mysql/patch-increase-varchar-echo_unread_wikis-euw_wiki.sql" );
|
|
}
|
|
}
|
|
}
|
|
|
|
}
|