Brian Wolff has uploaded a new change for review.

  https://gerrit.wikimedia.org/r/140870

Change subject: Replace ExtractThumbParameters hook with parseParamString method
......................................................................

Replace ExtractThumbParameters hook with parseParamString method

The existing parseParamString function was totally broken.
The ExtractThumbParameters is deprecated, and there are some
places in MediaWiki that will only use parseParamString, and
don't use the ExtractThumbParameters hook. Thus this commit
adapts the code in onExtractThumbParameters to be in parseParamString
and removes the use of the deprecated hook.

Change-Id: I920cf01b0424257d6acf01b08c270c4e0169cca5
---
M TimedMediaHandler.hooks.php
M TimedMediaHandler.php
M TimedMediaHandler_body.php
A tests/phpunit/TestTimedMediaHandler.php
4 files changed, 71 insertions(+), 34 deletions(-)


  git pull 
ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/TimedMediaHandler 
refs/changes/70/140870/1

diff --git a/TimedMediaHandler.hooks.php b/TimedMediaHandler.hooks.php
index d5387e4..14d8adf 100644
--- a/TimedMediaHandler.hooks.php
+++ b/TimedMediaHandler.hooks.php
@@ -351,7 +351,8 @@
                        'TestVideoThumbnail.php',
                        'TestVideoTranscode.php',
                        'TestOggHandler.php',
-                       'TestTimedMediaTransformOutput.php'
+                       'TestTimedMediaTransformOutput.php',
+                       'TestTimedMediaHandler.php'
                );
                foreach( $testFiles as $fileName ){
                        $files[] = $testDir . $fileName;
diff --git a/TimedMediaHandler.php b/TimedMediaHandler.php
index f4524f3..a876c42 100644
--- a/TimedMediaHandler.php
+++ b/TimedMediaHandler.php
@@ -249,8 +249,6 @@
 // we can still read the variable values
 $wgHooks['SetupAfterCache'][] = 'TimedMediaHandlerHooks::register';
 
-$wgHooks['ExtractThumbParameters'][] = 
'TimedMediaHandler::onExtractThumbParameters';
-
 # add Special:TimedMediaHandler
 $wgSpecialPages['TimedMediaHandler'] = 'SpecialTimedMediaHandler';
 $wgSpecialPageGroups['TimedMediaHandler'] = 'media';
diff --git a/TimedMediaHandler_body.php b/TimedMediaHandler_body.php
index 83d8346..0ae5730 100644
--- a/TimedMediaHandler_body.php
+++ b/TimedMediaHandler_body.php
@@ -96,15 +96,33 @@
        }
 
        /**
+        * Used by thumb.php to find url parameters
+        *
         * @param $str string
         * @return array
         */
        function parseParamString( $str ) {
-               $m = false;
-               if ( preg_match( '/^seek=([\d.]+)$/', $str, $m ) ) {
-                       return array( 'thumbtime' => $m[0] );
+               $params = array();
+               if ( preg_match( '!^(mid|(\d*)px-)*(seek=([\d.]+))*$!', $str, 
$matches ) ) {
+                       $size = $thumbtime = null;
+                       if ( isset( $matches[2] ) ) {
+                               $size = $matches[2];
+                       }
+                       if ( isset( $matches[4] ) ) {
+                               $thumbtime = $matches[4];
+                       }
+
+                       if ( $size != null ) {
+                               $params['width'] = $size;
+                       }
+                       if ( $thumbtime != null ) {
+                               $params['thumbtime'] = $thumbtime;
+                       }
+                       return $params; // valid thumbnail URL
+               } else {
+                       // invalid parameter string
+                       return false;
                }
-               return array();
        }
 
        /**
@@ -457,32 +475,5 @@
                                }
                        }
                }
-       }
-
-       /**
-        * Handler for the ExtractThumbParameters hook
-        *
-        * @param $thumbname string URL-decoded basename of URI
-        * @param &$params Array Currently parsed thumbnail params
-        * @return bool
-        */
-       public static function onExtractThumbParameters( $thumbname, array 
&$params ) {
-               global $wgTmhFileExtensions;
-               $supported = '/\.(?:' . implode( '|', $wgTmhFileExtensions ) . 
')$/i';
-               if ( !preg_match( $supported, $params['f'] ) ) {
-                       return true; // not a supported extension
-               }
-               // Check if the parameters can be extracted from the thumbnail 
name...
-               if ( preg_match( '!^(mid|(\d*)px-)*(seek=([\d.]+))*-[^/]*$!', 
$thumbname, $matches ) ) {
-                       list( /* all */, $sizeFull, $size, $timeFull, 
$thumbtime ) = $matches;
-                       if ( $size != null ) {
-                               $params['width'] = $size;
-                       }
-                       if ( $thumbtime != null ) {
-                               $params['thumbtime'] = $thumbtime;
-                       }
-                       return false; // valid thumbnail URL
-               }
-               return true; // pass through to next handler
        }
 }
diff --git a/tests/phpunit/TestTimedMediaHandler.php 
b/tests/phpunit/TestTimedMediaHandler.php
new file mode 100644
index 0000000..359d025
--- /dev/null
+++ b/tests/phpunit/TestTimedMediaHandler.php
@@ -0,0 +1,47 @@
+<?php
+class TestTimedMediaHandler extends MediaWikiTestCase {
+
+       /** @var TimedMediaHandler */
+       private $handler;
+
+       function setUp() {
+               $this->handler = new TimedMediaHandler;
+               parent::setUp();
+       }
+
+       /**
+        * @dataProvider providerParseParamString
+        * @param $str String a thumbnail parameter string
+        * @param $expected Array Expected thumbnailing parameters
+        */
+       function testParseParamString( $str, $expected ) {
+               $result = $this->handler->parseParamString( $str );
+               $this->assertEquals( $result, $expected );
+       }
+
+       function providerParseParamString() {
+               return array(
+                       array(
+                               'mid',
+                               array(),
+                       ),
+                       array(
+                               '220px-',
+                               array( 'width' => 220 ),
+                       ),
+                       array(
+                               'seek=30',
+                               array( 'thumbtime' => 30 ),
+                       ),
+                       array(
+                               'seek=15.72',
+                               array( 'thumbtime' => 15.72 ),
+                       ),
+                       array(
+                               '180px-seek=15',
+                               array( 'thumbtime' => 15, 'width' => 180 ),
+                       ),
+               );
+
+       }
+}

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

Gerrit-MessageType: newchange
Gerrit-Change-Id: I920cf01b0424257d6acf01b08c270c4e0169cca5
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/TimedMediaHandler
Gerrit-Branch: master
Gerrit-Owner: Brian Wolff <[email protected]>

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to