aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--application/api/ApiUtils.php2
-rw-r--r--application/bookmark/LinkUtils.php13
-rw-r--r--application/feed/FeedBuilder.php4
-rw-r--r--application/netscape/NetscapeBookmarkUtils.php2
-rw-r--r--index.php8
-rw-r--r--tests/bookmark/LinkUtilsTest.php20
6 files changed, 42 insertions, 7 deletions
diff --git a/application/api/ApiUtils.php b/application/api/ApiUtils.php
index 1824b5d0..1e3ac02e 100644
--- a/application/api/ApiUtils.php
+++ b/application/api/ApiUtils.php
@@ -59,7 +59,7 @@ class ApiUtils
59 { 59 {
60 $out['id'] = $link['id']; 60 $out['id'] = $link['id'];
61 // Not an internal link 61 // Not an internal link
62 if ($link['url'][0] != '?') { 62 if (! is_note($link['url'])) {
63 $out['url'] = $link['url']; 63 $out['url'] = $link['url'];
64 } else { 64 } else {
65 $out['url'] = $indexUrl . $link['url']; 65 $out['url'] = $indexUrl . $link['url'];
diff --git a/application/bookmark/LinkUtils.php b/application/bookmark/LinkUtils.php
index 988970bd..35a5b290 100644
--- a/application/bookmark/LinkUtils.php
+++ b/application/bookmark/LinkUtils.php
@@ -204,3 +204,16 @@ function link_small_hash($date, $id)
204{ 204{
205 return smallHash($date->format(LinkDB::LINK_DATE_FORMAT) . $id); 205 return smallHash($date->format(LinkDB::LINK_DATE_FORMAT) . $id);
206} 206}
207
208/**
209 * Returns whether or not the link is an internal note.
210 * Its URL starts by `?` because it's actually a permalink.
211 *
212 * @param string $linkUrl
213 *
214 * @return bool true if internal note, false otherwise.
215 */
216function is_note($linkUrl)
217{
218 return isset($linkUrl[0]) && $linkUrl[0] === '?';
219}
diff --git a/application/feed/FeedBuilder.php b/application/feed/FeedBuilder.php
index e23b3452..7c859474 100644
--- a/application/feed/FeedBuilder.php
+++ b/application/feed/FeedBuilder.php
@@ -147,8 +147,8 @@ class FeedBuilder
147 protected function buildItem($link, $pageaddr) 147 protected function buildItem($link, $pageaddr)
148 { 148 {
149 $link['guid'] = $pageaddr . '?' . $link['shorturl']; 149 $link['guid'] = $pageaddr . '?' . $link['shorturl'];
150 // Check for both signs of a note: starting with ? and 7 chars long. 150 // Prepend the root URL for notes
151 if ($link['url'][0] === '?' && strlen($link['url']) === 7) { 151 if (is_note($link['url'])) {
152 $link['url'] = $pageaddr . $link['url']; 152 $link['url'] = $pageaddr . $link['url'];
153 } 153 }
154 if ($this->usePermalinks === true) { 154 if ($this->usePermalinks === true) {
diff --git a/application/netscape/NetscapeBookmarkUtils.php b/application/netscape/NetscapeBookmarkUtils.php
index 2fb1a4a6..28665941 100644
--- a/application/netscape/NetscapeBookmarkUtils.php
+++ b/application/netscape/NetscapeBookmarkUtils.php
@@ -54,7 +54,7 @@ class NetscapeBookmarkUtils
54 $link['timestamp'] = $date->getTimestamp(); 54 $link['timestamp'] = $date->getTimestamp();
55 $link['taglist'] = str_replace(' ', ',', $link['tags']); 55 $link['taglist'] = str_replace(' ', ',', $link['tags']);
56 56
57 if (startsWith($link['url'], '?') && $prependNoteUrl) { 57 if (is_note($link['url']) && $prependNoteUrl) {
58 $link['url'] = $indexUrl . $link['url']; 58 $link['url'] = $indexUrl . $link['url'];
59 } 59 }
60 60
diff --git a/index.php b/index.php
index 3700504b..a43063b0 100644
--- a/index.php
+++ b/index.php
@@ -356,7 +356,7 @@ function showDailyRSS($conf, $loginManager)
356 foreach ($links as &$link) { 356 foreach ($links as &$link) {
357 $link['formatedDescription'] = format_description($link['description']); 357 $link['formatedDescription'] = format_description($link['description']);
358 $link['timestamp'] = $link['created']->getTimestamp(); 358 $link['timestamp'] = $link['created']->getTimestamp();
359 if (startsWith($link['url'], '?')) { 359 if (is_note($link['url'])) {
360 $link['url'] = index_url($_SERVER) . $link['url']; // make permalink URL absolute 360 $link['url'] = index_url($_SERVER) . $link['url']; // make permalink URL absolute
361 } 361 }
362 } 362 }
@@ -1166,7 +1166,9 @@ function renderPage($conf, $pluginManager, $LINKSDB, $history, $sessionManager,
1166 $link['title'] = $link['url']; 1166 $link['title'] = $link['url'];
1167 } 1167 }
1168 1168
1169 if ($conf->get('thumbnails.mode', Thumbnailer::MODE_NONE) !== Thumbnailer::MODE_NONE) { 1169 if ($conf->get('thumbnails.mode', Thumbnailer::MODE_NONE) !== Thumbnailer::MODE_NONE
1170 && ! is_note($link['url'])
1171 ) {
1170 $thumbnailer = new Thumbnailer($conf); 1172 $thumbnailer = new Thumbnailer($conf);
1171 $link['thumbnail'] = $thumbnailer->get($url); 1173 $link['thumbnail'] = $thumbnailer->get($url);
1172 } 1174 }
@@ -1550,7 +1552,7 @@ function renderPage($conf, $pluginManager, $LINKSDB, $history, $sessionManager,
1550 $ids = []; 1552 $ids = [];
1551 foreach ($LINKSDB as $link) { 1553 foreach ($LINKSDB as $link) {
1552 // A note or not HTTP(S) 1554 // A note or not HTTP(S)
1553 if ($link['url'][0] === '?' || ! startsWith(strtolower($link['url']), 'http')) { 1555 if (is_note($link['url']) || ! startsWith(strtolower($link['url']), 'http')) {
1554 continue; 1556 continue;
1555 } 1557 }
1556 $ids[] = $link['id']; 1558 $ids[] = $link['id'];
diff --git a/tests/bookmark/LinkUtilsTest.php b/tests/bookmark/LinkUtilsTest.php
index bd08f036..25fb3043 100644
--- a/tests/bookmark/LinkUtilsTest.php
+++ b/tests/bookmark/LinkUtilsTest.php
@@ -289,6 +289,26 @@ class LinkUtilsTest extends \PHPUnit\Framework\TestCase
289 } 289 }
290 290
291 /** 291 /**
292 * Test is_note with note URLs.
293 */
294 public function testIsNote()
295 {
296 $this->assertTrue(is_note('?'));
297 $this->assertTrue(is_note('?abcDEf'));
298 $this->assertTrue(is_note('?_abcDEf#123'));
299 }
300
301 /**
302 * Test is_note with non note URLs.
303 */
304 public function testIsNotNote()
305 {
306 $this->assertFalse(is_note(''));
307 $this->assertFalse(is_note('nope'));
308 $this->assertFalse(is_note('https://github.com/shaarli/Shaarli/?hi'));
309 }
310
311 /**
292 * Util function to build an hashtag link. 312 * Util function to build an hashtag link.
293 * 313 *
294 * @param string $hashtag Hashtag name. 314 * @param string $hashtag Hashtag name.