Code Coverage |
||||||||||
Lines |
Functions and Methods |
Classes and Traits |
||||||||
Total | |
0.00% |
0 / 59 |
|
0.00% |
0 / 15 |
CRAP | |
0.00% |
0 / 1 |
PageMoveCollection | |
0.00% |
0 / 59 |
|
0.00% |
0 / 15 |
600 | |
0.00% |
0 / 1 |
__construct | |
0.00% |
0 / 8 |
|
0.00% |
0 / 1 |
2 | |||
getTranslatablePage | |
0.00% |
0 / 1 |
|
0.00% |
0 / 1 |
2 | |||
getTranslationPagesPair | |
0.00% |
0 / 1 |
|
0.00% |
0 / 1 |
2 | |||
getUnitPagesPair | |
0.00% |
0 / 1 |
|
0.00% |
0 / 1 |
2 | |||
getSubpagesPair | |
0.00% |
0 / 1 |
|
0.00% |
0 / 1 |
2 | |||
getTranslatableSubpages | |
0.00% |
0 / 1 |
|
0.00% |
0 / 1 |
2 | |||
getTranslationPages | |
0.00% |
0 / 1 |
|
0.00% |
0 / 1 |
2 | |||
getUnitPages | |
0.00% |
0 / 1 |
|
0.00% |
0 / 1 |
2 | |||
getSubpages | |
0.00% |
0 / 1 |
|
0.00% |
0 / 1 |
2 | |||
getListOfPages | |
0.00% |
0 / 10 |
|
0.00% |
0 / 1 |
6 | |||
getListOfPagesToRedirect | |
0.00% |
0 / 9 |
|
0.00% |
0 / 1 |
2 | |||
getOldPagesFromList | |
0.00% |
0 / 4 |
|
0.00% |
0 / 1 |
6 | |||
getPagePairFromList | |
0.00% |
0 / 5 |
|
0.00% |
0 / 1 |
12 | |||
getLeaveRedirectPairFromList | |
0.00% |
0 / 8 |
|
0.00% |
0 / 1 |
20 | |||
getTalkpages | |
0.00% |
0 / 7 |
|
0.00% |
0 / 1 |
12 |
1 | <?php |
2 | declare( strict_types = 1 ); |
3 | |
4 | namespace MediaWiki\Extension\Translate\PageTranslation; |
5 | |
6 | use MediaWiki\Title\Title; |
7 | |
8 | /** |
9 | * Collection of pages potentially affected by a page move operation. |
10 | * @author Abijeet Patro |
11 | * @license GPL-2.0-or-later |
12 | * @since 2021.09 |
13 | */ |
14 | class PageMoveCollection { |
15 | private PageMoveOperation $translatablePage; |
16 | /** @var PageMoveOperation[] */ |
17 | private array $translationPagePairs; |
18 | /** @var PageMoveOperation[] */ |
19 | private array $unitPagesPairs; |
20 | /** @var PageMoveOperation[] */ |
21 | private array $subpagesPairs; |
22 | /** @var PageMoveOperation[] */ |
23 | private array $talkpagesPairs; |
24 | /** @var Title[] */ |
25 | private array $translatableSubpages; |
26 | |
27 | /** |
28 | * @param PageMoveOperation $translatablePage |
29 | * @param PageMoveOperation[] $translationPagePairs Translation pages |
30 | * @param PageMoveOperation[] $unitPagesPairs Translation unit pages |
31 | * @param PageMoveOperation[] $subpagesPairs Non translatable sub pages |
32 | * @param Title[] $translatableSubpages |
33 | */ |
34 | public function __construct( |
35 | PageMoveOperation $translatablePage, |
36 | array $translationPagePairs, |
37 | array $unitPagesPairs, |
38 | array $subpagesPairs, |
39 | array $translatableSubpages |
40 | ) { |
41 | $this->translatablePage = $translatablePage; |
42 | $this->translationPagePairs = $translationPagePairs; |
43 | $this->unitPagesPairs = $unitPagesPairs; |
44 | $this->subpagesPairs = $subpagesPairs; |
45 | $this->translatableSubpages = $translatableSubpages; |
46 | |
47 | // Populate the talk pages from the various inputs. |
48 | $this->talkpagesPairs = $this->getTalkpages( |
49 | $this->translatablePage, ...$translationPagePairs, ...$unitPagesPairs, ...$subpagesPairs |
50 | ); |
51 | } |
52 | |
53 | public function getTranslatablePage(): PageMoveOperation { |
54 | return $this->translatablePage; |
55 | } |
56 | |
57 | /** @return PageMoveOperation[] */ |
58 | public function getTranslationPagesPair(): array { |
59 | return $this->translationPagePairs; |
60 | } |
61 | |
62 | /** @return PageMoveOperation[] */ |
63 | public function getUnitPagesPair(): array { |
64 | return $this->unitPagesPairs; |
65 | } |
66 | |
67 | /** @return PageMoveOperation[] */ |
68 | public function getSubpagesPair(): array { |
69 | return $this->subpagesPairs; |
70 | } |
71 | |
72 | /** @return Title[] */ |
73 | public function getTranslatableSubpages(): array { |
74 | return $this->translatableSubpages; |
75 | } |
76 | |
77 | /** @return Title[] */ |
78 | public function getTranslationPages(): array { |
79 | return $this->getOldPagesFromList( $this->translationPagePairs ); |
80 | } |
81 | |
82 | /** @return Title[] */ |
83 | public function getUnitPages(): array { |
84 | return $this->getOldPagesFromList( $this->unitPagesPairs ); |
85 | } |
86 | |
87 | /** @return Title[] */ |
88 | public function getSubpages(): array { |
89 | return $this->getOldPagesFromList( $this->subpagesPairs ); |
90 | } |
91 | |
92 | /** @return string[] */ |
93 | public function getListOfPages(): array { |
94 | $pageList = [ |
95 | $this->translatablePage->getOldTitle()->getPrefixedText() => |
96 | $this->translatablePage->getNewTitle() ? |
97 | $this->translatablePage->getNewTitle()->getPrefixedText() : null |
98 | ]; |
99 | $pageList = array_merge( $pageList, $this->getPagePairFromList( $this->translationPagePairs ) ); |
100 | $pageList = array_merge( $pageList, $this->getPagePairFromList( $this->unitPagesPairs ) ); |
101 | $pageList = array_merge( $pageList, $this->getPagePairFromList( $this->subpagesPairs ) ); |
102 | $pageList = array_merge( $pageList, $this->getPagePairFromList( $this->talkpagesPairs ) ); |
103 | |
104 | return $pageList; |
105 | } |
106 | |
107 | /** @return array<string,bool> */ |
108 | public function getListOfPagesToRedirect(): array { |
109 | $redirects = [ |
110 | $this->translatablePage->getOldTitle()->getPrefixedText() => |
111 | $this->translatablePage->shouldLeaveRedirect() |
112 | ]; |
113 | |
114 | $redirects = array_merge( $redirects, $this->getLeaveRedirectPairFromList( $this->translationPagePairs ) ); |
115 | $redirects = array_merge( $redirects, $this->getLeaveRedirectPairFromList( $this->unitPagesPairs ) ); |
116 | $redirects = array_merge( $redirects, $this->getLeaveRedirectPairFromList( $this->subpagesPairs ) ); |
117 | $redirects = array_merge( $redirects, $this->getLeaveRedirectPairFromList( $this->talkpagesPairs ) ); |
118 | |
119 | return $redirects; |
120 | } |
121 | |
122 | /** |
123 | * @param PageMoveOperation[] $pagePairs |
124 | * @return Title[] |
125 | */ |
126 | private function getOldPagesFromList( array $pagePairs ): array { |
127 | $oldTitles = []; |
128 | foreach ( $pagePairs as $pair ) { |
129 | $oldTitles[] = $pair->getOldTitle(); |
130 | } |
131 | |
132 | return $oldTitles; |
133 | } |
134 | |
135 | /** @return string[] */ |
136 | private function getPagePairFromList( array $pagePairs ): array { |
137 | $pairs = []; |
138 | foreach ( $pagePairs as $pair ) { |
139 | $pairs[ $pair->getOldTitle()->getPrefixedText() ] = |
140 | $pair->getNewTitle() ? $pair->getNewTitle()->getPrefixedText() : null; |
141 | } |
142 | |
143 | return $pairs; |
144 | } |
145 | |
146 | /** @return array<string,bool> */ |
147 | private function getLeaveRedirectPairFromList( array $pagePairs ): array { |
148 | $pairs = []; |
149 | foreach ( $pagePairs as $pair ) { |
150 | if ( $pair->shouldLeaveRedirect() ) { |
151 | $pairs[ $pair->getOldTitle()->getPrefixedText() ] = true; |
152 | $talkpage = $pair->getOldTalkPage(); |
153 | if ( $talkpage ) { |
154 | $pairs[ $talkpage->getPrefixedText() ] = true; |
155 | } |
156 | } |
157 | } |
158 | |
159 | return $pairs; |
160 | } |
161 | |
162 | /** @return PageMoveOperation[] */ |
163 | private function getTalkpages( PageMoveOperation ...$allMoveOperations ): array { |
164 | $talkpagesPairs = []; |
165 | foreach ( $allMoveOperations as $moveOperation ) { |
166 | if ( $moveOperation->hasTalkpage() ) { |
167 | $talkpagesPairs[] = new PageMoveOperation( |
168 | $moveOperation->getOldTalkpage(), $moveOperation->getNewTalkpage() |
169 | ); |
170 | } |
171 | } |
172 | return $talkpagesPairs; |
173 | } |
174 | } |