Skip to content

Commit

Permalink
Merge branch 'feat/dump-untranslated-attributes' into UPM-3
Browse files Browse the repository at this point in the history
  • Loading branch information
rastislav-chynoransky committed Dec 14, 2024
2 parents 5b3cde8 + f0c259e commit 3656fd8
Showing 1 changed file with 59 additions and 0 deletions.
59 changes: 59 additions & 0 deletions app/Console/Commands/DumpUntranslatedAttributes.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
<?php

namespace App\Console\Commands;

use App\ItemTranslation;
use Illuminate\Console\Command;
use Illuminate\Support\LazyCollection;
use Illuminate\Support\Str;

class DumpUntranslatedAttributes extends Command
{
protected $signature = 'items:dump-untranslated-attributes
{--prefix= : Filter by prefix}';

private array $attributes = [
'work_type' => 'item.work_types',
'technique' => 'item.techniques',
'medium' => 'item.media',
'object_type' => 'item.object_types',
'topic' => 'item.topics',
];

public function handle(): int
{
$attribute = $this->choice('Select attribute', array_keys($this->attributes));
$locale = $this->choice('Select locale', config('translatable.locales'));
$prefix = $this->option('prefix');

$rows = $this->getUntranslatedAttributes($attribute, $locale, $prefix)
->map(fn ($count, $value) => [$value, $count]);

$header = sprintf('%s (%s)', Str::ucfirst(trans("item.$attribute")), Str::upper($locale));
$this->table([$header, 'Count'], $rows);

return self::SUCCESS;
}

private function getUntranslatedAttributes(string $attribute, string $locale, ?string $prefix): LazyCollection
{
$translations = trans($this->attributes[$attribute], locale: $locale);

return $this->getValuesWithCounts($attribute, $locale, $prefix)
->reject(fn ($count, $value) => in_array($value, $translations))
->sortDesc();
}

private function getValuesWithCounts(string $attribute, string $locale, ?string $prefix): LazyCollection
{
return ItemTranslation::query()
->select($attribute)
->where('locale', $locale)
->when($prefix, fn ($query) => $query->where('item_id', 'like', "$prefix%"))
->lazy()
->pluck($attribute)
->flatMap(fn ($value) => str($value)->split('/\s*;\s*/'))
->filter()
->countBy();
}
}

0 comments on commit 3656fd8

Please sign in to comment.