wiki.techinc.nl/maintenance/addChangeTag.php
Lucas Werkmeister 0798a9ccc6 addChangeTag: Ensure system user can create tag
User::newSystemUser() doesn’t ensure any particular rights on the user
(a system user isn’t necessarily a sysop – system user mainly means no
login, no email etc.), so unless the MAINTENANCE_SCRIPT_USER was
previously granted the managechangetags right via some group, the
maintenance script will fail. Wrap the user in an UltimateAuthority
(“intended for use in maintenance scripts and tests”, though apparently
never before used in maintenance scripts) to ensure that the check in
ChangeTags::createTagWithChecks() succeeds. (We don’t want to bypass
that method and call ChangeTags::defineTag() directly, because that
doesn’t include logging, and ChangeTags::logTagManagementAction() isn’t
public.)

Change-Id: I0c2d6f1ac6c5b2f41126455ff332af68548b60c5
2022-01-18 17:52:47 +01:00

65 lines
1.8 KiB
PHP

<?php
/**
* Adds a change tag to the wiki.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
* http://www.gnu.org/copyleft/gpl.html
*
* @file
* @ingroup Maintenance
*/
use MediaWiki\Permissions\UltimateAuthority;
require_once __DIR__ . '/Maintenance.php';
/**
* Adds a change tag to the wiki
*
* @ingroup Maintenance
* @since 1.32
*/
class AddChangeTag extends Maintenance {
public function __construct() {
parent::__construct();
$this->addDescription( 'Adds a change tag to the wiki.' );
$this->addOption( 'tag', 'Tag to add', true, true );
$this->addOption( 'reason', 'Reason for adding the tag', true, true );
}
public function execute() {
$user = User::newSystemUser( User::MAINTENANCE_SCRIPT_USER, [ 'steal' => true ] );
$tag = $this->getOption( 'tag' );
$status = ChangeTags::createTagWithChecks(
$tag,
$this->getOption( 'reason' ),
new UltimateAuthority( $user )
);
if ( !$status->isGood() ) {
$this->fatalError( $status->getMessage( false, false, 'en' )->text() );
}
$this->output( "$tag was created.\n" );
}
}
$maintClass = AddChangeTag::class;
require_once RUN_MAINTENANCE_IF_MAIN;