Code Coverage |
||||||||||
Lines |
Functions and Methods |
Classes and Traits |
||||||||
Total | |
0.00% |
0 / 31 |
|
0.00% |
0 / 6 |
CRAP | |
0.00% |
0 / 1 |
LqtRedirector | |
0.00% |
0 / 31 |
|
0.00% |
0 / 6 |
110 | |
0.00% |
0 / 1 |
__construct | |
0.00% |
0 / 3 |
|
0.00% |
0 / 1 |
2 | |||
afterHeaderImported | |
0.00% |
0 / 1 |
|
0.00% |
0 / 1 |
2 | |||
afterPostImported | |
0.00% |
0 / 6 |
|
0.00% |
0 / 1 |
6 | |||
afterTopicImported | |
0.00% |
0 / 9 |
|
0.00% |
0 / 1 |
12 | |||
importAborted | |
0.00% |
0 / 1 |
|
0.00% |
0 / 1 |
2 | |||
doRedirect | |
0.00% |
0 / 11 |
|
0.00% |
0 / 1 |
6 |
1 | <?php |
2 | |
3 | namespace Flow\Import\Postprocessor; |
4 | |
5 | use Flow\Import\IImportHeader; |
6 | use Flow\Import\IImportPost; |
7 | use Flow\Import\IImportTopic; |
8 | use Flow\Import\LiquidThreadsApi\ImportPost; |
9 | use Flow\Import\LiquidThreadsApi\ImportTopic; |
10 | use Flow\Import\PageImportState; |
11 | use Flow\Import\TopicImportState; |
12 | use Flow\Model\PostRevision; |
13 | use Flow\Model\UUID; |
14 | use Flow\UrlGenerator; |
15 | use MediaWiki\MediaWikiServices; |
16 | use MediaWiki\Title\Title; |
17 | use MediaWiki\User\User; |
18 | use WikitextContent; |
19 | |
20 | class LqtRedirector implements Postprocessor { |
21 | /** @var UrlGenerator */ |
22 | protected $urlGenerator; |
23 | /** |
24 | * @var array[] |
25 | * @phan-var non-empty-array[] |
26 | */ |
27 | protected $redirectsToDo; |
28 | /** @var User */ |
29 | protected $user; |
30 | |
31 | public function __construct( UrlGenerator $urlGenerator, User $user ) { |
32 | $this->urlGenerator = $urlGenerator; |
33 | $this->redirectsToDo = []; |
34 | $this->user = $user; |
35 | } |
36 | |
37 | public function afterHeaderImported( PageImportState $state, IImportHeader $header ) { |
38 | // not a thing to do, yet |
39 | } |
40 | |
41 | public function afterPostImported( TopicImportState $state, IImportPost $post, PostRevision $newPost ) { |
42 | if ( $post instanceof ImportPost /* LQT */ ) { |
43 | $this->redirectsToDo[] = [ |
44 | $post->getTitle(), |
45 | $state->topicWorkflow->getId(), |
46 | $newPost->getPostId() |
47 | ]; |
48 | } |
49 | } |
50 | |
51 | public function afterTopicImported( TopicImportState $state, IImportTopic $topic ) { |
52 | if ( !$topic instanceof ImportTopic /* LQT */ ) { |
53 | return; |
54 | } |
55 | $this->doRedirect( |
56 | $topic->getTitle(), |
57 | $state->topicWorkflow->getId() |
58 | ); |
59 | foreach ( $this->redirectsToDo as $args ) { |
60 | // @phan-suppress-next-line PhanParamTooFewUnpack |
61 | $this->doRedirect( ...$args ); |
62 | } |
63 | |
64 | $this->redirectsToDo = []; |
65 | } |
66 | |
67 | public function importAborted() { |
68 | $this->redirectsToDo = []; |
69 | } |
70 | |
71 | protected function doRedirect( Title $fromTitle, UUID $toTopic, UUID $toPost = null ) { |
72 | if ( $toPost ) { |
73 | $redirectAnchor = $this->urlGenerator->postLink( null, $toTopic, $toPost ); |
74 | } else { |
75 | $redirectAnchor = $this->urlGenerator->topicLink( null, $toTopic ); |
76 | } |
77 | |
78 | $redirectTarget = $redirectAnchor->resolveTitle(); |
79 | |
80 | $newContent = new WikitextContent( "#REDIRECT [[" . $redirectTarget->getFullText() . "]]" ); |
81 | $page = MediaWikiServices::getInstance()->getWikiPageFactory()->newFromTitle( $fromTitle ); |
82 | $summary = wfMessage( 'flow-lqt-redirect-reason' )->plain(); |
83 | $page->doUserEditContent( $newContent, $this->user, $summary, EDIT_FORCE_BOT ); |
84 | |
85 | MediaWikiServices::getInstance()->getWatchedItemStore()->duplicateAllAssociatedEntries( |
86 | $fromTitle, $redirectTarget |
87 | ); |
88 | } |
89 | } |