Files
preland/bin/ensure-focus-config.php
T

74 lines
2.6 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?php
/**
* Точечно включает UTM focus в рабочем конфиге приленда на хостинге.
*
* Значения уже существующих полей конфигурации намеренно не нормализуются и
* не переписываются: владелец настраивает их непосредственно на стенде или
* production. В #274 владелец явно задал значения самого нового ключа focus:
* face включён и для TypeIn default, и для rnd. Скрипт возвращает 0, когда
* focus уже совпадает с этим контрактом, и 10, когда требуется загрузить
* обратно config.json с изменённым только focus.
*
* @usage php bin/ensure-focus-config.php /path/to/config.json
*/
declare(strict_types=1);
if ($argc !== 2) {
fwrite(STDERR, "Использование: php bin/ensure-focus-config.php /path/to/config.json\n");
exit(2);
}
$path = $argv[1];
$raw = @file_get_contents($path);
if ($raw === false) {
fwrite(STDERR, "Не удалось прочитать config.json.\n");
exit(2);
}
try {
$config = json_decode($raw, true, 512, JSON_THROW_ON_ERROR);
} catch (JsonException $exception) {
fwrite(STDERR, "config.json содержит некорректный JSON: {$exception->getMessage()}\n");
exit(2);
}
if (!is_array($config) || !isset($config['utm']) || !is_array($config['utm'])) {
fwrite(STDERR, "В config.json отсутствует объект utm.\n");
exit(2);
}
/** Единственное явно согласованное изменение host-config в #274. */
$focus = [
'weights' => [
'center' => 0,
'face' => 1,
],
'default' => 'face',
];
if (($config['utm']['focus'] ?? null) === $focus) {
fwrite(STDOUT, "focus уже включён: конфиг не изменён.\n");
exit(0);
}
$config['utm']['focus'] = $focus;
try {
$encoded = json_encode(
$config,
JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES | JSON_THROW_ON_ERROR
) . "\n";
} catch (JsonException $exception) {
fwrite(STDERR, "Не удалось сериализовать config.json: {$exception->getMessage()}\n");
exit(2);
}
if (file_put_contents($path, $encoded, LOCK_EX) === false) {
fwrite(STDERR, "Не удалось записать обновлённый config.json.\n");
exit(2);
}
fwrite(STDOUT, "Изменён только utm.focus: face включён по умолчанию и для rnd.\n");
exit(10);