function parse($args, $page) { global $CoTbl, $DiffScript, $HistMax, $pagestore, $PgTbl; static $overrides = array(); require_once 'lib/diff.php'; if (preg_match_all('/\\s*(\\d+)\\s(.*)/', $args, $words)) { $overrides[$words[1][0]] = $words[2][0]; return; } $dbName = str_replace('\\', '\\\\', $page); $dbName = str_replace('\'', '\\\'', $dbName); $filter = trim(strtolower($args)) != 'all'; $qry = "\r\n SELECT version, date_format(time, '%Y-%m-%d %H:%i:%s') time,\r\n minoredit, username, comment, lastversion\r\n FROM {$PgTbl}\r\n INNER JOIN {$CoTbl} ON page = id\r\n WHERE title = '{$dbName}'\r\n ORDER BY version"; $rs = $pagestore->dbh->query($qry); $history = array(); while ($row = $pagestore->dbh->result($rs)) { $row[1] = strtotime($row[1]); $history[$row[0]] = $row; if (isset($overrides[$row[0]])) { $history[$row[0]][4] = $overrides[$row[0]]; $history[$row[0]][2] = 2; // sets as an override } } $minVer = min(array_keys($history)); $maxVer = max(array_keys($history)); $return = "<table>\n"; $return .= "<tr><td><b>Date</b></td><td><b>Version</b></td>" . "<td><b>Description</b></td><td><b>Author</b></td></tr>\n"; foreach ($history as $row) { if ($row[0] > 1 && $filter && $this->filterRow($row)) { continue; } $date = date('Y-m-d', $row[1]); if ($row[0] > $minVer) { $ver1 = $row[0] - 1; $ver2 = $row[0]; if ($filter && $row[0] > 1) { // finds additional contiguous edits of the same author // that are filtered out but within 24 hours later $username = $history[$row[0]][3]; $time = $history[$row[0]][1]; while ($ver2 < $maxVer) { $nextTime = $history[$ver2 + 1][1]; if ($history[$ver2 + 1][3] == $username && $this->filterRow($history[$ver2 + 1]) && $nextTime - $time <= 86400) { $ver2++; } else { break; } } } $versionUrl = $DiffScript . '&page=' . $page . '&' . 'ver1=' . $ver1 . '&ver2=' . $ver2; if ($row[5] - $ver1 + 1 > $HistMax) { $versionUrl .= '&full=1'; } } else { $versionUrl = viewUrl($page, $row[0]); } $version = '<div align="right"><a href="' . $versionUrl . '">' . $row[0] . '</a> </div>'; $comment = $row[4]; if ($row[2] == 1) { $comment = '<small><i>(minor edit)</i></small> ' . $comment; } $author = $row[3] ? html_ref($row[3], $row[3]) : ''; $return .= '<tr>'; $return .= '<td>' . $date . '</td>'; $return .= '<td>' . $version . '</td>'; $return .= '<td>' . $comment . '</td>'; $return .= '<td>' . $author . '</td>'; $return .= "</tr>\n"; } $return .= '</table>'; return $return; }
function parse_redirect($text) { global $action, $no_redirect, $page, $version; if (preg_match('/^#redirect\\s+\\[?(.*?)\\]?\\s*$/i', $text, $matches) && validate_page($matches[1])) { if ($no_redirect || $action != 'view' || isset($version)) { $text = new_entity(array('raw', '#redirect ')) . wikiname_token($matches[1], ''); } else { header('Location: ' . viewUrl($matches[1]) . '&redirect_from=' . $page); exit; } } return $text; }