1402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll<?php 2402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollrequire_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/app.class.php"); require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/nav.class.php"); require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/menu.class.php"); $App = new App(); $Nav = new Nav(); $Menu = new Menu(); include($App->getProjectCommon()); 3402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollob_start(); 4402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 5402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollinclude("includes/db.php"); 6402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 7402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll$pagesize = 25; //results per page 8402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll$scroll = 5; //+- pages to show in nav 9402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll$days = 7; 10402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll$page = (preg_match("/^\d+$/", $_GET["p"]) ? $_GET["p"] : 1); 11402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll$offset = ($page - 1) * $pagesize; 12402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 13402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll$where = "WHERE `date` >= DATE_SUB(CURDATE(), INTERVAL $days DAY)"; 14402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll$order = "ORDER BY `date` DESC"; 15402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 16402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll$extraf = array( 17402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll array("regex" => "/author: ?(\S+)/", "sql" => "`author` LIKE '%%%s%%'", "sqlpart" => "where"), 18402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll array("regex" => "/file: ?(\S+)/", "sql" => "`cvsname` LIKE '%%%s%%'", "sqlpart" => "where"), 19402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll array("regex" => "/days: ?(\d+)/", "sql" => "`date` >= DATE_SUB(CURDATE(), INTERVAL %d DAY)", "sqlpart" => "where"), 20402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll array("regex" => "/(?:project|module): ?(\S+)/", "sql" => "`project` LIKE '%s'", "sqlpart" => "where"), 21402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll array("regex" => "/branch: ?(\S+)/", "sql" => "`branch` LIKE '%%%s%%'", "sqlpart" => "having") //is a calculated value, won't work in WHERE 22402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll); 23402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 24402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll$q = (get_magic_quotes_gpc() ? $_GET["q"] : addslashes($_GET["q"])); 25402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll$extra = array("where" => array(), "having" => array()); 26402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollforeach ($extraf as $z) 27402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll{ 28402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll while (preg_match($z["regex"], $q, $regs)) 29402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll { 30402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll array_push($extra[$z["sqlpart"]], sprintf($z["sql"], $regs[1])); 31402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll $q = preg_replace($z["regex"], "", $q); 32402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } 33402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll} 34402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 35402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll$regs = array(); 36402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll/* this *could* be put into $extraf, but it would change the semantics slightly, in that any number searched for would be treated as a bug #, which i think is undesirable */ 37402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollif (preg_match("/^\s*\[?(\d+)\]?\s*$/", $_GET["q"], $regs)) 38402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll{ 39402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll $_GET["q"] = $regs[1]; 40402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll $where = "WHERE `bugid` = $regs[1]"; 41402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll $et = "Bug #"; 42402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll} 43402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollelse if (preg_match("/(\S)/", $q, $regs) || sizeof($extra["where"]) + sizeof($extra["having"]) > 0) 44402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll{ 45402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll $match = "'1'"; 46402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll if (sizeof($regs) > 0) 47402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll { 48402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll $match = "MATCH(`message`) AGAINST('$q'" . (preg_match("/\".+\"/", $q) ? " IN BOOLEAN MODE" : "") . ")"; 49402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } 50402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll $where = "WHERE " . ($match ? $match : "1"); 51402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll $where .= (sizeof($extra["where"]) > 0 ? " AND " . join($extra["where"], " AND ") : ""); 52402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll $having = (sizeof($extra["having"]) > 0 ? " HAVING " . join($extra["having"], " AND ") : ""); 53402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll $ec = ", $match AS `relevance`"; 54402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll $order = "ORDER BY `relevance` DESC, `date` DESC"; 55402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll} 56402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll?> 57402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll<div id="midcolumn"> 58402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll<div class="homeitem3col"> 59402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll <h3>Search</h3> 60402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll <div id="searchdiv"> 61402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll <form action="" method="get"> 62402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll <input type="text" size="60" id="q" name="q"<?php print ($_GET["q"] ? " value=\"" . sanitize($_GET["q"], "text") . "\"" : ""); ?>/> 63402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll <input type="submit" value="Go!"/> 64402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll </form> 65402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll </div> 66402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll</div> 67402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll<?php 68402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 69402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll/* 1.1.2.x <- 1.1.0.2 = branch tag, likewise, 1.1.4.x <- 1.1.0.4 = branch tag, so dynamically rewrite a.b.c.d to a.b.0.c to find the branch tag */ 70402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll$branch = "IF(`revision` LIKE '%.%.%.%', (SELECT `tagname` FROM `tags` NATURAL JOIN `filetags` WHERE `fid` = `ofid` AND `revision` = CONCAT(SUBSTRING_INDEX(`orev`, '.', 2), '.0.', SUBSTRING_INDEX(SUBSTRING_INDEX(`orev`, '.', -2), '.', 1))), 'HEAD')"; 71402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll$sql = "SELECT SQL_CALC_FOUND_ROWS `cvsname`, `revision`, `date`, `author`, `message`, `keyword_subs`, `bugid`, `revision` AS `orev`, `fid` AS `ofid`, $branch AS `branch`$ec FROM `cvsfiles` NATURAL JOIN `commits` NATURAL LEFT JOIN `bugs` $where GROUP BY `fid`, `revision`, `bugid` $having $order LIMIT $offset, $pagesize"; 72402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll$result = wmysql_query($sql); 73402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 74402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll$count = wmysql_query("SELECT FOUND_ROWS()"); //mysql_num_rows() doesn't do what we want here 75402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll$row = mysql_fetch_row($count); 76402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll$rows = $row[0]; 77402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 78402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll$title = "<span>$rows results total</span>Showing results " . ($offset + 1) . "-" . ($offset + $pagesize > $rows ? $rows : $offset + $pagesize) . " for " . ($_GET["q"] == "" ? "last $days days of commits" : "$et" . sanitize($_GET["q"], "text")); 79402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll$title = ($rows == 0 ? "No results found for " . sanitize($_GET["q"], "text") . "" : $title); 80402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 81402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollprint "<div class=\"homeitem3col\">\n"; 82402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollprint "<h3>$title</h3>\n"; 83402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 84402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Molldopager($rows, $page, $pagesize); 85402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 86402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollprint "<ul>\n"; 87402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 88402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollwhile ($row = mysql_fetch_assoc($result)) 89402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll{ 90402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll $file = basename($row["cvsname"], ",v"); 91402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll $row["cvsname"] = preg_replace("#^/cvsroot/[^\/]+/(.+),v$#", "$1", $row["cvsname"]); 92402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll print "<li>\n"; 93402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll print "<div>{$row['date']}</div>"; 94402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll print ($row["bugid"] ? "[<a href=\"https://bugs.eclipse.org/bugs/show_bug.cgi?id={$row['bugid']}\">{$row['bugid']}</a>] " : ""); 95402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll print "<a href=\"" . cvsfile($row["cvsname"]) . "\"><abbr title=\"{$row['cvsname']}\">$file</abbr></a> ({$row['branch']} " . showrev($row['revision'], $row["cvsname"]) . ")"; 96402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll print "<ul>\n"; 97402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll print "<li><div>{$row['author']}</div>" . pretty_comment($row["message"], $q) . "</li>"; 98402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll print "</ul>\n"; 99402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll print "</li>\n"; 100402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll} 101402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollprint "</ul>\n"; 102402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 103402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Molldopager($rows, $page, $pagesize); 104402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 105402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollprint "</div>\n"; 106402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollprint "</div>\n"; 107402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollmysql_close($connect); 108402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll?> 109402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll<div id="rightcolumn"> 110402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll <div class="sideitem"> 111402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll <h6>Help</h6> 112402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll <p><a href="http://wiki.eclipse.org/index.php/Search_CVS">Consult the wiki</a>, or try these examples:</p> 113402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll <ul> 114402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll <li><a href="?q=%5B155286%5D">[155286]</a></li> 115402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll <li><a href="?q=98877+file%3A+ChangeAdapter">98877 file: ChangeAdapter</a></li> 116402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll <li><a href="?q=file%3A+org.eclipse.emf%2F+days%3A+7">file: org.eclipse.emf/ days: 7</a></li> 117402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll <li><a href="?q=days%3A200+author%3Amerks">days:200 author:merks</a></li> 118402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll <li><a href="?q=branch%3A+R2_1_+file%3A+.xml">branch: R2_1_ file: .xml</a></li> 119402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll <li><a href="?q=static+dynamic+project%3A+org.eclipse.emf">static dynamic project: org.eclipse.emf</a></li> 120402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll <li><a href="?q=%22package+protected%22">"package protected"</a></li> 121402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll <li><a href="?q=Neil+Skrypuch">Neil Skrypuch</a></li> 122402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll </ul> 123402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll <p>See also the complete <a href="http://wiki.eclipse.org/index.php/Search_CVS#Parameter_List">Parameter List</a>.</p> 124402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll </div> 125402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll</div> 126402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll<?php 127402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll$html = ob_get_contents(); 128402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollob_end_clean(); 129402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 130402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll$pageTitle = "Eclipse Tools - Search CVS"; 131402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll$pageKeywords = ""; 132402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll$pageAuthor = "Neil Skrypuch"; 133402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 134402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll$App->AddExtraHtmlHeader('<link rel="stylesheet" type="text/css" href="/emf/includes/searchcvs.css"/>' . "\n"); 135402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollif (!isset($_GET["totalonly"])) 136402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll{ 137402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll ob_start(); 138402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll $App->generatePage($theme, $Menu, $Nav, $pageAuthor, $pageKeywords, $pageTitle, $html); 139402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll $html = ob_get_contents(); 140402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll ob_end_clean(); 141402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll print preg_replace("/<body>/", "<body onload=\"document.getElementById('q').focus()\">", $html); 142402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll} 143402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollelse 144402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll{ 145402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll header("Content-Type: text/plain"); 146402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll print $rows; 147402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll} 148402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 149402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollfunction pretty_comment($str, $hl) 150402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll{ 151402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll $str = preg_replace("/\n/", "<br/>", $str); 152402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll $hl = words($hl); 153402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 154402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll for ($i = 0; $i < sizeof($hl); $i++) 155402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll { 156402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll $str = preg_replace("/\b(\Q$hl[$i]\E)\b([^=]|\Z)/i", "<span class=\"hl$i\">$1</span>$2", $str); 157402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } 158402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 159402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll $str = preg_replace("/^(\Q*** empty log message ***\E)$/", "<span class=\"empty\">$1</span>", $str); 160402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 161402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll return $str; 162402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll} 163402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 164402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollfunction cvsminus($rev) 165402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll{ 166402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll if (preg_match("/^1\.1$/", $rev)) // "1.10" == "1.1" returns true, curiously enough 167402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll { 168402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll return $rev; 169402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } 170402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll else 171402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll { 172402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll if (preg_match("/\.1$/", $rev)) 173402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll { 174402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll return preg_replace("/^(\d+\.\d+)\..+$/", "$1", $rev); 175402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } 176402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll else 177402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll { 178402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll return preg_replace("/^(.+\.)(\d+)$/e", "\"$1\" . ($2 - 1);", $rev); 179402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } 180402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } 181402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll} 182402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 183402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollfunction showrev($rev, $file) 184402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll{ 185402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll $link = "<a href=\"" . cvsfile($file) . "\">$rev</a>"; 186402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll if (!preg_match("/^1\.1$/", $rev)) // "1.10" == "1.1" returns true, curiously enough 187402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll { 188402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll $oldrev = cvsminus($rev); 189402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll $link = "<a href=\"" . cvsfile($file, $rev, $oldrev) . "\">$rev > $oldrev</a>"; 190402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } 191402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 192402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll return $link; 193402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll} 194402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 195402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollfunction cvsfile($file, $rev = "", $oldrev = "") 196402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll{ 197402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll if ($rev && $oldrev) 198402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll { 199402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll $ext = ".diff"; 200402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll $params = "r1=$oldrev&r2=$rev&"; 201402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } 202402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll $params .= (preg_match("/\.php$/", $file) && $ext != ".diff" ? "content-type=text/plain&" : ""); 203402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 204402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll if (preg_match("/^www/", $file)) 205402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll { 206402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll return "http://dev.eclipse.org/viewcvs/index.cgi/~checkout~/$file$ext?${params}cvsroot=Eclipse_Website"; 207402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } 208402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll else 209402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll { 210402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll return "http://dev.eclipse.org/viewcvs/indextools.cgi/~checkout~/$file$ext?$params"; 211402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } 212402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll} 213402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 214402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollfunction sanitize($str, $type = "url") 215402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll{ 216402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll $tmp = urlencode(urldecode((get_magic_quotes_gpc() ? stripslashes($str) : $str))); 217402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll return ($type == "url" ? $tmp : htmlspecialchars(urldecode($tmp))); 218402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll} 219402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 220402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollfunction pagelink($page, $selected, $linktext = "") 221402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll{ 222402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll $innertext = ($linktext ? $linktext : $page); 223402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll $text = (!$selected ? "<a href=\"?q=" . sanitize($_GET["q"]) . "&p=$page\">$innertext</a>" : $innertext); 224402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll return "<span" . ($selected ? " class=\"selected\"" : "") . ">$text</span>"; 225402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll} 226402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 227402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollfunction dopager($rows, $page, $pagesize) 228402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll{ 229402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll $startpage = ($page - 5 < 1 ? 1 : $page - 5); 230402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll $endpage = ($page + 5 > $rows/$pagesize ? ceil($rows/$pagesize) : $page + 5); 231402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 232402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll if ($rows > 0) 233402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll { 234402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll print "<div class=\"pager\">\n"; 235402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll print ($page > 1 ? pagelink($page - 1, false, "Previous") : ""); 236402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll for ($i = $startpage; $i <= $endpage; $i++) 237402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll { 238402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll print pagelink($i, $i == $page); 239402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } 240402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll print ($page < ceil($rows/$pagesize) ? pagelink($page + 1, false, "Next") : ""); 241402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll print "</div>\n"; 242402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } 243402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll} 244402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 245402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollfunction words($str) 246402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll{ 247402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll $str = stripslashes($str); 248402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll $list = array(); 249402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 250402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll preg_match_all("/\"([^\"]+)\"/", $str, $regs); 251402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll foreach ($regs[1] as $word) 252402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll { 253402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll $word = addslashes($word); 254402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll $list[] = $word; 255402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll $str = preg_replace("/\Q$word\E/", "", $str); 256402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } 257402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 258402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll $regs = null; 259402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll preg_match_all("/(\w+)/", $str, $regs); 260402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll foreach ($regs[1] as $word) 261402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll { 262402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll $list[] = addslashes($word); 263402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } 264402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 265402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll return $list; 266402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll} 267402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll?> 268