MediaWiki  master
deleteSelfExternals.php
Go to the documentation of this file.
1 <?php
25 
26 require_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;
84 require_once RUN_MAINTENANCE_IF_MAIN;
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.
static getQueryConditions( $filterEntry, array $options=[])
Return query conditions which will match the specified string.
Definition: LinkFilter.php:252
Abstract maintenance class for quickly writing and churning out maintenance scripts with minimal effo...
Definition: Maintenance.php:66
getDB( $db, $groups=[], $dbDomain=false)
Returns a database to be used by current maintenance script.
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