mirror of
https://gerrit.wikimedia.org/r/mediawiki/extensions/ReplaceText
synced 2024-09-23 10:19:50 +00:00
Add ReplaceTextFilterPageTitlesForRename hook to avoid pages to rename
Allows other extensions to specify pages that should not be renamed. Bug: T313148 Change-Id: I47b4549b90fe30be7a80e74db60d16be6776e7f6
This commit is contained in:
parent
f7a6474c72
commit
986b51e5a2
|
@ -7,3 +7,6 @@ directory, and then find /docs/Hooks.md.
|
|||
|
||||
;ReplaceTextFilterPageTitlesForEdit: Provides other extension the ability to avoid editing content on pages based on their titles.
|
||||
\TitleArrayFromResult &$titles: Array of page titles whose content will be edited
|
||||
|
||||
;ReplaceTextFilterPageTitlesForRename: Provides other extension the ability to avoid renaming pages based on their titles.
|
||||
\TitleArrayFromResult &$titles: Array of page titles being renamed
|
||||
|
|
|
@ -32,7 +32,6 @@ namespace MediaWiki\Extension\ReplaceText;
|
|||
|
||||
use Maintenance;
|
||||
use MediaWiki\MediaWikiServices;
|
||||
use MediaWiki\Title\TitleArrayFromResult;
|
||||
use MWException;
|
||||
|
||||
$IP = getenv( 'MW_INSTALL_PATH' ) ?: __DIR__ . '/../../..';
|
||||
|
@ -388,6 +387,7 @@ EOF;
|
|||
$this->output( ".\n" );
|
||||
}
|
||||
|
||||
$hookRunner = new HookRunner( MediaWikiServices::getInstance()->getHookContainer() );
|
||||
if ( $this->rename ) {
|
||||
$res = Search::getMatchingTitles(
|
||||
$target,
|
||||
|
@ -396,7 +396,7 @@ EOF;
|
|||
$this->prefix,
|
||||
$useRegex
|
||||
);
|
||||
$titlesToProcess = new TitleArrayFromResult( $res );
|
||||
$titlesToProcess = $hookRunner->filterPageTitlesForRename( $res );
|
||||
} else {
|
||||
$res = Search::doSearchQuery(
|
||||
$target,
|
||||
|
@ -405,7 +405,6 @@ EOF;
|
|||
$this->prefix,
|
||||
$useRegex
|
||||
);
|
||||
$hookRunner = new HookRunner( MediaWikiServices::getInstance()->getHookContainer() );
|
||||
$titlesToProcess = $hookRunner->filterPageTitlesForEdit( $res );
|
||||
}
|
||||
|
||||
|
|
|
@ -25,6 +25,23 @@ class HookRunner {
|
|||
$filteredTitles = iterator_to_array( $titles );
|
||||
$this->hookContainer->run( 'ReplaceTextFilterPageTitlesForEdit', [ &$filteredTitles ] );
|
||||
|
||||
return $this->normalizeTitlesToProcess( $filteredTitles, $titles );
|
||||
}
|
||||
|
||||
/**
|
||||
* Runs the ReplaceTextFilterPageTitlesForRename hook and returns titles to be edited
|
||||
* @param IResultWrapper $resultWrapper
|
||||
* @return Title[]
|
||||
*/
|
||||
public function filterPageTitlesForRename( IResultWrapper $resultWrapper ): array {
|
||||
$titles = new TitleArrayFromResult( $resultWrapper );
|
||||
$filteredTitles = iterator_to_array( $titles );
|
||||
$this->hookContainer->run( 'ReplaceTextFilterPageTitlesForRename', [ &$filteredTitles ] );
|
||||
|
||||
return $this->normalizeTitlesToProcess( $filteredTitles, $titles );
|
||||
}
|
||||
|
||||
private function normalizeTitlesToProcess( array $filteredTitles, TitleArrayFromResult $titles ): array {
|
||||
foreach ( $filteredTitles as $title ) {
|
||||
$filteredTitles[ $title->getPrefixedText() ] = $title;
|
||||
}
|
||||
|
|
|
@ -444,12 +444,19 @@ class SpecialReplaceText extends SpecialPage {
|
|||
$this->use_regex
|
||||
);
|
||||
|
||||
$titles_to_process = $this->hookRunner->filterPageTitlesForRename( $res );
|
||||
|
||||
foreach ( $res as $row ) {
|
||||
$title = Title::makeTitleSafe( $row->page_namespace, $row->page_title );
|
||||
if ( !$title ) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if ( !isset( $titles_to_process[ $title->getPrefixedText() ] ) ) {
|
||||
$unmoveable_titles[] = $title;
|
||||
continue;
|
||||
}
|
||||
|
||||
$new_title = Search::getReplacedTitle(
|
||||
$title,
|
||||
$this->target,
|
||||
|
@ -515,7 +522,8 @@ class SpecialReplaceText extends SpecialPage {
|
|||
$this->prefix,
|
||||
$this->use_regex
|
||||
);
|
||||
$count = $res->numRows();
|
||||
$titles = $this->hookRunner->filterPageTitlesForRename( $res );
|
||||
$count = count( $titles );
|
||||
if ( $count > 0 ) {
|
||||
return $this->msg( 'replacetext_warning' )->numParams( $count )
|
||||
->params( $this->replacement )->parse();
|
||||
|
|
Loading…
Reference in a new issue