74 lines
2.6 KiB
PHP
74 lines
2.6 KiB
PHP
<?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);
|