53 lines
1.9 KiB
PHP
53 lines
1.9 KiB
PHP
<?php
|
|
|
|
namespace Modules\Core\MigrateImport\Services;
|
|
|
|
use Lunar\Models\Language;
|
|
|
|
/**
|
|
* The language every resolver in an import run writes product-facing text
|
|
* under (name, description, option names, ...) — NOT necessarily this
|
|
* store's own Lunar\Models\Language::getDefault(). An export file has no
|
|
* reliable way to declare its own language, and a store's default admin/
|
|
* storefront language is an independent fact from whatever language a
|
|
* given export happens to be written in — conflating the two (this
|
|
* class's own former name, DefaultLocale, said as much) used to silently
|
|
* save every imported product's text under the wrong language, invisible
|
|
* unless that language was also the one selected while viewing/editing
|
|
* the product afterward.
|
|
*
|
|
* Set once per import run from the operator's own answer (see
|
|
* Command\MigrateImportCommand::askImportLocale(), threaded through
|
|
* ImportSpec::$locale) at the top of Importer::import() — every resolver
|
|
* downstream (ProductAttributeResolver, ProductOptionResolver,
|
|
* CollectionResolver, ImportAttributeResolver) calls code() exactly as
|
|
* before, unaware anything changed. Falls back to Language::getDefault()
|
|
* only when nothing was ever set (e.g. an import path with no locale
|
|
* concept of its own — JudgeMe's reviews-only export never calls set()).
|
|
*/
|
|
class ImportLocale
|
|
{
|
|
private static ?string $code = null;
|
|
|
|
public static function set(string $code): void
|
|
{
|
|
self::$code = $code;
|
|
}
|
|
|
|
public static function code(): string
|
|
{
|
|
return self::$code ?? Language::getDefault()->code;
|
|
}
|
|
|
|
/**
|
|
* A static property outlives a single request only inside a
|
|
* long-running worker process, where a queued job for one import
|
|
* must not leak its locale into the next — called at the end of
|
|
* every Importer::import() run, success or failure.
|
|
*/
|
|
public static function reset(): void
|
|
{
|
|
self::$code = null;
|
|
}
|
|
}
|