mirror of
https://gerrit.wikimedia.org/r/mediawiki/extensions/Linter
synced 2024-11-23 15:36:52 +00:00
Convert onRevisionFromEditComplete handler to DomainEvents
Bug: T378937 Depends-On: I34c7aca80cfa96306e2c350a5f9bc723713b98c3 Change-Id: I020038da7c02d6c62071cdb3b572a527cee8fbd2
This commit is contained in:
parent
9cf7c4d30b
commit
bfb4ef65b5
|
@ -52,10 +52,16 @@
|
|||
"APIQuerySiteInfoGeneralInfo": "main",
|
||||
"InfoAction": "main",
|
||||
"WikiPageDeletionUpdates": "main",
|
||||
"RevisionFromEditComplete": "main",
|
||||
"ParserLogLinterData": "main",
|
||||
"RevisionDataUpdates": "main"
|
||||
},
|
||||
"DomainEventSubscribers": [
|
||||
{
|
||||
"events": [ "PageUpdated" ],
|
||||
"class": "MediaWiki\\Linter\\LintSubscriber",
|
||||
"services": [ "Linter.TotalsLookup", "Linter.Database" ]
|
||||
}
|
||||
],
|
||||
"APIListModules": {
|
||||
"linterrors": {
|
||||
"class": "MediaWiki\\Linter\\ApiQueryLintErrors",
|
||||
|
|
|
@ -35,16 +35,13 @@ use MediaWiki\Linker\LinkRenderer;
|
|||
use MediaWiki\Logger\LoggerFactory;
|
||||
use MediaWiki\Output\Hook\BeforePageDisplayHook;
|
||||
use MediaWiki\Output\OutputPage;
|
||||
use MediaWiki\Page\Hook\RevisionFromEditCompleteHook;
|
||||
use MediaWiki\Page\Hook\WikiPageDeletionUpdatesHook;
|
||||
use MediaWiki\Page\ParserOutputAccess;
|
||||
use MediaWiki\Page\WikiPageFactory;
|
||||
use MediaWiki\Revision\RenderedRevision;
|
||||
use MediaWiki\Revision\RevisionRecord;
|
||||
use MediaWiki\SpecialPage\SpecialPage;
|
||||
use MediaWiki\Storage\Hook\RevisionDataUpdatesHook;
|
||||
use MediaWiki\Title\Title;
|
||||
use MediaWiki\User\UserIdentity;
|
||||
use Skin;
|
||||
use WikiPage;
|
||||
|
||||
|
@ -53,7 +50,6 @@ class Hooks implements
|
|||
BeforePageDisplayHook,
|
||||
InfoActionHook,
|
||||
ParserLogLinterDataHook,
|
||||
RevisionFromEditCompleteHook,
|
||||
WikiPageDeletionUpdatesHook,
|
||||
RevisionDataUpdatesHook
|
||||
{
|
||||
|
@ -66,6 +62,11 @@ class Hooks implements
|
|||
private Database $database;
|
||||
private bool $parseOnDerivedDataUpdates;
|
||||
|
||||
/**
|
||||
* This should match Parsoid's PageConfig::hasLintableContentModel()
|
||||
*/
|
||||
public const LINTABLE_CONTENT_MODELS = [ CONTENT_MODEL_WIKITEXT, 'proofread-page' ];
|
||||
|
||||
/**
|
||||
* @param LinkRenderer $linkRenderer
|
||||
* @param JobQueueGroup $jobQueueGroup
|
||||
|
@ -150,44 +151,6 @@ class Hooks implements
|
|||
}, __METHOD__ );
|
||||
}
|
||||
|
||||
/**
|
||||
* This should match Parsoid's PageConfig::hasLintableContentModel()
|
||||
*/
|
||||
public const LINTABLE_CONTENT_MODELS = [ CONTENT_MODEL_WIKITEXT, 'proofread-page' ];
|
||||
|
||||
/**
|
||||
* Hook: RevisionFromEditComplete
|
||||
*
|
||||
* Remove entries from the linter table upon page content model change away from wikitext
|
||||
*
|
||||
* @param WikiPage $wikiPage
|
||||
* @param RevisionRecord $newRevisionRecord
|
||||
* @param bool|int $originalRevId
|
||||
* @param UserIdentity $user
|
||||
* @param string[] &$tags
|
||||
*/
|
||||
public function onRevisionFromEditComplete(
|
||||
$wikiPage, $newRevisionRecord, $originalRevId, $user, &$tags
|
||||
) {
|
||||
// This is just a stop-gap to deal with callers that aren't complying
|
||||
// with the advertised hook signature.
|
||||
if ( !is_array( $tags ) ) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (
|
||||
in_array( "mw-blank", $tags ) ||
|
||||
( in_array( "mw-contentmodelchange", $tags ) &&
|
||||
!in_array( $wikiPage->getContentModel(), self::LINTABLE_CONTENT_MODELS ) )
|
||||
) {
|
||||
$this->totalsLookup->updateStats(
|
||||
$this->database->setForPage(
|
||||
$wikiPage->getId(), $wikiPage->getNamespace(), []
|
||||
)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Hook: APIQuerySiteInfoGeneralInfo
|
||||
*
|
||||
|
|
44
includes/LintSubscriber.php
Normal file
44
includes/LintSubscriber.php
Normal file
|
@ -0,0 +1,44 @@
|
|||
<?php
|
||||
|
||||
namespace MediaWiki\Linter;
|
||||
|
||||
use MediaWiki\DomainEvent\EventSubscriberBase;
|
||||
use MediaWiki\Revision\SlotRecord;
|
||||
use MediaWiki\Storage\PageUpdatedEvent;
|
||||
|
||||
class LintSubscriber extends EventSubscriberBase {
|
||||
private TotalsLookup $totalsLookup;
|
||||
private Database $database;
|
||||
|
||||
public function __construct( TotalsLookup $totalsLookup, Database $database ) {
|
||||
$this->totalsLookup = $totalsLookup;
|
||||
$this->database = $database;
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove entries from the linter table upon page content model change away from wikitext
|
||||
*
|
||||
* @noinspection PhpUnused
|
||||
* @param PageUpdatedEvent $event
|
||||
* @return void
|
||||
*/
|
||||
public function handlePageUpdatedEventAfterCommit( PageUpdatedEvent $event ) {
|
||||
$page = $event->getPage();
|
||||
$tags = $event->getTags();
|
||||
|
||||
if (
|
||||
in_array( "mw-blank", $tags ) ||
|
||||
(
|
||||
in_array( "mw-contentmodelchange", $tags ) &&
|
||||
!in_array(
|
||||
$event->getNewRevision()->getSlot( SlotRecord::MAIN )->getModel(),
|
||||
Hooks::LINTABLE_CONTENT_MODELS
|
||||
)
|
||||
)
|
||||
) {
|
||||
$this->totalsLookup->updateStats(
|
||||
$this->database->setForPage( $page->getId(), $page->getNamespace(), [] )
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue