From bf26e7ebcb5ee69523b93a5ec7b7a65b39acb916 Mon Sep 17 00:00:00 2001 From: ArthurHoaro Date: Mon, 3 Oct 2016 09:43:49 +0200 Subject: [PATCH] Isso comments plugin Use Isso client to let visitors comments on permalinks --- plugins/isso/isso.css | 3 + plugins/isso/isso.html | 14 ++++ plugins/isso/isso.meta | 3 + plugins/isso/isso.php | 54 ++++++++++++ tests/plugins/PluginIssoTest.php | 136 +++++++++++++++++++++++++++++++ 5 files changed, 210 insertions(+) create mode 100644 plugins/isso/isso.css create mode 100644 plugins/isso/isso.html create mode 100644 plugins/isso/isso.meta create mode 100644 plugins/isso/isso.php create mode 100644 tests/plugins/PluginIssoTest.php diff --git a/plugins/isso/isso.css b/plugins/isso/isso.css new file mode 100644 index 00000000..b89babc3 --- /dev/null +++ b/plugins/isso/isso.css @@ -0,0 +1,3 @@ +#isso-thread > h4 { + text-align: center; +} diff --git a/plugins/isso/isso.html b/plugins/isso/isso.html new file mode 100644 index 00000000..babab9b8 --- /dev/null +++ b/plugins/isso/isso.html @@ -0,0 +1,14 @@ + +
diff --git a/plugins/isso/isso.meta b/plugins/isso/isso.meta new file mode 100644 index 00000000..62473abc --- /dev/null +++ b/plugins/isso/isso.meta @@ -0,0 +1,3 @@ +description="Let visitor comment your shaares on permalinks with Isso." +parameters="ISSO_SERVER" +parameter.ISSO_SERVER="Isso server URL (without 'http://')" diff --git a/plugins/isso/isso.php b/plugins/isso/isso.php new file mode 100644 index 00000000..ffb7cfac --- /dev/null +++ b/plugins/isso/isso.php @@ -0,0 +1,54 @@ +get('plugins.ISSO_SERVER'); + if (empty($issoUrl)) { + $error = 'Isso plugin error: '. + 'Please define the "ISSO_SERVER" setting in the plugin administration page.'; + return array($error); + } +} + +/** + * Render linklist hook. + * Will only display Isso comments on permalinks. + * + * @param $data array List of links + * @param $conf ConfigManager instance + * + * @return mixed - linklist data with Isso plugin. + */ +function hook_isso_render_linklist($data, $conf) +{ + $issoUrl = $conf->get('plugins.ISSO_SERVER'); + if (empty($issoUrl)) { + return $data; + } + + // Only display comments for permalinks. + if (count($data['links']) == 1 && empty($data['search_tags']) && empty($data['search_term'])) { + $link = reset($data['links']); + $isso_html = file_get_contents(PluginManager::$PLUGINS_PATH . '/isso/isso.html'); + + $isso = sprintf($isso_html, $issoUrl, $issoUrl, $link['linkdate'], $link['linkdate']); + $data['plugin_end_zone'][] = $isso; + + // Hackish way to include this CSS file only when necessary. + $data['plugins_includes']['css_files'][] = PluginManager::$PLUGINS_PATH . '/isso/isso.css'; + } + + return $data; +} diff --git a/tests/plugins/PluginIssoTest.php b/tests/plugins/PluginIssoTest.php new file mode 100644 index 00000000..1f545c7d --- /dev/null +++ b/tests/plugins/PluginIssoTest.php @@ -0,0 +1,136 @@ +set('plugins.ISSO_SERVER', 'value'); + $errors = isso_init($conf); + $this->assertEmpty($errors); + } + + /** + * Test Isso init with errors. + */ + function testWallabagInitError() + { + $conf = new ConfigManager(''); + $errors = isso_init($conf); + $this->assertNotEmpty($errors); + } + + /** + * Test render_linklist hook with valid settings to display the comment form. + */ + function testIssoDisplayed() + { + $conf = new ConfigManager(''); + $conf->set('plugins.ISSO_SERVER', 'value'); + + $str = 'http://randomstr.com/test'; + $data = array( + 'title' => $str, + 'links' => array( + array( + 'url' => $str, + 'linkdate' => 'abc', + ) + ) + ); + + $data = hook_isso_render_linklist($data, $conf); + + // data shouldn't be altered + $this->assertEquals($str, $data['title']); + $this->assertEquals($str, $data['links'][0]['url']); + + // plugin data + $this->assertEquals(1, count($data['plugin_end_zone'])); + $this->assertNotFalse(strpos($data['plugin_end_zone'][0], 'abc')); + $this->assertNotFalse(strpos($data['plugin_end_zone'][0], 'embed.min.js')); + } + + /** + * Test isso plugin when multiple links are displayed (shouldn't be displayed). + */ + function testIssoMultipleLinks() + { + $conf = new ConfigManager(''); + $conf->set('plugins.ISSO_SERVER', 'value'); + + $str = 'http://randomstr.com/test'; + $data = array( + 'title' => $str, + 'links' => array( + array( + 'url' => $str, + 'linkdate' => 'abc', + ), + array( + 'url' => $str . '2', + 'linkdate' => 'abc2', + ), + ) + ); + + $processed = hook_isso_render_linklist($data, $conf); + // data shouldn't be altered + $this->assertEquals($data, $processed); + } + + /** + * Test isso plugin when using search (shouldn't be displayed). + */ + function testIssoNotDisplayedWhenSearch() + { + $conf = new ConfigManager(''); + $conf->set('plugins.ISSO_SERVER', 'value'); + + $str = 'http://randomstr.com/test'; + $data = array( + 'title' => $str, + 'links' => array( + array( + 'url' => $str, + 'linkdate' => 'abc', + ) + ), + 'search_term' => $str + ); + + $processed = hook_isso_render_linklist($data, $conf); + + // data shouldn't be altered + $this->assertEquals($data, $processed); + } + + /** + * Test isso plugin without server configuration (shouldn't be displayed). + */ + function testIssoWithoutConf() + { + $data = 'abc'; + $conf = new ConfigManager(''); + $processed = hook_isso_render_linklist($data, $conf); + $this->assertEquals($data, $processed); + } +} -- 2.41.0