discourse/db/migrate/20170313192741_add_themes.rb
Sam Saffron 30990006a9 DEV: enable frozen string literal on all files
This reduces chances of errors where consumers of strings mutate inputs
and reduces memory usage of the app.

Test suite passes now, but there may be some stuff left, so we will run
a few sites on a branch prior to merging
2019-05-13 09:31:32 +08:00

79 lines
2.4 KiB
Ruby

# frozen_string_literal: true
class AddThemes < ActiveRecord::Migration[4.2]
def up
rename_table :site_customizations, :themes
add_column :themes, :user_selectable, :bool, null: false, default: false
add_column :themes, :hidden, :bool, null: false, default: false
add_column :themes, :color_scheme_id, :integer
create_table :child_themes do |t|
t.integer :parent_theme_id
t.integer :child_theme_id
t.timestamps null: false
end
add_index :child_themes, [:parent_theme_id, :child_theme_id], unique: true
add_index :child_themes, [:child_theme_id, :parent_theme_id], unique: true
# versioning in color scheme table was very confusing, remove it
execute "DELETE FROM color_schemes WHERE versioned_id IS NOT NULL"
remove_column :color_schemes, :versioned_id
enabled_theme_count = execute("SELECT count(*) FROM themes WHERE enabled")
.to_a[0]["count"].to_i
enabled_scheme_id = execute("SELECT id FROM color_schemes WHERE enabled")
.to_a[0]&.fetch("id")
theme_key, theme_id =
execute("SELECT key, id FROM themes WHERE enabled").to_a[0]&.values
if (enabled_theme_count == 0 && enabled_scheme_id) || enabled_theme_count > 1
puts "Creating a new default theme!"
theme_key = '7e202ef2-6666-47d5-98d8-a9c8d15e57dd'
sql = <<SQL
INSERT INTO themes(name,created_at,updated_at, enabled, key, user_id)
VALUES('Default', :now, :now, false, :key, -1)
RETURNING *
SQL
sql = DB.sql_fragment(sql, now: Time.zone.now, key: theme_key)
theme_id = execute(sql).to_a[0]["id"].to_i
end
if enabled_theme_count > 1
execute <<SQL
INSERT INTO child_themes(parent_theme_id, child_theme_id, created_at, updated_at)
SELECT #{theme_id.to_i}, id, created_at, updated_at
FROM themes WHERE enabled
SQL
end
if enabled_scheme_id
execute "UPDATE themes SET color_scheme_id=#{enabled_scheme_id.to_i} WHERE id=#{theme_id.to_i}"
end
if enabled_scheme_id || (enabled_theme_count > 0)
puts "Setting default theme"
sql = <<SQL
INSERT INTO site_settings(name, data_type, value, created_at, updated_at)
VALUES('default_theme_key', 1, :key, :now, :now)
SQL
sql = DB.sql_fragment(sql, now: Time.zone.now, key: theme_key)
execute(sql)
end
remove_column :themes, :enabled
remove_column :color_schemes, :enabled
end
def down
raise IrriversibleMigration
end
end