From 2c32c3c5369c80d572eb524ea5b2ec93fe36b4af Mon Sep 17 00:00:00 2001 From: Jeffrey Hardy Date: Tue, 17 Sep 2024 16:05:30 -0400 Subject: [PATCH] Use checkboxes to toggle accesses in bulk --- .../projects/accesses_controller.rb | 19 +++++++++++++++ app/controllers/projects/users_controller.rb | 24 ------------------- app/models/user.rb | 2 ++ app/views/projects/accesses/edit.html.erb | 14 +++++++++++ app/views/projects/users/index.html.erb | 7 ------ config/routes.rb | 2 +- 6 files changed, 36 insertions(+), 32 deletions(-) create mode 100644 app/controllers/projects/accesses_controller.rb delete mode 100644 app/controllers/projects/users_controller.rb create mode 100644 app/views/projects/accesses/edit.html.erb delete mode 100644 app/views/projects/users/index.html.erb diff --git a/app/controllers/projects/accesses_controller.rb b/app/controllers/projects/accesses_controller.rb new file mode 100644 index 000000000..fed94ea59 --- /dev/null +++ b/app/controllers/projects/accesses_controller.rb @@ -0,0 +1,19 @@ +class Projects::AccessesController < ApplicationController + include ProjectScoped + + def edit + @users = @project.users + end + + def update + update_access + redirect_to project_access_url(@project) + end + + private + def update_access + users = Current.account.users.active.find([ Current.user.id, *params[:user_ids] ]) + users.each { |user| @project.accesses.create_or_find_by!(user: user) } + @project.accesses.where.not(user: users).destroy_all + end +end diff --git a/app/controllers/projects/users_controller.rb b/app/controllers/projects/users_controller.rb deleted file mode 100644 index 1eff78578..000000000 --- a/app/controllers/projects/users_controller.rb +++ /dev/null @@ -1,24 +0,0 @@ -class Projects::UsersController < ApplicationController - include ProjectScoped - - before_action :set_user, except: %i[ index ] - - def index - @users = @project.users - end - - def create - @project.accesses.create_or_find_by!(user: @user) - redirect_to project_users_url(@project) - end - - def destroy - @project.accesses.destroy_by(user: @user) - redirect_to project_users_url(@project) - end - - private - def set_user - @user = Current.account.users.find(params[:id]) - end -end diff --git a/app/models/user.rb b/app/models/user.rb index bb9126890..1f3373fae 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -13,6 +13,8 @@ class User < ApplicationRecord normalizes :email_address, with: ->(value) { value.strip.downcase } + scope :active, -> { where(active: true) } + def initials name.scan(/\b\w/).join end diff --git a/app/views/projects/accesses/edit.html.erb b/app/views/projects/accesses/edit.html.erb new file mode 100644 index 000000000..885f662e6 --- /dev/null +++ b/app/views/projects/accesses/edit.html.erb @@ -0,0 +1,14 @@ +

Users on <%= @project.name %>

+ +<%= form_with url: project_access_path, method: :put do |form| %> + + + <%= form.submit %> +<% end %> diff --git a/app/views/projects/users/index.html.erb b/app/views/projects/users/index.html.erb deleted file mode 100644 index 60e0ac8eb..000000000 --- a/app/views/projects/users/index.html.erb +++ /dev/null @@ -1,7 +0,0 @@ -

Users on <%= @project.name %>

- - diff --git a/config/routes.rb b/config/routes.rb index 747f37e1f..310820a4f 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -4,7 +4,7 @@ Rails.application.routes.draw do resource :session resources :projects do - resources :users, controller: "projects/users" + resource :access, controller: "projects/accesses" end resources :bubbles do