]> git.openstreetmap.org Git - rails.git/blobdiff - app/controllers/user_blocks_controller.rb
Remove revoke buttons from block lists
[rails.git] / app / controllers / user_blocks_controller.rb
index 664ac56815d6e541de2de2e839b04aa188867f38..7027359ccad24c86c724814f9d22f20cbca90bd7 100644 (file)
@@ -21,11 +21,17 @@ class UserBlocksController < ApplicationController
     user_blocks = UserBlock.all
 
     @user_blocks, @newer_user_blocks_id, @older_user_blocks_id = get_page_items(user_blocks, :includes => [:user, :creator, :revoker])
+
+    @show_user_name = true
+    @show_creator_name = true
+
+    render :partial => "blocks" if turbo_frame_request_id == "pagination"
   end
 
   def show
     if current_user && current_user == @user_block.user
       @user_block.needs_view = false
+      @user_block.deactivates_at = [@user_block.ends_at, Time.now.utc].max
       @user_block.save!
     end
   end
@@ -49,6 +55,7 @@ class UserBlocksController < ApplicationController
         :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)
@@ -63,19 +70,35 @@ class UserBlocksController < ApplicationController
 
   def update
     if @valid_params
-      if current_user != @user_block.creator &&
-         current_user != @user_block.revoker
+      if cannot?(:update, @user_block)
         flash[:error] = t(@user_block.revoker ? ".only_creator_or_revoker_can_edit" : ".only_creator_can_edit")
         redirect_to :action => "edit"
-      elsif @user_block.update(
-        :ends_at => Time.now.utc + @block_period.hours,
-        :reason => params[:user_block][:reason],
-        :needs_view => params[:user_block][:needs_view]
-      )
-        flash[:notice] = t(".success")
-        redirect_to(@user_block)
       else
-        render :action => "edit"
+        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?
+        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
+          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
+          else
+            render :action => "edit"
+          end
+        end
       end
     else
       redirect_to edit_user_block_path(:id => params[:id])
@@ -109,6 +132,11 @@ class UserBlocksController < ApplicationController
     user_blocks = UserBlock.where(:user => @user)
 
     @user_blocks, @newer_user_blocks_id, @older_user_blocks_id = get_page_items(user_blocks, :includes => [:user, :creator, :revoker])
+
+    @show_user_name = false
+    @show_creator_name = true
+
+    render :partial => "blocks" if turbo_frame_request_id == "pagination"
   end
 
   ##
@@ -119,6 +147,11 @@ class UserBlocksController < ApplicationController
     user_blocks = UserBlock.where(:creator => @user)
 
     @user_blocks, @newer_user_blocks_id, @older_user_blocks_id = get_page_items(user_blocks, :includes => [:user, :creator, :revoker])
+
+    @show_user_name = true
+    @show_creator_name = false
+
+    render :partial => "blocks" if turbo_frame_request_id == "pagination"
   end
 
   private