jenkins-bot has submitted this change and it was merged.

Change subject: Add TitleMoveComplete hook
......................................................................


Add TitleMoveComplete hook

Change-Id: If35ad0903336b01fff18925f2677e8a03e00f381
---
M extension.json
M src/CognateHooks.php
M src/hooks/CognatePageHookHandler.php
M tests/phpunit/hooks/CognatePageHookHandlerTest.php
4 files changed, 139 insertions(+), 3 deletions(-)

Approvals:
  WMDE-leszek: Looks good to me, approved
  jenkins-bot: Verified



diff --git a/extension.json b/extension.json
index f544dfb..77d8e0c 100644
--- a/extension.json
+++ b/extension.json
@@ -26,6 +26,7 @@
     "LanguageLinks": [ "CognateHooks::onLanguageLinks" ],
     "WikiPageDeletionUpdates": [ "CognateHooks::onWikiPageDeletionUpdates" ],
     "ArticleUndelete": [ "CognateHooks::onArticleUndelete" ],
+    "TitleMoveComplete": [ "CognateHooks::onTitleMoveComplete" ],
     "LoadExtensionSchemaUpdates": [ 
"CognateHooks::onLoadExtensionSchemaUpdates" ],
     "UnitTestsList": [ "CognateHooks::onUnitTestsList" ]
   },
diff --git a/src/CognateHooks.php b/src/CognateHooks.php
index 9bc2d4b..18b9f8b 100644
--- a/src/CognateHooks.php
+++ b/src/CognateHooks.php
@@ -37,6 +37,17 @@
                return true;
        }
 
+       public static function onTitleMoveComplete() {
+               call_user_func_array(
+                       [
+                               MediaWikiServices::getInstance()->getService( 
'CognatePageHookHandler' ),
+                               'onTitleMoveComplete'
+                       ],
+                       func_get_args()
+               );
+               return true;
+       }
+
        /**
         * @param Title $title
         * @param array $links
diff --git a/src/hooks/CognatePageHookHandler.php 
b/src/hooks/CognatePageHookHandler.php
index ae09a79..8d7a433 100644
--- a/src/hooks/CognatePageHookHandler.php
+++ b/src/hooks/CognatePageHookHandler.php
@@ -123,6 +123,38 @@
        }
 
        /**
+        * Occurs whenever a request to move an article is completed, after the 
database transaction commits.
+        * @see https://www.mediawiki.org/wiki/Manual:Hooks/TitleMoveComplete
+        *
+        * @param Title $title
+        * @param Title $newTitle
+        * @param User $user
+        * @param int $oldid
+        * @param int $newid
+        * @param string $reason
+        * @param Revision $revision
+        */
+       public function onTitleMoveComplete(
+               Title $title,
+               Title $newTitle,
+               User $user,
+               $oldid,
+               $newid,
+               $reason,
+               Revision $revision
+       ) {
+               $oldTitleValue = $title->getTitleValue();
+               $newTitleValue = $newTitle->getTitleValue();
+               $store = $this->getStore();
+               if ( $this->isActionableTarget( $oldTitleValue ) ) {
+                       $store->deletePage( $this->languageCode, $oldTitleValue 
);
+               }
+               if ( $this->isActionableTarget( $newTitleValue ) ) {
+                       $store->savePage( $this->languageCode, $newTitleValue );
+               }
+       }
+
+       /**
         * Actionable targets have a namespace id that is:
         *  - One of the default MediaWiki (between NS_MAIN and NS_CATEGORY_TALK
         *  - Defined as a namespace to record in the configuration
diff --git a/tests/phpunit/hooks/CognatePageHookHandlerTest.php 
b/tests/phpunit/hooks/CognatePageHookHandlerTest.php
index 3e40c4d..a5b87fe 100644
--- a/tests/phpunit/hooks/CognatePageHookHandlerTest.php
+++ b/tests/phpunit/hooks/CognatePageHookHandlerTest.php
@@ -45,7 +45,7 @@
                $this->store->expects( $this->never() )
                        ->method( 'savePage' );
 
-               $this->call_onPageContentSaveComplete( [ 120 ], 'abc2', new 
TitleValue( 0, 'ArticleDbKey' ) );
+               $this->call_onPageContentSaveComplete( [ NS_PROJECT ], 'abc2', 
new TitleValue( 0, 'ArticleDbKey' ) );
        }
 
        /**
@@ -101,7 +101,7 @@
                        ->method( 'savePage' );
 
                $updates = $this->call_onWikiPageDeletionUpdates(
-                       [ 120 ],
+                       [ NS_PROJECT ],
                        'abc2',
                        new TitleValue( 0, 'ArticleDbKey' )
                );
@@ -162,7 +162,7 @@
                        ->method( 'savePage' );
 
                $this->call_onArticleUndelete(
-                       [ 120 ],
+                       [ NS_PROJECT ],
                        'abc2',
                        new TitleValue( 0, 'ArticleDbKey' )
                );
@@ -185,4 +185,96 @@
                );
        }
 
+       public function test_onTitleMoveComplete_namespaceMatch() {
+               $this->store->expects( $this->once() )
+                       ->method( 'deletePage' )
+                       ->with( 'abc2', new TitleValue( 0, 'ArticleDbKeyOld' ) 
);
+               $this->store->expects( $this->once() )
+                       ->method( 'savePage' )
+                       ->with( 'abc2', new TitleValue( 0, 'ArticleDbKeyNew' ) 
);
+
+               $this->call_onTitleMoveComplete(
+                       [ 0 ],
+                       'abc2',
+                       new TitleValue( 0, 'ArticleDbKeyOld' ),
+                       new TitleValue( 0, 'ArticleDbKeyNew' )
+               );
+       }
+
+       public function test_onTitleMoveComplete_noNamespaceMatch() {
+               $this->store->expects( $this->never() )
+                       ->method( 'deletePage' );
+               $this->store->expects( $this->never() )
+                       ->method( 'savePage' );
+
+               $this->call_onTitleMoveComplete(
+                       [ NS_PROJECT ],
+                       'abc2',
+                       new TitleValue( 0, 'ArticleDbKeyOld' ),
+                       new TitleValue( 0, 'ArticleDbKeyNew' )
+               );
+       }
+
+       public function test_onTitleMoveComplete_namespaceMatchOld() {
+               $this->store->expects( $this->once() )
+                       ->method( 'deletePage' )
+                       ->with( 'abc2', new TitleValue( NS_PROJECT, 
'ArticleDbKeyOld' ) );
+               $this->store->expects( $this->never() )
+                       ->method( 'savePage' );
+
+               $this->call_onTitleMoveComplete(
+                       [ NS_PROJECT ],
+                       'abc2',
+                       new TitleValue( NS_PROJECT, 'ArticleDbKeyOld' ),
+                       new TitleValue( 0, 'ArticleDbKeyNew' )
+               );
+       }
+
+       public function test_onTitleMoveComplete_namespaceMatchNew() {
+               $this->store->expects( $this->never() )
+                       ->method( 'deletePage' );
+               $this->store->expects( $this->once() )
+                       ->method( 'savePage' )
+                       ->with( 'abc2', new TitleValue( NS_PROJECT, 
'ArticleDbKeyNew' ) );
+
+               $this->call_onTitleMoveComplete(
+                       [ NS_PROJECT ],
+                       'abc2',
+                       new TitleValue( 0, 'ArticleDbKeyOld' ),
+                       new TitleValue( NS_PROJECT, 'ArticleDbKeyNew' )
+               );
+       }
+
+       /**
+        * @param int[] $namespaces
+        * @param string $language
+        * @param LinkTarget $linkTarget
+        */
+       private function call_onTitleMoveComplete(
+               array $namespaces,
+               $language,
+               LinkTarget $linkTarget,
+               LinkTarget $newLinkTarget
+       ) {
+               $handler = new CognatePageHookHandler( $namespaces, $language );
+               $handler->onTitleMoveComplete(
+                       Title::newFromLinkTarget( $linkTarget ),
+                       Title::newFromLinkTarget( $newLinkTarget ),
+                       User::newFromId( 0 ),
+                       null,
+                       null,
+                       null,
+                       $this->getMockRevision()
+               );
+       }
+
+       /**
+        * @return PHPUnit_Framework_MockObject_MockObject|Revision
+        */
+       private function getMockRevision() {
+               return $this->getMockBuilder( 'Revision' )
+                       ->disableOriginalConstructor()
+                       ->getMock();
+       }
+
 }

-- 
To view, visit https://gerrit.wikimedia.org/r/311696
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: merged
Gerrit-Change-Id: If35ad0903336b01fff18925f2677e8a03e00f381
Gerrit-PatchSet: 5
Gerrit-Project: mediawiki/extensions/Cognate
Gerrit-Branch: master
Gerrit-Owner: Addshore <addshorew...@gmail.com>
Gerrit-Reviewer: Addshore <addshorew...@gmail.com>
Gerrit-Reviewer: Daniel Kinzler <daniel.kinz...@wikimedia.de>
Gerrit-Reviewer: Gabriel Birke <gabriel.bi...@wikimedia.de>
Gerrit-Reviewer: Tobias Gritschacher <tobias.gritschac...@wikimedia.de>
Gerrit-Reviewer: WMDE-Fisch <christoph.jau...@wikimedia.de>
Gerrit-Reviewer: WMDE-leszek <leszek.mani...@wikimedia.de>
Gerrit-Reviewer: jenkins-bot <>

_______________________________________________
MediaWiki-commits mailing list
MediaWiki-commits@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to