fixed user messaging stuff
[rails.git] / app / views / user / account.rhtml
1 <h2>User details</h2>
2 <%= error_messages_for 'user' %>
3 <%= start_form_tag :controller => 'user', :action => 'edit', :display_name => @user.display_name %>
4 <table>
5   <tr><td>Name</td><td><%= @user.email %></td></tr>
6   <tr><td>Mapper since</td><td><%= @user.creation_time %> (<%= time_ago_in_words(@user.creation_time) %> ago)</td></tr>
7   <tr><td>Display Name</td><td><%= text_field :user, :display_name, :value => @user.display_name %></td></tr>
8   <tr id="homerow" <% unless @user.home_lat and @user.home_lon %> class="nohome" <%end%> ><td>Your home</td><td><em class="message">You have not entered your home location.</em><span class="location">Latitude: <%= text_field :user, :home_lat, :value => @user.home_lat, :size => 20, :id => "home_lat" %> Longitude <%= text_field :user, :home_lon, :value => @user.home_lon, :size => 20, :id => "home_lon" %></span>  </td></tr>
9
10   <tr><td></td><td>
11   <div id="map" style="border: 1px solid black; position: relative; width : 90%; height : 300px;">
12     <h3>Click on the map to (re)set your location</h3>
13   </div>
14   </td></tr>
15
16   <tr><td valign="top">Description</td><td><%= text_area :user, :description, :value => @user.description, :class => "editDescription" %></td></tr>
17 </table>
18 <%= submit_tag 'Save Changes' %>
19 <%= end_form_tag %>
20
21 <% nearest_str = "" %>
22 <% if @user.home_lat and @user.home_lon %>
23     <h2>Users in your area</h2>
24
25     <% if @user.nearby.empty? %>
26     There are no users who admit to mapping in your area.  Better go out and spread the word about OSM!
27     <% else %>
28
29     <p>These users are mapping in your area:</p>
30     <table>
31     <tr>
32     <th>Name</th>
33     <th>Contact</th>
34     </tr>
35     <% @user.nearby(1,1).each do |nearby| %>
36     <% nearest_str = "nearest.push( { 'display_name' : '#{nearby.display_name}', 'home_lat' : #{nearby.home_lat}, 'home_lon' : #{nearby.home_lon} } )" %>
37
38     <tr>
39     <td><%= link_to nearby.display_name, :controller => 'user', :action => 'view',  :display_name => nearby.display_name %></td>
40     <td><%= link_to 'send message', :controller => 'message', :action => 'new', :user_id => nearby.id %></td>
41     </tr>
42     <%end%>
43     </table>
44
45     <%end%>
46     <br />
47 <% end %>
48 <script type="text/javascript">
49     var nearest = [], friends = [];
50     <%= nearest_str %>
51 </script>
52
53 <% if @user.home_lat and @user.home_lon %>
54     <% marker = true %>
55     <% mlon = @user.home_lon %> 
56     <% mlat = @user.home_lat %>
57     <% lon =  @user.home_lon %>
58     <% lat =  @user.home_lat  %>
59     <% zoom =  '12' %>
60 <script type="text/javascript">
61   var mlat = <%= mlat %>;
62   var mlon = <%= mlon %>;
63 </script>
64 <% else %>
65     <% lon =  params['lon'] || '-0.1' %>
66     <% lat =  params['lat'] || '51.5' %>
67     <% zoom =  params['zoom'] || '4' %> 
68 <% end %>
69
70
71
72 <script type="text/javascript">
73   var lat = <%= lat %>;
74   var lon = <%= lon %>;
75   var zoom = <%= zoom %>;
76   var PI = 3.14159265358979323846;
77
78
79
80   <% if params['scale'] and params['scale'].length > 0 then %>
81   zoom = Math.log(360.0/(( <% print params['scale'].to_f() %> ) * 512.0)) / Math.log(2.0);
82   <% end %>
83   zoom = zoom;
84   lon = lon * 20037508.34 / 180;
85   lat = Math.log(Math.tan( (90 + lat) * PI / 360)) / (PI / 180);
86   lat = lat * 20037508.34 / 180;
87   <% if marker %>
88   mlon = mlon * 20037508.34 / 180;
89   mlat = Math.log(Math.tan( (90 + mlat) * PI / 360)) / (PI / 180);
90   mlat = mlat * 20037508.34 / 180;
91   <%end%>
92
93 </script>
94 <script type="text/javascript" src="/javascripts/OpenLayers.js"></script>
95
96 <script type="text/javascript">
97   <!--
98   var map, layer, markers, marker;
99
100
101   function mercator2lonlat( merc ) {
102     var lon_deg = (merc.lon / 20037508.34) * 180;
103     var lat_deg = (merc.lat / 20037508.34) * 180;
104     var PI = 3.14159265358979323846;
105     lat_deg = 180/PI * (2 * Math.atan(Math.exp(lat_deg * PI / 180)) - PI / 2);
106     return new OpenLayers.LonLat(lon_deg,lat_deg);
107   }
108
109   function lonlat2mercator( ll ) {
110       var lon = ll.lon * 20037508.34 / 180;
111       var lat = Math.log(Math.tan( (90 + ll.lat) * PI / 360)) / (PI / 180);
112       lat = lat * 20037508.34 / 180;
113       return new OpenLayers.LonLat(lon,lat);
114   }
115
116   function init(){
117
118     OpenLayers.Util.onImageLoadError = function() {
119       this.src = "http://www.openstreetmap.org/javascripts/img/404.png";
120     }
121     map = new OpenLayers.Map( "map", 
122         {maxExtent: new OpenLayers.Bounds(-20037508.34,-20037508.34,20037508.34,20037508.34), maxZoomLevel:18, maxResolution:156543, units:'meters', projection: "EPSG:41001"} );
123     layer = new OpenLayers.Layer.LikeGoogle( "Mapnik", "http://tile.openstreetmap.org/", {type:'png'} );
124     map.addLayer(layer);
125     layer = new OpenLayers.Layer.LikeGoogle( "Osmarender", "http://dev.openstreetmap.org/~ojw/Tiles/tile.php/", {type:'png'} );
126     map.addLayer(layer);
127
128     //Marker stuff
129
130     markers = new OpenLayers.Layer.Markers("markers");
131     map.addLayer(markers); 
132
133     <% if marker %>
134     marker = new OpenLayers.Marker(new OpenLayers.LonLat(mlon,mlat));
135     markers.addMarker(marker);
136     <%end%>
137
138     var near_icon = OpenLayers.Marker.defaultIcon();
139     near_icon.url = OpenLayers.Util.getImagesLocation() + "marker-green.png";;
140     var i = nearest.length;
141     while( i-- ) {
142         markers.addMarker( new OpenLayers.Marker( lonlat2mercator( new OpenLayers.LonLat( nearest[i].home_lon, nearest[i].home_lat ) ), near_icon ) );
143     }
144
145       map.addControl(new OpenLayers.Control.LayerSwitcher());
146     map.setCenter(new OpenLayers.LonLat(lon, lat), zoom);
147
148     map.events.register("click", map, setHome);
149   }        
150
151     function setHome( e ) { 
152         var lonlat = map.getLonLatFromViewPortPx(e.xy)
153
154         var lon_deg = (lonlat.lon / 20037508.34) * 180;
155         var lat_deg = (lonlat.lat / 20037508.34) * 180;
156         var PI = 3.14159265358979323846;
157         lat_deg = 180/PI * (2 * Math.atan(Math.exp(lat_deg * PI / 180)) - PI / 2);
158         var homerow = document.getElementById( 'homerow' );
159         var home_lat = document.getElementById( 'home_lat' );
160         var home_lon = document.getElementById( 'home_lon' );
161         homerow.className = '';
162         home_lat.value = lat_deg;
163         home_lon.value = lon_deg;
164         if( marker ) {
165             markers.removeMarker(marker);
166         }
167         marker = new OpenLayers.Marker(lonlat);
168         markers.addMarker(marker);
169     }
170 window.onload = init;
171 // -->
172 </script>
173
174 <h2>Privacy</h2>
175 <% if @user.data_public? %>
176   All your edits are public.
177 <% else %>
178   Currently your edits are anonymous and people can't find out where you are located. To show what you edited and allow people to contact you through the website, click the button below. This action cannot be reversed.
179   <br /><br />
180   <%= start_form_tag :controller => 'user', :action => 'go_public'%>
181   <%= submit_tag 'Make all my edits public, forever' %>
182   <%= end_form_tag %>
183 <% end %>