MediaWiki  master
deleteSelfExternals.php
Go to the documentation of this file.
1 <?php
24 require_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 );
78  } while ( $db->affectedRows() );
79  }
80  }
81 }
82 
83 $maintClass = DeleteSelfExternals::class;
84 require_once RUN_MAINTENANCE_IF_MAIN;
commitTransaction(IDatabase $dbw, $fname)
Commit the transcation on a DB handle and wait for replica DBs to catch up.
const RUN_MAINTENANCE_IF_MAIN
Definition: Maintenance.php:39
error( $err, $die=0)
Throw an error to the user.
Maintenance script that deletes self-references to $wgServer from the externallinks table...
wfParseUrl( $url)
parse_url() work-alike, but non-broken.
Abstract maintenance class for quickly writing and churning out maintenance scripts with minimal effo...
Definition: Maintenance.php:86
setBatchSize( $s=0)
Set the batch size.
const DB_MASTER
Definition: defines.php:26
const LIST_AND
Definition: Defines.php:39
addDescription( $text)
Set the description text.
output( $out, $channel=null)
Throw some output to the user.
static getQueryConditions( $filterEntry, array $options=[])
Return query conditions which will match the specified string.
Definition: LinkFilter.php:254
$wgServer
URL of the server.
getDB( $db, $groups=[], $dbDomain=false)
Returns a database to be used by current maintenance script.