mirror of
https://gitlab.unicamp.br/infimecc_drupal11_modules/site_tools.git
synced 2026-05-03 17:00:40 -03:00
Refatora msc:export-translations para saída configurável
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 <noreply@anthropic.com>
This commit is contained in:
7
modules/site_tools_msc_2020_migrate/drush.services.yml
Normal file
7
modules/site_tools_msc_2020_migrate/drush.services.yml
Normal file
@@ -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 }
|
||||
@@ -0,0 +1,92 @@
|
||||
<?php
|
||||
|
||||
namespace Drupal\site_tools_msc_2020_migrate\Commands;
|
||||
|
||||
use Drupal\Core\Entity\EntityTypeManagerInterface;
|
||||
use Drush\Commands\DrushCommands;
|
||||
|
||||
/**
|
||||
* Comandos Drush para o módulo site_tools_msc_2020_migrate.
|
||||
*/
|
||||
class MscMigrateCommands extends DrushCommands {
|
||||
|
||||
public function __construct(
|
||||
protected EntityTypeManagerInterface $entityTypeManager,
|
||||
) {
|
||||
parent::__construct();
|
||||
}
|
||||
|
||||
/**
|
||||
* Exporta as traduções pt-br dos termos MSC 2020 para um arquivo CSV ou stdout.
|
||||
*
|
||||
* @command msc:export-translations
|
||||
* @argument output_path Caminho do arquivo de saída (opcional; padrão: stdout).
|
||||
* @aliases msc-et
|
||||
* @usage drush msc:export-translations
|
||||
* Exporta para stdout (pode ser redirecionado: drush msc-et > 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.");
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user