From 50142efd1b4b826f60b1e5673dba5ccbe26e0108 Mon Sep 17 00:00:00 2001 From: kalvn Date: Thu, 1 Feb 2018 13:16:58 +0100 Subject: [PATCH] Executes daily hooks before creating columns. --- index.php | 29 +++++++++++++++------------- plugins/demo_plugin/demo_plugin.php | 12 ++++-------- plugins/markdown/markdown.php | 23 +++++++++++----------- tests/plugins/PluginMarkdownTest.php | 28 +++++++++++---------------- 4 files changed, 42 insertions(+), 50 deletions(-) diff --git a/index.php b/index.php index d57789e6..ae0ce8f0 100644 --- a/index.php +++ b/index.php @@ -611,6 +611,20 @@ function showDaily($pageBuilder, $LINKSDB, $conf, $pluginManager) $linksToDisplay[$key]['timestamp'] = $link['created']->getTimestamp(); } + $dayDate = DateTime::createFromFormat(LinkDB::LINK_DATE_FORMAT, $day.'_000000'); + $data = array( + 'pagetitle' => $conf->get('general.title') .' - '. format_date($dayDate, false), + 'linksToDisplay' => $linksToDisplay, + 'day' => $dayDate->getTimestamp(), + 'dayDate' => $dayDate, + 'previousday' => $previousday, + 'nextday' => $nextday, + ); + + /* Hook is called before column construction so that plugins don't have + to deal with columns. */ + $pluginManager->executeHooks('render_daily', $data, array('loggedin' => isLoggedIn())); + /* We need to spread the articles on 3 columns. I did not want to use a JavaScript lib like http://masonry.desandro.com/ so I manually spread entries with a simple method: I roughly evaluate the @@ -618,7 +632,7 @@ function showDaily($pageBuilder, $LINKSDB, $conf, $pluginManager) */ $columns = array(array(), array(), array()); // Entries to display, for each column. $fill = array(0, 0, 0); // Rough estimate of columns fill. - foreach($linksToDisplay as $key => $link) { + foreach($data['linksToDisplay'] as $key => $link) { // Roughly estimate length of entry (by counting characters) // Title: 30 chars = 1 line. 1 line is 30 pixels height. // Description: 836 characters gives roughly 342 pixel height. @@ -634,18 +648,7 @@ function showDaily($pageBuilder, $LINKSDB, $conf, $pluginManager) $fill[$index] += $length; } - $dayDate = DateTime::createFromFormat(LinkDB::LINK_DATE_FORMAT, $day.'_000000'); - $data = array( - 'pagetitle' => $conf->get('general.title') .' - '. format_date($dayDate, false), - 'linksToDisplay' => $linksToDisplay, - 'cols' => $columns, - 'day' => $dayDate->getTimestamp(), - 'dayDate' => $dayDate, - 'previousday' => $previousday, - 'nextday' => $nextday, - ); - - $pluginManager->executeHooks('render_daily', $data, array('loggedin' => isLoggedIn())); + $data['cols'] = $columns; foreach ($data as $key => $value) { $pageBuilder->assign($key, $value); diff --git a/plugins/demo_plugin/demo_plugin.php b/plugins/demo_plugin/demo_plugin.php index b80a2b6d..f3a63b6a 100644 --- a/plugins/demo_plugin/demo_plugin.php +++ b/plugins/demo_plugin/demo_plugin.php @@ -378,17 +378,13 @@ function hook_demo_plugin_render_daily($data) // Manipulate columns data - foreach ($data['cols'] as &$value) { - foreach ($value as &$value2) { - $value2['formatedDescription'] .= ' ಠ_ಠ'; - } + foreach ($data['linksToDisplay'] as &$value) { + $value['formatedDescription'] .= ' ಠ_ಠ'; } // Add plugin content at the end of each link - foreach ($data['cols'] as &$value) { - foreach ($value as &$value2) { - $value2['link_plugin'][] = 'DEMO'; - } + foreach ($data['linksToDisplay'] as &$value) { + $value['link_plugin'][] = 'DEMO'; } return $data; diff --git a/plugins/markdown/markdown.php b/plugins/markdown/markdown.php index 1531549d..6b4aabf3 100644 --- a/plugins/markdown/markdown.php +++ b/plugins/markdown/markdown.php @@ -70,19 +70,18 @@ function hook_markdown_render_feed($data, $conf) */ function hook_markdown_render_daily($data, $conf) { + //var_dump($data);die; // Manipulate columns data - foreach ($data['cols'] as &$value) { - foreach ($value as &$value2) { - if (!empty($value2['tags']) && noMarkdownTag($value2['tags'])) { - $value2 = stripNoMarkdownTag($value2); - continue; - } - $value2['formatedDescription'] = process_markdown( - $value2['formatedDescription'], - $conf->get('security.markdown_escape', true), - $conf->get('security.allowed_protocols') - ); + foreach ($data['linksToDisplay'] as &$value) { + if (!empty($value['tags']) && noMarkdownTag($value['tags'])) { + $value = stripNoMarkdownTag($value); + continue; } + $value['formatedDescription'] = process_markdown( + $value['formatedDescription'], + $conf->get('security.markdown_escape', true), + $conf->get('security.allowed_protocols') + ); } return $data; @@ -136,7 +135,7 @@ function hook_markdown_render_includes($data) || $data['_PAGE_'] == Router::$PAGE_DAILY || $data['_PAGE_'] == Router::$PAGE_EDITLINK ) { - + $data['css_files'][] = PluginManager::$PLUGINS_PATH . '/markdown/markdown.css'; } diff --git a/tests/plugins/PluginMarkdownTest.php b/tests/plugins/PluginMarkdownTest.php index 96891f1f..ddc2728d 100644 --- a/tests/plugins/PluginMarkdownTest.php +++ b/tests/plugins/PluginMarkdownTest.php @@ -58,20 +58,17 @@ class PluginMarkdownTest extends PHPUnit_Framework_TestCase $markdown = '# My title' . PHP_EOL . 'Very interesting content.'; $data = array( // Columns data - 'cols' => array( - // First, second, third. + 'linksToDisplay' => array( + // nth link 0 => array( - // nth link - 0 => array( - 'formatedDescription' => $markdown, - ), + 'formatedDescription' => $markdown, ), ), ); $data = hook_markdown_render_daily($data, $this->conf); - $this->assertNotFalse(strpos($data['cols'][0][0]['formatedDescription'], '

')); - $this->assertNotFalse(strpos($data['cols'][0][0]['formatedDescription'], '

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

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

')); } /** @@ -148,21 +145,18 @@ class PluginMarkdownTest extends PHPUnit_Framework_TestCase $data = array( // Columns data - 'cols' => array( - // First, second, third. + 'linksToDisplay' => array( + // nth link 0 => array( - // nth link - 0 => array( - 'formatedDescription' => $str, - 'tags' => NO_MD_TAG, - 'taglist' => array(), - ), + 'formatedDescription' => $str, + 'tags' => NO_MD_TAG, + 'taglist' => array(), ), ), ); $data = hook_markdown_render_daily($data, $this->conf); - $this->assertEquals($str, $data['cols'][0][0]['formatedDescription']); + $this->assertEquals($str, $data['linksToDisplay'][0]['formatedDescription']); } /** -- 2.41.0