modifs.mineures sans commentaires

This commit is contained in:
Jephté Clain 2025-10-03 02:08:29 +04:00
parent efb7901498
commit 58af45cc99
5 changed files with 103 additions and 94 deletions

View File

@ -28,7 +28,7 @@ class app {
"class" => $class, "class" => $class,
"projdir" => $app::PROJDIR, "projdir" => $app::PROJDIR,
"vendor" => $app::VENDOR, "vendor" => $app::VENDOR,
"appcode" => $app::APPCODE, "projcode" => $app::PROJCODE,
"datadir" => $app::DATADIR, "datadir" => $app::DATADIR,
"etcdir" => $app::ETCDIR, "etcdir" => $app::ETCDIR,
"vardir" => $app::VARDIR, "vardir" => $app::VARDIR,
@ -43,7 +43,7 @@ class app {
"class" => $class, "class" => $class,
"projdir" => constant("$app::PROJDIR"), "projdir" => constant("$app::PROJDIR"),
"vendor" => constant("$app::VENDOR"), "vendor" => constant("$app::VENDOR"),
"appcode" => constant("$app::APPCODE"), "projcode" => constant("$app::PROJCODE"),
"datadir" => constant("$app::DATADIR"), "datadir" => constant("$app::DATADIR"),
"etcdir" => constant("$app::ETCDIR"), "etcdir" => constant("$app::ETCDIR"),
"vardir" => constant("$app::VARDIR"), "vardir" => constant("$app::VARDIR"),
@ -75,7 +75,7 @@ class app {
A::merge($params, cl::select($proj_params, [ A::merge($params, cl::select($proj_params, [
"projdir", "projdir",
"vendor", "vendor",
"appcode", "projcode",
"cwd", "cwd",
"datadir", "datadir",
"etcdir", "etcdir",
@ -156,7 +156,7 @@ class app {
[ [
"projdir" => $projdir, "projdir" => $projdir,
"vendor" => $vendor, "vendor" => $vendor,
"appcode" => $appcode, "projcode" => $projcode,
"datadir" => $datadir, "datadir" => $datadir,
"etcdir" => $etcdir, "etcdir" => $etcdir,
"vardir" => $vardir, "vardir" => $vardir,
@ -187,32 +187,32 @@ class app {
$vendor = $params["vendor"] ?? self::DEFAULT_VENDOR; $vendor = $params["vendor"] ?? self::DEFAULT_VENDOR;
$vendor["bindir"] = path::reljoin($projdir, $vendor["bindir"]); $vendor["bindir"] = path::reljoin($projdir, $vendor["bindir"]);
$vendor["autoload"] = path::reljoin($projdir, $vendor["autoload"]); $vendor["autoload"] = path::reljoin($projdir, $vendor["autoload"]);
# appcode # projcode
$appcode = $params["appcode"] ?? null; $projcode = $params["projcode"] ?? null;
if ($appcode === null) { if ($projcode === null) {
$appcode = str::without_suffix("-app", path::basename($projdir)); $projcode = str::without_suffix("-app", path::basename($projdir));
} }
$APPCODE = str_replace("-", "_", strtoupper($appcode)); $PROJCODE = str_replace("-", "_", strtoupper($projcode));
# cwd # cwd
$cwd = $params["cwd"] ?? null; $cwd = $params["cwd"] ?? null;
# datadir # datadir
$datadir = getenv("${APPCODE}_DATADIR"); $datadir = getenv("${PROJCODE}_DATADIR");
$datadirIsDefined = $datadir !== false; $datadirIsDefined = $datadir !== false;
if ($datadir === false) $datadir = $params["datadir"] ?? null; if ($datadir === false) $datadir = $params["datadir"] ?? null;
if ($datadir === null) $datadir = "devel"; if ($datadir === null) $datadir = "devel";
$datadir = path::reljoin($projdir, $datadir); $datadir = path::reljoin($projdir, $datadir);
# etcdir # etcdir
$etcdir = getenv("${APPCODE}_ETCDIR"); $etcdir = getenv("${PROJCODE}_ETCDIR");
if ($etcdir === false) $etcdir = $params["etcdir"] ?? null; if ($etcdir === false) $etcdir = $params["etcdir"] ?? null;
if ($etcdir === null) $etcdir = "etc"; if ($etcdir === null) $etcdir = "etc";
$etcdir = path::reljoin($datadir, $etcdir); $etcdir = path::reljoin($datadir, $etcdir);
# vardir # vardir
$vardir = getenv("${APPCODE}_VARDIR"); $vardir = getenv("${PROJCODE}_VARDIR");
if ($vardir === false) $vardir = $params["vardir"] ?? null; if ($vardir === false) $vardir = $params["vardir"] ?? null;
if ($vardir === null) $vardir = "var"; if ($vardir === null) $vardir = "var";
$vardir = path::reljoin($datadir, $vardir); $vardir = path::reljoin($datadir, $vardir);
# logdir # logdir
$logdir = getenv("${APPCODE}_LOGDIR"); $logdir = getenv("${PROJCODE}_LOGDIR");
if ($logdir === false) $logdir = $params["logdir"] ?? null; if ($logdir === false) $logdir = $params["logdir"] ?? null;
if ($logdir === null) $logdir = "log"; if ($logdir === null) $logdir = "log";
$logdir = path::reljoin($datadir, $logdir); $logdir = path::reljoin($datadir, $logdir);
@ -222,7 +222,7 @@ class app {
# profile # profile
$this->profileManager = new ProfileManager([ $this->profileManager = new ProfileManager([
"app" => true, "app" => true,
"name" => $appcode, "name" => $projcode,
"default_profile" => $datadirIsDefined? "prod": "devel", "default_profile" => $datadirIsDefined? "prod": "devel",
"profile" => $params["profile"] ?? null, "profile" => $params["profile"] ?? null,
]); ]);
@ -233,7 +233,7 @@ class app {
$this->projdir = $projdir; $this->projdir = $projdir;
$this->vendor = $vendor; $this->vendor = $vendor;
$this->appcode = $appcode; $this->projcode = $projcode;
$this->cwd = $cwd; $this->cwd = $cwd;
$this->datadir = $datadir; $this->datadir = $datadir;
$this->etcdir = $etcdir; $this->etcdir = $etcdir;
@ -244,13 +244,14 @@ class app {
$appgroup = $params["appgroup"] ?? null; $appgroup = $params["appgroup"] ?? null;
$name = $params["name"] ?? $params["class"] ?? null; $name = $params["name"] ?? $params["class"] ?? null;
if ($name === null) { if ($name === null) {
$name = $appcode; $name = $projcode;
} else { } else {
# si $name est une classe, enlever le package et normaliser i.e # si $name est une classe, enlever le package et normaliser i.e
# my\package\MyApplication --> my-application # my\package\MyApplication --> my-application.php
$name = preg_replace('/.*\\\\/', "", $name); $name = preg_replace('/.*\\\\/', "", $name);
$name = str::camel2us($name, false, "-"); $name = str::camel2us($name, false, "-");
$name = str::without_suffix("-app", $name); $name = str::without_suffix("-app", $name);
$name .= ".php";
} }
$this->appgroup = $appgroup; $this->appgroup = $appgroup;
$this->name = $name; $this->name = $name;
@ -277,10 +278,10 @@ class app {
return $this->vendor["autoload"]; return $this->vendor["autoload"];
} }
protected string $appcode; protected string $projcode;
function getAppcode(): string { function getProjcode(): string {
return $this->appcode; return $this->projcode;
} }
protected string $cwd; protected string $cwd;
@ -432,7 +433,7 @@ class app {
return [ return [
"projdir" => $this->projdir, "projdir" => $this->projdir,
"vendor" => $this->vendor, "vendor" => $this->vendor,
"appcode" => $this->appcode, "projcode" => $this->projcode,
"cwd" => $this->cwd, "cwd" => $this->cwd,
"datadir" => $this->datadir, "datadir" => $this->datadir,
"etcdir" => $this->etcdir, "etcdir" => $this->etcdir,

View File

@ -14,7 +14,6 @@ use nulib\output\console;
use nulib\output\log; use nulib\output\log;
use nulib\output\msg; use nulib\output\msg;
use nulib\output\std\StdMessenger; use nulib\output\std\StdMessenger;
use nulib\ValueException;
/** /**
* Class Application: application de base * Class Application: application de base
@ -34,13 +33,13 @@ abstract class Application {
/** /**
* @var string code du projet, utilisé pour dériver le noms de certains des * @var string code du projet, utilisé pour dériver le noms de certains des
* paramètres extraits de l'environnement, e.g XXX_YYY_DATADIR si le projet a * paramètres extraits de l'environnement, e.g MY_APP_DATADIR si le projet a
* pour code xxx-yyy * pour code my-app
* *
* si non définie, cette valeur est calculée automatiquement à partir de * si non définie, cette valeur est calculée automatiquement à partir de
* self::PROJDIR sans le suffixe "-app" * self::PROJDIR sans le suffixe "-app"
*/ */
const APPCODE = null; const PROJCODE = null;
/** /**
* @var string|null identifiant d'un groupe auquel l'application appartient. * @var string|null identifiant d'un groupe auquel l'application appartient.
@ -245,7 +244,7 @@ EOT);
} }
const PROFILE_SECTION = [ const PROFILE_SECTION = [
"title" => "PROFILS D'EXECUTION", "title" => "PROFIL D'EXECUTION",
"show" => false, "show" => false,
["group", ["group",
["-p", "--profile", "--app-profile", ["-p", "--profile", "--app-profile",
@ -265,79 +264,27 @@ EOT);
["group", ["group",
["--verbosity", ["--verbosity",
"args" => "verbosity", "argsdesc" => "silent|quiet|verbose|debug", "args" => "verbosity", "argsdesc" => "silent|quiet|verbose|debug",
"action" => [null, "set_application_verbosity"], "action" => [console::class, "set_verbosity"],
"help" => "spécifier le niveau d'informations affiché", "help" => "spécifier le niveau d'informations affiché",
], ],
["-q", "--quiet", "action" => [null, "set_application_verbosity", "quiet"]], ["-q", "--quiet", "action" => [console::class, "set_verbosity", "quiet"]],
["-v", "--verbose", "action" => [null, "set_application_verbosity", "verbose"]], ["-v", "--verbose", "action" => [console::class, "set_verbosity", "verbose"]],
["-D", "--debug", "action" => [null, "set_application_verbosity", "debug"]], ["-D", "--debug", "action" => [console::class, "set_verbosity", "debug"]],
], ],
["-L", "--logfile", ["-L", "--logfile",
"args" => "output", "args" => "output",
"action" => [null, "set_application_log_output"], "action" => [log::class, "set_output"],
"help" => "Logger les messages de l'application dans le fichier spécifié", "help" => "Logger les messages de l'application dans le fichier spécifié",
], ],
["group", ["group",
["--color", ["--color",
"action" => [null, "set_application_color", true], "action" => [console::class, "set_color", true],
"help" => "Afficher (resp. ne pas afficher) la sortie en couleur par défaut", "help" => "Afficher (resp. ne pas afficher) la sortie en couleur par défaut",
], ],
["--no-color", "action" => [null, "set_application_color", false]], ["--no-color", "action" => [console::class, "set_color", false]],
], ],
]; ];
static function set_application_verbosity(string $verbosity): void {
$console = console::get();
switch ($verbosity) {
case "Q":
case "silent":
$console->resetParams([
"min_level" => msg::NONE,
]);
break;
case "q":
case "quiet":
$console->resetParams([
"min_level" => msg::MAJOR,
]);
break;
case "n":
case "normal":
$console->resetParams([
"min_level" => msg::NORMAL,
]);
break;
case "v":
case "verbose":
$console->resetParams([
"min_level" => msg::MINOR,
]);
break;
case "D":
case "debug":
app::set_debug();
$console->resetParams([
"min_level" => msg::DEBUG,
]);
break;
default:
throw ValueException::invalid_value($verbosity, "verbosity");
}
}
static function set_application_log_output(string $logfile): void {
log::create_or_reset_params([
"output" => $logfile,
], StdMessenger::class, [
"add_date" => true,
"min_level" => log::MINOR,
]);
}
static function set_application_color(bool $color): void {
console::reset_params([
"color" => $color,
]);
}
const ARGS = [ const ARGS = [
"sections" => [ "sections" => [
self::PROFILE_SECTION, self::PROFILE_SECTION,

View File

@ -1,7 +1,10 @@
<?php <?php
namespace nulib\output; namespace nulib\output;
use nulib\app\app;
use nulib\output\std\ProxyMessenger; use nulib\output\std\ProxyMessenger;
use nulib\output\std\StdMessenger;
use nulib\ValueException;
/** /**
* Class console: afficher un message sur la console * Class console: afficher un message sur la console
@ -25,4 +28,49 @@ class console extends _messenger {
static function get(): IMessenger { static function get(): IMessenger {
return self::$msg ??= new ProxyMessenger(); return self::$msg ??= new ProxyMessenger();
} }
static function set_verbosity(string $verbosity): void {
$console = self::get();
switch ($verbosity) {
case "Q":
case "silent":
$console->resetParams([
"min_level" => msg::NONE,
]);
break;
case "q":
case "quiet":
$console->resetParams([
"min_level" => msg::MAJOR,
]);
break;
case "n":
case "normal":
$console->resetParams([
"min_level" => msg::NORMAL,
]);
break;
case "v":
case "verbose":
$console->resetParams([
"min_level" => msg::MINOR,
]);
break;
case "D":
case "debug":
app::set_debug();
$console->resetParams([
"min_level" => msg::DEBUG,
]);
break;
default:
throw ValueException::invalid_value($verbosity, "verbosity");
}
}
static function set_color(bool $color=true): void {
console::reset_params([
"color" => $color,
]);
}
} }

View File

@ -2,6 +2,7 @@
namespace nulib\output; namespace nulib\output;
use nulib\output\std\ProxyMessenger; use nulib\output\std\ProxyMessenger;
use nulib\output\std\StdMessenger;
/** /**
* Class log: inscrire un message dans les logs uniquement * Class log: inscrire un message dans les logs uniquement
@ -25,4 +26,13 @@ class log extends _messenger {
static function get(): IMessenger { static function get(): IMessenger {
return self::$msg ??= new ProxyMessenger(); return self::$msg ??= new ProxyMessenger();
} }
static function set_output(string $logfile): void {
self::create_or_reset_params([
"output" => $logfile,
], StdMessenger::class, [
"add_date" => true,
"min_level" => self::MINOR,
]);
}
} }

View File

@ -2,25 +2,28 @@
<?php <?php
require __DIR__.'/../vendor/autoload.php'; require __DIR__.'/../vendor/autoload.php';
use lib\mail\mailer; use nulib\app\cli\Application;
use nur\cli\Application; use nulib\mail\mailer;
use nulib\ValueException;
Application::run(new class extends Application { Application::run(new class extends Application {
const ARGS = [ const ARGS = [
"usage" => "SUBJECT BODY -t RECIPIENT",
"merge" => parent::ARGS, "merge" => parent::ARGS,
["-t", "--to", "args" => 1, "action" => "--add", "name" => "to"], ["-F", "--from", "args" => 1, "name" => "from", "argsdesc" => "MAILFROM"],
["-c", "--cc", "args" => 1, "action" => "--add", "name" => "cc"], ["-t", "--to", "args" => 1, "action" => "--add", "name" => "to", "argsdesc" => "RECIPIENT"],
["-b", "--bcc", "args" => 1, "action" => "--add", "name" => "bcc"], ["-c", "--cc", "args" => 1, "action" => "--add", "name" => "cc", "argsdesc" => "RECIPIENT"],
["-F", "--from", "args" => 1, "name" => "from"], ["-b", "--bcc", "args" => 1, "action" => "--add", "name" => "bcc", "argsdesc" => "RECIPIENT"],
["args" => 2, "name" => "args"], ["args" => 2, "name" => "args"],
]; ];
protected $to, $cc, $bcc, $from; protected $to, $cc, $bcc, $from;
protected $args;
function main() { function main() {
$subject = $this->args[0]; $subject = $this->args[0] ?? null;
$body = $this->args[1]; ValueException::check_null($subject, "subject");
$body = $this->args[1] ?? null;
ValueException::check_null($body, "body");
mailer::send($this->to, $subject, $body, $this->cc, $this->bcc, $this->from); mailer::send($this->to, $subject, $body, $this->cc, $this->bcc, $this->from);
} }
}); });