nur-sery/src/output/msg.php

78 lines
2.2 KiB
PHP
Raw Normal View History

2023-12-27 11:38:43 +04:00
<?php
namespace nur\sery\output;
2023-12-28 11:54:15 +04:00
use nur\sery\output\std\ProxyMessenger;
2024-06-11 15:56:54 +04:00
use nur\sery\php\func;
2024-05-22 20:44:20 +04:00
use nur\sery\ValueException;
2023-12-28 11:54:15 +04:00
2023-12-27 11:38:43 +04:00
/**
* Class msg: inscrire un message dans les logs ET l'afficher sur la console
2024-04-05 19:36:32 +04:00
*
* Cette classe DOIT être initialisée avec {@link set_messenger()} ou
2024-06-11 15:56:54 +04:00
* {@link set_messenger_class()} avant d'être utilisée.
2023-12-27 11:38:43 +04:00
*/
class msg extends _messenger {
2024-06-11 15:56:54 +04:00
private static ?IMessenger $msg = null;
private static bool $setup = false;
static function is_setup(): bool {
return self::$setup;
}
static function set_messenger(IMessenger $msg) {
self::$msg = $msg;
self::$setup = true;
}
static function get(): IMessenger {
return self::$msg ??= new ProxyMessenger();
2023-12-28 15:59:45 +04:00
}
2024-06-11 15:56:54 +04:00
/**
* initialiser les instances say, console, log.
*/
static function init(array $msgs) {
$say = $msgs["say"] ?? null;
$console = $msgs["console"] ?? null;
$log = $msgs["log"] ?? null;
$msgs = [];
if ($log !== null && $log !== false) {
if ($log instanceof IMessenger) log::set_messenger($log);
elseif (is_string($log)) log::set_messenger_class($log);
elseif (is_array($log)) {
func::ensure_class($log, $args);
$log = func::cons($log, $args);
}
2024-06-11 15:56:54 +04:00
log::set_messenger($log);
$msgs[] = $log;
2023-12-28 15:59:45 +04:00
}
2024-06-11 15:56:54 +04:00
if ($console !== null && $console !== false) {
if ($console instanceof IMessenger) console::set_messenger($console);
elseif (is_string($console)) console::set_messenger_class($console);
elseif (is_array($console)) {
func::ensure_class($console, $args);
$console = func::cons($console, $args);
2023-12-28 15:59:45 +04:00
}
2024-06-11 15:56:54 +04:00
console::set_messenger($console);
$msgs[] = $console;
2023-12-28 15:59:45 +04:00
}
2024-06-11 15:56:54 +04:00
if ($say !== null && $say !== false) {
if ($say instanceof IMessenger) say::set_messenger($say);
elseif (is_string($say)) say::set_messenger_class($say);
elseif (is_array($say)) {
func::ensure_class($say, $args);
$say = func::cons($say, $args);
}
say::set_messenger($say);
$msgs[] = $say;
}
2024-06-11 15:56:54 +04:00
if ($say === null && $console !== null) {
say::set_messenger($console);
} elseif ($console === null && $say !== null) {
console::set_messenger($say);
2023-12-28 11:54:15 +04:00
}
2024-06-11 15:56:54 +04:00
self::set_messenger(new ProxyMessenger(...$msgs));
2023-12-27 11:38:43 +04:00
}
}