Ejemplo n.º 1
0
 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 . '&amp;page=' . $page . '&amp;' . 'ver1=' . $ver1 . '&amp;ver2=' . $ver2;
             if ($row[5] - $ver1 + 1 > $HistMax) {
                 $versionUrl .= '&amp;full=1';
             }
         } else {
             $versionUrl = viewUrl($page, $row[0]);
         }
         $version = '<div align="right"><a href="' . $versionUrl . '">' . $row[0] . '</a>&nbsp;</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;
 }
Ejemplo n.º 2
0
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;
}