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

Reply via email to