summaryrefslogtreecommitdiff
path: root/app/helpers/admin/user_actions_helper.rb
diff options
context:
space:
mode:
Diffstat (limited to 'app/helpers/admin/user_actions_helper.rb')
-rw-r--r--app/helpers/admin/user_actions_helper.rb56
1 files changed, 56 insertions, 0 deletions
diff --git a/app/helpers/admin/user_actions_helper.rb b/app/helpers/admin/user_actions_helper.rb
new file mode 100644
index 00000000000..cd520a75b44
--- /dev/null
+++ b/app/helpers/admin/user_actions_helper.rb
@@ -0,0 +1,56 @@
+# frozen_string_literal: true
+
+module Admin
+ module UserActionsHelper
+ def admin_actions(user)
+ return [] if user.internal?
+
+ @actions ||= ['edit']
+
+ return @actions if user == current_user
+
+ @user ||= user
+
+ blocked_actions
+ deactivate_actions
+ unlock_actions
+ delete_actions
+
+ @actions
+ end
+
+ private
+
+ def blocked_actions
+ if @user.ldap_blocked?
+ @actions << 'ldap'
+ elsif @user.blocked? && @user.blocked_pending_approval?
+ @actions << 'approve'
+ @actions << 'reject'
+ elsif @user.blocked?
+ @actions << 'unblock'
+ else
+ @actions << 'block'
+ end
+ end
+
+ def deactivate_actions
+ if @user.can_be_deactivated?
+ @actions << 'deactivate'
+ elsif @user.deactivated?
+ @actions << 'activate'
+ end
+ end
+
+ def unlock_actions
+ @actions << 'unlock' if @user.access_locked?
+ end
+
+ def delete_actions
+ return unless can?(current_user, :destroy_user, @user) && !@user.blocked_pending_approval? && @user.can_be_removed?
+
+ @actions << 'delete'
+ @actions << 'delete_with_contributions'
+ end
+ end
+end