Also adds a helper function to determine if a link is a note and apply it across multiple files.
{
$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'];
{
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] === '?';
+}
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) {
$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'];
}
$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
}
}
$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);
}
$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'];
$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.
*