add('name', PLUGIN_EVENT_DSGVO_GDPR_NAME); $propbag->add('description', PLUGIN_EVENT_DSGVO_GDPR_DESC); $propbag->add('stackable', false); $propbag->add('author', 'Serendipity Team'); $propbag->add('version', '1.0'); $propbag->add('requirements', array( 'serendipity' => '2.0', 'smarty' => '2.6.7', 'php' => '5.3.3' )); $propbag->add('groups', array('FRONTEND_FEATURES', 'BACKEND_FEATURES')); $propbag->add('event_hooks', array( 'frontend_saveComment' => true, 'frontend_comment' => true, 'entries_header' => true, 'entry_display' => true, 'genpage' => true, 'frontend_footer' => true, 'css' => true ) ); $propbag->add('configuration', array('commentform_checkbox', 'commentform_text', 'gdpr_url', 'gdpr_info', 'gdpr_content', 'show_in_footer', 'show_in_footer_text', 'cookie_consent', 'cookie_consent_text', 'cookie_consent_path')); $propbag->add('config_groups', array( PLUGIN_EVENT_DSGVO_GDPR_MENU => array('gdpr_url', 'gdpr_info', 'gdpr_content'), PLUGIN_EVENT_DSGVO_GDPR_COOKIE_MENU => array('cookie_consent', 'cookie_consent_text', 'cookie_consent_path') )); } function generate_content(&$title) { $title = $this->title; } function introspect_config_item($name, &$propbag) { global $serendipity; switch($name) { case 'gdpr_url': $propbag->add('type', 'string'); $propbag->add('name', PLUGIN_EVENT_DSGVO_GDPR_URL); $propbag->add('description', PLUGIN_EVENT_DSGVO_GDPR_URL_DESC); $propbag->add('default', ''); break; case 'gdpr_content': $propbag->add('type', 'html'); $propbag->add('name', PLUGIN_EVENT_DSGVO_GDPR_STATEMENT); $propbag->add('description', PLUGIN_EVENT_DSGVO_GDPR_STATEMENT_DESC); $propbag->add('default', ""); break; case 'commentform_text': $propbag->add('type', 'html'); $propbag->add('name', PLUGIN_EVENT_DSGVO_GDPR_COMMENTFORM_TEXT); $propbag->add('description', PLUGIN_EVENT_DSGVO_GDPR_COMMENTFORM_TEXT_DESC); $propbag->add('default', PLUGIN_EVENT_DSGVO_GDPR_COMMENTFORM_TEXT_DEFAULT); break; case 'commentform_checkbox': $propbag->add('type','boolean'); $propbag->add('name', PLUGIN_EVENT_DSGVO_GDPR_COMMENTFORM_CHECKBOX); $propbag->add('description', PLUGIN_EVENT_DSGVO_GDPR_COMMENTFORM_CHECKBOX_DESC); $propbag->add('default', 'true'); break; case 'show_in_footer': $propbag->add('type','boolean'); $propbag->add('name', PLUGIN_EVENT_DSGVO_GDPR_SHOW_IN_FOOTER); $propbag->add('description', PLUGIN_EVENT_DSGVO_GDPR_SHOW_IN_FOOTER_DESC); $propbag->add('default', 'true'); break; case 'show_in_footer_text': $propbag->add('type', 'html'); $propbag->add('name', PLUGIN_EVENT_DSGVO_GDPR_SHOW_IN_FOOTER_TEXT); $propbag->add('description', PLUGIN_EVENT_DSGVO_GDPR_SHOW_IN_FOOTER_TEXT_DESC); $propbag->add('default', PLUGIN_EVENT_DSGVO_GDPR_SHOW_IN_FOOTER_TEXT_DEFAULT); break; case 'gdpr_info': $propbag->add('type', 'content'); $propbag->add('name', PLUGIN_EVENT_DSGVO_GDPR_INFO); $propbag->add('description', PLUGIN_EVENT_DSGVO_GDPR_INFO_DESC); $propbag->add('default', $this->inspect_gdpr()); break; case 'cookie_consent': $propbag->add('type','boolean'); $propbag->add('name', PLUGIN_EVENT_DSGVO_GDPR_COOKIE_CONSENT); $propbag->add('description', PLUGIN_EVENT_DSGVO_GDPR_COOKIE_CONSENT_DESC); $propbag->add('default', 'true'); break; case 'cookie_consent_text': $propbag->add('type', 'text'); $propbag->add('name', PLUGIN_EVENT_DSGVO_GDPR_COOKIE_CONSENT_TEXT); $propbag->add('description', PLUGIN_EVENT_DSGVO_GDPR_COOKIE_CONSENT_TEXT_DESC); $propbag->add('default', PLUGIN_EVENT_DSGVO_GDPR_COOKIE_CONSENT_TEXT_DEFAULT); break; case 'cookie_consent_path': $propbag->add('type', 'string'); $propbag->add('name', PLUGIN_EVENT_DSGVO_GDPR_COOKIE_CONSENT_PATH); $propbag->add('description', PLUGIN_EVENT_DSGVO_GDPR_COOKIE_CONSENT_PATH_DESC); $propbag->add('default', $serendipity['serendipityHTTPPath'] . 'plugins/serendipity_event_dsgvo_gdpr/'); break; } return true; } function inspect_gdpr() { $out = PLUGIN_EVENT_DSGVO_GDPR_SERENDIPITY_CORE; $classes = serendipity_plugin_api::enum_plugins(); foreach ($classes as $class_data) { $pluginFile = serendipity_plugin_api::probePlugin($class_data['name'], $class_data['classname'], $class_data['pluginPath']); $plugin =& serendipity_plugin_api::getPluginInfo($pluginFile, $class_data); if (is_object($plugin)) { // Object is returned when a plugin could not be cached. $bag = new serendipity_property_bag; $plugin->introspect($bag); $legal = $bag->get('legal'); if (is_array($legal)) { $out .= '

' . $class_data['classname'] . '

'; if (is_array($legal['services']) && count($legal['services']) > 0) { $out .= '

Web services / Third Party

'; $out .= ''; } if (is_array($legal['frontend']) && count($legal['frontend']) > 0) { $out .= '

Frontend

'; $out .= ''; } if (is_array($legal['backend']) && count($legal['backend']) > 0) { $out .= '

Backend

'; $out .= ''; } if (is_array($legal['cookies']) && count($legal['cookies']) > 0) { $out .= '

Cookies

'; $out .= ''; } if (is_array($legal['sessiondata']) && count($legal['sessiondata']) > 0) { $out .= '

Session data

'; $out .= ''; } $out .= '

Attributes

'; $out .= ''; } } } return $out; } function parseText($text) { global $serendipity; $url = $this->get_config('gdpr_url'); if (empty($url)) { $url = $serendipity['serendipityHTTPPath'] . $serendipity['indexFile'] . '?serendipity[subpage]=dsgvo_gdpr_privacy'; } $text = str_replace('%gdpr_url%', $url, $text); return $text; } function isActive() { global $serendipity; if ($serendipity['GET']['subpage'] == 'dsgvo_gdpr_privacy') { return true; } return false; } function event_hook($event, &$bag, &$eventData, $addData = null) { global $serendipity; $hooks = &$bag->get('event_hooks'); if (isset($hooks[$event])) { switch($event) { case 'frontend_saveComment': if (serendipity_db_bool($this->get_config('commentform_checkbox'))) { if ($addData['type'] == 'NORMAL') { // Only act to comments. Trackbacks are an API so we cannot add checks there. if (empty($serendipity['POST']['accept_privacy'])) { $eventData = array('allow_comments' => false); $serendipity['messagestack']['comments'][] = PLUGIN_EVENT_DSGVO_GDPR_COMMENTFORM_ERROR; return false; } } } return true; break; case 'frontend_comment': if (serendipity_db_bool($this->get_config('commentform_checkbox'))) { ?>
>
isActive()) { $serendipity['is_staticpage'] = true; } return true; break; case 'entry_display': if ($this->isActive()) { if (is_array($eventData)) { $eventData['clean_page'] = true; // This is important to not display an entry list! } else { $eventData = array('clean_page' => true); } } return true; break; case 'entries_header': if ($this->isActive()) { serendipity_header($_SERVER['SERVER_PROTOCOL'].' 200 OK'); serendipity_header('Status: 200 OK'); $statement = $this->get_config('gdpr_content'); if (empty($statement)) { $statement = '
' . PLUGIN_EVENT_DSGVO_GDPR_STATEMENT_ERROR . '
'; } echo '
' . $statement . '
'; } return true; break; case 'frontend_footer': if (serendipity_db_bool($this->get_config('show_in_footer'))) { echo ''; } if (serendipity_db_bool($this->get_config('cookie_consent'))) { ?> parseText($this->get_config('cookie_consent_text')); } return true; break; case 'css': if (!strpos($eventData, '.dsgvo_gdpr')) { // class exists in CSS, so a user has customized it and we don't need default echo file_get_contents(dirname(__FILE__) . '/style.css'); } return true; break; default: return false; } } else { return false; } } } /* vim: set sts=4 ts=4 expandtab : */