]> git.immae.eu Git - github/shaarli/Shaarli.git/commitdiff
Do not try to retrieve thumbnails for internal link 1271/head
authorArthurHoaro <arthur@hoa.ro>
Sat, 9 Feb 2019 13:13:08 +0000 (14:13 +0100)
committerArthurHoaro <arthur@hoa.ro>
Sun, 24 Feb 2019 11:25:50 +0000 (12:25 +0100)
Also adds a helper function to determine if a link is a note and apply it across multiple files.

application/api/ApiUtils.php
application/bookmark/LinkUtils.php
application/feed/FeedBuilder.php
application/netscape/NetscapeBookmarkUtils.php
index.php
tests/bookmark/LinkUtilsTest.php

index 1824b5d08171f19c27ebb28d3831eacbfc040538..1e3ac02e110bdb137d7f52a2ce521d079ef13875 100644 (file)
@@ -59,7 +59,7 @@ class ApiUtils
     {
         $out['id'] = $link['id'];
         // Not an internal link
-        if ($link['url'][0] != '?') {
+        if (! is_note($link['url'])) {
             $out['url'] = $link['url'];
         } else {
             $out['url'] = $indexUrl . $link['url'];
index de5b61cbcaf6e8467d57eb9c49aa009d0a832754..9e9d4f0ad822f2fa63e5111769429d1b9191aef3 100644 (file)
@@ -220,3 +220,16 @@ function link_small_hash($date, $id)
 {
     return smallHash($date->format(LinkDB::LINK_DATE_FORMAT) . $id);
 }
+
+/**
+ * Returns whether or not the link is an internal note.
+ * Its URL starts by `?` because it's actually a permalink.
+ *
+ * @param string $linkUrl
+ *
+ * @return bool true if internal note, false otherwise.
+ */
+function is_note($linkUrl)
+{
+    return isset($linkUrl[0]) && $linkUrl[0] === '?';
+}
index b66f2f918edd494f1d11090892fbcfda7d073e59..fec0452b9c810900f7389ff104521e7ff789aa55 100644 (file)
@@ -147,8 +147,8 @@ class FeedBuilder
     protected function buildItem($link, $pageaddr)
     {
         $link['guid'] = $pageaddr . '?' . $link['shorturl'];
-        // Check for both signs of a note: starting with ? and 7 chars long.
-        if ($link['url'][0] === '?' && strlen($link['url']) === 7) {
+        // Prepend the root URL for notes
+        if (is_note($link['url'])) {
             $link['url'] = $pageaddr . $link['url'];
         }
         if ($this->usePermalinks === true) {
index 2fb1a4a6943674c557188e28bb5df206867f3857..28665941507366a364930f4adcdde702cf983a25 100644 (file)
@@ -54,7 +54,7 @@ class NetscapeBookmarkUtils
             $link['timestamp'] = $date->getTimestamp();
             $link['taglist'] = str_replace(' ', ',', $link['tags']);
 
-            if (startsWith($link['url'], '?') && $prependNoteUrl) {
+            if (is_note($link['url']) && $prependNoteUrl) {
                 $link['url'] = $indexUrl . $link['url'];
             }
 
index 633ab89e6386e90eaa02f76d5a1880cb9366dccb..7b54f98f5299bd37a3b780ec429aa1158f1815f8 100644 (file)
--- a/index.php
+++ b/index.php
@@ -362,7 +362,7 @@ function showDailyRSS($conf, $loginManager)
                 $conf->get('redirector.encode_url')
             );
             $link['timestamp'] = $link['created']->getTimestamp();
-            if (startsWith($link['url'], '?')) {
+            if (is_note($link['url'])) {
                 $link['url'] = index_url($_SERVER) . $link['url'];  // make permalink URL absolute
             }
         }
@@ -1176,7 +1176,9 @@ function renderPage($conf, $pluginManager, $LINKSDB, $history, $sessionManager,
             $link['title'] = $link['url'];
         }
 
-        if ($conf->get('thumbnails.mode', Thumbnailer::MODE_NONE) !== Thumbnailer::MODE_NONE) {
+        if ($conf->get('thumbnails.mode', Thumbnailer::MODE_NONE) !== Thumbnailer::MODE_NONE
+            && ! is_note($link['url'])
+        ) {
             $thumbnailer = new Thumbnailer($conf);
             $link['thumbnail'] = $thumbnailer->get($url);
         }
@@ -1558,7 +1560,7 @@ function renderPage($conf, $pluginManager, $LINKSDB, $history, $sessionManager,
         $ids = [];
         foreach ($LINKSDB as $link) {
             // A note or not HTTP(S)
-            if ($link['url'][0] === '?' || ! startsWith(strtolower($link['url']), 'http')) {
+            if (is_note($link['url']) || ! startsWith(strtolower($link['url']), 'http')) {
                 continue;
             }
             $ids[] = $link['id'];
index 1b8688e6d398fc1381e6b2acc586ae2562c282f2..5b31115bf50aa570937c62123922205fda1b7950 100644 (file)
@@ -317,6 +317,26 @@ class LinkUtilsTest extends \PHPUnit\Framework\TestCase
         $this->assertNotContains('>#nothashtag', $autolinkedDescription);
     }
 
+    /**
+     * Test is_note with note URLs.
+     */
+    public function testIsNote()
+    {
+        $this->assertTrue(is_note('?'));
+        $this->assertTrue(is_note('?abcDEf'));
+        $this->assertTrue(is_note('?_abcDEf#123'));
+    }
+
+    /**
+     * Test is_note with non note URLs.
+     */
+    public function testIsNotNote()
+    {
+        $this->assertFalse(is_note(''));
+        $this->assertFalse(is_note('nope'));
+        $this->assertFalse(is_note('https://github.com/shaarli/Shaarli/?hi'));
+    }
+
     /**
      * Util function to build an hashtag link.
      *