@title = 'create account'
@user = User.new(params[:user])
+ @user.data_public = true
+
if @user.save
token = @user.tokens.create
flash[:notice] = "User was successfully created. Check your email for a confirmation note, and you\'ll be mapping in no time :-)<br>Please note that you won't be able to login until you've received and confirmed your email address."
+# Update and read user preferences, which are arbitrayr key/val pairs
class UserPreferenceController < ApplicationController
before_filter :authorize
- def read
+ def read_one
+ pref = UserPreference.find(:first, :conditions => ['user_id = ? AND k = ?', @user.id, params[:preference_key]])
+
+ if pref
+ render :text => pref.v.to_s
+ else
+ render :text => 'OH NOES! PREF NOT FOUND!', :status => 404
+ end
+ end
+
+ def update_one
+ pref = UserPreference.find(:first, :conditions => ['user_id = ? AND k = ?', @user.id, params[:preference_key]])
+
+ if pref
+ pref.v = request.raw_post.chomp
+ pref.save
+ else
+ pref = UserPreference.new
+ pref.user = @user
+ pref.k = params[:preference_key]
+ pref.v = request.raw_post.chomp
+ pref.save
+ end
+ end
+
+ # print out all the preferences as a big xml block
+ def read
doc = OSM::API.new.get_xml_doc
prefs = @user.preferences
doc.root << el1
render :text => doc.to_s, :content_type => "text/xml"
-
end
+ # update the entire set of preferences
def update
begin
p = XML::Parser.new
doc.find('//preferences/preference').each do |pt|
pref = UserPreference.new
-
+
unless keyhash[pt['k']].nil? # already have that key
render :text => 'OH NOES! CAN HAS UNIQUE KEYS?', :status => :not_acceptable
return
end
-
+
keyhash[pt['k']] = 1
pref.k = pt['k']
map.connect "api/#{API_VERSION}/user/details", :controller => 'user', :action => 'api_details'
map.connect "api/#{API_VERSION}/user/preferences", :controller => 'user_preference', :action => 'read', :conditions => { :method => :get }
+ map.connect "api/#{API_VERSION}/user/preferences/:preference_key", :controller => 'user_preference', :action => 'read_one', :conditions => { :method => :get }
map.connect "api/#{API_VERSION}/user/preferences", :controller => 'user_preference', :action => 'update', :conditions => { :method => :put }
+ map.connect "api/#{API_VERSION}/user/preferences/:preference_key", :controller => 'user_preference', :action => 'update_one', :conditions => { :method => :put }
map.connect "api/#{API_VERSION}/user/gpx_files", :controller => 'user', :action => 'api_gpx_files'
map.connect "api/#{API_VERSION}/gpx/create", :controller => 'trace', :action => 'api_create'
--- /dev/null
+class AddUserPreferenceId < ActiveRecord::Migration
+ def self.up
+ add_column "user_preferences", "id", :bigint, :limit => 64, :null => false, :options => "AUTO_INCREMENT"
+
+ add_index "user_preferences", ["id"], :name => "user_preferences_id_idx"
+ end
+
+ def self.down
+ remove_index 'user_preferences', 'id'
+ remove_column 'user_preferences', 'id'
+ end
+end