MediaWiki REL1_39
deleteSelfExternals.php
Go to the documentation of this file.
1<?php
25
26require_once __DIR__ . '/Maintenance.php';
27
35 public function __construct() {
36 parent::__construct();
37 $this->addDescription( 'Delete self-references to $wgServer from externallinks' );
38 $this->setBatchSize( 1000 );
39 }
40
41 public function execute() {
42 // Extract the host and scheme from $wgServer
43 $server = $this->getConfig()->get( MainConfigNames::Server );
44 $bits = wfParseUrl( $server );
45 if ( !$bits ) {
46 $this->fatalError( 'Could not parse $wgServer' );
47 }
48
49 $this->output( "Deleting self externals from $server\n" );
50 $db = $this->getDB( DB_PRIMARY );
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()
const LIST_AND
Definition Defines.php:43
wfParseUrl( $url)
parse_url() work-alike, but non-broken.
Maintenance script that deletes self-references to $wgServer from the externallinks table.
__construct()
Default constructor.
execute()
Do the actual work.
Abstract maintenance class for quickly writing and churning out maintenance scripts with minimal effo...
commitTransaction(IDatabase $dbw, $fname)
Commit the transaction 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)
fatalError( $msg, $exitCode=1)
Output a message and terminate the current script.
A class containing constants representing the names of configuration variables.
const DB_PRIMARY
Definition defines.php:28