MediaWiki fundraising/REL1_35
deleteSelfExternals.php
Go to the documentation of this file.
1<?php
24require_once __DIR__ . '/Maintenance.php';
25
33 public function __construct() {
34 parent::__construct();
35 $this->addDescription( 'Delete self-references to $wgServer from externallinks' );
36 $this->setBatchSize( 1000 );
37 }
38
39 public function execute() {
40 global $wgServer;
41
42 // Extract the host and scheme from $wgServer
43 $bits = wfParseUrl( $wgServer );
44 if ( !$bits ) {
45 $this->error( 'Could not parse $wgServer' );
46 exit( 1 );
47 }
48
49 $this->output( "Deleting self externals from $wgServer\n" );
50 $db = $this->getDB( DB_MASTER );
51
52 // If it's protocol-relative, we need to do both http and https.
53 // Otherwise, just do the specified scheme.
54 $host = $bits['host'];
55 if ( isset( $bits['port'] ) ) {
56 $host .= ':' . $bits['port'];
57 }
58 if ( $bits['scheme'] != '' ) {
59 $conds = [ LinkFilter::getQueryConditions( $host, [ 'protocol' => $bits['scheme'] . '://' ] ) ];
60 } else {
61 $conds = [
62 LinkFilter::getQueryConditions( $host, [ 'protocol' => 'http://' ] ),
63 LinkFilter::getQueryConditions( $host, [ 'protocol' => 'https://' ] ),
64 ];
65 }
66
67 foreach ( $conds as $cond ) {
68 if ( !$cond ) {
69 continue;
70 }
71 $cond = $db->makeList( $cond, LIST_AND );
72 do {
73 $this->commitTransaction( $db, __METHOD__ );
74 $q = $db->limitResult( "DELETE /* deleteSelfExternals */ FROM externallinks WHERE $cond",
75 $this->mBatchSize );
76 $this->output( "Deleting a batch\n" );
77 $db->query( $q, __METHOD__ );
78 } while ( $db->affectedRows() );
79 }
80 }
81}
82
83$maintClass = DeleteSelfExternals::class;
84require_once RUN_MAINTENANCE_IF_MAIN;
getDB()
$wgServer
URL of the server.
wfParseUrl( $url)
parse_url() work-alike, but non-broken.
const RUN_MAINTENANCE_IF_MAIN
Maintenance script that deletes self-references to $wgServer from the externallinks table.
__construct()
Default constructor.
execute()
Do the actual work.
static getQueryConditions( $filterEntry, array $options=[])
Return query conditions which will match the specified string.
Abstract maintenance class for quickly writing and churning out maintenance scripts with minimal effo...
error( $err, $die=0)
Throw an error to the user.
commitTransaction(IDatabase $dbw, $fname)
Commit the transcation on a DB handle and wait for replica DBs to catch up.
output( $out, $channel=null)
Throw some output to the user.
addDescription( $text)
Set the description text.
setBatchSize( $s=0)
Set the batch size.
const LIST_AND
Definition Defines.php:49
const DB_MASTER
Definition defines.php:29