]> git.openstreetmap.org Git - rails.git/blob - app/controllers/site_controller.rb
b2212645c2761d764e03287a23b8dc6f79af0ec1
[rails.git] / app / controllers / site_controller.rb
1 class SiteController < ApplicationController
2   layout 'site', :except => [:key, :permalink]
3   layout false, :only => [:key, :permalink]
4
5   before_filter :authorize_web
6   before_filter :set_locale
7   before_filter :require_user, :only => [:edit]
8   before_filter :require_oauth, :only => [:index]
9
10   def index
11     anchor = []
12
13     if params[:lat] && params[:lon]
14       anchor << "map=#{params.delete(:zoom) || 5}/#{params.delete(:lat)}/#{params.delete(:lon)}"
15     end
16
17     if params[:layers]
18       anchor << "layers=#{params.delete(:layers)}"
19     elsif params.delete(:notes) == 'yes'
20       anchor << "layers=N"
21     end
22
23     if anchor.present?
24       redirect_to params.merge(:anchor => anchor.join('&'))
25       return
26     end
27
28     unless STATUS == :database_readonly or STATUS == :database_offline
29       session[:location] ||= OSM::IPLocation(request.env['REMOTE_ADDR'])
30     end
31   end
32
33   def permalink
34     lon, lat, zoom = ShortLink::decode(params[:code])
35     new_params = params.except(:code, :lon, :lat, :zoom)
36
37     if new_params.has_key? :m
38       new_params.delete :m
39       new_params[:mlat] = lat
40       new_params[:mlon] = lon
41     end
42
43     new_params[:controller] = 'site'
44     new_params[:action] = 'index'
45     new_params[:anchor] = "map=#{zoom}/#{lat}/#{lon}"
46
47     redirect_to new_params
48   end
49
50   def key
51     expires_in 7.days, :public => true
52   end
53
54   def edit
55     editor = params[:editor] || @user.preferred_editor || DEFAULT_EDITOR
56
57     if editor == "remote"
58       render :action => :index
59       return
60     end
61
62     @extra_body_class = "site-edit-#{editor}"
63
64     if params[:node]
65       bbox = Node.find(params[:node]).bbox.to_unscaled
66       @lat = bbox.centre_lat
67       @lon = bbox.centre_lon
68     elsif params[:way]
69       bbox = Way.find(params[:way]).bbox.to_unscaled
70       @lat = bbox.centre_lat
71       @lon = bbox.centre_lon
72     elsif params[:gpx]
73       trace = Trace.visible_to(@user).find(params[:gpx])
74       @lat = trace.latitude
75       @lon = trace.longitude
76     end
77   end
78
79   def copyright
80     @locale = params[:copyright_locale] || I18n.locale
81   end
82
83   def preview
84     render :text => RichText.new(params[:format], params[:text]).to_html
85   end
86
87   def id
88     render "id", :layout => false
89   end
90 end