private function triggerCategoryChanges($categoryInserts, $categoryDeletes) { $catMembChange = new CategoryMembershipChange($this->mTitle, $this->mRevision); if ($this->mRecursive) { $catMembChange->checkTemplateLinks(); } foreach ($categoryInserts as $categoryName => $value) { $categoryTitle = Title::newFromText($categoryName, NS_CATEGORY); $catMembChange->triggerCategoryAddedNotification($categoryTitle); } foreach ($categoryDeletes as $categoryName => $value) { $categoryTitle = Title::newFromText($categoryName, NS_CATEGORY); $catMembChange->triggerCategoryRemovedNotification($categoryTitle); } }
/** * @param WikiPage $page * @param Revision $newRev * @throws MWException */ protected function notifyUpdatesForRevision(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 } $dbw = wfGetDB(DB_MASTER); $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) { $dbw->commit(__METHOD__, 'flush'); wfGetLBFactory()->waitForReplication(); } } foreach ($categoryDeletes as $categoryName) { $categoryTitle = Title::makeTitle(NS_CATEGORY, $categoryName); $catMembChange->triggerCategoryRemovedNotification($categoryTitle); if ($insertCount++ && $insertCount++ % $batchSize == 0) { $dbw->commit(__METHOD__, 'flush'); wfGetLBFactory()->waitForReplication(); } } }
private function newChange(Revision $revision = null) { $change = new CategoryMembershipChange(Title::newFromText('UTPage'), $revision); $change->overrideNewForCategorizationCallback('CategoryMembershipChangeTest::newForCategorizationCallback'); return $change; }