]> git.openstreetmap.org Git - rails.git/blob - app/controllers/site_controller.rb
Merge branch 'master' into overpass
[rails.git] / app / controllers / site_controller.rb
1 class SiteController < ApplicationController
2   layout 'site'
3   layout :map_layout, :only => [:index, :export]
4
5   before_filter :authorize_web
6   before_filter :set_locale
7   before_filter :redirect_browse_params, :only => :index
8   before_filter :redirect_map_params, :only => [:index, :edit, :export]
9   before_filter :require_user, :only => [:welcome]
10   before_filter :require_oauth, :only => [:index]
11
12   def index
13     unless STATUS == :database_readonly or STATUS == :database_offline
14       session[:location] ||= OSM::IPLocation(request.env['REMOTE_ADDR'])
15     end
16   end
17
18   def permalink
19     lon, lat, zoom = ShortLink::decode(params[:code])
20     new_params = params.except(:code, :lon, :lat, :zoom, :node, :way, :relation, :changeset)
21
22     if new_params.has_key? :m
23       new_params.delete :m
24       new_params[:mlat] = lat
25       new_params[:mlon] = lon
26     end
27
28     if params.has_key? :node
29       new_params[:controller] = 'browse'
30       new_params[:action] = 'node'
31       new_params[:id] = params[:node]
32     elsif params.has_key? :way
33       new_params[:controller] = 'browse'
34       new_params[:action] = 'way'
35       new_params[:id] = params[:way]
36     elsif params.has_key? :relation
37       new_params[:controller] = 'browse'
38       new_params[:action] = 'relation'
39       new_params[:id] = params[:relation]
40     elsif params.has_key? :changeset
41       new_params[:controller] = 'browse'
42       new_params[:action] = 'changeset'
43       new_params[:id] = params[:changeset]
44     else
45       new_params[:controller] = 'site'
46       new_params[:action] = 'index'
47     end
48
49     new_params[:anchor] = "map=#{zoom}/#{lat}/#{lon}"
50
51     redirect_to new_params
52   end
53
54   def key
55     expires_in 7.days, :public => true
56     render :layout => false
57   end
58
59   def edit
60     editor = preferred_editor
61
62     if editor == "remote"
63       require_oauth
64       render :action => :index, :layout => map_layout
65       return
66     else
67       require_user
68     end
69
70     if params[:node]
71       bbox = Node.find(params[:node]).bbox.to_unscaled
72       @lat = bbox.centre_lat
73       @lon = bbox.centre_lon
74       @zoom = 18
75     elsif params[:way]
76       bbox = Way.find(params[:way]).bbox.to_unscaled
77       @lat = bbox.centre_lat
78       @lon = bbox.centre_lon
79       @zoom = 17
80     elsif params[:note]
81       note = Note.find(params[:note])
82       @lat = note.lat
83       @lon = note.lon
84       @zoom = 17
85     elsif params[:gpx]
86       trace = Trace.visible_to(@user).find(params[:gpx])
87       @lat = trace.latitude
88       @lon = trace.longitude
89       @zoom = 16
90     end
91   end
92
93   def copyright
94     @locale = params[:copyright_locale] || I18n.locale
95   end
96
97   def welcome
98   end
99
100   def help
101   end
102
103   def about
104   end
105
106   def export
107   end
108
109   def offline
110   end
111
112   def preview
113     render :text => RichText.new(params[:format], params[:text]).to_html
114   end
115
116   def id
117     render "id", :layout => false
118   end
119
120   private
121
122   def redirect_browse_params
123     if params[:node]
124       redirect_to node_path(params[:node])
125     elsif params[:way]
126       redirect_to way_path(params[:way])
127     elsif params[:relation]
128       redirect_to relation_path(params[:relation])
129     elsif params[:note]
130       redirect_to browse_note_path(params[:note])
131     elsif params[:query]
132       redirect_to search_path(:query => params[:query])
133     end
134   end
135
136   def redirect_map_params
137     anchor = []
138
139     if params[:lat] && params[:lon]
140       anchor << "map=#{params.delete(:zoom) || 5}/#{params.delete(:lat)}/#{params.delete(:lon)}"
141     end
142
143     if params[:layers]
144       anchor << "layers=#{params.delete(:layers)}"
145     elsif params.delete(:notes) == 'yes'
146       anchor << "layers=N"
147     end
148
149     if anchor.present?
150       redirect_to params.merge(:anchor => anchor.join('&'))
151     end
152   end
153 end