MediaWiki REL1_39
deleteTag.php
Go to the documentation of this file.
1<?php
2
10
11require_once __DIR__ . '/Maintenance.php';
12
13class DeleteTag extends Maintenance {
14 public function __construct() {
15 parent::__construct();
16 $this->addDescription( 'Deletes a change tag' );
17 $this->addArg( 'tag name', 'Name of the tag to delete' );
18 $this->setBatchSize( 500 );
19 }
20
21 public function execute() {
22 $dbw = $this->getDB( DB_PRIMARY );
23 $services = MediaWikiServices::getInstance();
24 $defStore = $services->getChangeTagDefStore();
25 $lbFactory = $services->getDBLoadBalancerFactory();
26 $options = [ 'domain' => $lbFactory->getLocalDomainID() ];
27
28 $tag = $this->getArg( 0 );
29 try {
30 $tagId = $defStore->getId( $tag );
31 } catch ( NameTableAccessException $ex ) {
32 $this->fatalError( "Tag '$tag' not found" );
33 }
34
36 if ( !$status->isOK() ) {
37 $message = $status->getHTML( false, false, 'en' );
38 $this->fatalError( Sanitizer::stripAllTags( $message ) );
39 }
40
41 $this->output( "Deleting tag '$tag'...\n" );
42
43 // Make the tag impossible to add by users while we're deleting it and drop the
44 // usage counter to zero
45 $dbw->update(
46 'change_tag_def',
47 [
48 'ctd_user_defined' => 0,
49 'ctd_count' => 0,
50 ],
51 [ 'ctd_id' => $tagId ],
52 __METHOD__
53 );
55
56 // Iterate over change_tag, deleting rows in batches
57 $count = 0;
58 do {
59 $ids = $dbw->newSelectQueryBuilder()
60 ->select( 'ct_id' )
61 ->from( 'change_tag' )
62 ->where( [ 'ct_tag_id' => $tagId ] )
63 ->limit( $this->getBatchSize() )
64 ->caller( __METHOD__ )
65 ->fetchFieldValues();
66
67 if ( !$ids ) {
68 break;
69 }
70 $dbw->delete( 'change_tag', [ 'ct_id' => $ids ], __METHOD__ );
71 $count += $dbw->affectedRows();
72 $this->output( "$count\n" );
73 $lbFactory->waitForReplication( $options );
74 } while ( true );
75 $this->output( "The tag has been removed from $count revisions, deleting the tag itself...\n" );
76
78 $this->output( "Done.\n" );
79 }
80}
81
82$maintClass = DeleteTag::class;
83require_once RUN_MAINTENANCE_IF_MAIN;
getDB()
const BYPASS_MAX_USAGE_CHECK
Flag for canDeleteTag().
static purgeTagCacheAll()
Invalidates the short-term cache of defined tags used by the list*DefinedTags functions,...
static canDeleteTag( $tag, Authority $performer=null, int $flags=0)
Is it OK to allow the user to delete this tag?
static deleteTagEverywhere( $tag)
Permanently removes all traces of a tag from the DB.
__construct()
Default constructor.
Definition deleteTag.php:14
execute()
Do the actual work.
Definition deleteTag.php:21
Abstract maintenance class for quickly writing and churning out maintenance scripts with minimal effo...
addArg( $arg, $description, $required=true)
Add some args that are needed.
output( $out, $channel=null)
Throw some output to the user.
getBatchSize()
Returns batch size.
getArg( $argId=0, $default=null)
Get an argument.
addDescription( $text)
Set the description text.
setBatchSize( $s=0)
fatalError( $msg, $exitCode=1)
Output a message and terminate the current script.
Service locator for MediaWiki core services.
Exception representing a failure to look up a row from a name table.
$maintClass
Definition deleteTag.php:82
const DB_PRIMARY
Definition defines.php:28