diff --git a/.idea/nur-ture.iml b/.idea/nur-ture.iml
index 34c43ad..ae13f26 100644
--- a/.idea/nur-ture.iml
+++ b/.idea/nur-ture.iml
@@ -7,6 +7,7 @@
+
diff --git a/composer.json b/composer.json
index d7ac199..26d537f 100644
--- a/composer.json
+++ b/composer.json
@@ -19,7 +19,6 @@
},
"require-dev": {
"nulib/php": "^7.4-dev",
- "nulib/yaml": "^7.4-dev",
"nulib/spout": "^7.4-dev",
"nulib/phpss": "^7.4-dev",
"nulib/tests": "^7.4",
@@ -53,6 +52,7 @@
},
"autoload": {
"psr-4": {
+ "nulib\\": "src_glue",
"nur\\sery\\wip\\": "src",
"nur\\sery\\": "src_app",
"nur\\": "nur_src"
diff --git a/composer.lock b/composer.lock
index eef96bd..97ddb42 100644
--- a/composer.lock
+++ b/composer.lock
@@ -4,7 +4,7 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
- "content-hash": "fd786c1eb69e14f16916905711daf8ca",
+ "content-hash": "ff7940a16992c5de7cd4078864ed2e95",
"packages": [],
"packages-dev": [
{
@@ -510,10 +510,12 @@
"source": {
"type": "git",
"url": "https://git.univ-reunion.fr/sda-php/nulib.git",
- "reference": "325391d60c2ed3a6ead71992d98aa2ce205bd293"
+ "reference": "3958b8f11d16d7a4c17feb415b9158425608112a"
},
"require": {
- "php": "^7.4"
+ "ext-json": "*",
+ "php": "^7.4",
+ "symfony/yaml": "^5.0"
},
"require-dev": {
"ext-curl": "*",
@@ -545,7 +547,7 @@
}
],
"description": "fonctions et classes essentielles",
- "time": "2024-11-28T16:58:43+00:00"
+ "time": "2024-11-29T04:40:10+00:00"
},
{
"name": "nulib/phpss",
@@ -595,7 +597,7 @@
"source": {
"type": "git",
"url": "https://git.univ-reunion.fr/sda-php/nulib-spout.git",
- "reference": "9f2bc810e487949528045676fe36ba64b96144d1"
+ "reference": "d416e6799b9716d254e0cb7b31724e9e2f75d47d"
},
"require": {
"ext-dom": "*",
@@ -641,7 +643,7 @@
}
],
"description": "wrapper pour openspout/openspout",
- "time": "2024-11-28T16:39:08+00:00"
+ "time": "2024-11-28T17:36:37+00:00"
},
{
"name": "nulib/tests",
@@ -675,49 +677,6 @@
"description": "fonctions et classes pour les tests",
"time": "2024-03-26T10:56:17+00:00"
},
- {
- "name": "nulib/yaml",
- "version": "dev-master",
- "source": {
- "type": "git",
- "url": "https://git.univ-reunion.fr/sda-php/nulib-yaml.git",
- "reference": "b53fa6512e8ce20f6afe42a7ca6caf20da220f76"
- },
- "require": {
- "ext-json": "*",
- "nulib/php": "^7.4-dev",
- "php": "^7.4",
- "symfony/yaml": "^5.0"
- },
- "require-dev": {
- "nulib/tests": "^7.4"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "7.4.x-dev",
- "dev-php82": "8.2.x-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "nulib\\ext\\": "src"
- }
- },
- "autoload-dev": {
- "psr-4": {
- "nulib\\ext\\": "tests"
- }
- },
- "authors": [
- {
- "name": "Jephte Clain",
- "email": "Jephte.Clain@univ-reunion.fr"
- }
- ],
- "description": "Support YAML et JSON",
- "time": "2024-11-28T16:04:34+00:00"
- },
{
"name": "phar-io/manifest",
"version": "2.0.4",
@@ -2893,7 +2852,6 @@
"minimum-stability": "stable",
"stability-flags": {
"nulib/php": 20,
- "nulib/yaml": 20,
"nulib/spout": 20,
"nulib/phpss": 20
},
diff --git a/src_app/app/cli/include-launcher.php b/src_app/app/cli/include-launcher.php
deleted file mode 100644
index 8d36ec7..0000000
--- a/src_app/app/cli/include-launcher.php
+++ /dev/null
@@ -1,29 +0,0 @@
- $name,
- ]);
- require $app;
-}
diff --git a/src_app/tools/BgLauncherApp.php b/src_app/tools/BgLauncherApp.php
deleted file mode 100644
index 449a411..0000000
--- a/src_app/tools/BgLauncherApp.php
+++ /dev/null
@@ -1,124 +0,0 @@
- "lancer un script en tâche de fond",
- "usage" => "ApplicationClass args...",
-
- "sections" => [
- parent::VERBOSITY_SECTION,
- ],
-
- ["-i", "--infos", "name" => "action", "value" => self::ACTION_INFOS,
- "help" => "Afficher des informations sur la tâche",
- ],
- ["-s", "--start", "name" => "action", "value" => self::ACTION_START,
- "help" => "Démarrer la tâche",
- ],
- ["-k", "--stop", "name" => "action", "value" => self::ACTION_STOP,
- "help" => "Arrêter la tâche",
- ],
- ];
-
- protected int $action = self::ACTION_START;
-
- protected ?array $args = null;
-
- static function show_infos(RunFile $runfile, ?int $level=null): void {
- msg::print($runfile->getDesc(), $level);
- msg::print(yaml::with(["data" => $runfile->read()]), ($level ?? 0) - 1);
- }
-
- function main() {
- $args = $this->args;
-
- $appClass = $args[0] ?? null;
- if ($appClass === null) {
- self::die("Vous devez spécifier la classe de l'application");
- }
- $appClass = $args[0] = str_replace("/", "\\", $appClass);
- if (!class_exists($appClass)) {
- self::die("$appClass: classe non trouvée");
- }
-
- $useRunfile = constant("$appClass::USE_RUNFILE");
- if (!$useRunfile) {
- self::die("Cette application ne supporte le lancement en tâche de fond");
- }
-
- $runfile = app::with($appClass)->getRunfile();
- switch ($this->action) {
- case self::ACTION_START:
- $argc = count($args);
- $appClass::_manage_runfile($argc, $args, $runfile);
- if ($runfile->warnIfLocked()) self::exit(app::EC_LOCKED);
- array_splice($args, 0, 0, [
- PHP_BINARY,
- path::abspath(NULIB_APP_app_launcher),
- ]);
- app::params_putenv();
- self::_start($args, $runfile);
- break;
- case self::ACTION_STOP:
- self::_stop($runfile);
- self::show_infos($runfile, -1);
- break;
- case self::ACTION_INFOS:
- self::show_infos($runfile);
- break;
- }
- }
-
- public static function _start(array $args, Runfile $runfile): void {
- $pid = pcntl_fork();
- if ($pid == -1) {
- # parent, impossible de forker
- throw new ExitError(app::EC_FORK_PARENT, "Unable to fork");
- } elseif (!$pid) {
- # child, fork ok
- $runfile->wfPrepare($pid);
- $outfile = $runfile->getOutfile() ?? "/tmp/NULIB_APP_app_console.out";
- $exitcode = app::EC_FORK_CHILD;
- try {
- # rediriger STDIN, STDOUT et STDERR
- fclose(fopen($outfile, "wb")); // vider le fichier
- fclose(STDIN); $in = fopen("/dev/null", "rb");
- fclose(STDOUT); $out = fopen($outfile, "ab");
- fclose(STDERR); $err = fopen($outfile, "ab");
- # puis lancer la commande
- $cmd = new Cmd($args);
- $cmd->addSource("/g/init.env");
- $cmd->addRedir("both", $outfile, true);
- $cmd->fork_exec($exitcode, false);
- sh::_waitpid(-$pid, $exitcode);
- } finally {
- $runfile->wfReaped($exitcode);
- }
- }
- }
-
- public static function _stop(Runfile $runfile): bool {
- $data = $runfile->read();
- $pid = $runfile->_getCid($data);
- msg::action("stop $pid");
- if ($runfile->wfKill($reason)) {
- msg::asuccess();
- return true;
- } else {
- msg::afailure($reason);
- return false;
- }
- }
-}
diff --git a/src_app/tools/SteamTrainApp.php b/src_app/tools/SteamTrainApp.php
deleted file mode 100644
index 2d5688a..0000000
--- a/src_app/tools/SteamTrainApp.php
+++ /dev/null
@@ -1,53 +0,0 @@
- self::TITLE,
- "description" => << 1,
- "help" => "spécifier le nombre d'étapes",
- ],
- ["-f", "--force-enabled", "value" => true,
- "help" => "lancer la commande même si les tâches planifiées sont désactivées",
- ],
- ["-n", "--no-install-signal-handler", "value" => false,
- "help" => "ne pas installer le gestionnaire de signaux",
- ],
- ];
-
- protected $count = 100;
-
- protected bool $forceEnabled = false;
-
- protected bool $installSignalHandler = true;
-
- function main() {
- app::check_bgapplication_enabled($this->forceEnabled);
- if ($this->installSignalHandler) app::install_signal_handler();
- $count = intval($this->count);
- msg::info("Starting train for ".words::q($count, "step#s"));
- app::action("Running train...", $count);
- for ($i = 1; $i <= $count; $i++) {
- msg::print("Tchou-tchou! x $i");
- app::step();
- sleep(1);
- }
- msg::info("Stopping train at ".new DateTime());
- }
-}
diff --git a/src_glue/app.php b/src_glue/app.php
new file mode 100644
index 0000000..5247674
--- /dev/null
+++ b/src_glue/app.php
@@ -0,0 +1,5 @@
+"$destdir/$destname"
- [ -n "$mode" ] && chmod "$mode" "$destdir/$destname"
-done
diff --git a/support/template-.launcher.php b/support/template-.launcher.php
deleted file mode 100644
index d67df53..0000000
--- a/support/template-.launcher.php
+++ /dev/null
@@ -1,12 +0,0 @@
-# TODO Faire une copie de ce script dans un répertoire de l'application web
-# (dans le répertoire _cli/ par défaut) et modifier les paramètres si nécessaire
-#-------------------------------------------------------------------------------
- __DIR__ . '/..',
- "appcode" => \app\config\bootstrap::APPCODE,
-];
-require __DIR__.'/../vendor/nur/ture/src_app/app/cli/include-launcher.php';
diff --git a/support/template-_bg_launcher.php b/support/template-_bg_launcher.php
deleted file mode 100644
index da053c2..0000000
--- a/support/template-_bg_launcher.php
+++ /dev/null
@@ -1,18 +0,0 @@
-# TODO Faire une copie de ce script dans un répertoire de l'application web
-# (dans le répertoire sbin/ par défaut) et modifier les paramètres si nécessaire
-#-------------------------------------------------------------------------------
- __DIR__.'/..',
- "appcode" => \app\config\bootstrap::APPCODE,
-]);
-BgLauncherApp::run();
diff --git a/support/template-_wrapper.sh b/support/template-_wrapper.sh
deleted file mode 100644
index 22c34f6..0000000
--- a/support/template-_wrapper.sh
+++ /dev/null
@@ -1,132 +0,0 @@
-# TODO Faire une copie de ce script dans un répertoire de l'application web
-# (dans le répertoire _cli/ par défaut) et modifier les paramétres si nécessaire
-#-------------------------------------------------------------------------------
-#!/bin/bash
-# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
-# S'assurer que le script PHP est lancé avec l'utilisateur www-data
-# Tous les chemins suivants sont relatifs au répertoire qui contient ce script
-
-# Chemin relatif de la racine du projet
-PROJPATH=..
-
-# Chemin relatif vers le lanceur PHP
-LAUNCHERPATH=.launcher.php
-
-# Chemin relatif des scripts PHP wrappés
-WRAPPEDPATH=
-
-# Nom du service dans docker-compose.yml utilisé pour lancer les commandes
-COMPOSE_SERVICE=web
-
-###############################################################################
-
-case "${RUNPHP_MODE:-auto}" in
-auto)
- RUNPHP_MODE=
- [ -f /.dockerenv ] && RUNPHP_MODE=docker
- [ -z "$RUNPHP_MODE" ] &&
- [ -f /proc/self/mountinfo ] &&
- grep -q ' /docker/' /proc/self/mountinfo &&
- RUNPHP_MODE=docker
- [ -z "$RUNPHP_MODE" ] &&
- [ -f /proc/1/cgroup ] &&
- grep -q ':/docker/' /proc/1/cgroup &&
- RUNPHP_MODE=docker
- [ -n "$RUNPHP_MODE" ] || RUNPHP_MODE=host
- ;;
-docker) RUNPHP_MODE=docker;;
-host) RUNPHP_MODE=host;;
-direct) RUNPHP_MODE=direct;;
-*) RUNPHP_MODE=host;;
-esac
-
-MYDIR="$(dirname -- "$0")"
-MYNAME="$(basename -- "$0")"
-if [ ! -L "$0" ]; then
- echo "\
-$0
-Ce script doit être lancé en tant que lien symbolique avec un nom de la forme
-'monscript.php' et lance le script PHP du même nom situé dans le même répertoire
-avec l'utilisateur www-data"
-
- if [ "$RUNPHP_MODE" == host -o "$RUNPHP_MODE" == direct ]; then
- echo "\
-----------------------------------------
-Vérification des liens..."
- cd "$MYDIR"
- for i in *.php*; do
- [ -f "$i" ] || continue
- name="bin/${i%.*}.php"
- dest="../_cli/_wrapper.sh"
- link="../bin/${i%.*}.php"
- if [ -L "$link" ]; then
- echo "* $name OK"
- elif [ -e "$link" ]; then
- echo "* $name KO (not a link)"
- else
- echo "* $name NEW"
- ln -s "$dest" "$link" || exit 1
- fi
- done
- fi
- exit 0
-fi
-
-MYTRUESELF="$(readlink -f "$0")"
-MYTRUEDIR="$(dirname -- "$MYTRUESELF")"
-PROJDIR="$(cd "$MYTRUEDIR${PROJPATH:+/$PROJPATH}"; pwd)"
-
-if [ "$RUNPHP_MODE" == host ]; then
- args=(
- docker compose run
- ${RUNPHP_BUILD:+--build}
- --rm
- )
- cwd="$(pwd)"
- mounted=
- if [ "$PROJDIR" == "$HOME" -o "${PROJDIR#$HOME/}" != "$PROJDIR" ]; then
- # monter HOME
- args+=(-v "$HOME:$HOME")
- [ "${cwd#$HOME/}" != "$cwd" ] && mounted=1
- else
- # monter uniquement le répertoire du projet
- args+=(-v "$PROJDIR:$PROJDIR")
- [ "${cwd#$PROJDIR/}" != "$cwd" ] && mounted=1
- fi
- if [ -z "$mounted" ]; then
- echo "Impossible de mapper le répertoire courant avec les montages du container"
- exit 1
- fi
- args+=(
- --workdir "$cwd"
- "$COMPOSE_SERVICE"
- exec "$MYNAME"
- "$@"
- )
- cd "$PROJDIR"
- exec "${args[@]}"
-fi
-
-launcher="$MYTRUEDIR/$LAUNCHERPATH"
-class="$MYTRUEDIR${WRAPPEDPATH:+/$WRAPPEDPATH}/${MYNAME%.php}.phpc"
-script="$MYTRUEDIR${WRAPPEDPATH:+/$WRAPPEDPATH}/${MYNAME%.php}.php"
-
-[ -f /g/init.env ] && source /g/init.env
-
-www_data="${DEVUSER_USERENT%%:*}"
-[ -n "$www_data" ] || www_data=www-data
-
-cmd=(php "$launcher")
-[ -n "$MEMPROF_PROFILE" ] && cmd+=(-dextension=memprof.so)
-if [ -f "$class" ]; then
- cmd+=("$(<"$class")")
-else
- cmd+=("$script")
-fi
-cmd+=("$@")
-
-if [ "$(id -u)" -eq 0 ]; then
- su-exec "$www_data" "${cmd[@]}"
-else
- exec "${cmd[@]}"
-fi