nur-sery/src/output/_messenger.php

94 lines
3.8 KiB
PHP
Raw Normal View History

2023-12-27 11:38:43 +04:00
<?php
namespace nur\sery\output;
use nulib\str;
2023-12-28 11:54:15 +04:00
use nulib\ValueException;
2023-12-27 11:38:43 +04:00
/**
* Class _messenger: classe de base pour say, log et msg
*/
abstract class _messenger {
/** @var IMessenger */
protected static $say;
/** @var IMessenger */
protected static $log;
static final function set_messenger(IMessenger $say, ?IMessenger $log=null) {
self::$say = $say;
if ($log !== null) self::$log = $log;
}
static final function set_messenger_class(string $say_class, ?string $log_class=null) {
if (!is_subclass_of($say_class, IMessenger::class)) {
throw ValueException::unexpected_class($say_class, IMessenger::class);
}
self::$say = new $say_class();
if ($log_class !== null) {
if (!is_subclass_of($log_class, IMessenger::class)) {
throw ValueException::unexpected_class($log_class, IMessenger::class);
}
self::$log = new $log_class();
}
}
2023-12-28 11:54:15 +04:00
abstract static function get(): IMessenger;
/** obtenir une nouvelle instance, avec un nouveau paramétrage */
static function new(?array $params=null): IMessenger {
return static::get()->clone($params);
}
/** @var IMessenger */
protected static $msg;
/** @var IMessenger[] */
protected static $stack;
/** pousser une nouvelle instance avec un nouveau paramétrage sur la pile */
static function push(?array $params=null) {
self::$stack[] = static::get();
self::$msg = self::new($params);
}
/** dépiler la précédente instance */
static function pop(): IMessenger {
if (self::$stack) $msg = self::$msg = array_pop(self::$stack);
else $msg = self::$msg;
return $msg;
}
2023-12-27 11:38:43 +04:00
static final function __callStatic($name, $args) {
$name = str::us2camel($name);
2023-12-28 11:54:15 +04:00
call_user_func_array([static::get(), $name], $args);
2023-12-27 11:38:43 +04:00
}
#############################################################################
const DEBUG = IMessenger::LEVEL_DEBUG;
const NORMAL = IMessenger::LEVEL_NORMAL;
const MAJOR = IMessenger::LEVEL_MAJOR;
const NONE = IMessenger::LEVEL_NONE;
2023-12-28 11:54:15 +04:00
static function reset_params(?array $params=null): void { static::get()->resetParams($params); }
static function section($content, ?int $level=null): void { static::get()->section($content, $level); }
static function title($content, ?int $level=null): void { static::get()->title($content, $level); }
static function desc($content, ?int $level=null): void { static::get()->desc($content, $level); }
static function action($content, ?int $level=null): void { static::get()->action($content, $level); }
static function step($content, ?int $level=null): void { static::get()->step($content, $level); }
static function asuccess($content=null): void { static::get()->asuccess($content); }
static function afailure($content=null): void { static::get()->afailure($content); }
static function adone($content=null): void { static::get()->adone($content); }
static function print($content, ?int $level=null): void { static::get()->print($content, $level); }
static function info($content, ?int $level=null): void { static::get()->info($content, $level); }
static function note($content, ?int $level=null): void { static::get()->note($content, $level); }
static function warn($content, ?int $level=null): void { static::get()->warn($content, $level); }
static function error($content, ?int $level=null): void { static::get()->error($content, $level); }
static function debug($content): void { self::info($content, self::DEBUG);}
static function important($content): void { self::info($content, self::MAJOR);}
static function attention($content): void { self::note($content, self::MAJOR);}
static function critwarn($content): void { self::warn($content, self::MAJOR);}
static function criterror($content): void { self::error($content, self::MAJOR);}
static function end(bool $all=false): void { static::get()->end($all); }
2023-12-27 11:38:43 +04:00
}