Merge branch 'master' into openstreetbugs

Conflicts:
	app/views/site/index.html.erb
This commit is contained in:
Tom Hughes 2010-10-17 11:02:11 +01:00
commit a1cb0f04d4
133 changed files with 2435 additions and 3040 deletions

View file

@ -1,8 +0,0 @@
class ChangesetTagController < ApplicationController
layout 'site'
def search
@tags = ChangesetTag.find(:all, :limit => 11, :conditions => ["match(v) against (?)", params[:query][:query].to_s] )
end
end

View file

@ -52,9 +52,17 @@ class OauthController < ApplicationController
if any_auth
@token.authorize!(@user)
redirect_url = params[:oauth_callback] || @token.client_application.callback_url
if redirect_url
redirect_to "#{redirect_url}?oauth_token=#{@token.token}"
if @token.oauth10?
redirect_url = params[:oauth_callback] || @token.client_application.callback_url
else
redirect_url = @token.oob? ? @token.client_application.callback_url : @token.callback_url
end
if redirect_url and not redirect_url.empty?
if @token.oauth10?
redirect_to "#{redirect_url}?oauth_token=#{@token.token}"
else
redirect_to "#{redirect_url}?oauth_token=#{@token.token}&oauth_verifier=#{@token.verifier}"
end
else
render :action => "authorize_success"
end

View file

@ -1,3 +0,0 @@
class OldRelationTagController < ApplicationController
end

View file

@ -1,2 +0,0 @@
class OldWayTagController < ApplicationController
end

View file

@ -1,9 +0,0 @@
class RelationTagController < ApplicationController
layout 'site'
def search
@tags = RelationTag.find(:all, :limit => 11, :conditions => ["match(v) against (?)", params[:query][:query].to_s] )
end
end

View file

@ -4,22 +4,22 @@ class TraceController < ApplicationController
before_filter :authorize_web
before_filter :set_locale
before_filter :require_user, :only => [:mine, :create, :edit, :delete]
before_filter :authorize, :only => [:api_details, :api_data, :api_create]
before_filter :check_database_readable, :except => [:api_details, :api_data, :api_create]
before_filter :check_database_writable, :only => [:create, :edit, :delete]
before_filter :check_api_readable, :only => [:api_details, :api_data]
before_filter :check_api_writable, :only => [:api_create]
before_filter :require_allow_read_gpx, :only => [:api_details, :api_data]
before_filter :require_allow_write_gpx, :only => [:api_create]
before_filter :authorize, :only => [:api_create, :api_read, :api_update, :api_delete, :api_data]
before_filter :check_database_readable, :except => [:api_read, :api_data]
before_filter :check_database_writable, :only => [:create, :edit, :delete, :api_create, :api_update, :api_delete]
before_filter :check_api_readable, :only => [:api_read, :api_data]
before_filter :check_api_writable, :only => [:api_create, :api_update, :api_delete]
before_filter :require_allow_read_gpx, :only => [:api_read, :api_data]
before_filter :require_allow_write_gpx, :only => [:api_create, :api_update, :api_delete]
before_filter :offline_warning, :only => [:mine, :view]
before_filter :offline_redirect, :only => [:create, :edit, :delete, :data, :api_data, :api_create]
around_filter :api_call_handle_error, :only => [:api_details, :api_data, :api_create]
before_filter :offline_redirect, :only => [:create, :edit, :delete, :data, :api_create, :api_delete, :api_data]
around_filter :api_call_handle_error, :only => [:api_create, :api_read, :api_update, :api_delete, :api_data]
caches_action :list, :unless => :logged_in?, :layout => false
caches_action :view, :layout => false
caches_action :georss, :layout => true
cache_sweeper :trace_sweeper, :only => [:create, :edit, :delete, :api_create], :unless => STATUS == :database_offline
cache_sweeper :tracetag_sweeper, :only => [:create, :edit, :delete, :api_create], :unless => STATUS == :database_offline
cache_sweeper :trace_sweeper, :only => [:create, :edit, :delete, :api_create, :api_update, :api_delete], :unless => STATUS == :database_offline
cache_sweeper :tracetag_sweeper, :only => [:create, :edit, :delete, :api_create, :api_update, :api_delete], :unless => STATUS == :database_offline
# Counts and selects pages of GPX traces for various criteria (by user, tags, public etc.).
# target_user - if set, specifies the user to fetch traces for. if not set will fetch all traces
@ -280,16 +280,48 @@ class TraceController < ApplicationController
render :nothing => true, :status => :not_found
end
def api_details
trace = Trace.find(params[:id])
def api_read
trace = Trace.find(params[:id], :conditions => { :visible => true })
if trace.public? or trace.user == @user
render :text => trace.to_xml.to_s, :content_type => "text/xml"
else
render :nothing => true, :status => :forbidden
end
rescue ActiveRecord::RecordNotFound
render :nothing => true, :status => :not_found
end
def api_update
trace = Trace.find(params[:id], :conditions => { :visible => true })
if trace.user == @user
new_trace = Trace.from_xml(request.raw_post)
unless new_trace and new_trace.id == trace.id
raise OSM::APIBadUserInput.new("The id in the url (#{trace.id}) is not the same as provided in the xml (#{new_trace.id})")
end
trace.description = new_trace.description
trace.tags = new_trace.tags
trace.visibility = new_trace.visibility
trace.save!
render :nothing => true, :status => :ok
else
render :nothing => true, :status => :forbidden
end
end
def api_delete
trace = Trace.find(params[:id], :conditions => { :visible => true })
if trace.user == @user
trace.visible = false
trace.save!
render :nothing => true, :status => :ok
else
render :nothing => true, :status => :forbidden
end
end
def api_data
@ -304,8 +336,6 @@ class TraceController < ApplicationController
else
render :nothing => true, :status => :forbidden
end
rescue ActiveRecord::RecordNotFound
render :nothing => true, :status => :not_found
end
def api_create

View file

@ -32,7 +32,12 @@ class UserController < ApplicationController
if @user
if @user.invalid?
render :action => :new
if @user.new_record?
render :action => :new
else
flash[:errors] = @user.errors
redirect_to :action => :account, :display_name => @user.display_name
end
elsif @user.terms_agreed?
redirect_to :action => :account, :display_name => @user.display_name
end
@ -70,7 +75,7 @@ class UserController < ApplicationController
@user.terms_agreed = Time.now.getutc
if @user.save
flash[:notice] = t 'user.new.flash create success message'
flash[:notice] = t 'user.new.flash create success message', :email => @user.email
Notifier.deliver_signup_confirm(@user, @user.tokens.create(:referer => params[:referer]))
redirect_to :action => 'login'
else
@ -123,7 +128,7 @@ class UserController < ApplicationController
else
if flash[:errors]
flash[:errors].each do |attr,msg|
attr = "new_email" if attr == "email"
attr = "new_email" if attr == "email" and !@user.new_email.nil?
@user.errors.add(attr,msg)
end
end
@ -212,15 +217,15 @@ class UserController < ApplicationController
else
redirect_to :controller => 'site', :action => 'index'
end
elsif User.authenticate(:username => email_or_display_name, :password => pass, :pending => true)
flash.now[:error] = t 'user.login.account not active'
elsif user = User.authenticate(:username => email_or_display_name, :password => pass, :pending => true)
flash.now[:error] = t 'user.login.account not active', :reconfirm => url_for(:action => 'confirm_resend', :display_name => user.display_name)
elsif User.authenticate(:username => email_or_display_name, :password => pass, :suspended => true)
webmaster = link_to t('user.login.webmaster'), "mailto:webmaster@openstreetmap.org"
flash.now[:error] = t 'user.login.account suspended', :webmaster => webmaster
else
flash.now[:error] = t 'user.login.auth failure'
end
else
elsif flash[:notice].nil?
flash.now[:notice] = t 'user.login.notice'
end
end
@ -247,30 +252,57 @@ class UserController < ApplicationController
end
def confirm
if params[:confirm_action]
token = UserToken.find_by_token(params[:confirm_string])
if token and !token.user.active?
@user = token.user
@user.status = "active"
@user.email_valid = true
@user.save!
referer = token.referer
token.destroy
flash[:notice] = t 'user.confirm.success'
session[:user] = @user.id
unless referer.nil?
redirect_to referer
if request.post?
if token = UserToken.find_by_token(params[:confirm_string])
if token.user.active?
flash[:error] = t('user.confirm.already active')
redirect_to :action => 'login'
else
redirect_to :action => 'account', :display_name => @user.display_name
user = token.user
user.status = "active"
user.email_valid = true
user.save!
referer = token.referer
token.destroy
session[:user] = user.id
unless referer.nil?
flash[:notice] = t('user.confirm.success')
redirect_to referer
else
flash[:notice] = t('user.confirm.success') + "<br /><br />" + t('user.confirm.before you start')
redirect_to :action => 'account', :display_name => user.display_name
end
end
else
flash.now[:error] = t 'user.confirm.failure'
user = User.find_by_display_name(params[:display_name])
if user and user.active?
flash[:error] = t('user.confirm.already active')
elsif user
flash[:error] = t('user.confirm.unknown token') + t('user.confirm.reconfirm', :reconfirm => url_for(:action => 'confirm_resend', :display_name => params[:display_name]))
else
flash[:error] = t('user.confirm.unknown token')
end
redirect_to :action => 'login'
end
end
end
def confirm_resend
if user = User.find_by_display_name(params[:display_name])
Notifier.deliver_signup_confirm(user, user.tokens.create)
flash[:notice] = t 'user.confirm_resend.success', :email => user.email
else
flash[:notice] = t 'user.confirm_resend.failure', :name => params[:display_name]
end
redirect_to :action => 'login'
end
def confirm_email
if params[:confirm_action]
if request.post?
token = UserToken.find_by_token(params[:confirm_string])
if token and token.user.new_email?
@user = token.user
@ -286,7 +318,8 @@ class UserController < ApplicationController
session[:user] = @user.id
redirect_to :action => 'account', :display_name => @user.display_name
else
flash.now[:error] = t 'user.confirm_email.failure'
flash[:error] = t 'user.confirm_email.failure'
redirect_to :action => 'account', :display_name => @user.display_name
end
end
end

View file

@ -1,9 +0,0 @@
class WayTagController < ApplicationController
layout 'site'
def search
@tags = WayTag.find(:all, :limit => 11, :conditions => ["match(v) against (?)", params[:query][:query].to_s] )
end
end

View file

@ -6,6 +6,21 @@ class ClientApplication < ActiveRecord::Base
validates_uniqueness_of :key
before_validation_on_create :generate_keys
validates_format_of :url, :with => /\Ahttp(s?):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/i
validates_format_of :support_url, :with => /\Ahttp(s?):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/i, :allow_blank=>true
validates_format_of :callback_url, :with => /\Ahttp(s?):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/i, :allow_blank=>true
attr_accessor :token_callback_url
def self.find_token(token_key)
token = OauthToken.find_by_token(token_key, :include => :client_application)
if token && token.authorized?
token
else
nil
end
end
def self.verify_request(request, options = {}, &block)
begin
signature = OAuth::Signature.build(request, options, &block)
@ -35,7 +50,7 @@ class ClientApplication < ActiveRecord::Base
end
def create_request_token
RequestToken.create :client_application => self
RequestToken.create :client_application => self, :callback_url => self.token_callback_url
end
# the permissions that this client would like from the user
@ -52,8 +67,8 @@ protected
:allow_write_api, :allow_read_gpx, :allow_write_gpx ]
def generate_keys
@oauth_client = oauth_server.generate_consumer_credentials
self.key = @oauth_client.key
self.secret = @oauth_client.secret
oauth_client = oauth_server.generate_consumer_credentials
self.key = oauth_client.key
self.secret = oauth_client.secret
end
end

View file

@ -4,6 +4,7 @@ class Notifier < ActionMailer::Base
subject I18n.t('notifier.signup_confirm.subject')
body :url => url_for(:host => SERVER_URL,
:controller => "user", :action => "confirm",
:display_name => user.display_name,
:confirm_string => token.token)
end

View file

@ -1,17 +1,23 @@
class RequestToken < OauthToken
attr_accessor :provided_oauth_verifier
def authorize!(user)
return false if authorized?
self.user = user
self.authorized_at = Time.now
self.verifier = OAuth::Helper.generate_key(16)[0,20] unless oauth10?
self.save
end
def exchange!
return false unless authorized?
return false unless oauth10? || verifier == provided_oauth_verifier
RequestToken.transaction do
params = { :user => user, :client_application => client_application }
# copy the permissions from the authorised request token to the access token
client_application.permissions.each { |p|
client_application.permissions.each { |p|
params[p] = read_attribute(p)
}
@ -20,4 +26,21 @@ class RequestToken < OauthToken
access_token
end
end
def to_query
if oauth10?
super
else
"#{super}&oauth_callback_confirmed=true"
end
end
def oob?
self.callback_url=='oob'
end
def oauth10?
(defined? OAUTH_10_SUPPORT) && OAUTH_10_SUPPORT && self.callback_url.blank?
end
end

View file

@ -149,15 +149,72 @@ class Trace < ActiveRecord::Base
el1 = XML::Node.new 'gpx_file'
el1['id'] = self.id.to_s
el1['name'] = self.name.to_s
el1['lat'] = self.latitude.to_s
el1['lon'] = self.longitude.to_s
el1['lat'] = self.latitude.to_s if self.inserted
el1['lon'] = self.longitude.to_s if self.inserted
el1['user'] = self.user.display_name
el1['visibility'] = self.visibility
el1['pending'] = (!self.inserted).to_s
el1['timestamp'] = self.timestamp.xmlschema
el2 = XML::Node.new 'description'
el2 << self.description
el1 << el2
self.tags.each do |tag|
el2 = XML::Node.new('tag')
el2 << tag.tag
el1 << el2
end
return el1
end
# Read in xml as text and return it's Node object representation
def self.from_xml(xml, create=false)
begin
p = XML::Parser.string(xml)
doc = p.parse
doc.find('//osm/gpx_file').each do |pt|
return Trace.from_xml_node(pt, create)
end
raise OSM::APIBadXMLError.new("trace", xml, "XML doesn't contain an osm/gpx_file element.")
rescue LibXML::XML::Error, ArgumentError => ex
raise OSM::APIBadXMLError.new("trace", xml, ex.message)
end
end
def self.from_xml_node(pt, create=false)
trace = Trace.new
raise OSM::APIBadXMLError.new("trace", pt, "visibility missing") if pt['visibility'].nil?
trace.visibility = pt['visibility']
unless create
raise OSM::APIBadXMLError.new("trace", pt, "ID is required when updating.") if pt['id'].nil?
trace.id = pt['id'].to_i
# .to_i will return 0 if there is no number that can be parsed.
# We want to make sure that there is no id with zero anyway
raise OSM::APIBadUserInput.new("ID of trace cannot be zero when updating.") if trace.id == 0
end
# We don't care about the time, as it is explicitly set on create/update/delete
# We don't care about the visibility as it is implicit based on the action
# and set manually before the actual delete
trace.visible = true
description = pt.find('description').first
raise OSM::APIBadXMLError.new("trace", pt, "description missing") if description.nil?
trace.description = description.content
pt.find('tag').each do |tag|
trace.tags.build(:tag => tag.content)
end
return trace
end
def xml_file
# TODO *nix specific, could do to work on windows... would be functionally inferior though - check for '.gz'
filetype = `/usr/bin/file -bz #{trace_name}`.chomp

View file

@ -25,10 +25,10 @@ page << <<EOJ
sides: 4,
snapAngle: 90,
irregular: true,
persist: true,
callbacks: { done: endDrag }
persist: true
}
});
browseBoxControl.handler.callbacks.done = endDrag;
map.addControl(browseBoxControl);
map.events.register("moveend", map, showData);

View file

@ -17,10 +17,10 @@ page << <<EOJ
sides: 4,
snapAngle: 90,
irregular: true,
persist: true,
callbacks: { done: endDrag }
persist: true
}
});
box.handler.callbacks.done = endDrag;
map.addControl(box);
map.events.register("moveend", map, mapMoved);
@ -227,13 +227,13 @@ page << <<EOJ
function htmlUrlChanged() {
var bounds = new OpenLayers.Bounds($("minlon").value, $("minlat").value, $("maxlon").value, $("maxlat").value);
var layerName = map.baseLayer.name.toLowerCase();
var url = "http://#{SERVER_URL}/export/embed.html?bbox=" + bounds.toBBOX() + "&layer=" + layerName;
var layerName = map.baseLayer.keyid;
var url = "http://#{SERVER_URL}/export/embed.html?bbox=" + bounds.toBBOX() + "&amp;layer=" + layerName;
var markerUrl = "";
if ($("marker_lat").value && $("marker_lon").value) {
markerUrl = "&mlat=" + $("marker_lat").value + "&mlon=" + $("marker_lon").value;
url += "&marker=" + $("marker_lat").value + "," + $("marker_lon").value;
markerUrl = "&amp;mlat=" + $("marker_lat").value + "&amp;mlon=" + $("marker_lon").value;
url += "&amp;marker=" + $("marker_lat").value + "," + $("marker_lon").value;
}
var html = '<iframe width="425" height="350" frameborder="0" scrolling="no" marginheight="0" marginwidth="0" src="'+url+'" style="border: 1px solid black"></iframe>';
@ -248,7 +248,7 @@ page << <<EOJ
var layers = getMapLayers();
html += '<br /><small><a href="http://#{SERVER_URL}/?lat='+center.lat+'&lon='+center.lon+'&zoom='+zoom+'&layers='+layers+markerUrl+'">'+"#{html_escape_unicode(I18n.t('export.start_rjs.view_larger_map'))}"+'</a></small>';
html += '<br /><small><a href="http://#{SERVER_URL}/?lat='+center.lat+'&amp;lon='+center.lon+'&amp;zoom='+zoom+'&amp;layers='+layers+markerUrl+'">'+"#{html_escape_unicode(I18n.t('export.start_rjs.view_larger_map'))}"+'</a></small>';
$("export_html_text").value = html;

View file

@ -117,7 +117,10 @@
<% end %>
<div id="left_menu" class="left_menu">
<a href="<%= t 'layouts.help_wiki_url' %>" title="<%= t 'layouts.help_wiki_tooltip' %>"><%= t 'layouts.help_wiki' %></a><br />
<%= t 'layouts.help_and_wiki',
:help => link_to(t('layouts.help'), t('layouts.help_url'), :title => t('layouts.help_title')),
:wiki => link_to(t('layouts.wiki'), t('layouts.wiki_url'), :title => t('layouts.wiki_title'))
%><br />
<%= link_to t('layouts.copyright'), {:controller => 'site', :action => 'copyright'} %><br />
<a href="http://blogs.openstreetmap.org/" title="<%= t 'layouts.news_blog_tooltip' %>"><%= t 'layouts.news_blog' %></a><br />
<a href="<%= t 'layouts.shop_url' %>" title="<%= t 'layouts.shop_tooltip' %>"><%= t 'layouts.shop' %></a><br />

View file

@ -11,6 +11,8 @@
<p><%= t'notifier.signup_confirm_html.get_reading' %></p>
<p><%= t'notifier.signup_confirm_html.ask_questions' %></p>
<p><%= t'notifier.signup_confirm_html.wiki_signup' %></p>
<p><%= t'notifier.signup_confirm_html.user_wiki_page' %></p>

View file

@ -22,13 +22,17 @@
<%= t'notifier.signup_confirm_plain.blog_and_twitter' %>
http://blog.openstreepmap.org/
http://blog.openstreetmap.org/
http://twitter.com/openstreetmap
<%= t'notifier.signup_confirm_plain.opengeodata' %>
http://www.opengeodata.org/
<%= t'notifier.signup_confirm_plain.ask_questions' %>
http://help.openstreetmap.org/
<%= t'notifier.signup_confirm_plain.wiki_signup' %>
<%= t'notifier.signup_confirm_plain.wiki_signup_url' %>

View file

@ -1 +1,5 @@
<h1>You have allowed this request</h1>
<h1>You have allowed this request</h1>
<% if @token.oob? %>
<p>The verification code is <%= @token.verifier %></p>
<% end %>

View file

@ -17,12 +17,13 @@
</noscript>
<div id="map">
<div id="permalink">
<a href="/" id="permalinkanchor"><%= t 'site.index.permalink' %></a><br/>
<a href="/" id="shortlinkanchor"><%= t 'site.index.shortlink' %></a><br/>
<a id="ReportBug">Report a problem</a>
</div>
</div>
</div>
<div id="permalink">
<a href="/" id="permalinkanchor"><%= t 'site.index.permalink' %></a><br/>
<a href="/" id="shortlinkanchor"><%= t 'site.index.shortlink' %></a><br/>
<a href="/" id="ReportBug">Report a problem</a>
</div>
<div id="attribution">
<table width="100%">
@ -41,7 +42,7 @@
</div>
<%
if params['mlon'] and params['mlat']
if params['mlon'] and params['mlat']
marker = true
mlon = h(params['mlon'])
mlat = h(params['mlat'])
@ -69,7 +70,7 @@ if params['minlon'] and params['minlat'] and params['maxlon'] and params['maxlat
minlat = h(params['minlat'])
maxlon = h(params['maxlon'])
maxlat = h(params['maxlat'])
box = true if params['box']=="yes"
box = true if params['box']=="yes"
object_zoom = false
end
@ -81,14 +82,14 @@ if params['lon'] and params['lat']
layers = h(params['layers'])
object_zoom = false
elsif params['mlon'] and params['mlat']
lon = h(params['mlon'])
lon = h(params['mlon'])
lat = h(params['mlat'])
zoom = h(params['zoom'] || '12')
layers = h(params['layers'])
object_zoom = false
elsif cookies.key?("_osm_location")
lon,lat,zoom,layers = cookies["_osm_location"].split("|")
elsif @user and !@user.home_lon.nil? and !@user.home_lat.nil?
elsif @user and !@user.home_lon.nil? and !@user.home_lat.nil?
lon = @user.home_lon
lat = @user.home_lat
zoom = '10'
@ -102,12 +103,12 @@ else
maxlon = session[:location][:maxlon]
maxlat = session[:location][:maxlat]
else
lon = '-0.1'
lat = '51.5'
zoom = h(params['zoom'] || '5')
lon = '-0.1'
lat = '51.5'
zoom = h(params['zoom'] || '5')
end
layers = h(params['layers'])
layers = h(params['layers'])
end
%>
@ -261,7 +262,7 @@ end
updatelinks(lonlat.lon, lonlat.lat, zoom, layers, extents.left, extents.bottom, extents.right, extents.top, objtype, objid);
expiry.setYear(expiry.getFullYear() + 10);
expiry.setYear(expiry.getFullYear() + 10);
document.cookie = "_osm_location=" + lonlat.lon + "|" + lonlat.lat + "|" + zoom + "|" + layers + "; expires=" + expiry.toGMTString();
}
@ -273,7 +274,7 @@ end
content.style.width = document.documentElement.clientWidth - content.offsetLeft - rightMargin;
content.style.height = document.documentElement.clientHeight - content.offsetTop - bottomMargin;
}
function resizeMap() {
var centre = map.getCenter();
var zoom = map.getZoom();
@ -297,7 +298,7 @@ end
resizeMap();
}
mapInit();
window.onload = handleResize;

View file

@ -1,5 +1,4 @@
<div id="mapkey">
<h3><%= t "site.key.table.heading", :zoom_level => params[:zoom] %></h3>
<table class="mapkey-table">
<% YAML.load_file("#{RAILS_ROOT}/config/key.yml").each do |name,data| %>
<% if params[:layer] == name %>

View file

@ -1,10 +1,17 @@
<script>
$("content").style.display = "none";
</script>
<h1><%= t 'user.confirm.heading' %></h1>
<p><%= t 'user.confirm.press confirm button' %></p>
<form method="post">
<input type="hidden" name="confirm_string" value="<%= params[:confirm_string] %>">
<input type="submit" name="confirm_action" value="<%= t 'user.confirm.button' %>">
<form id="confirm" method="post">
<input type="display_name" name="confirm_string" value="<%= params[:display_name] %>">
<input type="hidden" name="confirm_string" value="<%= params[:confirm_string] %>">
<input type="submit" name="confirm_action" value="<%= t 'user.confirm.button' %>">
</form>
<script>
$("confirm").submit();
</script>

View file

@ -1,8 +1,16 @@
<script>
$("content").style.display = "none";
</script>
<h1><%= t 'user.confirm_email.heading' %></h1>
<p><%= t 'user.confirm_email.press confirm button' %></p>
<form method="post">
<input type="hidden" name="confirm_string" value="<%= params[:confirm_string] %>">
<input type="submit" name="confirm_action" value="<%= t 'user.confirm_email.button' %>">
<form id="confirm" method="post">
<input type="hidden" name="confirm_string" value="<%= params[:confirm_string] %>">
<input type="submit" name="confirm_action" value="<%= t 'user.confirm_email.button' %>">
</form>
<script>
$("confirm").submit();
</script>

View file

@ -1,24 +0,0 @@
<h2>Search results</h5>
fixme postcodes and geonames
<% form_tag :controller => 'way_tag', :action => 'search' do %>
<%= text_field 'query', 'query'%>
<%= submit_tag 'Search' %>
<% end %>
<table border="0">
<% @tags.each do |tag| %>
<tr>
<td>
<%= link_to tag.v, :controller => 'site', :action => 'goto_way', :id => tag.id %> (k:<%= tag.k %>)<br>
<font size="-2" color="green">
Way <%= tag.id %> (<%= tag.way.timestamp %>)
<%= link_to 'Map', :controller => 'site', :action => 'goto_way', :id => tag.id %> -
<%= link_to 'API', :controller => 'way', :action => 'rest', :id => tag.id %>
<br /><br/ >
</font>
</td>
</tr>
<% end %>
</table>