Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
0.00% covered (danger)
0.00%
0 / 8
0.00% covered (danger)
0.00%
0 / 2
CRAP
0.00% covered (danger)
0.00%
0 / 1
DataUpdatesHooks
0.00% covered (danger)
0.00%
0 / 8
0.00% covered (danger)
0.00%
0 / 2
20
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
 onRevisionDataUpdates
0.00% covered (danger)
0.00%
0 / 7
0.00% covered (danger)
0.00%
0 / 1
12
1<?php
2/**
3 * DiscussionTools data updates hooks
4 *
5 * @file
6 * @ingroup Extensions
7 * @license MIT
8 */
9
10namespace MediaWiki\Extension\DiscussionTools\Hooks;
11
12use DeferrableUpdate;
13use MediaWiki\Extension\DiscussionTools\ThreadItemStore;
14use MediaWiki\Revision\RenderedRevision;
15use MediaWiki\Storage\Hook\RevisionDataUpdatesHook;
16use MWCallableUpdate;
17use MWExceptionHandler;
18use Throwable;
19use Title;
20
21class DataUpdatesHooks implements RevisionDataUpdatesHook {
22
23    private ThreadItemStore $threadItemStore;
24
25    public function __construct(
26        ThreadItemStore $threadItemStore
27    ) {
28        $this->threadItemStore = $threadItemStore;
29    }
30
31    /**
32     * @param Title $title
33     * @param RenderedRevision $renderedRevision
34     * @param DeferrableUpdate[] &$updates
35     * @return bool|void
36     */
37    public function onRevisionDataUpdates( $title, $renderedRevision, &$updates ) {
38        // This doesn't trigger on action=purge, only on automatic purge after editing a template or
39        // transcluded page, and API action=purge&forcelinkupdate=1.
40
41        // TODO Deduplicate work between this and the Echo hook (make it use Parsoid too)
42        $rev = $renderedRevision->getRevision();
43        if ( HookUtils::isAvailableForTitle( $title ) ) {
44            $updates[] = new MWCallableUpdate( function () use ( $rev ) {
45                try {
46                    $threadItemSet = HookUtils::parseRevisionParsoidHtml( $rev );
47                    $this->threadItemStore->insertThreadItems( $rev, $threadItemSet );
48                } catch ( Throwable $e ) {
49                    // Catch errors, so that they don't cause other updates to fail (T315383), but log them.
50                    MWExceptionHandler::logException( $e );
51                }
52            }, __METHOD__ );
53        }
54    }
55}