]> git.immae.eu Git - github/shaarli/Shaarli.git/commitdiff
Merge pull request #522 from ArthurHoaro/hotfix/readershaare
authorVirtualTam <virtualtam@flibidi.net>
Wed, 30 Mar 2016 17:31:19 +0000 (19:31 +0200)
committerVirtualTam <virtualtam@flibidi.net>
Wed, 30 Mar 2016 17:31:19 +0000 (19:31 +0200)
Refactor and rebase #380: Firefox reader view links

application/Url.php
tests/Url/UrlTest.php

index a4ac2e73cad2537ab28cd6bb604356bd311d14d7..af38c4d9155ed4eb856691c941f26f11714b77be 100644 (file)
@@ -118,13 +118,43 @@ class Url
      */
     public function __construct($url)
     {
-        $this->parts = parse_url(trim($url));
+        $url = self::cleanupUnparsedUrl(trim($url));
+        $this->parts = parse_url($url);
 
         if (!empty($url) && empty($this->parts['scheme'])) {
             $this->parts['scheme'] = 'http';
         }
     }
 
+    /**
+     * Clean up URL before it's parsed.
+     * ie. handle urlencode, url prefixes, etc.
+     *
+     * @param string $url URL to clean.
+     *
+     * @return string cleaned URL.
+     */
+    protected static function cleanupUnparsedUrl($url)
+    {
+        return self::removeFirefoxAboutReader($url);
+    }
+
+    /**
+     * Remove Firefox Reader prefix if it's present.
+     *
+     * @param string $input url
+     *
+     * @return string cleaned url
+     */
+    protected static function removeFirefoxAboutReader($input)
+    {
+        $firefoxPrefix = 'about://reader?url=';
+        if (startsWith($input, $firefoxPrefix)) {
+            return urldecode(ltrim($input, $firefoxPrefix));
+        }
+        return $input;
+    }
+    
     /**
      * Returns a string representation of this URL
      */
index 425327ed02b37b7f1ccb638208ddf404ed7b16d5..a64a73eae183e82672e3647c8a8249cdfa26c189 100644 (file)
@@ -128,6 +128,13 @@ class UrlTest extends PHPUnit_Framework_TestCase
             self::$baseUrl.'?my=stuff&is=kept#again',
             $url->cleanup()
         );
+
+        // test firefox reader url
+        $url = new Url(
+            'about://reader?url=' . urlencode(self::$baseUrl .'?my=stuff&is=kept')
+        );
+        $this->assertEquals(self::$baseUrl.'?my=stuff&is=kept', $url->cleanup());
+
     }
 
     /**