add('name', PLUGIN_EVENT_MTRACKBACK_TITLETITLE); $propbag->add('description', PLUGIN_EVENT_MTRACKBACK_TITLEDESC); $propbag->add('stackable', false); $propbag->add('author', 'Garvin Hicking, Malte Paskuda, Ian'); $propbag->add('version', '1.20.1'); $propbag->add('requirements', array( 'serendipity' => '1.6', 'smarty' => '2.6.7', 'php' => '4.1.0' )); $propbag->add('event_hooks', array( 'backend_display' => true, 'backend_trackbacks' => true, 'backend_trackback_check' => true, 'backend_http_request' => true, 'genpage' => true, 'backend_publish' => true, 'backend_save' => true )); $propbag->add('configuration', array('disable_trackall', 'trackown', 'delayed_trackbacks', 'host', 'port', 'user', 'password')); $propbag->add('groups', array('BACKEND_EDITOR')); } function introspect_config_item($name, &$propbag) { switch($name) { case 'trackown': $propbag->add('type', 'boolean'); $propbag->add('name', PLUGIN_EVENT_MTRACKBACK_TITLETRACKOWN); $propbag->add('default', 'true'); break; case 'disable_trackall': $propbag->add('type', 'boolean'); $propbag->add('name', PLUGIN_EVENT_MTRACKBACK_TITLETRACKALL); $propbag->add('default', 'false'); break; case 'delayed_trackbacks': $propbag->add('type', 'boolean'); $propbag->add('name', PLUGIN_EVENT_MTRACKBACK_DELAYED_TRACKBACKS_NAME); $propbag->add('description', PLUGIN_EVENT_MTRACKBACK_DELAYED_TRACKBACKS_DESC); $propbag->add('default', 'true'); break; case 'host': $propbag->add('type', 'string'); $propbag->add('name', 'Proxy Host'); $propbag->add('default', ''); break; case 'port': $propbag->add('type', 'string'); $propbag->add('name', 'Proxy Port'); $propbag->add('default', ''); break; case 'user': $propbag->add('type', 'string'); $propbag->add('name', 'Proxy User'); $propbag->add('default', ''); break; case 'password': $propbag->add('type', 'string'); $propbag->add('name', 'Proxy Password'); $propbag->add('default', ''); break; default: return false; } return true; } function generate_content(&$title) { $title = PLUGIN_EVENT_MTRACKBACK_TITLETITLE; } function install() { $this->setupDB(); } function event_hook($event, &$bag, &$eventData, $addData = null) { global $serendipity; $hooks = &$bag->get('event_hooks'); if (isset($hooks[$event])) { switch($event) { case 'backend_http_request': // Setup a Proxy? $host = $this->get_config('host'); if (!empty($host)) { $eventData['proxy_host'] = $host; $eventData['proxy_port'] = $this->get_config('port'); $eventData['proxy_user'] = $this->get_config('user'); $eventData['proxy_pass'] = $this->get_config('password'); } break; case 'backend_trackbacks': if (!isset($serendipity['POST']['enable_trackback']) && serendipity_db_bool($this->get_config('disable_trackall', 'false'))) { $serendipity['noautodiscovery'] = true; } elseif (($serendipity['POST']['enable_trackback'] ?? null) == 'off') { $serendipity['noautodiscovery'] = true; } else { if (($serendipity['POST']['enable_trackback'] ?? null) == 'selective') { // Clear TB URLs from the entry, start afresh from the textarea input. $eventData = array(); } if (isset($serendipity['POST']['additional_trackbacks']) && !empty($serendipity['POST']['additional_trackbacks'])) { $trackbackURLs = preg_split('@[ \s]+@', trim($serendipity['POST']['additional_trackbacks'])); foreach($trackbackURLs AS $trackbackURL) { $trackbackURL = trim($trackbackURL); if (!in_array($trackbackURL, $eventData)) { $eventData[] = $trackbackURL; $this->cache[$trackbackURL] = 'plugin'; } } } // Shall URLs be removed that point to your own blog? if (!serendipity_db_bool($this->get_config('trackown', 'true'))) { foreach($eventData as $idx => $url) { if (preg_match('@' . preg_quote($serendipity['baseURL'], '@') . '@i', $url)) { unset($eventData[$idx]); } } } } break; case 'backend_trackback_check': $checklock = ''; if (isset($this->cache[$addData])) { $eventData[2] = $addData; $eventData['skipValidate'] = true; } break; case 'backend_display': $trackbackURLs = array(); if (isset($eventData['id']) && $eventData['id'] > 0) { $urls = serendipity_db_query("SELECT link FROM {$serendipity['dbPrefix']}references WHERE entry_id = '". (int)$eventData['id'] ."'"); if (is_array($urls)) { foreach($urls AS $row) { $trackbackURLs[] = (function_exists('serendipity_specialchars') ? serendipity_specialchars($row['link']) : htmlspecialchars($row['link'], ENT_COMPAT, LANG_CHARSET)); } } } if (isset($serendipity['POST']['additional_trackbacks'])) { $additional_urls = preg_split('@[ \s]+@', trim($serendipity['POST']['additional_trackbacks'])); foreach($additional_urls AS $additional_url) { $additional_url = trim($additional_url); if (!in_array($additional_url, $trackbackURLs)) { $trackbackURLs[] = (function_exists('serendipity_specialchars') ? serendipity_specialchars($additional_url) : htmlspecialchars($additional_url, ENT_COMPAT, LANG_CHARSET)); } } } if (!isset($serendipity['POST']['enable_trackback'])) { if (serendipity_db_bool($this->get_config('disable_trackall', 'false'))) { $serendipity['POST']['enable_trackback'] = 'off'; } else { $serendipity['POST']['enable_trackback'] = 'on'; } } ?>
name="serendipity[enable_trackback]" value="on" />
name="serendipity[enable_trackback]" value="off" />
name="serendipity[enable_trackback]" value="selective" />


= serendipity_serverOffsetHour() && serendipity_db_bool($this->get_config('delayed_trackbacks', 'true')) ) { #trackbacks couldn't get generated, so store this entry $this->delay($eventData['id'], $eventData['timestamp']); } break; case 'genpage': #don't check on every page $try = mt_rand(1, 10); if ($try == 1 && serendipity_db_bool($this->get_config('delayed_trackbacks', 'true'))) { $this->generateDelayed(); } break; default: return false; } return true; } else { return false; } } #store id of an entry and wanted release-timestamp function delay($id, $timestamp) { global $serendipity; $this->upgradeCheck(); $this->removeDelayed($id); $sql = "INSERT INTO {$serendipity['dbPrefix']}delayed_trackbacks (id, timestamp) VALUES ({$id}, {$timestamp})"; serendipity_db_query($sql); } #generate trackbacks for entries which now are shown function generateDelayed() { global $serendipity; $this->upgradeCheck(); $sql = "SELECT id, timestamp FROM {$serendipity['dbPrefix']}delayed_trackbacks"; $entries = serendipity_db_query($sql); if (is_array($entries) && !empty($entries)) { foreach ($entries as $entry) { if ($entry['timestamp'] <= serendipity_serverOffsetHour()) { include_once S9Y_INCLUDE_PATH . 'include/functions_trackbacks.inc.php'; $stored_entry = serendipity_fetchEntry('id', $entry['id'], 1, 1); if ($stored_entry == false) { // The entry must have been deleted $this->removeDelayed($entry['id']); } if (isset($_SESSION['serendipityRightPublish'])) { $oldPublighRights = $_SESSION['serendipityRightPublish']; } else { $oldPublighRights = 'unset'; } $_SESSION['serendipityRightPublish'] = true; #remove unnatural entry-data which let the update fail if (isset($stored_entry['loginname'])) { unset($stored_entry['loginname']); } if (isset($stored_entry['email'])) { unset($stored_entry['email']); } # Convert fetched categories to storable categories. $current_cat = $stored_entry['categories']; $stored_entry['categories'] = array(); foreach($current_cat AS $categoryidx => $category_data) { $stored_entry['categories'][$category_data['categoryid']] = $category_data['categoryid']; } ob_start(); serendipity_updertEntry($stored_entry); ob_end_clean(); if ($oldPublighRights == 'unset') { unset($_SESSION['serendipityRightPublish']); } else { $_SESSION['serendipityRightPublish'] = $oldPublighRights; } # the trackbacks are now generated $this->removeDelayed($entry['id']); } } } } #remove delayed entry from further use function removeDelayed($id) { global $serendipity; $sql = "DELETE FROM {$serendipity['dbPrefix']}delayed_trackbacks WHERE id={$id}"; serendipity_db_query($sql); } function setupDB() { global $serendipity; $sql = "CREATE TABLE IF NOT EXISTS {$serendipity['dbPrefix']}delayed_trackbacks ( id int(11) NOT NULL {PRIMARY}, timestamp int(10) {UNSIGNED} )"; serendipity_db_schema_import($sql); } function upgradeCheck() { $db_upgrade = $this->get_config('db_upgrade', ''); if ($db_upgrade != 3) { $this->setupDB(); $this->set_config('db_upgrade', 3); } } } /* vim: set sts=4 ts=4 expandtab : */ ?>