mirror of
https://gerrit.wikimedia.org/r/mediawiki/extensions/DiscussionTools
synced 2024-11-28 10:11:45 +00:00
Merge "EventDispatcher: Ensure we fetch page content from the primary database"
This commit is contained in:
commit
cced58b5cc
|
@ -9,11 +9,9 @@
|
||||||
|
|
||||||
namespace MediaWiki\Extension\DiscussionTools\Notifications;
|
namespace MediaWiki\Extension\DiscussionTools\Notifications;
|
||||||
|
|
||||||
use ApiMain;
|
|
||||||
use DOMElement;
|
use DOMElement;
|
||||||
use EchoEvent;
|
use EchoEvent;
|
||||||
use Error;
|
use Error;
|
||||||
use FauxRequest;
|
|
||||||
use IDBAccessObject;
|
use IDBAccessObject;
|
||||||
use Iterator;
|
use Iterator;
|
||||||
use MediaWiki\Extension\DiscussionTools\CommentParser;
|
use MediaWiki\Extension\DiscussionTools\CommentParser;
|
||||||
|
@ -22,30 +20,37 @@ use MediaWiki\Extension\DiscussionTools\SubscriptionItem;
|
||||||
use MediaWiki\MediaWikiServices;
|
use MediaWiki\MediaWikiServices;
|
||||||
use MediaWiki\Revision\RevisionRecord;
|
use MediaWiki\Revision\RevisionRecord;
|
||||||
use MediaWiki\User\UserIdentity;
|
use MediaWiki\User\UserIdentity;
|
||||||
|
use ParserOptions;
|
||||||
use Title;
|
use Title;
|
||||||
|
use Wikimedia\Assert\Assert;
|
||||||
use Wikimedia\Parsoid\Utils\DOMUtils;
|
use Wikimedia\Parsoid\Utils\DOMUtils;
|
||||||
|
|
||||||
class EventDispatcher {
|
class EventDispatcher {
|
||||||
/**
|
/**
|
||||||
* @param RevisionRecord $revision
|
* @param RevisionRecord $revRecord
|
||||||
* @return CommentParser
|
* @return CommentParser
|
||||||
*/
|
*/
|
||||||
private static function getParsedRevision( RevisionRecord $revision ) : CommentParser {
|
private static function getParsedRevision( RevisionRecord $revRecord ) : CommentParser {
|
||||||
$api = new ApiMain(
|
$services = MediaWikiServices::getInstance();
|
||||||
new FauxRequest(
|
|
||||||
[
|
$pageRecord = $services->getPageStore()->getPageByReference( $revRecord->getPage() );
|
||||||
'action' => 'parse',
|
Assert::postcondition( $pageRecord !== null, 'Revision had no page' );
|
||||||
'oldid' => $revision->getId()
|
|
||||||
],
|
// If the $revRecord was fetched from the primary database, this will also fetch the content
|
||||||
/* was posted? */ true
|
// from the primary database (using the same query flags)
|
||||||
),
|
$status = $services->getParserOutputAccess()->getParserOutput(
|
||||||
/* enable write? */ true
|
$pageRecord,
|
||||||
|
ParserOptions::newCanonical( 'canonical' ),
|
||||||
|
$revRecord
|
||||||
);
|
);
|
||||||
|
if ( !$status->isOK() ) {
|
||||||
|
throw new Error( 'Could not load revision for notifications' );
|
||||||
|
}
|
||||||
|
|
||||||
$api->execute();
|
$parserOutput = $status->getValue();
|
||||||
$data = $api->getResult()->getResultData();
|
$html = $parserOutput->getText();
|
||||||
|
|
||||||
$doc = DOMUtils::parseHTML( $data['parse']['text'] );
|
$doc = DOMUtils::parseHTML( $html );
|
||||||
$container = $doc->getElementsByTagName( 'body' )->item( 0 );
|
$container = $doc->getElementsByTagName( 'body' )->item( 0 );
|
||||||
if ( !( $container instanceof DOMElement ) ) {
|
if ( !( $container instanceof DOMElement ) ) {
|
||||||
throw new Error( 'Could not load revision for notifications' );
|
throw new Error( 'Could not load revision for notifications' );
|
||||||
|
|
Loading…
Reference in a new issue