From dd6794cff8a1f26c4d08544d89e1df1f521dcb26 Mon Sep 17 00:00:00 2001 From: ArthurHoaro Date: Sat, 19 May 2018 12:55:43 +0200 Subject: Fix feed permalink rendering with markdown escape set to true Fixes #1134 --- plugins/markdown/markdown.php | 8 ++++++ tests/plugins/PluginMarkdownTest.php | 55 ++++++++++++++++++++++++++++++++++++ 2 files changed, 63 insertions(+) diff --git a/plugins/markdown/markdown.php b/plugins/markdown/markdown.php index 2f24e417..821bb125 100644 --- a/plugins/markdown/markdown.php +++ b/plugins/markdown/markdown.php @@ -6,6 +6,8 @@ * Shaare's descriptions are parsed with Markdown. */ +use Shaarli\Config\ConfigManager; + /* * If this tag is used on a shaare, the description won't be processed by Parsedown. */ @@ -50,6 +52,7 @@ function hook_markdown_render_feed($data, $conf) $value = stripNoMarkdownTag($value); continue; } + $value['description'] = reverse_feed_permalink($value['description']); $value['description'] = process_markdown( $value['description'], $conf->get('security.markdown_escape', true), @@ -244,6 +247,11 @@ function reverse_space2nbsp($description) return preg_replace('/(^| ) /m', '$1 ', $description); } +function reverse_feed_permalink($description) +{ + return preg_replace('@— (\w+)$@im', '— [$2]($1)', $description); +} + /** * Replace not whitelisted protocols with http:// in given description. * diff --git a/tests/plugins/PluginMarkdownTest.php b/tests/plugins/PluginMarkdownTest.php index ddc2728d..b31e817f 100644 --- a/tests/plugins/PluginMarkdownTest.php +++ b/tests/plugins/PluginMarkdownTest.php @@ -49,6 +49,30 @@ class PluginMarkdownTest extends PHPUnit_Framework_TestCase $this->assertNotFalse(strpos($data['links'][0]['description'], '

')); } + /** + * Test render_feed hook. + */ + public function testMarkdownFeed() + { + $markdown = '# My title' . PHP_EOL . 'Very interesting content.'; + $markdown .= '— Permalien'; + $data = array( + 'links' => array( + 0 => array( + 'description' => $markdown, + ), + ), + ); + + $data = hook_markdown_render_feed($data, $this->conf); + $this->assertNotFalse(strpos($data['links'][0]['description'], '

')); + $this->assertNotFalse(strpos($data['links'][0]['description'], '

')); + $this->assertStringEndsWith( + '— Permalien

', + $data['links'][0]['description'] + ); + } + /** * Test render_daily hook. * Only check that there is basic markdown rendering. @@ -104,6 +128,37 @@ class PluginMarkdownTest extends PHPUnit_Framework_TestCase $this->assertEquals($text, $reversedText); } + public function testReverseFeedPermalink() + { + $text = 'Description... '; + $text .= '— Permalien'; + $expected = 'Description... — [Permalien](http://domain.tld/?0oc_VQ)'; + $processedText = reverse_feed_permalink($text); + + $this->assertEquals($expected, $processedText); + } + + public function testReverseLastFeedPermalink() + { + $text = 'Description... '; + $text .= '
Permalien'; + $expected = $text; + $text .= '
Permalien'; + $expected .= '
— [Permalien](http://domain.tld/?0oc_VQ)'; + $processedText = reverse_feed_permalink($text); + + $this->assertEquals($expected, $processedText); + } + + public function testReverseNoFeedPermalink() + { + $text = 'Hello! Where are you from?'; + $expected = $text; + $processedText = reverse_feed_permalink($text); + + $this->assertEquals($expected, $processedText); + } + /** * Test sanitize_html(). */ -- cgit v1.2.3