Code Coverage |
||||||||||
Lines |
Functions and Methods |
Classes and Traits |
||||||||
Total | |
0.00% |
0 / 17 |
|
0.00% |
0 / 4 |
CRAP | |
0.00% |
0 / 1 |
HookHelper | |
0.00% |
0 / 17 |
|
0.00% |
0 / 4 |
56 | |
0.00% |
0 / 1 |
__construct | |
0.00% |
0 / 1 |
|
0.00% |
0 / 1 |
2 | |||
filterPageTitlesForEdit | |
0.00% |
0 / 4 |
|
0.00% |
0 / 1 |
2 | |||
filterPageTitlesForRename | |
0.00% |
0 / 4 |
|
0.00% |
0 / 1 |
2 | |||
normalizeTitlesToProcess | |
0.00% |
0 / 8 |
|
0.00% |
0 / 1 |
20 |
1 | <?php |
2 | declare( strict_types = 1 ); |
3 | |
4 | namespace MediaWiki\Extension\ReplaceText; |
5 | |
6 | use MediaWiki\Extension\ReplaceText\Hooks\HookRunner; |
7 | use MediaWiki\HookContainer\HookContainer; |
8 | use MediaWiki\Title\Title; |
9 | use MediaWiki\Title\TitleArrayFromResult; |
10 | use Wikimedia\Rdbms\IResultWrapper; |
11 | |
12 | class HookHelper { |
13 | private HookRunner $hookRunner; |
14 | |
15 | /** |
16 | * Constructor. |
17 | * @param HookContainer $hookContainer |
18 | */ |
19 | public function __construct( HookContainer $hookContainer ) { |
20 | $this->hookRunner = new HookRunner( $hookContainer ); |
21 | } |
22 | |
23 | /** |
24 | * Runs the ReplaceTextFilterPageTitlesForEdit hook and returns titles to be edited |
25 | * @param IResultWrapper $resultWrapper |
26 | * @return Title[] |
27 | */ |
28 | public function filterPageTitlesForEdit( IResultWrapper $resultWrapper ): array { |
29 | $titles = new TitleArrayFromResult( $resultWrapper ); |
30 | $filteredTitles = iterator_to_array( $titles ); |
31 | $this->hookRunner->onReplaceTextFilterPageTitlesForEdit( $filteredTitles ); |
32 | |
33 | return $this->normalizeTitlesToProcess( $filteredTitles, $titles ); |
34 | } |
35 | |
36 | /** |
37 | * Runs the ReplaceTextFilterPageTitlesForRename hook and returns titles to be edited |
38 | * @param IResultWrapper $resultWrapper |
39 | * @return Title[] |
40 | */ |
41 | public function filterPageTitlesForRename( IResultWrapper $resultWrapper ): array { |
42 | $titles = new TitleArrayFromResult( $resultWrapper ); |
43 | $filteredTitles = iterator_to_array( $titles ); |
44 | $this->hookRunner->onReplaceTextFilterPageTitlesForRename( $filteredTitles ); |
45 | |
46 | return $this->normalizeTitlesToProcess( $filteredTitles, $titles ); |
47 | } |
48 | |
49 | private function normalizeTitlesToProcess( array $filteredTitles, TitleArrayFromResult $titles ): array { |
50 | foreach ( $filteredTitles as $title ) { |
51 | $filteredTitles[ $title->getPrefixedText() ] = $title; |
52 | } |
53 | |
54 | $titlesToEdit = []; |
55 | foreach ( $titles as $title ) { |
56 | if ( isset( $filteredTitles[ $title->getPrefixedText() ] ) ) { |
57 | $titlesToEdit[ $title->getPrefixedText() ] = $title; |
58 | } else { |
59 | $titlesToEdit[ $title->getPrefixedText() ] = null; |
60 | } |
61 | } |
62 | |
63 | return $titlesToEdit; |
64 | } |
65 | } |