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."); + } + +}