/** * Hook for Serendipity events, initialize plug-in features * * @param string $event * @param serendipity_property_bag $bag * @param array $eventData * @param array $addData * @return bool */ function event_hook($event, &$bag, &$eventData, $addData = null) { global $serendipity; $hooks =& $bag->get('event_hooks'); if (isset($hooks[$event])) { switch ($event) { case 'external_plugin': switch ($eventData) { case 'spamblockbee.png': header('Content-Type: image/png'); echo file_get_contents(dirname(__FILE__) . '/spamblockbee.png'); break; case 'spamblockbeecaptcha': echo $this->produceCaptchaAnswerJson(); break; } break; case 'frontend_saveComment': // Check only, if no one else denied it before if (!is_array($eventData) || serendipity_db_bool($eventData['allow_comments'])) { return $this->checkComment($eventData, $addData); } return true; break; case 'frontend_comment': $this->printCommentEditExtras($eventData, $addData); break; case 'frontend_footer': // Comment header code only if in single article mode or contactform // If contact form is installed, display on any page not being the article list // else display in single article only. $contactFormInstalled = class_exists('serendipity_event_contactform'); if ($contactFormInstalled && empty($eventData['GET']['page']) || !$contactFormInstalled && !empty($eventData['GET']['id'])) { $this->printJsExtras(); } break; case 'css': $this->printCss($eventData, $addData); break; default: return false; break; } return true; } else { return false; } }
/** * @param string $event * @param serendipity_property_bag $bag * @param array $eventData * @param null $addData * @return bool */ public function event_hook($event, &$bag, &$eventData, $addData = null) { if (!class_exists("simple_html_dom") || !function_exists("str_get_html")) { require_once dirname(__FILE__) . '/libs/simple_html_dom.php'; } $hooks =& $bag->get('event_hooks'); if (isset($hooks[$event])) { switch ($event) { case 'frontend_display': $blacklist = $this->getBlacklist(); foreach ($this->markupElements as $temp) { $element = $temp['element']; if ($blacklist === null) { $eventData[$element] = $this->getDnsBlacklisted($eventData[$element]); } else { $eventData[$element] = $this->d64_lsr_check($blacklist, $eventData[$element]); } } return true; break; default: return false; } } return false; }
/** * Hook for Serendipity events, initialize plug-in features * * @param string $event * @param serendipity_property_bag $bag * @param array $eventData * @param array $addData * @return boolean */ function event_hook($event, &$bag, &$eventData, $addData = null) { global $serendipity; $hooks =& $bag->get('event_hooks'); $serendipity['plugin_guestbook_version'] =& $bag->get('version'); // set global plugin path setting, to avoid different pluginpath '/plugins/' as plugins serendipity vars if (!isset($serendipity['guestbook']['pluginpath'])) { $pluginpath = pathinfo(dirname(__FILE__)); $serendipity['guestbook']['pluginpath'] = basename(rtrim($pluginpath['dirname'], '/')) . '/serendipity_event_guestbook/'; } if (isset($hooks[$event])) { switch ($event) { case 'frontend_configure': // checking if db tables exists, otherwise install them $cur = ''; $old = $this->get_config('version', '', false); if ($old == '1.0') { $cur = $old; } if (empty($cur) && (!empty($old) || $old == '' && $old != false)) { $cur = '2.0'; } else { $cur = $this->get_config('dbversion'); } if ($cur == '1.0') { $this->alter_db($cur); $this->set_config('dbversion', '2.0'); } elseif ($cur == '2.0') { $this->alter_db($cur); $this->set_config('dbversion', '3.0'); $this->cleanup(); } elseif ($cur == '3.0') { $this->alter_db($cur); $this->set_config('dbversion', '4'); } elseif ($cur == '4') { $this->alter_db($cur); $this->set_config('dbversion', '5'); } elseif ($cur == '5') { continue; } else { $this->install(); $this->set_config('dbversion', '5'); } break; case 'genpage': $args = implode('/', serendipity_getUriArguments($eventData, true)); if ($serendipity['rewrite'] != 'none') { $nice_url = $serendipity['serendipityHTTPPath'] . $args; } else { $nice_url = $serendipity['serendipityHTTPPath'] . $serendipity['indexFile'] . '?/' . $args; } if (empty($serendipity['GET']['subpage'])) { $serendipity['GET']['subpage'] = $nice_url; } if ($this->selected()) { $serendipity['head_title'] = $this->get_config('headline'); $serendipity['head_subtitle'] = $this->html_specialchars($serendipity['blogTitle']); } break; case 'entry_display': if ($this->selected()) { // This is important to not display an entry list! if (is_array($eventData)) { $eventData['clean_page'] = true; } else { $eventData = array('clean_page' => true); } } return true; break; case 'entries_header': // this one really rolls up output: check form submit, generate entries and form $this->generate_Page(); return true; break; case 'external_plugin': // [0]=guestbookdlsql; [1]=filename; $gb['export'] = explode('/', $eventData); if ($gb['export'][0] == 'guestbookdlsql') { $file = file_get_contents($serendipity['serendipityPath'] . 'templates_c/guestbook/' . $gb['export'][1]); echo $file; header('Status: 302 Found'); header('Content-Type: application/octet-stream; charset=UTF-8'); // text/plain to see as file in browser header('Content-Disposition: inline; filename=' . $gb['export'][1]); } break; // put here all you css stuff you need for frontend guestbook pages // put here all you css stuff you need for frontend guestbook pages case 'css': if (stristr($eventData, '#guestbook_wrapper')) { // class exists in CSS, so a user has customized it and we don't need default return true; } $tfile = serendipity_getTemplateFile('style_guestbook_frontend.css', 'serendipityPath'); if ($tfile) { $search = array('{TEMPLATE_PATH}', '{PLUGIN_PATH}'); $replace = array('templates/' . $serendipity['defaultTemplate'] . '/', $serendipity['guestbook']['pluginpath']); $tfilecontent = str_replace($search, $replace, @file_get_contents($tfile)); } if (!$tfile || $tfile == 'style_guestbook_frontend.css') { $tfile = dirname(__FILE__) . '/style_guestbook_frontend.css'; $search = array('{TEMPLATE_PATH}', '{PLUGIN_PATH}'); $tfilecontent = str_replace($search, $serendipity['guestbook']['pluginpath'], @file_get_contents($tfile)); } if (!empty($tfilecontent)) { $this->cssEventData($eventData, $tfilecontent); } return true; break; case 'backend_sidebar_entries': // forbid sidebar link if user is not in admin group level if ($serendipity['serendipityUserlevel'] < USERLEVEL_ADMIN) { return false; } if ($serendipity['version'][0] < 2) { echo "\n" . '<li class="serendipitySideBarMenuLink serendipitySideBarMenuEntryLinks"><a href="?serendipity[adminModule]=event_display&serendipity[adminAction]=guestbook">' . PLUGIN_GUESTBOOK_ADMIN_NAME . '</a></li>' . "\n"; } return true; break; case 'backend_sidebar_admin_appearance': // forbid sidebar link if user is not in admin group level if ($serendipity['serendipityUserlevel'] < USERLEVEL_ADMIN) { return false; } if ($serendipity['version'][0] > 1) { echo "\n" . '<li><a href="?serendipity[adminModule]=event_display&serendipity[adminAction]=guestbook">' . PLUGIN_GUESTBOOK_ADMIN_NAME . '</a></li>' . "\n"; } return true; break; case 'backend_sidebar_entries_event_display_guestbook': // forbid entry access if user is not in admin group level if ($serendipity['serendipityUserlevel'] < USERLEVEL_ADMIN) { return false; } // show backend administration menu $this->gbadminpanel(); return true; break; // put here all you css stuff you need for the backend of guestbook pages // put here all you css stuff you need for the backend of guestbook pages case 'css_backend': if (stristr($eventData, '#wrapGB')) { // class exists in CSS, so a user has customized it and we don't need default return true; } $tfile = serendipity_getTemplateFile('style_guestbook_backend.css', 'serendipityPath'); if ($tfile) { $search = array('{TEMPLATE_PATH}', '{PLUGIN_PATH}'); $replace = array('templates/' . $serendipity['defaultTemplate'] . '/', $serendipity['guestbook']['pluginpath']); $tfilecontent = str_replace($search, $replace, @file_get_contents($tfile)); } if ((!$tfile || $tfile == 'style_guestbook_backend.css') && !$tfilecontent) { $tfile = dirname(__FILE__) . '/style_guestbook_backend.css'; $search = array('{TEMPLATE_PATH}', '{PLUGIN_PATH}'); $tfilecontent = str_replace($search, $serendipity['guestbook']['pluginpath'], @file_get_contents($tfile)); } // overwrite Serendipity 1.7 .serendipityAdminContent span !important if ($serendipity['version'][0] < '2') { ?> #wrapGB .gb_entryhead span {color: #CCDDE7 !important;} #wrapGB .gb_entrybody span {color: #222 !important;} #wrapGB .msg_error, #wrapGB .msg_success, #wrapGB .msg_notice, #wrapGB .msg_hint { display: block; margin: 1.5em 0; padding: .5em; } #wrapGB .msg_error { background: #f2dede; border: 1px solid #e4b9b9; color: #b94a48; } #wrapGB .msg_success { background: #dff0d8; border: 1px solid #c1e2b3; color: #468847; } #wrapGB .msg_notice { background: #fcf8e3; border: 1px solid #fbeed5; color: #c09853; } #wrapGB .msg_hint { background: #eee; border: 1px solid #aaa; color: #777; } <?php } // add replaced css content to the end of serendipity_admin.css if (!empty($tfilecontent)) { $this->cssEventData($eventData, $tfilecontent); } return true; break; default: return false; break; } } else { return false; } }
/** * @param string $event * @param serendipity_property_bag $bag * @param array $eventData * @param null $addData * @return bool|true */ public function event_hook($event, &$bag, &$eventData, $addData = null) { global $serendipity; if (intval($serendipity['version'][0]) < 2) { $this->legacy = true; } $hooks =& $bag->get('event_hooks'); $pluginConfigurationKeys = $bag->get('configuration'); if (isset($hooks[$event])) { switch ($event) { case 'backend_entry_toolbar_extended': return $this->processEvent('extended', $eventData, $pluginConfigurationKeys); break; case 'backend_entry_toolbar_body': return $this->processEvent('body', $eventData, $pluginConfigurationKeys); break; default: return false; break; } } return false; }
/** * @test */ public function testIntrospect() { $this->object->introspect($this->propBag); $this->assertEquals('0.3', $this->propBag->get('version')); $this->assertFalse($this->propBag->get('stackable')); }
/** * Example 1 * @test */ public function introspect() { $this->object->introspect($this->propBag); $this->assertEquals('Typeset/Extended Buttons for non-WYSIWYG editors', $this->propBag->get('name')); $this->assertFalse($this->propBag->get('stackable')); }