<?php if ($token != $_SESSION['token'] || $_SESSION['links'][$index]->url != $url) { showFatalError("Bookmark garbled! Please <a href=\"?action=restart\">" . "restart.</a>"); } if ($_SESSION['links_ctime'] < filectime($bookmarkFile)) { showFatalError("Stale bookmark list detected! " . "Please <a href=\"?action=restart\">restart</a>"); } unset($_SESSION['links'][$index]); $_SESSION['links'] = array_values($_SESSION['links']); writeLinkFile($bookmarkFile, $_SESSION['links']); refreshLinks($SESSION, $bookmarkFile); include 'templates/list.html';
<?php $index = $REQUEST['index']; $url = $REQUEST['url']; // Quick sanity check to make sure we are not getting stale or bogus info if ($_SESSION['links'][$index]->url != $url) { showFatalError("Bookmark garbled! Please <a href=\"?action=restart\">" . "restart.</a>"); } $_SESSION['links'][$index]->lastVisitedTimestamp = time(); $_SESSION['links'][$index]->visitCount++; writeLinkFile($bookmarkFile, $_SESSION['links']); refreshLinks($bookmarkFile); header("Location: {$_SESSION['links'][$index]->url}\r\n");
/** * parseLinkFile * Extract a list of CLinkClass objects from a HTML bookmark file */ function parseLinkFile($linkFileName) { $links = array(); $index = 0; if (!($linkFile = file_get_contents($linkFileName))) { showFatalError("Cannot open link file '{$linkFileName}'"); } $openBracePos = strpos($linkFile, '<'); $closeBracePos = strpos($linkFile, '>', $openBracePos); $done = $closeBracePos == 0 || $linkFile[$openBracePos] != '<'; while (!$done) { if ($linkFile[$openBracePos + 1] == '/') { $closeTag = strtolower(substr($linkFile, $openBracePos + 2, $closeBracePos - $openBracePos - 2)); DEBUG("closing tag '{$closeTag}' detected.\n"); if ($closeTag == $openTag) { $tagElementEnd = $openBracePos; $tagElement = substr($linkFile, $tagElementStart, $tagElementEnd - $tagElementStart); DEBUG("tag element = '{$tagElement}'\n"); } switch ($closeTag) { case "h2": $category = trim($tagElement); break; case "a": $description = trim($tagElement); break; case "li": DEBUG("creating new link ({$url}, {$description}, {$category})\n"); array_push($links, new CLinkClass($url, $description, $category, $createdTimestamp, $lastVisitedTimestamp, $visitCount, $index)); $index++; break; } } else { $openTag = substr($linkFile, $openBracePos + 1, $closeBracePos - $openBracePos - 1); $tagElementStart = $closeBracePos + 1; preg_match_all('/\\s(\\S*)\\s*=\\s*"([^"]*)"/', $openTag, $matches, PREG_SET_ORDER); // array_shift($matches); foreach ($matches as $match) { $attributes[strtolower($match[1])] = $match[2]; DEBUG("Set attrib[{$match['1']}] = '{$match['2']}'\n"); } $spacePos = strpos($openTag, ' '); if ($spacePos > 0) { $openTag = substr($openTag, 0, $spacePos); } $openTag = strtolower($openTag); DEBUG("opening tag '{$openTag}' detected\n"); switch ($openTag) { case 'a': $url = $attributes['href']; $createdTimestamp = $attributes['createdtimestamp']; $lastVisitedTimestamp = $attributes['lastvisitedtimestamp']; $visitCount = $attributes['visitcount']; break; } } if (!($openBracePos = strpos($linkFile, '<', $closeBracePos))) { DEBUG("done (no more open braces found).\n"); $done = TRUE; } if (!($closeBracePos = strpos($linkFile, '>', $openBracePos))) { DEBUG("done (no more close braces found).\n"); $done = TRUE; } } return $links; }