discourse/db/migrate/20221125173217_remove_enabl...

42 lines
1.4 KiB
Ruby

# frozen_string_literal: true
class RemoveEnableWhispersSiteSetting < ActiveRecord::Migration[7.0]
def up
# If enable_whispers was true, insert whispers_allowed_groups or add
# staff group to whispers_allowed_groups. This is necessary to keep
# the current behavior which has a bypass for staff members.
execute <<~SQL
INSERT INTO site_settings(name, data_type, value, created_at, updated_at)
SELECT 'whispers_allowed_groups', '20', '3', created_at, NOW()
FROM site_settings
WHERE name = 'enable_whispers' AND value = 't'
ON CONFLICT DO NOTHING
SQL
execute <<~SQL
UPDATE site_settings
SET value = array_to_string(array_append(string_to_array(value, '|'), '3'), '|')
WHERE name = 'whispers_allowed_groups' AND
EXISTS(SELECT 1 FROM site_settings WHERE name = 'enable_whispers' AND value = 't') AND
NOT '3' = ANY(string_to_array(value, '|'))
SQL
# If enable_whispers was false, reset whispers_allowed_groups
execute <<~SQL
UPDATE site_settings
SET value = ''
WHERE name = 'whispers_allowed_groups' AND
NOT EXISTS(SELECT 1 FROM site_settings WHERE name = 'enable_whispers' AND value = 't')
SQL
# Delete enable_whispers site setting
execute <<~SQL
DELETE FROM site_settings WHERE name = 'enable_whispers'
SQL
end
def down
raise ActiveRecord::IrreversibleMigration
end
end