From 12c4fcfcae4f9dd0dacff34087d79fb0986c9cc6 Mon Sep 17 00:00:00 2001 From: Peter Liebetrau Date: Sun, 20 Jan 2019 20:35:58 +0100 Subject: [PATCH] cookienotice addon - fixes from pull request reviews --- cookienotice/README | 2 +- cookienotice/cookienotice.css | 26 ++++++ cookienotice/cookienotice.js | 37 +++++++++ cookienotice/cookienotice.php | 102 +++++++++++++++++------- cookienotice/templates/cookienotice.tpl | 21 ----- cookienotice/templates/head.tpl | 41 +--------- cookienotice/templates/settings.tpl | 4 +- 7 files changed, 139 insertions(+), 94 deletions(-) create mode 100644 cookienotice/cookienotice.js diff --git a/cookienotice/README b/cookienotice/README index 2eebff66..74edd44a 100644 --- a/cookienotice/README +++ b/cookienotice/README @@ -2,6 +2,6 @@ Cookie Notice For server admins only. -Configure, show and handle a simple cookie usage notice. +Configure, show and handle a simple cookie usage notice. This absolute annoying but eventually necessary notification about the usage of cookies. This kind of things you klick ok on but don't read. Author: Peter liebetrau diff --git a/cookienotice/cookienotice.css b/cookienotice/cookienotice.css index 6bbc56bd..f2581432 100644 --- a/cookienotice/cookienotice.css +++ b/cookienotice/cookienotice.css @@ -1,3 +1,4 @@ +/* Admin css */ #cookienotice-label { float: left; width: 300px; @@ -21,3 +22,28 @@ margin-top: 25px; font-size: 20px; } + +/* Frontend css */ +#cookienotice-box { + display: none; + position: fixed; + z-index: 10000; + bottom: 0px; + left: 0; + width: 100%; + background-color: #101010; + color: #f0f0f0; + padding: 2em 1em; + text-align: center; +} +#cookienotice-box p { + max-width: 100%; +} +#cookienotice-ok-button { + border: 1px solid darkgoldenrod; + background-color: gold; + color: #101010; + min-width: 80px; + padding: .5em .1em; +} + diff --git a/cookienotice/cookienotice.js b/cookienotice/cookienotice.js new file mode 100644 index 00000000..c92e8c21 --- /dev/null +++ b/cookienotice/cookienotice.js @@ -0,0 +1,37 @@ +window.addEventListener("load", function () { + var cookiename = 'cncookiesaccepted' + var cookie = getCookie(cookiename); + + if (cookie == "") { + document.getElementById('cookienotice-box').style.display = 'block'; + document.getElementById('cookienotice-ok-button').onclick = function () { + console.log('clicked'); + setCookie(cookiename, 1, 365); + document.getElementById('cookienotice-box').style.display = 'none'; + }; + } + + function setCookie(cname, cvalue, exdays) { + var d = new Date(); + d.setTime(d.getTime() + (exdays * 24 * 60 * 60 * 1000)); + var expires = "expires=" + d.toUTCString(); + document.cookie = cname + "=" + cvalue + ";" + expires + ";path=/"; + } + + function getCookie(cname) { + var name = cname + "="; + var decodedCookie = decodeURIComponent(document.cookie); + var ca = decodedCookie.split(';'); + for (var i = 0; i < ca.length; i++) { + var c = ca[i]; + while (c.charAt(0) == ' ') { + c = c.substring(1); + } + if (c.indexOf(name) == 0) { + return c.substring(name.length, c.length); + } + } + return ""; + } + +}); diff --git a/cookienotice/cookienotice.php b/cookienotice/cookienotice.php index dd5c1bbd..4eea080f 100644 --- a/cookienotice/cookienotice.php +++ b/cookienotice/cookienotice.php @@ -7,32 +7,55 @@ * Author: Peter Liebetrau * */ -use Friendica\Core\Addon; +use Friendica\Core\Hook; use Friendica\Core\Config; use Friendica\Core\L10n; +/** + * cookienotice_install + * registers hooks + * + * @return void + */ function cookienotice_install() { $file = 'addon/cookienotice/cookienotice.php'; - Addon::registerHook('page_content_top', $file, 'cookienotice_page_content_top'); - Addon::registerHook('page_end', $file, 'cookienotice_page_end'); - Addon::registerHook('addon_settings', $file, 'cookienotice_addon_settings'); - Addon::registerHook('addon_settings_post', $file, 'cookienotice_addon_settings_post'); + Hook::register('page_content_top', $file, 'cookienotice_page_content_top'); + Hook::register('page_end', $file, 'cookienotice_page_end'); + Hook::register('addon_settings', $file, 'cookienotice_addon_settings'); + Hook::register('addon_settings_post', $file, 'cookienotice_addon_settings_post'); } +/** + * cookienotice_uninstall + * unregisters hooks + * + * @return void +*/ function cookienotice_uninstall() { $file = 'addon/cookienotice/cookienotice.php'; - Addon::unregisterHook('page_content_top', $file, 'cookienotice_page_content_top'); - Addon::unregisterHook('page_end', $file, 'cookienotice_page_end'); - Addon::unregisterHook('addon_settings', $file, 'cookienotice_addon_settings'); - Addon::unregisterHook('addon_settings_post', $file, 'cookienotice_addon_settings_post'); + Hook::unregister('page_content_top', $file, 'cookienotice_page_content_top'); + Hook::unregister('page_end', $file, 'cookienotice_page_end'); + Hook::unregister('addon_settings', $file, 'cookienotice_addon_settings'); + Hook::unregister('addon_settings_post', $file, 'cookienotice_addon_settings_post'); } -function cookienotice_addon_settings(&$a, &$s) +/** + * cookienotice_addon_settings + * addon_settings hook + * creates the admins config panel + * + * @param \Friendica\App $a + * @param string $s The existing config panel html so far + * + * @return void + */ +function cookienotice_addon_settings(\Friendica\App $a, &$s) { - if (!is_site_admin()) + if (!is_site_admin()) { return; + } /* Add our stylesheet to the page so we can make our settings look nice */ @@ -50,20 +73,31 @@ function cookienotice_addon_settings(&$a, &$s) $t = get_markup_template("settings.tpl", "addon/cookienotice/"); $s .= replace_macros($t, [ - '$title' => L10n::t('"cookienotice" Settings'), + '$title' => L10n::t('"cookienotice" Settings'), '$description' => L10n::t('Configure your cookie usage notice. It should just be a notice, saying that the website uses cookies. It is shown as long as a user didnt confirm clicking the OK button.'), - '$text' => ['cookienotice-text', L10n::t('Cookie Usage Notice'), $text, L10n::t('The cookie usage notice')], - '$oktext' => ['cookienotice-oktext', L10n::t('OK Button Text'), $oktext, L10n::t('The OK Button text')], - '$submit' => L10n::t('Save Settings') + '$text' => ['cookienotice-text', L10n::t('Cookie Usage Notice'), $text, L10n::t('The cookie usage notice')], + '$oktext' => ['cookienotice-oktext', L10n::t('OK Button Text'), $oktext, L10n::t('The OK Button text')], + '$submit' => L10n::t('Save Settings') ]); return; } -function cookienotice_addon_settings_post(&$a, &$b) +/** + * cookienotice_addon_settings_post + * addon_settings_post hook + * handles the post request from the admin panel + * + * @param \Friendica\App $a + * @param string $b + * + * @return void + */ +function cookienotice_addon_settings_post(\Friendica\App $a, &$b) { - if (!is_site_admin()) + if (!is_site_admin()) { return; + } if ($_POST['cookienotice-submit']) { Config::set('cookienotice', 'text', trim(strip_tags($_POST['cookienotice-text']))); @@ -73,33 +107,41 @@ function cookienotice_addon_settings_post(&$a, &$b) } /** - * adds the link and script to the page head + * cookienotice_page_content_top + * page_content_top hook + * adds css and scripts to the section of the html * - * @param App $a - * @param string $b - The page html before page_content_top + * @param \Friendica\App $a + * @param string $b unnused - the header html incl. nav + * + * @return void */ -function cookienotice_page_content_top($a, &$b) +function cookienotice_page_content_top(\Friendica\App $a, &$b) { - $head = file_get_contents(__DIR__ . '/templates/head.tpl'); + $a->page['htmlhead'] .= '' . "\r\n"; + $head = file_get_contents(__DIR__ . '/templates/head.tpl'); $a->page['htmlhead'] .= $head; } /** - * adds the html to page end - * page_end hook function + * cookienotice_page_end + * page_end hook + * ads our cookienotice box to the end of the html * - * @param App $a - * @param string $b - The page html + * @param \Friendica\App $a + * @param string $b the page html + * + * @return void */ -function cookienotice_page_end($a, &$b) +function cookienotice_page_end(\Friendica\App $a, &$b) { - $text = (string) Config::get('cookienotice', 'text'); - $oktext = (string) Config::get('cookienotice', 'oktext'); + $text = (string) Config::get('cookienotice', 'text', L10n::t('This website uses cookies to recognize revisiting and logged in users. You accept the usage of these cookies by continue browsing this website.')); + $oktext = (string) Config::get('cookienotice', 'oktext', L10n::t('OK')); $page_end_tpl = get_markup_template("cookienotice.tpl", "addon/cookienotice/"); $page_end = replace_macros($page_end_tpl, [ - '$text' => $text, + '$text' => $text, '$oktext' => $oktext, ]); diff --git a/cookienotice/templates/cookienotice.tpl b/cookienotice/templates/cookienotice.tpl index bee362d5..71e88c0f 100644 --- a/cookienotice/templates/cookienotice.tpl +++ b/cookienotice/templates/cookienotice.tpl @@ -1,23 +1,2 @@ -

{{$text}}

diff --git a/cookienotice/templates/head.tpl b/cookienotice/templates/head.tpl index ed0fc87a..6e21318a 100644 --- a/cookienotice/templates/head.tpl +++ b/cookienotice/templates/head.tpl @@ -1,40 +1 @@ - - + \ No newline at end of file diff --git a/cookienotice/templates/settings.tpl b/cookienotice/templates/settings.tpl index 79a5d9bd..68ca99c4 100644 --- a/cookienotice/templates/settings.tpl +++ b/cookienotice/templates/settings.tpl @@ -5,9 +5,9 @@

{{$title}}

-

{{$description}}

+

{{$description}}

{{include file="field_textarea.tpl" field=$text}} - {{include file="field_input.tpl" field=$oktext}} + {{include file="field_input.tpl" field=$oktext}}