/** * @param LBFactory $lbFactory * @param WikiPage $page * @param Revision $newRev * @throws MWException */ protected function notifyUpdatesForRevision(LBFactory $lbFactory, WikiPage $page, Revision $newRev) { $config = RequestContext::getMain()->getConfig(); $title = $page->getTitle(); // Get the new revision if (!$newRev->getContent()) { return; // deleted? } // Get the prior revision (the same for null edits) if ($newRev->getParentId()) { $oldRev = Revision::newFromId($newRev->getParentId(), Revision::READ_LATEST); if (!$oldRev->getContent()) { return; // deleted? } } else { $oldRev = null; } // Parse the new revision and get the categories $categoryChanges = $this->getExplicitCategoriesChanges($title, $newRev, $oldRev); list($categoryInserts, $categoryDeletes) = $categoryChanges; if (!$categoryInserts && !$categoryDeletes) { return; // nothing to do } $catMembChange = new CategoryMembershipChange($title, $newRev); $catMembChange->checkTemplateLinks(); $batchSize = $config->get('UpdateRowsPerQuery'); $insertCount = 0; foreach ($categoryInserts as $categoryName) { $categoryTitle = Title::makeTitle(NS_CATEGORY, $categoryName); $catMembChange->triggerCategoryAddedNotification($categoryTitle); if ($insertCount++ && $insertCount % $batchSize == 0) { $lbFactory->commitAndWaitForReplication(__METHOD__, $this->ticket); } } foreach ($categoryDeletes as $categoryName) { $categoryTitle = Title::makeTitle(NS_CATEGORY, $categoryName); $catMembChange->triggerCategoryRemovedNotification($categoryTitle); if ($insertCount++ && $insertCount++ % $batchSize == 0) { $lbFactory->commitAndWaitForReplication(__METHOD__, $this->ticket); } } }