diff --git a/php/src/app/app.php b/php/src/app/app.php index 9242de1..9781202 100644 --- a/php/src/app/app.php +++ b/php/src/app/app.php @@ -28,7 +28,7 @@ class app { "class" => $class, "projdir" => $app::PROJDIR, "vendor" => $app::VENDOR, - "appcode" => $app::APPCODE, + "projcode" => $app::PROJCODE, "datadir" => $app::DATADIR, "etcdir" => $app::ETCDIR, "vardir" => $app::VARDIR, @@ -43,7 +43,7 @@ class app { "class" => $class, "projdir" => constant("$app::PROJDIR"), "vendor" => constant("$app::VENDOR"), - "appcode" => constant("$app::APPCODE"), + "projcode" => constant("$app::PROJCODE"), "datadir" => constant("$app::DATADIR"), "etcdir" => constant("$app::ETCDIR"), "vardir" => constant("$app::VARDIR"), @@ -75,7 +75,7 @@ class app { A::merge($params, cl::select($proj_params, [ "projdir", "vendor", - "appcode", + "projcode", "cwd", "datadir", "etcdir", @@ -156,7 +156,7 @@ class app { [ "projdir" => $projdir, "vendor" => $vendor, - "appcode" => $appcode, + "projcode" => $projcode, "datadir" => $datadir, "etcdir" => $etcdir, "vardir" => $vardir, @@ -187,32 +187,32 @@ class app { $vendor = $params["vendor"] ?? self::DEFAULT_VENDOR; $vendor["bindir"] = path::reljoin($projdir, $vendor["bindir"]); $vendor["autoload"] = path::reljoin($projdir, $vendor["autoload"]); - # appcode - $appcode = $params["appcode"] ?? null; - if ($appcode === null) { - $appcode = str::without_suffix("-app", path::basename($projdir)); + # projcode + $projcode = $params["projcode"] ?? null; + if ($projcode === null) { + $projcode = str::without_suffix("-app", path::basename($projdir)); } - $APPCODE = str_replace("-", "_", strtoupper($appcode)); + $PROJCODE = str_replace("-", "_", strtoupper($projcode)); # cwd $cwd = $params["cwd"] ?? null; # datadir - $datadir = getenv("${APPCODE}_DATADIR"); + $datadir = getenv("${PROJCODE}_DATADIR"); $datadirIsDefined = $datadir !== false; if ($datadir === false) $datadir = $params["datadir"] ?? null; if ($datadir === null) $datadir = "devel"; $datadir = path::reljoin($projdir, $datadir); # etcdir - $etcdir = getenv("${APPCODE}_ETCDIR"); + $etcdir = getenv("${PROJCODE}_ETCDIR"); if ($etcdir === false) $etcdir = $params["etcdir"] ?? null; if ($etcdir === null) $etcdir = "etc"; $etcdir = path::reljoin($datadir, $etcdir); # vardir - $vardir = getenv("${APPCODE}_VARDIR"); + $vardir = getenv("${PROJCODE}_VARDIR"); if ($vardir === false) $vardir = $params["vardir"] ?? null; if ($vardir === null) $vardir = "var"; $vardir = path::reljoin($datadir, $vardir); # logdir - $logdir = getenv("${APPCODE}_LOGDIR"); + $logdir = getenv("${PROJCODE}_LOGDIR"); if ($logdir === false) $logdir = $params["logdir"] ?? null; if ($logdir === null) $logdir = "log"; $logdir = path::reljoin($datadir, $logdir); @@ -222,7 +222,7 @@ class app { # profile $this->profileManager = new ProfileManager([ "app" => true, - "name" => $appcode, + "name" => $projcode, "default_profile" => $datadirIsDefined? "prod": "devel", "profile" => $params["profile"] ?? null, ]); @@ -233,7 +233,7 @@ class app { $this->projdir = $projdir; $this->vendor = $vendor; - $this->appcode = $appcode; + $this->projcode = $projcode; $this->cwd = $cwd; $this->datadir = $datadir; $this->etcdir = $etcdir; @@ -244,13 +244,14 @@ class app { $appgroup = $params["appgroup"] ?? null; $name = $params["name"] ?? $params["class"] ?? null; if ($name === null) { - $name = $appcode; + $name = $projcode; } else { # 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 = str::camel2us($name, false, "-"); $name = str::without_suffix("-app", $name); + $name .= ".php"; } $this->appgroup = $appgroup; $this->name = $name; @@ -277,10 +278,10 @@ class app { return $this->vendor["autoload"]; } - protected string $appcode; + protected string $projcode; - function getAppcode(): string { - return $this->appcode; + function getProjcode(): string { + return $this->projcode; } protected string $cwd; @@ -432,7 +433,7 @@ class app { return [ "projdir" => $this->projdir, "vendor" => $this->vendor, - "appcode" => $this->appcode, + "projcode" => $this->projcode, "cwd" => $this->cwd, "datadir" => $this->datadir, "etcdir" => $this->etcdir, diff --git a/php/src/app/cli/Application.php b/php/src/app/cli/Application.php index 5a947aa..679eb09 100644 --- a/php/src/app/cli/Application.php +++ b/php/src/app/cli/Application.php @@ -14,7 +14,6 @@ use nulib\output\console; use nulib\output\log; use nulib\output\msg; use nulib\output\std\StdMessenger; -use nulib\ValueException; /** * 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 - * paramètres extraits de l'environnement, e.g XXX_YYY_DATADIR si le projet a - * pour code xxx-yyy + * paramètres extraits de l'environnement, e.g MY_APP_DATADIR si le projet a + * pour code my-app * * si non définie, cette valeur est calculée automatiquement à partir de * self::PROJDIR sans le suffixe "-app" */ - const APPCODE = null; + const PROJCODE = null; /** * @var string|null identifiant d'un groupe auquel l'application appartient. @@ -245,7 +244,7 @@ EOT); } const PROFILE_SECTION = [ - "title" => "PROFILS D'EXECUTION", + "title" => "PROFIL D'EXECUTION", "show" => false, ["group", ["-p", "--profile", "--app-profile", @@ -265,79 +264,27 @@ EOT); ["group", ["--verbosity", "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é", ], - ["-q", "--quiet", "action" => [null, "set_application_verbosity", "quiet"]], - ["-v", "--verbose", "action" => [null, "set_application_verbosity", "verbose"]], - ["-D", "--debug", "action" => [null, "set_application_verbosity", "debug"]], + ["-q", "--quiet", "action" => [console::class, "set_verbosity", "quiet"]], + ["-v", "--verbose", "action" => [console::class, "set_verbosity", "verbose"]], + ["-D", "--debug", "action" => [console::class, "set_verbosity", "debug"]], ], ["-L", "--logfile", "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é", ], ["group", ["--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", ], - ["--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 = [ "sections" => [ self::PROFILE_SECTION, diff --git a/php/src/output/console.php b/php/src/output/console.php index 0ef8c81..f836620 100644 --- a/php/src/output/console.php +++ b/php/src/output/console.php @@ -1,7 +1,10 @@ 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, + ]); + } } diff --git a/php/src/output/log.php b/php/src/output/log.php index 103727f..2e1d3ec 100644 --- a/php/src/output/log.php +++ b/php/src/output/log.php @@ -2,6 +2,7 @@ namespace nulib\output; use nulib\output\std\ProxyMessenger; +use nulib\output\std\StdMessenger; /** * Class log: inscrire un message dans les logs uniquement @@ -25,4 +26,13 @@ class log extends _messenger { static function get(): IMessenger { 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, + ]); + } } diff --git a/php/tbin/mail.php b/php/tbin/sendmail.php similarity index 53% rename from php/tbin/mail.php rename to php/tbin/sendmail.php index eda2794..89f1c01 100755 --- a/php/tbin/mail.php +++ b/php/tbin/sendmail.php @@ -2,25 +2,28 @@ "SUBJECT BODY -t RECIPIENT", "merge" => parent::ARGS, - ["-t", "--to", "args" => 1, "action" => "--add", "name" => "to"], - ["-c", "--cc", "args" => 1, "action" => "--add", "name" => "cc"], - ["-b", "--bcc", "args" => 1, "action" => "--add", "name" => "bcc"], - ["-F", "--from", "args" => 1, "name" => "from"], + ["-F", "--from", "args" => 1, "name" => "from", "argsdesc" => "MAILFROM"], + ["-t", "--to", "args" => 1, "action" => "--add", "name" => "to", "argsdesc" => "RECIPIENT"], + ["-c", "--cc", "args" => 1, "action" => "--add", "name" => "cc", "argsdesc" => "RECIPIENT"], + ["-b", "--bcc", "args" => 1, "action" => "--add", "name" => "bcc", "argsdesc" => "RECIPIENT"], ["args" => 2, "name" => "args"], ]; protected $to, $cc, $bcc, $from; - protected $args; function main() { - $subject = $this->args[0]; - $body = $this->args[1]; + $subject = $this->args[0] ?? null; + 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); } });