Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
0.00% covered (danger)
0.00%
0 / 17
0.00% covered (danger)
0.00%
0 / 4
CRAP
0.00% covered (danger)
0.00%
0 / 1
HookHelper
0.00% covered (danger)
0.00%
0 / 17
0.00% covered (danger)
0.00%
0 / 4
56
0.00% covered (danger)
0.00%
0 / 1
 __construct
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 filterPageTitlesForEdit
0.00% covered (danger)
0.00%
0 / 4
0.00% covered (danger)
0.00%
0 / 1
2
 filterPageTitlesForRename
0.00% covered (danger)
0.00%
0 / 4
0.00% covered (danger)
0.00%
0 / 1
2
 normalizeTitlesToProcess
0.00% covered (danger)
0.00%
0 / 8
0.00% covered (danger)
0.00%
0 / 1
20
1<?php
2declare( strict_types = 1 );
3
4namespace MediaWiki\Extension\ReplaceText;
5
6use MediaWiki\Extension\ReplaceText\Hooks\HookRunner;
7use MediaWiki\HookContainer\HookContainer;
8use MediaWiki\Title\Title;
9use MediaWiki\Title\TitleArrayFromResult;
10use Wikimedia\Rdbms\IResultWrapper;
11
12class 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}