/** * @since 1.9 * * @param Title $title * @param array $params job parameters * @param integer $id job id */ public function __construct(Title $title, $params = array(), $id = 0) { parent::__construct('SMW\\UpdateDispatcherJob', $title, $params, $id); $this->removeDuplicates = true; $this->applicationFactory = ApplicationFactory::getInstance(); $this->setStore($this->applicationFactory->getStore()); }
private function doUpdate() { LinkCache::singleton()->clear(); $this->applicationFactory = ApplicationFactory::getInstance(); if ($this->getTitle()->exists()) { return $this->doPrepareForUpdate(); } $this->applicationFactory->getStore()->clearData(DIWikiPage::newFromTitle($this->getTitle())); return true; }
/** * Convenience method to find last modified MW timestamp for a subject that * has been added using the storage-engine. */ private function getWikiPageLastModifiedTimestamp(DIWikiPage $wikiPage) { $dataItems = $this->applicationFactory->getStore()->getPropertyValues($wikiPage, new DIProperty('_MDAT')); if ($dataItems !== array()) { return end($dataItems)->getMwTimestamp(TS_MW); } return 0; }
/** * @see Job::run * * @since 2.3 */ public function run() { $this->pageUpdater = $this->applicationFactory->newMwCollaboratorFactory()->newPageUpdater(); $this->store = $this->applicationFactory->getStore(); if ($this->hasParameter('limit')) { $this->limit = $this->getParameter('limit'); } if ($this->hasParameter('offset')) { $this->offset = $this->getParameter('offset'); } if ($this->hasParameter('idlist')) { $this->findEmbeddedQueryTargetLinksBatches($this->getParameter('idlist')); } $this->pageUpdater->addPage($this->getTitle()); $this->pageUpdater->doPurgeParserCache(); Hooks::run('SMW::Job::AfterParserCachePurgeComplete', array($this)); return true; }
private function newHtmlContentBuilder($webRequest) { $htmlContentBuilder = new HtmlContentBuilder($this->applicationFactory->getStore(), $this->subjectDV->getDataItem()); $htmlContentBuilder->setOption('dir', $webRequest->getVal('dir')); $htmlContentBuilder->setOption('printable', $webRequest->getVal('printable')); $htmlContentBuilder->setOption('offset', $webRequest->getVal('offset')); $htmlContentBuilder->setOption('showInverse', $this->applicationFactory->getSettings()->get('smwgBrowseShowInverse')); $htmlContentBuilder->setOption('showAll', $this->applicationFactory->getSettings()->get('smwgBrowseShowAll')); $htmlContentBuilder->setOption('byApi', $this->applicationFactory->getSettings()->get('smwgBrowseByApi')); return $htmlContentBuilder; }
private function matchWikiPageLastModifiedToRevisionLastModified($title) { if ($this->getParameter('pm') !== ($this->getParameter('pm') | SMW_UJ_PM_CLASTMDATE)) { return false; } $lastModified = $this->applicationFactory->getStore()->getWikiPageLastModifiedTimestamp(DIWikiPage::newFromTitle($title)); if ($lastModified === \WikiPage::factory($title)->getTimestamp()) { $pageUpdater = $this->applicationFactory->newMwCollaboratorFactory()->newPageUpdater(); $pageUpdater->addPage($title); $pageUpdater->doPurgeParserCache(); return true; } return false; }
private function registerHooksForInternalUse(ApplicationFactory $applicationFactory, DeferredRequestDispatchManager $deferredRequestDispatchManager) { $queryDependencyLinksStoreFactory = new QueryDependencyLinksStoreFactory(); $queryDependencyLinksStore = $queryDependencyLinksStoreFactory->newQueryDependencyLinksStore($applicationFactory->getStore()); $transitionalDiffStore = $applicationFactory->singleton('TransitionalDiffStore'); /** * @see https://www.semantic-mediawiki.org/wiki/Hooks#SMW::SQLStore::AfterDataUpdateComplete */ $this->handlers['SMW::SQLStore::AfterDataUpdateComplete'] = function ($store, $semanticData, $compositePropertyTableDiffIterator) use($queryDependencyLinksStoreFactory, $queryDependencyLinksStore, $deferredRequestDispatchManager, $transitionalDiffStore) { // When in commandLine mode avoid deferred execution and run a process // within the same transaction $deferredRequestDispatchManager->isCommandLineMode($store->getOptions()->has('isCommandLineMode') ? $store->getOptions()->get('isCommandLineMode') : $GLOBALS['wgCommandLineMode']); $queryDependencyLinksStore->setStore($store); $subject = $semanticData->getSubject(); $slot = $transitionalDiffStore->createSlotFrom($compositePropertyTableDiffIterator); $queryDependencyLinksStore->pruneOutdatedTargetLinks($subject, $compositePropertyTableDiffIterator); $entityIdListRelevanceDetectionFilter = $queryDependencyLinksStoreFactory->newEntityIdListRelevanceDetectionFilter($store, $compositePropertyTableDiffIterator); $jobParameters = $queryDependencyLinksStore->buildParserCachePurgeJobParametersFrom($entityIdListRelevanceDetectionFilter); $deferredRequestDispatchManager->scheduleParserCachePurgeJobWith($subject->getTitle(), $jobParameters); $fulltextSearchTableFactory = new FulltextSearchTableFactory(); $textByChangeUpdater = $fulltextSearchTableFactory->newTextByChangeUpdater($store); $textByChangeUpdater->pushUpdates($compositePropertyTableDiffIterator, $deferredRequestDispatchManager, $slot); // Since we cannot predict as to when the slot is used and by whom, // schedule a job to ensure to be the last in-line to clean-up // any remaining slots for this transaction $deferredRequestDispatchManager->scheduleChronologyPurgeJobWith($subject->getTitle(), array('slot:id' => $slot)); return true; }; /** * @see https://www.semantic-mediawiki.org/wiki/Hooks#SMW::Store::AfterQueryResultLookupComplete */ $this->handlers['SMW::Store::AfterQueryResultLookupComplete'] = function ($store, &$result) use($queryDependencyLinksStore, $applicationFactory) { $queryDependencyLinksStore->setStore($store); $queryDependencyLinksStore->doUpdateDependenciesFrom($result); $applicationFactory->singleton('CachedQueryResultPrefetcher')->recordStats(); return true; }; }