Changeset 19 for minimanager/ahstats.php
- Timestamp:
- Aug 13, 2007, 9:05:34 PM (17 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
minimanager/ahstats.php
r5 r19 17 17 //######################################################################################################################## 18 18 function browse_auctions() { 19 global $lang_auctionhouse, $lang_global, $output, $mangos_db, $realm_id, $itemperpage, $item_datasite, $server, $user_lvl, $user_id; 19 global $lang_auctionhouse, $lang_global, $lang_item, $output, $mangos_db, $realm_id, 20 $itemperpage, $item_datasite, $server, $user_lvl, $user_id; 20 21 21 22 $red = "#DD5047"; … … 24 25 $hiddencols = array(1,8,9,10); 25 26 26 $ mysql = new MySQL;27 $ mysql->connect($mangos_db[$realm_id]['addr'], $mangos_db[$realm_id]['user'], $mangos_db[$realm_id]['pass'], $mangos_db[$realm_id]['name']);28 29 $start = (isset($_GET['start'])) ? $ mysql->quote_smart($_GET['start']) : 0;30 $order_by = (isset($_GET['order_by'])) ? $ mysql->quote_smart($_GET['order_by']) : "time";31 $dir = (isset($_GET['dir'])) ? $ mysql->quote_smart($_GET['dir']) : 1;27 $sql = new SQL; 28 $sql->connect($mangos_db[$realm_id]['addr'], $mangos_db[$realm_id]['user'], $mangos_db[$realm_id]['pass'], $mangos_db[$realm_id]['name']); 29 30 $start = (isset($_GET['start'])) ? $sql->quote_smart($_GET['start']) : 0; 31 $order_by = (isset($_GET['order_by'])) ? $sql->quote_smart($_GET['order_by']) : "time"; 32 $dir = (isset($_GET['dir'])) ? $sql->quote_smart($_GET['dir']) : 1; 32 33 $order_dir = ($dir) ? "ASC" : "DESC"; 33 34 $dir = ($dir) ? 0 : 1; 34 35 35 $query_1 = $ mysql->query("SELECT count(*) FROM auctionhouse");36 $all_record = $ mysql->result($query_1,0);36 $query_1 = $sql->query("SELECT count(*) FROM auctionhouse"); 37 $all_record = $sql->result($query_1,0); 37 38 38 39 if( !$user_lvl && !$server[$realm_id]['both_factions']){ 39 $result = $ mysql->query("SELECT race FROM `character` WHERE account = '$user_id' AND totaltime = (SELECT MAX(totaltime) FROM `character` WHERE account = '$user_id') LIMIT 1");40 if ($ mysql->num_rows($result)){41 $order_side = (in_array($ mysql->result($result, 0, 'race'),array(2,5,6,8,10))) ?40 $result = $sql->query("SELECT race FROM `character` WHERE account = '$user_id' AND totaltime = (SELECT MAX(totaltime) FROM `character` WHERE account = '$user_id') LIMIT 1"); 41 if ($sql->num_rows($result)){ 42 $order_side = (in_array($sql->result($result, 0, 'race'),array(2,5,6,8,10))) ? 42 43 " AND `character`.`race` IN (2,5,6,8,10) " : " AND `character`.`race` IN (1,3,4,7,11) "; 43 44 } else $order_side = ""; 44 45 } else $order_side = ""; 45 46 46 $result = $ mysql->query("SELECT `character`.`name` AS `seller`, `auctionhouse`.`item_template` AS `itemid`, `item_template`.`name` AS `itemname`, `auctionhouse`.`buyoutprice` AS `buyout`,47 $result = $sql->query("SELECT `character`.`name` AS `seller`, `auctionhouse`.`item_template` AS `itemid`, `item_template`.`name` AS `itemname`, `auctionhouse`.`buyoutprice` AS `buyout`, 47 48 `auctionhouse`.`time`-unix_timestamp(), `c2`.`name` AS `encherisseur`, `auctionhouse`.`lastbid`, `auctionhouse`.`startbid`, SUBSTRING_INDEX(SUBSTRING_INDEX(`item_instance`.`data`, ' ',15), ' ',-1) AS qty, `character`.`race` AS seller_race, `c2`.`race` AS buyer_race 48 49 FROM `character`, `item_instance`,`item_template`, `auctionhouse` LEFT JOIN `character` c2 ON `c2`.`guid`=`auctionhouse`.`buyguid` 49 50 WHERE `auctionhouse`.`itemowner`=`character`.`guid` AND `auctionhouse`.`item_template`=`item_template`.`entry` AND `auctionhouse`.`itemguid`=`item_instance`.`guid` 50 51 $order_side ORDER BY `auctionhouse`.`$order_by` $order_dir LIMIT $start, $itemperpage"); 51 $this_page = $ mysql->num_rows($result);52 $this_page = $sql->num_rows($result); 52 53 53 54 $output .="<center><table class=\"top_hidden\"> 54 <tr><td width=\"80%\">"; 55 /* 56 <table class=\"hidden\"> 57 <tr><td> 58 <form action=\"ahstats.php\" method=\"get\" name=\"form\"> 55 <tr><td width=\"80%\"> 56 <form action=\"ahstats.php\" method=\"get\" name=\"form\"> 59 57 <input type=\"hidden\" name=\"action\" value=\"search_auctions\" /> 60 58 <input type=\"hidden\" name=\"error\" value=\"2\" /> 61 <input type=\"text\" size=\"30\" name=\"search_value\" /> 62 <select name=\"search_by\"> 63 <option value=\"item\">{$lang_auctionhouse['item']}</option> 64 </select></form></td><td>"; 59 <table class=\"hidden\"> 60 <tr><td> 61 <td><input type=\"text\" size=\"25\" name=\"search_value\" /></td> 62 63 <td><select name=\"search_by\"> 64 <option value=\"item_name\">{$lang_auctionhouse['item_name']}</option> 65 <option value=\"item_id\">{$lang_auctionhouse['item_id']}</option> 66 <option value=\"seller_name\">{$lang_auctionhouse['seller_name']}</option> 67 <option value=\"buyer_name\">{$lang_auctionhouse['buyer_name']}</option> 68 </select></td> 69 70 <td><select name=\"search_class\"> 71 <option value=\"-1\">{$lang_auctionhouse['all']}</option> 72 <option value=\"0\">{$lang_item['consumable']}</option> 73 <option value=\"1\">{$lang_item['bag']}</option> 74 <option value=\"2\">{$lang_item['weapon']}</option> 75 <option value=\"4\">{$lang_item['armor']}</option> 76 <option value=\"5\">{$lang_item['reagent']}</option> 77 <option value=\"7\">{$lang_item['trade_goods']}</option> 78 <option value=\"9\">{$lang_item['recipe']}</option> 79 <option value=\"11\">{$lang_item['quiver']}</option> 80 <option value=\"14\">{$lang_item['permanent']}</option> 81 <option value=\"15\">{$lang_item['misc_short']}</option> 82 </select></td> 83 84 <td><select name=\"search_quality\"> 85 <option value=\"-1\">{$lang_auctionhouse['all']}</option> 86 <option value=\"0\">{$lang_item['poor']}</option> 87 <option value=\"1\">{$lang_item['common']}</option> 88 <option value=\"2\">{$lang_item['uncommon']}</option> 89 <option value=\"3\">{$lang_item['rare']}</option> 90 <option value=\"4\">{$lang_item['epic']}</option> 91 <option value=\"5\">{$lang_item['legendary']}</option> 92 <option value=\"6\">{$lang_item['artifact']}</option> 93 </select></td> 94 <td>"; 65 95 makebutton($lang_global['search'], "javascript:do_submit()",80); 66 $output .= "</td></tr></table> 67 */ 68 69 $output .= "<td width=\"20%\" align=\"right\">"; 96 $output .= "</td></tr></table></form> 97 <td width=\"20%\" align=\"right\">"; 70 98 $output .= generate_pagination("ahstats.php?action=browse_auctions&order_by=$order_by&dir=".!$dir, $all_record, $itemperpage, $start); 71 99 $output .= "</td></tr></table> … … 73 101 <table class=\"lined\"> 74 102 <tr> 75 <t d width=\"10%\" class=\"head\"><a href=\"ahstats.php?order_by=itemowner&start=$start&dir=$dir\" class=\"head_link\">{$lang_auctionhouse['seller']}</a></td>76 <t d width=\"20%\" class=\"head\"><a href=\"ahstats.php?order_by=item_template&start=$start&dir=$dir\" class=\"head_link\">{$lang_auctionhouse['item']}</a></td>77 <t d width=\"15%\" class=\"head\"><a href=\"ahstats.php?order_by=buyoutprice&start=$start&dir=$dir\" class=\"head_link\">{$lang_auctionhouse['buyoutprice']}</a></td>78 <t d width=\"15%\" class=\"head\"><a href=\"ahstats.php?order_by=time&start=$start&dir=$dir\" class=\"head_link\">{$lang_auctionhouse['timeleft']}</a></td>79 <t d width=\"10%\" class=\"head\"><a href=\"ahstats.php?order_by=buyguid&start=$start&dir=$dir\" class=\"head_link\">{$lang_auctionhouse['buyer']}</a></td>80 <t d width=\"15%\" class=\"head\"><a href=\"ahstats.php?order_by=lastbid&start=$start&dir=$dir\" class=\"head_link\">{$lang_auctionhouse['lastbid']}</a></td>81 <t d width=\"15%\" class=\"head\"><a href=\"ahstats.php?order_by=startbid&start=$start&dir=$dir\" class=\"head_link\">{$lang_auctionhouse['firstbid']}</a></td>103 <th width=\"10%\"><a href=\"ahstats.php?order_by=itemowner&start=$start&dir=$dir\">".($order_by=='itemowner' ? "<img src=\"img/arr_".($dir ? "up" : "dw").".gif\" /> " : "")."{$lang_auctionhouse['seller']}</a></th> 104 <th width=\"20%\"><a href=\"ahstats.php?order_by=item_template&start=$start&dir=$dir\">".($order_by=='item_template' ? "<img src=\"img/arr_".($dir ? "up" : "dw").".gif\" /> " : "")."{$lang_auctionhouse['item']}</a></th> 105 <th width=\"15%\"><a href=\"ahstats.php?order_by=buyoutprice&start=$start&dir=$dir\">".($order_by=='buyoutprice' ? "<img src=\"img/arr_".($dir ? "up" : "dw").".gif\" /> " : "")."{$lang_auctionhouse['buyoutprice']}</a></th> 106 <th width=\"15%\"><a href=\"ahstats.php?order_by=time&start=$start&dir=$dir\">".($order_by=='time' ? "<img src=\"img/arr_".($dir ? "up" : "dw").".gif\" /> " : "")."{$lang_auctionhouse['timeleft']}</a></th> 107 <th width=\"10%\"><a href=\"ahstats.php?order_by=buyguid&start=$start&dir=$dir\">".($order_by=='buyguid' ? "<img src=\"img/arr_".($dir ? "up" : "dw").".gif\" /> " : "")."{$lang_auctionhouse['buyer']}</a></th> 108 <th width=\"15%\"><a href=\"ahstats.php?order_by=lastbid&start=$start&dir=$dir\">".($order_by=='lastbid' ? "<img src=\"img/arr_".($dir ? "up" : "dw").".gif\" /> " : "")."{$lang_auctionhouse['lastbid']}</a></th> 109 <th width=\"15%\"><a href=\"ahstats.php?order_by=startbid&start=$start&dir=$dir\">".($order_by=='startbid' ? "<img src=\"img/arr_".($dir ? "up" : "dw").".gif\" /> " : "")."{$lang_auctionhouse['firstbid']}</a></th> 82 110 </tr>"; 83 111 84 while ($rows =$mysql->fetch_row($result)) {112 while ($rows = $sql->fetch_row($result)) { 85 113 $output .= "<tr>"; 86 114 foreach($rows as $row => $value) { … … 113 141 $output .= "</tr>"; 114 142 } 115 $ mysql->close();143 $sql->close(); 116 144 117 145 $output .= "<tr><td colspan=\"7\" class=\"hidden\" align=\"right\">{$lang_auctionhouse['total_auctions']} : $all_record</td></tr> … … 124 152 //######################################################################################################################## 125 153 function search_auctions() { 126 //TODO... 154 global $lang_auctionhouse, $lang_global, $lang_item, $output, $mangos_db, $realm_id, 155 $itemperpage, $item_datasite, $server, $user_lvl, $user_id, $sql_search_limit; 156 157 $red = "#DD5047"; 158 $blue = "#0097CD"; 159 $sidecolor = array(1 => $blue,2 => $red,3 => $blue,4 => $blue,5 => $red,6 => $red,7 => $blue,8 => $red,10 => $red); 160 $hiddencols = array(1,8,9,10); 161 162 $sql = new SQL; 163 $sql->connect($mangos_db[$realm_id]['addr'], $mangos_db[$realm_id]['user'], $mangos_db[$realm_id]['pass'], $mangos_db[$realm_id]['name']); 164 165 $order_by = (isset($_GET['order_by'])) ? $sql->quote_smart($_GET['order_by']) : "time"; 166 $dir = (isset($_GET['dir'])) ? $sql->quote_smart($_GET['dir']) : 1; 167 $order_dir = ($dir) ? "ASC" : "DESC"; 168 $dir = ($dir) ? 0 : 1; 169 170 if( ($_GET['search_class'] == "-1")&&($_GET['search_quality'] == "-1") 171 &&(!isset($_GET['search_value']))&&(!isset($_GET['search_by'])) ) 172 redirect("ahstats.php?error=1"); 173 174 $search_class = $sql->quote_smart($_GET['search_class']); 175 $search_quality = $sql->quote_smart($_GET['search_quality']); 176 $search_value = $sql->quote_smart($_GET['search_value']); 177 $search_by = $sql->quote_smart($_GET['search_by']); 178 179 if( !$user_lvl && !$server[$realm_id]['both_factions']){ 180 $result = $sql->query("SELECT race FROM `character` WHERE account = '$user_id' AND totaltime = (SELECT MAX(totaltime) FROM `character` WHERE account = '$user_id') LIMIT 1"); 181 if ($sql->num_rows($result)){ 182 $order_side = (in_array($sql->result($result, 0, 'race'),array(2,5,6,8,10))) ? 183 " AND `character`.`race` IN (2,5,6,8,10) " : " AND `character`.`race` IN (1,3,4,7,11) "; 184 } else $order_side = ""; 185 } else $order_side = ""; 186 187 switch ($search_by) { 188 case "item_name": 189 190 if(( ($search_class >= 0) || ($search_quality >= 0))&&(!isset($search_value))){ 191 if ($search_class >= 0) $search_filter = " AND item_template.class = '$search_class'"; 192 if ($search_quality >= 0) $search_filter = " AND item_template.Quality = '$search_quality'"; 193 } 194 else 195 { 196 $item_prefix = ""; 197 if ($search_class >= 0) $item_prefix .= "AND class = '$search_class' "; 198 if ($search_quality >= 0) $item_prefix .= "AND Quality = '$search_quality' "; 199 200 $result = $sql->query("SELECT entry FROM item_template WHERE name LIKE '%$search_value%' $item_prefix"); 201 $search_filter = "AND auctionhouse.item_template IN(0"; 202 while ($item = $sql->fetch_row($result)) $search_filter .= ", $item[0]"; 203 $search_filter .= ")"; 204 } 205 break; 206 207 case "item_id": 208 $search_filter = "AND auctionhouse.item_template = '$search_value'"; 209 break; 210 211 case "seller_name": 212 $result = $sql->query("SELECT guid FROM `character` WHERE name LIKE '%$search_value%'"); 213 $search_filter = "AND auctionhouse.itemowner IN(0"; 214 while ($char = $sql->fetch_row($result)) $search_filter .= ", $char[0]"; 215 $search_filter .= ")"; 216 break; 217 case "buyer_name": 218 $result = $sql->query("SELECT guid FROM `character` WHERE name LIKE '%$search_value%'"); 219 $search_filter = "AND auctionhouse.buyguid IN(-1"; 220 while ($char = $sql->fetch_row($result)) $search_filter .= ", $char[0]"; 221 $search_filter .= ")"; 222 break; 223 default: 224 redirect("ahstats.php?error=1"); 225 } 226 227 $result = $sql->query("SELECT `character`.`name` AS `seller`, `auctionhouse`.`item_template` AS `itemid`, `item_template`.`name` AS `itemname`, `auctionhouse`.`buyoutprice` AS `buyout`, 228 `auctionhouse`.`time`-unix_timestamp(), `c2`.`name` AS `encherisseur`, `auctionhouse`.`lastbid`, `auctionhouse`.`startbid`, SUBSTRING_INDEX(SUBSTRING_INDEX(`item_instance`.`data`, ' ',15), ' ',-1) AS qty, `character`.`race` AS seller_race, `c2`.`race` AS buyer_race 229 FROM `character`, `item_instance`,`item_template`, `auctionhouse` LEFT JOIN `character` c2 ON `c2`.`guid`=`auctionhouse`.`buyguid` 230 WHERE `auctionhouse`.`itemowner`=`character`.`guid` AND `auctionhouse`.`item_template`=`item_template`.`entry` AND `auctionhouse`.`itemguid`=`item_instance`.`guid` $search_filter 231 $order_side ORDER BY `auctionhouse`.`$order_by` $order_dir LIMIT $sql_search_limit"); 232 $tot_found = $sql->num_rows($result); 233 234 $output .="<center> 235 <form action=\"ahstats.php\" method=\"get\" name=\"form\"> 236 <input type=\"hidden\" name=\"action\" value=\"search_auctions\" /> 237 <input type=\"hidden\" name=\"error\" value=\"2\" /> 238 <table class=\"top_hidden\"> 239 <tr><td> 240 <input type=\"text\" size=\"30\" name=\"search_value\" /> 241 242 <select name=\"search_by\"> 243 <option value=\"item_name\">{$lang_auctionhouse['item_name']}</option> 244 <option value=\"item_id\">{$lang_auctionhouse['item_id']}</option> 245 <option value=\"seller_name\">{$lang_auctionhouse['seller_name']}</option> 246 <option value=\"buyer_name\">{$lang_auctionhouse['buyer_name']}</option> 247 </select></form> 248 249 <select name=\"search_class\"> 250 <option value=\"-1\">{$lang_auctionhouse['all']}</option> 251 <option value=\"0\">{$lang_item['consumable']}</option> 252 <option value=\"1\">{$lang_item['bag']}</option> 253 <option value=\"2\">{$lang_item['weapon']}</option> 254 <option value=\"4\">{$lang_item['armor']}</option> 255 <option value=\"5\">{$lang_item['reagent']}</option> 256 <option value=\"7\">{$lang_item['trade_goods']}</option> 257 <option value=\"9\">{$lang_item['recipe']}</option> 258 <option value=\"11\">{$lang_item['quiver']}</option> 259 <option value=\"14\">{$lang_item['permanent']}</option> 260 <option value=\"15\">{$lang_item['misc_short']}</option> 261 </select> 262 263 <select name=\"search_quality\"> 264 <option value=\"-1\">{$lang_auctionhouse['all']}</option> 265 <option value=\"0\">{$lang_item['poor']}</option> 266 <option value=\"1\">{$lang_item['common']}</option> 267 <option value=\"2\">{$lang_item['uncommon']}</option> 268 <option value=\"3\">{$lang_item['rare']}</option> 269 <option value=\"4\">{$lang_item['epic']}</option> 270 <option value=\"5\">{$lang_item['legendary']}</option> 271 <option value=\"6\">{$lang_item['artifact']}</option> 272 </select> 273 </td><td>"; 274 makebutton($lang_global['search'], "javascript:do_submit()",80); 275 makebutton($lang_global['back'], "javascript:window.history.back()",80); 276 $output .= "</td> 277 </tr></table></form> 278 279 <table class=\"lined\"> 280 <tr> 281 <th width=\"10%\"><a href=\"ahstats.php?action=search_auctions&error=2&order_by=itemowner&search_by=$search_by&search_value=$search_value&search_quality=$search_quality&search_class=$search_class&dir=$dir\">".($order_by=='itemowner' ? "<img src=\"img/arr_".($dir ? "up" : "dw").".gif\" /> " : "")."{$lang_auctionhouse['seller']}</a></th> 282 <th width=\"20%\"><a href=\"ahstats.php?action=search_auctions&error=2&order_by=item_template&search_by=$search_by&search_value=$search_value&search_quality=$search_quality&search_class=$search_class&dir=$dir\">".($order_by=='item_template' ? "<img src=\"img/arr_".($dir ? "up" : "dw").".gif\" /> " : "")."{$lang_auctionhouse['item']}</a></th> 283 <th width=\"15%\"><a href=\"ahstats.php?action=search_auctions&error=2&order_by=buyoutprice&search_by=$search_by&search_value=$search_value&search_quality=$search_quality&search_class=$search_class&dir=$dir\">".($order_by=='buyoutprice' ? "<img src=\"img/arr_".($dir ? "up" : "dw").".gif\" /> " : "")."{$lang_auctionhouse['buyoutprice']}</a></th> 284 <th width=\"15%\"><a href=\"ahstats.php?action=search_auctions&error=2&order_by=time&search_by=$search_by&search_value=$search_value&search_quality=$search_quality&search_class=$search_class&dir=$dir\">".($order_by=='time' ? "<img src=\"img/arr_".($dir ? "up" : "dw").".gif\" /> " : "")."{$lang_auctionhouse['timeleft']}</a></th> 285 <th width=\"10%\"><a href=\"ahstats.php?action=search_auctions&error=2&order_by=buyguid&search_by=$search_by&search_value=$search_value&search_quality=$search_quality&search_class=$search_class&dir=$dir\">".($order_by=='buyguid' ? "<img src=\"img/arr_".($dir ? "up" : "dw").".gif\" /> " : "")."{$lang_auctionhouse['buyer']}</a></th> 286 <th width=\"15%\"><a href=\"ahstats.php?action=search_auctions&error=2&order_by=lastbid&search_by=$search_by&search_value=$search_value&search_quality=$search_quality&search_class=$search_class&dir=$dir\">".($order_by=='lastbid' ? "<img src=\"img/arr_".($dir ? "up" : "dw").".gif\" /> " : "")."{$lang_auctionhouse['lastbid']}</a></th> 287 <th width=\"15%\"><a href=\"ahstats.php?action=search_auctions&error=2&order_by=startbid&search_by=$search_by&search_value=$search_value&search_quality=$search_quality&search_class=$search_class&dir=$dir\">".($order_by=='startbid' ? "<img src=\"img/arr_".($dir ? "up" : "dw").".gif\" /> " : "")."{$lang_auctionhouse['firstbid']}</a></th> 288 </tr>"; 289 290 while ($rows = $sql->fetch_row($result)) { 291 $output .= "<tr>"; 292 foreach($rows as $row => $value) { 293 switch ($row) { 294 case 4: 295 $value = ($value >= 0)? (floor($value / 86400).$lang_auctionhouse['dayshortcut']." ". floor(($value % 86400)/3600).$lang_auctionhouse['hourshortcut']." ".floor((($value % 86400)%3600)/60).$lang_auctionhouse['mnshortcut']) : $lang_auctionhouse['auction_over']; 296 break; 297 case 5: 298 $value = "<b>".((!empty($rows[10])) ? "<font color=".$sidecolor[$rows[10]].">$value</font>" : "N/A")."</b>"; 299 break; 300 case 7: 301 case 6: 302 case 3: 303 $g = floor($value/10000); 304 $value -= $g*10000; 305 $s = floor($value/100); 306 $value -= $s*100; 307 $c = $value; 308 $value = $g."<img src=\"./img/gold.gif\" /> ".$s."<img src=\"./img/silver.gif\" /> ".$c."<img src=\"./img/copper.gif\" /> "; 309 break; 310 case 2: 311 $value = "<a href=\"$item_datasite$rows[1]\" target=\"_blank\" onmouseover=\"toolTip('".addslashes(get_item_tooltip($rows[1]))."','item_tooltip')\" onmouseout=\"toolTip()\"><img src=\"".get_icon($rows[1])."\" class=\"icon_border\" alt=\"$value\"><br/>$value".(($rows[8]>1) ? " (x$rows[8])" : "")."</img></a>"; 312 break; 313 case 0: 314 $value = "<b>".((!empty($rows[9])) ? "<font color=".$sidecolor[$rows[9]].">$value</font>" : "N/A")."</b>"; 315 break; 316 } 317 if (!in_array($row,$hiddencols)) $output .= "<td><center>".$value."</center></td>"; 318 } 319 $output .= "</tr>"; 320 } 321 $sql->close(); 322 323 $output .= "<tr><td colspan=\"7\" class=\"hidden\" align=\"right\">{$lang_auctionhouse['tot_found']} : $tot_found {$lang_global['limit']} : $sql_search_limit</td></tr> 324 </table></center>"; 127 325 } 128 326
Note:
See TracChangeset
for help on using the changeset viewer.