edit diary entries
authorRichard Fairhurst <richard@systemed.net>
Thu, 21 Aug 2008 21:40:23 +0000 (21:40 +0000)
committerRichard Fairhurst <richard@systemed.net>
Thu, 21 Aug 2008 21:40:23 +0000 (21:40 +0000)
app/controllers/diary_entry_controller.rb
app/views/diary_entry/_diary_entry.rhtml
app/views/diary_entry/edit.rhtml [new file with mode: 0644]
config/routes.rb

index c0d7204d57a7d539c2a040f14ea0c15772ae1fd3..0ad71da17ba99efa0db7eea33dfe8fad72488d69 100644 (file)
@@ -2,7 +2,7 @@ class DiaryEntryController < ApplicationController
   layout 'site', :except => :rss
 
   before_filter :authorize_web
-  before_filter :require_user, :only => [:new]
+  before_filter :require_user, :only => [:new, :edit]
   before_filter :check_database_availability
 
   def new
@@ -16,6 +16,23 @@ class DiaryEntryController < ApplicationController
     end
   end
 
+  def edit
+    @title= 'edit diary entry'
+    @diary_entry = DiaryEntry.find(params[:id])
+    if @user != @diary_entry.user
+         redirect_to :controller => 'diary_entry', :action => 'view', :id => params[:id]
+    end
+    if params[:diary_entry]
+      @diary_entry.title = params[:diary_entry][:title]
+      @diary_entry.body = params[:diary_entry][:body]
+      @diary_entry.latitude = params[:diary_entry][:latitude]
+      @diary_entry.longitude = params[:diary_entry][:longitude]
+      if @diary_entry.save
+        redirect_to :controller => 'diary_entry', :action => 'view', :id => params[:id]
+         end
+    end
+  end
+
   def comment
     @entry = DiaryEntry.find(params[:id])
     @diary_comment = @entry.diary_comments.build(params[:diary_comment])
index 372ec35f7f0784483b3f8b0928a459fa58ee83d6..fe73155aca85241d4f31a475fdf7849127321ffb 100644 (file)
@@ -3,13 +3,17 @@
 <% if diary_entry.latitude and diary_entry.longitude %>
 Coordinates: <div class="geo" style="display: inline"><span class="latitude"><%= diary_entry.latitude %></span>; <span class="longitude"><%= diary_entry.longitude %></span></div> (<%=link_to 'map', :controller => 'site', :action => 'index', :lat => diary_entry.latitude, :lon => diary_entry.longitude, :zoom => 14 %> / <%=link_to 'edit', :controller => 'site', :action => 'edit', :lat => diary_entry.latitude, :lon => diary_entry.longitude, :zoom => 14 %>)<br/>
 <% end %>
-Posted by <b><%= link_to h(diary_entry.user.display_name), :controller => 'user', :action => 'view', :display_name => diary_entry.user.display_name %></b> at <%= diary_entry.created_at %><br />
+Posted by <b><%= link_to h(diary_entry.user.display_name), :controller => 'user', :action => 'view', :display_name => diary_entry.user.display_name %></b> at <%= diary_entry.created_at %>
 <% if params[:action] == 'list' %>
+<br />
 <%= link_to 'Comment on this entry', :action => 'view', :display_name => diary_entry.user.display_name, :id => diary_entry.id, :anchor => 'newcomment' %>
 |
 <%= link_to 'Reply to this entry', :controller => 'message', :action => 'new', :user_id => diary_entry.user.id, :title => "Re: #{diary_entry.title}" %>
 |
 <%= link_to pluralize(diary_entry.diary_comments.count, "comment"), :action => 'view', :display_name => diary_entry.user.display_name, :id => diary_entry.id, :anchor => 'comments' %>
 <% end %>
+<% if @user == diary_entry.user %> 
+| <%= link_to 'Edit this entry', :action => 'edit', :display_name => @user.display_name, :id => diary_entry.id %>
+<% end %>
 <br />
 <hr />
diff --git a/app/views/diary_entry/edit.rhtml b/app/views/diary_entry/edit.rhtml
new file mode 100644 (file)
index 0000000..0a5203a
--- /dev/null
@@ -0,0 +1,79 @@
+<%= error_messages_for 'diary_entry' %>
+
+<% form_for :diary_entry do |f| %>
+  <table>
+    <tr valign="top">
+      <th>Subject</th>
+      <td><%= f.text_field :title, :size => 60 %></td>
+    </tr>
+    <tr valign="top">
+      <th>Body</th>
+      <td><%= f.text_area :body, :cols => 80 %></td>
+    </tr>
+    <tr valign="top">
+      <th>Location</th>
+      <td>
+        <div id="map" style="border: 1px solid black; position: relative; width : 90%; height : 400px; display: none;"></div>
+        <span class="location">Latitude: <%= f.text_field :latitude, :size => 20, :id => "latitude" %> Longitude: <%= f.text_field :longitude, :size => 20, :id => "longitude" %></span>
+        <a href="javascript:openMap()" id="usemap">use map</a>
+      </td>
+    </tr>
+    <tr>
+      <th></th>
+      <td><%= submit_tag 'Save' %></td>
+    </tr>
+  </table>
+<% end %>
+
+<% if @user.home_lat.nil? or @user.home_lon.nil? %>
+  <% lon = h(params['lon'] || '-0.1') %>
+  <% lat = h(params['lat'] || '51.5') %>
+  <% zoom = h(params['zoom'] || '4') %> 
+<% else %>
+  <% lon = @user.home_lon %>
+  <% lat = @user.home_lat %>
+  <% zoom = '12' %>
+<% end %>
+
+<%= javascript_include_tag '/openlayers/OpenLayers.js' %>
+<%= javascript_include_tag '/openlayers/OpenStreetMap.js' %>
+<%= javascript_include_tag 'map.js' %>
+
+<script type="text/javascript">
+  <!--
+  var marker;
+
+  function init() {
+    var centre = new OpenLayers.LonLat(<%= lon %>, <%= lat %>);
+    var zoom = <%= zoom %>;
+
+    var map = createMap("map");
+
+    setMapCenter(centre, zoom);
+
+    map.events.register("click", map, setLocation);
+  }        
+
+  function setLocation( e ) { 
+    closeMapPopup();
+
+    var lonlat = getEventPosition(e);
+
+    document.getElementById('latitude').value = lonlat.lat;
+    document.getElementById('longitude').value = lonlat.lon;
+
+    if (marker) {
+      removeMarkerFromMap(marker);
+    }
+
+    marker = addMarkerToMap(lonlat, null, "Diary entry location");
+  }
+
+  function openMap() {
+    $("map").style.display = "block";
+    $("usemap").style.display = "none";
+  }
+
+  window.onload = init;
+// -->
+</script>
index 4a9d0173d05b18498bc57c08de63c649a845db48..7a06445ea361fe771017856f09db8094ed678a02 100644 (file)
@@ -130,6 +130,7 @@ ActionController::Routing::Routes.draw do |map|
   map.connect '/user/:display_name/diary/:id/newcomment', :controller => 'diary_entry', :action => 'comment', :id => /\d+/
   map.connect '/user/:display_name/diary/rss', :controller => 'diary_entry', :action => 'rss'
   map.connect '/user/:display_name/diary/newpost', :controller => 'diary_entry', :action => 'new'
+  map.connect '/user/:display_name/diary/:id/edit', :controller => 'diary_entry', :action => 'edit', :id => /\d+/
   map.connect '/user/:display_name/account', :controller => 'user', :action => 'account'
   map.connect '/user/:display_name/set_home', :controller => 'user', :action => 'set_home'
   map.connect '/diary', :controller => 'diary_entry', :action => 'list'