Merge "Check for global blocks"
[lhc/web/wiklou.git] / includes / WatchedItemStore.php
index 603bacd..2180b2d 100644 (file)
@@ -1,7 +1,7 @@
 <?php
 
 use Liuggio\StatsdClient\Factory\StatsdDataFactoryInterface;
-use MediaWiki\MediaWikiServices;
+use MediaWiki\Linker\LinkTarget;
 use Wikimedia\Assert\Assert;
 
 /**
@@ -50,6 +50,11 @@ class WatchedItemStore implements StatsdAwareInterface {
         */
        private $stats;
 
+       /**
+        * @var self|null
+        */
+       private static $instance;
+
        /**
         * @param LoadBalancer $loadBalancer
         * @param HashBagOStuff $cache
@@ -121,11 +126,43 @@ class WatchedItemStore implements StatsdAwareInterface {
        }
 
        /**
-        * @deprecated use MediaWikiServices::getInstance()->getWatchedItemStore()
+        * Overrides the default instance of this class
+        * This is intended for use while testing and will fail if MW_PHPUNIT_TEST is not defined.
+        *
+        * If this method is used it MUST also be called with null after a test to ensure a new
+        * default instance is created next time getDefaultInstance is called.
+        *
+        * @param WatchedItemStore|null $store
+        *
+        * @return ScopedCallback to reset the overridden value
+        * @throws MWException
+        */
+       public static function overrideDefaultInstance( WatchedItemStore $store = null ) {
+               if ( !defined( 'MW_PHPUNIT_TEST' ) ) {
+                       throw new MWException(
+                               'Cannot override ' . __CLASS__ . 'default instance in operation.'
+                       );
+               }
+
+               $previousValue = self::$instance;
+               self::$instance = $store;
+               return new ScopedCallback( function() use ( $previousValue ) {
+                       self::$instance = $previousValue;
+               } );
+       }
+
+       /**
         * @return self
         */
        public static function getDefaultInstance() {
-               return MediaWikiServices::getInstance()->getWatchedItemStore();
+               if ( !self::$instance ) {
+                       self::$instance = new self(
+                               wfGetLB(),
+                               new HashBagOStuff( [ 'maxKeys' => 100 ] )
+                       );
+                       self::$instance->setStatsdDataFactory( RequestContext::getMain()->getStats() );
+               }
+               return self::$instance;
        }
 
        private function getCacheKey( User $user, LinkTarget $target ) {
@@ -869,12 +906,8 @@ class WatchedItemStore implements StatsdAwareInterface {
         * @param LinkTarget $newTarget
         */
        public function duplicateAllAssociatedEntries( LinkTarget $oldTarget, LinkTarget $newTarget ) {
-               if ( !$oldTarget instanceof Title ) {
-                       $oldTarget = Title::newFromLinkTarget( $oldTarget );
-               }
-               if ( !$newTarget instanceof Title ) {
-                       $newTarget = Title::newFromLinkTarget( $newTarget );
-               }
+               $oldTarget = Title::newFromLinkTarget( $oldTarget );
+               $newTarget = Title::newFromLinkTarget( $newTarget );
 
                $this->duplicateEntry( $oldTarget->getSubjectPage(), $newTarget->getSubjectPage() );
                $this->duplicateEntry( $oldTarget->getTalkPage(), $newTarget->getTalkPage() );