]> git.openstreetmap.org Git - rails.git/blobdiff - app/controllers/user_blocks_controller.rb
Merge remote-tracking branch 'upstream/pull/5410'
[rails.git] / app / controllers / user_blocks_controller.rb
index 167223d919f001147d54598b115e95d7884d04e6..d427e5fa515bee1b2a4454cc1b1624a112d794cf 100644 (file)
@@ -10,10 +10,10 @@ class UserBlocksController < ApplicationController
   authorize_resource
 
   before_action :lookup_user, :only => [:new, :create, :revoke_all, :blocks_on, :blocks_by]
   authorize_resource
 
   before_action :lookup_user, :only => [:new, :create, :revoke_all, :blocks_on, :blocks_by]
-  before_action :lookup_user_block, :only => [:show, :edit, :update, :revoke]
+  before_action :lookup_user_block, :only => [:show, :edit, :update]
   before_action :require_valid_params, :only => [:create, :update]
   before_action :check_database_readable
   before_action :require_valid_params, :only => [:create, :update]
   before_action :check_database_readable
-  before_action :check_database_writable, :only => [:create, :update, :revoke, :revoke_all]
+  before_action :check_database_writable, :only => [:create, :update, :revoke_all]
 
   def index
     @params = params.permit
 
   def index
     @params = params.permit
@@ -25,12 +25,13 @@ class UserBlocksController < ApplicationController
     @show_user_name = true
     @show_creator_name = true
 
     @show_user_name = true
     @show_creator_name = true
 
-    render :partial => "blocks" if turbo_frame_request_id == "pagination"
+    render :partial => "page" if turbo_frame_request_id == "pagination"
   end
 
   def show
   end
 
   def show
-    if current_user && current_user == @user_block.user
+    if current_user && current_user == @user_block.user && !@user_block.deactivates_at
       @user_block.needs_view = false
       @user_block.needs_view = false
+      @user_block.deactivates_at = [@user_block.ends_at, Time.now.utc].max
       @user_block.save!
     end
   end
       @user_block.save!
     end
   end
@@ -54,6 +55,7 @@ class UserBlocksController < ApplicationController
         :ends_at => now + @block_period.hours,
         :needs_view => params[:user_block][:needs_view]
       )
         :ends_at => now + @block_period.hours,
         :needs_view => params[:user_block][:needs_view]
       )
+      @user_block.deactivates_at = @user_block.ends_at unless @user_block.needs_view
 
       if @user_block.save
         flash[:notice] = t(".flash", :name => @user.display_name)
 
       if @user_block.save
         flash[:notice] = t(".flash", :name => @user.display_name)
@@ -68,21 +70,28 @@ class UserBlocksController < ApplicationController
 
   def update
     if @valid_params
 
   def update
     if @valid_params
-      if current_user != @user_block.creator &&
-         current_user != @user_block.revoker
-        flash[:error] = t(@user_block.revoker ? ".only_creator_or_revoker_can_edit" : ".only_creator_can_edit")
+      if cannot?(:update, @user_block)
+        flash[:error] = @user_block.revoker ? t(".only_creator_or_revoker_can_edit") : t(".only_creator_can_edit")
         redirect_to :action => "edit"
       else
         user_block_was_active = @user_block.active?
         @user_block.reason = params[:user_block][:reason]
         @user_block.needs_view = params[:user_block][:needs_view]
         @user_block.ends_at = Time.now.utc + @block_period.hours
         redirect_to :action => "edit"
       else
         user_block_was_active = @user_block.active?
         @user_block.reason = params[:user_block][:reason]
         @user_block.needs_view = params[:user_block][:needs_view]
         @user_block.ends_at = Time.now.utc + @block_period.hours
+        @user_block.deactivates_at = (@user_block.ends_at unless @user_block.needs_view)
         @user_block.revoker = current_user if user_block_was_active && !@user_block.active?
         @user_block.revoker = current_user if user_block_was_active && !@user_block.active?
-        if !user_block_was_active && @user_block.active?
+        if user_block_was_active && @user_block.active? && current_user != @user_block.creator
+          flash.now[:error] = t(".only_creator_can_edit_without_revoking")
+          render :action => "edit"
+        elsif !user_block_was_active && @user_block.active?
           flash.now[:error] = t(".inactive_block_cannot_be_reactivated")
           render :action => "edit"
         else
           flash.now[:error] = t(".inactive_block_cannot_be_reactivated")
           render :action => "edit"
         else
-          @user_block.ends_at = @user_block.ends_at_was unless user_block_was_active
+          unless user_block_was_active
+            @user_block.ends_at = @user_block.ends_at_was
+            @user_block.deactivates_at = @user_block.deactivates_at_was
+            @user_block.deactivates_at = [@user_block.ends_at, @user_block.updated_at].max unless @user_block.deactivates_at # take updated_at into account before deactivates_at is backfilled
+          end
           if @user_block.save
             flash[:notice] = t(".success")
             redirect_to @user_block
           if @user_block.save
             flash[:notice] = t(".success")
             redirect_to @user_block
@@ -96,15 +105,6 @@ class UserBlocksController < ApplicationController
     end
   end
 
     end
   end
 
-  ##
-  # revokes the block, setting the end_time to now
-  def revoke
-    if request.post? && params[:confirm] && @user_block.revoke!(current_user)
-      flash[:notice] = t ".flash"
-      redirect_to(@user_block)
-    end
-  end
-
   ##
   # revokes all active blocks
   def revoke_all
   ##
   # revokes all active blocks
   def revoke_all
@@ -127,7 +127,7 @@ class UserBlocksController < ApplicationController
     @show_user_name = false
     @show_creator_name = true
 
     @show_user_name = false
     @show_creator_name = true
 
-    render :partial => "blocks" if turbo_frame_request_id == "pagination"
+    render :partial => "page" if turbo_frame_request_id == "pagination"
   end
 
   ##
   end
 
   ##
@@ -142,7 +142,7 @@ class UserBlocksController < ApplicationController
     @show_user_name = true
     @show_creator_name = false
 
     @show_user_name = true
     @show_creator_name = false
 
-    render :partial => "blocks" if turbo_frame_request_id == "pagination"
+    render :partial => "page" if turbo_frame_request_id == "pagination"
   end
 
   private
   end
 
   private