From d6c8089ca38611b09a8edb29d64f359bcef11f11 Mon Sep 17 00:00:00 2001 From: Gerhard Schlager Date: Tue, 22 Nov 2022 00:24:16 +0100 Subject: [PATCH] FIX: Use generic, static names for badges This is necessary, because seeding badges with a translated name will result in duplicate badges whenever the default locale changes. The static name solves this. Moreover, it's not necessary to set the description during seeding. The serializer will localize the names and descriptions at runtime. The DB migration tries to rename the existing badges by looking them up by their translated time. --- config/locales/server.en.yml | 4 +- db/fixtures/001_badges.rb | 14 ++--- db/migrate/20221121223417_rename_badges.rb | 70 ++++++++++++++++++++++ 3 files changed, 78 insertions(+), 10 deletions(-) create mode 100644 db/migrate/20221121223417_rename_badges.rb diff --git a/config/locales/server.en.yml b/config/locales/server.en.yml index 18b9e5b..2883409 100644 --- a/config/locales/server.en.yml +++ b/config/locales/server.en.yml @@ -26,10 +26,10 @@ en: others: "No accepted solutions." badges: - helpdesk: + solved_1: name: "Helpdesk" description: "First Accepted Answer on a Topic" - tech_support: + solved_2: name: "Tech Support" description: "10 Accepted answers" diff --git a/db/fixtures/001_badges.rb b/db/fixtures/001_badges.rb index d205629..2c6a885 100644 --- a/db/fixtures/001_badges.rb +++ b/db/fixtures/001_badges.rb @@ -2,7 +2,7 @@ return unless badge_grouping = BadgeGrouping.find_by(name: "Community") -helpdesk_query = <<-SQL +first_solution_query = <<-SQL SELECT post_id, user_id, created_at AS granted_at FROM ( SELECT p.id AS post_id, p.user_id, pcf.created_at, @@ -18,12 +18,11 @@ helpdesk_query = <<-SQL SQL Badge.seed(:name) do |badge| - badge.name = I18n.t("badges.helpdesk.name") + badge.name = "Solved 1" badge.icon = "check-square" badge.badge_type_id = 3 badge.badge_grouping = badge_grouping - badge.description = I18n.t("badges.helpdesk.description") - badge.query = helpdesk_query + badge.query = first_solution_query badge.listable = true badge.target_posts = true badge.enabled = false @@ -33,7 +32,7 @@ Badge.seed(:name) do |badge| badge.system = true end -tech_support_query = <<-SQL +solved_10_query = <<-SQL SELECT p.user_id, MAX(pcf.created_at) AS granted_at FROM post_custom_fields pcf JOIN badge_posts p ON pcf.post_id = p.id @@ -46,12 +45,11 @@ tech_support_query = <<-SQL SQL Badge.seed(:name) do |badge| - badge.name = I18n.t("badges.tech_support.name") + badge.name = "Solved 2" badge.icon = "check-square" badge.badge_type_id = 2 badge.badge_grouping = badge_grouping - badge.description = I18n.t("badges.tech_support.description") - badge.query = tech_support_query + badge.query = solved_10_query badge.listable = true badge.allow_title = true badge.target_posts = false diff --git a/db/migrate/20221121223417_rename_badges.rb b/db/migrate/20221121223417_rename_badges.rb new file mode 100644 index 0000000..fceadaf --- /dev/null +++ b/db/migrate/20221121223417_rename_badges.rb @@ -0,0 +1,70 @@ +# frozen_string_literal: true + +class RenameBadges < ActiveRecord::Migration[6.1] + HELPDESK_TRANSLATIONS = { + "ar" => "مكتب المساعدة", + "el" => "Γραφείο βοήθειας", + "es" => "Servicio de ayuda", + "fi" => "Neuvonta", + "fr" => "Service d'assistance", + "he" => "דלפק עזרה", + "hu" => "Ügyfélszolgálat", + "ja" => "ヘルプデスク", + "ko" => "안내 데스크", + "pl_PL" => "Dział pomocy technicznej", + "ro" => "Ajutor", + "ru" => "Служба поддержки", + "sl" => "Služba za pomoč", + "sv" => "Kundtjänst", + "tr_TR" => "Yardım masası", + "zh_CN" => "帮助台", + "zh_TW" => "服務台" + } + + TECH_SUPPORT_TRANSLATIONS = { + "ar" => "الدعم الفني", + "de" => "Technischer Support", + "el" => "Τεχνική υποστήριξη", + "es" => "Asistencia técnica", + "fi" => "Tukipalvelu", + "fr" => "Assistance technique", + "he" => "תמיכה טכנית", + "hu" => "Műszaki támogatás", + "id" => "Dukungan Teknis", + "it" => "Supporto Tecnico", + "ja" => "技術サポート", + "ko" => "기술 지원", + "nl" => "Technische ondersteuning", + "pl_PL" => "Wsparcie techniczne", + "pt_BR" => "Suporte Técnico", + "ro" => "Asistenţă tehnică", + "ru" => "Техническая поддержка", + "sl" => "Tehnična podpora", + "sv" => "Teknisk support", + "tr_TR" => "Teknik Destek", + "zh_CN" => "技术支持", + "zh_TW" => "技術支援" + } + + def up + default_locale = DB.query_single("SELECT value FROM site_settings WHERE name = 'default_locale'").first || "en" + + sql = <<~SQL + UPDATE badges + SET name = :new_name, + description = NULL, + long_description = NULL + WHERE name = :old_name + SQL + + badge_name = HELPDESK_TRANSLATIONS.fetch(default_locale, "Helpdesk") + DB.exec(sql, old_name: badge_name, new_name: "Solved 1") + + badge_name = TECH_SUPPORT_TRANSLATIONS.fetch(default_locale, "Tech Support") + DB.exec(sql, old_name: badge_name, new_name: "Solved 2") + end + + def down + raise ActiveRecord::IrreversibleMigration + end +end