Code Coverage |
||||||||||
Lines |
Functions and Methods |
Classes and Traits |
||||||||
Total | |
0.00% |
0 / 18 |
|
0.00% |
0 / 5 |
CRAP | |
0.00% |
0 / 1 |
TimedTextHooks | |
0.00% |
0 / 18 |
|
0.00% |
0 / 5 |
72 | |
0.00% |
0 / 1 |
__construct | |
0.00% |
0 / 1 |
|
0.00% |
0 / 1 |
2 | |||
onPageDeleteComplete | |
0.00% |
0 / 2 |
|
0.00% |
0 / 1 |
2 | |||
onPageMoveComplete | |
0.00% |
0 / 2 |
|
0.00% |
0 / 1 |
2 | |||
onPageSaveComplete | |
0.00% |
0 / 2 |
|
0.00% |
0 / 1 |
6 | |||
purgeDependingPages | |
0.00% |
0 / 11 |
|
0.00% |
0 / 1 |
12 |
1 | <?php |
2 | |
3 | namespace MediaWiki\TimedMediaHandler; |
4 | |
5 | use HTMLCacheUpdateJob; |
6 | use JobQueueGroup; |
7 | use ManualLogEntry; |
8 | use MediaWiki\Hook\PageMoveCompleteHook; |
9 | use MediaWiki\Linker\LinkTarget; |
10 | use MediaWiki\Page\Hook\PageDeleteCompleteHook; |
11 | use MediaWiki\Page\ProperPageIdentity; |
12 | use MediaWiki\Permissions\Authority; |
13 | use MediaWiki\Revision\RevisionRecord; |
14 | use MediaWiki\Storage\Hook\PageSaveCompleteHook; |
15 | use MediaWiki\Title\Title; |
16 | use MediaWiki\User\UserIdentity; |
17 | |
18 | class TimedTextHooks implements |
19 | PageDeleteCompleteHook, |
20 | PageMoveCompleteHook, |
21 | PageSaveCompleteHook |
22 | { |
23 | |
24 | private JobQueueGroup $jobQueueGroup; |
25 | |
26 | public function __construct( JobQueueGroup $jobQueueGroup ) { |
27 | $this->jobQueueGroup = $jobQueueGroup; |
28 | } |
29 | |
30 | /** |
31 | * @inheritDoc |
32 | */ |
33 | public function onPageDeleteComplete( |
34 | ProperPageIdentity $page, |
35 | Authority $deleter, |
36 | string $reason, |
37 | int $pageID, |
38 | RevisionRecord $deletedRev, |
39 | ManualLogEntry $logEntry, |
40 | int $archivedRevisionCount |
41 | ) { |
42 | $title = Title::newFromPageIdentity( $page ); |
43 | $this->purgeDependingPages( $title, $deleter->getUser() ); |
44 | } |
45 | |
46 | /** |
47 | * @inheritDoc |
48 | */ |
49 | public function onPageMoveComplete( $old, $new, $user, $pageid, $redirid, $reason, $revision ) { |
50 | $this->purgeDependingPages( $old, $user ); |
51 | $this->purgeDependingPages( $new, $user ); |
52 | } |
53 | |
54 | /** |
55 | * @inheritDoc |
56 | */ |
57 | public function onPageSaveComplete( $wikiPage, $user, $summary, $flags, $revisionRecord, $editResult ) { |
58 | if ( $flags & EDIT_NEW ) { |
59 | $this->purgeDependingPages( $wikiPage->getTitle(), $user ); |
60 | } |
61 | } |
62 | |
63 | /** |
64 | * When timedtext files are added or removed we need to update the cached html |
65 | * of all pages using those files. |
66 | * |
67 | * @param LinkTarget $timedTextTitle |
68 | * @param UserIdentity $user performing the action that led to cache invalidation being required |
69 | * @return void |
70 | */ |
71 | protected function purgeDependingPages( LinkTarget $timedTextTitle, UserIdentity $user ) { |
72 | if ( $timedTextTitle->getNamespace() === NS_TIMEDTEXT ) { |
73 | $timedTextPage = new TimedTextPage( Title::newFromLinkTarget( $timedTextTitle ) ); |
74 | $correspondingFileTitle = $timedTextPage->getCorrespondingFileTitle(); |
75 | |
76 | if ( !$correspondingFileTitle ) { |
77 | return; |
78 | } |
79 | |
80 | // Invalidate cache for all pages using this file |
81 | $cacheUpdateJob = HTMLCacheUpdateJob::newForBacklinks( |
82 | $correspondingFileTitle, |
83 | 'imagelinks', |
84 | [ 'causeAction' => 'tmh-timedtext', 'causeAgent' => $user->getName() ] |
85 | ); |
86 | $this->jobQueueGroup->lazyPush( $cacheUpdateJob ); |
87 | |
88 | // TODO handle GlobalUsage |
89 | } |
90 | } |
91 | } |