summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKen D'Ambrosio <ken@jots.org>2026-06-18 21:57:30 +0000
committerKen D'Ambrosio <ken@jots.org>2026-06-18 21:57:30 +0000
commit547b51c0ec6be8786eea625423d24f0ae1a884c0 (patch)
tree5ed73b6ec395cd7821bcd29edb329c344c13df81
parent121e29cecd39112193b7275be343ca0d7c87019a (diff)
Add "move to new person" bulk action
People bulk-move previously required moving members into an existing person, the pool, or the blacklist; this adds a "new person" target that creates a fresh cluster from the selected faces. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
-rw-r--r--app.rb13
-rw-r--r--views/admin/person_detail.erb1
2 files changed, 13 insertions, 1 deletions
diff --git a/app.rb b/app.rb
index bf7c11f..ff1e1fa 100644
--- a/app.rb
+++ b/app.rb
@@ -1037,6 +1037,8 @@ post '/admin/people/:uuid/bulk_move' do
people[src]['members'] -= to_move
+ new_uid = nil
+
case action
when 'blacklist'
data['blacklist'] ||= []
@@ -1044,6 +1046,9 @@ post '/admin/people/:uuid/bulk_move' do
when 'pool'
people['__pool__'] ||= { 'name' => '__pool__', 'slug' => nil, 'members' => [] }
people['__pool__']['members'].concat(to_move)
+ when 'new'
+ new_uid = SecureRandom.uuid
+ people[new_uid] = { 'name' => nil, 'slug' => nil, 'members' => to_move }
when /\A[0-9a-f-]{36}\z/
halt 404 unless people.key?(action)
people[action]['members'].concat(to_move)
@@ -1055,7 +1060,13 @@ post '/admin/people/:uuid/bulk_move' do
data['people'] = people
atomic_write(PEOPLE_PATH, JSON.pretty_generate(data))
- people[src] ? redirect("/admin/people/#{src}") : redirect('/admin/people')
+ if new_uid
+ redirect "/admin/people/#{new_uid}"
+ elsif people[src]
+ redirect "/admin/people/#{src}"
+ else
+ redirect '/admin/people'
+ end
end
post '/admin/people/:uuid/merge' do
diff --git a/views/admin/person_detail.erb b/views/admin/person_detail.erb
index 10319cf..2715f4f 100644
--- a/views/admin/person_detail.erb
+++ b/views/admin/person_detail.erb
@@ -62,6 +62,7 @@
<% @named_others.each do |p| %>
<option value="<%= ERB::Util.html_escape(p[:uuid]) %>">Move to: <%= ERB::Util.html_escape(p[:name]) %></option>
<% end %>
+ <option value="new">Move to new person…</option>
<option value="pool">Move to pool</option>
<option value="blacklist">Blacklist</option>
</select>