]> source.dussan.org Git - redmine.git/commitdiff
Cleanup in TimelogController#destroy.
authorJean-Philippe Lang <jp_lang@yahoo.fr>
Sun, 4 Mar 2012 15:24:14 +0000 (15:24 +0000)
committerJean-Philippe Lang <jp_lang@yahoo.fr>
Sun, 4 Mar 2012 15:24:14 +0000 (15:24 +0000)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9095 e93f8b46-1217-0410-a6f0-8f06a7374b81

app/controllers/application_controller.rb
app/controllers/timelog_controller.rb

index 24b45f6acd9fcde16032fbe4eda7bce9eff3adf3..bf62d7ff27db750f6344b800eab33210fa7cb520 100644 (file)
@@ -507,8 +507,12 @@ class ApplicationController < ActionController::Base
   end
 
   # Renders API response on validation failure
-  def render_validation_errors(object)
-    @error_messages = object.errors.full_messages
+  def render_validation_errors(objects)
+    if objects.is_a?(Array)
+      @error_messages = objects.map {|object| object.errors.full_messages}.flatten
+    else
+      @error_messages = objects.errors.full_messages
+    end
     render :template => 'common/error_messages.api', :status => :unprocessable_entity, :layout => false
   end
 
index 2feb129e2939812c5908ad0eda90ecc85e67999f..d6d1911e7a5f478b2b057810605e94d79affb775 100644 (file)
@@ -199,30 +199,30 @@ class TimelogController < ApplicationController
   end
 
   def destroy
-    @time_entries.each do |t|
-      begin
+    destroyed = TimeEntry.transaction do
+      @time_entries.each do |t|
         unless t.destroy && t.destroyed?
-          respond_to do |format|
-            format.html {
-              flash[:error] = l(:notice_unable_delete_time_entry)
-              redirect_to :back
-            }
-            format.api  { render_validation_errors(t) }
-          end
-          return
+          raise ActiveRecord::Rollback
         end
-      rescue ::ActionController::RedirectBackError
-        redirect_to :action => 'index', :project_id => @projects.first
-        return
       end
     end
 
     respond_to do |format|
       format.html {
-        flash[:notice] = l(:notice_successful_delete)
+        if destroyed
+          flash[:notice] = l(:notice_successful_delete)
+        else
+          flash[:error] = l(:notice_unable_delete_time_entry)
+        end
         redirect_back_or_default(:action => 'index', :project_id => @projects.first)
       }
-      format.api  { head :ok }
+      format.api  {
+        if destroyed
+          head :ok
+        else
+          render_validation_errors(@time_entries)
+        end
+      }
     end
   end