Cicalese has uploaded a new change for review. https://gerrit.wikimedia.org/r/237650
Change subject: added handling of deletion ...................................................................... added handling of deletion Change-Id: I83ce29c957bbd09faaa9f89845f330d32272cd19 --- M SemanticDependency.class.php M SemanticDependency.php 2 files changed, 100 insertions(+), 22 deletions(-) git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/SemanticDependency refs/changes/50/237650/1 diff --git a/SemanticDependency.class.php b/SemanticDependency.class.php index 52c3ce2..005d6a1 100644 --- a/SemanticDependency.class.php +++ b/SemanticDependency.class.php @@ -1,7 +1,7 @@ <?php /* - * Copyright (c) 2014 The MITRE Corporation + * Copyright (c) 2014-2015 The MITRE Corporation * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -24,24 +24,7 @@ class SemanticDependency { - /** - * @since 1.0 - * - * @param Parser &$parser - */ - public static function setup( &$parser ) { - - if ( !isset( $GLOBALS['SemanticDependency_Properties'] ) ) { - $GLOBALS['SemanticDependency_Properties'] = array(); - } - - if ( !isset( $GLOBALS['SemanticDependency_JobThreshold'] ) ) { - $GLOBALS['SemanticDependency_JobThreshold'] = 1; - } - - return true; - - } + private static $titles = array(); /** * @since 1.0 @@ -52,6 +35,7 @@ public static function updateDataAfter( \SMW\Store $store, \SMW\SemanticData $semanticData ) { + self::setup(); $instance = new self( $store, $semanticData ); $instance->setConfiguration( $GLOBALS['SemanticDependency_Properties'], @@ -59,6 +43,72 @@ $instance->performUpdate(); return true; + } + + /** + * @since 1.1 + * + * @param WikiPage &$article + * @param User &$user + * @param &$reason + * @param &$error + */ + public static function articleDelete( WikiPage &$article, + User &$user, &$reason, &$error ) { + + self::setup(); + $store = \SMW\StoreFactory::getStore(); + $page = SMWDIWikiPage::newFromTitle( $article->getTitle() ); + $semanticData = $store->getSemanticData( $page ); + $instance = new self( $store, $semanticData ); + $instance->setConfiguration( + $GLOBALS['SemanticDependency_Properties'], + $GLOBALS['SemanticDependency_JobThreshold'] ); + $instance->saveDependentTitles(); + + return true; + } + + /** + * @since 1.1 + * + * @param WikiPage &$article + * @param User &$user + * @param $reason + * @param $id + * @param $content + * @param $logEntry + */ + public static function articleDeleteComplete( WikiPage &$article, + User &$user, $reason, $id, $content, $logEntry ) { + + self::setup(); + $store = \SMW\StoreFactory::getStore(); + $page = SMWDIWikiPage::newFromTitle( $article->getTitle() ); + $semanticData = $store->getSemanticData( $page ); + $instance = new self( $store, $semanticData ); + $instance->setConfiguration( + $GLOBALS['SemanticDependency_Properties'], + $GLOBALS['SemanticDependency_JobThreshold'] ); + $instance->performUpdate(); + + return true; + } + + /** + * @since 1.0 + * + * @param Parser &$parser + */ + private static function setup() { + + if ( !isset( $GLOBALS['SemanticDependency_Properties'] ) ) { + $GLOBALS['SemanticDependency_Properties'] = array(); + } + + if ( !isset( $GLOBALS['SemanticDependency_JobThreshold'] ) ) { + $GLOBALS['SemanticDependency_JobThreshold'] = 1; + } } private $store; @@ -90,6 +140,20 @@ } /** + * @since 1.1 + */ + public function saveDependentTitles() { + + $title = $this->semanticData->getSubject()->getTitle(); + + $dependentTitles = $this->getDependentTitles( $title ); + + $titleText = $title->getPrefixedText(); + + self::$titles[$titleText] = $dependentTitles; + } + + /** * @since 1.0 */ public function performUpdate() { @@ -98,6 +162,18 @@ $dependentTitles = $this->getDependentTitles( $title ); + if ( $dependentTitles == array() ) { + + // page may have been deleted; see if we've saved info for it + $titleText = $title->getPrefixedText(); + + if ( array_key_exists( $titleText, self::$titles ) ) { + + // page was deleted; get saved list of dependent titles + $dependentTitles = self::$titles[$titleText]; + } + } + $jobs = array(); $count = 1; diff --git a/SemanticDependency.php b/SemanticDependency.php index 00365bd..c005aa5 100644 --- a/SemanticDependency.php +++ b/SemanticDependency.php @@ -1,7 +1,7 @@ <?php /* - * Copyright (c) 2014 The MITRE Corporation + * Copyright (c) 2014-2015 The MITRE Corporation * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -29,7 +29,7 @@ $GLOBALS['wgExtensionCredits']['semantic'][] = array ( 'path' => __FILE__, 'name' => 'Semantic Dependency', - 'version' => '1.0', + 'version' => '1.1', 'author' => array( '[https://www.mediawiki.org/wiki/User:Cindy.cicalese Cindy Cicalese]' ), @@ -40,9 +40,11 @@ $GLOBALS['wgAutoloadClasses']['SemanticDependency'] = __DIR__ . '/SemanticDependency.class.php'; -$GLOBALS['wgHooks']['ParserFirstCallInit'][] = 'SemanticDependency::setup'; $GLOBALS['wgHooks']['SMWStore::updateDataAfter'][] = 'SemanticDependency::updateDataAfter'; +$GLOBALS['wgHooks']['ArticleDelete'][] = 'SemanticDependency::articleDelete'; +$GLOBALS['wgHooks']['ArticleDeleteComplete'][] = + 'SemanticDependency::articleDeleteComplete'; $GLOBALS['wgMessagesDirs']['SemanticDependency'] = __DIR__ . '/i18n'; $GLOBALS['wgExtensionMessagesFiles']['SemanticDependency'] = -- To view, visit https://gerrit.wikimedia.org/r/237650 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I83ce29c957bbd09faaa9f89845f330d32272cd19 Gerrit-PatchSet: 1 Gerrit-Project: mediawiki/extensions/SemanticDependency Gerrit-Branch: master Gerrit-Owner: Cicalese <cical...@mitre.org> _______________________________________________ MediaWiki-commits mailing list MediaWiki-commits@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits