$date_parse = strtotime($DATE_AT); if ($date_parse) { $DATE_AT = $date_parse; } else { // check for UNIX Timestamp $date_parse = @date('Ymd', $DATE_AT); if (!$date_parse || $date_parse === '19700101') { msg(sprintf($lang['unable_to_parse_date'], $DATE_AT)); $DATE_AT = null; } } } //check for existing $REV related to $DATE_AT if ($DATE_AT) { $pagelog = new PageChangeLog($ID); $rev_t = $pagelog->getLastRevisionAt($DATE_AT); if ($rev_t === '') { //current revision $REV = null; $DATE_AT = null; } else { if ($rev_t === false) { //page did not exist $rev_n = $pagelog->getRelativeRevision($DATE_AT, +1); msg(sprintf($lang['page_nonexist_rev'], strftime($conf['dformat'], $DATE_AT), wl($ID, array('rev' => $rev_n)), strftime($conf['dformat'], $rev_n))); $REV = $DATE_AT; //will result in a page not exists message } else { $REV = $rev_t; } }
/** * Returns a full page id * * @author Andreas Gohr <*****@*****.**> * * @param string $ns namespace which is context of id * @param string &$page (reference) relative page id, updated to resolved id * @param bool &$exists (reference) updated with existance of media */ function resolve_pageid($ns, &$page, &$exists, $rev = '', $date_at = false) { global $conf; global $ID; $exists = false; //empty address should point to current page if ($page === "") { $page = $ID; } //keep hashlink if exists then clean both parts if (strpos($page, '#')) { list($page, $hash) = explode('#', $page, 2); } else { $hash = ''; } $hash = cleanID($hash); $page = resolve_id($ns, $page, false); // resolve but don't clean, yet // get filename (calls clean itself) if ($rev !== '' && $date_at) { $pagelog = new PageChangeLog($page); $pagelog_rev = $pagelog->getLastRevisionAt($rev); if ($pagelog_rev !== false) { //something found $rev = $pagelog_rev; } } $file = wikiFN($page, $rev); // if ends with colon or slash we have a namespace link if (in_array(substr($page, -1), array(':', ';')) || $conf['useslash'] && substr($page, -1) == '/') { if (page_exists($page . $conf['start'], $rev, true, $date_at)) { // start page inside namespace $page = $page . $conf['start']; $exists = true; } elseif (page_exists($page . noNS(cleanID($page)), $rev, true, $date_at)) { // page named like the NS inside the NS $page = $page . noNS(cleanID($page)); $exists = true; } elseif (page_exists($page, $rev, true, $date_at)) { // page like namespace exists $page = $page; $exists = true; } else { // fall back to default $page = $page . $conf['start']; } } else { //check alternative plural/nonplural form if (!@file_exists($file)) { if ($conf['autoplural']) { if (substr($page, -1) == 's') { $try = substr($page, 0, -1); } else { $try = $page . 's'; } if (page_exists($try, $rev, true, $date_at)) { $page = $try; $exists = true; } } } else { $exists = true; } } // now make sure we have a clean page $page = cleanID($page); //add hash if any if (!empty($hash)) { $page .= '#' . $hash; } }
/** * request nonexisting page * */ function test_notexistingpage() { $rev = 1385051947; $currentexpected = false; $pagelog = new PageChangeLog('nonexistingpage', $chunk_size = 8192); $current = $pagelog->getLastRevisionAt($rev); $this->assertEquals($currentexpected, $current); }