]> git.openstreetmap.org Git - rails.git/blobdiff - app/controllers/application_controller.rb
Guard against non-numeric lat and lons in nodes and notes
[rails.git] / app / controllers / application_controller.rb
index e5a2b354037dd85fa9864729ddf9059584df2c10..004db5f8403665200bcb162f848b9e35c4945f41 100644 (file)
@@ -55,6 +55,10 @@ class ApplicationController < ActionController::Base
     end
   end
 
+  def require_oauth
+    @oauth = @user.access_token(OAUTH_KEY) if @user and defined? OAUTH_KEY
+  end
+
   ##
   # requires the user to be logged in by the token or HTTP methods, or have an 
   # OAuth token with the right capability. this method is a bit of a pain to call 
@@ -112,6 +116,9 @@ class ApplicationController < ActionController::Base
   def require_allow_write_gpx
     require_capability(:allow_write_gpx)
   end
+  def require_allow_write_notes
+    require_capability(:allow_write_notes)
+  end
 
   ##
   # require that the user is a moderator, or fill out a helpful error message
@@ -274,46 +281,51 @@ class ApplicationController < ActionController::Base
 
       render :text => result.to_s, :content_type => "text/xml"
     else
-      render :text => message, :status => status
+      render :text => message, :status => status, :content_type => "text/plain"
     end
   end
   
   def set_locale
     response.header['Vary'] = 'Accept-Language'
 
-    if @user
-      if !@user.languages.empty?
-        request.user_preferred_languages = @user.languages
-        response.header['Vary'] = '*'
-      elsif !request.user_preferred_languages.empty?
-        @user.languages = request.user_preferred_languages
-        @user.save
-      end
+    if @user && !@user.languages.empty?
+      request.user_preferred_languages = @user.languages
+      response.header['Vary'] = '*'
+    end
+
+    I18n.locale = select_locale
+
+    if @user && @user.languages.empty? && !request.user_preferred_languages.empty?
+      @user.languages = request.user_preferred_languages
+      @user.save
+    end
+
+    response.headers['Content-Language'] = I18n.locale.to_s
+  end
+
+  def select_locale(locales = I18n.available_locales)
+    if params[:locale]
+      request.user_preferred_languages = [ params[:locale] ]
     end
 
-    if request.compatible_language_from(I18n.available_locales).nil?
+    if request.compatible_language_from(locales).nil?
       request.user_preferred_languages = request.user_preferred_languages.collect do |pl|
         pls = [ pl ]
 
         while pl.match(/^(.*)-[^-]+$/)
-          pls.push($1) if I18n.available_locales.include?($1.to_sym)
+          pls.push($1) if locales.include?($1) or locales.include?($1.to_sym)
           pl = $1
         end
 
         pls
       end.flatten
-
-      if @user and not request.compatible_language_from(I18n.available_locales).nil?
-        @user.languages = request.user_preferred_languages
-        @user.save        
-      end
     end
 
-    I18n.locale = params[:locale] || request.compatible_language_from(I18n.available_locales) || I18n.default_locale
-
-    response.headers['Content-Language'] = I18n.locale.to_s
+    request.compatible_language_from(locales) || I18n.default_locale
   end
 
+  helper_method :select_locale
+
   def api_call_handle_error
     begin
       yield