* @link http://wiki.foosel.net/snippets/dokuwiki/linkback */ class action_plugin_linkback_receive extends DokuWiki_Action_Plugin { /** * Register the eventhandlers. */ function register(Doku_Event_Handler $controller) { $controller->register_hook('TPL_ACT_RENDER', 'BEFORE', $this, 'addTrackbackLink', array ()); $controller->register_hook('TPL_METAHEADER_OUTPUT', 'BEFORE', $this, 'addPingbackLinkToMetaheader', array ()); $controller->register_hook('ACTION_HEADERS_SEND', 'BEFORE', $this, 'addPingbackLinkToHTTPHeader', array ()); } /** * Handler for the TPL_ACT_RENDER event */ function addTrackbackLink(Doku_Event $event, $params) { global $ID; // Action not 'show'? Quit if ($event->data != 'show') return; // Trackbacks disabled? Quit if (!$this->getConf('enable_trackback')) return; // Get linkback metadata $file = metaFN($ID, '.linkbacks'); $data = array ( 'send' => false, 'receive' => false, 'display' => false, 'sentpings' => array (), 'receivedpings' => array (), 'number' => 0, ); if (@ file_exists($file)) $data = unserialize(io_readFile($file, false)); // Does not accept linkbacks? Quit if (!$data['receive']) return; // if trackbacks are enabled, insert RDF definition of trackback into output if ($this->getConf('enable_trackback')) { echo ''; } } /** * Handler for the TPL_METAHEADER_OUTPUT event * @param Doku_Event $event * @param $params * @return bool|void */ function addPingbackLinkToMetaheader(Doku_Event $event, $params) { global $ID; // Pingbacks disabled? Quit if (!$this->getConf('enable_pingback')) return; // Get linkback metadata $file = metaFN($ID, '.linkbacks'); $data = array ( 'send' => false, 'receive' => false, 'display' => false, 'sentpings' => array (), 'receivedpings' => array (), 'number' => 0, ); if (@ file_exists($file)) $data = unserialize(io_readFile($file, false)); // Does not accept linkbacks? Quit if (!$data['receive']) return; // Add pingback metaheader $event->data['link'][] = array ( 'rel' => 'pingback', 'href' => DOKU_URL . 'lib/plugins/linkback/exe/pingback.php/' . $ID ); return true; } /** * Handler for the ACTION_HEADERS_SEND event * * @param Doku_Event $event * @param $params * @return bool|void */ function addPingbackLinkToHTTPHeader(Doku_Event $event, $params) { global $ID; // Pingbacks disabled? Quit if (!$this->getConf('enable_pingback')) return; // Get linkback metadata $file = metaFN($ID, '.linkbacks'); $data = array ( 'send' => false, 'receive' => false, 'display' => false, 'sentpings' => array (), 'receivedpings' => array (), 'number' => 0, ); if (@ file_exists($file)) $data = unserialize(io_readFile($file, false)); // Does not accept linkbacks? Quit if (!$data['receive']) return; // Add pingback header $event->data[] = 'X-Pingback: ' . DOKU_URL . 'lib/plugins/linkback/exe/pingback.php/' . $ID; return true; } }