Page Menu
Home
WickedGov Phorge
Search
Configure Global Search
Log In
Files
F5975697
SchemaChangesHandler.php
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Flag For Later
Award Token
Size
6 KB
Referenced Files
None
Subscribers
None
SchemaChangesHandler.php
View Options
<?php
namespace
MediaWiki\Extension\AbuseFilter\Hooks\Handlers
;
use
MediaWiki\Context\RequestContext
;
use
MediaWiki\Extension\AbuseFilter\Maintenance\MigrateActorsAF
;
use
MediaWiki\Extension\AbuseFilter\Maintenance\UpdateVarDumps
;
use
MediaWiki\Installer\DatabaseUpdater
;
use
MediaWiki\Installer\Hook\LoadExtensionSchemaUpdatesHook
;
use
MediaWiki\MediaWikiServices
;
use
MediaWiki\User\User
;
use
MediaWiki\User\UserFactory
;
use
MediaWiki\User\UserGroupManager
;
use
MessageLocalizer
;
class
SchemaChangesHandler
implements
LoadExtensionSchemaUpdatesHook
{
/** @var MessageLocalizer */
private
$messageLocalizer
;
/** @var UserGroupManager */
private
$userGroupManager
;
/** @var UserFactory */
private
$userFactory
;
/**
* @param MessageLocalizer $messageLocalizer
* @param UserGroupManager $userGroupManager
* @param UserFactory $userFactory
*/
public
function
__construct
(
MessageLocalizer
$messageLocalizer
,
UserGroupManager
$userGroupManager
,
UserFactory
$userFactory
)
{
$this
->
messageLocalizer
=
$messageLocalizer
;
$this
->
userGroupManager
=
$userGroupManager
;
$this
->
userFactory
=
$userFactory
;
}
/**
* @note The hook doesn't allow injecting services!
* @codeCoverageIgnore
* @return self
*/
public
static
function
newFromGlobalState
():
self
{
return
new
self
(
// @todo Use a proper MessageLocalizer once available (T247127)
RequestContext
::
getMain
(),
MediaWikiServices
::
getInstance
()->
getUserGroupManager
(),
MediaWikiServices
::
getInstance
()->
getUserFactory
()
);
}
/**
* @codeCoverageIgnore This is tested by installing or updating MediaWiki
* @param DatabaseUpdater $updater
*/
public
function
onLoadExtensionSchemaUpdates
(
$updater
)
{
$dbType
=
$updater
->
getDB
()->
getType
();
$dir
=
__DIR__
.
"/../../../db_patches"
;
$updater
->
addExtensionTable
(
'abuse_filter'
,
"$dir/$dbType/tables-generated.sql"
);
if
(
$dbType
===
'mysql'
||
$dbType
===
'sqlite'
)
{
if
(
$dbType
===
'mysql'
)
{
// 1.37
$updater
->
renameExtensionIndex
(
'abuse_filter_log'
,
'ip_timestamp'
,
'afl_ip_timestamp'
,
"$dir/mysql/patch-rename-indexes.sql"
,
true
);
// 1.38
// This one has its own files because apparently, sometimes this particular index can already
// have the correct name (T291725)
$updater
->
renameExtensionIndex
(
'abuse_filter_log'
,
'wiki_timestamp'
,
'afl_wiki_timestamp'
,
"$dir/mysql/patch-rename-wiki-timestamp-index.sql"
,
true
);
// 1.38
// This one is also separate to avoid interferences with the afl_filter field removal below.
$updater
->
renameExtensionIndex
(
'abuse_filter_log'
,
'filter_timestamp'
,
'afl_filter_timestamp'
,
"$dir/mysql/patch-rename-filter_timestamp-index.sql"
,
true
);
}
// 1.38
$updater
->
dropExtensionField
(
'abuse_filter_log'
,
'afl_filter'
,
"$dir/$dbType/patch-remove-afl_filter.sql"
);
}
elseif
(
$dbType
===
'postgres'
)
{
$updater
->
addExtensionUpdate
(
[
'dropPgIndex'
,
'abuse_filter_log'
,
'abuse_filter_log_timestamp'
]
);
$updater
->
addExtensionUpdate
(
[
'dropPgField'
,
'abuse_filter_log'
,
'afl_filter'
]
);
$updater
->
addExtensionUpdate
(
[
'dropDefault'
,
'abuse_filter_log'
,
'afl_filter_id'
]
);
$updater
->
addExtensionUpdate
(
[
'dropDefault'
,
'abuse_filter_log'
,
'afl_global'
]
);
$updater
->
addExtensionUpdate
(
[
'renameIndex'
,
'abuse_filter'
,
'abuse_filter_user'
,
'af_user'
]
);
$updater
->
addExtensionUpdate
(
[
'renameIndex'
,
'abuse_filter'
,
'abuse_filter_group_enabled_id'
,
'af_group_enabled'
]
);
$updater
->
addExtensionUpdate
(
[
'renameIndex'
,
'abuse_filter_action'
,
'abuse_filter_action_consequence'
,
'afa_consequence'
]
);
$updater
->
addExtensionUpdate
(
[
'renameIndex'
,
'abuse_filter_log'
,
'abuse_filter_log_filter_timestamp_full'
,
'afl_filter_timestamp_full'
]
);
$updater
->
addExtensionUpdate
(
[
'renameIndex'
,
'abuse_filter_log'
,
'abuse_filter_log_user_timestamp'
,
'afl_user_timestamp'
]
);
$updater
->
addExtensionUpdate
(
[
'renameIndex'
,
'abuse_filter_log'
,
'abuse_filter_log_timestamp'
,
'afl_timestamp'
]
);
$updater
->
addExtensionUpdate
(
[
'renameIndex'
,
'abuse_filter_log'
,
'abuse_filter_log_page_timestamp'
,
'afl_page_timestamp'
]
);
$updater
->
addExtensionUpdate
(
[
'renameIndex'
,
'abuse_filter_log'
,
'abuse_filter_log_ip_timestamp'
,
'afl_ip_timestamp'
]
);
$updater
->
addExtensionUpdate
(
[
'renameIndex'
,
'abuse_filter_log'
,
'abuse_filter_log_rev_id'
,
'afl_rev_id'
]
);
$updater
->
addExtensionUpdate
(
[
'renameIndex'
,
'abuse_filter_log'
,
'abuse_filter_log_wiki_timestamp'
,
'afl_wiki_timestamp'
]
);
$updater
->
addExtensionUpdate
(
[
'renameIndex'
,
'abuse_filter_history'
,
'abuse_filter_history_filter'
,
'afh_filter'
]
);
$updater
->
addExtensionUpdate
(
[
'renameIndex'
,
'abuse_filter_history'
,
'abuse_filter_history_user'
,
'afh_user'
]
);
$updater
->
addExtensionUpdate
(
[
'renameIndex'
,
'abuse_filter_history'
,
'abuse_filter_history_user_text'
,
'afh_user_text'
]
);
$updater
->
addExtensionUpdate
(
[
'renameIndex'
,
'abuse_filter_history'
,
'abuse_filter_history_timestamp'
,
'afh_timestamp'
]
);
$updater
->
addExtensionUpdate
(
[
'changeNullableField'
,
' abuse_filter_history'
,
'afh_public_comments'
,
'NULL'
,
true
]
);
$updater
->
addExtensionUpdate
(
[
'changeNullableField'
,
' abuse_filter_history'
,
'afh_actions'
,
'NULL'
,
true
]
);
}
// 1.41
$updater
->
addExtensionUpdate
(
[
'addField'
,
'abuse_filter'
,
'af_actor'
,
"$dir/$dbType/patch-add-af_actor.sql"
,
true
]
);
// 1.41
$updater
->
addExtensionUpdate
(
[
'addField'
,
'abuse_filter_history'
,
'afh_actor'
,
"$dir/$dbType/patch-add-afh_actor.sql"
,
true
]
);
// 1.43
$updater
->
addExtensionUpdate
(
[
'runMaintenance'
,
MigrateActorsAF
::
class
,
]
);
// 1.43
$updater
->
addExtensionUpdate
(
[
'dropField'
,
'abuse_filter'
,
'af_user'
,
"$dir/$dbType/patch-drop-af_user.sql"
,
true
]
);
// 1.43
$updater
->
addExtensionUpdate
(
[
'dropField'
,
'abuse_filter_history'
,
'afh_user'
,
"$dir/$dbType/patch-drop-afh_user.sql"
,
true
]
);
$updater
->
addExtensionUpdate
(
[
[
$this
,
'createAbuseFilterUser'
]
]
);
// 1.35
$updater
->
addPostDatabaseUpdateMaintenance
(
UpdateVarDumps
::
class
);
}
/**
* Updater callback to create the AbuseFilter user after the user tables have been updated.
* @param DatabaseUpdater $updater
* @return bool
*/
public
function
createAbuseFilterUser
(
DatabaseUpdater
$updater
):
bool
{
$username
=
$this
->
messageLocalizer
->
msg
(
'abusefilter-blocker'
)->
inContentLanguage
()->
text
();
$user
=
$this
->
userFactory
->
newFromName
(
$username
);
if
(
$user
&&
!
$updater
->
updateRowExists
(
'create abusefilter-blocker-user'
)
)
{
$user
=
User
::
newSystemUser
(
$username
,
[
'steal'
=>
true
]
);
$updater
->
insertUpdateRow
(
'create abusefilter-blocker-user'
);
// Promote user so it doesn't look too crazy.
$this
->
userGroupManager
->
addUserToGroup
(
$user
,
'sysop'
);
return
true
;
}
return
false
;
}
}
File Metadata
Details
Attached
Mime Type
text/x-php
Expires
Sat, Oct 3, 18:26 (4 h, 8 m ago)
Storage Engine
local-disk
Storage Format
Raw Data
Storage Handle
f0/d3/6453d392bfcf0853463bfd16a2d0
Default Alt Text
SchemaChangesHandler.php (6 KB)
Attached To
Mode
rMWPROD MediaWiki Production
Attached
Detach File
Event Timeline
Log In to Comment