Allow users to change their password from the account page, and get rid
authorTom Hughes <tom@compton.nu>
Tue, 12 Jun 2007 00:28:53 +0000 (00:28 +0000)
committerTom Hughes <tom@compton.nu>
Tue, 12 Jun 2007 00:28:53 +0000 (00:28 +0000)
of the separate edit page that (partially) duplicated the account page.

app/controllers/user_controller.rb
app/models/user.rb
app/views/user/account.rhtml
app/views/user/edit.rhtml [deleted file]
config/routes.rb

index 83845af42547fcbd50a0a5182704cbcaaf9bf488..cc934fc325ec04ad5c5642ef583e8cd2a03d2d03 100644 (file)
@@ -2,8 +2,8 @@ class UserController < ApplicationController
   layout 'site'
 
   before_filter :authorize, :only => [:preferences, :api_details, :api_gpx_files]
-  before_filter :authorize_web, :only => [:edit, :account, :go_public, :view, :diary, :make_friend]
-  before_filter :require_user, :only => [:edit, :set_home, :account, :go_public, :make_friend]
+  before_filter :authorize_web, :only => [:account, :go_public, :view, :diary, :make_friend]
+  before_filter :require_user, :only => [:set_home, :account, :go_public, :make_friend]
 
   def save
     @user = User.new(params[:user])
@@ -18,18 +18,23 @@ class UserController < ApplicationController
     end
   end
 
-  def edit
+  def account
     if params[:user] and params[:user][:display_name] and params[:user][:description]
       home_lat =  params[:user][:home_lat]
       home_lon =  params[:user][:home_lon]
 
       @user.display_name = params[:user][:display_name]
+      if params[:user][:pass_crypt].length > 0 or params[:user][:pass_crypt_confirmation].length > 0
+        @user.pass_crypt = params[:user][:pass_crypt]
+        @user.pass_crypt_confirmation = params[:user][:pass_crypt_confirmation]
+      end
       @user.description = params[:user][:description]
       @user.home_lat = home_lat.to_f
       @user.home_lon = home_lon.to_f
       if @user.save
         flash[:notice] = "User information updated successfully."
-        redirect_to :controller => 'user', :action => 'account'
+      else
+        flash.delete(:notice)
       end
     end
   end
index d6cff0f25856e0cc8f65ab12677ac6c75f347ed9..da4d4c2058b1429485327956f1f87c4e5692d851 100644 (file)
@@ -24,7 +24,7 @@ class User < ActiveRecord::Base
   end
 
   def encrypt_password
-    self.pass_crypt = Digest::MD5.hexdigest(pass_crypt) if pass_crypt_confirmation
+    self.pass_crypt = Digest::MD5.hexdigest(pass_crypt) unless pass_crypt_confirmation.nil?
   end
 
   def self.authenticate(email, passwd)
index eafa2d5f4aab47116652e80357d7bdde19d8810b..ca1fe61bd81df56625b42a4aaa4ef306fdf8d7a4 100644 (file)
@@ -1,10 +1,12 @@
 <h2>User details</h2>
 <%= error_messages_for 'user' %>
-<% form_tag :controller => 'user', :action => 'edit', :display_name => @user.display_name do %>
+<% form_tag :controller => 'user', :action => 'account', :display_name => @user.display_name do %>
 <table style="width : 100%">
   <tr><td>Name</td><td><%= @user.email %></td></tr>
   <tr><td>Mapper since</td><td><%= @user.creation_time %> (<%= time_ago_in_words(@user.creation_time) %> ago)</td></tr>
   <tr><td>Display Name</td><td><%= text_field :user, :display_name, :value => @user.display_name %></td></tr>
+  <tr><td>Password</td><td><%= password_field('user', 'pass_crypt',{:value => '', :size => 50, :maxlength => 255}) %></td></tr>
+  <tr><td>Confirm Password</td><td><%= password_field('user', 'pass_crypt_confirmation',{:value => '', :size => 50, :maxlength => 255}) %></td></tr>
   <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>
 
   <tr><td></td><td>
diff --git a/app/views/user/edit.rhtml b/app/views/user/edit.rhtml
deleted file mode 100644 (file)
index 0ca853e..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-<h2>Edit details:</h2>
-<%= error_messages_for 'user' %>
-<% form_tag :controller => 'user', :action => 'edit', :display_name => User.find(@user.id).display_name do %>
-<table>
-  <tr><td>display name</td><td><%= text_field :user, :display_name, :value => @user.display_name %></td></tr>
-  <tr><td valign="top">description</td><td><%= text_area :user, :description, :value => @user.description %></td></tr>
-  <tr><td>home latitude</td><td><%= text_field :user, :home_lat, :value => @user.home_lat %></td>
-  <tr><td>home longitude</td><td><%= text_field :user, :home_lon, :value => @user.home_lon %></td>
-</table>
-<%= submit_tag 'Change' %>
-<% end %>
index f2ccdad0eb812095616ec740267d49b80b6973fc..bc7f08b5b1e189f80dcfbda69d2b47ea4a9a363e 100644 (file)
@@ -76,7 +76,6 @@ ActionController::Routing::Routes.draw do |map|
   map.connect '/user/:display_name/diary', :controller => 'user', :action => 'diary'
   map.connect '/user/:display_name/diary/rss', :controller => 'user', :action => 'rss'
   map.connect '/user/:display_name/diary/newpost', :controller => 'diary_entry', :action => 'new'
-  map.connect '/user/:display_name/edit', :controller => 'user', :action => 'edit'
   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'