Hoo man has uploaded a new change for review.
https://gerrit.wikimedia.org/r/187931
Change subject: Update Wikibase: Fixes for UsageTracking and the anon edit
warning
......................................................................
Update Wikibase: Fixes for UsageTracking and the anon edit warning
Change-Id: I9478b0efb3485ea558db552ac569ec322ce35300
---
M composer.lock
M extensions/Wikibase/client/WikibaseClient.php
M extensions/Wikibase/client/includes/Changes/AffectedPagesFinder.php
M extensions/Wikibase/client/includes/Usage/SiteLinkUsageLookup.php
M extensions/Wikibase/client/includes/hooks/DataUpdateHookHandlers.php
M
extensions/Wikibase/client/tests/phpunit/includes/Changes/AffectedPagesFinderTest.php
M
extensions/Wikibase/client/tests/phpunit/includes/Usage/SiteLinkUsageLookupTest.php
M
extensions/Wikibase/client/tests/phpunit/includes/hooks/DataUpdateHookHandlersTest.php
M extensions/Wikibase/repo/resources/wikibase.ui.entityViewInit.js
M vendor/composer/installed.json
10 files changed, 193 insertions(+), 43 deletions(-)
git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/Wikidata
refs/changes/31/187931/1
diff --git a/composer.lock b/composer.lock
index 13f98f2..35bf21e 100644
--- a/composer.lock
+++ b/composer.lock
@@ -1230,12 +1230,12 @@
"source": {
"type": "git",
"url":
"https://github.com/wikimedia/mediawiki-extensions-Wikibase.git",
- "reference": "9979bb324a882c64b6b00cea638ed94271ca9ece"
+ "reference": "8c22a3a8b533a6a705064078c03f1122268d5818"
},
"dist": {
"type": "zip",
- "url":
"https://api.github.com/repos/wikimedia/mediawiki-extensions-Wikibase/zipball/9979bb324a882c64b6b00cea638ed94271ca9ece",
- "reference": "9979bb324a882c64b6b00cea638ed94271ca9ece",
+ "url":
"https://api.github.com/repos/wikimedia/mediawiki-extensions-Wikibase/zipball/8c22a3a8b533a6a705064078c03f1122268d5818",
+ "reference": "8c22a3a8b533a6a705064078c03f1122268d5818",
"shasum": ""
},
"require": {
@@ -1302,7 +1302,7 @@
"wikibaserepo",
"wikidata"
],
- "time": "2015-01-15 09:32:07"
+ "time": "2015-01-31 15:01:29"
},
{
"name": "wikibase/wikimedia-badges",
diff --git a/extensions/Wikibase/client/WikibaseClient.php
b/extensions/Wikibase/client/WikibaseClient.php
index 0f807f5..15ce72b 100644
--- a/extensions/Wikibase/client/WikibaseClient.php
+++ b/extensions/Wikibase/client/WikibaseClient.php
@@ -95,6 +95,7 @@
$wgHooks['ParserAfterParse'][] =
'\Wikibase\Client\Hooks\ParserAfterParseHookHandler::onParserAfterParse';
$wgHooks['SidebarBeforeOutput'][] =
'\Wikibase\Client\Hooks\SidebarHookHandlers::onSidebarBeforeOutput';
$wgHooks['ArticleEditUpdates'][] =
'\Wikibase\Client\Hooks\DataUpdateHookHandlers::onArticleEditUpdates';
+ $wgHooks['ArticleDeleteComplete'][] =
'\Wikibase\Client\Hooks\DataUpdateHookHandlers::onArticleDeleteComplete';
$wgHooks['ParserFirstCallInit'][] =
'\Wikibase\ClientHooks::onParserFirstCallInit';
$wgHooks['MagicWordwgVariableIDs'][] =
'\Wikibase\ClientHooks::onMagicWordwgVariableIDs';
$wgHooks['ParserGetVariableValueSwitch'][] =
'\Wikibase\ClientHooks::onParserGetVariableValueSwitch';
diff --git
a/extensions/Wikibase/client/includes/Changes/AffectedPagesFinder.php
b/extensions/Wikibase/client/includes/Changes/AffectedPagesFinder.php
index 27ab13d..9a76f4c 100644
--- a/extensions/Wikibase/client/includes/Changes/AffectedPagesFinder.php
+++ b/extensions/Wikibase/client/includes/Changes/AffectedPagesFinder.php
@@ -270,7 +270,12 @@
/** @var PageEntityUsages $pageEntityUsages */
foreach ( $usages as $pageEntityUsages ) {
- $title = $this->titleFactory->newFromID(
$pageEntityUsages->getPageId() );
+ try {
+ $title = $this->titleFactory->newFromID(
$pageEntityUsages->getPageId() );
+ } catch ( StorageException $ex ) {
+ // page not found, skip
+ continue;
+ }
if ( $this->checkPageExistence && !$title->exists() ) {
continue;
@@ -324,6 +329,14 @@
$usagesPerPage = array();
foreach ( $titles as $title ) {
$pageId = $title->getArticleID();
+
+ if ( $pageId === 0 ) {
+ wfDebugLog( 'WikibaseChangeNotification',
__METHOD__ . ': Article ID for '
+ . $title->getFullText() . ' is 0.' );
+
+ continue;
+ }
+
$usagesPerPage[$pageId] = new PageEntityUsages(
$pageId, $usagesForItem );
}
diff --git a/extensions/Wikibase/client/includes/Usage/SiteLinkUsageLookup.php
b/extensions/Wikibase/client/includes/Usage/SiteLinkUsageLookup.php
index 7712007..5b52bdb 100644
--- a/extensions/Wikibase/client/includes/Usage/SiteLinkUsageLookup.php
+++ b/extensions/Wikibase/client/includes/Usage/SiteLinkUsageLookup.php
@@ -135,7 +135,16 @@
// NOTE: since we don't know how the item is
used on the linked page, assume "all" usage.
$usage = new EntityUsage( $itemId,
EntityUsage::ALL_USAGE );
- return new PageEntityUsages(
$title->getArticleID(), array( $usage ) );
+ $pageId = $title->getArticleID();
+
+ if ( $pageId === 0 ) {
+ wfDebugLog(
'WikibaseChangeNotification', __METHOD__ . ': Article ID for '
+ . $title->getFullText() . ' is
0.' );
+
+ return null;
+ }
+
+ return new PageEntityUsages( $pageId, array(
$usage ) );
},
$rows
);
diff --git
a/extensions/Wikibase/client/includes/hooks/DataUpdateHookHandlers.php
b/extensions/Wikibase/client/includes/hooks/DataUpdateHookHandlers.php
index 76e0fdb..aad1efa 100644
--- a/extensions/Wikibase/client/includes/hooks/DataUpdateHookHandlers.php
+++ b/extensions/Wikibase/client/includes/hooks/DataUpdateHookHandlers.php
@@ -2,15 +2,14 @@
namespace Wikibase\Client\Hooks;
-use Parser;
-use ParserOutput;
-use StripState;
+use Content;
+use ManualLogEntry;
use Title;
+use User;
use Wikibase\Client\Store\UsageUpdater;
use Wikibase\Client\Usage\ParserOutputUsageAccumulator;
use Wikibase\Client\WikibaseClient;
use Wikibase\NamespaceChecker;
-use Wikibase\Updates\DataUpdateAdapter;
use WikiPage;
/**
@@ -58,6 +57,7 @@
/**
* Static handler for the ArticleEditUpdates hook.
* @see https://www.mediawiki.org/wiki/Manual:Hooks/ArticleEditUpdates
+ * @see doArticleEditUpdates
*
* @param WikiPage $page The WikiPage object managing the edit
* @param object $editInfo The current edit info object.
@@ -67,6 +67,34 @@
public static function onArticleEditUpdates( WikiPage $page,
&$editInfo, $changed ) {
$handler = self::newFromGlobalState();
$handler->doArticleEditUpdates( $page, $editInfo, $changed );
+ }
+
+ /**
+ * Static handler for ArticleDeleteComplete
+ * @see
https://www.mediawiki.org/wiki/Manual:Hooks/ArticleDeleteComplete
+ * @see doArticleDeleteComplete
+ *
+ * @param WikiPage $article
+ * @param User $user
+ * @param string $reason
+ * @param int $id id of the article that was deleted
+ * @param Content $content
+ * @param ManualLogEntry $logEntry
+ *
+ * @return bool
+ */
+ public static function onArticleDeleteComplete(
+ WikiPage &$article,
+ User &$user,
+ $reason,
+ $id,
+ Content $content,
+ ManualLogEntry $logEntry
+ ) {
+ $title = $article->getTitle();
+
+ $handler = self::newFromGlobalState();
+ $handler->doArticleDeleteComplete( $title->getNamespace(), $id
);
}
public function __construct(
@@ -79,7 +107,7 @@
}
/**
- * Hook runs after internal parsing
+ * Hook run after a new revision was stored
*
* @param WikiPage $page The WikiPage object managing the edit
* @param object $editInfo The current edit info object.
@@ -102,4 +130,22 @@
);
}
+ /**
+ * Hook run after a page was deleted.
+ *
+ * @param int $namespaceId
+ * @param int $pageId
+ */
+ public function doArticleDeleteComplete( $namespace, $pageId ) {
+ if ( !$this->namespaceChecker->isWikibaseEnabled( $namespace )
) {
+ // shorten out
+ return;
+ }
+
+ $this->usageUpdater->updateUsageForPage(
+ $pageId,
+ array()
+ );
+ }
+
}
diff --git
a/extensions/Wikibase/client/tests/phpunit/includes/Changes/AffectedPagesFinderTest.php
b/extensions/Wikibase/client/tests/phpunit/includes/Changes/AffectedPagesFinderTest.php
index 5d6d768..7329bad 100644
---
a/extensions/Wikibase/client/tests/phpunit/includes/Changes/AffectedPagesFinderTest.php
+++
b/extensions/Wikibase/client/tests/phpunit/includes/Changes/AffectedPagesFinderTest.php
@@ -8,10 +8,12 @@
use Wikibase\Client\Store\TitleFactory;
use Wikibase\Client\Usage\EntityUsage;
use Wikibase\Client\Usage\PageEntityUsages;
+use Wikibase\Client\Usage\SiteLinkUsageLookup;
use Wikibase\DataModel\Entity\Item;
use Wikibase\DataModel\Entity\ItemId;
use Wikibase\DataModel\SiteLink;
use Wikibase\ItemChange;
+use Wikibase\Lib\Store\SiteLinkLookup;
use Wikibase\Lib\Store\StorageException;
use Wikibase\Test\TestChanges;
@@ -69,6 +71,19 @@
->method( 'getPagesUsing' )
->will( $this->returnValue( new ArrayIterator( $usage )
) );
+ $affectedPagesFinder = new AffectedPagesFinder(
+ $usageLookup,
+ $this->getNamespaceChecker(),
+ $this->getTitleFactory(),
+ 'enwiki',
+ 'en',
+ false
+ );
+
+ return $affectedPagesFinder;
+ }
+
+ private function getNamespaceChecker() {
$namespaceChecker = $this->getMockBuilder(
'Wikibase\NamespaceChecker' )
->disableOriginalConstructor()->getMock();
@@ -76,18 +91,7 @@
->method( 'isWikibaseEnabled' )
->will( $this->returnValue( true ) );
- $titleFactory = $this->getTitleFactory();
-
- $affectedPagesFinder = new AffectedPagesFinder(
- $usageLookup,
- $namespaceChecker,
- $titleFactory,
- 'enwiki',
- 'en',
- false
- );
-
- return $affectedPagesFinder;
+ return $namespaceChecker;
}
public function getChangedAspectsProvider() {
@@ -410,6 +414,49 @@
$this->assertPageEntityUsages( $expected, $actual );
}
+ public function testGetAffectedUsagesByPage_withDeletedPage() {
+ $pageTitle = 'RandomKitten-2x5jsg8j3bvmpm4!5';
+
+ $affectedPagesFinder = new AffectedPagesFinder(
+ $this->getSiteLinkUsageLookup( $pageTitle ),
+ $this->getNamespaceChecker(),
+ new TitleFactory(),
+ 'enwiki',
+ 'en',
+ false
+ );
+
+ $itemId = new ItemId( 'Q1' );
+
+ $changeFactory = TestChanges::getEntityChangeFactory();
+
+ $change = $changeFactory->newFromUpdate(
+ ItemChange::UPDATE,
+ $this->getItemWithSiteLinks( $itemId, array( 'enwiki'
=> $pageTitle ) ),
+ $this->getEmptyItem( $itemId )
+ );
+
+ $usages = $affectedPagesFinder->getAffectedUsagesByPage(
$change );
+ }
+
+ private function getSiteLinkUsageLookup( $pageTitle ) {
+ $siteLinkLookup = $this->getMock(
'Wikibase\Lib\Store\SiteLinkLookup' );
+
+ $siteLinkLookup->expects( $this->any() )
+ ->method( 'getItemIdForLink' )
+ ->will( $this->returnValue( new ItemId( 'Q1' ) ) );
+
+ $siteLinkLookup->expects( $this->any() )
+ ->method( 'getLinks' )
+ ->will( $this->returnValue( array(
+ array( 'enwiki', $pageTitle, 1 )
+ ) ) );
+
+ $titleFactory = new TitleFactory();
+
+ return new SiteLinkUsageLookup( 'enwiki', $siteLinkLookup,
$titleFactory );
+ }
+
/**
* @param ItemId $id
*
diff --git
a/extensions/Wikibase/client/tests/phpunit/includes/Usage/SiteLinkUsageLookupTest.php
b/extensions/Wikibase/client/tests/phpunit/includes/Usage/SiteLinkUsageLookupTest.php
index 206c078..e32866c 100644
---
a/extensions/Wikibase/client/tests/phpunit/includes/Usage/SiteLinkUsageLookupTest.php
+++
b/extensions/Wikibase/client/tests/phpunit/includes/Usage/SiteLinkUsageLookupTest.php
@@ -3,6 +3,7 @@
namespace Wikibase\Client\Tests\Usage\Sql;
use Title;
+use Wikibase\Client\Store\TitleFactory;
use Wikibase\Client\Usage\EntityUsage;
use Wikibase\Client\Usage\PageEntityUsages;
use Wikibase\Client\Usage\SiteLinkUsageLookup;
@@ -50,10 +51,19 @@
* @note Assumptions: page titles are the same as page IDs.
*
* @param SiteLinkLookup $siteLinks
+ * @param TitleFactory $titleFactory
*
* @return SiteLinkUsageLookup
*/
- private function getUsageLookup( SiteLinkLookup $siteLinks ) {
+ private function getUsageLookup( SiteLinkLookup $siteLinks,
TitleFactory $titleFactory ) {
+ return new SiteLinkUsageLookup(
+ 'testwiki',
+ $siteLinks,
+ $titleFactory
+ );
+ }
+
+ private function getTitleFactory() {
$titleFactory = $this->getMock(
'Wikibase\Client\Store\TitleFactory' );
$titleFactory->expects( $this->any() )
->method( 'newFromText' )
@@ -64,20 +74,16 @@
return $title;
} ) );
- return new SiteLinkUsageLookup(
- 'testwiki',
- $siteLinks,
- $titleFactory
- );
+ return $titleFactory;
}
-
public function testGetUsagesForPage() {
$links = $this->getSiteLinkLookup( array(
'23' => new ItemId( 'Q23' ),
) );
- $lookup = $this->getUsageLookup( $links );
+ $titleFactory = $this->getTitleFactory();
+ $lookup = $this->getUsageLookup( $links, $titleFactory );
$actual = $lookup->getUsagesForPage( 42 );
$this->assertEmpty( $actual );
@@ -96,7 +102,8 @@
'23' => $q23,
) );
- $lookup = $this->getUsageLookup( $links );
+ $titleFactory = $this->getTitleFactory();
+ $lookup = $this->getUsageLookup( $links, $titleFactory );
$actual = $lookup->getPagesUsing( array( $q42, $p11 ) );
$this->assertInstanceOf( 'Iterator', $actual );
@@ -141,7 +148,8 @@
'23' => $q23,
) );
- $lookup = $this->getUsageLookup( $links );
+ $titleFactory = $this->getTitleFactory();
+ $lookup = $this->getUsageLookup( $links, $titleFactory );
$actual = $lookup->getUnusedEntities( array() );
$this->assertEmpty( $actual );
@@ -158,4 +166,21 @@
$this->assertEquals( $p11, $actual[0] );
}
+ public function testGetPagesUsing_withDeletePage() {
+ $itemId = new ItemId( 'Q23' );
+
+ $links = $this->getSiteLinkLookup(
+ array(
+ 'randomkitten2u8!kgxhkl4v3' => $itemId
+ )
+ );
+
+ $titleFactory = new TitleFactory();
+ $lookup = $this->getUsageLookup( $links, $titleFactory );
+
+ $usages = $lookup->getPagesUsing( array( $itemId ), array() );
+
+ $this->assertInstanceOf( 'Iterator', $usages );
+ }
+
}
diff --git
a/extensions/Wikibase/client/tests/phpunit/includes/hooks/DataUpdateHookHandlersTest.php
b/extensions/Wikibase/client/tests/phpunit/includes/hooks/DataUpdateHookHandlersTest.php
index 00a87ef..7529dff 100644
---
a/extensions/Wikibase/client/tests/phpunit/includes/hooks/DataUpdateHookHandlersTest.php
+++
b/extensions/Wikibase/client/tests/phpunit/includes/hooks/DataUpdateHookHandlersTest.php
@@ -155,7 +155,7 @@
$this->assertInstanceOf(
'Wikibase\Client\Hooks\DataUpdateHookHandlers', $handler );
}
- public function provideDoParserAfterParse() {
+ public function provideDoArticleEditUpdates() {
return array(
'usage' => array(
Title::makeTitle( NS_MAIN, 'Oxygen' ),
@@ -175,9 +175,9 @@
}
/**
- * @dataProvider provideDoParserAfterParse
+ * @dataProvider provideDoArticleEditUpdates
*/
- public function testDoParserAfterParse( Title $title, $usage ) {
+ public function testDoArticleEditUpdates( Title $title, $usage ) {
$title->resetArticleID( 23 );
$page = $this->newWikiPage( $title );
@@ -188,4 +188,13 @@
$handler->doArticleEditUpdates( $page, $editInfo, true );
}
+ public function testDoArticleDeleteComplete() {
+ $title = Title::makeTitle( NS_MAIN, 'Oxygen' );
+ $title->resetArticleID( 23 );
+
+ // Assertions are done by the UsageUpdater mock
+ $handler = $this->newDataUpdateHookHandlers( $title, array() );
+ $handler->doArticleDeleteComplete( $title->getNamespace(),
$title->getArticleID() );
+ }
+
}
diff --git a/extensions/Wikibase/repo/resources/wikibase.ui.entityViewInit.js
b/extensions/Wikibase/repo/resources/wikibase.ui.entityViewInit.js
index 8049b51..d801f43 100644
--- a/extensions/Wikibase/repo/resources/wikibase.ui.entityViewInit.js
+++ b/extensions/Wikibase/repo/resources/wikibase.ui.entityViewInit.js
@@ -129,7 +129,7 @@
throw new Error( 'View for entity type ' +
entity.getType() + ' does not exist' );
}
- $entityview[entity.getType() + 'view']( {
+ $entityview[view]( {
value: entity,
languages: getUserLanguages(),
entityChangersFactory: entityChangersFactory,
@@ -152,10 +152,10 @@
mw.msg( 'pagetitle', label !== '' ? label :
mw.config.get( 'wgTitle' ) )
);
} )
- .on( 'entityviewafterstartediting', function() {
+ .on( view + 'afterstartediting', function() {
triggerAnonymousEditWarning( entity.getType() );
} )
- .on( 'entityviewafterstopediting', function( event, dropValue )
{
+ .on( view + 'afterstopediting', function( event, dropValue ) {
updateWatchLink( dropValue );
} );
}
diff --git a/vendor/composer/installed.json b/vendor/composer/installed.json
index 6d5a010..cd33964 100644
--- a/vendor/composer/installed.json
+++ b/vendor/composer/installed.json
@@ -1322,12 +1322,12 @@
"source": {
"type": "git",
"url":
"https://github.com/wikimedia/mediawiki-extensions-Wikibase.git",
- "reference": "9979bb324a882c64b6b00cea638ed94271ca9ece"
+ "reference": "8c22a3a8b533a6a705064078c03f1122268d5818"
},
"dist": {
"type": "zip",
- "url":
"https://api.github.com/repos/wikimedia/mediawiki-extensions-Wikibase/zipball/9979bb324a882c64b6b00cea638ed94271ca9ece",
- "reference": "9979bb324a882c64b6b00cea638ed94271ca9ece",
+ "url":
"https://api.github.com/repos/wikimedia/mediawiki-extensions-Wikibase/zipball/8c22a3a8b533a6a705064078c03f1122268d5818",
+ "reference": "8c22a3a8b533a6a705064078c03f1122268d5818",
"shasum": ""
},
"require": {
@@ -1355,7 +1355,7 @@
"conflict": {
"mediawiki/mediawiki": "<1.23"
},
- "time": "2015-01-15 09:32:07",
+ "time": "2015-01-31 15:01:29",
"type": "mediawiki-extension",
"installation-source": "dist",
"autoload": {
--
To view, visit https://gerrit.wikimedia.org/r/187931
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: I9478b0efb3485ea558db552ac569ec322ce35300
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/Wikidata
Gerrit-Branch: wmf/1.25wmf14
Gerrit-Owner: Hoo man <[email protected]>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits