From 5e148f8a529abf72256ef74ed149d56a5b27bd72 Mon Sep 17 00:00:00 2001 From: Teromene Date: Tue, 11 Oct 2016 16:37:42 +0100 Subject: [PATCH] Archive.org plugin: do not propose archival of private notes Fixes #637 --- plugins/archiveorg/archiveorg.php | 3 + tests/plugins/PluginArchiveorgTest.php | 102 ++++++++++++++++++++++++- 2 files changed, 101 insertions(+), 4 deletions(-) diff --git a/plugins/archiveorg/archiveorg.php b/plugins/archiveorg/archiveorg.php index 7d172584..03d13d0e 100644 --- a/plugins/archiveorg/archiveorg.php +++ b/plugins/archiveorg/archiveorg.php @@ -17,6 +17,9 @@ function hook_archiveorg_render_linklist($data) $archive_html = file_get_contents(PluginManager::$PLUGINS_PATH . '/archiveorg/archiveorg.html'); foreach ($data['links'] as &$value) { + if($value['private'] && preg_match('/^\?[a-zA-Z0-9-_@]{6}($|&|#)/', $value['real_url'])) { + continue; + } $archive = sprintf($archive_html, $value['url']); $value['link_plugin'][] = $archive; } diff --git a/tests/plugins/PluginArchiveorgTest.php b/tests/plugins/PluginArchiveorgTest.php index dbc52bc8..4daa4c9d 100644 --- a/tests/plugins/PluginArchiveorgTest.php +++ b/tests/plugins/PluginArchiveorgTest.php @@ -7,8 +7,8 @@ require_once 'plugins/archiveorg/archiveorg.php'; /** - * Class PlugQrcodeTest - * Unit test for the QR-Code plugin + * Class PluginArchiveorgTest + * Unit test for the archiveorg plugin */ class PluginArchiveorgTest extends PHPUnit_Framework_TestCase { @@ -21,21 +21,25 @@ class PluginArchiveorgTest extends PHPUnit_Framework_TestCase } /** - * Test render_linklist hook. + * Test render_linklist hook on external links. */ - function testArchiveorgLinklist() + function testArchiveorgLinklistOnExternalLinks() { $str = 'http://randomstr.com/test'; + $data = array( 'title' => $str, 'links' => array( array( 'url' => $str, + 'private' => 0, + 'real_url' => $str ) ) ); $data = hook_archiveorg_render_linklist($data); + $link = $data['links'][0]; // data shouldn't be altered $this->assertEquals($str, $data['title']); @@ -44,5 +48,95 @@ class PluginArchiveorgTest extends PHPUnit_Framework_TestCase // plugin data $this->assertEquals(1, count($link['link_plugin'])); $this->assertNotFalse(strpos($link['link_plugin'][0], $str)); + + } + + /** + * Test render_linklist hook on internal links. + */ + function testArchiveorgLinklistOnInternalLinks() + { + $internalLink1 = 'http://shaarli.shaarli/?qvMAqg'; + $internalLinkRealURL1 = '?qvMAqg'; + + $internalLink2 = 'http://shaarli.shaarli/?2_7zww'; + $internalLinkRealURL2 = '?2_7zww'; + + $internalLink3 = 'http://shaarli.shaarli/?z7u-_Q'; + $internalLinkRealURL3 = '?z7u-_Q'; + + $data = array( + 'title' => $internalLink1, + 'links' => array( + array( + 'url' => $internalLink1, + 'private' => 0, + 'real_url' => $internalLinkRealURL1 + ), + array( + 'url' => $internalLink1, + 'private' => 1, + 'real_url' => $internalLinkRealURL1 + ), + array( + 'url' => $internalLink2, + 'private' => 0, + 'real_url' => $internalLinkRealURL2 + ), + array( + 'url' => $internalLink2, + 'private' => 1, + 'real_url' => $internalLinkRealURL2 + ), + array( + 'url' => $internalLink3, + 'private' => 0, + 'real_url' => $internalLinkRealURL3 + ), + array( + 'url' => $internalLink3, + 'private' => 1, + 'real_url' => $internalLinkRealURL3 + ) + ) + ); + + + $data = hook_archiveorg_render_linklist($data); + + // Case n°1: first link type, public + $link = $data['links'][0]; + + $this->assertEquals(1, count($link['link_plugin'])); + $this->assertNotFalse(strpos($link['link_plugin'][0], $internalLink1)); + + // Case n°2: first link type, private + $link = $data['links'][1]; + + $this->assertArrayNotHasKey('link_plugin', $link); + + // Case n°3: second link type, public + $link = $data['links'][2]; + + $this->assertEquals(1, count($link['link_plugin'])); + $this->assertNotFalse(strpos($link['link_plugin'][0], $internalLink2)); + + // Case n°4: second link type, private + $link = $data['links'][3]; + + $this->assertArrayNotHasKey('link_plugin', $link); + + // Case n°5: third link type, public + $link = $data['links'][4]; + + $this->assertEquals(1, count($link['link_plugin'])); + $this->assertNotFalse(strpos($link['link_plugin'][0], $internalLink3)); + + // Case n°6: third link type, private + $link = $data['links'][5]; + + $this->assertArrayNotHasKey('link_plugin', $link); + } + } -- 2.41.0