$latlon = 'lat=' . ($bbox[3] + $bbox[1]) * $tile_size / 2 . '&lon=' . ($bbox[2] + $bbox[0]) * $tile_size / 2; print <<<EOT <?xml version="1.0" encoding="UTF-8"?> <rss version="2.0"> <channel> \t<title>WhoDidIt Feed for BBOX [{$bbox_str}]</title> \t<description>WhoDidIt feed for BBOX [{$bbox_str}]</description> \t<link>{$frontend_url}?{$latlon}&zoom=12</link> \t<generator>WhoDidIt</generator> \t<ttl>60</ttl> EOT; date_default_timezone_set('UTC'); $count = 20; while ($row = $res->fetch_assoc()) { $susp = is_changeset_suspicious($row) ? '[!] ' : ''; if ($filter && !$susp) { continue; } $untitled = !$row['comment'] || strlen($row['comment']) <= 2 || substr($row['comment'], 0, 5) == 'BBOX:'; print "\t<item>\n"; print "\t\t<title>{$susp}User " . htmlspecialchars($row['user_name']) . " has uploaded " . ($untitled ? 'an untitled ' : 'a ') . "changeset" . ($untitled ? '' : ': "' . htmlspecialchars($row['comment']) . '"') . "</title>\n"; print "\t\t<link>http://openstreetmap.org/browse/changeset/{$row['changeset_id']}</link>\n"; $date = strtotime($row['change_time']); $date_str = date(DATE_RSS, $date); print "\t\t<pubDate>{$date_str}</pubDate>\n"; $desc = "User <a href=\"http://openstreetmap.org/user/" . rawurlencode($row['user_name']) . "\">" . htmlspecialchars($row['user_name']) . "</a> has uploaded <a href=\"http://openstreetmap.org/browse/changeset/{$row['changeset_id']}\">a changeset</a> in your watched area using " . htmlspecialchars($row['created_by']) . ", titled \"" . htmlspecialchars($row['comment']) . "\". <a href=\"{$frontend_url}?changeset={$row['changeset_id']}&show=1\">Show it on WhoDidIt</a> or <a href=\"https://overpass-api.de/achavi/?changeset={$row['changeset_id']}\">in Achavi</a>."; $desc .= '<br><br>Statistics:<ul>'; $desc .= '<li>Nodes: ' . $row['nodes_created'] . ' created, ' . $row['nodes_modified'] . ' modified, ' . $row['nodes_deleted'] . ' deleted</li>'; $desc .= '<li>Ways: ' . $row['ways_created'] . ' created, ' . $row['ways_modified'] . ' modified, ' . $row['ways_deleted'] . ' deleted</li>'; $desc .= '<li>Relations: ' . $row['relations_created'] . ' created, ' . $row['relations_modified'] . ' modified, ' . $row['relations_deleted'] . ' deleted</li></ul>';
# Returns json with complete data for specified changesets. Written by Ilya Zverev, licensed WTFPL. header('Content-type: application/json; charset=utf-8'); require 'db.inc.php'; $latest = isset($_REQUEST['latest']) && $_REQUEST['latest'] == '1'; $id = isset($_REQUEST['id']) && preg_match('/^[\\d,]+$/', $_REQUEST['id']) ? $_REQUEST['id'] : 0; if (!$latest && !$id) { print '{ "error" : "id required"}'; exit; } $db = connect(); if ($latest) { $where = '1=1 order by change_time desc limit 1'; } elseif (strpos($id, ',') === FALSE) { $where = 'changeset_id = ' . $_REQUEST['id']; } else { $where = 'changeset_id in (' . $_REQUEST['id'] . ') order by change_time desc'; } $res = $db->query('select * from wdi_changesets where ' . $where); print '['; $first = true; while ($row = $res->fetch_assoc()) { if ($first) { $first = false; } else { print ",\n"; } $row['suspicious'] = is_changeset_suspicious($row) ? 1 : 0; print json_encode($row); } print ']';