From: garvinhicking Date: Wed, 21 Mar 2007 10:53:46 +0000 (+0000) Subject: Fix track exit ids off by one when being used in conjunction with caching plugin X-Git-Url: http://git.mjollnir.org/gw?a=commitdiff_plain;h=bacceb72773ba53f2c6f344b72f5bb227e13367b;p=s9y.git Fix track exit ids off by one when being used in conjunction with caching plugin --- diff --git a/docs/NEWS b/docs/NEWS index a3a08fc..6d9f381 100644 --- a/docs/NEWS +++ b/docs/NEWS @@ -3,6 +3,9 @@ Version 1.2 () ------------------------------------------------------------------------ + * Fix track exit url ids off by one when being used in conjunction + with caching plugin (garvinhicking) + * Fix permalink patterns for some cases to properly detect pagination variables instead of interpreting search words as those. (garvinhicking) diff --git a/include/functions_trackbacks.inc.php b/include/functions_trackbacks.inc.php index 3c6a911..ae36c60 100644 --- a/include/functions_trackbacks.inc.php +++ b/include/functions_trackbacks.inc.php @@ -421,20 +421,35 @@ FAILURE; function serendipity_handle_references($id, $author, $title, $text, $dry_run = false) { global $serendipity; static $old_references = array(); + static $debug = false; if ($dry_run) { // Store the current list of references. We might need to restore them for later user. $old_references = serendipity_db_query("SELECT * FROM {$serendipity['dbPrefix']}references WHERE type = '' AND entry_id = " . (int)$id, false, 'assoc'); + if (is_array($old_references) && count($old_references) > 0) { + $current_references = array(); + foreach($old_references AS $idx => $old_reference) { + // We need the current reference ID to restore it later. + $current_references[$old_reference['link']] = $old_reference; + } + } + if ($debug) echo "Got references in dry run:
" . print_r($current_references, true) . "

\n"; } else { // A dry-run was called previously and restorable references are found. Restore them now. serendipity_db_query("DELETE FROM {$serendipity['dbPrefix']}references WHERE type = '' AND entry_id = " . (int)$id); + if ($debug) echo "Deleted references.
\n"; if (is_array($old_references) && count($old_references) > 0) { + $current_references = array(); foreach($old_references AS $idx => $old_reference) { + // We need the current reference ID to restore it later. + $current_references[$old_reference['link']] = $old_reference; $q = serendipity_db_insert('references', $old_reference, 'show'); serendipity_db_query($q); } } + + if ($debug) echo "Got references in final run:
" . print_r($current_references, true) . "

\n"; } if (!preg_match_all('@]+?href\s*=\s*["\']?([^\'" >]+?)[ \'"][^>]*>(.+?)@i', $text, $matches)) { @@ -490,13 +505,39 @@ function serendipity_handle_references($id, $author, $title, $text, $dry_run = f } } serendipity_db_query("DELETE FROM {$serendipity['dbPrefix']}references WHERE entry_id=" . (int)$id . " AND type = ''"); + if ($debug) echo "Deleted references again.
\n"; - for ($i = 0; $i < $j; ++$i) { - $query = "INSERT INTO {$serendipity['dbPrefix']}references (entry_id, name, link) VALUES("; - $query .= (int)$id . ", '" . serendipity_db_escape_string(strip_tags($names[$i])) . "', '"; - $query .= serendipity_db_escape_string($locations[$i]) . "')"; + if (!is_array($old_references)) { + $old_references = array(); + } - serendipity_db_query($query); + for ($i = 0; $i < $j; ++$i) { + $i_link = serendipity_db_escape_string(strip_tags($names[$i])); + $i_location = serendipity_db_escape_string($locations[$i]); + if (isset($current_references[$locations[$i]])) { + $query = "INSERT INTO {$serendipity['dbPrefix']}references (id, entry_id, name, link) VALUES("; + $query .= (int)$current_references[$locations[$i]]['id'] . ", " . (int)$id . ", '" . $i_link . "', '" . $i_location . "')"; + serendipity_db_query($query); + } else { + $query = "INSERT INTO {$serendipity['dbPrefix']}references (entry_id, name, link) VALUES("; + $query .= (int)$id . ", '" . $i_link . "', '" . $i_location . "')"; + serendipity_db_query($query); + $old_references[] = array( + 'id' => serendipity_db_insert_id('references', 'id'), + 'name' => $i_link, + 'link' => $i_location, + 'entry_id' => (int)$id + ); + } + + if ($debug) { + echo "Current lookup for {$locations[$i]} is
" . print_r($current_references[$locations[$i]], true) . "

\n"; + echo $query . "
\n"; + } + } + + if ($debug) { + echo "Old/Saved locations:
" . print_r($old_references, true) . "

\n"; } // Add citations diff --git a/plugins/serendipity_event_trackexits/serendipity_event_trackexits.php b/plugins/serendipity_event_trackexits/serendipity_event_trackexits.php index 818c3bd..1b8b1cb 100644 --- a/plugins/serendipity_event_trackexits/serendipity_event_trackexits.php +++ b/plugins/serendipity_event_trackexits/serendipity_event_trackexits.php @@ -118,7 +118,9 @@ class serendipity_event_trackexits extends serendipity_event if (empty($serendipity['encodeExitsCallback_entry_id'])) { $this->links = array(); } else { + #echo "SELECT id, link FROM {$serendipity['dbPrefix']}references WHERE entry_id = {$serendipity['encodeExitsCallback_entry_id']} AND type = ''
\n"; $this->links = serendipity_db_query("SELECT id, link FROM {$serendipity['dbPrefix']}references WHERE entry_id = {$serendipity['encodeExitsCallback_entry_id']} AND type = ''", false, 'both', false, 'link', 'id'); + #echo "
" . print_r($this->links, true) . "

\n"; } foreach ($this->markup_elements as $temp) {