/**
  * @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;
 }
Example #3
0
 /**
  * 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;
     };
 }