From 786ddad91d858a60882bd20be279558131e99b68 Mon Sep 17 00:00:00 2001 From: ArthurHoaro Date: Thu, 15 Oct 2015 12:50:40 +0200 Subject: PLUGIN demo_plugin This plugin try to cover Shaarli's plugin API entirely. Can be used by plugin developper to make their own. --- plugins/demo_plugin/custom_demo.css | 7 + plugins/demo_plugin/demo_plugin.js | 1 + plugins/demo_plugin/demo_plugin.php | 317 ++++++++++++++++++++++++++++++++++++ plugins/demo_plugin/field.html | 2 + 4 files changed, 327 insertions(+) create mode 100755 plugins/demo_plugin/custom_demo.css create mode 100755 plugins/demo_plugin/demo_plugin.js create mode 100755 plugins/demo_plugin/demo_plugin.php create mode 100755 plugins/demo_plugin/field.html diff --git a/plugins/demo_plugin/custom_demo.css b/plugins/demo_plugin/custom_demo.css new file mode 100755 index 00000000..ab1720b5 --- /dev/null +++ b/plugins/demo_plugin/custom_demo.css @@ -0,0 +1,7 @@ +.linktitle a { + color: red; +} + +.upper_plugin_demo { + float: left; +} \ No newline at end of file diff --git a/plugins/demo_plugin/demo_plugin.js b/plugins/demo_plugin/demo_plugin.js new file mode 100755 index 00000000..1fc327e6 --- /dev/null +++ b/plugins/demo_plugin/demo_plugin.js @@ -0,0 +1 @@ +console.log("I love the smell of napalm in the morning."); \ No newline at end of file diff --git a/plugins/demo_plugin/demo_plugin.php b/plugins/demo_plugin/demo_plugin.php new file mode 100755 index 00000000..84763c2b --- /dev/null +++ b/plugins/demo_plugin/demo_plugin.php @@ -0,0 +1,317 @@ +DEMO_buttons_toolbar'; + } + + // Fields in toolbar + $data['fields_toolbar'][] = 'DEMO_fields_toolbar'; + } + + return $data; +} + +/** + * Hook render_includes. + * Executed on every page redering. + * + * Template placeholders: + * - css_files + * + * Data: + * - _PAGE_: current page + * - _LOGGEDIN_: true/false + * + * @param array $data data passed to plugin + * + * @return array altered $data. + */ +function hook_demo_plugin_render_includes($data) +{ + // List of plugin's CSS files. + // Note that you just need to specify CSS path. + $data['css_files'][] = PluginManager::$PLUGINS_PATH . '/demo_plugin/custom_demo.css'; + + return $data; +} + +/** + * Hook render_footer. + * Executed on every page redering. + * + * Template placeholders: + * - text + * - js_files + * + * Data: + * - _PAGE_: current page + * - _LOGGEDIN_: true/false + * + * @param array $data data passed to plugin + * + * @return array altered $data. + */ +function hook_demo_plugin_render_footer($data) +{ + // footer text + $data['text'][] = 'Shaarli is now enhanced by the awesome demo_plugin.'; + + // List of plugin's JS files. + // Note that you just need to specify CSS path. + $data['js_files'][] = PluginManager::$PLUGINS_PATH . '/demo_plugin/demo_plugin.js'; + + return $data; +} + +/* + * SPECIFIC PAGES + */ + +/** + * Hook render_linklist. + * + * Template placeholders: + * - action_plugin: next to 'private only' button. + * - plugin_start_zone: page start + * - plugin_end_zone: page end + * - link_plugin: icons below each links. + * + * Data: + * - _LOGGEDIN_: true/false + * + * @param array $data data passed to plugin + * + * @return array altered $data. + */ +function hook_demo_plugin_render_linklist($data) +{ + // action_plugin + $data['action_plugin'][] = '
'; + + if (isset($_GET['up'])) { + // Manipulate link data + foreach ($data['links'] as &$value) { + $value['description'] = strtoupper($value['description']); + $value['title'] = strtoupper($value['title']); + } + } + + // link_plugin (for each link) + foreach ($data['links'] as &$value) { + $value['link_plugin'][] = ' DEMO \o/'; + } + + // plugin_start_zone + $data['plugin_start_zone'][] = '
BEFORE
'; + // plugin_start_zone + $data['plugin_end_zone'][] = '
AFTER
'; + + return $data; +} + +/** + * Hook render_editlink. + * + * Template placeholders: + * - field_plugin: add link fields after tags. + * + * @param array $data data passed to plugin + * + * @return array altered $data. + */ +function hook_demo_plugin_render_editlink($data) +{ + // Load HTML into a string + $html = file_get_contents(PluginManager::$PLUGINS_PATH .'/demo_plugin/field.html'); + + // replace value in HTML if it exists in $data + if (!empty($data['link']['stuff'])) { + $html = sprintf($html, $data['link']['stuff']); + } else { + $html = sprintf($html, ''); + } + + // field_plugin + $data['edit_link_plugin'][] = $html; + + return $data; +} + +/** + * Hook render_tools. + * + * Template placeholders: + * - tools_plugin: after other tools. + * + * @param array $data data passed to plugin + * + * @return array altered $data. + */ +function hook_demo_plugin_render_tools($data) +{ + // field_plugin + $data['tools_plugin'][] = 'tools_plugin'; + + return $data; +} + +/** + * Hook render_picwall. + * + * Template placeholders: + * - plugin_start_zone: page start. + * - plugin_end_zone: page end. + * + * Data: + * - _LOGGEDIN_: true/false + * + * @param array $data data passed to plugin + * + * @return array altered $data. + */ +function hook_demo_plugin_render_picwall($data) +{ + // plugin_start_zone + $data['plugin_start_zone'][] = '
BEFORE
'; + // plugin_end_zone + $data['plugin_end_zone'][] = '
AFTER
'; + + return $data; +} + +/** + * Hook render_tagcloud. + * + * Template placeholders: + * - plugin_start_zone: page start. + * - plugin_end_zone: page end. + * + * Data: + * - _LOGGEDIN_: true/false + * + * @param array $data data passed to plugin + * + * @return array altered $data. + */ +function hook_demo_plugin_render_tagcloud($data) +{ + // plugin_start_zone + $data['plugin_start_zone'][] = '
BEFORE
'; + // plugin_end_zone + $data['plugin_end_zone'][] = '
AFTER
'; + + return $data; +} + +/** + * Hook render_daily. + * + * Template placeholders: + * - plugin_start_zone: page start. + * - plugin_end_zone: page end. + * + * Data: + * - _LOGGEDIN_: true/false + * + * @param array $data data passed to plugin + * + * @return array altered $data. + */ +function hook_demo_plugin_render_daily($data) +{ + // plugin_start_zone + $data['plugin_start_zone'][] = '
BEFORE
'; + // plugin_end_zone + $data['plugin_end_zone'][] = '
AFTER
'; + + + // Manipulate columns data + foreach ($data['cols'] as &$value) { + foreach ($value as &$value2) { + $value2['formatedDescription'] .= ' ಠ_ಠ'; + } + } + + // Add plugin content at the end of each link + foreach ($data['cols'] as &$value) { + foreach ($value as &$value2) { + $value2['link_plugin'][] = 'DEMO'; + } + } + + return $data; +} + +/* + * DATA SAVING HOOK. + */ + +/** + * Hook savelink. + * + * Triggered when a link is save (new or edit). + * All new links now contain a 'stuff' value. + * + * @param array $data contains the new link data. + * + * @return array altered $data. + */ +function hook_demo_plugin_save_link($data) +{ + + // Save stuff added in editlink field + if (!empty($_POST['lf_stuff'])) { + $data['stuff'] = escape($_POST['lf_stuff']); + } + + return $data; +} + +/** + * Hook delete_link. + * + * Triggered when a link is deleted. + * + * @param array $data contains the link to be deleted. + * + * @return array altered data. + */ +function hook_demo_plugin_delete_link($data) +{ + if (strpos($data['url'], 'youtube.com') !== false) { + exit('You can not delete a YouTube link. Don\'t ask.'); + } +} \ No newline at end of file diff --git a/plugins/demo_plugin/field.html b/plugins/demo_plugin/field.html new file mode 100755 index 00000000..00281c4e --- /dev/null +++ b/plugins/demo_plugin/field.html @@ -0,0 +1,2 @@ +
+
\ No newline at end of file -- cgit v1.2.3