From d14aa224457b91a50ef7d9663f1c15384e2b9a8b Mon Sep 17 00:00:00 2001 From: "Quintino A. G. Souza" Date: Sun, 15 Mar 2026 09:20:09 -0300 Subject: [PATCH] =?UTF-8?q?Refatora=20msc:export-translations=20para=20sa?= =?UTF-8?q?=C3=ADda=20configur=C3=A1vel?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit O comando passa a aceitar um argumento opcional output-path. Se fornecido, grava o CSV no caminho indicado; se omitido, escreve em stdout (permitindo redirecionamento com >). Mensagens de status (contagens, erros) sempre vão para stderr via $this->io(). O comando não lê mais nem escreve no CSV do módulo: carrega todos os termos msc_2020 do banco ordenados por field_msc_code e gera o CSV inteiramente a partir do banco (header fixo, parent_code derivado do comprimento do código). Remove a dependência de ModuleExtensionList do construtor e do drush.services.yml. Co-Authored-By: Claude Sonnet 4.6 --- .../drush.services.yml | 7 ++ .../src/Commands/MscMigrateCommands.php | 92 +++++++++++++++++++ 2 files changed, 99 insertions(+) create mode 100644 modules/site_tools_msc_2020_migrate/drush.services.yml create mode 100644 modules/site_tools_msc_2020_migrate/src/Commands/MscMigrateCommands.php diff --git a/modules/site_tools_msc_2020_migrate/drush.services.yml b/modules/site_tools_msc_2020_migrate/drush.services.yml new file mode 100644 index 0000000..e1b0f2a --- /dev/null +++ b/modules/site_tools_msc_2020_migrate/drush.services.yml @@ -0,0 +1,7 @@ +services: + site_tools_msc_2020_migrate.commands: + class: \Drupal\site_tools_msc_2020_migrate\Commands\MscMigrateCommands + arguments: + - '@entity_type.manager' + tags: + - { name: drush.command } diff --git a/modules/site_tools_msc_2020_migrate/src/Commands/MscMigrateCommands.php b/modules/site_tools_msc_2020_migrate/src/Commands/MscMigrateCommands.php new file mode 100644 index 0000000..bf9f2fd --- /dev/null +++ b/modules/site_tools_msc_2020_migrate/src/Commands/MscMigrateCommands.php @@ -0,0 +1,92 @@ + novo.csv). + * @usage drush msc:export-translations /tmp/msc_2020_updated.csv + * Exporta para o arquivo especificado. + */ + public function exportTranslations(string $output_path = ''): void { + $storage = $this->entityTypeManager->getStorage('taxonomy_term'); + $tids = $storage->getQuery() + ->condition('vid', 'msc_2020') + ->sort('field_msc_code', 'ASC') + ->accessCheck(FALSE) + ->execute(); + + $with_translation = 0; + $missing = 0; + + // Monta o CSV em memória. + $buffer = fopen('php://memory', 'r+'); + fputcsv($buffer, ['code', 'name_en', 'name_pt_br', 'parent_code']); + + foreach ($storage->loadMultiple($tids) as $term) { + $code = $term->get('field_msc_code')->value; + $name_en = $term->label(); + + if ($term->hasTranslation('pt-br')) { + $name_pt_br = $term->getTranslation('pt-br')->label(); + $with_translation++; + } + else { + $name_pt_br = ''; + $missing++; + } + + // Deriva o parent_code a partir do comprimento do código. + $len = strlen($code); + if ($len === 3) { + $parent_code = substr($code, 0, 2); + } + elseif ($len === 5) { + $parent_code = substr($code, 0, 3); + } + else { + $parent_code = ''; + } + + fputcsv($buffer, [$code, $name_en, $name_pt_br, $parent_code]); + } + + rewind($buffer); + $csv_content = stream_get_contents($buffer); + fclose($buffer); + + // Escreve no destino: arquivo ou stdout. + if ($output_path !== '') { + if (file_put_contents($output_path, $csv_content) === FALSE) { + $this->io()->error("Não foi possível escrever no arquivo: $output_path"); + return; + } + $this->io()->success("CSV exportado para: $output_path"); + } + else { + $this->output()->write($csv_content); + } + + $this->io()->success("$with_translation tradução(ões) exportada(s); $missing sem tradução pt-br."); + } + +}